From 8395869b2e91560f0bfdaebce21eb200f78ec9b6 Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Fri, 13 Jun 2025 16:46:29 +1200 Subject: [PATCH 1/7] Allow or deny warnings Signed-off-by: Nick Cameron --- rust/kcl-lib/src/execution/annotations.rs | 73 +++++++++++++++++++ rust/kcl-lib/src/execution/exec_ast.rs | 80 ++++++++++++++++++-- rust/kcl-lib/src/execution/fn_call.rs | 22 +++--- rust/kcl-lib/src/execution/kcl_value.rs | 3 +- rust/kcl-lib/src/execution/state.rs | 20 ++++- rust/kcl-lib/src/execution/types.rs | 89 ++++++++++++----------- rust/kcl-lib/src/std/math.rs | 5 +- 7 files changed, 228 insertions(+), 64 deletions(-) diff --git a/rust/kcl-lib/src/execution/annotations.rs b/rust/kcl-lib/src/execution/annotations.rs index 9d0652a71b..c79be2808c 100644 --- a/rust/kcl-lib/src/execution/annotations.rs +++ b/rust/kcl-lib/src/execution/annotations.rs @@ -33,6 +33,21 @@ pub(crate) const IMPL_PRIMITIVE: &str = "primitive"; pub(super) const IMPL_VALUES: [&str; 3] = [IMPL_RUST, IMPL_KCL, IMPL_PRIMITIVE]; pub(crate) const DEPRECATED: &str = "deprecated"; +pub(crate) const WARNINGS: &str = "warnings"; +pub(crate) const WARN_ALLOW: &str = "allow"; +pub(crate) const WARN_DENY: &str = "deny"; +pub(crate) const WARN_UNKNOWN_UNITS: &str = "unknownUnits"; +pub(crate) const WARN_UNKNOWN_ATTR: &str = "unknownAttribute"; +pub(crate) const WARN_MOD_RETURN_VALUE: &str = "moduleReturnValue"; +pub(crate) const WARN_DEPRECATED: &str = "deprecated"; +pub(crate) const WARN_IGNORED_Z_AXIS: &str = "ignoredZAxis"; +pub(super) const WARN_VALUES: [&str; 5] = [ + WARN_UNKNOWN_UNITS, + WARN_UNKNOWN_ATTR, + WARN_MOD_RETURN_VALUE, + WARN_DEPRECATED, + WARN_IGNORED_Z_AXIS, +]; #[derive(Clone, Copy, Eq, PartialEq, Debug, Default)] pub enum Impl { @@ -92,6 +107,64 @@ pub(super) fn expect_ident(expr: &Expr) -> Result<&str, KclError> { ))) } +pub(super) fn many_of( + expr: &Expr, + of: &[&'static str], + source_range: SourceRange, +) -> Result, KclError> { + const UNEXPECTED_MSG: &str = "Unexpected warnings value, expected a name or array of names, e.g., `unknownUnits` or `[unknownUnits, deprecated]`"; + + let values = match expr { + Expr::Name(name) => { + if let Some(name) = name.local_ident() { + vec![*name] + } else { + return Err(KclError::new_semantic(KclErrorDetails::new( + UNEXPECTED_MSG.to_owned(), + vec![expr.into()], + ))); + } + } + Expr::ArrayExpression(e) => { + let mut result = Vec::new(); + for e in &e.elements { + if let Expr::Name(name) = e { + if let Some(name) = name.local_ident() { + result.push(*name); + continue; + } + } + return Err(KclError::new_semantic(KclErrorDetails::new( + UNEXPECTED_MSG.to_owned(), + vec![e.into()], + ))); + } + result + } + _ => { + return Err(KclError::new_semantic(KclErrorDetails::new( + UNEXPECTED_MSG.to_owned(), + vec![expr.into()], + ))) + } + }; + + values + .into_iter() + .map(|v| { + of.iter() + .find(|vv| **vv == v) + .ok_or_else(|| { + KclError::new_semantic(KclErrorDetails::new( + format!("Unexpected warning value: `{v}`; accepted values: {}", of.join(", "),), + vec![source_range], + )) + }) + .map(|v| *v) + }) + .collect::, KclError>>() +} + // Returns the unparsed number literal. pub(super) fn expect_number(expr: &Expr) -> Result { if let Expr::Literal(lit) = expr { diff --git a/rust/kcl-lib/src/execution/exec_ast.rs b/rust/kcl-lib/src/execution/exec_ast.rs index 54219fa3a6..6773f55336 100644 --- a/rust/kcl-lib/src/execution/exec_ast.rs +++ b/rust/kcl-lib/src/execution/exec_ast.rs @@ -67,11 +67,51 @@ impl ExecutorContext { "The standard library can only be skipped at the top level scope of a file", )); } + } else if annotation.name() == Some(annotations::WARNINGS) { + // TODO we should support setting warnings for the whole project, not just one file + if matches!(body_type, BodyType::Root) { + let props = annotations::expect_properties(annotations::WARNINGS, annotation)?; + for p in props { + match &*p.inner.key.name { + annotations::WARN_ALLOW => { + let allowed = annotations::many_of( + &p.inner.value, + &annotations::WARN_VALUES, + annotation.as_source_range(), + )?; + exec_state.mod_local.allowed_warnings = allowed; + } + annotations::WARN_DENY => { + let denied = annotations::many_of( + &p.inner.value, + &annotations::WARN_VALUES, + annotation.as_source_range(), + )?; + exec_state.mod_local.denied_warnings = denied; + } + name => { + return Err(KclError::new_semantic(KclErrorDetails::new( + format!( + "Unexpected warnings key: `{name}`; expected one of `{}`, `{}`", + annotations::WARN_ALLOW, + annotations::WARN_DENY, + ), + vec![annotation.as_source_range()], + ))) + } + } + } + } else { + exec_state.err(CompilationError::err( + annotation.as_source_range(), + "Warnings can only be customized at the top level scope of a file", + )); + } } else { - exec_state.warn(CompilationError::err( - annotation.as_source_range(), - "Unknown annotation", - )); + exec_state.warn( + CompilationError::err(annotation.as_source_range(), "Unknown annotation"), + annotations::WARN_UNKNOWN_ATTR, + ); } } Ok(no_prelude) @@ -685,7 +725,8 @@ impl ExecutorContext { exec_state.warn(CompilationError::err( metadata.source_range, "Imported module has no return value. The last statement of the module must be an expression, usually the Solid.", - )); + ), + annotations::WARN_MOD_RETURN_VALUE); let mut new_meta = vec![metadata.to_owned()]; new_meta.extend(meta); @@ -1237,7 +1278,7 @@ impl Node { format!("{} numbers which have unknown or incompatible units.\nYou can probably fix this error by specifying the units using type ascription, e.g., `len: number(mm)` or `(a * b): number(deg)`.", verb), ); err.tag = crate::errors::Tag::UnknownNumericUnits; - exec_state.warn(err); + exec_state.warn(err, annotations::WARN_UNKNOWN_UNITS); } } } @@ -1728,11 +1769,11 @@ impl Node { #[cfg(test)] mod test { use std::sync::Arc; - use tokio::io::AsyncWriteExt; use super::*; use crate::{ + errors::Severity, exec::UnitType, execution::{parse_execute, ContextType}, ExecutorSettings, UnitLen, @@ -2141,4 +2182,29 @@ c = ((PI * 2) / 3): number(deg) let result = parse_execute(ast).await.unwrap(); assert_eq!(result.exec_state.errors().len(), 2); } + + #[tokio::test(flavor = "multi_thread")] + async fn custom_warning() { + let warn = r#" +a = PI * 2 +"#; + let result = parse_execute(warn).await.unwrap(); + assert_eq!(result.exec_state.errors().len(), 1); + assert_eq!(result.exec_state.errors()[0].severity, Severity::Warning); + + let allow = r#" +@warnings(allow = unknownUnits) +a = PI * 2 +"#; + let result = parse_execute(allow).await.unwrap(); + assert_eq!(result.exec_state.errors().len(), 0); + + let deny = r#" +@warnings(deny = [unknownUnits]) +a = PI * 2 +"#; + let result = parse_execute(deny).await.unwrap(); + assert_eq!(result.exec_state.errors().len(), 1); + assert_eq!(result.exec_state.errors()[0].severity, Severity::Error); + } } diff --git a/rust/kcl-lib/src/execution/fn_call.rs b/rust/kcl-lib/src/execution/fn_call.rs index 5188597f37..c13a11888c 100644 --- a/rust/kcl-lib/src/execution/fn_call.rs +++ b/rust/kcl-lib/src/execution/fn_call.rs @@ -4,6 +4,7 @@ use indexmap::IndexMap; use crate::{ errors::{KclError, KclErrorDetails}, execution::{ + annotations, cad_op::{Group, OpArg, OpKclValue, Operation}, kcl_value::FunctionSource, memory, @@ -290,16 +291,19 @@ impl FunctionDefinition<'_> { callsite: SourceRange, ) -> Result, KclError> { if self.deprecated { - exec_state.warn(CompilationError::err( - callsite, - format!( - "{} is deprecated, see the docs for a recommended replacement", - match &fn_name { - Some(n) => format!("`{n}`"), - None => "This function".to_owned(), - } + exec_state.warn( + CompilationError::err( + callsite, + format!( + "{} is deprecated, see the docs for a recommended replacement", + match &fn_name { + Some(n) => format!("`{n}`"), + None => "This function".to_owned(), + } + ), ), - )); + annotations::WARN_DEPRECATED, + ); } type_check_params_kw(fn_name.as_deref(), self, &mut args.kw_args, exec_state)?; diff --git a/rust/kcl-lib/src/execution/kcl_value.rs b/rust/kcl-lib/src/execution/kcl_value.rs index 53456fa2d8..7cad1457bc 100644 --- a/rust/kcl-lib/src/execution/kcl_value.rs +++ b/rust/kcl-lib/src/execution/kcl_value.rs @@ -7,7 +7,7 @@ use serde::Serialize; use crate::{ errors::KclErrorDetails, execution::{ - annotations::{SETTINGS, SETTINGS_UNIT_LENGTH}, + annotations::{self, SETTINGS, SETTINGS_UNIT_LENGTH}, types::{NumericType, PrimitiveType, RuntimeType, UnitLen}, EnvironmentRef, ExecState, Face, Geometry, GeometryWithImportedGeometry, Helix, ImportedGeometry, MetaSettings, Metadata, Plane, Sketch, Solid, TagIdentifier, @@ -377,6 +377,7 @@ impl KclValue { Some(SourceRange::new(0, 0, literal.module_id)), crate::errors::Tag::Deprecated, ), + annotations::WARN_DEPRECATED, ); } } diff --git a/rust/kcl-lib/src/execution/state.rs b/rust/kcl-lib/src/execution/state.rs index e41f370b31..fce6fd4f5b 100644 --- a/rust/kcl-lib/src/execution/state.rs +++ b/rust/kcl-lib/src/execution/state.rs @@ -108,6 +108,9 @@ pub(super) struct ModuleState { pub(super) path: ModulePath, /// Artifacts for only this module. pub artifacts: ModuleArtifactState, + + pub(super) allowed_warnings: Vec<&'static str>, + pub(super) denied_warnings: Vec<&'static str>, } impl ExecState { @@ -133,8 +136,19 @@ impl ExecState { } /// Log a warning. - pub fn warn(&mut self, mut e: CompilationError) { - e.severity = Severity::Warning; + pub fn warn(&mut self, mut e: CompilationError, name: &'static str) { + debug_assert!(annotations::WARN_VALUES.contains(&name)); + + if self.mod_local.allowed_warnings.contains(&name) { + return; + } + + if self.mod_local.denied_warnings.contains(&name) { + e.severity = Severity::Error; + } else { + e.severity = Severity::Warning; + } + self.global.errors.push(e); } @@ -502,6 +516,8 @@ impl ModuleState { kcl_version: "0.1".to_owned(), }, artifacts: Default::default(), + allowed_warnings: Vec::new(), + denied_warnings: Vec::new(), } } diff --git a/rust/kcl-lib/src/execution/types.rs b/rust/kcl-lib/src/execution/types.rs index 7708516a37..89784be568 100644 --- a/rust/kcl-lib/src/execution/types.rs +++ b/rust/kcl-lib/src/execution/types.rs @@ -6,6 +6,7 @@ use serde::{Deserialize, Serialize}; use crate::{ execution::{ + annotations, kcl_value::{KclValue, TypeDef}, memory::{self}, ExecState, Plane, PlaneInfo, Point3d, @@ -1147,54 +1148,56 @@ impl KclValue { KclValue::Solid { .. } => Ok(self.clone()), _ => Err(self.into()), }, - PrimitiveType::Plane => match self { - KclValue::String { value: s, .. } - if [ - "xy", "xz", "yz", "-xy", "-xz", "-yz", "XY", "XZ", "YZ", "-XY", "-XZ", "-YZ", - ] - .contains(&&**s) => - { - Ok(self.clone()) - } - KclValue::Plane { .. } => Ok(self.clone()), - KclValue::Object { value, meta } => { - let origin = value - .get("origin") - .and_then(Point3d::from_kcl_val) - .ok_or(CoercionError::from(self))?; - let x_axis = value - .get("xAxis") - .and_then(Point3d::from_kcl_val) - .ok_or(CoercionError::from(self))?; - let y_axis = value - .get("yAxis") - .and_then(Point3d::from_kcl_val) - .ok_or(CoercionError::from(self))?; - - if value.get("zAxis").is_some() { - exec_state.warn(CompilationError::err( + PrimitiveType::Plane => { + match self { + KclValue::String { value: s, .. } + if [ + "xy", "xz", "yz", "-xy", "-xz", "-yz", "XY", "XZ", "YZ", "-XY", "-XZ", "-YZ", + ] + .contains(&&**s) => + { + Ok(self.clone()) + } + KclValue::Plane { .. } => Ok(self.clone()), + KclValue::Object { value, meta } => { + let origin = value + .get("origin") + .and_then(Point3d::from_kcl_val) + .ok_or(CoercionError::from(self))?; + let x_axis = value + .get("xAxis") + .and_then(Point3d::from_kcl_val) + .ok_or(CoercionError::from(self))?; + let y_axis = value + .get("yAxis") + .and_then(Point3d::from_kcl_val) + .ok_or(CoercionError::from(self))?; + + if value.get("zAxis").is_some() { + exec_state.warn(CompilationError::err( self.into(), "Object with a zAxis field is being coerced into a plane, but the zAxis is ignored.", - )); - } + ), annotations::WARN_IGNORED_Z_AXIS); + } - let id = exec_state.mod_local.id_generator.next_uuid(); - let plane = Plane { - id, - artifact_id: id.into(), - info: PlaneInfo { - origin, - x_axis: x_axis.normalize(), - y_axis: y_axis.normalize(), - }, - value: super::PlaneType::Uninit, - meta: meta.clone(), - }; + let id = exec_state.mod_local.id_generator.next_uuid(); + let plane = Plane { + id, + artifact_id: id.into(), + info: PlaneInfo { + origin, + x_axis: x_axis.normalize(), + y_axis: y_axis.normalize(), + }, + value: super::PlaneType::Uninit, + meta: meta.clone(), + }; - Ok(KclValue::Plane { value: Box::new(plane) }) + Ok(KclValue::Plane { value: Box::new(plane) }) + } + _ => Err(self.into()), } - _ => Err(self.into()), - }, + } PrimitiveType::Face => match self { KclValue::Face { .. } => Ok(self.clone()), _ => Err(self.into()), diff --git a/rust/kcl-lib/src/std/math.rs b/rust/kcl-lib/src/std/math.rs index 572db8d052..5fc14e69e2 100644 --- a/rust/kcl-lib/src/std/math.rs +++ b/rust/kcl-lib/src/std/math.rs @@ -5,6 +5,7 @@ use anyhow::Result; use crate::{ errors::{KclError, KclErrorDetails}, execution::{ + annotations, types::{ArrayLen, NumericType, RuntimeType}, ExecState, KclValue, }, @@ -114,7 +115,7 @@ pub async fn min(exec_state: &mut ExecState, args: Args) -> Result Result Date: Tue, 17 Jun 2025 09:03:13 +1200 Subject: [PATCH 2/7] Warn on inferred angle units Signed-off-by: Nick Cameron --- rust/kcl-lib/src/execution/annotations.rs | 4 +- rust/kcl-lib/src/execution/exec_ast.rs | 29 +++++++--- rust/kcl-lib/src/execution/state.rs | 6 +- rust/kcl-lib/src/execution/types.rs | 67 ++++++++++++++++++++--- rust/kcl-lib/src/std/args.rs | 27 +++++++-- rust/kcl-lib/src/std/math.rs | 14 ++--- rust/kcl-lib/src/std/sketch.rs | 20 ++++--- rust/kcl-lib/src/std/utils.rs | 2 +- 8 files changed, 126 insertions(+), 43 deletions(-) diff --git a/rust/kcl-lib/src/execution/annotations.rs b/rust/kcl-lib/src/execution/annotations.rs index c79be2808c..c7c92fd2b7 100644 --- a/rust/kcl-lib/src/execution/annotations.rs +++ b/rust/kcl-lib/src/execution/annotations.rs @@ -37,12 +37,14 @@ pub(crate) const WARNINGS: &str = "warnings"; pub(crate) const WARN_ALLOW: &str = "allow"; pub(crate) const WARN_DENY: &str = "deny"; pub(crate) const WARN_UNKNOWN_UNITS: &str = "unknownUnits"; +pub(crate) const WARN_ANGLE_UNITS: &str = "angleUnits"; pub(crate) const WARN_UNKNOWN_ATTR: &str = "unknownAttribute"; pub(crate) const WARN_MOD_RETURN_VALUE: &str = "moduleReturnValue"; pub(crate) const WARN_DEPRECATED: &str = "deprecated"; pub(crate) const WARN_IGNORED_Z_AXIS: &str = "ignoredZAxis"; -pub(super) const WARN_VALUES: [&str; 5] = [ +pub(super) const WARN_VALUES: [&str; 6] = [ WARN_UNKNOWN_UNITS, + WARN_ANGLE_UNITS, WARN_UNKNOWN_ATTR, WARN_MOD_RETURN_VALUE, WARN_DEPRECATED, diff --git a/rust/kcl-lib/src/execution/exec_ast.rs b/rust/kcl-lib/src/execution/exec_ast.rs index 6773f55336..5dcce9b81b 100644 --- a/rust/kcl-lib/src/execution/exec_ast.rs +++ b/rust/kcl-lib/src/execution/exec_ast.rs @@ -49,9 +49,20 @@ impl ExecutorContext { for annotation in annotations { if annotation.name() == Some(annotations::SETTINGS) { if matches!(body_type, BodyType::Root) { - if exec_state.mod_local.settings.update_from_annotation(annotation)? { + let (updated_len, updated_angle) = + exec_state.mod_local.settings.update_from_annotation(annotation)?; + if updated_len { exec_state.mod_local.explicit_length_units = true; } + if updated_angle { + exec_state.warn( + CompilationError::err( + annotation.as_source_range(), + "Prefer to use explicit units for angles", + ), + annotations::WARN_ANGLE_UNITS, + ); + } } else { exec_state.err(CompilationError::err( annotation.as_source_range(), @@ -1204,12 +1215,12 @@ impl Node { let value = match self.operator { BinaryOperator::Add => { - let (l, r, ty) = NumericType::combine_eq_coerce(left, right); + let (l, r, ty) = NumericType::combine_eq_coerce(left, right, None); self.warn_on_unknown(&ty, "Adding", exec_state); KclValue::Number { value: l + r, meta, ty } } BinaryOperator::Sub => { - let (l, r, ty) = NumericType::combine_eq_coerce(left, right); + let (l, r, ty) = NumericType::combine_eq_coerce(left, right, None); self.warn_on_unknown(&ty, "Subtracting", exec_state); KclValue::Number { value: l - r, meta, ty } } @@ -1234,32 +1245,32 @@ impl Node { ty: exec_state.current_default_units(), }, BinaryOperator::Neq => { - let (l, r, ty) = NumericType::combine_eq(left, right); + let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range()); self.warn_on_unknown(&ty, "Comparing", exec_state); KclValue::Bool { value: l != r, meta } } BinaryOperator::Gt => { - let (l, r, ty) = NumericType::combine_eq(left, right); + let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range()); self.warn_on_unknown(&ty, "Comparing", exec_state); KclValue::Bool { value: l > r, meta } } BinaryOperator::Gte => { - let (l, r, ty) = NumericType::combine_eq(left, right); + let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range()); self.warn_on_unknown(&ty, "Comparing", exec_state); KclValue::Bool { value: l >= r, meta } } BinaryOperator::Lt => { - let (l, r, ty) = NumericType::combine_eq(left, right); + let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range()); self.warn_on_unknown(&ty, "Comparing", exec_state); KclValue::Bool { value: l < r, meta } } BinaryOperator::Lte => { - let (l, r, ty) = NumericType::combine_eq(left, right); + let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range()); self.warn_on_unknown(&ty, "Comparing", exec_state); KclValue::Bool { value: l <= r, meta } } BinaryOperator::Eq => { - let (l, r, ty) = NumericType::combine_eq(left, right); + let (l, r, ty) = NumericType::combine_eq(left, right, exec_state, self.as_source_range()); self.warn_on_unknown(&ty, "Comparing", exec_state); KclValue::Bool { value: l == r, meta } } diff --git a/rust/kcl-lib/src/execution/state.rs b/rust/kcl-lib/src/execution/state.rs index fce6fd4f5b..faaaaa624e 100644 --- a/rust/kcl-lib/src/execution/state.rs +++ b/rust/kcl-lib/src/execution/state.rs @@ -542,10 +542,11 @@ impl MetaSettings { pub(crate) fn update_from_annotation( &mut self, annotation: &crate::parsing::ast::types::Node, - ) -> Result { + ) -> Result<(bool, bool), KclError> { let properties = annotations::expect_properties(annotations::SETTINGS, annotation)?; let mut updated_len = false; + let mut updated_angle = false; for p in properties { match &*p.inner.key.name { annotations::SETTINGS_UNIT_LENGTH => { @@ -558,6 +559,7 @@ impl MetaSettings { let value = annotations::expect_ident(&p.inner.value)?; let value = types::UnitAngle::from_str(value, annotation.as_source_range())?; self.default_angle_units = value; + updated_angle = true; } annotations::SETTINGS_VERSION => { let value = annotations::expect_number(&p.inner.value)?; @@ -576,6 +578,6 @@ impl MetaSettings { } } - Ok(updated_len) + Ok((updated_len, updated_angle)) } } diff --git a/rust/kcl-lib/src/execution/types.rs b/rust/kcl-lib/src/execution/types.rs index 89784be568..4bde96ec77 100644 --- a/rust/kcl-lib/src/execution/types.rs +++ b/rust/kcl-lib/src/execution/types.rs @@ -506,7 +506,12 @@ impl NumericType { /// /// This combinator function is suitable for comparisons where uncertainty should /// be handled by the user. - pub fn combine_eq(a: TyF64, b: TyF64) -> (f64, f64, NumericType) { + pub fn combine_eq( + a: TyF64, + b: TyF64, + exec_state: &mut ExecState, + source_range: SourceRange, + ) -> (f64, f64, NumericType) { use NumericType::*; match (a.ty, b.ty) { (at, bt) if at == bt => (a.n, b.n, at), @@ -521,8 +526,24 @@ impl NumericType { } (t @ Known(UnitType::Length(l1)), Default { len: l2, .. }) if l1 == l2 => (a.n, b.n, t), (Default { len: l1, .. }, t @ Known(UnitType::Length(l2))) if l1 == l2 => (a.n, b.n, t), - (t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) if a1 == a2 => (a.n, b.n, t), - (Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) if a1 == a2 => (a.n, b.n, t), + (t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) if a1 == a2 => { + if b.n != 0.0 { + exec_state.warn( + CompilationError::err(source_range, "Prefer to use explicit units for angles"), + annotations::WARN_ANGLE_UNITS, + ); + } + (a.n, b.n, t) + } + (Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) if a1 == a2 => { + if a.n != 0.0 { + exec_state.warn( + CompilationError::err(source_range, "Prefer to use explicit units for angles"), + annotations::WARN_ANGLE_UNITS, + ); + } + (a.n, b.n, t) + } _ => (a.n, b.n, Unknown), } @@ -535,7 +556,11 @@ impl NumericType { /// coerced together, for example two arguments to the same function or two numbers in an array being used as a point. /// /// Prefer to use `combine_eq` if possible since using that prioritises correctness over ergonomics. - pub fn combine_eq_coerce(a: TyF64, b: TyF64) -> (f64, f64, NumericType) { + pub fn combine_eq_coerce( + a: TyF64, + b: TyF64, + for_errs: Option<(&mut ExecState, SourceRange)>, + ) -> (f64, f64, NumericType) { use NumericType::*; match (a.ty, b.ty) { (at, bt) if at == bt => (a.n, b.n, at), @@ -553,8 +578,28 @@ impl NumericType { (t @ Known(UnitType::Length(l1)), Default { len: l2, .. }) => (a.n, l2.adjust_to(b.n, l1).0, t), (Default { len: l1, .. }, t @ Known(UnitType::Length(l2))) => (l1.adjust_to(a.n, l2).0, b.n, t), - (t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) => (a.n, a2.adjust_to(b.n, a1).0, t), - (Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) => (a1.adjust_to(a.n, a2).0, b.n, t), + (t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) => { + if let Some((exec_state, source_range)) = for_errs { + if b.n != 0.0 { + exec_state.warn( + CompilationError::err(source_range, "Prefer to use explicit units for angles"), + annotations::WARN_ANGLE_UNITS, + ); + } + } + (a.n, a2.adjust_to(b.n, a1).0, t) + } + (Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) => { + if let Some((exec_state, source_range)) = for_errs { + if a.n != 0.0 { + exec_state.warn( + CompilationError::err(source_range, "Prefer to use explicit units for angles"), + annotations::WARN_ANGLE_UNITS, + ); + } + } + (a1.adjust_to(a.n, a2).0, b.n, t) + } (Known(_), Known(_)) | (Default { .. }, Default { .. }) | (_, Unknown) | (Unknown, _) => { (a.n, b.n, Unknown) @@ -2350,14 +2395,18 @@ b = 180 / PI * a + 360 #[tokio::test(flavor = "multi_thread")] async fn cos_coercions() { let program = r#" -a = cos(units::toRadians(30)) +a = cos(units::toRadians(30deg)) b = 3 / a c = cos(30deg) -d = cos(30) +d = cos(1rad) "#; let result = parse_execute(program).await.unwrap(); - assert!(result.exec_state.errors().is_empty()); + assert!( + result.exec_state.errors().is_empty(), + "{:?}", + result.exec_state.errors() + ); assert_value_and_type("a", &result, 1.0, NumericType::default()); assert_value_and_type("b", &result, 3.0, NumericType::default()); diff --git a/rust/kcl-lib/src/std/args.rs b/rust/kcl-lib/src/std/args.rs index 0afe72cec9..39bea4e99d 100644 --- a/rust/kcl-lib/src/std/args.rs +++ b/rust/kcl-lib/src/std/args.rs @@ -9,6 +9,7 @@ pub use crate::execution::fn_call::Args; use crate::{ errors::{KclError, KclErrorDetails}, execution::{ + annotations, kcl_value::FunctionSource, types::{NumericType, PrimitiveType, RuntimeType, UnitAngle, UnitLen, UnitType}, ExecState, ExtrudeSurface, Helix, KclObjectFields, KclValue, Metadata, PlaneInfo, Sketch, SketchSurface, Solid, @@ -21,7 +22,7 @@ use crate::{ sketch::FaceTag, sweep::SweepPath, }, - ModuleId, + CompilationError, ModuleId, }; const ERROR_STRING_SKETCH_TO_SOLID_HELPER: &str = @@ -56,9 +57,17 @@ impl TyF64 { len.adjust_to(self.n, units).0 } - pub fn to_degrees(&self) -> f64 { + pub fn to_degrees(&self, exec_state: &mut ExecState, source_range: SourceRange) -> f64 { let angle = match self.ty { - NumericType::Default { angle, .. } => angle, + NumericType::Default { angle, .. } => { + if self.n != 0.0 { + exec_state.warn( + CompilationError::err(source_range, "Prefer to use explicit units for angles"), + annotations::WARN_ANGLE_UNITS, + ); + } + angle + } NumericType::Known(UnitType::Angle(angle)) => angle, _ => unreachable!(), }; @@ -68,9 +77,17 @@ impl TyF64 { angle.adjust_to(self.n, UnitAngle::Degrees).0 } - pub fn to_radians(&self) -> f64 { + pub fn to_radians(&self, exec_state: &mut ExecState, source_range: SourceRange) -> f64 { let angle = match self.ty { - NumericType::Default { angle, .. } => angle, + NumericType::Default { angle, .. } => { + if self.n != 0.0 { + exec_state.warn( + CompilationError::err(source_range, "Prefer to use explicit units for angles"), + annotations::WARN_ANGLE_UNITS, + ); + } + angle + } NumericType::Known(UnitType::Angle(angle)) => angle, _ => unreachable!(), }; diff --git a/rust/kcl-lib/src/std/math.rs b/rust/kcl-lib/src/std/math.rs index 5fc14e69e2..aa50bcd101 100644 --- a/rust/kcl-lib/src/std/math.rs +++ b/rust/kcl-lib/src/std/math.rs @@ -34,21 +34,21 @@ pub async fn rem(exec_state: &mut ExecState, args: Args) -> Result Result { let num: TyF64 = args.get_unlabeled_kw_arg("input", &RuntimeType::angle(), exec_state)?; - let num = num.to_radians(); + let num = num.to_radians(exec_state, args.source_range); Ok(args.make_user_val_from_f64_with_type(TyF64::new(libm::cos(num), exec_state.current_default_units()))) } /// Compute the sine of a number (in radians). pub async fn sin(exec_state: &mut ExecState, args: Args) -> Result { let num: TyF64 = args.get_unlabeled_kw_arg("input", &RuntimeType::angle(), exec_state)?; - let num = num.to_radians(); + let num = num.to_radians(exec_state, args.source_range); Ok(args.make_user_val_from_f64_with_type(TyF64::new(libm::sin(num), exec_state.current_default_units()))) } /// Compute the tangent of a number (in radians). pub async fn tan(exec_state: &mut ExecState, args: Args) -> Result { let num: TyF64 = args.get_unlabeled_kw_arg("input", &RuntimeType::angle(), exec_state)?; - let num = num.to_radians(); + let num = num.to_radians(exec_state, args.source_range); Ok(args.make_user_val_from_f64_with_type(TyF64::new(libm::tan(num), exec_state.current_default_units()))) } @@ -190,7 +190,7 @@ pub async fn atan(exec_state: &mut ExecState, args: Args) -> Result Result { let y = args.get_kw_arg("y", &RuntimeType::length(), exec_state)?; let x = args.get_kw_arg("x", &RuntimeType::length(), exec_state)?; - let (y, x, _) = NumericType::combine_eq_coerce(y, x); + let (y, x, _) = NumericType::combine_eq_coerce(y, x, Some((exec_state, args.source_range))); let result = libm::atan2(y, x); Ok(args.make_user_val_from_f64_with_type(TyF64::new(result, NumericType::radians()))) @@ -237,7 +237,7 @@ pub async fn ln(exec_state: &mut ExecState, args: Args) -> Result Result { let hypotenuse: TyF64 = args.get_kw_arg("hypotenuse", &RuntimeType::length(), exec_state)?; let leg: TyF64 = args.get_kw_arg("leg", &RuntimeType::length(), exec_state)?; - let (hypotenuse, leg, ty) = NumericType::combine_eq_coerce(hypotenuse, leg); + let (hypotenuse, leg, ty) = NumericType::combine_eq_coerce(hypotenuse, leg, Some((exec_state, args.source_range))); let result = (hypotenuse.powi(2) - f64::min(hypotenuse.abs(), leg.abs()).powi(2)).sqrt(); Ok(KclValue::from_number_with_type(result, ty, vec![args.into()])) } @@ -246,7 +246,7 @@ pub async fn leg_length(exec_state: &mut ExecState, args: Args) -> Result Result { let hypotenuse: TyF64 = args.get_kw_arg("hypotenuse", &RuntimeType::length(), exec_state)?; let leg: TyF64 = args.get_kw_arg("leg", &RuntimeType::length(), exec_state)?; - let (hypotenuse, leg, _ty) = NumericType::combine_eq_coerce(hypotenuse, leg); + let (hypotenuse, leg, _ty) = NumericType::combine_eq_coerce(hypotenuse, leg, Some((exec_state, args.source_range))); let result = libm::acos(leg.min(hypotenuse) / hypotenuse).to_degrees(); Ok(KclValue::from_number_with_type( result, @@ -259,7 +259,7 @@ pub async fn leg_angle_x(exec_state: &mut ExecState, args: Args) -> Result Result { let hypotenuse: TyF64 = args.get_kw_arg("hypotenuse", &RuntimeType::length(), exec_state)?; let leg: TyF64 = args.get_kw_arg("leg", &RuntimeType::length(), exec_state)?; - let (hypotenuse, leg, _ty) = NumericType::combine_eq_coerce(hypotenuse, leg); + let (hypotenuse, leg, _ty) = NumericType::combine_eq_coerce(hypotenuse, leg, Some((exec_state, args.source_range))); let result = libm::asin(leg.min(hypotenuse) / hypotenuse).to_degrees(); Ok(KclValue::from_number_with_type( result, diff --git a/rust/kcl-lib/src/std/sketch.rs b/rust/kcl-lib/src/std/sketch.rs index c0c74360c0..da24053423 100644 --- a/rust/kcl-lib/src/std/sketch.rs +++ b/rust/kcl-lib/src/std/sketch.rs @@ -132,6 +132,8 @@ async fn inner_involute_circular( args: Args, ) -> Result { let id = exec_state.next_uuid(); + let angle_deg = angle.to_degrees(exec_state, args.source_range); + let angle_rad = angle.to_radians(exec_state, args.source_range); exec_state .batch_modeling_cmd( @@ -141,7 +143,7 @@ async fn inner_involute_circular( segment: PathSegment::CircularInvolute { start_radius: LengthUnit(start_radius.to_mm()), end_radius: LengthUnit(end_radius.to_mm()), - angle: Angle::from_degrees(angle.to_degrees()), + angle: Angle::from_degrees(angle_deg), reverse: reverse.unwrap_or_default(), }, }), @@ -157,11 +159,11 @@ async fn inner_involute_circular( let theta = f64::sqrt(end_radius * end_radius - start_radius * start_radius) / start_radius; let (x, y) = involute_curve(start_radius, theta); - end.x = x * libm::cos(angle.to_radians()) - y * libm::sin(angle.to_radians()); - end.y = x * libm::sin(angle.to_radians()) + y * libm::cos(angle.to_radians()); + end.x = x * libm::cos(angle_rad) - y * libm::sin(angle_rad); + end.y = x * libm::sin(angle_rad) + y * libm::cos(angle_rad); - end.x -= start_radius * libm::cos(angle.to_radians()); - end.y -= start_radius * libm::sin(angle.to_radians()); + end.x -= start_radius * libm::cos(angle_rad); + end.y -= start_radius * libm::sin(angle_rad); if reverse.unwrap_or_default() { end.x = -end.x; @@ -718,7 +720,7 @@ pub async fn inner_angled_line_that_intersects( point_to_len_unit(path.get_to(), from.units), ], offset.map(|t| t.to_length_units(from.units)).unwrap_or_default(), - angle.to_degrees(), + angle.to_degrees(exec_state, args.source_range), from.ignore_units(), ); let to = [ @@ -1256,8 +1258,8 @@ pub async fn relative_arc( radius: TyF64, tag: Option, ) -> Result { - let a_start = Angle::from_degrees(angle_start.to_degrees()); - let a_end = Angle::from_degrees(angle_end.to_degrees()); + let a_start = Angle::from_degrees(angle_start.to_degrees(exec_state, args.source_range)); + let a_end = Angle::from_degrees(angle_end.to_degrees(exec_state, args.source_range)); let radius = radius.to_length_units(from.units); let (center, end) = arc_center_and_end(from.ignore_units(), a_start, a_end, radius); if a_start == a_end { @@ -1409,7 +1411,7 @@ async fn inner_tangential_arc_radius_angle( let (center, to, ccw) = match data { TangentialArcData::RadiusAndOffset { radius, offset } => { // KCL stdlib types use degrees. - let offset = Angle::from_degrees(offset.to_degrees()); + let offset = Angle::from_degrees(offset.to_degrees(exec_state, args.source_range)); // Calculate the end point from the angle and radius. // atan2 outputs radians. diff --git a/rust/kcl-lib/src/std/utils.rs b/rust/kcl-lib/src/std/utils.rs index ea81f706f4..ba6d3e304d 100644 --- a/rust/kcl-lib/src/std/utils.rs +++ b/rust/kcl-lib/src/std/utils.rs @@ -6,7 +6,7 @@ use super::args::TyF64; use crate::execution::types::{NumericType, UnitLen}; pub(crate) fn untype_point(p: [TyF64; 2]) -> ([f64; 2], NumericType) { - let (x, y, ty) = NumericType::combine_eq_coerce(p[0].clone(), p[1].clone()); + let (x, y, ty) = NumericType::combine_eq_coerce(p[0].clone(), p[1].clone(), None); ([x, y], ty) } From 77e5d6e3a5417382cb84c307f0db84c14e67b559 Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Tue, 17 Jun 2025 10:21:02 +1200 Subject: [PATCH 3/7] Update samples Signed-off-by: Nick Cameron --- public/kcl-samples/ball-bearing/main.kcl | 12 +- public/kcl-samples/brake-rotor/main.kcl | 18 +- public/kcl-samples/clock/main.kcl | 152 +- public/kcl-samples/cold-plate/main.kcl | 14 +- public/kcl-samples/countersunk-plate/main.kcl | 6 +- public/kcl-samples/cpu-cooler/fan-housing.kcl | 22 +- public/kcl-samples/cpu-cooler/fan.kcl | 28 +- public/kcl-samples/cpu-cooler/heat-sink.kcl | 54 +- public/kcl-samples/cpu-cooler/main.kcl | 4 +- .../kcl-samples/cpu-cooler/mounting-wire.kcl | 32 +- .../cpu-cooler/removable-sticker.kcl | 2 +- public/kcl-samples/cycloidal-gear/main.kcl | 12 +- public/kcl-samples/exhaust-manifold/main.kcl | 26 +- .../kcl-samples/food-service-spatula/main.kcl | 26 +- public/kcl-samples/french-press/main.kcl | 42 +- public/kcl-samples/hammer/main.kcl | 24 +- public/kcl-samples/helical-gear/main.kcl | 14 +- .../helical-planetary-gearset/main.kcl | 28 +- public/kcl-samples/helium-tank/main.kcl | 30 +- public/kcl-samples/herringbone-gear/main.kcl | 10 +- .../herringbone-planetary-gearset/main.kcl | 26 +- public/kcl-samples/i-beam/main.kcl | 2 +- public/kcl-samples/keyboard/main.kcl | 30 +- public/kcl-samples/poopy-shoe/main.kcl | 26 +- public/kcl-samples/prosthetic-hip/main.kcl | 60 +- .../kcl-samples/sheet-metal-bracket/main.kcl | 6 +- .../kcl-samples/shepherds-hook-bolt/main.kcl | 8 +- public/kcl-samples/spur-gear/main.kcl | 14 +- .../spur-reduction-gearset/main.kcl | 12 +- .../kcl-samples/surgical-drill-guide/main.kcl | 6 +- public/kcl-samples/t-slot-rail/main.kcl | 14 +- public/kcl-samples/wing-spar/main.kcl | 38 +- rust/kcl-lib/e2e/executor/main.rs | 4 +- rust/kcl-lib/src/std/extrude.rs | 4 +- .../tests/import_async/artifact_commands.snap | 4 +- .../artifact_graph_flowchart.snap.md | 48 +- rust/kcl-lib/tests/import_async/ast.snap | 28 +- rust/kcl-lib/tests/import_async/input.kcl | 12 +- rust/kcl-lib/tests/import_async/ops.snap | 28 +- rust/kcl-lib/tests/import_async/unparsed.snap | 12 +- .../artifact_graph_flowchart.snap.md | 24 +- .../tests/involute_circular_units/ast.snap | 21 +- .../tests/involute_circular_units/input.kcl | 10 +- .../tests/involute_circular_units/ops.snap | 10 +- .../program_memory.snap | 34 +- .../involute_circular_units/unparsed.snap | 11 +- .../tests/kcl_samples/ball-bearing/ast.snap | 28 +- .../tests/kcl_samples/ball-bearing/ops.snap | 10 +- .../tests/kcl_samples/brake-rotor/ast.snap | 36 +- .../tests/kcl_samples/brake-rotor/ops.snap | 210 +- .../brake-rotor/program_memory.snap | 1974 ++++++++--------- rust/kcl-lib/tests/kcl_samples/clock/ast.snap | 322 +-- rust/kcl-lib/tests/kcl_samples/clock/ops.snap | 20 +- .../kcl_samples/clock/program_memory.snap | 200 +- .../tests/kcl_samples/cold-plate/ast.snap | 28 +- .../cold-plate/program_memory.snap | 54 +- .../kcl_samples/countersunk-plate/ast.snap | 12 +- .../tests/kcl_samples/cpu-cooler/ast.snap | 8 +- .../tests/kcl_samples/cpu-cooler/ops.snap | 20 +- .../tests/kcl_samples/cycloidal-gear/ast.snap | 28 +- .../kcl_samples/exhaust-manifold/ast.snap | 52 +- .../kcl_samples/exhaust-manifold/ops.snap | 30 +- .../exhaust-manifold/program_memory.snap | 84 +- .../kcl_samples/food-service-spatula/ast.snap | 142 +- .../kcl_samples/food-service-spatula/ops.snap | 10 +- .../food-service-spatula/program_memory.snap | 102 +- .../tests/kcl_samples/french-press/ast.snap | 112 +- .../tests/kcl_samples/french-press/ops.snap | 10 +- .../french-press/program_memory.snap | 372 ++-- .../kcl-lib/tests/kcl_samples/hammer/ast.snap | 48 +- .../kcl-lib/tests/kcl_samples/hammer/ops.snap | 10 +- .../kcl_samples/hammer/program_memory.snap | 126 +- .../helical-gear/artifact_commands.snap | 8 +- .../tests/kcl_samples/helical-gear/ast.snap | 32 +- .../tests/kcl_samples/helical-gear/ops.snap | 36 +- .../artifact_commands.snap | 16 +- .../helical-planetary-gearset/ast.snap | 60 +- .../helical-planetary-gearset/ops.snap | 86 +- .../tests/kcl_samples/helium-tank/ast.snap | 60 +- .../tests/kcl_samples/helium-tank/ops.snap | 10 +- .../helium-tank/program_memory.snap | 156 +- .../herringbone-gear/artifact_commands.snap | 10 +- .../kcl_samples/herringbone-gear/ast.snap | 20 +- .../kcl_samples/herringbone-gear/ops.snap | 36 +- .../artifact_commands.snap | 12 +- .../herringbone-planetary-gearset/ast.snap | 52 +- .../herringbone-planetary-gearset/ops.snap | 84 +- .../kcl-lib/tests/kcl_samples/i-beam/ast.snap | 4 +- .../tests/kcl_samples/keyboard/ast.snap | 128 +- .../kcl_samples/keyboard/program_memory.snap | 216 +- .../tests/kcl_samples/poopy-shoe/ast.snap | 72 +- .../tests/kcl_samples/poopy-shoe/ops.snap | 10 +- .../poopy-shoe/program_memory.snap | 102 +- .../tests/kcl_samples/prosthetic-hip/ast.snap | 120 +- .../tests/kcl_samples/prosthetic-hip/ops.snap | 30 +- .../prosthetic-hip/program_memory.snap | 48 +- .../kcl_samples/sheet-metal-bracket/ast.snap | 12 +- .../kcl_samples/sheet-metal-bracket/ops.snap | 10 +- .../sheet-metal-bracket/program_memory.snap | 850 ++++--- .../kcl_samples/shepherds-hook-bolt/ast.snap | 16 +- .../kcl_samples/shepherds-hook-bolt/ops.snap | 50 +- .../shepherds-hook-bolt/program_memory.snap | 56 +- .../tests/kcl_samples/spur-gear/ast.snap | 32 +- .../tests/kcl_samples/spur-gear/ops.snap | 10 +- .../spur-reduction-gearset/ast.snap | 24 +- .../spur-reduction-gearset/ops.snap | 20 +- .../kcl_samples/surgical-drill-guide/ast.snap | 12 +- .../surgical-drill-guide/program_memory.snap | 240 +- .../tests/kcl_samples/t-slot-rail/ast.snap | 28 +- .../tests/kcl_samples/wing-spar/ast.snap | 76 +- .../kcl_samples/wing-spar/program_memory.snap | 744 +++---- .../loop_tag/artifact_graph_flowchart.snap.md | 106 +- rust/kcl-lib/tests/loop_tag/ast.snap | 4 +- rust/kcl-lib/tests/loop_tag/input.kcl | 2 +- rust/kcl-lib/tests/loop_tag/ops.snap | 510 ++--- .../tests/loop_tag/program_memory.snap | 1186 +++++----- rust/kcl-lib/tests/loop_tag/unparsed.snap | 2 +- .../artifact_graph_flowchart.snap.md | 16 +- .../tests/parametric_with_tan_arc/ast.snap | 8 +- .../tests/parametric_with_tan_arc/input.kcl | 4 +- .../parametric_with_tan_arc/unparsed.snap | 4 +- .../artifact_graph_flowchart.snap.md | 294 +-- .../tests/subtract_regression10/ast.snap | 84 +- .../tests/subtract_regression10/input.kcl | 42 +- .../subtract_regression10/program_memory.snap | 12 +- .../tests/subtract_regression10/unparsed.snap | 42 +- .../artifact_graph_flowchart.snap.md | 14 +- rust/kcl-lib/tests/tan_arc_x_line/ast.snap | 8 +- rust/kcl-lib/tests/tan_arc_x_line/input.kcl | 4 +- rust/kcl-lib/tests/tan_arc_x_line/ops.snap | 20 +- .../tests/tan_arc_x_line/program_memory.snap | 20 +- .../tests/tan_arc_x_line/unparsed.snap | 4 +- .../artifact_graph_flowchart.snap.md | 6 +- rust/kcl-lib/tests/tangential_arc/ast.snap | 4 +- rust/kcl-lib/tests/tangential_arc/input.kcl | 2 +- .../tests/tangential_arc/unparsed.snap | 2 +- 136 files changed, 5270 insertions(+), 5814 deletions(-) diff --git a/public/kcl-samples/ball-bearing/main.kcl b/public/kcl-samples/ball-bearing/main.kcl index a6e8568a63..72a326a01f 100644 --- a/public/kcl-samples/ball-bearing/main.kcl +++ b/public/kcl-samples/ball-bearing/main.kcl @@ -27,7 +27,7 @@ insideWall = extrude(insideWallSketch, length = overallThickness) // Create the sketch of one of the balls ballsSketch = startSketchOn(XY) |> startProfile(at = [shaftDia / 2 + wallThickness, 0.001]) - |> arc(angleStart = 180, angleEnd = 0, radius = sphereDia / 2) + |> arc(angleStart = 180deg, angleEnd = 0, radius = sphereDia / 2) |> close() // Revolve the ball to make a sphere and pattern around the inside wall @@ -44,9 +44,9 @@ balls = revolve(ballsSketch, axis = X) chainSketch = startSketchOn(XY) |> startProfile(at = [ shaftDia / 2 + wallThickness + sphereDia / 2 - (chainWidth / 2), - 0.125 * sin(60) + 0.125 * sin(60deg) ]) - |> arc(angleStart = 120, angleEnd = 60, radius = sphereDia / 2) + |> arc(angleStart = 120deg, angleEnd = 60deg, radius = sphereDia / 2) |> line(end = [0, chainThickness]) |> line(end = [-chainWidth, 0]) |> close() @@ -54,7 +54,7 @@ chainSketch = startSketchOn(XY) // Revolve the chain sketch chainHead = revolve(chainSketch, axis = X) |> patternCircular3d( - arcDegrees = 360, + arcDegrees = 360deg, axis = [0, 0, 1], center = [0, 0, 0], instances = nBalls, @@ -72,9 +72,9 @@ linkSketch = startSketchOn(XZ) ) // Revolve the link sketch -linkRevolve = revolve(linkSketch, axis = Y, angle = 360 / nBalls) +linkRevolve = revolve(linkSketch, axis = Y, angle = 360deg / nBalls) |> patternCircular3d( - arcDegrees = 360, + arcDegrees = 360deg, axis = [0, 0, 1], center = [0, 0, 0], instances = nBalls, diff --git a/public/kcl-samples/brake-rotor/main.kcl b/public/kcl-samples/brake-rotor/main.kcl index 510363fd33..2b3cfd7885 100644 --- a/public/kcl-samples/brake-rotor/main.kcl +++ b/public/kcl-samples/brake-rotor/main.kcl @@ -23,12 +23,12 @@ nVentBosses = 36 // Drilling parameters. dDrillDia = 6 -aBase = 90 -aSweep = 30 +aBase = 90deg +aSweep = 30deg nArcs = 12 // Bell parameters. -aDraftBell = 5 +aDraftBell = 5deg tBell = 5 // Wall thickness. hBellAboveDiscFace = 40 hBellSubflush = 4 @@ -98,7 +98,7 @@ planeVent = offsetPlane(XY, offset = tDiscHalf) sketchVent = startSketchOn(planeVent) profileVent = startProfile(sketchVent, at = [-wVent, dDisc / 2]) |> angledLine(angle = 0, length = wVent, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = hFrictionSurface, tag = $seg02) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = hFrictionSurface, tag = $seg02) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg03) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg01) |> close() @@ -118,7 +118,7 @@ ventSet = patternCircular3d( instances = nVentBosses, axis = [0, 0, 1], center = [0, 0, tDiscHalf], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) @@ -134,8 +134,8 @@ discOutboard = createDiscHalf( // Now create bell. rCenter = dDisc / 2 - hFrictionSurface - wUndercut rBore = dBore / 2 -lDraftExterior = hBellAboveDiscFace / tan(90 - aDraftBell) -lDraftInterior = (hBellAboveDiscFace - tBell) / tan(90 - aDraftBell) +lDraftExterior = hBellAboveDiscFace / tan(90deg - aDraftBell) +lDraftInterior = (hBellAboveDiscFace - tBell) / tan(90deg - aDraftBell) // Inner and outer radius of outboard face of disc bell. rOuter = rCenter - lDraftExterior - rBore @@ -151,7 +151,7 @@ bodyDiscBell = startProfile( ) |> arc( %, - angleStart = -180, + angleStart = -180deg, angleEnd = 0, radius = wUndercut / 2, ) @@ -172,7 +172,7 @@ profileStud = circle(sketchLugs, center = [0, dPitchCircle / 2], radius = dStudD %, instances = nStuds, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) diff --git a/public/kcl-samples/clock/main.kcl b/public/kcl-samples/clock/main.kcl index 7ff1ee8300..f9240788d2 100644 --- a/public/kcl-samples/clock/main.kcl +++ b/public/kcl-samples/clock/main.kcl @@ -28,8 +28,8 @@ hour = 9 minute = 29 // Calculate hand angles -hourHandAngle = 90 - (hour * 30) -minuteHandAngle = 90 - (minute * 6) +hourHandAngle = 90deg - (hour * 30deg) +minuteHandAngle = 90deg - (minute * 6deg) // Create the clock body clockBodySketch = startSketchOn(XY) @@ -72,18 +72,18 @@ numberObject = { // one = { i = [90, 160] }, one = { i = [ - clockDiameter / 2 * 3 / 4 * cos(60), - clockDiameter / 2 * 3 / 4 * sin(60) + clockDiameter / 2 * 3 / 4 * cos(60deg), + clockDiameter / 2 * 3 / 4 * sin(60deg) ] }, two = { i = [ - clockDiameter / 2 * 3 / 4 * cos(30) - 10, - clockDiameter / 2 * 3 / 4 * sin(30) + clockDiameter / 2 * 3 / 4 * cos(30deg) - 10, + clockDiameter / 2 * 3 / 4 * sin(30deg) ], i2 = [ - clockDiameter / 2 * 3 / 4 * cos(30) + 5, - clockDiameter / 2 * 3 / 4 * sin(30) + clockDiameter / 2 * 3 / 4 * cos(30deg) + 5, + clockDiameter / 2 * 3 / 4 * sin(30deg) ] }, three = { @@ -102,100 +102,100 @@ numberObject = { }, four = { i = [ - clockDiameter / 2 * 3 / 4 * cos(-30) - 10, - clockDiameter / 2 * 3 / 4 * sin(-30) + clockDiameter / 2 * 3 / 4 * cos(-30deg) - 10, + clockDiameter / 2 * 3 / 4 * sin(-30deg) ], v = [ - clockDiameter / 2 * 3 / 4 * cos(-30) + 13, - clockDiameter / 2 * 3 / 4 * sin(-30) + clockDiameter / 2 * 3 / 4 * cos(-30deg) + 13, + clockDiameter / 2 * 3 / 4 * sin(-30deg) ] }, five = { v = [ - clockDiameter / 2 * 3 / 4 * cos(-60), - clockDiameter / 2 * 3 / 4 * sin(-60) + clockDiameter / 2 * 3 / 4 * cos(-60deg), + clockDiameter / 2 * 3 / 4 * sin(-60deg) ] }, six = { v = [ - clockDiameter / 2 * 3 / 4 * cos(-90) - 10, - clockDiameter / 2 * 3 / 4 * sin(-90) + clockDiameter / 2 * 3 / 4 * cos(-90deg) - 10, + clockDiameter / 2 * 3 / 4 * sin(-90deg) ], i = [ - clockDiameter / 2 * 3 / 4 * cos(-90) + 12, - clockDiameter / 2 * 3 / 4 * sin(-90) + clockDiameter / 2 * 3 / 4 * cos(-90deg) + 12, + clockDiameter / 2 * 3 / 4 * sin(-90deg) ] }, seven = { v = [ - clockDiameter / 2 * 3 / 4 * cos(-120) - 15, - clockDiameter / 2 * 3 / 4 * sin(-120) + clockDiameter / 2 * 3 / 4 * cos(-120deg) - 15, + clockDiameter / 2 * 3 / 4 * sin(-120deg) ], i = [ - clockDiameter / 2 * 3 / 4 * cos(-120) + 5, - clockDiameter / 2 * 3 / 4 * sin(-120) + clockDiameter / 2 * 3 / 4 * cos(-120deg) + 5, + clockDiameter / 2 * 3 / 4 * sin(-120deg) ], i2 = [ - clockDiameter / 2 * 3 / 4 * cos(-120) + 20, - clockDiameter / 2 * 3 / 4 * sin(-120) + clockDiameter / 2 * 3 / 4 * cos(-120deg) + 20, + clockDiameter / 2 * 3 / 4 * sin(-120deg) ] }, eight = { v = [ - clockDiameter / 2 * 3 / 4 * cos(-150) - 10, - clockDiameter / 2 * 3 / 4 * sin(-150) + clockDiameter / 2 * 3 / 4 * cos(-150deg) - 10, + clockDiameter / 2 * 3 / 4 * sin(-150deg) ], i = [ - clockDiameter / 2 * 3 / 4 * cos(-150) + 10, - clockDiameter / 2 * 3 / 4 * sin(-150) + clockDiameter / 2 * 3 / 4 * cos(-150deg) + 10, + clockDiameter / 2 * 3 / 4 * sin(-150deg) ], i2 = [ - clockDiameter / 2 * 3 / 4 * cos(-150) + 25, - clockDiameter / 2 * 3 / 4 * sin(-150) + clockDiameter / 2 * 3 / 4 * cos(-150deg) + 25, + clockDiameter / 2 * 3 / 4 * sin(-150deg) ], i3 = [ - clockDiameter / 2 * 3 / 4 * cos(-150) + 40, - clockDiameter / 2 * 3 / 4 * sin(-150) + clockDiameter / 2 * 3 / 4 * cos(-150deg) + 40, + clockDiameter / 2 * 3 / 4 * sin(-150deg) ] }, nine = { i = [ - clockDiameter / 2 * 3 / 4 * cos(180) - 15, - clockDiameter / 2 * 3 / 4 * sin(180) + clockDiameter / 2 * 3 / 4 * cos(180deg) - 15, + clockDiameter / 2 * 3 / 4 * sin(180deg) ], x = [ - clockDiameter / 2 * 3 / 4 * cos(180) + 15, - clockDiameter / 2 * 3 / 4 * sin(180) + clockDiameter / 2 * 3 / 4 * cos(180deg) + 15, + clockDiameter / 2 * 3 / 4 * sin(180deg) ] }, ten = { x = [ - clockDiameter / 2 * 3 / 4 * cos(150) + 5, - clockDiameter / 2 * 3 / 4 * sin(150) + clockDiameter / 2 * 3 / 4 * cos(150deg) + 5, + clockDiameter / 2 * 3 / 4 * sin(150deg) ] }, eleven = { x = [ - clockDiameter / 2 * 3 / 4 * cos(120), - clockDiameter / 2 * 3 / 4 * sin(120) + clockDiameter / 2 * 3 / 4 * cos(120deg), + clockDiameter / 2 * 3 / 4 * sin(120deg) ], i = [ - clockDiameter / 2 * 3 / 4 * cos(120) + 10, - clockDiameter / 2 * 3 / 4 * sin(120) + clockDiameter / 2 * 3 / 4 * cos(120deg) + 10, + clockDiameter / 2 * 3 / 4 * sin(120deg) ] }, twelve = { x = [ - clockDiameter / 2 * 3 / 4 * cos(90) - 10, - clockDiameter / 2 * 3 / 4 * sin(90) + clockDiameter / 2 * 3 / 4 * cos(90deg) - 10, + clockDiameter / 2 * 3 / 4 * sin(90deg) ], i = [ - clockDiameter / 2 * 3 / 4 * cos(90) + 5, - clockDiameter / 2 * 3 / 4 * sin(90) + clockDiameter / 2 * 3 / 4 * cos(90deg) + 5, + clockDiameter / 2 * 3 / 4 * sin(90deg) ], i2 = [ - clockDiameter / 2 * 3 / 4 * cos(90) + 20, - clockDiameter / 2 * 3 / 4 * sin(90) + clockDiameter / 2 * 3 / 4 * cos(90deg) + 20, + clockDiameter / 2 * 3 / 4 * sin(90deg) ] } } @@ -234,16 +234,16 @@ fn letterX(startX, startY) { ], ) |> xLine(%, length = xWidth / 6) - |> angledLine(%, angle = -70, lengthY = xLength * 1 / 3) - |> angledLine(%, angle = 70, lengthY = xLength * 1 / 3) + |> angledLine(%, angle = -70deg, lengthY = xLength * 1 / 3) + |> angledLine(%, angle = 70deg, lengthY = xLength * 1 / 3) |> xLine(%, length = xWidth / 6) - |> angledLine(%, angle = 70 + 180, lengthY = xLength * 1 / 2) - |> angledLine(%, angle = -70, lengthY = xLength * 1 / 2) + |> angledLine(%, angle = 70deg + 180deg, lengthY = xLength * 1 / 2) + |> angledLine(%, angle = -70deg, lengthY = xLength * 1 / 2) |> xLine(%, length = -xWidth / 6) - |> angledLine(%, angle = -70 - 180, lengthY = xLength * 1 / 3) - |> angledLine(%, angle = 70 + 180, lengthY = xLength * 1 / 3) + |> angledLine(%, angle = -70deg - 180deg, lengthY = xLength * 1 / 3) + |> angledLine(%, angle = 70deg + 180deg, lengthY = xLength * 1 / 3) |> xLine(%, length = -xWidth / 6) - |> angledLine(%, angle = 70, lengthY = xLength * 1 / 2) + |> angledLine(%, angle = 70deg, lengthY = xLength * 1 / 2) |> close(%) |> extrude(%, length = numberThickness) |> appearance(%, color = "#140f0f") @@ -333,25 +333,25 @@ sketch005 = startSketchOn(offsetPlane(XY, offset = 55)) profile007 = startProfile( sketch005, at = [ - nubDiameter / 2 * 1.375 * cos(hourHandAngle + 20), - nubDiameter / 2 * 1.375 * sin(hourHandAngle + 20) + nubDiameter / 2 * 1.375 * cos(hourHandAngle + 20deg), + nubDiameter / 2 * 1.375 * sin(hourHandAngle + 20deg) ], ) |> arc( %, interiorAbsolute = [ - nubDiameter / 2 * 1.375 * cos(hourHandAngle + 180), - nubDiameter / 2 * 1.375 * sin(hourHandAngle + 180) + nubDiameter / 2 * 1.375 * cos(hourHandAngle + 180deg), + nubDiameter / 2 * 1.375 * sin(hourHandAngle + 180deg) ], endAbsolute = [ - nubDiameter / 2 * 1.375 * cos(hourHandAngle + 340), - nubDiameter / 2 * 1.375 * sin(hourHandAngle + 340) + nubDiameter / 2 * 1.375 * cos(hourHandAngle + 340deg), + nubDiameter / 2 * 1.375 * sin(hourHandAngle + 340deg) ], ) |> angledLine(%, angle = hourHandAngle, length = hourHandArmLength) |> angledLine( %, - angle = hourHandAngle - 90, + angle = hourHandAngle - 90deg, length = hourHandWidth / 2, tag = $seg004, ) @@ -363,9 +363,9 @@ profile007 = startProfile( ], tag = $seg002, ) - |> angledLine(%, angle = segAng(seg002) + 120, length = segLen(seg002)) - // |> angledLineThatIntersects(%, angle = segAng(seg002) + hourHandAngle - 90, intersectTag = seg004) - |> angledLine(%, angle = hourHandAngle - 90, length = segLen(seg004)) + |> angledLine(%, angle = segAng(seg002) + 120deg, length = segLen(seg002)) + // |> angledLineThatIntersects(%, angle = segAng(seg002) + hourHandAngle - 90deg, intersectTag = seg004) + |> angledLine(%, angle = hourHandAngle - 90deg, length = segLen(seg004)) |> line(%, endAbsolute = [profileStartX(%), profileStartY(%)]) |> close(%) profile008 = circle(sketch005, center = [0, 0], diameter = nubDiameter) @@ -378,25 +378,25 @@ sketch006 = startSketchOn(offsetPlane(XY, offset = 50)) profile009 = startProfile( sketch006, at = [ - nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 20), - nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 20) + nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 20deg), + nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 20deg) ], ) |> arc( %, interiorAbsolute = [ - nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 180), - nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 180) + nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 180deg), + nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 180deg) ], endAbsolute = [ - nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 340), - nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 340) + nubDiameter / 2 * 1.375 * cos(minuteHandAngle + 340deg), + nubDiameter / 2 * 1.375 * sin(minuteHandAngle + 340deg) ], ) |> angledLine(%, angle = minuteHandAngle, length = minuteHandArmLength) |> angledLine( %, - angle = minuteHandAngle - 90, + angle = minuteHandAngle - 90deg, length = minuteHandWidth / 2, tag = $seg003, ) @@ -408,8 +408,8 @@ profile009 = startProfile( ], tag = $seg005, ) - |> angledLine(%, angle = segAng(seg005) + 120, length = segLen(seg005)) - |> angledLine(%, angle = minuteHandAngle - 90, length = segLen(seg003)) + |> angledLine(%, angle = segAng(seg005) + 120deg, length = segLen(seg005)) + |> angledLine(%, angle = minuteHandAngle - 90deg, length = segLen(seg003)) |> line(%, endAbsolute = [profileStartX(%), profileStartY(%)]) |> close(%) profile010 = circle(sketch006, center = [0, 0], diameter = 30) @@ -430,8 +430,8 @@ profile004 = startProfile(sketch003, at = [-slotWidth / 2, 200]) |> arc( %, radius = screwHeadDiameter / 2 + screwTolerance, - angleStart = 120, - angleEnd = 420, + angleStart = 120deg, + angleEnd = 420deg, ) |> yLine(%, length = slotLength) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) diff --git a/public/kcl-samples/cold-plate/main.kcl b/public/kcl-samples/cold-plate/main.kcl index 37f5b9fa85..42f90b193b 100644 --- a/public/kcl-samples/cold-plate/main.kcl +++ b/public/kcl-samples/cold-plate/main.kcl @@ -14,15 +14,15 @@ coldPlate = startSketchOn(YZ) |> startProfile(at = [0, tubeDiameter * 2]) |> xLine(length = bendRadius - (tubeDiameter / 2)) |> yLine(length = -tubeDiameter) - |> tangentialArc(angle = 180, radius = tubeDiameter / 2) + |> tangentialArc(angle = 180deg, radius = tubeDiameter / 2) |> yLine(length = tubeDiameter) |> xLine(length = bendRadius * 2 - tubeDiameter, tag = $seg07) |> yLine(length = -tubeDiameter, tag = $seg09) - |> tangentialArc(angle = 180, radius = tubeDiameter / 2) + |> tangentialArc(angle = 180deg, radius = tubeDiameter / 2) |> yLine(length = tubeDiameter, tag = $seg08) |> xLine(length = bendRadius - (tubeDiameter / 2)) - |> angledLine(angle = -77, length = tubeDiameter / 3) - |> tangentialArc(angle = 77, radius = tubeDiameter, tag = $seg01) + |> angledLine(angle = -77deg, length = tubeDiameter / 3) + |> tangentialArc(angle = 77deg, radius = tubeDiameter, tag = $seg01) |> angledLine(angle = tangentToEnd(seg01), length = 1) |> yLine(endAbsolute = 0) |> xLine(endAbsolute = 0) @@ -34,11 +34,11 @@ coldPlate = startSketchOn(YZ) copperTubePath = startSketchOn(offsetPlane(XY, offset = tubeDiameter)) |> startProfile(at = [-7.35, -bendRadius * 3]) |> xLine(length = 14.13, tag = $seg05) - |> tangentialArc(angle = 180, radius = bendRadius, tag = $seg02) + |> tangentialArc(angle = 180deg, radius = bendRadius, tag = $seg02) |> angledLine(angle = tangentToEnd(seg02), length = 13.02, tag = $seg06) - |> tangentialArc(angle = -180, radius = bendRadius, tag = $seg03) + |> tangentialArc(angle = -180deg, radius = bendRadius, tag = $seg03) |> angledLine(angle = tangentToEnd(seg03), length = segLen(seg06)) - |> tangentialArc(angle = 180, radius = bendRadius, tag = $seg04) + |> tangentialArc(angle = 180deg, radius = bendRadius, tag = $seg04) |> angledLine(angle = tangentToEnd(seg04), length = segLen(seg05)) // Create the profile for the inner and outer diameter of the hollow copper tube diff --git a/public/kcl-samples/countersunk-plate/main.kcl b/public/kcl-samples/countersunk-plate/main.kcl index d42061e373..bf1f49d58d 100644 --- a/public/kcl-samples/countersunk-plate/main.kcl +++ b/public/kcl-samples/countersunk-plate/main.kcl @@ -22,13 +22,13 @@ tangentLength = (r1 - r2) / tan(tangentAngle) plateBody = startSketchOn(XY) // Use polar coordinates to start the sketch at the tangent point of the larger radius - |> startProfile(at = polar(angle = 90 - tangentAngle, length = r1)) + |> startProfile(at = polar(angle = 90deg - tangentAngle, length = r1)) |> angledLine(angle = -tangentAngle, length = tangentLength) - |> tangentialArc(radius = r2, angle = (tangentAngle - 90) * 2) + |> tangentialArc(radius = r2, angle = (tangentAngle - 90deg) * 2) |> angledLine(angle = tangentAngle, length = -tangentLength) |> tangentialArc(radius = r1, angle = -tangentAngle * 2) |> angledLine(angle = -tangentAngle, length = -tangentLength) - |> tangentialArc(radius = r2, angle = (tangentAngle - 90) * 2) + |> tangentialArc(radius = r2, angle = (tangentAngle - 90deg) * 2) |> angledLine(angle = tangentAngle, length = tangentLength) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() diff --git a/public/kcl-samples/cpu-cooler/fan-housing.kcl b/public/kcl-samples/cpu-cooler/fan-housing.kcl index 812a733a45..30270378df 100644 --- a/public/kcl-samples/cpu-cooler/fan-housing.kcl +++ b/public/kcl-samples/cpu-cooler/fan-housing.kcl @@ -12,7 +12,7 @@ import * from "parameters.kcl" bottomFaceSketch = startSketchOn(YZ) |> startProfile(at = [-fanSize / 2, -fanSize / 2]) |> angledLine(angle = 0, length = fanSize, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = fanSize, tag = $rectangleSegmentB001) + |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = fanSize, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001) |> close() @@ -50,12 +50,12 @@ bottomFaceSketch = startSketchOn(YZ) // Add large openings to the bottom face to allow airflow through the fan airflowPattern = startSketchOn(bottomFaceSketch, face = END) |> startProfile(at = [fanSize * 7 / 25, -fanSize * 9 / 25]) - |> angledLine(angle = 140, length = fanSize * 12 / 25, tag = $seg01) - |> tangentialArc(radius = fanSize * 1 / 50, angle = 90) - |> angledLine(angle = -130, length = fanSize * 8 / 25) - |> tangentialArc(radius = fanSize * 1 / 50, angle = 90) - |> angledLine(angle = segAng(seg01) + 180, length = fanSize * 2 / 25) - |> tangentialArc(radius = fanSize * 8 / 25, angle = 40) + |> angledLine(angle = 140deg, length = fanSize * 12 / 25, tag = $seg01) + |> tangentialArc(radius = fanSize * 1 / 50, angle = 90deg) + |> angledLine(angle = -130deg, length = fanSize * 8 / 25) + |> tangentialArc(radius = fanSize * 1 / 50, angle = 90deg) + |> angledLine(angle = segAng(seg01) + 180deg, length = fanSize * 2 / 25) + |> tangentialArc(radius = fanSize * 8 / 25, angle = 40deg) |> xLine(length = fanSize * 3 / 25) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -75,13 +75,13 @@ bodyMiddle = startSketchOn(bottomFaceSketch, face = END) housingMiddleLength / 2, -housingMiddleLength / 2 - housingMiddleRadius ]) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> yLine(length = housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> xLine(length = -housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> yLine(length = -housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> extrude(length = fanHeight - 4 - 4) diff --git a/public/kcl-samples/cpu-cooler/fan.kcl b/public/kcl-samples/cpu-cooler/fan.kcl index 602c8401f9..c3ee99c36b 100644 --- a/public/kcl-samples/cpu-cooler/fan.kcl +++ b/public/kcl-samples/cpu-cooler/fan.kcl @@ -20,32 +20,32 @@ fn fanBlade(offsetHeight, startAngle) { 15 * cos(startAngle), 15 * sin(startAngle) ]) - |> arc(angleStart = startAngle, angleEnd = startAngle + 14, radius = 15) + |> arc(angleStart = startAngle, angleEnd = startAngle + 14deg, radius = 15) |> arc( endAbsolute = [ - fanSize * 22 / 50 * cos(startAngle - 20), - fanSize * 22 / 50 * sin(startAngle - 20) + fanSize * 22 / 50 * cos(startAngle - 20deg), + fanSize * 22 / 50 * sin(startAngle - 20deg) ], interiorAbsolute = [ - fanSize * 11 / 50 * cos(startAngle + 3), - fanSize * 11 / 50 * sin(startAngle + 3) + fanSize * 11 / 50 * cos(startAngle + 3deg), + fanSize * 11 / 50 * sin(startAngle + 3deg) ], ) |> arc( endAbsolute = [ - fanSize * 22 / 50 * cos(startAngle - 24), - fanSize * 22 / 50 * sin(startAngle - 24) + fanSize * 22 / 50 * cos(startAngle - 24deg), + fanSize * 22 / 50 * sin(startAngle - 24deg) ], interiorAbsolute = [ - fanSize * 22 / 50 * cos(startAngle - 22), - fanSize * 22 / 50 * sin(startAngle - 22) + fanSize * 22 / 50 * cos(startAngle - 22deg), + fanSize * 22 / 50 * sin(startAngle - 22deg) ], ) |> arc( endAbsolute = [profileStartX(%), profileStartY(%)], interiorAbsolute = [ - fanSize * 11 / 50 * cos(startAngle - 5), - fanSize * 11 / 50 * sin(startAngle - 5) + fanSize * 11 / 50 * cos(startAngle - 5deg), + fanSize * 11 / 50 * sin(startAngle - 5deg) ], ) |> close() @@ -54,8 +54,8 @@ fn fanBlade(offsetHeight, startAngle) { // Loft the fan blade cross sections into a single blade, then pattern them about the fan center crossSections = [ - fanBlade(offsetHeight = 4.5, startAngle = 50), - fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30), + fanBlade(offsetHeight = 4.5, startAngle = 50deg), + fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30deg), fanBlade(offsetHeight = fanHeight - 2, startAngle = 0) ] bladeLoft = loft(crossSections) @@ -63,7 +63,7 @@ bladeLoft = loft(crossSections) instances = 9, axis = [1, 0, 0], center = [0, 0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) diff --git a/public/kcl-samples/cpu-cooler/heat-sink.kcl b/public/kcl-samples/cpu-cooler/heat-sink.kcl index 71f0846e06..1e583ebf66 100644 --- a/public/kcl-samples/cpu-cooler/heat-sink.kcl +++ b/public/kcl-samples/cpu-cooler/heat-sink.kcl @@ -11,10 +11,10 @@ import * from "parameters.kcl" endTubePath = startSketchOn(offsetPlane(YZ, offset = -20)) |> startProfile(at = [fanSize / 4, fanSize + 38]) |> yLine(endAbsolute = bendRadius + 10, tag = $seg01) - |> tangentialArc(radius = bendRadius, angle = -90) + |> tangentialArc(radius = bendRadius, angle = -90deg) |> xLine(endAbsolute = 0, tag = $seg02) |> xLine(length = -segLen(seg02)) - |> tangentialArc(radius = bendRadius, angle = -90) + |> tangentialArc(radius = bendRadius, angle = -90deg) |> yLine(length = segLen(seg01)) // Sweep and translate the outermost tube on each end @@ -35,13 +35,13 @@ endTube = startSketchOn(offsetPlane(XY, offset = fanSize + 38)) centerTubePath = startSketchOn(offsetPlane(YZ, offset = -4)) |> startProfile(at = [fanSize / 2.67, fanSize + 38]) |> yLine(endAbsolute = bendRadius + 15 + 10) - |> tangentialArc(radius = bendRadius, angle = -45) - |> angledLine(angle = -135, lengthY = 15) - |> tangentialArc(radius = bendRadius, angle = -45) + |> tangentialArc(radius = bendRadius, angle = -45deg) + |> angledLine(angle = -135deg, lengthY = 15) + |> tangentialArc(radius = bendRadius, angle = -45deg) |> xLine(endAbsolute = 0, tag = $seg03) |> xLine(length = -segLen(seg03)) - |> tangentialArc(radius = bendRadius, angle = -155) - |> tangentialArc(radius = bendRadius, angle = 65) + |> tangentialArc(radius = bendRadius, angle = -155deg) + |> tangentialArc(radius = bendRadius, angle = 65deg) |> yLine(endAbsolute = fanSize + 38) // Draw the profile and sweep the 4 interior tubes @@ -68,13 +68,13 @@ centerTube = startSketchOn(offsetPlane(XY, offset = fanSize + 38)) heatFins = startSketchOn(offsetPlane(XY, offset = 45)) |> startProfile(at = [0, -fanSize / 2]) |> xLine(length = 9) - |> angledLine(angle = -60, length = 2.5, tag = $seg04) + |> angledLine(angle = -60deg, length = 2.5, tag = $seg04) |> xLine(length = 0.75) |> arc(interiorAbsolute = [lastSegX(%) + 1, lastSegY(%) + 1.2], endAbsolute = [lastSegX(%) + 2, lastSegY(%)]) |> xLine(length = 0.75) - |> angledLine(angle = 60, length = segLen(seg04)) + |> angledLine(angle = 60deg, length = segLen(seg04)) |> xLine(endAbsolute = heatSinkDepth / 2 - 3) - |> tangentialArc(angle = 90, radius = 3) + |> tangentialArc(angle = 90deg, radius = 3) |> yLine(endAbsolute = 0) |> mirror2d(axis = X) |> mirror2d(axis = Y) @@ -91,11 +91,11 @@ heatFins = startSketchOn(offsetPlane(XY, offset = 45)) coolerBase = startSketchOn(-XZ) baseLower = startProfile(coolerBase, at = [0, 10]) |> xLine(length = -0.9) - |> arc(angleStart = 0, angleEnd = -180, radius = 3.1) + |> arc(angleStart = 0, angleEnd = -180deg, radius = 3.1) |> xLine(length = -1.8) - |> arc(angleStart = 0, angleEnd = -180, radius = 3) + |> arc(angleStart = 0, angleEnd = -180deg, radius = 3) |> xLine(length = -1.8) - |> arc(angleStart = 0, angleEnd = -180, radius = 3) + |> arc(angleStart = 0, angleEnd = -180deg, radius = 3) |> xLine(length = -1.8) |> xLine(length = -2) |> yLine(length = -10) @@ -105,15 +105,15 @@ baseLower = startProfile(coolerBase, at = [0, 10]) baseUpper = startProfile(coolerBase, at = [0, 10]) |> xLine(length = -0.9) - |> arc(angleStart = 0, angleEnd = 180, radius = 3.1) + |> arc(angleStart = 0, angleEnd = 180deg, radius = 3.1) |> xLine(length = -1.8) - |> arc(angleStart = 0, angleEnd = 180, radius = 3) + |> arc(angleStart = 0, angleEnd = 180deg, radius = 3) |> xLine(length = -1.8) - |> arc(angleStart = 0, angleEnd = 180, radius = 3) + |> arc(angleStart = 0, angleEnd = 180deg, radius = 3) |> xLine(length = -1.8) |> xLine(length = -1) |> yLine(length = 4) - |> tangentialArc(angle = -90, radius = 2) + |> tangentialArc(angle = -90deg, radius = 2) |> xLine(endAbsolute = 0) |> mirror2d(axis = Y) |> extrude(length = 2 * segLen(seg02) * 3 / 4, symmetric = true) @@ -122,15 +122,15 @@ baseUpper = startProfile(coolerBase, at = [0, 10]) mountingBracket = startSketchOn(XZ) |> startProfile(at = [-10, 16]) |> xLine(length = -20) - |> tangentialArc(angle = 20, radius = bendRadius) - |> angledLine(angle = -160, length = 14, tag = $seg09) - |> tangentialArc(angle = -30, radius = bendRadius + sheetThickness) - |> angledLine(angle = 170, length = 21.5, tag = $seg04Q) - |> angledLine(angle = 170 - 90, length = sheetThickness, tag = $seg08) - |> angledLine(angle = segAng(seg04Q) + 180, length = segLen(seg04Q), tag = $seg05E) - |> tangentialArc(angle = 30, radius = bendRadius) - |> angledLine(angle = segAng(seg09) + 180, length = segLen(seg09)) - |> tangentialArc(angle = -20, radius = bendRadius + sheetThickness) + |> tangentialArc(angle = 20deg, radius = bendRadius) + |> angledLine(angle = -160deg, length = 14, tag = $seg09) + |> tangentialArc(angle = -30deg, radius = bendRadius + sheetThickness) + |> angledLine(angle = 170deg, length = 21.5, tag = $seg04Q) + |> angledLine(angle = 170deg - 90, length = sheetThickness, tag = $seg08) + |> angledLine(angle = segAng(seg04Q) + 180deg, length = segLen(seg04Q), tag = $seg05E) + |> tangentialArc(angle = 30deg, radius = bendRadius) + |> angledLine(angle = segAng(seg09) + 180deg, length = segLen(seg09)) + |> tangentialArc(angle = -20deg, radius = bendRadius + sheetThickness) |> xLine(endAbsolute = profileStartX(%)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg07) |> close() @@ -166,6 +166,6 @@ thruHole = startSketchOn(mountingBracket, face = seg05E) instances = 2, axis = [0, 0, 1], center = [0, 0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) diff --git a/public/kcl-samples/cpu-cooler/main.kcl b/public/kcl-samples/cpu-cooler/main.kcl index ffc9a1b6ce..10a804f88b 100644 --- a/public/kcl-samples/cpu-cooler/main.kcl +++ b/public/kcl-samples/cpu-cooler/main.kcl @@ -37,7 +37,7 @@ mountingWire instances = 2, axis = [0, 1, 0], center = [0, 0, 40 + fanSize / 2], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> patternCircular3d( @@ -45,7 +45,7 @@ mountingWire instances = 2, axis = [0, 0, 1], center = [0, 0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) removableSticker diff --git a/public/kcl-samples/cpu-cooler/mounting-wire.kcl b/public/kcl-samples/cpu-cooler/mounting-wire.kcl index 2302efe62d..21cd4ff206 100644 --- a/public/kcl-samples/cpu-cooler/mounting-wire.kcl +++ b/public/kcl-samples/cpu-cooler/mounting-wire.kcl @@ -11,29 +11,29 @@ import * from "parameters.kcl" upperArm = startSketchOn(offsetPlane(XZ, offset = fanSize / 2 + 2)) |> startProfile(at = [-12, 40 + fanSize / 2]) |> yLine(length = 7) - |> tangentialArc(radius = 2, angle = 90) + |> tangentialArc(radius = 2, angle = 90deg) |> xLine(length = -9) - |> tangentialArc(radius = 2, angle = -90) + |> tangentialArc(radius = 2, angle = -90deg) |> yLine(length = 14) - |> tangentialArc(radius = 2, angle = 90) + |> tangentialArc(radius = 2, angle = 90deg) |> xLine(length = -9) - |> tangentialArc(radius = 2, angle = -80) - |> angledLine(angle = 100, endAbsoluteY = 40 + fanSize / 2 + mountingHoleSpacing / 2 - 1.5) - |> tangentialArc(radius = 2, angle = 80, tag = $seg07) + |> tangentialArc(radius = 2, angle = -80deg) + |> angledLine(angle = 100deg, endAbsoluteY = 40 + fanSize / 2 + mountingHoleSpacing / 2 - 1.5) + |> tangentialArc(radius = 2, angle = 80deg, tag = $seg07) // Draw the XZ component of the mounting wire path lowerArm = startSketchOn(offsetPlane(XZ, offset = fanSize / 2 + 2)) |> startProfile(at = [-12, 40 + fanSize / 2]) |> yLine(length = -7) - |> tangentialArc(radius = 2, angle = -90) + |> tangentialArc(radius = 2, angle = -90deg) |> xLine(length = -9) - |> tangentialArc(radius = 2, angle = 90) + |> tangentialArc(radius = 2, angle = 90deg) |> yLine(length = -14) - |> tangentialArc(radius = 2, angle = -90) + |> tangentialArc(radius = 2, angle = -90deg) |> xLine(length = -9) - |> tangentialArc(radius = 2, angle = 80) - |> angledLine(angle = -100, endAbsoluteY = 40 + fanSize / 2 - (mountingHoleSpacing / 2) + 1.5) - |> tangentialArc(radius = 2, angle = -80, tag = $seg08) + |> tangentialArc(radius = 2, angle = 80deg) + |> angledLine(angle = -100deg, endAbsoluteY = 40 + fanSize / 2 - (mountingHoleSpacing / 2) + 1.5) + |> tangentialArc(radius = 2, angle = -80deg, tag = $seg08) // Create the profile of the mounting wire and sweep along the XZ path wireProfile = startSketchOn(offsetPlane(XY, offset = 40 + fanSize / 2)) @@ -47,18 +47,18 @@ sweepLowerArm = circle(wireProfile, center = [-12, -fanSize / 2 - 2], radius = 1 upperHook = startSketchOn(offsetPlane(XY, offset = segEndY(seg07))) |> startProfile(at = [segEndX(seg07), -fanSize / 2 - 2]) |> xLine(endAbsolute = -heatSinkDepth / 2 - fanHeight) - |> tangentialArc(radius = 2, angle = -90) + |> tangentialArc(radius = 2, angle = -90deg) |> yLine(endAbsolute = -mountingHoleSpacing / 2 - 2) - |> tangentialArc(radius = 2, angle = -90) + |> tangentialArc(radius = 2, angle = -90deg) |> xLine(length = fanHeight / 3) // Draw the XY components of the mounting wire path lowerHook = startSketchOn(offsetPlane(XY, offset = segEndY(seg08))) |> startProfile(at = [segEndX(seg07), -fanSize / 2 - 2]) |> xLine(endAbsolute = -heatSinkDepth / 2 - fanHeight) - |> tangentialArc(radius = 2, angle = -90) + |> tangentialArc(radius = 2, angle = -90deg) |> yLine(endAbsolute = -mountingHoleSpacing / 2 - 2) - |> tangentialArc(radius = 2, angle = -90) + |> tangentialArc(radius = 2, angle = -90deg) |> xLine(length = fanHeight / 3) // Sweep the wire profile around the hook-shaped segments of the mounting wire diff --git a/public/kcl-samples/cpu-cooler/removable-sticker.kcl b/public/kcl-samples/cpu-cooler/removable-sticker.kcl index 849089db1d..826aef4e64 100644 --- a/public/kcl-samples/cpu-cooler/removable-sticker.kcl +++ b/public/kcl-samples/cpu-cooler/removable-sticker.kcl @@ -8,7 +8,7 @@ removableSticker = startSketchOn(-XY) |> startProfile(at = [-12, -12]) |> angledLine(angle = 0, length = 24, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 24, tag = $rectangleSegmentB001) + |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = 24, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001) |> close() diff --git a/public/kcl-samples/cycloidal-gear/main.kcl b/public/kcl-samples/cycloidal-gear/main.kcl index 74d1f5848e..925e364d5d 100644 --- a/public/kcl-samples/cycloidal-gear/main.kcl +++ b/public/kcl-samples/cycloidal-gear/main.kcl @@ -14,11 +14,11 @@ fn cycloidalGear(gearPitch, gearHeight, holeDiameter, helixAngle: number(deg)) { gearPitch * 1.55 * cos(helixAngleP) + gearPitch * sin(-helixAngleP), gearPitch * 1.55 * sin(helixAngleP) + gearPitch * cos(-helixAngleP) ]) - |> arc(angleStart = 90 + helixAngleP, angleEnd = -90 + helixAngleP, radius = gearPitch) - |> tangentialArc(radius = gearPitch * 1.67, angle = 60) - |> tangentialArc(radius = gearPitch, angle = -180) - |> tangentialArc(radius = gearPitch * 1.67, angle = 60) - |> tangentialArc(radius = gearPitch, angle = -180) + |> arc(angleStart = 90deg + helixAngleP, angleEnd = -90deg + helixAngleP, radius = gearPitch) + |> tangentialArc(radius = gearPitch * 1.67, angle = 60deg) + |> tangentialArc(radius = gearPitch, angle = -180deg) + |> tangentialArc(radius = gearPitch * 1.67, angle = 60deg) + |> tangentialArc(radius = gearPitch, angle = -180deg) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close(%) |> subtract2d(tool = circle(center = [0, 0], radius = holeDiameter / 2)) @@ -40,5 +40,5 @@ cycloidalGear( gearPitch = .3, gearHeight = 1.5, holeDiameter = 0.297, - helixAngle = -80, + helixAngle = -80deg, ) diff --git a/public/kcl-samples/exhaust-manifold/main.kcl b/public/kcl-samples/exhaust-manifold/main.kcl index 6260b2e3d1..8b2886e0f5 100644 --- a/public/kcl-samples/exhaust-manifold/main.kcl +++ b/public/kcl-samples/exhaust-manifold/main.kcl @@ -27,9 +27,9 @@ fn primaryTube(n, angle001, length001, length002, length003) { sweepPath = startSketchOn(sweepPlane) |> startProfile(at = [0, plateHeight]) |> line(end = [0, length001]) - |> tangentialArc(angle = -80, radius = bendRadius, tag = $arc01) + |> tangentialArc(angle = -80deg, radius = bendRadius, tag = $arc01) |> angledLine(angle = tangentToEnd(arc01), length = length002) - |> tangentialArc(angle = 85, radius = bendRadius, tag = $arc02) + |> tangentialArc(angle = 85deg, radius = bendRadius, tag = $arc02) |> angledLine(angle = tangentToEnd(arc02), length = length003) // Create the cross section of each tube and sweep them @@ -51,21 +51,21 @@ primaryTube( ) primaryTube( n = 1, - angle001 = 1, + angle001 = 1deg, length001 = 3, length002 = 6, length003 = 5, ) primaryTube( n = 2, - angle001 = 24.3, + angle001 = 24.3deg, length001 = 5, length002 = 5, length003 = 3, ) primaryTube( n = 3, - angle001 = 25.2, + angle001 = 25.2deg, length001 = 5, length002 = 5, length003 = 3, @@ -75,20 +75,20 @@ primaryTube( flangeSketch = startSketchOn(XY) |> startProfile(at = [3 + 1.3, -1.25]) |> xLine(length = -2.6, tag = $seg01) - |> tangentialArc(radius = .3, angle = -40) - |> tangentialArc(radius = .9, angle = 80) - |> tangentialArc(radius = .3, angle = -40) + |> tangentialArc(radius = .3, angle = -40deg) + |> tangentialArc(radius = .9, angle = 80deg) + |> tangentialArc(radius = .3, angle = -40deg) |> xLine(length = -1.4, tag = $seg03) |> yLine(length = segLen(seg01), tag = $seg04) |> xLine(length = 3.1, tag = $seg05) - |> tangentialArc(radius = .3, angle = -40) - |> tangentialArc(radius = 1.5, angle = 80) - |> tangentialArc(radius = .3, angle = -40) + |> tangentialArc(radius = .3, angle = -40deg) + |> tangentialArc(radius = 1.5, angle = 80deg) + |> tangentialArc(radius = .3, angle = -40deg) |> xLine(length = segLen(seg05), tag = $seg07) |> yLine(endAbsolute = profileStartY(%), tag = $seg08) |> xLine(length = -segLen(seg03), tag = $seg09) - |> tangentialArc(radius = .3, angle = -40) - |> tangentialArc(radius = .9, angle = 80) + |> tangentialArc(radius = .3, angle = -40deg) + |> tangentialArc(radius = .9, angle = 80deg) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() diff --git a/public/kcl-samples/food-service-spatula/main.kcl b/public/kcl-samples/food-service-spatula/main.kcl index e0d5141dfc..4c2d00f88a 100644 --- a/public/kcl-samples/food-service-spatula/main.kcl +++ b/public/kcl-samples/food-service-spatula/main.kcl @@ -20,24 +20,24 @@ gripSlotWidth = 8.0 fn slot(sketch1, start, end, width) { angle = if start[0] == end[0] { if end[1] > start[1] { - 90 + 90deg } else { - 270 + 270deg } } else { if end[0] < start[0] { - units::toDegrees(atan((end[1] - start[1]) / (end[0] - start[0]))) + 180 + units::toDegrees(atan((end[1] - start[1]) / (end[0] - start[0]))) + 180deg } else { units::toDegrees(atan((end[1] - start[1]) / (end[0] - start[0]))) } } dist = sqrt(pow(end[1] - start[1], exp = 2) + pow(end[0] - start[0], exp = 2)) - xstart = width / 2 * cos(angle - 90) + start[0] - ystart = width / 2 * sin(angle - 90) + start[1] + xstart = width / 2 * cos(angle - 90deg) + start[0] + ystart = width / 2 * sin(angle - 90deg) + start[1] slotSketch = startProfile(sketch1, at = [xstart, ystart]) - |> angledLine(angle = angle, length = dist) - |> tangentialArc(radius = width / 2, angle = 180) - |> angledLine(angle = angle, length = -dist) + |> angledLine(angle, length = dist) + |> tangentialArc(radius = width / 2, angle = 180deg) + |> angledLine(angle, length = -dist) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() return slotSketch @@ -51,7 +51,7 @@ flipperProfile = startProfile(flipperSketch, at = [-flipperLength, -32.0]) |> line(end = [flipperLength, 2.0]) |> yLine(length = 60.0, tag = $backEdge) |> line(end = [-flipperLength, 2.0]) - |> arc(angleStart = 163.087610, angleEnd = 196.912390, radius = 110.0) + |> arc(angleStart = 163.087610deg, angleEnd = 196.912390deg, radius = 110.0) |> close() // Create a profile of the middle @@ -137,13 +137,13 @@ gripSketch = startSketchOn(handlePlane) // Create a profile of the grip gripProfile = startProfile(gripSketch, at = [-26.806746, -10.0]) |> xLine(length = gripWidth - (2 * gripFilletRadius)) - |> arc(angleStart = -90.0, angleEnd = 0.0, radius = gripFilletRadius) + |> arc(angleStart = -90.0deg, angleEnd = 0.0, radius = gripFilletRadius) |> yLine(length = gripHeight - (2 * gripFilletRadius)) - |> arc(angleStart = 0.0, angleEnd = 90.0, radius = gripFilletRadius) + |> arc(angleStart = 0.0, angleEnd = 90.0deg, radius = gripFilletRadius) |> xLine(length = -(gripWidth - (2 * gripFilletRadius))) - |> arc(angleStart = 90.0, angleEnd = 180.0, radius = gripFilletRadius) + |> arc(angleStart = 90.0deg, angleEnd = 180.0deg, radius = gripFilletRadius) |> yLine(length = -(gripHeight - (2 * gripFilletRadius)), tag = $gripEdgeTop) - |> arc(angleStart = 180.0, angleEnd = 270.0, radius = gripFilletRadius) + |> arc(angleStart = 180.0deg, angleEnd = 270.0deg, radius = gripFilletRadius) |> close() // Extrude the grip profile to create the grip diff --git a/public/kcl-samples/french-press/main.kcl b/public/kcl-samples/french-press/main.kcl index 4f19b3ae79..f8dedf5e05 100644 --- a/public/kcl-samples/french-press/main.kcl +++ b/public/kcl-samples/french-press/main.kcl @@ -13,11 +13,11 @@ handleThickness = 0.65 sketch001 = startSketchOn(XZ) |> startProfile(at = [carafeDiameter / 2, 5.7]) |> angledLine(angle = 0, length = 0.1, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = -0.75, tag = $rectangleSegmentB001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = -0.75, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> revolve(angle = 360, axis = Y) + |> revolve(angle = 360deg, axis = Y) // Create an angled plane to sketch the supports plane001 = { @@ -32,19 +32,19 @@ sketch002 = startSketchOn(plane001) |> startProfile(at = [carafeDiameter / 2, 5.7]) |> xLine(length = 0.1) |> yLine(length = -5.2, tag = $edge1) - |> arc(angleStart = 180, angleEnd = 205, radius = 0.3) - |> angledLine(angle = -60, length = 0.6, tag = $edge2) - |> arc(angleStart = 30, angleEnd = -120, radius = 0.6) - |> angledLine(angle = 150, endAbsoluteY = -0.2, tag = $edge3) - |> arc(angleStart = 60, angleEnd = 90, radius = 0.5) + |> arc(angleStart = 180deg, angleEnd = 205deg, radius = 0.3) + |> angledLine(angle = -60deg, length = 0.6, tag = $edge2) + |> arc(angleStart = 30deg, angleEnd = -120deg, radius = 0.6) + |> angledLine(angle = 150deg, endAbsoluteY = -0.2, tag = $edge3) + |> arc(angleStart = 60deg, angleEnd = 90deg, radius = 0.5) |> xLine(endAbsolute = 0.1, tag = $edgeLen) |> yLine(length = 0.1) |> xLine(length = segLen(edgeLen) + 0.035, tag = $edge4) - |> arc(angleStart = 90, angleEnd = 60, radius = 0.6) - |> angledLine(angle = 150, length = -segLen(edge3) + 0.035, tag = $edge5) - |> arc(angleStart = -120, angleEnd = 30, radius = 0.5) - |> angledLine(angle = -60, length = -segLen(edge2) + 0.035, tag = $edge6) - |> arc(angleStart = 205, angleEnd = 180, radius = 0.6) + |> arc(angleStart = 90deg, angleEnd = 60deg, radius = 0.6) + |> angledLine(angle = 150deg, length = -segLen(edge3) + 0.035, tag = $edge5) + |> arc(angleStart = -120deg, angleEnd = 30deg, radius = 0.5) + |> angledLine(angle = -60deg, length = -segLen(edge2) + 0.035, tag = $edge6) + |> arc(angleStart = 205deg, angleEnd = 180deg, radius = 0.6) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> extrude(length = 0.75) @@ -52,7 +52,7 @@ sketch002 = startSketchOn(plane001) axis = [0, 0, 1], center = [0, 0, 0], instances = 4, - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) @@ -65,7 +65,7 @@ extrude001 = extrude(sketch003, length = 0.050) sketch004 = startSketchOn(extrude001, face = END) |> startProfile(at = [0.3, 0.17]) |> yLine(length = 1.2) - |> arc(angleStart = 90, angleEnd = -30, radius = 1.2) + |> arc(angleStart = 90deg, angleEnd = -30deg, radius = 1.2) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> patternCircular2d( @@ -81,9 +81,9 @@ extrude002 = extrude(sketch004, length = -0.050) sketch005 = startSketchOn(XZ) |> startProfile(at = [0.15, 1.11]) |> xLine(endAbsolute = carafeDiameter / 2 - 0.2) - |> angledLine(angle = 30, endAbsoluteX = carafeDiameter / 2 - 0.07, tag = $seg1) - |> angledLine(angle = -60, length = 0.050) - |> angledLine(angle = 30, length = -segLen(seg1)) + |> angledLine(angle = 30deg, endAbsoluteX = carafeDiameter / 2 - 0.07, tag = $seg1) + |> angledLine(angle = -60deg, length = 0.050) + |> angledLine(angle = 30deg, length = -segLen(seg1)) |> xLine(endAbsolute = 0.15) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -93,11 +93,11 @@ sketch005 = startSketchOn(XZ) sketch006 = startSketchOn(XZ) |> startProfile(at = [0.1, 1]) |> line(end = [0.1, 0]) - |> angledLine(angle = 10, endAbsoluteX = 0.05) + |> angledLine(angle = 10deg, endAbsoluteX = 0.05) |> yLine(length = 10) |> line(end = [0.6, 0]) |> yLine(length = -.05) - |> tangentialArc(radius = 0.6, angle = -90) + |> tangentialArc(radius = 0.6, angle = -90deg) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> revolve(axis = Y) @@ -115,7 +115,7 @@ sketch008 = startSketchOn(extrude003, face = END) |> patternCircular2d( center = [0, 0], instances = 8, - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) @@ -127,7 +127,7 @@ sketch009 = startSketchOn(extrude003, face = END) |> patternCircular2d( center = [0, 0], instances = 4, - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) diff --git a/public/kcl-samples/hammer/main.kcl b/public/kcl-samples/hammer/main.kcl index 303729c61c..c769808421 100644 --- a/public/kcl-samples/hammer/main.kcl +++ b/public/kcl-samples/hammer/main.kcl @@ -10,16 +10,16 @@ headSideProfile = startSketchOn(XZ) |> yLine(length = 0.1) |> tangentialArc(endAbsolute = [0.95, 11.92]) |> tangentialArc(endAbsolute = [2.72, 11.26], tag = $seg01) - |> angledLine(angle = tangentToEnd(seg01) + 90, length = .2) - |> angledLine(angle = tangentToEnd(seg01) - 10, length = -0.5) + |> angledLine(angle = tangentToEnd(seg01) + 90deg, length = .2) + |> angledLine(angle = tangentToEnd(seg01) - 10deg, length = -0.5) |> tangentialArc(endAbsolute = [-0.91, 12.78], tag = $seg03) |> tangentialArc(endAbsolute = [-1.67, 12.85]) |> xLine(length = -.25) - |> tangentialArc(angle = 90, radius = .05) + |> tangentialArc(angle = 90deg, radius = .05) |> yLine(length = -1.125, tag = $seg02) - |> tangentialArc(angle = 90, radius = .05) + |> tangentialArc(angle = 90deg, radius = .05) |> xLine(length = .25, tag = $seg04) - |> angledLine(angle = 23, length = 0.1) + |> angledLine(angle = 23deg, length = 0.1) |> tangentialArc(endAbsolute = [-0.33, profileStartY(%)]) |> xLine(endAbsolute = profileStartX(%)) |> close() @@ -31,8 +31,8 @@ leftSideCut = startProfile(headTopProfile, at = [-4, -1.6]) |> line(endAbsolute = [segEndX(seg02), -segLen(seg02) / 2]) |> arc( %, - angleStart = 180, - angleEnd = 270, + angleStart = 180deg, + angleEnd = 270deg, radius = .05, ) |> xLine(endAbsolute = segEndX(seg04)) @@ -44,7 +44,7 @@ leftSideCut = startProfile(headTopProfile, at = [-4, -1.6]) |> extrude(length = -14) rearCut = startProfile(headTopProfile, at = [3.39, -0.56]) - |> angledLine(angle = 177, length = 0.1) + |> angledLine(angle = 177deg, length = 0.1) |> tangentialArc(endAbsolute = [1.86, -0.37]) |> tangentialArc(endAbsolute = [lastSegX(%), -lastSegY(%)]) |> tangentialArc(endAbsolute = [profileStartX(%), -profileStartY(%)]) @@ -56,8 +56,8 @@ rightSideCut = startProfile(headTopProfile, at = [-4, 1.6]) |> line(endAbsolute = [segEndX(seg02), segLen(seg02) / 2]) |> arc( %, - angleStart = -180, - angleEnd = -270, + angleStart = -180deg, + angleEnd = -270deg, radius = .05, ) |> xLine(endAbsolute = segEndX(seg04)) @@ -108,11 +108,11 @@ hammerHead = union([firstProfiles, baseSupport]) handleSketch = startSketchOn(XZ) |> startProfile(at = [0.01, 0]) |> xLine(length = 1.125 / 2) - |> tangentialArc(angle = 90, radius = 0.05) + |> tangentialArc(angle = 90deg, radius = 0.05) |> tangentialArc(endAbsolute = [0.38, 12.8 / 1.612]) |> tangentialArc(endAbsolute = [0.28, 12.8]) |> xLine(endAbsolute = profileStartX(%)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() -handle = revolve(handleSketch, angle = 360, axis = Y) +handle = revolve(handleSketch, angle = 360deg, axis = Y) |> appearance(color = "#f14f04") diff --git a/public/kcl-samples/helical-gear/main.kcl b/public/kcl-samples/helical-gear/main.kcl index 52f20fcc4e..589b5cbfa5 100644 --- a/public/kcl-samples/helical-gear/main.kcl +++ b/public/kcl-samples/helical-gear/main.kcl @@ -29,8 +29,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { |> xLine(length = keywayDepth) |> yLine(length = -keywayWidth) |> xLine(length = -keywayDepth) - |> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius) - |> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius) + |> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius) + |> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius) |> close() // Define a function to create a rotated gear sketch on an offset plane @@ -47,7 +47,7 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { angle = helixCalc, tag = $seg01, ) - |> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2)) + |> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2)) |> involuteCircular( startRadius = baseDiameter / 2, endRadius = tipDiameter / 2, @@ -56,14 +56,14 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { ) // Position the end line of the sketch at the start of the next tooth - |> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) + |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2)) // Pattern the sketch about the center by the specified number of teeth, then close the sketch |> patternCircular2d( %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() @@ -93,7 +93,7 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { helicalGear( nTeeth = 21, module = 2, - pressureAngle = 20, - helixAngle = 35, + pressureAngle = 20deg, + helixAngle = 35deg, gearHeight = 7, ) diff --git a/public/kcl-samples/helical-planetary-gearset/main.kcl b/public/kcl-samples/helical-planetary-gearset/main.kcl index 96c0908b87..7706f4761e 100644 --- a/public/kcl-samples/helical-planetary-gearset/main.kcl +++ b/public/kcl-samples/helical-planetary-gearset/main.kcl @@ -29,8 +29,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { |> xLine(length = keywayDepth) |> yLine(length = -keywayWidth) |> xLine(length = -keywayDepth) - |> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius) - |> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius) + |> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius) + |> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius) |> close() // Define a function to create a rotated gear sketch on an offset plane @@ -47,7 +47,7 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { angle = helixCalc, tag = $seg01, ) - |> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2)) + |> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2)) |> involuteCircular( startRadius = baseDiameter / 2, endRadius = tipDiameter / 2, @@ -56,14 +56,14 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { ) // Position the end line of the sketch at the start of the next tooth - |> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) + |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2)) // Pattern the sketch about the center by the specified number of teeth, then close the sketch |> patternCircular2d( %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() @@ -113,7 +113,7 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { angle = helixCalc, tag = $seg01, ) - |> line(endAbsolute = polar(angle = 200 / nTeeth + helixCalc, length = tipDiameter / 2)) + |> line(endAbsolute = polar(angle = 200deg / nTeeth + helixCalc, length = tipDiameter / 2)) |> involuteCircular( startRadius = baseDiameter / 2, endRadius = tipDiameter / 2, @@ -129,7 +129,7 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() @@ -164,8 +164,8 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { ringGear( nTeeth = 42, module = 1.5, - pressureAngle = 14, - helixAngle = -25, + pressureAngle = 14deg, + helixAngle = -25deg, gearHeight = 5, ) @@ -173,8 +173,8 @@ ringGear( helicalGear( nTeeth = 12, module = 1.5, - pressureAngle = 14, - helixAngle = 25, + pressureAngle = 14deg, + helixAngle = 25deg, gearHeight = 5, ) @@ -183,8 +183,8 @@ numPlanetGears = 3 helicalGear( nTeeth = 12, module = 1.5, - pressureAngle = 14, - helixAngle = -25, + pressureAngle = 14deg, + helixAngle = -25deg, gearHeight = 5, ) |> translate(y = (12 + 12) / 2 * 1.5 + 2.7) @@ -192,6 +192,6 @@ helicalGear( instances = numPlanetGears, axis = [0, 0, 1], center = [0, 0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = false, ) diff --git a/public/kcl-samples/helium-tank/main.kcl b/public/kcl-samples/helium-tank/main.kcl index 4a109ffbd4..2f45800792 100644 --- a/public/kcl-samples/helium-tank/main.kcl +++ b/public/kcl-samples/helium-tank/main.kcl @@ -17,26 +17,26 @@ tankSketch = startSketchOn(YZ) |> startProfile(at = [portDiameter / 2, tankHeight]) |> yLine(length = -0.6) |> xLine(length = 0.1) - |> tangentialArc(angle = -110, radius = 0.1) - |> tangentialArc(angle = 40, radius = 0.6) - |> tangentialArc(angle = -110, radius = 0.1) - |> tangentialArc(angle = 180, radius = 0.1) - |> tangentialArc(angle = -90, radius = tankDiameter / 2 - lastSegX(%), tag = $seg01) + |> tangentialArc(angle = -110deg, radius = 0.1) + |> tangentialArc(angle = 40deg, radius = 0.6) + |> tangentialArc(angle = -110deg, radius = 0.1) + |> tangentialArc(angle = 180deg, radius = 0.1) + |> tangentialArc(angle = -90deg, radius = tankDiameter / 2 - lastSegX(%), tag = $seg01) |> angledLine(angle = tangentToEnd(seg01), endAbsoluteY = 1.5, tag = $seg09) - |> tangentialArc(angle = -90, radius = 2, tag = $seg02) + |> tangentialArc(angle = -90deg, radius = 2, tag = $seg02) |> angledLine(angle = tangentToEnd(seg02), endAbsoluteX = 0.001, tag = $seg08) |> yLine(length = wallThickness) |> xLine(length = segLen(seg08)) - |> tangentialArc(angle = 90, radius = 2 - wallThickness) + |> tangentialArc(angle = 90deg, radius = 2 - wallThickness) |> yLine(length = segLen(seg09)) - |> tangentialArc(angle = 90, radius = tankDiameter / 2 - wallThickness - 1.3) + |> tangentialArc(angle = 90deg, radius = tankDiameter / 2 - wallThickness - 1.3) |> xLine(endAbsolute = profileStartX(%) - .1) |> yLine(endAbsolute = profileStartY(%)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() // Only revolving to 220deg so that the interior of the tank is visible. It should ultimately be closed at 360deg -tankRevolve = revolve(tankSketch, angle = 220, axis = Y) +tankRevolve = revolve(tankSketch, angle = 220deg, axis = Y) // Model the brass valve on top of the tank port valveBody = startSketchOn(offsetPlane(XY, offset = tankHeight - 0.5)) @@ -61,10 +61,10 @@ valve = union([valveBody, valvePort]) bracketOffsetProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67)) |> startProfile(at = [0, tankDiameter / 2 + wallThickness]) |> xLine(length = -0.1) - |> tangentialArc(angle = 35, radius = tankDiameter / 2 + wallThickness) - |> tangentialArc(angle = -135, radius = 0.25 - wallThickness, tag = $seg06) + |> tangentialArc(angle = 35deg, radius = tankDiameter / 2 + wallThickness) + |> tangentialArc(angle = -135deg, radius = 0.25 - wallThickness, tag = $seg06) |> angledLine(angle = tangentToEnd(seg06), length = tankDiameter / 7) - |> tangentialArc(angle = -80, radius = 0.25 - wallThickness, tag = $seg07) + |> tangentialArc(angle = -80deg, radius = 0.25 - wallThickness, tag = $seg07) |> angledLine(angle = tangentToEnd(seg07), endAbsoluteX = 0) |> mirror2d(axis = Y) |> close() @@ -73,10 +73,10 @@ bracketOffsetProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67) bracketProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67)) |> startProfile(at = [0, tankDiameter / 2]) |> xLine(length = -0.1) - |> tangentialArc(angle = 35, radius = tankDiameter / 2) - |> tangentialArc(angle = -135, radius = 0.25, tag = $seg04) + |> tangentialArc(angle = 35deg, radius = tankDiameter / 2) + |> tangentialArc(angle = -135deg, radius = 0.25, tag = $seg04) |> angledLine(angle = tangentToEnd(seg04), length = tankDiameter / 7) - |> tangentialArc(angle = -80, radius = 0.25, tag = $seg05) + |> tangentialArc(angle = -80deg, radius = 0.25, tag = $seg05) |> angledLine(angle = tangentToEnd(seg05), endAbsoluteX = 0) |> mirror2d(axis = Y) |> close() diff --git a/public/kcl-samples/herringbone-gear/main.kcl b/public/kcl-samples/herringbone-gear/main.kcl index 82a2b55344..f368f53280 100644 --- a/public/kcl-samples/herringbone-gear/main.kcl +++ b/public/kcl-samples/herringbone-gear/main.kcl @@ -27,7 +27,7 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { angle = helixCalc, tag = $seg01, ) - |> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2)) + |> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2)) |> involuteCircular( startRadius = baseDiameter / 2, endRadius = tipDiameter / 2, @@ -36,14 +36,14 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { ) // Position the end line of the sketch at the start of the next tooth - |> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) + |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2)) // Pattern the sketch about the center by the specified number of teeth, then close the sketch |> patternCircular2d( %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() @@ -78,7 +78,7 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { herringboneGear( nTeeth = 25, module = 1, - pressureAngle = 14, - helixAngle = 40, + pressureAngle = 14deg, + helixAngle = 40deg, gearHeight = 8, ) diff --git a/public/kcl-samples/herringbone-planetary-gearset/main.kcl b/public/kcl-samples/herringbone-planetary-gearset/main.kcl index 4fd110d143..77e0be4c0d 100644 --- a/public/kcl-samples/herringbone-planetary-gearset/main.kcl +++ b/public/kcl-samples/herringbone-planetary-gearset/main.kcl @@ -27,7 +27,7 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { angle = helixCalc, tag = $seg01, ) - |> line(endAbsolute = polar(angle = 160 / nTeeth + helixCalc, length = tipDiameter / 2)) + |> line(endAbsolute = polar(angle = 160deg / nTeeth + helixCalc, length = tipDiameter / 2)) |> involuteCircular( startRadius = baseDiameter / 2, endRadius = tipDiameter / 2, @@ -36,14 +36,14 @@ fn herringboneGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { ) // Position the end line of the sketch at the start of the next tooth - |> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) + |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2)) // Pattern the sketch about the center by the specified number of teeth, then close the sketch |> patternCircular2d( %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() @@ -98,7 +98,7 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { angle = helixCalc, tag = $seg01, ) - |> line(endAbsolute = polar(angle = 220 / nTeeth + helixCalc, length = tipDiameter / 2)) + |> line(endAbsolute = polar(angle = 220deg / nTeeth + helixCalc, length = tipDiameter / 2)) |> involuteCircular( startRadius = baseDiameter / 2, endRadius = tipDiameter / 2, @@ -107,14 +107,14 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { ) // Position the end line of the sketch at the start of the next tooth - |> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) + |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2)) // Pattern the sketch about the center by the specified number of teeth, then close the sketch |> patternCircular2d( %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() @@ -153,8 +153,8 @@ fn ringGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { ringGear( nTeeth = 58, module = 1.5, - pressureAngle = 14, - helixAngle = -35, + pressureAngle = 14deg, + helixAngle = -35deg, gearHeight = 8, ) @@ -162,8 +162,8 @@ ringGear( herringboneGear( nTeeth = 18, module = 1.5, - pressureAngle = 14, - helixAngle = 35, + pressureAngle = 14deg, + helixAngle = 35deg, gearHeight = 8, ) @@ -172,8 +172,8 @@ numPlanetGears = 4 herringboneGear( nTeeth = 18, module = 1.5, - pressureAngle = 14, - helixAngle = -35, + pressureAngle = 14deg, + helixAngle = -35deg, gearHeight = 8, ) |> translate(y = 18 * 1.5 + 1.95) @@ -181,6 +181,6 @@ herringboneGear( instances = numPlanetGears, axis = [0, 0, 1], center = [0, 0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = false, ) diff --git a/public/kcl-samples/i-beam/main.kcl b/public/kcl-samples/i-beam/main.kcl index 631c530d44..4ec07eec36 100644 --- a/public/kcl-samples/i-beam/main.kcl +++ b/public/kcl-samples/i-beam/main.kcl @@ -18,7 +18,7 @@ iBeam = startSketchOn(-XZ) |> xLine(length = flangeWidth / 2) |> yLine(length = -flangeThickness) |> xLine(endAbsolute = webThickness / 2 + rootRadius) - |> tangentialArc(radius = rootRadius, angle = 90) + |> tangentialArc(radius = rootRadius, angle = 90deg) |> yLine(endAbsolute = 0) |> mirror2d(axis = X) |> mirror2d(axis = Y) diff --git a/public/kcl-samples/keyboard/main.kcl b/public/kcl-samples/keyboard/main.kcl index f548564a4b..c8d04af1fd 100644 --- a/public/kcl-samples/keyboard/main.kcl +++ b/public/kcl-samples/keyboard/main.kcl @@ -22,7 +22,7 @@ row6 = row5 + keyHeight + spacing sketch001 = startSketchOn(YZ) |> startProfile(at = [0, 0]) |> line(end = [-0.14, 0.68], tag = $seg01) - |> angledLine(angle = 7, length = row6 + 3 * spacing + keyHeight, tag = $seg02) + |> angledLine(angle = 7deg, length = row6 + 3 * spacing + keyHeight, tag = $seg02) |> line(endAbsolute = [5.13, 0], tag = $seg03) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg04) |> close() @@ -66,13 +66,13 @@ plane001 = { fn keyFn(originStart, keyWidth, keyHeight, repeats, color) { sketch002 = startSketchOn(plane001) profile002 = startProfile(sketch002, at = [originStart[0], originStart[1]]) - |> arc(angleStart = 180, angleEnd = 270, radius = 0.1) + |> arc(angleStart = 180deg, angleEnd = 270deg, radius = 0.1) |> angledLine(angle = 0, length = keyWidth - .2, tag = $rectangleSegmentA001) - |> tangentialArc(radius = 0.1, angle = 90) - |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = keyHeight - .2, tag = $rectangleSegmentB001) - |> tangentialArc(radius = 0.1, angle = 90) + |> tangentialArc(radius = 0.1, angle = 90deg) + |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = keyHeight - .2, tag = $rectangleSegmentB001) + |> tangentialArc(radius = 0.1, angle = 90deg) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) - |> tangentialArc(radius = 0.1, angle = 90) + |> tangentialArc(radius = 0.1, angle = 90deg) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001) |> close() |> extrude(length = keyDepth) @@ -263,15 +263,15 @@ fn z(origin, scale, depth) { ]) |> yLine(length = -0.15 * scale) |> xLine(length = 0.15 * scale) - |> angledLine(angle = 47.15, endAbsoluteX = 0.3 * scale + origin[0], tag = $seg1) + |> angledLine(angle = 47.15deg, endAbsoluteX = 0.3 * scale + origin[0], tag = $seg1) |> yLine(endAbsolute = 0 + origin[1], tag = $seg3) |> xLine(length = 0.63 * scale) |> yLine(length = 0.225 * scale) |> xLine(length = -0.57 * scale) - |> angledLine(angle = 47.15, endAbsoluteX = 0.93 * scale + origin[0]) + |> angledLine(angle = 47.15deg, endAbsoluteX = 0.93 * scale + origin[0]) |> yLine(length = 0.15 * scale) |> xLine(length = -0.15 * scale) - |> angledLine(angle = 47.15, length = -segLen(seg1), tag = $seg2) + |> angledLine(angle = 47.15deg, length = -segLen(seg1), tag = $seg2) |> yLine(length = segLen(seg3)) |> xLine(endAbsolute = 0 + origin[0]) |> yLine(length = -0.225 * scale) @@ -289,9 +289,9 @@ fn o(origin, scale, depth) { .788 * scale + origin[0], .921 * scale + origin[1] ]) - |> arc(angleStart = 47.15 + 6, angleEnd = 47.15 - 6 + 180, radius = .525 * scale) - |> angledLine(angle = 47.15, length = .24 * scale) - |> arc(angleStart = 47.15 - 11 + 180, angleEnd = 47.15 + 11, radius = .288 * scale) + |> arc(angleStart = 47.15deg + 6deg, angleEnd = 47.15deg - 6deg + 180deg, radius = .525 * scale) + |> angledLine(angle = 47.15deg, length = .24 * scale) + |> arc(angleStart = 47.15deg - 11deg + 180deg, angleEnd = 47.15deg + 11deg, radius = .288 * scale) |> close() |> extrude(length = -depth) |> appearance(color = baseColor) @@ -301,9 +301,9 @@ fn o(origin, scale, depth) { .16 * scale + origin[0], .079 * scale + origin[1] ]) - |> arc(angleStart = 47.15 + 6 - 180, angleEnd = 47.15 - 6, radius = .525 * scale) - |> angledLine(angle = 47.15, length = -.24 * scale) - |> arc(angleStart = 47.15 - 11, angleEnd = 47.15 + 11 - 180, radius = .288 * scale) + |> arc(angleStart = 47.15deg + 6deg - 180deg, angleEnd = 47.15deg - 6deg, radius = .525 * scale) + |> angledLine(angle = 47.15deg, length = -.24 * scale) + |> arc(angleStart = 47.15deg - 11deg, angleEnd = 47.15deg + 11deg - 180deg, radius = .288 * scale) |> close() |> extrude(length = -depth) |> appearance(color = baseColor) diff --git a/public/kcl-samples/poopy-shoe/main.kcl b/public/kcl-samples/poopy-shoe/main.kcl index 4f36377f2a..6fb5d3bc87 100644 --- a/public/kcl-samples/poopy-shoe/main.kcl +++ b/public/kcl-samples/poopy-shoe/main.kcl @@ -17,21 +17,21 @@ frontLength = 7 sketch001 = startSketchOn(-YZ) |> startProfile(at = [wallsWidth / 2, 0]) |> xLine(length = wallThickness / 2) - |> angledLine(angle = 60, endAbsoluteX = wallsWidth, tag = $seg01) + |> angledLine(angle = 60deg, endAbsoluteX = wallsWidth, tag = $seg01) |> yLine(endAbsolute = height) |> xLine(length = -wallThickness) |> yLine(endAbsolute = segEndY(seg01)) - |> angledLine(angle = 60, endAbsoluteX = wallsWidth / 2 + wallThickness / 2) + |> angledLine(angle = 60deg, endAbsoluteX = wallsWidth / 2 + wallThickness / 2) |> xLine(length = -wallThickness) - |> angledLine(angle = 180 - 60, endAbsoluteX = wallThickness) + |> angledLine(angle = 180deg - 60deg, endAbsoluteX = wallThickness) |> yLine(endAbsolute = height) |> xLine(endAbsolute = 0) |> yLine(endAbsolute = segEndY(seg01)) - |> angledLine(angle = 180 - 60, endAbsoluteY = 0) + |> angledLine(angle = 180deg - 60deg, endAbsoluteY = 0) |> close() part001 = revolve( sketch001, - angle = 90, + angle = 90deg, axis = { direction = [1.0, 0.0], origin = [0.0, height + .0001] @@ -41,17 +41,17 @@ part001 = revolve( sketch002 = startSketchOn(-YZ) |> startProfile(at = [wallsWidth / 2, 0]) |> xLine(length = wallThickness / 2) - |> angledLine(angle = 60, endAbsoluteX = wallsWidth, tag = $seg02) + |> angledLine(angle = 60deg, endAbsoluteX = wallsWidth, tag = $seg02) |> yLine(endAbsolute = height) |> xLine(length = -wallThickness) |> yLine(endAbsolute = segEndY(seg01)) - |> angledLine(angle = 60, endAbsoluteX = wallsWidth / 2 + wallThickness / 2) + |> angledLine(angle = 60deg, endAbsoluteX = wallsWidth / 2 + wallThickness / 2) |> xLine(length = -wallThickness) - |> angledLine(angle = 180 - 60, endAbsoluteX = wallThickness) + |> angledLine(angle = 180deg - 60deg, endAbsoluteX = wallThickness) |> yLine(endAbsolute = height) |> xLine(endAbsolute = 0) |> yLine(endAbsolute = segEndY(seg02)) - |> angledLine(angle = 180 - 60, endAbsoluteY = 0) + |> angledLine(angle = 180deg - 60deg, endAbsoluteY = 0) |> close() |> extrude(length = backLength - height) @@ -66,8 +66,8 @@ customPlane = { } sketch003 = startSketchOn(customPlane) |> startProfile(at = [0, 0]) - |> tangentialArc(angle = 60, radius = height) - |> angledLine(angle = 60, endAbsoluteY = 0) + |> tangentialArc(angle = 60deg, radius = height) + |> angledLine(angle = 60deg, endAbsoluteY = 0) |> close() |> extrude(length = wallThickness) @@ -77,9 +77,9 @@ sketch004 = startSketchOn(sketch002, face = END) |> yLine(endAbsolute = height) |> xLine(endAbsolute = wallThickness) |> yLine(endAbsolute = segEndY(seg01)) - |> angledLine(angle = 180 - 60, endAbsoluteX = wallsWidth / 2 - (wallThickness / 2)) + |> angledLine(angle = 180deg - 60deg, endAbsoluteX = wallsWidth / 2 - (wallThickness / 2)) |> xLine(length = wallThickness) - |> angledLine(angle = 60, endAbsoluteY = segEndY(seg01)) + |> angledLine(angle = 60deg, endAbsoluteY = segEndY(seg01)) |> yLine(endAbsolute = height) |> xLine(length = wallThickness) |> tangentialArc(endAbsolute = [ diff --git a/public/kcl-samples/prosthetic-hip/main.kcl b/public/kcl-samples/prosthetic-hip/main.kcl index e048101d7b..42b2ea0f67 100644 --- a/public/kcl-samples/prosthetic-hip/main.kcl +++ b/public/kcl-samples/prosthetic-hip/main.kcl @@ -10,10 +10,10 @@ r1 = 3 stemLoftProfile1 = startSketchOn(XY) |> startProfile(at = [-3, -l1 / 2]) |> yLine(length = l1, tag = $seg01) - |> tangentialArc(angle = -120, radius = r1) - |> angledLine(angle = -30, length = segLen(seg01)) - |> tangentialArc(angle = -120, radius = r1) - |> angledLine(angle = 30, length = -segLen(seg01)) + |> tangentialArc(angle = -120deg, radius = r1) + |> angledLine(angle = -30deg, length = segLen(seg01)) + |> tangentialArc(angle = -120deg, radius = r1) + |> angledLine(angle = 30deg, length = -segLen(seg01)) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -23,10 +23,10 @@ r2 = 3 stemLoftProfile2 = startSketchOn(offsetPlane(XY, offset = 75)) |> startProfile(at = [-8, -l2 / 2]) |> yLine(length = l2, tag = $seg02) - |> tangentialArc(angle = -120, radius = r2) - |> angledLine(angle = -30, length = segLen(seg02)) - |> tangentialArc(angle = -120, radius = r2) - |> angledLine(angle = 30, length = -segLen(seg02)) + |> tangentialArc(angle = -120deg, radius = r2) + |> angledLine(angle = -30deg, length = segLen(seg02)) + |> tangentialArc(angle = -120deg, radius = r2) + |> angledLine(angle = 30deg, length = -segLen(seg02)) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -38,10 +38,10 @@ r3 = 4 stemLoftProfile3 = startSketchOn(XY) |> startProfile(at = [-15.5, -l3 / 2]) |> yLine(length = l3, tag = $seg03) - |> tangentialArc(angle = -120, radius = r3) - |> angledLine(angle = -30, length = segLen(seg03)) - |> tangentialArc(angle = -120, radius = r3) - |> angledLine(angle = 30, length = -segLen(seg03)) + |> tangentialArc(angle = -120deg, radius = r3) + |> angledLine(angle = -30deg, length = segLen(seg03)) + |> tangentialArc(angle = -120deg, radius = r3) + |> angledLine(angle = 30deg, length = -segLen(seg03)) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> translate(z = p3Z) @@ -54,10 +54,10 @@ r4 = 5 stemLoftProfile4 = startSketchOn(XY) |> startProfile(at = [-23, -l4 / 2]) |> yLine(length = l4, tag = $seg04) - |> tangentialArc(angle = -120, radius = r4) - |> angledLine(angle = -30, length = segLen(seg04)) - |> tangentialArc(angle = -120, radius = r4) - |> angledLine(angle = 30, length = -segLen(seg04)) + |> tangentialArc(angle = -120deg, radius = r4) + |> angledLine(angle = -30deg, length = segLen(seg04)) + |> tangentialArc(angle = -120deg, radius = r4) + |> angledLine(angle = 30deg, length = -segLen(seg04)) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> translate(z = p4Z) @@ -70,10 +70,10 @@ r5 = 1.6 stemLoftProfile5 = startSketchOn(XY) |> startProfile(at = [-19.5, -l5 / 2]) |> yLine(length = l5, tag = $seg05) - |> tangentialArc(angle = -120, radius = r5) - |> angledLine(angle = -30, length = segLen(seg05)) - |> tangentialArc(angle = -120, radius = r5) - |> angledLine(angle = 30, length = -segLen(seg05)) + |> tangentialArc(angle = -120deg, radius = r5) + |> angledLine(angle = -30deg, length = segLen(seg05)) + |> tangentialArc(angle = -120deg, radius = r5) + |> angledLine(angle = 30deg, length = -segLen(seg05)) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> translate(z = p5Z) @@ -86,10 +86,10 @@ r6 = 3 stemLoftProfile6 = startSketchOn(XY) |> startProfile(at = [-23.4, -l6 / 2]) |> yLine(length = l6, tag = $seg06) - |> tangentialArc(angle = -120, radius = r6) - |> angledLine(angle = -30, length = segLen(seg06)) - |> tangentialArc(angle = -120, radius = r6) - |> angledLine(angle = 30, length = -segLen(seg06)) + |> tangentialArc(angle = -120deg, radius = r6) + |> angledLine(angle = -30deg, length = segLen(seg06)) + |> tangentialArc(angle = -120deg, radius = r6) + |> angledLine(angle = 30deg, length = -segLen(seg06)) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> translate(z = p6Z) @@ -114,13 +114,13 @@ stemTab = stemLoftProfile6 femoralHead = startSketchOn(XZ) |> startProfile(at = [4, 0]) |> xLine(length = 1.1) - |> tangentialArc(angle = 90, radius = 3) - |> tangentialArc(angle = 90, radius = 8) + |> tangentialArc(angle = 90deg, radius = 3) + |> tangentialArc(angle = 90deg, radius = 8) |> yLine(length = -1) - |> tangentialArc(angle = 90, radius = .1) + |> tangentialArc(angle = 90deg, radius = .1) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> revolve(angle = 360, axis = Y) + |> revolve(angle = 360deg, axis = Y) |> translate(x = -16.1, z = 133) |> rotate(pitch = -36.5) |> appearance(color = "#d64398") @@ -135,7 +135,7 @@ polyethyleneInsert = startSketchOn(XZ) |> xLine(length = 0.58) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> revolve(angle = 360, axis = Y) + |> revolve(angle = 360deg, axis = Y) |> translate(x = -16.1, z = 133) |> rotate(pitch = -36.5) |> appearance(color = "#3cadd3") @@ -150,7 +150,7 @@ acetabularShell = startSketchOn(XZ) |> xLine(length = 0.1) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() - |> revolve(angle = 360, axis = Y) + |> revolve(angle = 360deg, axis = Y) |> translate(x = -16.1, z = 133) |> rotate(pitch = -36.5) |> appearance(color = "#a55e2c") diff --git a/public/kcl-samples/sheet-metal-bracket/main.kcl b/public/kcl-samples/sheet-metal-bracket/main.kcl index 8bc897d246..ee1bf610d0 100644 --- a/public/kcl-samples/sheet-metal-bracket/main.kcl +++ b/public/kcl-samples/sheet-metal-bracket/main.kcl @@ -16,7 +16,7 @@ componentBoltPatternY = 3 // Define bracket parameters such as sheet metal thickness, bend radius, flange length, etc. hatHeight = 2.5 -bendAngle = 75 +bendAngle = 75deg thickness = 0.125 interiorBendRadius = 0.125 @@ -49,12 +49,12 @@ bracketProfile = startSketchOn(XZ) |> yLine(length = thickness, tag = $seg03) |> xLine(length = -flangeLength, tag = $seg04) |> tangentialArc(radius = interiorBendRadius, angle = -bendAngle) - |> angledLine(angle = 180 - bendAngle, length = segLen(seg01)) + |> angledLine(angle = 180deg - bendAngle, length = segLen(seg01)) |> tangentialArc(radius = exteriorBendRadius, angle = bendAngle) |> xLine(endAbsolute = 0, tag = $seg05) |> xLine(length = -segLen(seg05)) |> tangentialArc(radius = exteriorBendRadius, angle = bendAngle) - |> angledLine(angle = bendAngle - 180, length = segLen(seg01)) + |> angledLine(angle = bendAngle - 180deg, length = segLen(seg01)) |> tangentialArc(radius = interiorBendRadius, angle = -bendAngle) |> xLine(length = -flangeLength, tag = $seg06) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg07) diff --git a/public/kcl-samples/shepherds-hook-bolt/main.kcl b/public/kcl-samples/shepherds-hook-bolt/main.kcl index 3a3b70b223..9a824ca6f7 100644 --- a/public/kcl-samples/shepherds-hook-bolt/main.kcl +++ b/public/kcl-samples/shepherds-hook-bolt/main.kcl @@ -10,8 +10,8 @@ hookRadius = 12 shankLength = 5 threadedEndLength = 30 nutDistance = 20 -hookStartAngle = 290 -hookEndAngle = 150 +hookStartAngle = 290deg +hookEndAngle = 150deg approximatePitch = boltDiameter * 0.15 threadDepth = 0.6134 * approximatePitch @@ -19,7 +19,7 @@ innerRadius = boltDiameter / 2 - threadDepth boltNumberOfRevolutions = threadedEndLength / approximatePitch // Helper values for computing geometry transitions between straight shaft and hook arc -hypotenuse = hookRadius / cos(hookStartAngle - 270) +hypotenuse = hookRadius / cos(hookStartAngle - 270deg) side = sqrt(pow(hypotenuse, exp = 2) - pow(hookRadius, exp = 2)) shankOffset = hypotenuse + side @@ -86,4 +86,4 @@ boltThreadSectionShapeForRevolve = startProfile( |> close() // Create a revolved solid representing the thread geometry by repeating and revolving the profile around the shaft -boltThreadRevolve = revolve(boltThreadSectionShapeForRevolve, angle = 360, axis = Y) +boltThreadRevolve = revolve(boltThreadSectionShapeForRevolve, angle = 360deg, axis = Y) diff --git a/public/kcl-samples/spur-gear/main.kcl b/public/kcl-samples/spur-gear/main.kcl index c27df0b849..2ddb2094bd 100644 --- a/public/kcl-samples/spur-gear/main.kcl +++ b/public/kcl-samples/spur-gear/main.kcl @@ -29,8 +29,8 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) { |> xLine(length = keywayDepth) |> yLine(length = -keywayWidth) |> xLine(length = -keywayDepth) - |> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius) - |> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius) + |> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius) + |> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius) |> close() // Using the gear parameters, sketch an involute tooth spanning from the base diameter to the tip diameter @@ -42,21 +42,21 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) { angle = 0, tag = $seg01, ) - |> line(endAbsolute = polar(angle = 160 / nTeeth, length = tipDiameter / 2)) + |> line(endAbsolute = polar(angle = 160deg / nTeeth, length = tipDiameter / 2)) |> involuteCircular( startRadius = baseDiameter / 2, endRadius = tipDiameter / 2, - angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180 / nTeeth), + angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180deg / nTeeth), reverse = true, ) // Position the end line of the sketch at the start of the next tooth - |> line(endAbsolute = polar(angle = 360 / nTeeth, length = baseDiameter / 2)) + |> line(endAbsolute = polar(angle = 360deg / nTeeth, length = baseDiameter / 2)) // Pattern the sketch about the center by the specified number of teeth, then close the sketch |> patternCircular2d( %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() @@ -71,6 +71,6 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) { spurGear( nTeeth = 21, module = 1.5, - pressureAngle = 14, + pressureAngle = 14deg, gearHeight = 6, ) diff --git a/public/kcl-samples/spur-reduction-gearset/main.kcl b/public/kcl-samples/spur-reduction-gearset/main.kcl index 2904f9ceb5..e34213fde0 100644 --- a/public/kcl-samples/spur-reduction-gearset/main.kcl +++ b/public/kcl-samples/spur-reduction-gearset/main.kcl @@ -22,21 +22,21 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) { angle = 0, tag = $seg01, ) - |> line(endAbsolute = polar(angle = 160 / nTeeth, length = tipDiameter / 2)) + |> line(endAbsolute = polar(angle = 160deg / nTeeth, length = tipDiameter / 2)) |> involuteCircular( startRadius = baseDiameter / 2, endRadius = tipDiameter / 2, - angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180 / nTeeth), + angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180deg / nTeeth), reverse = true, ) // Position the end line of the sketch at the start of the next tooth - |> line(endAbsolute = polar(angle = 360 / nTeeth, length = baseDiameter / 2)) + |> line(endAbsolute = polar(angle = 360deg / nTeeth, length = baseDiameter / 2)) // Pattern the sketch about the center by the specified number of teeth, then close the sketch |> patternCircular2d( %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() @@ -52,7 +52,7 @@ fn spurGear(nTeeth, module, pressureAngle, gearHeight) { spurGear( nTeeth = 17, module = 1.5, - pressureAngle = 14, + pressureAngle = 14deg, gearHeight = 9, ) @@ -60,7 +60,7 @@ spurGear( spurGear( nTeeth = 51, module = 1.5, - pressureAngle = 14, + pressureAngle = 14deg, gearHeight = 7, ) // Translate the larger gear by the combined pitch radius of both gears, plus a small gap diff --git a/public/kcl-samples/surgical-drill-guide/main.kcl b/public/kcl-samples/surgical-drill-guide/main.kcl index 84210375dc..009f38348b 100644 --- a/public/kcl-samples/surgical-drill-guide/main.kcl +++ b/public/kcl-samples/surgical-drill-guide/main.kcl @@ -19,10 +19,10 @@ bracket = startSketchOn(YZ) |> xLine(length = handleLength, tag = $seg02) |> yLine(length = stockThickness, tag = $seg06) |> xLine(length = -segLen(seg02), tag = $seg04) - |> tangentialArc(angle = -60, radius = bendRadius, tag = $seg01) + |> tangentialArc(angle = -60deg, radius = bendRadius, tag = $seg01) |> angledLine(angle = tangentToEnd(seg01), length = handleLength / 3, tag = $seg03) - |> angledLine(angle = tangentToEnd(seg01) + 90, length = stockThickness, tag = $seg05) - |> angledLine(angle = segAng(seg03) + 180, length = segLen(seg03), tag = $seg07) + |> angledLine(angle = tangentToEnd(seg01) + 90deg, length = stockThickness, tag = $seg05) + |> angledLine(angle = segAng(seg03) + 180deg, length = segLen(seg03), tag = $seg07) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> extrude( diff --git a/public/kcl-samples/t-slot-rail/main.kcl b/public/kcl-samples/t-slot-rail/main.kcl index 25232497dc..3636a8656e 100644 --- a/public/kcl-samples/t-slot-rail/main.kcl +++ b/public/kcl-samples/t-slot-rail/main.kcl @@ -15,17 +15,17 @@ fn railTslot(railHeight, railLength) { railProfile = startSketchOn(XZ) |> startProfile(at = [0.5, (1 - 0.356) / 2]) |> xLine(length = -0.08) - |> tangentialArc(angle = 45, radius = .09) - |> angledLine(angle = 45, endAbsoluteY = 0.113) - |> tangentialArc(angle = 135, radius = interiorRadius) + |> tangentialArc(angle = 45deg, radius = .09) + |> angledLine(angle = 45deg, endAbsoluteY = 0.113) + |> tangentialArc(angle = 135deg, radius = interiorRadius) |> xLine(endAbsolute = .5 - (.320 / 2) - interiorRadius) - |> tangentialArc(angle = -90, radius = interiorRadius) + |> tangentialArc(angle = -90deg, radius = interiorRadius) |> yLine(endAbsolute = interiorRadius) - |> tangentialArc(angle = -90, radius = interiorRadius) + |> tangentialArc(angle = -90deg, radius = interiorRadius) |> xLine(length = -0.03) - |> arc(angleStart = 0, angleEnd = 180, radius = scoreDepth) + |> arc(angleStart = 0, angleEnd = 180deg, radius = scoreDepth) |> xLine(length = -0.1) - |> arc(angleStart = 0, angleEnd = 180, radius = scoreDepth) + |> arc(angleStart = 0, angleEnd = 180deg, radius = scoreDepth) |> xLine(length = -0.03) |> tangentialArc(endAbsolute = [arcEnd, arcEnd]) diff --git a/public/kcl-samples/wing-spar/main.kcl b/public/kcl-samples/wing-spar/main.kcl index 1240ed2b08..b4a3a78f88 100644 --- a/public/kcl-samples/wing-spar/main.kcl +++ b/public/kcl-samples/wing-spar/main.kcl @@ -22,7 +22,7 @@ ribSketch = startSketchOn(offsetPlane(-XZ, offset = -foilThickness)) |> line(endAbsolute = [rearSpar, upperCamber]) |> tangentialArc(endAbsolute = [frontSpar, upperCamber * 1.3]) |> tangentialArc(endAbsolute = [0, 0]) - |> tangentialArc(angle = 76, radius = lowerCamber) + |> tangentialArc(angle = 76deg, radius = lowerCamber) |> tangentialArc(endAbsolute = [rearSpar, -lowerCamber]) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -43,19 +43,19 @@ sparSketch = startSketchOn(-XZ) // Sketch the sheet metal profile for the front spar, then extrude frontSparProfile = startProfile(sparSketch, at = [frontSpar, -lowerCamber * 0.85]) |> yLine(endAbsolute = upperCamber, tag = $seg01) - |> tangentialArc(angle = -90, radius = sparBendRadius + sparStockThicknes) + |> tangentialArc(angle = -90deg, radius = sparBendRadius + sparStockThicknes) |> xLine(length = 4, tag = $seg02) - |> tangentialArc(angle = -90, radius = sparBendRadius + sparStockThicknes) + |> tangentialArc(angle = -90deg, radius = sparBendRadius + sparStockThicknes) |> yLine(length = -4, tag = $seg03) - |> tangentialArc(angle = -90, radius = sparBendRadius + sparStockThicknes) + |> tangentialArc(angle = -90deg, radius = sparBendRadius + sparStockThicknes) |> xLine(length = -3, tag = $seg04) |> yLine(length = sparStockThicknes) |> xLine(length = segLen(seg04)) - |> tangentialArc(angle = 90, radius = sparBendRadius) + |> tangentialArc(angle = 90deg, radius = sparBendRadius) |> yLine(length = segLen(seg03)) - |> tangentialArc(angle = 90, radius = sparBendRadius) + |> tangentialArc(angle = 90deg, radius = sparBendRadius) |> xLine(length = -segLen(seg02)) - |> tangentialArc(angle = 90, radius = sparBendRadius) + |> tangentialArc(angle = 90deg, radius = sparBendRadius) |> yLine(length = -segLen(seg01), tag = $seg10) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -64,19 +64,19 @@ frontSparProfile = startProfile(sparSketch, at = [frontSpar, -lowerCamber * 0.85 // Sketch the sheet metal profile for the rear spar, then extrude rearSparProfile = startProfile(sparSketch, at = [rearSpar, -lowerCamber * 0.7]) |> yLine(endAbsolute = upperCamber * 0.7, tag = $seg05) - |> tangentialArc(angle = 90, radius = sparBendRadius + sparStockThicknes) + |> tangentialArc(angle = 90deg, radius = sparBendRadius + sparStockThicknes) |> xLine(length = -4, tag = $seg06) - |> tangentialArc(angle = 90, radius = sparBendRadius + sparStockThicknes) + |> tangentialArc(angle = 90deg, radius = sparBendRadius + sparStockThicknes) |> yLine(length = -4, tag = $seg07) - |> tangentialArc(angle = 90, radius = sparBendRadius + sparStockThicknes) + |> tangentialArc(angle = 90deg, radius = sparBendRadius + sparStockThicknes) |> xLine(length = 3, tag = $seg08) |> yLine(length = sparStockThicknes) |> xLine(length = -segLen(seg08)) - |> tangentialArc(angle = -90, radius = sparBendRadius) + |> tangentialArc(angle = -90deg, radius = sparBendRadius) |> yLine(length = segLen(seg07)) - |> tangentialArc(angle = -90, radius = sparBendRadius) + |> tangentialArc(angle = -90deg, radius = sparBendRadius) |> xLine(length = segLen(seg06)) - |> tangentialArc(angle = -90, radius = sparBendRadius) + |> tangentialArc(angle = -90deg, radius = sparBendRadius) |> yLine(length = -segLen(seg05), tag = $seg09) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -86,11 +86,11 @@ rearSparProfile = startProfile(sparSketch, at = [rearSpar, -lowerCamber * 0.7]) frontSparHoles = startSketchOn(frontSparProfile, face = seg10) |> startProfile(at = [-lowerCamber * 0.1, -foilThickness * 3]) |> xLine(endAbsolute = upperCamber * 0.4, tag = $seg11) - |> tangentialArc(angle = -90, radius = 5) + |> tangentialArc(angle = -90deg, radius = 5) |> yLine(endAbsolute = -(sparSpan - (3 * foilThickness)) / (nSections - 1) + 5, tag = $seg12) - |> tangentialArc(angle = -90, radius = 5) + |> tangentialArc(angle = -90deg, radius = 5) |> xLine(length = -segLen(seg11)) - |> tangentialArc(angle = -90, radius = 5) + |> tangentialArc(angle = -90deg, radius = 5) |> yLine(length = segLen(seg12)) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -104,11 +104,11 @@ frontSparHoles = startSketchOn(frontSparProfile, face = seg10) rearSparHoles = startSketchOn(rearSparProfile, face = seg09) |> startProfile(at = [-lowerCamber * 0.3, -foilThickness * 3]) |> xLine(endAbsolute = -upperCamber * 0.01, tag = $seg14) - |> tangentialArc(angle = -90, radius = 5) + |> tangentialArc(angle = -90deg, radius = 5) |> yLine(length = -segLen(seg12)) - |> tangentialArc(angle = -90, radius = 5) + |> tangentialArc(angle = -90deg, radius = 5) |> xLine(length = -segLen(seg14)) - |> tangentialArc(angle = -90, radius = 5) + |> tangentialArc(angle = -90deg, radius = 5) |> yLine(length = segLen(seg12)) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() diff --git a/rust/kcl-lib/e2e/executor/main.rs b/rust/kcl-lib/e2e/executor/main.rs index 591f735eec..bc3d661625 100644 --- a/rust/kcl-lib/e2e/executor/main.rs +++ b/rust/kcl-lib/e2e/executor/main.rs @@ -181,13 +181,13 @@ wallMountL = 8 bracket = startSketchOn(XY) |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL]) - |> tangentialArc(radius = filletR, angle = 90 ) + |> tangentialArc(radius = filletR, angle = 90deg ) |> line(end = [-shelfMountL, 0]) |> line(end = [0, -thickness]) |> line(end = [shelfMountL, 0]) |> tangentialArc( radius = filletR - thickness, - angle = -90, + angle = -90deg, ) |> line(end = [0, -wallMountL]) |> close() diff --git a/rust/kcl-lib/src/std/extrude.rs b/rust/kcl-lib/src/std/extrude.rs index df0aed61d4..b1d48a2b88 100644 --- a/rust/kcl-lib/src/std/extrude.rs +++ b/rust/kcl-lib/src/std/extrude.rs @@ -104,8 +104,8 @@ async fn inner_extrude( let cmd = match (&twist_angle, &twist_angle_step, &twist_center) { (Some(angle), angle_step, center) => { let center = center.clone().map(point_to_mm).map(Point2d::from).unwrap_or_default(); - let total_rotation_angle = Angle::from_degrees(angle.to_degrees()); - let angle_step_size = Angle::from_degrees(angle_step.clone().map(|a| a.to_degrees()).unwrap_or(15.0)); + let total_rotation_angle = Angle::from_degrees(angle.to_degrees(exec_state, args.source_range)); + let angle_step_size = Angle::from_degrees(angle_step.clone().map(|a| a.to_degrees(exec_state, args.source_range)).unwrap_or(15.0)); ModelingCmd::from(mcmd::TwistExtrude { target: sketch.id.into(), distance: LengthUnit(length.to_mm()), diff --git a/rust/kcl-lib/tests/import_async/artifact_commands.snap b/rust/kcl-lib/tests/import_async/artifact_commands.snap index fe05bf663d..f8c64c2089 100644 --- a/rust/kcl-lib/tests/import_async/artifact_commands.snap +++ b/rust/kcl-lib/tests/import_async/artifact_commands.snap @@ -5571398,7 +5571398,7 @@ description: Artifact commands import_async.kcl "segment": { "type": "line", "end": { - "x": -5.816564508980187, + "x": -5.816564508980192, "y": 18.856838998639372, "z": 0.0 }, @@ -5571814,7 +5571814,7 @@ description: Artifact commands import_async.kcl "segment": { "type": "line", "end": { - "x": -1.6644342460226098, + "x": -1.664434246022614, "y": 19.66322604122736, "z": 0.0 }, diff --git a/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md index 93075f1968..d60a8bb77f 100644 --- a/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md @@ -9,64 +9,64 @@ flowchart LR %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] 5["Segment
[938, 966, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] - 6["Segment
[974, 1050, 0]"] + 6["Segment
[974, 1056, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] - 7["Segment
[1058, 1123, 0]"] + 7["Segment
[1064, 1132, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 8["Segment
[1131, 1138, 0]"] + 8["Segment
[1140, 1147, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] 9[Solid2d] end subgraph path11 [Path] - 11["Path
[1643, 1713, 0]"] + 11["Path
[1652, 1722, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 12["Segment
[1723, 1889, 0]"] + 12["Segment
[1732, 1898, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] - 13["Segment
[1899, 1984, 0]"] + 13["Segment
[1908, 1993, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 14["Segment
[1994, 2215, 0]"] + 14["Segment
[2003, 2224, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] - 15["Segment
[2302, 2388, 0]"] + 15["Segment
[2311, 2400, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] - 16["Segment
[2677, 2684, 0]"] + 16["Segment
[2692, 2699, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] 17[Solid2d] end subgraph path19 [Path] - 19["Path
[1643, 1713, 0]"] + 19["Path
[1652, 1722, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 20["Segment
[1723, 1889, 0]"] + 20["Segment
[1732, 1898, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] - 21["Segment
[1899, 1984, 0]"] + 21["Segment
[1908, 1993, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 22["Segment
[1994, 2215, 0]"] + 22["Segment
[2003, 2224, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] - 23["Segment
[2302, 2388, 0]"] + 23["Segment
[2311, 2400, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] - 24["Segment
[2677, 2684, 0]"] + 24["Segment
[2692, 2699, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] 25[Solid2d] end subgraph path27 [Path] - 27["Path
[1643, 1713, 0]"] + 27["Path
[1652, 1722, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 32["Segment
[2677, 2684, 0]"] + 32["Segment
[2692, 2699, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] 33[Solid2d] end 1["Plane
[728, 745, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 10["Plane
[1594, 1632, 0]"] + 10["Plane
[1603, 1641, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg] - 18["Plane
[1594, 1632, 0]"] + 18["Plane
[1603, 1641, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg] - 26["Plane
[1594, 1632, 0]"] + 26["Plane
[1603, 1641, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }, CallKwUnlabeledArg] 28["SweepEdge Opposite"] 29["SweepEdge Opposite"] 30["SweepEdge Opposite"] 31["SweepEdge Opposite"] - 34["Sweep Loft
[3201, 3268, 0]"] + 34["Sweep Loft
[3216, 3283, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 15 }, VariableDeclarationDeclaration, VariableDeclarationInit] 35[Wall] %% face_code_ref=Missing NodePath @@ -84,11 +84,11 @@ flowchart LR 42["SweepEdge Adjacent"] 43["SweepEdge Adjacent"] 44["SweepEdge Adjacent"] - 45["StartSketchOnPlane
[1580, 1633, 0]"] + 45["StartSketchOnPlane
[1589, 1642, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 46["StartSketchOnPlane
[1580, 1633, 0]"] + 46["StartSketchOnPlane
[1589, 1642, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 47["StartSketchOnPlane
[1580, 1633, 0]"] + 47["StartSketchOnPlane
[1589, 1642, 0]"] %% [ProgramBodyItem { index: 2 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 11 }, VariableDeclarationDeclaration, VariableDeclarationInit, FunctionExpressionBody, FunctionExpressionBodyItem { index: 1 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] 1 --- 2 2 --- 3 diff --git a/rust/kcl-lib/tests/import_async/ast.snap b/rust/kcl-lib/tests/import_async/ast.snap index f12bc507d0..24d604a241 100644 --- a/rust/kcl-lib/tests/import_async/ast.snap +++ b/rust/kcl-lib/tests/import_async/ast.snap @@ -1179,13 +1179,13 @@ description: Result of parsing import_async.kcl "right": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1205,13 +1205,13 @@ description: Result of parsing import_async.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1278,13 +1278,13 @@ description: Result of parsing import_async.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2518,13 +2518,13 @@ description: Result of parsing import_async.kcl "left": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -2746,13 +2746,13 @@ description: Result of parsing import_async.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3514,13 +3514,13 @@ description: Result of parsing import_async.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "20", + "raw": "20deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 20.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3536,13 +3536,13 @@ description: Result of parsing import_async.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "35", + "raw": "35deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 35.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/import_async/input.kcl b/rust/kcl-lib/tests/import_async/input.kcl index 2cce204d77..475edbc3db 100644 --- a/rust/kcl-lib/tests/import_async/input.kcl +++ b/rust/kcl-lib/tests/import_async/input.kcl @@ -30,8 +30,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { |> xLine(length = keywayDepth) |> yLine(length = -keywayWidth) |> xLine(length = -keywayDepth) - |> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius) - |> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius) + |> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius) + |> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius) |> close() // Define a function to create a rotated gear sketch on an offset plane @@ -57,14 +57,14 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { ) // Position the end line of the sketch at the start of the next tooth - |> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) + |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2)) // Pattern the sketch about the center by the specified number of teeth, then close the sketch |> patternCircular2d( %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() @@ -94,8 +94,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { helicalGear( nTeeth = 21, module = 2, - pressureAngle = 20, - helixAngle = 35, + pressureAngle = 20deg, + helixAngle = 35deg, gearHeight = 7, ) diff --git a/rust/kcl-lib/tests/import_async/ops.snap b/rust/kcl-lib/tests/import_async/ops.snap index 25864b9ab4..64d5c2a006 100644 --- a/rust/kcl-lib/tests/import_async/ops.snap +++ b/rust/kcl-lib/tests/import_async/ops.snap @@ -54,13 +54,9 @@ description: Operations executed import_async.kcl "type": "Number", "value": 35.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -102,13 +98,9 @@ description: Operations executed import_async.kcl "type": "Number", "value": 20.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -1153,7 +1145,7 @@ description: Operations executed import_async.kcl "angle": { "value": { "type": "Number", - "value": 1.8699956271367815, + "value": 1.8699956271367817, "ty": { "type": "Known", "type": "Angle", @@ -1235,7 +1227,7 @@ description: Operations executed import_async.kcl "name": "x", "value": { "type": "Number", - "value": -5.816564508980187, + "value": -5.816564508980192, "ty": { "type": "Default", "len": { @@ -2595,7 +2587,7 @@ description: Operations executed import_async.kcl "angle": { "value": { "type": "Number", - "value": 1.655242081157069, + "value": 1.6552420811570692, "ty": { "type": "Known", "type": "Angle", @@ -2677,7 +2669,7 @@ description: Operations executed import_async.kcl "name": "x", "value": { "type": "Number", - "value": -1.6644342460226098, + "value": -1.664434246022614, "ty": { "type": "Default", "len": { diff --git a/rust/kcl-lib/tests/import_async/unparsed.snap b/rust/kcl-lib/tests/import_async/unparsed.snap index 1ddd6313ce..7138b06391 100644 --- a/rust/kcl-lib/tests/import_async/unparsed.snap +++ b/rust/kcl-lib/tests/import_async/unparsed.snap @@ -34,8 +34,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { |> xLine(length = keywayDepth) |> yLine(length = -keywayWidth) |> xLine(length = -keywayDepth) - |> arc(angleStart = -1 * startAngle + 360, angleEnd = 180, radius = holeRadius) - |> arc(angleStart = 180, angleEnd = startAngle, radius = holeRadius) + |> arc(angleStart = -1 * startAngle + 360deg, angleEnd = 180deg, radius = holeRadius) + |> arc(angleStart = 180deg, angleEnd = startAngle, radius = holeRadius) |> close() // Define a function to create a rotated gear sketch on an offset plane @@ -61,14 +61,14 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { ) // Position the end line of the sketch at the start of the next tooth - |> line(endAbsolute = polar(angle = 360 / nTeeth + helixCalc, length = baseDiameter / 2)) + |> line(endAbsolute = polar(angle = 360deg / nTeeth + helixCalc, length = baseDiameter / 2)) // Pattern the sketch about the center by the specified number of teeth, then close the sketch |> patternCircular2d( %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() @@ -98,8 +98,8 @@ fn helicalGear(nTeeth, module, pressureAngle, helixAngle, gearHeight) { helicalGear( nTeeth = 21, module = 2, - pressureAngle = 20, - helixAngle = 35, + pressureAngle = 20deg, + helixAngle = 35deg, gearHeight = 7, ) diff --git a/rust/kcl-lib/tests/involute_circular_units/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/involute_circular_units/artifact_graph_flowchart.snap.md index ea401706d9..2df2573a50 100644 --- a/rust/kcl-lib/tests/involute_circular_units/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/involute_circular_units/artifact_graph_flowchart.snap.md @@ -1,34 +1,34 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[335, 375, 0]"] + 2["Path
[338, 378, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 3["Segment
[381, 519, 0]"] + 3["Segment
[384, 522, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] - 4["Segment
[525, 571, 0]"] + 4["Segment
[528, 574, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 5["Segment
[577, 722, 0]"] + 5["Segment
[580, 728, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] - 6["Segment
[728, 870, 0]"] + 6["Segment
[734, 879, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] - 7["Segment
[876, 922, 0]"] + 7["Segment
[885, 931, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 8["Segment
[928, 1002, 0]"] + 8["Segment
[937, 1014, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 9["Segment
[1157, 1164, 0]"] + 9["Segment
[1172, 1179, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] 10[Solid2d] end subgraph path11 [Path] - 11["Path
[1188, 1223, 0]"] + 11["Path
[1203, 1238, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }, CallKwArg { index: 0 }] - 12["Segment
[1188, 1223, 0]"] + 12["Segment
[1203, 1238, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }, CallKwArg { index: 0 }] 13[Solid2d] end - 1["Plane
[312, 329, 0]"] + 1["Plane
[315, 332, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 14["Sweep Extrusion
[1230, 1258, 0]"] + 14["Sweep Extrusion
[1245, 1273, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 11 }] 15[Wall] %% face_code_ref=Missing NodePath diff --git a/rust/kcl-lib/tests/involute_circular_units/ast.snap b/rust/kcl-lib/tests/involute_circular_units/ast.snap index 7ec0e4abe6..f7ca6eee25 100644 --- a/rust/kcl-lib/tests/involute_circular_units/ast.snap +++ b/rust/kcl-lib/tests/involute_circular_units/ast.snap @@ -1,6 +1,5 @@ --- source: kcl-lib/src/simulation_tests.rs -assertion_line: 87 description: Result of parsing involute_circular_units.kcl --- { @@ -475,13 +474,13 @@ description: Result of parsing involute_circular_units.kcl "init": { "commentStart": 0, "end": 0, - "raw": "6", + "raw": "6deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 6.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1026,13 +1025,13 @@ description: Result of parsing involute_circular_units.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "9", + "raw": "9deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 9.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1230,13 +1229,13 @@ description: Result of parsing involute_circular_units.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "12", + "raw": "12deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 12.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -1419,13 +1418,13 @@ description: Result of parsing involute_circular_units.kcl "left": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -1626,13 +1625,13 @@ description: Result of parsing involute_circular_units.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/involute_circular_units/input.kcl b/rust/kcl-lib/tests/involute_circular_units/input.kcl index 36e4d56426..115d01a8bc 100644 --- a/rust/kcl-lib/tests/involute_circular_units/input.kcl +++ b/rust/kcl-lib/tests/involute_circular_units/input.kcl @@ -11,7 +11,7 @@ baseDiameter = pitchDiameter * cos(pressureAngle) tipDiameter = pitchDiameter + 2 * module gearHeight = .3 -angle001 = 6 +angle001 = 6deg sketch001 = startSketchOn(XY) |> startProfile(at = [baseDiameter / 2, 0]) |> involuteCircular( @@ -23,23 +23,23 @@ sketch001 = startSketchOn(XY) |> line(endAbsolute = [lastSegX(%), lastSegY(%)]) |> arc( angleStart = asin(segEndY(seg01) / segEndX(seg01)), - angleEnd = 9, + angleEnd = 9deg, radius = tipDiameter / 2, tag = $seg02, ) |> involuteCircular( startRadius = baseDiameter / 2, endRadius = tipDiameter / 2, - angle = -12, + angle = -12deg, reverse = true, ) |> line(endAbsolute = [lastSegX(%), lastSegY(%)]) - |> line(endAbsolute = polar(angle = 360 / nTeeth, length = baseDiameter / 2)) + |> line(endAbsolute = polar(angle = 360deg / nTeeth, length = baseDiameter / 2)) |> patternCircular2d( %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() diff --git a/rust/kcl-lib/tests/involute_circular_units/ops.snap b/rust/kcl-lib/tests/involute_circular_units/ops.snap index a80bec3008..4f2468ad6b 100644 --- a/rust/kcl-lib/tests/involute_circular_units/ops.snap +++ b/rust/kcl-lib/tests/involute_circular_units/ops.snap @@ -304,13 +304,9 @@ description: Operations executed involute_circular_units.kcl "type": "Number", "value": 6.0, "ty": { - "type": "Default", - "len": { - "type": "Cm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", diff --git a/rust/kcl-lib/tests/involute_circular_units/program_memory.snap b/rust/kcl-lib/tests/involute_circular_units/program_memory.snap index 856f1089f2..94bbec5e7b 100644 --- a/rust/kcl-lib/tests/involute_circular_units/program_memory.snap +++ b/rust/kcl-lib/tests/involute_circular_units/program_memory.snap @@ -20,13 +20,9 @@ description: Variables in memory after executing involute_circular_units.kcl "type": "Number", "value": 6.0, "ty": { - "type": "Default", - "len": { - "type": "Cm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "baseDiameter": { @@ -138,9 +134,9 @@ description: Variables in memory after executing involute_circular_units.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 505, - "end": 511, - "start": 505, + "commentStart": 508, + "end": 514, + "start": 508, "type": "TagDeclarator", "value": "seg01" }, @@ -158,9 +154,9 @@ description: Variables in memory after executing involute_circular_units.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 708, - "end": 714, - "start": 708, + "commentStart": 714, + "end": 720, + "start": 714, "type": "TagDeclarator", "value": "seg02" }, @@ -202,9 +198,9 @@ description: Variables in memory after executing involute_circular_units.kcl 0.0 ], "tag": { - "commentStart": 505, - "end": 511, - "start": 505, + "commentStart": 508, + "end": 514, + "start": 508, "type": "TagDeclarator", "value": "seg01" }, @@ -252,9 +248,9 @@ description: Variables in memory after executing involute_circular_units.kcl ], "radius": 5.75, "tag": { - "commentStart": 708, - "end": 714, - "start": 708, + "commentStart": 714, + "end": 720, + "start": 714, "type": "TagDeclarator", "value": "seg02" }, diff --git a/rust/kcl-lib/tests/involute_circular_units/unparsed.snap b/rust/kcl-lib/tests/involute_circular_units/unparsed.snap index 86406514f3..cf634b7b39 100644 --- a/rust/kcl-lib/tests/involute_circular_units/unparsed.snap +++ b/rust/kcl-lib/tests/involute_circular_units/unparsed.snap @@ -1,6 +1,5 @@ --- source: kcl-lib/src/simulation_tests.rs -assertion_line: 109 description: Result of unparsing involute_circular_units.kcl --- @settings(defaultLengthUnit = cm) @@ -16,7 +15,7 @@ baseDiameter = pitchDiameter * cos(pressureAngle) tipDiameter = pitchDiameter + 2 * module gearHeight = .3 -angle001 = 6 +angle001 = 6deg sketch001 = startSketchOn(XY) |> startProfile(at = [baseDiameter / 2, 0]) |> involuteCircular( @@ -28,23 +27,23 @@ sketch001 = startSketchOn(XY) |> line(endAbsolute = [lastSegX(%), lastSegY(%)]) |> arc( angleStart = asin(segEndY(seg01) / segEndX(seg01)), - angleEnd = 9, + angleEnd = 9deg, radius = tipDiameter / 2, tag = $seg02, ) |> involuteCircular( startRadius = baseDiameter / 2, endRadius = tipDiameter / 2, - angle = -12, + angle = -12deg, reverse = true, ) |> line(endAbsolute = [lastSegX(%), lastSegY(%)]) - |> line(endAbsolute = polar(angle = 360 / nTeeth, length = baseDiameter / 2)) + |> line(endAbsolute = polar(angle = 360deg / nTeeth, length = baseDiameter / 2)) |> patternCircular2d( %, instances = nTeeth, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> close() diff --git a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap index 611c70e5d2..d530e91d1c 100644 --- a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap @@ -1135,13 +1135,13 @@ description: Result of parsing ball-bearing.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1868,13 +1868,13 @@ description: Result of parsing ball-bearing.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1926,13 +1926,13 @@ description: Result of parsing ball-bearing.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1948,13 +1948,13 @@ description: Result of parsing ball-bearing.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2330,13 +2330,13 @@ description: Result of parsing ball-bearing.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2901,13 +2901,13 @@ description: Result of parsing ball-bearing.kcl "left": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -2984,13 +2984,13 @@ description: Result of parsing ball-bearing.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap index 63969081ae..19714f416e 100644 --- a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ops.snap @@ -1140,13 +1140,9 @@ description: Operations executed ball-bearing.kcl "type": "Number", "value": 36.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/brake-rotor/ast.snap b/rust/kcl-lib/tests/kcl_samples/brake-rotor/ast.snap index f235321355..c0f6ab3e64 100644 --- a/rust/kcl-lib/tests/kcl_samples/brake-rotor/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/brake-rotor/ast.snap @@ -429,13 +429,13 @@ description: Result of parsing brake-rotor.kcl "init": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -462,13 +462,13 @@ description: Result of parsing brake-rotor.kcl "init": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -528,13 +528,13 @@ description: Result of parsing brake-rotor.kcl "init": { "commentStart": 0, "end": 0, - "raw": "5", + "raw": "5deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 5.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -3374,13 +3374,13 @@ description: Result of parsing brake-rotor.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -4397,13 +4397,13 @@ description: Result of parsing brake-rotor.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -4965,13 +4965,13 @@ description: Result of parsing brake-rotor.kcl "left": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", @@ -5092,13 +5092,13 @@ description: Result of parsing brake-rotor.kcl "left": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", @@ -5618,13 +5618,13 @@ description: Result of parsing brake-rotor.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6730,13 +6730,13 @@ description: Result of parsing brake-rotor.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/brake-rotor/ops.snap b/rust/kcl-lib/tests/kcl_samples/brake-rotor/ops.snap index 36673fb098..a6e7c9ea1a 100644 --- a/rust/kcl-lib/tests/kcl_samples/brake-rotor/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/brake-rotor/ops.snap @@ -407,13 +407,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 90.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -440,13 +436,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 30.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -506,13 +498,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 5.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1002,13 +990,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 90.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1048,13 +1032,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 60.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1140,13 +1120,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 84.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1435,13 +1411,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 90.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1481,13 +1453,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 60.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1573,13 +1541,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 75.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1868,13 +1832,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 90.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1914,13 +1874,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 60.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -2006,13 +1962,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 66.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -3200,13 +3152,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 90.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -3246,13 +3194,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 60.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -3338,13 +3282,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 84.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -3633,13 +3573,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 90.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -3679,13 +3615,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 60.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -3771,13 +3703,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 75.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -4066,13 +3994,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 90.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -4112,13 +4036,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 60.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -4204,13 +4124,9 @@ description: Operations executed brake-rotor.kcl "type": "Number", "value": 66.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", diff --git a/rust/kcl-lib/tests/kcl_samples/brake-rotor/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/brake-rotor/program_memory.snap index 063076a7a8..38afd89046 100644 --- a/rust/kcl-lib/tests/kcl_samples/brake-rotor/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/brake-rotor/program_memory.snap @@ -7,39 +7,27 @@ description: Variables in memory after executing brake-rotor.kcl "type": "Number", "value": 90.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "aDraftBell": { "type": "Number", "value": 5.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "aSweep": { "type": "Number", "value": 30.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "bodyDiscBell": { @@ -68,9 +56,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -177,9 +165,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -836,9 +824,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -945,9 +933,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -1270,9 +1258,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -1379,9 +1367,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -1704,9 +1692,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -1813,9 +1801,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -2138,9 +2126,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -2247,9 +2235,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -2572,9 +2560,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -2681,9 +2669,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -3101,9 +3089,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -3210,9 +3198,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -3514,9 +3502,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -3623,9 +3611,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -3927,9 +3915,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -4036,9 +4024,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -4340,9 +4328,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -4449,9 +4437,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -4753,9 +4741,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -4862,9 +4850,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -5107,9 +5095,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -5132,9 +5120,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -5157,9 +5145,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -5182,9 +5170,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -5458,9 +5446,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -5567,9 +5555,9 @@ description: Variables in memory after executing brake-rotor.kcl 70.0 ], "tag": { - "commentStart": 4473, - "end": 4479, - "start": 4473, + "commentStart": 4497, + "end": 4503, + "start": 4497, "type": "TagDeclarator", "value": "seg04" }, @@ -5853,9 +5841,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -5866,9 +5854,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -5879,9 +5867,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -5892,9 +5880,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -5915,9 +5903,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -5940,9 +5928,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -5965,9 +5953,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -5990,9 +5978,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -6195,9 +6183,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -6208,9 +6196,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -6221,9 +6209,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -6234,9 +6222,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -6257,9 +6245,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -6282,9 +6270,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -6307,9 +6295,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -6332,9 +6320,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -6534,9 +6522,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -6547,9 +6535,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -6560,9 +6548,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -6573,9 +6561,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -6596,9 +6584,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -6621,9 +6609,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -6646,9 +6634,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -6671,9 +6659,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -6873,9 +6861,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -6886,9 +6874,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -6899,9 +6887,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -6912,9 +6900,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -6935,9 +6923,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -6960,9 +6948,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -6985,9 +6973,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -7010,9 +6998,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -7212,9 +7200,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -7225,9 +7213,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -7238,9 +7226,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -7251,9 +7239,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -7274,9 +7262,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -7299,9 +7287,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -7324,9 +7312,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -7349,9 +7337,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -7551,9 +7539,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -7564,9 +7552,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -7577,9 +7565,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -7590,9 +7578,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -7613,9 +7601,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -7638,9 +7626,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -7663,9 +7651,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -7688,9 +7676,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -7890,9 +7878,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -7903,9 +7891,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -7916,9 +7904,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -7929,9 +7917,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -7952,9 +7940,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -7977,9 +7965,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -8002,9 +7990,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -8027,9 +8015,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -8229,9 +8217,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -8242,9 +8230,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -8255,9 +8243,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -8268,9 +8256,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -8291,9 +8279,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -8316,9 +8304,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -8341,9 +8329,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -8366,9 +8354,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -8568,9 +8556,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -8581,9 +8569,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -8594,9 +8582,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -8607,9 +8595,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -8630,9 +8618,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -8655,9 +8643,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -8680,9 +8668,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -8705,9 +8693,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -8907,9 +8895,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -8920,9 +8908,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -8933,9 +8921,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -8946,9 +8934,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -8969,9 +8957,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -8994,9 +8982,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -9019,9 +9007,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -9044,9 +9032,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -9246,9 +9234,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -9259,9 +9247,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -9272,9 +9260,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -9285,9 +9273,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -9308,9 +9296,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -9333,9 +9321,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -9358,9 +9346,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -9383,9 +9371,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -9585,9 +9573,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -9598,9 +9586,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -9611,9 +9599,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -9624,9 +9612,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -9647,9 +9635,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -9672,9 +9660,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -9697,9 +9685,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -9722,9 +9710,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -9924,9 +9912,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -9937,9 +9925,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -9950,9 +9938,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -9963,9 +9951,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -9986,9 +9974,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -10011,9 +9999,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -10036,9 +10024,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -10061,9 +10049,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -10263,9 +10251,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -10276,9 +10264,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -10289,9 +10277,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -10302,9 +10290,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -10325,9 +10313,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -10350,9 +10338,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -10375,9 +10363,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -10400,9 +10388,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -10602,9 +10590,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -10615,9 +10603,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -10628,9 +10616,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -10641,9 +10629,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -10664,9 +10652,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -10689,9 +10677,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -10714,9 +10702,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -10739,9 +10727,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -10941,9 +10929,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -10954,9 +10942,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -10967,9 +10955,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -10980,9 +10968,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -11003,9 +10991,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -11028,9 +11016,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -11053,9 +11041,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -11078,9 +11066,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -11280,9 +11268,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -11293,9 +11281,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -11306,9 +11294,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -11319,9 +11307,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -11342,9 +11330,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -11367,9 +11355,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -11392,9 +11380,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -11417,9 +11405,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -11619,9 +11607,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -11632,9 +11620,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -11645,9 +11633,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -11658,9 +11646,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -11681,9 +11669,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -11706,9 +11694,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -11731,9 +11719,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -11756,9 +11744,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -11958,9 +11946,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -11971,9 +11959,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -11984,9 +11972,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -11997,9 +11985,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -12020,9 +12008,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -12045,9 +12033,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -12070,9 +12058,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -12095,9 +12083,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -12297,9 +12285,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -12310,9 +12298,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -12323,9 +12311,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -12336,9 +12324,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -12359,9 +12347,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -12384,9 +12372,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -12409,9 +12397,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -12434,9 +12422,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -12636,9 +12624,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -12649,9 +12637,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -12662,9 +12650,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -12675,9 +12663,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -12698,9 +12686,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -12723,9 +12711,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -12748,9 +12736,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -12773,9 +12761,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -12975,9 +12963,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -12988,9 +12976,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -13001,9 +12989,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -13014,9 +13002,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -13037,9 +13025,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -13062,9 +13050,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -13087,9 +13075,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -13112,9 +13100,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -13314,9 +13302,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -13327,9 +13315,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -13340,9 +13328,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -13353,9 +13341,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -13376,9 +13364,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -13401,9 +13389,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -13426,9 +13414,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -13451,9 +13439,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -13653,9 +13641,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -13666,9 +13654,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -13679,9 +13667,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -13692,9 +13680,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -13715,9 +13703,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -13740,9 +13728,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -13765,9 +13753,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -13790,9 +13778,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -13992,9 +13980,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -14005,9 +13993,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -14018,9 +14006,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -14031,9 +14019,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -14054,9 +14042,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -14079,9 +14067,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -14104,9 +14092,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -14129,9 +14117,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -14331,9 +14319,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -14344,9 +14332,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -14357,9 +14345,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -14370,9 +14358,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -14393,9 +14381,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -14418,9 +14406,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -14443,9 +14431,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -14468,9 +14456,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -14670,9 +14658,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -14683,9 +14671,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -14696,9 +14684,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -14709,9 +14697,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -14732,9 +14720,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -14757,9 +14745,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -14782,9 +14770,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -14807,9 +14795,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -15009,9 +14997,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -15022,9 +15010,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -15035,9 +15023,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -15048,9 +15036,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -15071,9 +15059,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -15096,9 +15084,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -15121,9 +15109,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -15146,9 +15134,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -15348,9 +15336,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -15361,9 +15349,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -15374,9 +15362,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -15387,9 +15375,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -15410,9 +15398,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -15435,9 +15423,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -15460,9 +15448,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -15485,9 +15473,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -15687,9 +15675,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -15700,9 +15688,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -15713,9 +15701,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -15726,9 +15714,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -15749,9 +15737,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -15774,9 +15762,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -15799,9 +15787,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -15824,9 +15812,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -16026,9 +16014,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -16039,9 +16027,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -16052,9 +16040,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -16065,9 +16053,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -16088,9 +16076,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -16113,9 +16101,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -16138,9 +16126,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -16163,9 +16151,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -16365,9 +16353,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -16378,9 +16366,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -16391,9 +16379,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -16404,9 +16392,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -16427,9 +16415,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -16452,9 +16440,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -16477,9 +16465,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -16502,9 +16490,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -16704,9 +16692,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -16717,9 +16705,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -16730,9 +16718,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -16743,9 +16731,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -16766,9 +16754,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -16791,9 +16779,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -16816,9 +16804,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -16841,9 +16829,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -17043,9 +17031,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -17056,9 +17044,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -17069,9 +17057,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -17082,9 +17070,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -17105,9 +17093,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -17130,9 +17118,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -17155,9 +17143,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -17180,9 +17168,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -17382,9 +17370,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -17395,9 +17383,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -17408,9 +17396,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -17421,9 +17409,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -17444,9 +17432,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -17469,9 +17457,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -17494,9 +17482,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -17519,9 +17507,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -17721,9 +17709,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -17734,9 +17722,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -17747,9 +17735,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -17760,9 +17748,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -17783,9 +17771,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -17808,9 +17796,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -17833,9 +17821,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -17858,9 +17846,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -18060,9 +18048,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -18073,9 +18061,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -18086,9 +18074,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -18099,9 +18087,9 @@ description: Variables in memory after executing brake-rotor.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, @@ -18122,9 +18110,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2641, - "end": 2662, - "start": 2641, + "commentStart": 2650, + "end": 2671, + "start": 2650, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -18147,9 +18135,9 @@ description: Variables in memory after executing brake-rotor.kcl 160.0 ], "tag": { - "commentStart": 2756, - "end": 2762, - "start": 2756, + "commentStart": 2768, + "end": 2774, + "start": 2768, "type": "TagDeclarator", "value": "seg02" }, @@ -18172,9 +18160,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2864, - "end": 2870, - "start": 2864, + "commentStart": 2876, + "end": 2882, + "start": 2876, "type": "TagDeclarator", "value": "seg03" }, @@ -18197,9 +18185,9 @@ description: Variables in memory after executing brake-rotor.kcl 100.0 ], "tag": { - "commentStart": 2940, - "end": 2946, - "start": 2940, + "commentStart": 2952, + "end": 2958, + "start": 2952, "type": "TagDeclarator", "value": "seg01" }, diff --git a/rust/kcl-lib/tests/kcl_samples/clock/ast.snap b/rust/kcl-lib/tests/kcl_samples/clock/ast.snap index 39bbec4757..92efdbd934 100644 --- a/rust/kcl-lib/tests/kcl_samples/clock/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/clock/ast.snap @@ -806,13 +806,13 @@ description: Result of parsing clock.kcl "left": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", @@ -839,13 +839,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -888,13 +888,13 @@ description: Result of parsing clock.kcl "left": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", @@ -921,13 +921,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "6", + "raw": "6deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 6.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -2372,13 +2372,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2490,13 +2490,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2655,13 +2655,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2790,13 +2790,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2933,13 +2933,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3068,13 +3068,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -4070,13 +4070,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4213,13 +4213,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4364,13 +4364,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4507,13 +4507,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4677,13 +4677,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4803,13 +4803,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4976,13 +4976,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5119,13 +5119,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5270,13 +5270,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5413,13 +5413,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5586,13 +5586,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5729,13 +5729,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5880,13 +5880,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6023,13 +6023,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6174,13 +6174,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6317,13 +6317,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6490,13 +6490,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6633,13 +6633,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6784,13 +6784,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6927,13 +6927,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -7078,13 +7078,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -7221,13 +7221,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -7372,13 +7372,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -7515,13 +7515,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -7687,13 +7687,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -7822,13 +7822,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -7965,13 +7965,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -8100,13 +8100,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -8265,13 +8265,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -8400,13 +8400,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -8562,13 +8562,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -8680,13 +8680,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -8823,13 +8823,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -8958,13 +8958,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -9123,13 +9123,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -9258,13 +9258,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -9401,13 +9401,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -9536,13 +9536,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -9679,13 +9679,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -9814,13 +9814,13 @@ description: Result of parsing clock.kcl "unlabeled": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -11006,13 +11006,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "70", + "raw": "70deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 70.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -11132,13 +11132,13 @@ description: Result of parsing clock.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "70", + "raw": "70deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 70.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -11331,26 +11331,26 @@ description: Result of parsing clock.kcl "left": { "commentStart": 0, "end": 0, - "raw": "70", + "raw": "70deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 70.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -11468,13 +11468,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "70", + "raw": "70deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 70.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -11683,13 +11683,13 @@ description: Result of parsing clock.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "70", + "raw": "70deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 70.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -11703,13 +11703,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -11829,26 +11829,26 @@ description: Result of parsing clock.kcl "left": { "commentStart": 0, "end": 0, - "raw": "70", + "raw": "70deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 70.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -12050,13 +12050,13 @@ description: Result of parsing clock.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "70", + "raw": "70deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 70.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -18929,13 +18929,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "20", + "raw": "20deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 20.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -19051,13 +19051,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "20", + "raw": "20deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 20.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -19232,13 +19232,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -19354,13 +19354,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -19495,13 +19495,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "340", + "raw": "340deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 340.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -19617,13 +19617,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "340", + "raw": "340deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 340.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -19788,13 +19788,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -20183,13 +20183,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -20308,13 +20308,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -20549,7 +20549,7 @@ description: Result of parsing clock.kcl "type": "NonCodeNode", "value": { "type": "blockComment", - "value": "|> angledLineThatIntersects(%, angle = segAng(seg002) + hourHandAngle - 90, intersectTag = seg004)", + "value": "|> angledLineThatIntersects(%, angle = segAng(seg002) + hourHandAngle - 90deg, intersectTag = seg004)", "style": "line" } } @@ -21140,13 +21140,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "20", + "raw": "20deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 20.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -21262,13 +21262,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "20", + "raw": "20deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 20.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -21443,13 +21443,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -21565,13 +21565,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -21706,13 +21706,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "340", + "raw": "340deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 340.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -21828,13 +21828,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "340", + "raw": "340deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 340.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -21999,13 +21999,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -22394,13 +22394,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -22519,13 +22519,13 @@ description: Result of parsing clock.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -23636,13 +23636,13 @@ description: Result of parsing clock.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -23658,13 +23658,13 @@ description: Result of parsing clock.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "420", + "raw": "420deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 420.0, - "suffix": "None" + "suffix": "Deg" } } } diff --git a/rust/kcl-lib/tests/kcl_samples/clock/ops.snap b/rust/kcl-lib/tests/kcl_samples/clock/ops.snap index 52b3478ac9..d608ef196e 100644 --- a/rust/kcl-lib/tests/kcl_samples/clock/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/clock/ops.snap @@ -572,13 +572,9 @@ description: Operations executed clock.kcl "type": "Number", "value": -180.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -605,13 +601,9 @@ description: Operations executed clock.kcl "type": "Number", "value": -84.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", diff --git a/rust/kcl-lib/tests/kcl_samples/clock/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/clock/program_memory.snap index c89a537f9d..88d587b87e 100644 --- a/rust/kcl-lib/tests/kcl_samples/clock/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/clock/program_memory.snap @@ -25,9 +25,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -38,9 +38,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 968, - "end": 980, - "start": 968, + "commentStart": 980, + "end": 992, + "start": 980, "type": "TagDeclarator", "value": "capStart001" }, @@ -67,9 +67,9 @@ description: Variables in memory after executing clock.kcl ], "radius": 250.0, "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -233,9 +233,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1312, - "end": 1318, - "start": 1312, + "commentStart": 1324, + "end": 1330, + "start": 1324, "type": "TagDeclarator", "value": "seg01" }, @@ -246,9 +246,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1512, - "end": 1522, - "start": 1512, + "commentStart": 1524, + "end": 1534, + "start": 1524, "type": "TagDeclarator", "value": "capEnd001" }, @@ -275,9 +275,9 @@ description: Variables in memory after executing clock.kcl ], "radius": 250.0, "tag": { - "commentStart": 1312, - "end": 1318, - "start": 1312, + "commentStart": 1324, + "end": 1330, + "start": 1324, "type": "TagDeclarator", "value": "seg01" }, @@ -322,9 +322,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -335,9 +335,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 968, - "end": 980, - "start": 968, + "commentStart": 980, + "end": 992, + "start": 980, "type": "TagDeclarator", "value": "capStart001" }, @@ -364,9 +364,9 @@ description: Variables in memory after executing clock.kcl ], "radius": 250.0, "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -571,9 +571,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -584,9 +584,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 968, - "end": 980, - "start": 968, + "commentStart": 980, + "end": 992, + "start": 980, "type": "TagDeclarator", "value": "capStart001" }, @@ -613,9 +613,9 @@ description: Variables in memory after executing clock.kcl ], "radius": 250.0, "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -769,13 +769,9 @@ description: Variables in memory after executing clock.kcl "type": "Number", "value": -180.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "hourHandArmLength": { @@ -846,13 +842,9 @@ description: Variables in memory after executing clock.kcl "type": "Number", "value": -84.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "minuteHandArmLength": { @@ -1839,9 +1831,9 @@ description: Variables in memory after executing clock.kcl ], "radius": 250.0, "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -1942,9 +1934,9 @@ description: Variables in memory after executing clock.kcl ], "radius": 250.0, "tag": { - "commentStart": 1312, - "end": 1318, - "start": 1312, + "commentStart": 1324, + "end": 1330, + "start": 1324, "type": "TagDeclarator", "value": "seg01" }, @@ -1989,9 +1981,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -2002,9 +1994,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 968, - "end": 980, - "start": 968, + "commentStart": 980, + "end": 992, + "start": 980, "type": "TagDeclarator", "value": "capStart001" }, @@ -2031,9 +2023,9 @@ description: Variables in memory after executing clock.kcl ], "radius": 250.0, "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -2241,9 +2233,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -2254,9 +2246,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 968, - "end": 980, - "start": 968, + "commentStart": 980, + "end": 992, + "start": 980, "type": "TagDeclarator", "value": "capStart001" }, @@ -2283,9 +2275,9 @@ description: Variables in memory after executing clock.kcl ], "radius": 250.0, "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -2598,9 +2590,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -2611,9 +2603,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 968, - "end": 980, - "start": 968, + "commentStart": 980, + "end": 992, + "start": 980, "type": "TagDeclarator", "value": "capStart001" }, @@ -2640,9 +2632,9 @@ description: Variables in memory after executing clock.kcl ], "radius": 250.0, "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -2851,9 +2843,9 @@ description: Variables in memory after executing clock.kcl 7.054165456091913 ], "tag": { - "commentStart": 9962, - "end": 9969, - "start": 9962, + "commentStart": 10163, + "end": 10170, + "start": 10163, "type": "TagDeclarator", "value": "seg004" }, @@ -2876,9 +2868,9 @@ description: Variables in memory after executing clock.kcl 19.554165456091912 ], "tag": { - "commentStart": 10158, - "end": 10165, - "start": 10158, + "commentStart": 10359, + "end": 10366, + "start": 10359, "type": "TagDeclarator", "value": "seg002" }, @@ -3186,9 +3178,9 @@ description: Variables in memory after executing clock.kcl -119.46453889126977 ], "tag": { - "commentStart": 11501, - "end": 11508, - "start": 11501, + "commentStart": 11732, + "end": 11739, + "start": 11732, "type": "TagDeclarator", "value": "seg003" }, @@ -3211,9 +3203,9 @@ description: Variables in memory after executing clock.kcl -120.77114468211543 ], "tag": { - "commentStart": 11705, - "end": 11712, - "start": 11705, + "commentStart": 11936, + "end": 11943, + "start": 11936, "type": "TagDeclarator", "value": "seg005" }, @@ -3569,9 +3561,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, @@ -3582,9 +3574,9 @@ description: Variables in memory after executing clock.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 968, - "end": 980, - "start": 968, + "commentStart": 980, + "end": 992, + "start": 980, "type": "TagDeclarator", "value": "capStart001" }, @@ -3611,9 +3603,9 @@ description: Variables in memory after executing clock.kcl ], "radius": 250.0, "tag": { - "commentStart": 889, - "end": 895, - "start": 889, + "commentStart": 901, + "end": 907, + "start": 901, "type": "TagDeclarator", "value": "seg02" }, diff --git a/rust/kcl-lib/tests/kcl_samples/cold-plate/ast.snap b/rust/kcl-lib/tests/kcl_samples/cold-plate/ast.snap index a7a20025ad..e2faead800 100644 --- a/rust/kcl-lib/tests/kcl_samples/cold-plate/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/cold-plate/ast.snap @@ -439,13 +439,13 @@ description: Result of parsing cold-plate.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -773,13 +773,13 @@ description: Result of parsing cold-plate.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1031,13 +1031,13 @@ description: Result of parsing cold-plate.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "77", + "raw": "77deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 77.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -1131,13 +1131,13 @@ description: Result of parsing cold-plate.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "77", + "raw": "77deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 77.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1865,13 +1865,13 @@ description: Result of parsing cold-plate.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2070,13 +2070,13 @@ description: Result of parsing cold-plate.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -2289,13 +2289,13 @@ description: Result of parsing cold-plate.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/cold-plate/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/cold-plate/program_memory.snap index 4465022f6f..7f0df54985 100644 --- a/rust/kcl-lib/tests/kcl_samples/cold-plate/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/cold-plate/program_memory.snap @@ -1015,9 +1015,9 @@ description: Variables in memory after executing cold-plate.kcl 1.25 ], "tag": { - "commentStart": 856, - "end": 862, - "start": 856, + "commentStart": 859, + "end": 865, + "start": 859, "type": "TagDeclarator", "value": "seg07" }, @@ -1040,9 +1040,9 @@ description: Variables in memory after executing cold-plate.kcl 1.25 ], "tag": { - "commentStart": 905, - "end": 911, - "start": 905, + "commentStart": 908, + "end": 914, + "start": 908, "type": "TagDeclarator", "value": "seg09" }, @@ -1089,9 +1089,9 @@ description: Variables in memory after executing cold-plate.kcl 0.625 ], "tag": { - "commentStart": 1012, - "end": 1018, - "start": 1012, + "commentStart": 1018, + "end": 1024, + "start": 1018, "type": "TagDeclarator", "value": "seg08" }, @@ -1157,9 +1157,9 @@ description: Variables in memory after executing cold-plate.kcl 1.047006236503076 ], "tag": { - "commentStart": 1189, - "end": 1195, - "start": 1189, + "commentStart": 1201, + "end": 1207, + "start": 1201, "type": "TagDeclarator", "value": "seg01" }, @@ -1346,9 +1346,9 @@ description: Variables in memory after executing cold-plate.kcl -3.0 ], "tag": { - "commentStart": 1594, - "end": 1600, - "start": 1594, + "commentStart": 1606, + "end": 1612, + "start": 1606, "type": "TagDeclarator", "value": "seg05" }, @@ -1376,9 +1376,9 @@ description: Variables in memory after executing cold-plate.kcl -3.0 ], "tag": { - "commentStart": 1661, - "end": 1667, - "start": 1661, + "commentStart": 1676, + "end": 1682, + "start": 1676, "type": "TagDeclarator", "value": "seg02" }, @@ -1401,9 +1401,9 @@ description: Variables in memory after executing cold-plate.kcl -1.0 ], "tag": { - "commentStart": 1736, - "end": 1742, - "start": 1736, + "commentStart": 1751, + "end": 1757, + "start": 1751, "type": "TagDeclarator", "value": "seg06" }, @@ -1431,9 +1431,9 @@ description: Variables in memory after executing cold-plate.kcl -0.9999999999999984 ], "tag": { - "commentStart": 1804, - "end": 1810, - "start": 1804, + "commentStart": 1822, + "end": 1828, + "start": 1822, "type": "TagDeclarator", "value": "seg03" }, @@ -1480,9 +1480,9 @@ description: Variables in memory after executing cold-plate.kcl 0.9999999999999998 ], "tag": { - "commentStart": 1940, - "end": 1946, - "start": 1940, + "commentStart": 1961, + "end": 1967, + "start": 1961, "type": "TagDeclarator", "value": "seg04" }, diff --git a/rust/kcl-lib/tests/kcl_samples/countersunk-plate/ast.snap b/rust/kcl-lib/tests/kcl_samples/countersunk-plate/ast.snap index 075238f8fb..29a8e086b3 100644 --- a/rust/kcl-lib/tests/kcl_samples/countersunk-plate/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/countersunk-plate/ast.snap @@ -734,13 +734,13 @@ description: Result of parsing countersunk-plate.kcl "left": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", @@ -986,13 +986,13 @@ description: Result of parsing countersunk-plate.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1386,13 +1386,13 @@ description: Result of parsing countersunk-plate.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ast.snap b/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ast.snap index 695de80ed8..8fbecb7668 100644 --- a/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ast.snap @@ -961,13 +961,13 @@ description: Result of parsing cpu-cooler.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1165,13 +1165,13 @@ description: Result of parsing cpu-cooler.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ops.snap b/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ops.snap index 2b7a12c221..27b84608c8 100644 --- a/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/cpu-cooler/ops.snap @@ -972,13 +972,9 @@ description: Operations executed cpu-cooler.kcl "type": "Number", "value": 50.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -1071,13 +1067,9 @@ description: Operations executed cpu-cooler.kcl "type": "Number", "value": 30.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap index e7cae4ba1a..24bb6d276c 100644 --- a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap @@ -603,13 +603,13 @@ description: Result of parsing cycloidal-gear.kcl "left": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "+", @@ -650,13 +650,13 @@ description: Result of parsing cycloidal-gear.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -797,13 +797,13 @@ description: Result of parsing cycloidal-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } } @@ -871,13 +871,13 @@ description: Result of parsing cycloidal-gear.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -971,13 +971,13 @@ description: Result of parsing cycloidal-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } } @@ -1045,13 +1045,13 @@ description: Result of parsing cycloidal-gear.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -1815,13 +1815,13 @@ description: Result of parsing cycloidal-gear.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "80", + "raw": "80deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 80.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap index b8e2cf3a79..1adb0683ac 100644 --- a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ast.snap @@ -765,13 +765,13 @@ description: Result of parsing exhaust-manifold.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "80", + "raw": "80deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 80.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -962,13 +962,13 @@ description: Result of parsing exhaust-manifold.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "85", + "raw": "85deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 85.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1885,13 +1885,13 @@ description: Result of parsing exhaust-manifold.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "1", + "raw": "1deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 1.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2027,13 +2027,13 @@ description: Result of parsing exhaust-manifold.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "24.3", + "raw": "24.3deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 24.3, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2169,13 +2169,13 @@ description: Result of parsing exhaust-manifold.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "25.2", + "raw": "25.2deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 25.2, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2530,13 +2530,13 @@ description: Result of parsing exhaust-manifold.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "40", + "raw": "40deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 40.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -2606,13 +2606,13 @@ description: Result of parsing exhaust-manifold.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "80", + "raw": "80deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 80.0, - "suffix": "None" + "suffix": "Deg" } } } @@ -2676,13 +2676,13 @@ description: Result of parsing exhaust-manifold.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "40", + "raw": "40deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 40.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -2982,13 +2982,13 @@ description: Result of parsing exhaust-manifold.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "40", + "raw": "40deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 40.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -3058,13 +3058,13 @@ description: Result of parsing exhaust-manifold.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "80", + "raw": "80deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 80.0, - "suffix": "None" + "suffix": "Deg" } } } @@ -3128,13 +3128,13 @@ description: Result of parsing exhaust-manifold.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "40", + "raw": "40deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 40.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -3477,13 +3477,13 @@ description: Result of parsing exhaust-manifold.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "40", + "raw": "40deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 40.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -3553,13 +3553,13 @@ description: Result of parsing exhaust-manifold.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "80", + "raw": "80deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 80.0, - "suffix": "None" + "suffix": "Deg" } } } diff --git a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap index a063421a37..28580825f2 100644 --- a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/ops.snap @@ -501,13 +501,9 @@ description: Operations executed exhaust-manifold.kcl "type": "Number", "value": 1.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -853,13 +849,9 @@ description: Operations executed exhaust-manifold.kcl "type": "Number", "value": 24.3, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -1205,13 +1197,9 @@ description: Operations executed exhaust-manifold.kcl "type": "Number", "value": 25.2, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/program_memory.snap index 30300f8a03..9ed3981279 100644 --- a/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/exhaust-manifold/program_memory.snap @@ -28,9 +28,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2009, - "end": 2015, - "start": 2009, + "commentStart": 2024, + "end": 2030, + "start": 2024, "type": "TagDeclarator", "value": "seg01" }, @@ -62,9 +62,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2183, - "end": 2189, - "start": 2183, + "commentStart": 2207, + "end": 2213, + "start": 2207, "type": "TagDeclarator", "value": "seg03" }, @@ -75,9 +75,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2232, - "end": 2238, - "start": 2232, + "commentStart": 2256, + "end": 2262, + "start": 2256, "type": "TagDeclarator", "value": "seg04" }, @@ -88,9 +88,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2271, - "end": 2277, - "start": 2271, + "commentStart": 2295, + "end": 2301, + "start": 2295, "type": "TagDeclarator", "value": "seg05" }, @@ -122,9 +122,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2455, - "end": 2461, - "start": 2455, + "commentStart": 2488, + "end": 2494, + "start": 2488, "type": "TagDeclarator", "value": "seg07" }, @@ -135,9 +135,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2512, - "end": 2518, - "start": 2512, + "commentStart": 2545, + "end": 2551, + "start": 2545, "type": "TagDeclarator", "value": "seg08" }, @@ -148,9 +148,9 @@ description: Variables in memory after executing exhaust-manifold.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2562, - "end": 2568, - "start": 2562, + "commentStart": 2595, + "end": 2601, + "start": 2595, "type": "TagDeclarator", "value": "seg09" }, @@ -192,9 +192,9 @@ description: Variables in memory after executing exhaust-manifold.kcl -1.25 ], "tag": { - "commentStart": 2009, - "end": 2015, - "start": 2009, + "commentStart": 2024, + "end": 2030, + "start": 2024, "type": "TagDeclarator", "value": "seg01" }, @@ -289,9 +289,9 @@ description: Variables in memory after executing exhaust-manifold.kcl -1.2499999999999996 ], "tag": { - "commentStart": 2183, - "end": 2189, - "start": 2183, + "commentStart": 2207, + "end": 2213, + "start": 2207, "type": "TagDeclarator", "value": "seg03" }, @@ -314,9 +314,9 @@ description: Variables in memory after executing exhaust-manifold.kcl -1.2499999999999996 ], "tag": { - "commentStart": 2232, - "end": 2238, - "start": 2232, + "commentStart": 2256, + "end": 2262, + "start": 2256, "type": "TagDeclarator", "value": "seg04" }, @@ -339,9 +339,9 @@ description: Variables in memory after executing exhaust-manifold.kcl 1.3500000000000005 ], "tag": { - "commentStart": 2271, - "end": 2277, - "start": 2271, + "commentStart": 2295, + "end": 2301, + "start": 2295, "type": "TagDeclarator", "value": "seg05" }, @@ -436,9 +436,9 @@ description: Variables in memory after executing exhaust-manifold.kcl 1.3500000000000008 ], "tag": { - "commentStart": 2455, - "end": 2461, - "start": 2455, + "commentStart": 2488, + "end": 2494, + "start": 2488, "type": "TagDeclarator", "value": "seg07" }, @@ -461,9 +461,9 @@ description: Variables in memory after executing exhaust-manifold.kcl 1.3500000000000008 ], "tag": { - "commentStart": 2512, - "end": 2518, - "start": 2512, + "commentStart": 2545, + "end": 2551, + "start": 2545, "type": "TagDeclarator", "value": "seg08" }, @@ -486,9 +486,9 @@ description: Variables in memory after executing exhaust-manifold.kcl -1.25 ], "tag": { - "commentStart": 2562, - "end": 2568, - "start": 2562, + "commentStart": 2595, + "end": 2601, + "start": 2595, "type": "TagDeclarator", "value": "seg09" }, diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap index 71f53b91cf..2a698ae321 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap @@ -1007,13 +1007,13 @@ description: Result of parsing food-service-spatula.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1140,13 +1140,13 @@ description: Result of parsing food-service-spatula.kcl "expression": { "commentStart": 0, "end": 0, - "raw": "270", + "raw": "270deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 270.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1167,13 +1167,13 @@ description: Result of parsing food-service-spatula.kcl "expression": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1611,13 +1611,13 @@ description: Result of parsing food-service-spatula.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1778,13 +1778,13 @@ description: Result of parsing food-service-spatula.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1953,32 +1953,6 @@ description: Result of parsing food-service-spatula.kcl }, { "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "angle", - "start": 0, - "type": "Identifier" - }, - "arg": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "angle", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - }, { "type": "LabeledArg", "label": { @@ -2026,7 +2000,22 @@ description: Result of parsing food-service-spatula.kcl "start": 0, "type": "CallExpressionKw", "type": "CallExpressionKw", - "unlabeled": null + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -2088,13 +2077,13 @@ description: Result of parsing food-service-spatula.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } } @@ -2123,32 +2112,6 @@ description: Result of parsing food-service-spatula.kcl }, { "arguments": [ - { - "type": "LabeledArg", - "label": { - "commentStart": 0, - "end": 0, - "name": "angle", - "start": 0, - "type": "Identifier" - }, - "arg": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "angle", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - }, { "type": "LabeledArg", "label": { @@ -2204,7 +2167,22 @@ description: Result of parsing food-service-spatula.kcl "start": 0, "type": "CallExpressionKw", "type": "CallExpressionKw", - "unlabeled": null + "unlabeled": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "angle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } }, { "arguments": [ @@ -2849,13 +2827,13 @@ description: Result of parsing food-service-spatula.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "163.087610", + "raw": "163.087610deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 163.08761, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2871,13 +2849,13 @@ description: Result of parsing food-service-spatula.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "196.912390", + "raw": "196.912390deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 196.91239, - "suffix": "None" + "suffix": "Deg" } } }, @@ -5698,13 +5676,13 @@ description: Result of parsing food-service-spatula.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90.0", + "raw": "90.0deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5917,13 +5895,13 @@ description: Result of parsing food-service-spatula.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90.0", + "raw": "90.0deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6093,13 +6071,13 @@ description: Result of parsing food-service-spatula.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90.0", + "raw": "90.0deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6115,13 +6093,13 @@ description: Result of parsing food-service-spatula.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180.0", + "raw": "180.0deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6309,13 +6287,13 @@ description: Result of parsing food-service-spatula.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180.0", + "raw": "180.0deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6331,13 +6309,13 @@ description: Result of parsing food-service-spatula.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "270.0", + "raw": "270.0deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 270.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap index d1359a84ba..6fb59cbfa9 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ops.snap @@ -2134,13 +2134,9 @@ description: Operations executed food-service-spatula.kcl "type": "Number", "value": 90.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap index ef37cfc802..39147a1f41 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap @@ -27,9 +27,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1590, - "end": 1599, - "start": 1590, + "commentStart": 1592, + "end": 1601, + "start": 1592, "type": "TagDeclarator", "value": "backEdge" }, @@ -90,9 +90,9 @@ description: Variables in memory after executing food-service-spatula.kcl -30.0 ], "tag": { - "commentStart": 1590, - "end": 1599, - "start": 1590, + "commentStart": 1592, + "end": 1601, + "start": 1592, "type": "TagDeclarator", "value": "backEdge" }, @@ -299,9 +299,9 @@ description: Variables in memory after executing food-service-spatula.kcl -30.0 ], "tag": { - "commentStart": 1590, - "end": 1599, - "start": 1590, + "commentStart": 1592, + "end": 1601, + "start": 1592, "type": "TagDeclarator", "value": "backEdge" }, @@ -551,9 +551,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4336, - "end": 4348, - "start": 4336, + "commentStart": 4356, + "end": 4368, + "start": 4356, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -713,9 +713,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4336, - "end": 4348, - "start": 4336, + "commentStart": 4356, + "end": 4368, + "start": 4356, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1058,9 +1058,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4336, - "end": 4348, - "start": 4336, + "commentStart": 4356, + "end": 4368, + "start": 4356, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1220,9 +1220,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4336, - "end": 4348, - "start": 4336, + "commentStart": 4356, + "end": 4368, + "start": 4356, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1538,9 +1538,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4336, - "end": 4348, - "start": 4336, + "commentStart": 4356, + "end": 4368, + "start": 4356, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1729,9 +1729,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2988, - "end": 3005, - "start": 2988, + "commentStart": 2996, + "end": 3013, + "start": 2996, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -1756,9 +1756,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3136, - "end": 3150, - "start": 3136, + "commentStart": 3144, + "end": 3158, + "start": 3144, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -1800,9 +1800,9 @@ description: Variables in memory after executing food-service-spatula.kcl 3.5 ], "tag": { - "commentStart": 2988, - "end": 3005, - "start": 2988, + "commentStart": 2996, + "end": 3013, + "start": 2996, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -1863,9 +1863,9 @@ description: Variables in memory after executing food-service-spatula.kcl 91.32128900000001 ], "tag": { - "commentStart": 3136, - "end": 3150, - "start": 3136, + "commentStart": 3144, + "end": 3158, + "start": 3144, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -2211,9 +2211,9 @@ description: Variables in memory after executing food-service-spatula.kcl 3.5 ], "tag": { - "commentStart": 2988, - "end": 3005, - "start": 2988, + "commentStart": 2996, + "end": 3013, + "start": 2996, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -2274,9 +2274,9 @@ description: Variables in memory after executing food-service-spatula.kcl 91.32128900000001 ], "tag": { - "commentStart": 3136, - "end": 3150, - "start": 3136, + "commentStart": 3144, + "end": 3158, + "start": 3144, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -2536,9 +2536,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4336, - "end": 4348, - "start": 4336, + "commentStart": 4356, + "end": 4368, + "start": 4356, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -2698,9 +2698,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4336, - "end": 4348, - "start": 4336, + "commentStart": 4356, + "end": 4368, + "start": 4356, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -3371,9 +3371,9 @@ description: Variables in memory after executing food-service-spatula.kcl -30.0 ], "tag": { - "commentStart": 1590, - "end": 1599, - "start": 1590, + "commentStart": 1592, + "end": 1601, + "start": 1592, "type": "TagDeclarator", "value": "backEdge" }, diff --git a/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap b/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap index c93c3e4f5b..4f3c8bbf17 100644 --- a/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap @@ -394,13 +394,13 @@ description: Result of parsing french-press.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -765,13 +765,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1411,13 +1411,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1433,13 +1433,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "205", + "raw": "205deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 205.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1503,13 +1503,13 @@ description: Result of parsing french-press.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -1597,13 +1597,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1620,13 +1620,13 @@ description: Result of parsing french-press.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -1696,13 +1696,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1791,13 +1791,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1813,13 +1813,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2105,13 +2105,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2127,13 +2127,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2196,13 +2196,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2338,13 +2338,13 @@ description: Result of parsing french-press.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -2367,13 +2367,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2437,13 +2437,13 @@ description: Result of parsing french-press.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -2585,13 +2585,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "205", + "raw": "205deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 205.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2607,13 +2607,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2980,13 +2980,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3611,13 +3611,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3634,13 +3634,13 @@ description: Result of parsing french-press.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4284,13 +4284,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -4416,13 +4416,13 @@ description: Result of parsing french-press.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4492,13 +4492,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -5045,13 +5045,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "10", + "raw": "10deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 10.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -5307,13 +5307,13 @@ description: Result of parsing french-press.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6262,13 +6262,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6675,13 +6675,13 @@ description: Result of parsing french-press.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/french-press/ops.snap b/rust/kcl-lib/tests/kcl_samples/french-press/ops.snap index ff80504e14..dec6013062 100644 --- a/rust/kcl-lib/tests/kcl_samples/french-press/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/french-press/ops.snap @@ -152,13 +152,9 @@ description: Operations executed french-press.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/french-press/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/french-press/program_memory.snap index 9a8a2da130..0a3d105e96 100644 --- a/rust/kcl-lib/tests/kcl_samples/french-press/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/french-press/program_memory.snap @@ -4412,9 +4412,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 479, - "end": 500, - "start": 479, + "commentStart": 482, + "end": 503, + "start": 482, "type": "TagDeclarator", "value": "rectangleSegmentB001" }, @@ -4425,9 +4425,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 602, - "end": 623, - "start": 602, + "commentStart": 605, + "end": 626, + "start": 605, "type": "TagDeclarator", "value": "rectangleSegmentC001" }, @@ -4480,9 +4480,9 @@ description: Variables in memory after executing french-press.kcl 5.7 ], "tag": { - "commentStart": 479, - "end": 500, - "start": 479, + "commentStart": 482, + "end": 503, + "start": 482, "type": "TagDeclarator", "value": "rectangleSegmentB001" }, @@ -4505,9 +4505,9 @@ description: Variables in memory after executing french-press.kcl 6.45 ], "tag": { - "commentStart": 602, - "end": 623, - "start": 602, + "commentStart": 605, + "end": 626, + "start": 605, "type": "TagDeclarator", "value": "rectangleSegmentC001" }, @@ -4658,9 +4658,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1091, - "end": 1097, - "start": 1091, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "edge1" }, @@ -4678,9 +4678,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1205, - "end": 1211, - "start": 1205, + "commentStart": 1220, + "end": 1226, + "start": 1220, "type": "TagDeclarator", "value": "edge2" }, @@ -4698,9 +4698,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1326, - "end": 1332, - "start": 1326, + "commentStart": 1350, + "end": 1356, + "start": 1350, "type": "TagDeclarator", "value": "edge3" }, @@ -4718,9 +4718,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1425, - "end": 1433, - "start": 1425, + "commentStart": 1455, + "end": 1463, + "start": 1455, "type": "TagDeclarator", "value": "edgeLen" }, @@ -4738,9 +4738,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1511, - "end": 1517, - "start": 1511, + "commentStart": 1541, + "end": 1547, + "start": 1541, "type": "TagDeclarator", "value": "edge4" }, @@ -4758,9 +4758,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1642, - "end": 1648, - "start": 1642, + "commentStart": 1681, + "end": 1687, + "start": 1681, "type": "TagDeclarator", "value": "edge5" }, @@ -4778,9 +4778,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1775, - "end": 1781, - "start": 1775, + "commentStart": 1823, + "end": 1829, + "start": 1823, "type": "TagDeclarator", "value": "edge6" }, @@ -4834,9 +4834,9 @@ description: Variables in memory after executing french-press.kcl 5.7 ], "tag": { - "commentStart": 1091, - "end": 1097, - "start": 1091, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "edge1" }, @@ -4884,9 +4884,9 @@ description: Variables in memory after executing french-press.kcl 0.37321452147779016 ], "tag": { - "commentStart": 1205, - "end": 1211, - "start": 1205, + "commentStart": 1220, + "end": 1226, + "start": 1220, "type": "TagDeclarator", "value": "edge2" }, @@ -4934,9 +4934,9 @@ description: Variables in memory after executing french-press.kcl -0.9660159630635361 ], "tag": { - "commentStart": 1326, - "end": 1332, - "start": 1326, + "commentStart": 1350, + "end": 1356, + "start": 1350, "type": "TagDeclarator", "value": "edge3" }, @@ -4984,9 +4984,9 @@ description: Variables in memory after executing french-press.kcl -0.13301270189221936 ], "tag": { - "commentStart": 1425, - "end": 1433, - "start": 1425, + "commentStart": 1455, + "end": 1463, + "start": 1455, "type": "TagDeclarator", "value": "edgeLen" }, @@ -5028,9 +5028,9 @@ description: Variables in memory after executing french-press.kcl -0.03301270189221936 ], "tag": { - "commentStart": 1511, - "end": 1517, - "start": 1511, + "commentStart": 1541, + "end": 1547, + "start": 1541, "type": "TagDeclarator", "value": "edge4" }, @@ -5078,9 +5078,9 @@ description: Variables in memory after executing french-press.kcl -0.11339745962155623 ], "tag": { - "commentStart": 1642, - "end": 1648, - "start": 1642, + "commentStart": 1681, + "end": 1687, + "start": 1681, "type": "TagDeclarator", "value": "edge5" }, @@ -5128,9 +5128,9 @@ description: Variables in memory after executing french-press.kcl -0.17890072079287297 ], "tag": { - "commentStart": 1775, - "end": 1781, - "start": 1775, + "commentStart": 1823, + "end": 1829, + "start": 1823, "type": "TagDeclarator", "value": "edge6" }, @@ -5319,9 +5319,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1091, - "end": 1097, - "start": 1091, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "edge1" }, @@ -5339,9 +5339,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1205, - "end": 1211, - "start": 1205, + "commentStart": 1220, + "end": 1226, + "start": 1220, "type": "TagDeclarator", "value": "edge2" }, @@ -5359,9 +5359,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1326, - "end": 1332, - "start": 1326, + "commentStart": 1350, + "end": 1356, + "start": 1350, "type": "TagDeclarator", "value": "edge3" }, @@ -5379,9 +5379,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1425, - "end": 1433, - "start": 1425, + "commentStart": 1455, + "end": 1463, + "start": 1455, "type": "TagDeclarator", "value": "edgeLen" }, @@ -5399,9 +5399,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1511, - "end": 1517, - "start": 1511, + "commentStart": 1541, + "end": 1547, + "start": 1541, "type": "TagDeclarator", "value": "edge4" }, @@ -5419,9 +5419,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1642, - "end": 1648, - "start": 1642, + "commentStart": 1681, + "end": 1687, + "start": 1681, "type": "TagDeclarator", "value": "edge5" }, @@ -5439,9 +5439,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1775, - "end": 1781, - "start": 1775, + "commentStart": 1823, + "end": 1829, + "start": 1823, "type": "TagDeclarator", "value": "edge6" }, @@ -5495,9 +5495,9 @@ description: Variables in memory after executing french-press.kcl 5.7 ], "tag": { - "commentStart": 1091, - "end": 1097, - "start": 1091, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "edge1" }, @@ -5545,9 +5545,9 @@ description: Variables in memory after executing french-press.kcl 0.37321452147779016 ], "tag": { - "commentStart": 1205, - "end": 1211, - "start": 1205, + "commentStart": 1220, + "end": 1226, + "start": 1220, "type": "TagDeclarator", "value": "edge2" }, @@ -5595,9 +5595,9 @@ description: Variables in memory after executing french-press.kcl -0.9660159630635361 ], "tag": { - "commentStart": 1326, - "end": 1332, - "start": 1326, + "commentStart": 1350, + "end": 1356, + "start": 1350, "type": "TagDeclarator", "value": "edge3" }, @@ -5645,9 +5645,9 @@ description: Variables in memory after executing french-press.kcl -0.13301270189221936 ], "tag": { - "commentStart": 1425, - "end": 1433, - "start": 1425, + "commentStart": 1455, + "end": 1463, + "start": 1455, "type": "TagDeclarator", "value": "edgeLen" }, @@ -5689,9 +5689,9 @@ description: Variables in memory after executing french-press.kcl -0.03301270189221936 ], "tag": { - "commentStart": 1511, - "end": 1517, - "start": 1511, + "commentStart": 1541, + "end": 1547, + "start": 1541, "type": "TagDeclarator", "value": "edge4" }, @@ -5739,9 +5739,9 @@ description: Variables in memory after executing french-press.kcl -0.11339745962155623 ], "tag": { - "commentStart": 1642, - "end": 1648, - "start": 1642, + "commentStart": 1681, + "end": 1687, + "start": 1681, "type": "TagDeclarator", "value": "edge5" }, @@ -5789,9 +5789,9 @@ description: Variables in memory after executing french-press.kcl -0.17890072079287297 ], "tag": { - "commentStart": 1775, - "end": 1781, - "start": 1775, + "commentStart": 1823, + "end": 1829, + "start": 1823, "type": "TagDeclarator", "value": "edge6" }, @@ -5980,9 +5980,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1091, - "end": 1097, - "start": 1091, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "edge1" }, @@ -6000,9 +6000,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1205, - "end": 1211, - "start": 1205, + "commentStart": 1220, + "end": 1226, + "start": 1220, "type": "TagDeclarator", "value": "edge2" }, @@ -6020,9 +6020,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1326, - "end": 1332, - "start": 1326, + "commentStart": 1350, + "end": 1356, + "start": 1350, "type": "TagDeclarator", "value": "edge3" }, @@ -6040,9 +6040,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1425, - "end": 1433, - "start": 1425, + "commentStart": 1455, + "end": 1463, + "start": 1455, "type": "TagDeclarator", "value": "edgeLen" }, @@ -6060,9 +6060,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1511, - "end": 1517, - "start": 1511, + "commentStart": 1541, + "end": 1547, + "start": 1541, "type": "TagDeclarator", "value": "edge4" }, @@ -6080,9 +6080,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1642, - "end": 1648, - "start": 1642, + "commentStart": 1681, + "end": 1687, + "start": 1681, "type": "TagDeclarator", "value": "edge5" }, @@ -6100,9 +6100,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1775, - "end": 1781, - "start": 1775, + "commentStart": 1823, + "end": 1829, + "start": 1823, "type": "TagDeclarator", "value": "edge6" }, @@ -6156,9 +6156,9 @@ description: Variables in memory after executing french-press.kcl 5.7 ], "tag": { - "commentStart": 1091, - "end": 1097, - "start": 1091, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "edge1" }, @@ -6206,9 +6206,9 @@ description: Variables in memory after executing french-press.kcl 0.37321452147779016 ], "tag": { - "commentStart": 1205, - "end": 1211, - "start": 1205, + "commentStart": 1220, + "end": 1226, + "start": 1220, "type": "TagDeclarator", "value": "edge2" }, @@ -6256,9 +6256,9 @@ description: Variables in memory after executing french-press.kcl -0.9660159630635361 ], "tag": { - "commentStart": 1326, - "end": 1332, - "start": 1326, + "commentStart": 1350, + "end": 1356, + "start": 1350, "type": "TagDeclarator", "value": "edge3" }, @@ -6306,9 +6306,9 @@ description: Variables in memory after executing french-press.kcl -0.13301270189221936 ], "tag": { - "commentStart": 1425, - "end": 1433, - "start": 1425, + "commentStart": 1455, + "end": 1463, + "start": 1455, "type": "TagDeclarator", "value": "edgeLen" }, @@ -6350,9 +6350,9 @@ description: Variables in memory after executing french-press.kcl -0.03301270189221936 ], "tag": { - "commentStart": 1511, - "end": 1517, - "start": 1511, + "commentStart": 1541, + "end": 1547, + "start": 1541, "type": "TagDeclarator", "value": "edge4" }, @@ -6400,9 +6400,9 @@ description: Variables in memory after executing french-press.kcl -0.11339745962155623 ], "tag": { - "commentStart": 1642, - "end": 1648, - "start": 1642, + "commentStart": 1681, + "end": 1687, + "start": 1681, "type": "TagDeclarator", "value": "edge5" }, @@ -6450,9 +6450,9 @@ description: Variables in memory after executing french-press.kcl -0.17890072079287297 ], "tag": { - "commentStart": 1775, - "end": 1781, - "start": 1775, + "commentStart": 1823, + "end": 1829, + "start": 1823, "type": "TagDeclarator", "value": "edge6" }, @@ -6641,9 +6641,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1091, - "end": 1097, - "start": 1091, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "edge1" }, @@ -6661,9 +6661,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1205, - "end": 1211, - "start": 1205, + "commentStart": 1220, + "end": 1226, + "start": 1220, "type": "TagDeclarator", "value": "edge2" }, @@ -6681,9 +6681,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1326, - "end": 1332, - "start": 1326, + "commentStart": 1350, + "end": 1356, + "start": 1350, "type": "TagDeclarator", "value": "edge3" }, @@ -6701,9 +6701,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1425, - "end": 1433, - "start": 1425, + "commentStart": 1455, + "end": 1463, + "start": 1455, "type": "TagDeclarator", "value": "edgeLen" }, @@ -6721,9 +6721,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1511, - "end": 1517, - "start": 1511, + "commentStart": 1541, + "end": 1547, + "start": 1541, "type": "TagDeclarator", "value": "edge4" }, @@ -6741,9 +6741,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1642, - "end": 1648, - "start": 1642, + "commentStart": 1681, + "end": 1687, + "start": 1681, "type": "TagDeclarator", "value": "edge5" }, @@ -6761,9 +6761,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1775, - "end": 1781, - "start": 1775, + "commentStart": 1823, + "end": 1829, + "start": 1823, "type": "TagDeclarator", "value": "edge6" }, @@ -6817,9 +6817,9 @@ description: Variables in memory after executing french-press.kcl 5.7 ], "tag": { - "commentStart": 1091, - "end": 1097, - "start": 1091, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "edge1" }, @@ -6867,9 +6867,9 @@ description: Variables in memory after executing french-press.kcl 0.37321452147779016 ], "tag": { - "commentStart": 1205, - "end": 1211, - "start": 1205, + "commentStart": 1220, + "end": 1226, + "start": 1220, "type": "TagDeclarator", "value": "edge2" }, @@ -6917,9 +6917,9 @@ description: Variables in memory after executing french-press.kcl -0.9660159630635361 ], "tag": { - "commentStart": 1326, - "end": 1332, - "start": 1326, + "commentStart": 1350, + "end": 1356, + "start": 1350, "type": "TagDeclarator", "value": "edge3" }, @@ -6967,9 +6967,9 @@ description: Variables in memory after executing french-press.kcl -0.13301270189221936 ], "tag": { - "commentStart": 1425, - "end": 1433, - "start": 1425, + "commentStart": 1455, + "end": 1463, + "start": 1455, "type": "TagDeclarator", "value": "edgeLen" }, @@ -7011,9 +7011,9 @@ description: Variables in memory after executing french-press.kcl -0.03301270189221936 ], "tag": { - "commentStart": 1511, - "end": 1517, - "start": 1511, + "commentStart": 1541, + "end": 1547, + "start": 1541, "type": "TagDeclarator", "value": "edge4" }, @@ -7061,9 +7061,9 @@ description: Variables in memory after executing french-press.kcl -0.11339745962155623 ], "tag": { - "commentStart": 1642, - "end": 1648, - "start": 1642, + "commentStart": 1681, + "end": 1687, + "start": 1681, "type": "TagDeclarator", "value": "edge5" }, @@ -7111,9 +7111,9 @@ description: Variables in memory after executing french-press.kcl -0.17890072079287297 ], "tag": { - "commentStart": 1775, - "end": 1781, - "start": 1775, + "commentStart": 1823, + "end": 1829, + "start": 1823, "type": "TagDeclarator", "value": "edge6" }, @@ -8128,9 +8128,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2929, - "end": 2934, - "start": 2929, + "commentStart": 2995, + "end": 3000, + "start": 2995, "type": "TagDeclarator", "value": "seg1" }, @@ -8198,9 +8198,9 @@ description: Variables in memory after executing french-press.kcl 1.11 ], "tag": { - "commentStart": 2929, - "end": 2934, - "start": 2929, + "commentStart": 2995, + "end": 3000, + "start": 2995, "type": "TagDeclarator", "value": "seg1" }, diff --git a/rust/kcl-lib/tests/kcl_samples/hammer/ast.snap b/rust/kcl-lib/tests/kcl_samples/hammer/ast.snap index 350babdaef..0f2bb67943 100644 --- a/rust/kcl-lib/tests/kcl_samples/hammer/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/hammer/ast.snap @@ -382,13 +382,13 @@ description: Result of parsing hammer.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -497,13 +497,13 @@ description: Result of parsing hammer.kcl "right": { "commentStart": 0, "end": 0, - "raw": "10", + "raw": "10deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 10.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -803,13 +803,13 @@ description: Result of parsing hammer.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -945,13 +945,13 @@ description: Result of parsing hammer.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1079,13 +1079,13 @@ description: Result of parsing hammer.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "23", + "raw": "23deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 23.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1797,13 +1797,13 @@ description: Result of parsing hammer.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1819,13 +1819,13 @@ description: Result of parsing hammer.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "270", + "raw": "270deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 270.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2645,13 +2645,13 @@ description: Result of parsing hammer.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "177", + "raw": "177deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 177.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3452,13 +3452,13 @@ description: Result of parsing hammer.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -3482,13 +3482,13 @@ description: Result of parsing hammer.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "270", + "raw": "270deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 270.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5480,13 +5480,13 @@ description: Result of parsing hammer.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -5924,13 +5924,13 @@ description: Result of parsing hammer.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/hammer/ops.snap b/rust/kcl-lib/tests/kcl_samples/hammer/ops.snap index b2e32b7f01..5d9d0f06e8 100644 --- a/rust/kcl-lib/tests/kcl_samples/hammer/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/hammer/ops.snap @@ -891,13 +891,9 @@ description: Operations executed hammer.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/hammer/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/hammer/program_memory.snap index 7e630a600d..8d25cd7bde 100644 --- a/rust/kcl-lib/tests/kcl_samples/hammer/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/hammer/program_memory.snap @@ -15,9 +15,9 @@ description: Variables in memory after executing hammer.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3375, - "end": 3381, - "start": 3375, + "commentStart": 3405, + "end": 3411, + "start": 3405, "type": "TagDeclarator", "value": "seg05" }, @@ -28,9 +28,9 @@ description: Variables in memory after executing hammer.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3419, - "end": 3431, - "start": 3419, + "commentStart": 3449, + "end": 3461, + "start": 3449, "type": "TagDeclarator", "value": "capStart001" }, @@ -57,9 +57,9 @@ description: Variables in memory after executing hammer.kcl ], "radius": 0.45, "tag": { - "commentStart": 3375, - "end": 3381, - "start": 3375, + "commentStart": 3405, + "end": 3411, + "start": 3405, "type": "TagDeclarator", "value": "seg05" }, @@ -224,9 +224,9 @@ description: Variables in memory after executing hammer.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 617, - "end": 623, - "start": 617, + "commentStart": 623, + "end": 629, + "start": 623, "type": "TagDeclarator", "value": "seg03" }, @@ -258,9 +258,9 @@ description: Variables in memory after executing hammer.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 779, - "end": 785, - "start": 779, + "commentStart": 788, + "end": 794, + "start": 788, "type": "TagDeclarator", "value": "seg02" }, @@ -278,9 +278,9 @@ description: Variables in memory after executing hammer.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 863, - "end": 869, - "start": 863, + "commentStart": 875, + "end": 881, + "start": 875, "type": "TagDeclarator", "value": "seg04" }, @@ -438,9 +438,9 @@ description: Variables in memory after executing hammer.kcl 11.77770605137785 ], "tag": { - "commentStart": 617, - "end": 623, - "start": 617, + "commentStart": 623, + "end": 629, + "start": 623, "type": "TagDeclarator", "value": "seg03" }, @@ -530,9 +530,9 @@ description: Variables in memory after executing hammer.kcl 12.799999999999999 ], "tag": { - "commentStart": 779, - "end": 785, - "start": 779, + "commentStart": 788, + "end": 794, + "start": 788, "type": "TagDeclarator", "value": "seg02" }, @@ -579,9 +579,9 @@ description: Variables in memory after executing hammer.kcl 11.624999999999998 ], "tag": { - "commentStart": 863, - "end": 869, - "start": 863, + "commentStart": 875, + "end": 881, + "start": 875, "type": "TagDeclarator", "value": "seg04" }, @@ -810,9 +810,9 @@ description: Variables in memory after executing hammer.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 617, - "end": 623, - "start": 617, + "commentStart": 623, + "end": 629, + "start": 623, "type": "TagDeclarator", "value": "seg03" }, @@ -844,9 +844,9 @@ description: Variables in memory after executing hammer.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 779, - "end": 785, - "start": 779, + "commentStart": 788, + "end": 794, + "start": 788, "type": "TagDeclarator", "value": "seg02" }, @@ -864,9 +864,9 @@ description: Variables in memory after executing hammer.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 863, - "end": 869, - "start": 863, + "commentStart": 875, + "end": 881, + "start": 875, "type": "TagDeclarator", "value": "seg04" }, @@ -1024,9 +1024,9 @@ description: Variables in memory after executing hammer.kcl 11.77770605137785 ], "tag": { - "commentStart": 617, - "end": 623, - "start": 617, + "commentStart": 623, + "end": 629, + "start": 623, "type": "TagDeclarator", "value": "seg03" }, @@ -1116,9 +1116,9 @@ description: Variables in memory after executing hammer.kcl 12.799999999999999 ], "tag": { - "commentStart": 779, - "end": 785, - "start": 779, + "commentStart": 788, + "end": 794, + "start": 788, "type": "TagDeclarator", "value": "seg02" }, @@ -1165,9 +1165,9 @@ description: Variables in memory after executing hammer.kcl 11.624999999999998 ], "tag": { - "commentStart": 863, - "end": 869, - "start": 863, + "commentStart": 875, + "end": 881, + "start": 875, "type": "TagDeclarator", "value": "seg04" }, @@ -2208,9 +2208,9 @@ description: Variables in memory after executing hammer.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 617, - "end": 623, - "start": 617, + "commentStart": 623, + "end": 629, + "start": 623, "type": "TagDeclarator", "value": "seg03" }, @@ -2242,9 +2242,9 @@ description: Variables in memory after executing hammer.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 779, - "end": 785, - "start": 779, + "commentStart": 788, + "end": 794, + "start": 788, "type": "TagDeclarator", "value": "seg02" }, @@ -2262,9 +2262,9 @@ description: Variables in memory after executing hammer.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 863, - "end": 869, - "start": 863, + "commentStart": 875, + "end": 881, + "start": 875, "type": "TagDeclarator", "value": "seg04" }, @@ -2422,9 +2422,9 @@ description: Variables in memory after executing hammer.kcl 11.77770605137785 ], "tag": { - "commentStart": 617, - "end": 623, - "start": 617, + "commentStart": 623, + "end": 629, + "start": 623, "type": "TagDeclarator", "value": "seg03" }, @@ -2514,9 +2514,9 @@ description: Variables in memory after executing hammer.kcl 12.799999999999999 ], "tag": { - "commentStart": 779, - "end": 785, - "start": 779, + "commentStart": 788, + "end": 794, + "start": 788, "type": "TagDeclarator", "value": "seg02" }, @@ -2563,9 +2563,9 @@ description: Variables in memory after executing hammer.kcl 11.624999999999998 ], "tag": { - "commentStart": 863, - "end": 869, - "start": 863, + "commentStart": 875, + "end": 881, + "start": 875, "type": "TagDeclarator", "value": "seg04" }, diff --git a/rust/kcl-lib/tests/kcl_samples/helical-gear/artifact_commands.snap b/rust/kcl-lib/tests/kcl_samples/helical-gear/artifact_commands.snap index 1b5e7070af..2514fd50eb 100644 --- a/rust/kcl-lib/tests/kcl_samples/helical-gear/artifact_commands.snap +++ b/rust/kcl-lib/tests/kcl_samples/helical-gear/artifact_commands.snap @@ -334,7 +334,7 @@ description: Artifact commands helical-gear.kcl "segment": { "type": "line", "end": { - "x": -5.816564508980187, + "x": -5.816564508980192, "y": 18.856838998639372, "z": 0.0 }, @@ -507,7 +507,7 @@ description: Artifact commands helical-gear.kcl "segment": { "type": "line", "end": { - "x": -0.603024957692658, + "x": -0.6030249576926529, "y": 22.992093443190416, "z": 0.0 }, @@ -715,7 +715,7 @@ description: Artifact commands helical-gear.kcl "segment": { "type": "line", "end": { - "x": 1.8787542118590292, + "x": 1.8787542118590241, "y": 22.923138585530168, "z": 0.0 }, @@ -750,7 +750,7 @@ description: Artifact commands helical-gear.kcl "segment": { "type": "line", "end": { - "x": -1.6644342460226098, + "x": -1.664434246022614, "y": 19.66322604122736, "z": 0.0 }, diff --git a/rust/kcl-lib/tests/kcl_samples/helical-gear/ast.snap b/rust/kcl-lib/tests/kcl_samples/helical-gear/ast.snap index 04f8395d94..b4c5d3d814 100644 --- a/rust/kcl-lib/tests/kcl_samples/helical-gear/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/helical-gear/ast.snap @@ -1081,13 +1081,13 @@ description: Result of parsing helical-gear.kcl "right": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1107,13 +1107,13 @@ description: Result of parsing helical-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1180,13 +1180,13 @@ description: Result of parsing helical-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1920,13 +1920,13 @@ description: Result of parsing helical-gear.kcl "left": { "commentStart": 0, "end": 0, - "raw": "160", + "raw": "160deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 160.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -2420,13 +2420,13 @@ description: Result of parsing helical-gear.kcl "left": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -2648,13 +2648,13 @@ description: Result of parsing helical-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3414,13 +3414,13 @@ description: Result of parsing helical-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "20", + "raw": "20deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 20.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3436,13 +3436,13 @@ description: Result of parsing helical-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "35", + "raw": "35deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 35.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/helical-gear/ops.snap b/rust/kcl-lib/tests/kcl_samples/helical-gear/ops.snap index 54168cea4c..2f480af5c5 100644 --- a/rust/kcl-lib/tests/kcl_samples/helical-gear/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/helical-gear/ops.snap @@ -33,13 +33,9 @@ description: Operations executed helical-gear.kcl "type": "Number", "value": 35.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -81,13 +77,9 @@ description: Operations executed helical-gear.kcl "type": "Number", "value": 20.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -1132,7 +1124,7 @@ description: Operations executed helical-gear.kcl "angle": { "value": { "type": "Number", - "value": 1.8699956271367815, + "value": 1.8699956271367817, "ty": { "type": "Known", "type": "Angle", @@ -1214,7 +1206,7 @@ description: Operations executed helical-gear.kcl "name": "x", "value": { "type": "Number", - "value": -5.816564508980187, + "value": -5.816564508980192, "ty": { "type": "Default", "len": { @@ -1718,7 +1710,7 @@ description: Operations executed helical-gear.kcl "angle": { "value": { "type": "Number", - "value": 1.5970178079464912, + "value": 1.597017807946491, "ty": { "type": "Known", "type": "Angle", @@ -1800,7 +1792,7 @@ description: Operations executed helical-gear.kcl "name": "x", "value": { "type": "Number", - "value": -0.603024957692658, + "value": -0.6030249576926529, "ty": { "type": "Default", "len": { @@ -2439,7 +2431,7 @@ description: Operations executed helical-gear.kcl "angle": { "value": { "type": "Number", - "value": 1.4890202476337995, + "value": 1.4890202476337997, "ty": { "type": "Known", "type": "Angle", @@ -2521,7 +2513,7 @@ description: Operations executed helical-gear.kcl "name": "x", "value": { "type": "Number", - "value": 1.8787542118590292, + "value": 1.8787542118590241, "ty": { "type": "Default", "len": { @@ -2574,7 +2566,7 @@ description: Operations executed helical-gear.kcl "angle": { "value": { "type": "Number", - "value": 1.655242081157069, + "value": 1.6552420811570692, "ty": { "type": "Known", "type": "Angle", @@ -2656,7 +2648,7 @@ description: Operations executed helical-gear.kcl "name": "x", "value": { "type": "Number", - "value": -1.6644342460226098, + "value": -1.664434246022614, "ty": { "type": "Default", "len": { diff --git a/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/artifact_commands.snap b/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/artifact_commands.snap index 2440021fed..8c86d32164 100644 --- a/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/artifact_commands.snap +++ b/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/artifact_commands.snap @@ -1545,7 +1545,7 @@ description: Artifact commands helical-planetary-gearset.kcl "segment": { "type": "line", "end": { - "x": -1.2721503422803828, + "x": -1.2721503422803806, "y": 10.422650023225183, "z": 0.0 }, @@ -1753,7 +1753,7 @@ description: Artifact commands helical-planetary-gearset.kcl "segment": { "type": "line", "end": { - "x": -0.09232333396144166, + "x": -0.09232333396144399, "y": 10.499594106536035, "z": 0.0 }, @@ -1788,8 +1788,8 @@ description: Artifact commands helical-planetary-gearset.kcl "segment": { "type": "line", "end": { - "x": -2.5780166821928425, - "y": 8.343452972068697, + "x": -2.5780166821928443, + "y": 8.343452972068695, "z": 0.0 }, "relative": false @@ -2388,8 +2388,8 @@ description: Artifact commands helical-planetary-gearset.kcl "segment": { "type": "line", "end": { - "x": -3.5408417166794406, - "y": 9.884960290128767, + "x": -3.540841716679438, + "y": 9.884960290128769, "z": 0.0 }, "relative": false @@ -2423,8 +2423,8 @@ description: Artifact commands helical-planetary-gearset.kcl "segment": { "type": "line", "end": { - "x": -5.17899041761511, - "y": 7.031175987346457, + "x": -5.178990417615113, + "y": 7.0311759873464545, "z": 0.0 }, "relative": false diff --git a/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ast.snap b/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ast.snap index d869f4c1d5..fecd5f779a 100644 --- a/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ast.snap @@ -1081,13 +1081,13 @@ description: Result of parsing helical-planetary-gearset.kcl "right": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1107,13 +1107,13 @@ description: Result of parsing helical-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1180,13 +1180,13 @@ description: Result of parsing helical-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1920,13 +1920,13 @@ description: Result of parsing helical-planetary-gearset.kcl "left": { "commentStart": 0, "end": 0, - "raw": "160", + "raw": "160deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 160.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -2420,13 +2420,13 @@ description: Result of parsing helical-planetary-gearset.kcl "left": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -2648,13 +2648,13 @@ description: Result of parsing helical-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -4283,13 +4283,13 @@ description: Result of parsing helical-planetary-gearset.kcl "left": { "commentStart": 0, "end": 0, - "raw": "200", + "raw": "200deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 200.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -5011,13 +5011,13 @@ description: Result of parsing helical-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6029,13 +6029,13 @@ description: Result of parsing helical-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "14", + "raw": "14deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 14.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6052,13 +6052,13 @@ description: Result of parsing helical-planetary-gearset.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "25", + "raw": "25deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 25.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6184,13 +6184,13 @@ description: Result of parsing helical-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "14", + "raw": "14deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 14.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6206,13 +6206,13 @@ description: Result of parsing helical-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "25", + "raw": "25deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 25.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6371,13 +6371,13 @@ description: Result of parsing helical-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "14", + "raw": "14deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 14.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6394,13 +6394,13 @@ description: Result of parsing helical-planetary-gearset.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "25", + "raw": "25deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 25.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6733,13 +6733,13 @@ description: Result of parsing helical-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ops.snap b/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ops.snap index 25aa1e4b32..ab16d5f4fc 100644 --- a/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/helical-planetary-gearset/ops.snap @@ -33,13 +33,9 @@ description: Operations executed helical-planetary-gearset.kcl "type": "Number", "value": -25.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -81,13 +77,9 @@ description: Operations executed helical-planetary-gearset.kcl "type": "Number", "value": 14.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -2993,13 +2985,9 @@ description: Operations executed helical-planetary-gearset.kcl "type": "Number", "value": 25.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -3041,13 +3029,9 @@ description: Operations executed helical-planetary-gearset.kcl "type": "Number", "value": 14.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -4678,7 +4662,7 @@ description: Operations executed helical-planetary-gearset.kcl "angle": { "value": { "type": "Number", - "value": 1.6922518897698449, + "value": 1.6922518897698446, "ty": { "type": "Known", "type": "Angle", @@ -4760,7 +4744,7 @@ description: Operations executed helical-planetary-gearset.kcl "name": "x", "value": { "type": "Number", - "value": -1.2721503422803828, + "value": -1.2721503422803806, "ty": { "type": "Default", "len": { @@ -5399,7 +5383,7 @@ description: Operations executed helical-planetary-gearset.kcl "angle": { "value": { "type": "Number", - "value": 1.5795891385675427, + "value": 1.579589138567543, "ty": { "type": "Known", "type": "Angle", @@ -5481,7 +5465,7 @@ description: Operations executed helical-planetary-gearset.kcl "name": "x", "value": { "type": "Number", - "value": -0.09232333396144166, + "value": -0.09232333396144399, "ty": { "type": "Default", "len": { @@ -5534,7 +5518,7 @@ description: Operations executed helical-planetary-gearset.kcl "angle": { "value": { "type": "Number", - "value": 1.870477347233264, + "value": 1.8704773472332643, "ty": { "type": "Known", "type": "Angle", @@ -5616,7 +5600,7 @@ description: Operations executed helical-planetary-gearset.kcl "name": "x", "value": { "type": "Number", - "value": -2.5780166821928425, + "value": -2.5780166821928443, "ty": { "type": "Default", "len": { @@ -5638,7 +5622,7 @@ description: Operations executed helical-planetary-gearset.kcl "name": "y", "value": { "type": "Number", - "value": 8.343452972068697, + "value": 8.343452972068695, "ty": { "type": "Default", "len": { @@ -5854,13 +5838,9 @@ description: Operations executed helical-planetary-gearset.kcl "type": "Number", "value": -25.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -5902,13 +5882,9 @@ description: Operations executed helical-planetary-gearset.kcl "type": "Number", "value": 14.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -7543,7 +7519,7 @@ description: Operations executed helical-planetary-gearset.kcl "angle": { "value": { "type": "Number", - "value": 1.914761897685103, + "value": 1.9147618976851029, "ty": { "type": "Known", "type": "Angle", @@ -7625,7 +7601,7 @@ description: Operations executed helical-planetary-gearset.kcl "name": "x", "value": { "type": "Number", - "value": -3.5408417166794406, + "value": -3.540841716679438, "ty": { "type": "Default", "len": { @@ -7647,7 +7623,7 @@ description: Operations executed helical-planetary-gearset.kcl "name": "y", "value": { "type": "Number", - "value": 9.884960290128767, + "value": 9.884960290128769, "ty": { "type": "Default", "len": { @@ -7678,7 +7654,7 @@ description: Operations executed helical-planetary-gearset.kcl "angle": { "value": { "type": "Number", - "value": 2.2056501063508245, + "value": 2.205650106350825, "ty": { "type": "Known", "type": "Angle", @@ -7760,7 +7736,7 @@ description: Operations executed helical-planetary-gearset.kcl "name": "x", "value": { "type": "Number", - "value": -5.17899041761511, + "value": -5.178990417615113, "ty": { "type": "Default", "len": { @@ -7782,7 +7758,7 @@ description: Operations executed helical-planetary-gearset.kcl "name": "y", "value": { "type": "Number", - "value": 7.031175987346457, + "value": 7.0311759873464545, "ty": { "type": "Default", "len": { diff --git a/rust/kcl-lib/tests/kcl_samples/helium-tank/ast.snap b/rust/kcl-lib/tests/kcl_samples/helium-tank/ast.snap index 91e8dcc956..ba7b2eae56 100644 --- a/rust/kcl-lib/tests/kcl_samples/helium-tank/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/helium-tank/ast.snap @@ -491,13 +491,13 @@ description: Result of parsing helium-tank.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "110", + "raw": "110deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 110.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -567,13 +567,13 @@ description: Result of parsing helium-tank.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "40", + "raw": "40deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 40.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -637,13 +637,13 @@ description: Result of parsing helium-tank.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "110", + "raw": "110deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 110.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -713,13 +713,13 @@ description: Result of parsing helium-tank.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -783,13 +783,13 @@ description: Result of parsing helium-tank.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -1052,13 +1052,13 @@ description: Result of parsing helium-tank.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -1383,13 +1383,13 @@ description: Result of parsing helium-tank.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1549,13 +1549,13 @@ description: Result of parsing helium-tank.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2010,13 +2010,13 @@ description: Result of parsing helium-tank.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "220", + "raw": "220deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 220.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3481,13 +3481,13 @@ description: Result of parsing helium-tank.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "35", + "raw": "35deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 35.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3599,13 +3599,13 @@ description: Result of parsing helium-tank.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "135", + "raw": "135deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 135.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -3837,13 +3837,13 @@ description: Result of parsing helium-tank.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "80", + "raw": "80deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 80.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4427,13 +4427,13 @@ description: Result of parsing helium-tank.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "35", + "raw": "35deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 35.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -4521,13 +4521,13 @@ description: Result of parsing helium-tank.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "135", + "raw": "135deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 135.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4735,13 +4735,13 @@ description: Result of parsing helium-tank.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "80", + "raw": "80deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 80.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/helium-tank/ops.snap b/rust/kcl-lib/tests/kcl_samples/helium-tank/ops.snap index 7c9d1affbc..29099f7d78 100644 --- a/rust/kcl-lib/tests/kcl_samples/helium-tank/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/helium-tank/ops.snap @@ -247,13 +247,9 @@ description: Operations executed helium-tank.kcl "type": "Number", "value": 220.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/helium-tank/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/helium-tank/program_memory.snap index 9c3e6edbe5..e028b47495 100644 --- a/rust/kcl-lib/tests/kcl_samples/helium-tank/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/helium-tank/program_memory.snap @@ -85,9 +85,9 @@ description: Variables in memory after executing helium-tank.kcl 3.6861841993004627 ], "tag": { - "commentStart": 3388, - "end": 3394, - "start": 3388, + "commentStart": 3430, + "end": 3436, + "start": 3430, "type": "TagDeclarator", "value": "seg04" }, @@ -134,9 +134,9 @@ description: Variables in memory after executing helium-tank.kcl 5.200565651519425 ], "tag": { - "commentStart": 3521, - "end": 3527, - "start": 3521, + "commentStart": 3566, + "end": 3572, + "start": 3566, "type": "TagDeclarator", "value": "seg05" }, @@ -325,9 +325,9 @@ description: Variables in memory after executing helium-tank.kcl 3.7885782048365866 ], "tag": { - "commentStart": 2738, - "end": 2744, - "start": 2738, + "commentStart": 2771, + "end": 2777, + "start": 2771, "type": "TagDeclarator", "value": "seg06" }, @@ -374,9 +374,9 @@ description: Variables in memory after executing helium-tank.kcl 5.1788596293110585 ], "tag": { - "commentStart": 2887, - "end": 2893, - "start": 2887, + "commentStart": 2923, + "end": 2929, + "start": 2923, "type": "TagDeclarator", "value": "seg07" }, @@ -562,9 +562,9 @@ description: Variables in memory after executing helium-tank.kcl 3.6861841993004627 ], "tag": { - "commentStart": 3388, - "end": 3394, - "start": 3388, + "commentStart": 3430, + "end": 3436, + "start": 3430, "type": "TagDeclarator", "value": "seg04" }, @@ -611,9 +611,9 @@ description: Variables in memory after executing helium-tank.kcl 5.200565651519425 ], "tag": { - "commentStart": 3521, - "end": 3527, - "start": 3521, + "commentStart": 3566, + "end": 3572, + "start": 3566, "type": "TagDeclarator", "value": "seg05" }, @@ -807,9 +807,9 @@ description: Variables in memory after executing helium-tank.kcl 3.6861841993004627 ], "tag": { - "commentStart": 3388, - "end": 3394, - "start": 3388, + "commentStart": 3430, + "end": 3436, + "start": 3430, "type": "TagDeclarator", "value": "seg04" }, @@ -856,9 +856,9 @@ description: Variables in memory after executing helium-tank.kcl 5.200565651519425 ], "tag": { - "commentStart": 3521, - "end": 3527, - "start": 3521, + "commentStart": 3566, + "end": 3572, + "start": 3566, "type": "TagDeclarator", "value": "seg05" }, @@ -1459,9 +1459,9 @@ description: Variables in memory after executing helium-tank.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 858, + "end": 864, + "start": 858, "type": "TagDeclarator", "value": "seg01" }, @@ -1472,9 +1472,9 @@ description: Variables in memory after executing helium-tank.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 922, - "end": 928, - "start": 922, + "commentStart": 937, + "end": 943, + "start": 937, "type": "TagDeclarator", "value": "seg09" }, @@ -1485,9 +1485,9 @@ description: Variables in memory after executing helium-tank.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 980, - "end": 986, - "start": 980, + "commentStart": 998, + "end": 1004, + "start": 998, "type": "TagDeclarator", "value": "seg02" }, @@ -1498,9 +1498,9 @@ description: Variables in memory after executing helium-tank.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1061, - "end": 1067, - "start": 1061, + "commentStart": 1079, + "end": 1085, + "start": 1079, "type": "TagDeclarator", "value": "seg08" }, @@ -1716,9 +1716,9 @@ description: Variables in memory after executing helium-tank.kcl 28.521171799344053 ], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 858, + "end": 864, + "start": 858, "type": "TagDeclarator", "value": "seg01" }, @@ -1741,9 +1741,9 @@ description: Variables in memory after executing helium-tank.kcl 24.746171799344033 ], "tag": { - "commentStart": 922, - "end": 928, - "start": 922, + "commentStart": 937, + "end": 943, + "start": 937, "type": "TagDeclarator", "value": "seg09" }, @@ -1771,9 +1771,9 @@ description: Variables in memory after executing helium-tank.kcl 1.5 ], "tag": { - "commentStart": 980, - "end": 986, - "start": 980, + "commentStart": 998, + "end": 1004, + "start": 998, "type": "TagDeclarator", "value": "seg02" }, @@ -1796,9 +1796,9 @@ description: Variables in memory after executing helium-tank.kcl -0.499999999999992 ], "tag": { - "commentStart": 1061, - "end": 1067, - "start": 1061, + "commentStart": 1079, + "end": 1085, + "start": 1079, "type": "TagDeclarator", "value": "seg08" }, @@ -2229,9 +2229,9 @@ description: Variables in memory after executing helium-tank.kcl 28.521171799344053 ], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 858, + "end": 864, + "start": 858, "type": "TagDeclarator", "value": "seg01" }, @@ -2254,9 +2254,9 @@ description: Variables in memory after executing helium-tank.kcl 24.746171799344033 ], "tag": { - "commentStart": 922, - "end": 928, - "start": 922, + "commentStart": 937, + "end": 943, + "start": 937, "type": "TagDeclarator", "value": "seg09" }, @@ -2284,9 +2284,9 @@ description: Variables in memory after executing helium-tank.kcl 1.5 ], "tag": { - "commentStart": 980, - "end": 986, - "start": 980, + "commentStart": 998, + "end": 1004, + "start": 998, "type": "TagDeclarator", "value": "seg02" }, @@ -2309,9 +2309,9 @@ description: Variables in memory after executing helium-tank.kcl -0.499999999999992 ], "tag": { - "commentStart": 1061, - "end": 1067, - "start": 1061, + "commentStart": 1079, + "end": 1085, + "start": 1079, "type": "TagDeclarator", "value": "seg08" }, @@ -2591,9 +2591,9 @@ description: Variables in memory after executing helium-tank.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1835, - "end": 1841, - "start": 1835, + "commentStart": 1862, + "end": 1868, + "start": 1862, "type": "TagDeclarator", "value": "seg03" }, @@ -2604,9 +2604,9 @@ description: Variables in memory after executing helium-tank.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1879, - "end": 1889, - "start": 1879, + "commentStart": 1906, + "end": 1916, + "start": 1906, "type": "TagDeclarator", "value": "capEnd001" }, @@ -2633,9 +2633,9 @@ description: Variables in memory after executing helium-tank.kcl ], "radius": 0.6578947368421053, "tag": { - "commentStart": 1835, - "end": 1841, - "start": 1835, + "commentStart": 1862, + "end": 1868, + "start": 1862, "type": "TagDeclarator", "value": "seg03" }, @@ -2754,9 +2754,9 @@ description: Variables in memory after executing helium-tank.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1835, - "end": 1841, - "start": 1835, + "commentStart": 1862, + "end": 1868, + "start": 1862, "type": "TagDeclarator", "value": "seg03" }, @@ -2767,9 +2767,9 @@ description: Variables in memory after executing helium-tank.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1879, - "end": 1889, - "start": 1879, + "commentStart": 1906, + "end": 1916, + "start": 1906, "type": "TagDeclarator", "value": "capEnd001" }, @@ -2796,9 +2796,9 @@ description: Variables in memory after executing helium-tank.kcl ], "radius": 0.6578947368421053, "tag": { - "commentStart": 1835, - "end": 1841, - "start": 1835, + "commentStart": 1862, + "end": 1868, + "start": 1862, "type": "TagDeclarator", "value": "seg03" }, diff --git a/rust/kcl-lib/tests/kcl_samples/herringbone-gear/artifact_commands.snap b/rust/kcl-lib/tests/kcl_samples/herringbone-gear/artifact_commands.snap index 0900e4fefb..8e99976562 100644 --- a/rust/kcl-lib/tests/kcl_samples/herringbone-gear/artifact_commands.snap +++ b/rust/kcl-lib/tests/kcl_samples/herringbone-gear/artifact_commands.snap @@ -157,8 +157,8 @@ description: Artifact commands herringbone-gear.kcl "segment": { "type": "line", "end": { - "x": -3.0162841835514778, - "y": 11.747651272325072, + "x": -3.016284183551481, + "y": 11.74765127232507, "z": 0.0 }, "relative": false @@ -415,8 +415,8 @@ description: Artifact commands herringbone-gear.kcl "segment": { "type": "line", "end": { - "x": 1.8779014305491148, - "y": 13.368750361089909, + "x": 1.877901430549112, + "y": 13.36875036108991, "z": 0.0 }, "relative": false @@ -450,7 +450,7 @@ description: Artifact commands herringbone-gear.kcl "segment": { "type": "line", "end": { - "x": -0.0008486680761613712, + "x": -0.0008486680761640642, "y": 12.128696548758493, "z": 0.0 }, diff --git a/rust/kcl-lib/tests/kcl_samples/herringbone-gear/ast.snap b/rust/kcl-lib/tests/kcl_samples/herringbone-gear/ast.snap index d201a66254..65a8d9720d 100644 --- a/rust/kcl-lib/tests/kcl_samples/herringbone-gear/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/herringbone-gear/ast.snap @@ -935,13 +935,13 @@ description: Result of parsing herringbone-gear.kcl "left": { "commentStart": 0, "end": 0, - "raw": "160", + "raw": "160deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 160.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -1435,13 +1435,13 @@ description: Result of parsing herringbone-gear.kcl "left": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -1663,13 +1663,13 @@ description: Result of parsing herringbone-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2605,13 +2605,13 @@ description: Result of parsing herringbone-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "14", + "raw": "14deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 14.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2627,13 +2627,13 @@ description: Result of parsing herringbone-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "40", + "raw": "40deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 40.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/herringbone-gear/ops.snap b/rust/kcl-lib/tests/kcl_samples/herringbone-gear/ops.snap index b86d9b8f39..7caf3ed2ab 100644 --- a/rust/kcl-lib/tests/kcl_samples/herringbone-gear/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/herringbone-gear/ops.snap @@ -33,13 +33,9 @@ description: Operations executed herringbone-gear.kcl "type": "Number", "value": 40.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -81,13 +77,9 @@ description: Operations executed herringbone-gear.kcl "type": "Number", "value": 14.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -862,7 +854,7 @@ description: Operations executed herringbone-gear.kcl "angle": { "value": { "type": "Number", - "value": 1.82212373908208, + "value": 1.8221237390820801, "ty": { "type": "Known", "type": "Angle", @@ -944,7 +936,7 @@ description: Operations executed herringbone-gear.kcl "name": "x", "value": { "type": "Number", - "value": -3.0162841835514778, + "value": -3.016284183551481, "ty": { "type": "Default", "len": { @@ -966,7 +958,7 @@ description: Operations executed herringbone-gear.kcl "name": "y", "value": { "type": "Number", - "value": 11.747651272325072, + "value": 11.74765127232507, "ty": { "type": "Default", "len": { @@ -1448,7 +1440,7 @@ description: Operations executed herringbone-gear.kcl "angle": { "value": { "type": "Number", - "value": 1.4312399585462943, + "value": 1.4312399585462945, "ty": { "type": "Known", "type": "Angle", @@ -1530,7 +1522,7 @@ description: Operations executed herringbone-gear.kcl "name": "x", "value": { "type": "Number", - "value": 1.8779014305491148, + "value": 1.877901430549112, "ty": { "type": "Default", "len": { @@ -1552,7 +1544,7 @@ description: Operations executed herringbone-gear.kcl "name": "y", "value": { "type": "Number", - "value": 13.368750361089909, + "value": 13.36875036108991, "ty": { "type": "Default", "len": { @@ -1583,7 +1575,7 @@ description: Operations executed herringbone-gear.kcl "angle": { "value": { "type": "Number", - "value": 1.5708662987058406, + "value": 1.5708662987058408, "ty": { "type": "Known", "type": "Angle", @@ -1665,7 +1657,7 @@ description: Operations executed herringbone-gear.kcl "name": "x", "value": { "type": "Number", - "value": -0.0008486680761613712, + "value": -0.0008486680761640642, "ty": { "type": "Default", "len": { diff --git a/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/artifact_commands.snap b/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/artifact_commands.snap index 70f1a1e699..f032914883 100644 --- a/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/artifact_commands.snap +++ b/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/artifact_commands.snap @@ -122,7 +122,7 @@ description: Artifact commands herringbone-planetary-gearset.kcl "segment": { "type": "line", "end": { - "x": -2.9769208657835278, + "x": -2.9769208657835176, "y": 44.901424723040385, "z": 0.0 }, @@ -157,7 +157,7 @@ description: Artifact commands herringbone-planetary-gearset.kcl "segment": { "type": "line", "end": { - "x": -4.563472835506928, + "x": -4.563472835506937, "y": 41.96043978526968, "z": 0.0 }, @@ -454,7 +454,7 @@ description: Artifact commands herringbone-planetary-gearset.kcl "segment": { "type": "line", "end": { - "x": -5.765843883743658, + "x": -5.765843883743648, "y": 44.62908294272128, "z": 0.0 }, @@ -489,7 +489,7 @@ description: Artifact commands herringbone-planetary-gearset.kcl "segment": { "type": "line", "end": { - "x": -7.166270925682343, + "x": -7.166270925682353, "y": 41.595052017197574, "z": 0.0 }, @@ -1169,7 +1169,7 @@ description: Artifact commands herringbone-planetary-gearset.kcl "segment": { "type": "line", "end": { - "x": 0.49017318473970817, + "x": 0.4901731847397115, "y": 14.991988869024754, "z": 0.0 }, @@ -1204,7 +1204,7 @@ description: Artifact commands herringbone-planetary-gearset.kcl "segment": { "type": "line", "end": { - "x": -2.1029602755543437, + "x": -2.102960275554341, "y": 12.92908184979545, "z": 0.0 }, diff --git a/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ast.snap b/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ast.snap index 63325ef014..400099f69c 100644 --- a/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ast.snap @@ -935,13 +935,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "left": { "commentStart": 0, "end": 0, - "raw": "160", + "raw": "160deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 160.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -1435,13 +1435,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "left": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -1663,13 +1663,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3474,13 +3474,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "left": { "commentStart": 0, "end": 0, - "raw": "220", + "raw": "220deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 220.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -3974,13 +3974,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "left": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -4202,13 +4202,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -5304,13 +5304,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "14", + "raw": "14deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 14.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -5327,13 +5327,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "35", + "raw": "35deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 35.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5459,13 +5459,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "14", + "raw": "14deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 14.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -5481,13 +5481,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "35", + "raw": "35deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 35.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -5646,13 +5646,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "14", + "raw": "14deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 14.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -5669,13 +5669,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "35", + "raw": "35deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 35.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5968,13 +5968,13 @@ description: Result of parsing herringbone-planetary-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ops.snap b/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ops.snap index ceab2280ac..0496ae3081 100644 --- a/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/herringbone-planetary-gearset/ops.snap @@ -33,13 +33,9 @@ description: Operations executed herringbone-planetary-gearset.kcl "type": "Number", "value": -35.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -81,13 +77,9 @@ description: Operations executed herringbone-planetary-gearset.kcl "type": "Number", "value": 14.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -727,7 +719,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "angle": { "value": { "type": "Number", - "value": 1.6369984708360608, + "value": 1.6369984708360605, "ty": { "type": "Known", "type": "Angle", @@ -809,7 +801,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "name": "x", "value": { "type": "Number", - "value": -2.9769208657835278, + "value": -2.9769208657835176, "ty": { "type": "Default", "len": { @@ -862,7 +854,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "angle": { "value": { "type": "Number", - "value": 1.6791271079531653, + "value": 1.6791271079531656, "ty": { "type": "Known", "type": "Angle", @@ -944,7 +936,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "name": "x", "value": { "type": "Number", - "value": -4.563472835506928, + "value": -4.563472835506937, "ty": { "type": "Default", "len": { @@ -1582,7 +1574,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "angle": { "value": { "type": "Number", - "value": 1.6992793968141517, + "value": 1.6992793968141515, "ty": { "type": "Known", "type": "Angle", @@ -1664,7 +1656,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "name": "x", "value": { "type": "Number", - "value": -5.765843883743658, + "value": -5.765843883743648, "ty": { "type": "Default", "len": { @@ -1717,7 +1709,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "angle": { "value": { "type": "Number", - "value": 1.7414080339312563, + "value": 1.7414080339312565, "ty": { "type": "Known", "type": "Angle", @@ -1799,7 +1791,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "name": "x", "value": { "type": "Number", - "value": -7.166270925682343, + "value": -7.166270925682353, "ty": { "type": "Default", "len": { @@ -2259,13 +2251,9 @@ description: Operations executed herringbone-planetary-gearset.kcl "type": "Number", "value": 35.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -2307,13 +2295,9 @@ description: Operations executed herringbone-planetary-gearset.kcl "type": "Number", "value": 14.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -3674,7 +3658,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "angle": { "value": { "type": "Number", - "value": 1.5381122956927422, + "value": 1.538112295692742, "ty": { "type": "Known", "type": "Angle", @@ -3756,7 +3740,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "name": "x", "value": { "type": "Number", - "value": 0.49017318473970817, + "value": 0.4901731847397115, "ty": { "type": "Default", "len": { @@ -3809,7 +3793,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "angle": { "value": { "type": "Number", - "value": 1.7320377681365566, + "value": 1.7320377681365564, "ty": { "type": "Known", "type": "Angle", @@ -3891,7 +3875,7 @@ description: Operations executed herringbone-planetary-gearset.kcl "name": "x", "value": { "type": "Number", - "value": -2.1029602755543437, + "value": -2.102960275554341, "ty": { "type": "Default", "len": { @@ -4250,13 +4234,9 @@ description: Operations executed herringbone-planetary-gearset.kcl "type": "Number", "value": -35.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -4298,13 +4278,9 @@ description: Operations executed herringbone-planetary-gearset.kcl "type": "Number", "value": 14.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/i-beam/ast.snap b/rust/kcl-lib/tests/kcl_samples/i-beam/ast.snap index 9b7e9e326b..527aefb37d 100644 --- a/rust/kcl-lib/tests/kcl_samples/i-beam/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/i-beam/ast.snap @@ -623,13 +623,13 @@ description: Result of parsing i-beam.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } } diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap b/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap index f576aae377..cc0556e067 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap @@ -907,13 +907,13 @@ description: Result of parsing keyboard.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "7", + "raw": "7deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 7.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2871,13 +2871,13 @@ description: Result of parsing keyboard.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2893,13 +2893,13 @@ description: Result of parsing keyboard.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "270", + "raw": "270deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 270.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3095,13 +3095,13 @@ description: Result of parsing keyboard.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } } @@ -3184,13 +3184,13 @@ description: Result of parsing keyboard.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -3321,13 +3321,13 @@ description: Result of parsing keyboard.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } } @@ -3537,13 +3537,13 @@ description: Result of parsing keyboard.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } } @@ -9472,13 +9472,13 @@ description: Result of parsing keyboard.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } } }, @@ -9957,13 +9957,13 @@ description: Result of parsing keyboard.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } } }, @@ -10244,13 +10244,13 @@ description: Result of parsing keyboard.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } } }, @@ -11206,26 +11206,26 @@ description: Result of parsing keyboard.kcl "left": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } }, "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "6", + "raw": "6deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 6.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -11251,26 +11251,26 @@ description: Result of parsing keyboard.kcl "left": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "6", + "raw": "6deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 6.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -11281,13 +11281,13 @@ description: Result of parsing keyboard.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -11378,13 +11378,13 @@ description: Result of parsing keyboard.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } } }, @@ -11477,26 +11477,26 @@ description: Result of parsing keyboard.kcl "left": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "11", + "raw": "11deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 11.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -11507,13 +11507,13 @@ description: Result of parsing keyboard.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -11536,26 +11536,26 @@ description: Result of parsing keyboard.kcl "left": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } }, "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "11", + "raw": "11deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 11.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -12057,26 +12057,26 @@ description: Result of parsing keyboard.kcl "left": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } }, "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "6", + "raw": "6deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 6.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -12087,13 +12087,13 @@ description: Result of parsing keyboard.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -12116,26 +12116,26 @@ description: Result of parsing keyboard.kcl "left": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "6", + "raw": "6deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 6.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -12226,13 +12226,13 @@ description: Result of parsing keyboard.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } } }, @@ -12330,26 +12330,26 @@ description: Result of parsing keyboard.kcl "left": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "11", + "raw": "11deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 11.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -12375,26 +12375,26 @@ description: Result of parsing keyboard.kcl "left": { "commentStart": 0, "end": 0, - "raw": "47.15", + "raw": "47.15deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 47.15, - "suffix": "None" + "suffix": "Deg" } }, "operator": "+", "right": { "commentStart": 0, "end": 0, - "raw": "11", + "raw": "11deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 11.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -12405,13 +12405,13 @@ description: Result of parsing keyboard.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/keyboard/program_memory.snap index e26b249560..f7b080dfa8 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/program_memory.snap @@ -487,9 +487,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -500,9 +500,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -513,9 +513,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -561,9 +561,9 @@ description: Variables in memory after executing keyboard.kcl 0.68 ], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -586,9 +586,9 @@ description: Variables in memory after executing keyboard.kcl 1.3990291260903702 ], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -611,9 +611,9 @@ description: Variables in memory after executing keyboard.kcl 0.0 ], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -905,9 +905,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -918,9 +918,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -931,9 +931,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -979,9 +979,9 @@ description: Variables in memory after executing keyboard.kcl 0.68 ], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -1004,9 +1004,9 @@ description: Variables in memory after executing keyboard.kcl 1.3990291260903702 ], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -1029,9 +1029,9 @@ description: Variables in memory after executing keyboard.kcl 0.0 ], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -1323,9 +1323,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -1336,9 +1336,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -1349,9 +1349,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -1397,9 +1397,9 @@ description: Variables in memory after executing keyboard.kcl 0.68 ], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -1422,9 +1422,9 @@ description: Variables in memory after executing keyboard.kcl 1.3990291260903702 ], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -1447,9 +1447,9 @@ description: Variables in memory after executing keyboard.kcl 0.0 ], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -1741,9 +1741,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -1754,9 +1754,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -1767,9 +1767,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -1815,9 +1815,9 @@ description: Variables in memory after executing keyboard.kcl 0.68 ], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -1840,9 +1840,9 @@ description: Variables in memory after executing keyboard.kcl 1.3990291260903702 ], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -1865,9 +1865,9 @@ description: Variables in memory after executing keyboard.kcl 0.0 ], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -2206,9 +2206,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -2219,9 +2219,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -2232,9 +2232,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -2280,9 +2280,9 @@ description: Variables in memory after executing keyboard.kcl 0.68 ], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -2305,9 +2305,9 @@ description: Variables in memory after executing keyboard.kcl 1.3990291260903702 ], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -2330,9 +2330,9 @@ description: Variables in memory after executing keyboard.kcl 0.0 ], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -2565,9 +2565,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -2578,9 +2578,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -2591,9 +2591,9 @@ description: Variables in memory after executing keyboard.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -2639,9 +2639,9 @@ description: Variables in memory after executing keyboard.kcl 0.68 ], "tag": { - "commentStart": 718, - "end": 724, - "start": 718, + "commentStart": 721, + "end": 727, + "start": 721, "type": "TagDeclarator", "value": "seg02" }, @@ -2664,9 +2664,9 @@ description: Variables in memory after executing keyboard.kcl 1.3990291260903702 ], "tag": { - "commentStart": 767, - "end": 773, - "start": 767, + "commentStart": 770, + "end": 776, + "start": 770, "type": "TagDeclarator", "value": "seg03" }, @@ -2689,9 +2689,9 @@ description: Variables in memory after executing keyboard.kcl 0.0 ], "tag": { - "commentStart": 843, - "end": 849, - "start": 843, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, diff --git a/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ast.snap b/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ast.snap index 373b4e7362..7132062c27 100644 --- a/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ast.snap @@ -476,13 +476,13 @@ description: Result of parsing poopy-shoe.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -750,13 +750,13 @@ description: Result of parsing poopy-shoe.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -949,26 +949,26 @@ description: Result of parsing poopy-shoe.kcl "left": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1213,26 +1213,26 @@ description: Result of parsing poopy-shoe.kcl "left": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1355,13 +1355,13 @@ description: Result of parsing poopy-shoe.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1784,13 +1784,13 @@ description: Result of parsing poopy-shoe.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2058,13 +2058,13 @@ description: Result of parsing poopy-shoe.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2257,26 +2257,26 @@ description: Result of parsing poopy-shoe.kcl "left": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -2521,26 +2521,26 @@ description: Result of parsing poopy-shoe.kcl "left": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -3238,13 +3238,13 @@ description: Result of parsing poopy-shoe.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3311,13 +3311,13 @@ description: Result of parsing poopy-shoe.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3814,26 +3814,26 @@ description: Result of parsing poopy-shoe.kcl "left": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", "right": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -4019,13 +4019,13 @@ description: Result of parsing poopy-shoe.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ops.snap b/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ops.snap index f9e2bfc4eb..993f26d236 100644 --- a/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/poopy-shoe/ops.snap @@ -284,13 +284,9 @@ description: Operations executed poopy-shoe.kcl "type": "Number", "value": 90.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/poopy-shoe/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/poopy-shoe/program_memory.snap index cf0ca4a815..597aadb23d 100644 --- a/rust/kcl-lib/tests/kcl_samples/poopy-shoe/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/poopy-shoe/program_memory.snap @@ -498,9 +498,9 @@ description: Variables in memory after executing poopy-shoe.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 519, - "end": 525, - "start": 519, + "commentStart": 522, + "end": 528, + "start": 522, "type": "TagDeclarator", "value": "seg01" }, @@ -617,9 +617,9 @@ description: Variables in memory after executing poopy-shoe.kcl 0.0 ], "tag": { - "commentStart": 519, - "end": 525, - "start": 519, + "commentStart": 522, + "end": 528, + "start": 522, "type": "TagDeclarator", "value": "seg01" }, @@ -966,9 +966,9 @@ description: Variables in memory after executing poopy-shoe.kcl 0.0 ], "tag": { - "commentStart": 519, - "end": 525, - "start": 519, + "commentStart": 522, + "end": 528, + "start": 522, "type": "TagDeclarator", "value": "seg01" }, @@ -1271,9 +1271,9 @@ description: Variables in memory after executing poopy-shoe.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1286, - "end": 1292, - "start": 1286, + "commentStart": 1310, + "end": 1316, + "start": 1310, "type": "TagDeclarator", "value": "seg02" }, @@ -1390,9 +1390,9 @@ description: Variables in memory after executing poopy-shoe.kcl 0.0 ], "tag": { - "commentStart": 1286, - "end": 1292, - "start": 1286, + "commentStart": 1310, + "end": 1316, + "start": 1310, "type": "TagDeclarator", "value": "seg02" }, @@ -1932,9 +1932,9 @@ description: Variables in memory after executing poopy-shoe.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2912, - "end": 2918, - "start": 2912, + "commentStart": 2966, + "end": 2972, + "start": 2966, "type": "TagDeclarator", "value": "seg04" }, @@ -2174,9 +2174,9 @@ description: Variables in memory after executing poopy-shoe.kcl 0.0 ], "tag": { - "commentStart": 2912, - "end": 2918, - "start": 2912, + "commentStart": 2966, + "end": 2972, + "start": 2966, "type": "TagDeclarator", "value": "seg04" }, @@ -2228,9 +2228,9 @@ description: Variables in memory after executing poopy-shoe.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1286, - "end": 1292, - "start": 1286, + "commentStart": 1310, + "end": 1316, + "start": 1310, "type": "TagDeclarator", "value": "seg02" }, @@ -2347,9 +2347,9 @@ description: Variables in memory after executing poopy-shoe.kcl 0.0 ], "tag": { - "commentStart": 1286, - "end": 1292, - "start": 1286, + "commentStart": 1310, + "end": 1316, + "start": 1310, "type": "TagDeclarator", "value": "seg02" }, @@ -2723,9 +2723,9 @@ description: Variables in memory after executing poopy-shoe.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3517, - "end": 3523, - "start": 3517, + "commentStart": 3571, + "end": 3577, + "start": 3571, "type": "TagDeclarator", "value": "seg03" }, @@ -2839,9 +2839,9 @@ description: Variables in memory after executing poopy-shoe.kcl 1.0 ], "tag": { - "commentStart": 3517, - "end": 3523, - "start": 3517, + "commentStart": 3571, + "end": 3577, + "start": 3571, "type": "TagDeclarator", "value": "seg03" }, @@ -3119,9 +3119,9 @@ description: Variables in memory after executing poopy-shoe.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3517, - "end": 3523, - "start": 3517, + "commentStart": 3571, + "end": 3577, + "start": 3571, "type": "TagDeclarator", "value": "seg03" }, @@ -3235,9 +3235,9 @@ description: Variables in memory after executing poopy-shoe.kcl 1.0 ], "tag": { - "commentStart": 3517, - "end": 3523, - "start": 3517, + "commentStart": 3571, + "end": 3577, + "start": 3571, "type": "TagDeclarator", "value": "seg03" }, @@ -3600,9 +3600,9 @@ description: Variables in memory after executing poopy-shoe.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2912, - "end": 2918, - "start": 2912, + "commentStart": 2966, + "end": 2972, + "start": 2966, "type": "TagDeclarator", "value": "seg04" }, @@ -3842,9 +3842,9 @@ description: Variables in memory after executing poopy-shoe.kcl 0.0 ], "tag": { - "commentStart": 2912, - "end": 2918, - "start": 2912, + "commentStart": 2966, + "end": 2972, + "start": 2966, "type": "TagDeclarator", "value": "seg04" }, @@ -3896,9 +3896,9 @@ description: Variables in memory after executing poopy-shoe.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1286, - "end": 1292, - "start": 1286, + "commentStart": 1310, + "end": 1316, + "start": 1310, "type": "TagDeclarator", "value": "seg02" }, @@ -4015,9 +4015,9 @@ description: Variables in memory after executing poopy-shoe.kcl 0.0 ], "tag": { - "commentStart": 1286, - "end": 1292, - "start": 1286, + "commentStart": 1310, + "end": 1316, + "start": 1310, "type": "TagDeclarator", "value": "seg02" }, diff --git a/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/ast.snap b/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/ast.snap index 68df04fe95..16a749f08f 100644 --- a/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/ast.snap @@ -318,13 +318,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -399,13 +399,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -502,13 +502,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -582,13 +582,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1186,13 +1186,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -1267,13 +1267,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -1370,13 +1370,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -1450,13 +1450,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2074,13 +2074,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -2155,13 +2155,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -2258,13 +2258,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -2338,13 +2338,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3072,13 +3072,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -3153,13 +3153,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -3256,13 +3256,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -3336,13 +3336,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -4070,13 +4070,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4151,13 +4151,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4254,13 +4254,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4334,13 +4334,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -5068,13 +5068,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5149,13 +5149,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5252,13 +5252,13 @@ description: Result of parsing prosthetic-hip.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "120", + "raw": "120deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 120.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5332,13 +5332,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "30", + "raw": "30deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 30.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6248,13 +6248,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6317,13 +6317,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6441,13 +6441,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6635,13 +6635,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -7427,13 +7427,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -8211,13 +8211,13 @@ description: Result of parsing prosthetic-hip.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/ops.snap b/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/ops.snap index b95b69eb24..0cf9a0f104 100644 --- a/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/ops.snap @@ -1570,13 +1570,9 @@ description: Operations executed prosthetic-hip.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -1837,13 +1833,9 @@ description: Operations executed prosthetic-hip.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -2104,13 +2096,9 @@ description: Operations executed prosthetic-hip.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/program_memory.snap index 080dfcf403..a40d895af2 100644 --- a/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/prosthetic-hip/program_memory.snap @@ -556,9 +556,9 @@ description: Variables in memory after executing prosthetic-hip.kcl -8.0 ], "tag": { - "commentStart": 1889, - "end": 1895, - "start": 1889, + "commentStart": 1925, + "end": 1931, + "start": 1925, "type": "TagDeclarator", "value": "seg04" }, @@ -1843,9 +1843,9 @@ description: Variables in memory after executing prosthetic-hip.kcl -9.5 ], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 891, + "end": 897, + "start": 891, "type": "TagDeclarator", "value": "seg02" }, @@ -2065,9 +2065,9 @@ description: Variables in memory after executing prosthetic-hip.kcl -16.0 ], "tag": { - "commentStart": 1359, - "end": 1365, - "start": 1359, + "commentStart": 1383, + "end": 1389, + "start": 1383, "type": "TagDeclarator", "value": "seg03" }, @@ -2287,9 +2287,9 @@ description: Variables in memory after executing prosthetic-hip.kcl -8.0 ], "tag": { - "commentStart": 1889, - "end": 1895, - "start": 1889, + "commentStart": 1925, + "end": 1931, + "start": 1925, "type": "TagDeclarator", "value": "seg04" }, @@ -2509,9 +2509,9 @@ description: Variables in memory after executing prosthetic-hip.kcl -0.8 ], "tag": { - "commentStart": 2423, - "end": 2429, - "start": 2423, + "commentStart": 2471, + "end": 2477, + "start": 2471, "type": "TagDeclarator", "value": "seg05" }, @@ -2731,9 +2731,9 @@ description: Variables in memory after executing prosthetic-hip.kcl -0.5 ], "tag": { - "commentStart": 2954, - "end": 2960, - "start": 2954, + "commentStart": 3014, + "end": 3020, + "start": 3014, "type": "TagDeclarator", "value": "seg06" }, @@ -2949,9 +2949,9 @@ description: Variables in memory after executing prosthetic-hip.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2954, - "end": 2960, - "start": 2954, + "commentStart": 3014, + "end": 3020, + "start": 3014, "type": "TagDeclarator", "value": "seg06" }, @@ -3007,9 +3007,9 @@ description: Variables in memory after executing prosthetic-hip.kcl -0.5 ], "tag": { - "commentStart": 2954, - "end": 2960, - "start": 2954, + "commentStart": 3014, + "end": 3020, + "start": 3014, "type": "TagDeclarator", "value": "seg06" }, diff --git a/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ast.snap b/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ast.snap index 99fd3b8f92..24b027eb2f 100644 --- a/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ast.snap @@ -304,13 +304,13 @@ description: Result of parsing sheet-metal-bracket.kcl "init": { "commentStart": 0, "end": 0, - "raw": "75", + "raw": "75deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 75.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -2000,13 +2000,13 @@ description: Result of parsing sheet-metal-bracket.kcl "left": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "-", @@ -2436,13 +2436,13 @@ description: Result of parsing sheet-metal-bracket.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ops.snap b/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ops.snap index f41021b5e9..e293b50efb 100644 --- a/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/ops.snap @@ -242,13 +242,9 @@ description: Operations executed sheet-metal-bracket.kcl "type": "Number", "value": 75.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", diff --git a/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/program_memory.snap index 82bfcfc426..7668e88c1f 100644 --- a/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/sheet-metal-bracket/program_memory.snap @@ -7,13 +7,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "type": "Number", "value": 75.0, "ty": { - "type": "Default", - "len": { - "type": "Inches" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "bracketProfile": { @@ -42,9 +38,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -62,9 +58,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -103,9 +99,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -116,9 +112,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -150,9 +146,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -184,9 +180,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -197,9 +193,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -263,9 +259,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.18529523872436982 ], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -312,9 +308,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.467647619362185 ], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -442,9 +438,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl -0.00000000000000016653345369377348 ], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -467,9 +463,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.12499999999999983 ], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -559,9 +555,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.5926476193621846 ], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -670,9 +666,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -695,9 +691,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -987,9 +983,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -1007,9 +1003,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -1048,9 +1044,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -1061,9 +1057,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -1095,9 +1091,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -1129,9 +1125,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -1142,9 +1138,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -1208,9 +1204,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.18529523872436982 ], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -1257,9 +1253,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.467647619362185 ], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -1387,9 +1383,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl -0.00000000000000016653345369377348 ], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -1412,9 +1408,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.12499999999999983 ], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -1504,9 +1500,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.5926476193621846 ], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -1615,9 +1611,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -1640,9 +1636,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -2075,9 +2071,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -2095,9 +2091,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -2136,9 +2132,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -2149,9 +2145,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -2183,9 +2179,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -2217,9 +2213,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -2230,9 +2226,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -2296,9 +2292,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.18529523872436982 ], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -2345,9 +2341,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.467647619362185 ], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -2475,9 +2471,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl -0.00000000000000016653345369377348 ], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -2500,9 +2496,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.12499999999999983 ], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -2592,9 +2588,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.5926476193621846 ], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -2703,9 +2699,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -2728,9 +2724,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -3056,9 +3052,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -3076,9 +3072,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -3117,9 +3113,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -3130,9 +3126,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -3164,9 +3160,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -3198,9 +3194,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -3211,9 +3207,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -3277,9 +3273,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.18529523872436982 ], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -3326,9 +3322,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.467647619362185 ], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -3456,9 +3452,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl -0.00000000000000016653345369377348 ], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -3481,9 +3477,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.12499999999999983 ], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -3573,9 +3569,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.5926476193621846 ], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -3684,9 +3680,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -3709,9 +3705,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -4094,9 +4090,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -4114,9 +4110,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -4155,9 +4151,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -4168,9 +4164,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -4202,9 +4198,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -4236,9 +4232,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -4249,9 +4245,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -4315,9 +4311,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.18529523872436982 ], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -4364,9 +4360,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.467647619362185 ], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -4494,9 +4490,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl -0.00000000000000016653345369377348 ], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -4519,9 +4515,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.12499999999999983 ], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -4611,9 +4607,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.5926476193621846 ], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -4722,9 +4718,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -4747,9 +4743,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -5075,9 +5071,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -5095,9 +5091,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -5136,9 +5132,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -5149,9 +5145,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -5183,9 +5179,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -5217,9 +5213,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -5230,9 +5226,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -5296,9 +5292,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.18529523872436982 ], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -5345,9 +5341,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.467647619362185 ], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -5475,9 +5471,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl -0.00000000000000016653345369377348 ], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -5500,9 +5496,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.12499999999999983 ], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -5592,9 +5588,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.5926476193621846 ], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -5703,9 +5699,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -5728,9 +5724,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -6109,9 +6105,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -6129,9 +6125,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -6170,9 +6166,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -6183,9 +6179,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -6217,9 +6213,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -6251,9 +6247,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -6264,9 +6260,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -6330,9 +6326,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.18529523872436982 ], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -6379,9 +6375,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.467647619362185 ], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -6509,9 +6505,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl -0.00000000000000016653345369377348 ], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -6534,9 +6530,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.12499999999999983 ], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -6626,9 +6622,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.5926476193621846 ], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -6737,9 +6733,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -6762,9 +6758,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -7090,9 +7086,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -7110,9 +7106,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -7151,9 +7147,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -7164,9 +7160,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -7198,9 +7194,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -7232,9 +7228,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -7245,9 +7241,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -7311,9 +7307,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.18529523872436982 ], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -7360,9 +7356,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.467647619362185 ], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -7490,9 +7486,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl -0.00000000000000016653345369377348 ], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -7515,9 +7511,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.12499999999999983 ], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -7607,9 +7603,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.5926476193621846 ], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -7718,9 +7714,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -7743,9 +7739,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -8071,9 +8067,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -8091,9 +8087,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -8132,9 +8128,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -8145,9 +8141,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -8179,9 +8175,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -8213,9 +8209,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -8226,9 +8222,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -8292,9 +8288,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.18529523872436982 ], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -8341,9 +8337,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.467647619362185 ], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -8471,9 +8467,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl -0.00000000000000016653345369377348 ], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -8496,9 +8492,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.12499999999999983 ], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -8588,9 +8584,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.5926476193621846 ], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -8699,9 +8695,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -8724,9 +8720,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -9052,9 +9048,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -9072,9 +9068,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -9113,9 +9109,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -9126,9 +9122,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -9160,9 +9156,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -9194,9 +9190,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -9207,9 +9203,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, @@ -9273,9 +9269,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.18529523872436982 ], "tag": { - "commentStart": 1508, - "end": 1514, - "start": 1508, + "commentStart": 1511, + "end": 1517, + "start": 1511, "type": "TagDeclarator", "value": "seg01" }, @@ -9322,9 +9318,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.467647619362185 ], "tag": { - "commentStart": 1618, - "end": 1624, - "start": 1618, + "commentStart": 1621, + "end": 1627, + "start": 1621, "type": "TagDeclarator", "value": "seg02" }, @@ -9452,9 +9448,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl -0.00000000000000016653345369377348 ], "tag": { - "commentStart": 1927, - "end": 1933, - "start": 1927, + "commentStart": 1930, + "end": 1936, + "start": 1930, "type": "TagDeclarator", "value": "seg03" }, @@ -9477,9 +9473,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.12499999999999983 ], "tag": { - "commentStart": 1976, - "end": 1982, - "start": 1976, + "commentStart": 1979, + "end": 1985, + "start": 1979, "type": "TagDeclarator", "value": "seg04" }, @@ -9569,9 +9565,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 2.5926476193621846 ], "tag": { - "commentStart": 2218, - "end": 2224, - "start": 2218, + "commentStart": 2224, + "end": 2230, + "start": 2224, "type": "TagDeclarator", "value": "seg05" }, @@ -9680,9 +9676,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2503, - "end": 2509, - "start": 2503, + "commentStart": 2512, + "end": 2518, + "start": 2512, "type": "TagDeclarator", "value": "seg06" }, @@ -9705,9 +9701,9 @@ description: Variables in memory after executing sheet-metal-bracket.kcl 0.1249999999999997 ], "tag": { - "commentStart": 2579, - "end": 2585, - "start": 2579, + "commentStart": 2588, + "end": 2594, + "start": 2588, "type": "TagDeclarator", "value": "seg07" }, diff --git a/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/ast.snap b/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/ast.snap index 1641fc4ecc..35283c044f 100644 --- a/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/ast.snap @@ -188,13 +188,13 @@ description: Result of parsing shepherds-hook-bolt.kcl "init": { "commentStart": 0, "end": 0, - "raw": "290", + "raw": "290deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 290.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -221,13 +221,13 @@ description: Result of parsing shepherds-hook-bolt.kcl "init": { "commentStart": 0, "end": 0, - "raw": "150", + "raw": "150deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 150.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -571,13 +571,13 @@ description: Result of parsing shepherds-hook-bolt.kcl "right": { "commentStart": 0, "end": 0, - "raw": "270", + "raw": "270deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 270.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -3523,13 +3523,13 @@ description: Result of parsing shepherds-hook-bolt.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/ops.snap b/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/ops.snap index 3394eb02d9..e50cf7f527 100644 --- a/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/ops.snap @@ -176,13 +176,9 @@ description: Operations executed shepherds-hook-bolt.kcl "type": "Number", "value": 290.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -209,13 +205,9 @@ description: Operations executed shepherds-hook-bolt.kcl "type": "Number", "value": 150.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -506,13 +498,9 @@ description: Operations executed shepherds-hook-bolt.kcl "type": "Number", "value": 290.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -667,13 +655,9 @@ description: Operations executed shepherds-hook-bolt.kcl "type": "Number", "value": 150.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -1113,13 +1097,9 @@ description: Operations executed shepherds-hook-bolt.kcl "type": "Number", "value": 360.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/program_memory.snap index 529480d31e..f71dce9c6b 100644 --- a/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/shepherds-hook-bolt/program_memory.snap @@ -597,13 +597,9 @@ description: Variables in memory after executing shepherds-hook-bolt.kcl "type": "Number", "value": 150.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "hookProfilePlane": { @@ -702,9 +698,9 @@ description: Variables in memory after executing shepherds-hook-bolt.kcl -11.2763114494309 ], "tag": { - "commentStart": 1558, - "end": 1563, - "start": 1558, + "commentStart": 1567, + "end": 1572, + "start": 1567, "type": "TagDeclarator", "value": "hook" }, @@ -915,13 +911,9 @@ description: Variables in memory after executing shepherds-hook-bolt.kcl "type": "Number", "value": 290.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "hypotenuse": { @@ -1054,9 +1046,9 @@ description: Variables in memory after executing shepherds-hook-bolt.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2148, - "end": 2154, - "start": 2148, + "commentStart": 2157, + "end": 2163, + "start": 2157, "type": "TagDeclarator", "value": "seg01" }, @@ -1067,9 +1059,9 @@ description: Variables in memory after executing shepherds-hook-bolt.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2246, - "end": 2255, - "start": 2246, + "commentStart": 2255, + "end": 2264, + "start": 2255, "type": "TagDeclarator", "value": "startTag" }, @@ -1080,9 +1072,9 @@ description: Variables in memory after executing shepherds-hook-bolt.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2273, - "end": 2283, - "start": 2273, + "commentStart": 2282, + "end": 2292, + "start": 2282, "type": "TagDeclarator", "value": "capEnd001" }, @@ -1109,9 +1101,9 @@ description: Variables in memory after executing shepherds-hook-bolt.kcl ], "radius": 2.5, "tag": { - "commentStart": 2148, - "end": 2154, - "start": 2148, + "commentStart": 2157, + "end": 2163, + "start": 2157, "type": "TagDeclarator", "value": "seg01" }, @@ -1476,9 +1468,9 @@ description: Variables in memory after executing shepherds-hook-bolt.kcl ], "radius": 2.5, "tag": { - "commentStart": 2148, - "end": 2154, - "start": 2148, + "commentStart": 2157, + "end": 2163, + "start": 2157, "type": "TagDeclarator", "value": "seg01" }, diff --git a/rust/kcl-lib/tests/kcl_samples/spur-gear/ast.snap b/rust/kcl-lib/tests/kcl_samples/spur-gear/ast.snap index d7e0a46a9d..fcb0e761c7 100644 --- a/rust/kcl-lib/tests/kcl_samples/spur-gear/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/spur-gear/ast.snap @@ -1081,13 +1081,13 @@ description: Result of parsing spur-gear.kcl "right": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1107,13 +1107,13 @@ description: Result of parsing spur-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1180,13 +1180,13 @@ description: Result of parsing spur-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1692,13 +1692,13 @@ description: Result of parsing spur-gear.kcl "left": { "commentStart": 0, "end": 0, - "raw": "160", + "raw": "160deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 160.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -2043,13 +2043,13 @@ description: Result of parsing spur-gear.kcl "left": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -2148,13 +2148,13 @@ description: Result of parsing spur-gear.kcl "left": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -2355,13 +2355,13 @@ description: Result of parsing spur-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2776,13 +2776,13 @@ description: Result of parsing spur-gear.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "14", + "raw": "14deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 14.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/spur-gear/ops.snap b/rust/kcl-lib/tests/kcl_samples/spur-gear/ops.snap index 9832dcb706..521d3ffc1b 100644 --- a/rust/kcl-lib/tests/kcl_samples/spur-gear/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/spur-gear/ops.snap @@ -65,13 +65,9 @@ description: Operations executed spur-gear.kcl "type": "Number", "value": 14.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/spur-reduction-gearset/ast.snap b/rust/kcl-lib/tests/kcl_samples/spur-reduction-gearset/ast.snap index ffd8365a19..0e19d0c1d4 100644 --- a/rust/kcl-lib/tests/kcl_samples/spur-reduction-gearset/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/spur-reduction-gearset/ast.snap @@ -707,13 +707,13 @@ description: Result of parsing spur-reduction-gearset.kcl "left": { "commentStart": 0, "end": 0, - "raw": "160", + "raw": "160deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 160.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -1058,13 +1058,13 @@ description: Result of parsing spur-reduction-gearset.kcl "left": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -1163,13 +1163,13 @@ description: Result of parsing spur-reduction-gearset.kcl "left": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", @@ -1370,13 +1370,13 @@ description: Result of parsing spur-reduction-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1870,13 +1870,13 @@ description: Result of parsing spur-reduction-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "14", + "raw": "14deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 14.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1997,13 +1997,13 @@ description: Result of parsing spur-reduction-gearset.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "14", + "raw": "14deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 14.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/spur-reduction-gearset/ops.snap b/rust/kcl-lib/tests/kcl_samples/spur-reduction-gearset/ops.snap index 49b891583c..770488421a 100644 --- a/rust/kcl-lib/tests/kcl_samples/spur-reduction-gearset/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/spur-reduction-gearset/ops.snap @@ -65,13 +65,9 @@ description: Operations executed spur-reduction-gearset.kcl "type": "Number", "value": 14.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] @@ -914,13 +910,9 @@ description: Operations executed spur-reduction-gearset.kcl "type": "Number", "value": 14.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "sourceRange": [] diff --git a/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/ast.snap b/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/ast.snap index 5e99870e0b..80f8995594 100644 --- a/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/ast.snap @@ -635,13 +635,13 @@ description: Result of parsing surgical-drill-guide.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "60", + "raw": "60deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 60.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -912,13 +912,13 @@ description: Result of parsing surgical-drill-guide.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -1049,13 +1049,13 @@ description: Result of parsing surgical-drill-guide.kcl "right": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/program_memory.snap index 71f93a5eff..d7a663d262 100644 --- a/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/surgical-drill-guide/program_memory.snap @@ -92,9 +92,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2124, - "end": 2130, - "start": 2124, + "commentStart": 2133, + "end": 2139, + "start": 2133, "type": "TagDeclarator", "value": "seg10" }, @@ -105,9 +105,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2174, - "end": 2184, - "start": 2174, + "commentStart": 2183, + "end": 2193, + "start": 2183, "type": "TagDeclarator", "value": "capEnd004" }, @@ -134,9 +134,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl ], "radius": 2.0, "tag": { - "commentStart": 2124, - "end": 2130, - "start": 2124, + "commentStart": 2133, + "end": 2139, + "start": 2133, "type": "TagDeclarator", "value": "seg10" }, @@ -455,9 +455,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3480, - "end": 3486, - "start": 3480, + "commentStart": 3489, + "end": 3495, + "start": 3489, "type": "TagDeclarator", "value": "seg09" }, @@ -468,9 +468,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3530, - "end": 3540, - "start": 3530, + "commentStart": 3539, + "end": 3549, + "start": 3539, "type": "TagDeclarator", "value": "capEnd003" }, @@ -497,9 +497,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl ], "radius": 3.2, "tag": { - "commentStart": 3480, - "end": 3486, - "start": 3480, + "commentStart": 3489, + "end": 3495, + "start": 3489, "type": "TagDeclarator", "value": "seg09" }, @@ -1264,9 +1264,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 751, - "end": 757, - "start": 751, + "commentStart": 754, + "end": 760, + "start": 754, "type": "TagDeclarator", "value": "seg01" }, @@ -1277,9 +1277,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 837, - "end": 843, - "start": 837, + "commentStart": 840, + "end": 846, + "start": 840, "type": "TagDeclarator", "value": "seg03" }, @@ -1290,9 +1290,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 926, - "end": 932, - "start": 926, + "commentStart": 932, + "end": 938, + "start": 932, "type": "TagDeclarator", "value": "seg05" }, @@ -1303,9 +1303,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1009, - "end": 1015, - "start": 1009, + "commentStart": 1018, + "end": 1024, + "start": 1018, "type": "TagDeclarator", "value": "seg07" }, @@ -1323,9 +1323,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1215, - "end": 1227, - "start": 1215, + "commentStart": 1224, + "end": 1236, + "start": 1224, "type": "TagDeclarator", "value": "capStart001" }, @@ -1336,9 +1336,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1185, - "end": 1195, - "start": 1185, + "commentStart": 1194, + "end": 1204, + "start": 1194, "type": "TagDeclarator", "value": "capEnd001" }, @@ -1439,9 +1439,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl 6.0 ], "tag": { - "commentStart": 751, - "end": 757, - "start": 751, + "commentStart": 754, + "end": 760, + "start": 754, "type": "TagDeclarator", "value": "seg01" }, @@ -1464,9 +1464,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl 9.75 ], "tag": { - "commentStart": 837, - "end": 843, - "start": 837, + "commentStart": 840, + "end": 846, + "start": 840, "type": "TagDeclarator", "value": "seg03" }, @@ -1489,9 +1489,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl 53.05127018922193 ], "tag": { - "commentStart": 926, - "end": 932, - "start": 926, + "commentStart": 932, + "end": 938, + "start": 932, "type": "TagDeclarator", "value": "seg05" }, @@ -1514,9 +1514,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl 50.05127018922193 ], "tag": { - "commentStart": 1009, - "end": 1015, - "start": 1009, + "commentStart": 1018, + "end": 1024, + "start": 1018, "type": "TagDeclarator", "value": "seg07" }, @@ -1726,9 +1726,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2743, - "end": 2749, - "start": 2743, + "commentStart": 2752, + "end": 2758, + "start": 2752, "type": "TagDeclarator", "value": "seg11" }, @@ -1739,9 +1739,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2896, - "end": 2908, - "start": 2896, + "commentStart": 2905, + "end": 2917, + "start": 2905, "type": "TagDeclarator", "value": "capStart003" }, @@ -1752,9 +1752,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2873, - "end": 2883, - "start": 2873, + "commentStart": 2882, + "end": 2892, + "start": 2882, "type": "TagDeclarator", "value": "capEnd005" }, @@ -1781,9 +1781,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl ], "radius": 16.216216216216214, "tag": { - "commentStart": 2743, - "end": 2749, - "start": 2743, + "commentStart": 2752, + "end": 2758, + "start": 2752, "type": "TagDeclarator", "value": "seg11" }, @@ -1924,9 +1924,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4073, - "end": 4079, - "start": 4073, + "commentStart": 4082, + "end": 4088, + "start": 4082, "type": "TagDeclarator", "value": "seg08" }, @@ -1937,9 +1937,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4200, - "end": 4212, - "start": 4200, + "commentStart": 4209, + "end": 4221, + "start": 4209, "type": "TagDeclarator", "value": "capStart002" }, @@ -1950,9 +1950,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4223, - "end": 4233, - "start": 4223, + "commentStart": 4232, + "end": 4242, + "start": 4232, "type": "TagDeclarator", "value": "capEnd002" }, @@ -1979,9 +1979,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl ], "radius": 16.216216216216214, "tag": { - "commentStart": 4073, - "end": 4079, - "start": 4073, + "commentStart": 4082, + "end": 4088, + "start": 4082, "type": "TagDeclarator", "value": "seg08" }, @@ -2161,9 +2161,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 751, - "end": 757, - "start": 751, + "commentStart": 754, + "end": 760, + "start": 754, "type": "TagDeclarator", "value": "seg01" }, @@ -2174,9 +2174,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 837, - "end": 843, - "start": 837, + "commentStart": 840, + "end": 846, + "start": 840, "type": "TagDeclarator", "value": "seg03" }, @@ -2187,9 +2187,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 926, - "end": 932, - "start": 926, + "commentStart": 932, + "end": 938, + "start": 932, "type": "TagDeclarator", "value": "seg05" }, @@ -2200,9 +2200,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1009, - "end": 1015, - "start": 1009, + "commentStart": 1018, + "end": 1024, + "start": 1018, "type": "TagDeclarator", "value": "seg07" }, @@ -2220,9 +2220,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1215, - "end": 1227, - "start": 1215, + "commentStart": 1224, + "end": 1236, + "start": 1224, "type": "TagDeclarator", "value": "capStart001" }, @@ -2233,9 +2233,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1185, - "end": 1195, - "start": 1185, + "commentStart": 1194, + "end": 1204, + "start": 1194, "type": "TagDeclarator", "value": "capEnd001" }, @@ -2336,9 +2336,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl 6.0 ], "tag": { - "commentStart": 751, - "end": 757, - "start": 751, + "commentStart": 754, + "end": 760, + "start": 754, "type": "TagDeclarator", "value": "seg01" }, @@ -2361,9 +2361,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl 9.75 ], "tag": { - "commentStart": 837, - "end": 843, - "start": 837, + "commentStart": 840, + "end": 846, + "start": 840, "type": "TagDeclarator", "value": "seg03" }, @@ -2386,9 +2386,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl 53.05127018922193 ], "tag": { - "commentStart": 926, - "end": 932, - "start": 926, + "commentStart": 932, + "end": 938, + "start": 932, "type": "TagDeclarator", "value": "seg05" }, @@ -2411,9 +2411,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl 50.05127018922193 ], "tag": { - "commentStart": 1009, - "end": 1015, - "start": 1009, + "commentStart": 1018, + "end": 1024, + "start": 1018, "type": "TagDeclarator", "value": "seg07" }, @@ -2664,9 +2664,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2124, - "end": 2130, - "start": 2124, + "commentStart": 2133, + "end": 2139, + "start": 2133, "type": "TagDeclarator", "value": "seg10" }, @@ -2677,9 +2677,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2174, - "end": 2184, - "start": 2174, + "commentStart": 2183, + "end": 2193, + "start": 2183, "type": "TagDeclarator", "value": "capEnd004" }, @@ -2706,9 +2706,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl ], "radius": 2.0, "tag": { - "commentStart": 2124, - "end": 2130, - "start": 2124, + "commentStart": 2133, + "end": 2139, + "start": 2133, "type": "TagDeclarator", "value": "seg10" }, @@ -2927,9 +2927,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3480, - "end": 3486, - "start": 3480, + "commentStart": 3489, + "end": 3495, + "start": 3489, "type": "TagDeclarator", "value": "seg09" }, @@ -2940,9 +2940,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3530, - "end": 3540, - "start": 3530, + "commentStart": 3539, + "end": 3549, + "start": 3539, "type": "TagDeclarator", "value": "capEnd003" }, @@ -2969,9 +2969,9 @@ description: Variables in memory after executing surgical-drill-guide.kcl ], "radius": 3.2, "tag": { - "commentStart": 3480, - "end": 3486, - "start": 3480, + "commentStart": 3489, + "end": 3495, + "start": 3489, "type": "TagDeclarator", "value": "seg09" }, diff --git a/rust/kcl-lib/tests/kcl_samples/t-slot-rail/ast.snap b/rust/kcl-lib/tests/kcl_samples/t-slot-rail/ast.snap index 07f303da76..53fc6d5fb3 100644 --- a/rust/kcl-lib/tests/kcl_samples/t-slot-rail/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/t-slot-rail/ast.snap @@ -384,13 +384,13 @@ description: Result of parsing t-slot-rail.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -453,13 +453,13 @@ description: Result of parsing t-slot-rail.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -522,13 +522,13 @@ description: Result of parsing t-slot-rail.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "135", + "raw": "135deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 135.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -707,13 +707,13 @@ description: Result of parsing t-slot-rail.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -839,13 +839,13 @@ description: Result of parsing t-slot-rail.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -996,13 +996,13 @@ description: Result of parsing t-slot-rail.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -1146,13 +1146,13 @@ description: Result of parsing t-slot-rail.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "180", + "raw": "180deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 180.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/kcl_samples/wing-spar/ast.snap b/rust/kcl-lib/tests/kcl_samples/wing-spar/ast.snap index 97b202cc06..ba1456e3fc 100644 --- a/rust/kcl-lib/tests/kcl_samples/wing-spar/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/wing-spar/ast.snap @@ -782,13 +782,13 @@ description: Result of parsing wing-spar.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "76", + "raw": "76deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 76.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -2311,13 +2311,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -2481,13 +2481,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -2659,13 +2659,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -2960,13 +2960,13 @@ description: Result of parsing wing-spar.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3106,13 +3106,13 @@ description: Result of parsing wing-spar.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3260,13 +3260,13 @@ description: Result of parsing wing-spar.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3875,13 +3875,13 @@ description: Result of parsing wing-spar.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -4045,13 +4045,13 @@ description: Result of parsing wing-spar.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -4215,13 +4215,13 @@ description: Result of parsing wing-spar.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -4510,13 +4510,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4664,13 +4664,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -4818,13 +4818,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5517,13 +5517,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5779,13 +5779,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -5937,13 +5937,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6834,13 +6834,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6992,13 +6992,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -7150,13 +7150,13 @@ description: Result of parsing wing-spar.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, diff --git a/rust/kcl-lib/tests/kcl_samples/wing-spar/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/wing-spar/program_memory.snap index 6907123eb4..f76f28c436 100644 --- a/rust/kcl-lib/tests/kcl_samples/wing-spar/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/wing-spar/program_memory.snap @@ -57,9 +57,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4188, - "end": 4194, - "start": 4188, + "commentStart": 4227, + "end": 4233, + "start": 4227, "type": "TagDeclarator", "value": "seg11" }, @@ -77,9 +77,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4328, - "end": 4334, - "start": 4328, + "commentStart": 4370, + "end": 4376, + "start": 4370, "type": "TagDeclarator", "value": "seg12" }, @@ -135,9 +135,9 @@ description: Variables in memory after executing wing-spar.kcl -24.0 ], "tag": { - "commentStart": 4188, - "end": 4194, - "start": 4188, + "commentStart": 4227, + "end": 4233, + "start": 4227, "type": "TagDeclarator", "value": "seg11" }, @@ -184,9 +184,9 @@ description: Variables in memory after executing wing-spar.kcl -29.0 ], "tag": { - "commentStart": 4328, - "end": 4334, - "start": 4328, + "commentStart": 4370, + "end": 4376, + "start": 4370, "type": "TagDeclarator", "value": "seg12" }, @@ -360,9 +360,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2102, - "end": 2108, - "start": 2102, + "commentStart": 2105, + "end": 2111, + "start": 2105, "type": "TagDeclarator", "value": "seg01" }, @@ -380,9 +380,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2216, - "end": 2222, - "start": 2216, + "commentStart": 2222, + "end": 2228, + "start": 2222, "type": "TagDeclarator", "value": "seg02" }, @@ -400,9 +400,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2331, - "end": 2337, - "start": 2331, + "commentStart": 2340, + "end": 2346, + "start": 2340, "type": "TagDeclarator", "value": "seg03" }, @@ -420,9 +420,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2446, - "end": 2452, - "start": 2446, + "commentStart": 2458, + "end": 2464, + "start": 2458, "type": "TagDeclarator", "value": "seg04" }, @@ -482,9 +482,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2809, - "end": 2815, - "start": 2809, + "commentStart": 2830, + "end": 2836, + "start": 2830, "type": "TagDeclarator", "value": "seg10" }, @@ -512,9 +512,9 @@ description: Variables in memory after executing wing-spar.kcl -15.299999999999999 ], "tag": { - "commentStart": 2102, - "end": 2108, - "start": 2102, + "commentStart": 2105, + "end": 2111, + "start": 2105, "type": "TagDeclarator", "value": "seg01" }, @@ -561,9 +561,9 @@ description: Variables in memory after executing wing-spar.kcl 34.204 ], "tag": { - "commentStart": 2216, - "end": 2222, - "start": 2216, + "commentStart": 2222, + "end": 2228, + "start": 2222, "type": "TagDeclarator", "value": "seg02" }, @@ -610,9 +610,9 @@ description: Variables in memory after executing wing-spar.kcl 30.0 ], "tag": { - "commentStart": 2331, - "end": 2337, - "start": 2331, + "commentStart": 2340, + "end": 2346, + "start": 2340, "type": "TagDeclarator", "value": "seg03" }, @@ -659,9 +659,9 @@ description: Variables in memory after executing wing-spar.kcl 21.796 ], "tag": { - "commentStart": 2446, - "end": 2452, - "start": 2446, + "commentStart": 2458, + "end": 2464, + "start": 2458, "type": "TagDeclarator", "value": "seg04" }, @@ -832,9 +832,9 @@ description: Variables in memory after executing wing-spar.kcl 29.999999999999996 ], "tag": { - "commentStart": 2809, - "end": 2815, - "start": 2809, + "commentStart": 2830, + "end": 2836, + "start": 2830, "type": "TagDeclarator", "value": "seg10" }, @@ -1029,9 +1029,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4188, - "end": 4194, - "start": 4188, + "commentStart": 4227, + "end": 4233, + "start": 4227, "type": "TagDeclarator", "value": "seg11" }, @@ -1049,9 +1049,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4328, - "end": 4334, - "start": 4328, + "commentStart": 4370, + "end": 4376, + "start": 4370, "type": "TagDeclarator", "value": "seg12" }, @@ -1107,9 +1107,9 @@ description: Variables in memory after executing wing-spar.kcl -24.0 ], "tag": { - "commentStart": 4188, - "end": 4194, - "start": 4188, + "commentStart": 4227, + "end": 4233, + "start": 4227, "type": "TagDeclarator", "value": "seg11" }, @@ -1156,9 +1156,9 @@ description: Variables in memory after executing wing-spar.kcl -29.0 ], "tag": { - "commentStart": 4328, - "end": 4334, - "start": 4328, + "commentStart": 4370, + "end": 4376, + "start": 4370, "type": "TagDeclarator", "value": "seg12" }, @@ -1332,9 +1332,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2102, - "end": 2108, - "start": 2102, + "commentStart": 2105, + "end": 2111, + "start": 2105, "type": "TagDeclarator", "value": "seg01" }, @@ -1352,9 +1352,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2216, - "end": 2222, - "start": 2216, + "commentStart": 2222, + "end": 2228, + "start": 2222, "type": "TagDeclarator", "value": "seg02" }, @@ -1372,9 +1372,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2331, - "end": 2337, - "start": 2331, + "commentStart": 2340, + "end": 2346, + "start": 2340, "type": "TagDeclarator", "value": "seg03" }, @@ -1392,9 +1392,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2446, - "end": 2452, - "start": 2446, + "commentStart": 2458, + "end": 2464, + "start": 2458, "type": "TagDeclarator", "value": "seg04" }, @@ -1454,9 +1454,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2809, - "end": 2815, - "start": 2809, + "commentStart": 2830, + "end": 2836, + "start": 2830, "type": "TagDeclarator", "value": "seg10" }, @@ -1484,9 +1484,9 @@ description: Variables in memory after executing wing-spar.kcl -15.299999999999999 ], "tag": { - "commentStart": 2102, - "end": 2108, - "start": 2102, + "commentStart": 2105, + "end": 2111, + "start": 2105, "type": "TagDeclarator", "value": "seg01" }, @@ -1533,9 +1533,9 @@ description: Variables in memory after executing wing-spar.kcl 34.204 ], "tag": { - "commentStart": 2216, - "end": 2222, - "start": 2216, + "commentStart": 2222, + "end": 2228, + "start": 2222, "type": "TagDeclarator", "value": "seg02" }, @@ -1582,9 +1582,9 @@ description: Variables in memory after executing wing-spar.kcl 30.0 ], "tag": { - "commentStart": 2331, - "end": 2337, - "start": 2331, + "commentStart": 2340, + "end": 2346, + "start": 2340, "type": "TagDeclarator", "value": "seg03" }, @@ -1631,9 +1631,9 @@ description: Variables in memory after executing wing-spar.kcl 21.796 ], "tag": { - "commentStart": 2446, - "end": 2452, - "start": 2446, + "commentStart": 2458, + "end": 2464, + "start": 2458, "type": "TagDeclarator", "value": "seg04" }, @@ -1804,9 +1804,9 @@ description: Variables in memory after executing wing-spar.kcl 29.999999999999996 ], "tag": { - "commentStart": 2809, - "end": 2815, - "start": 2809, + "commentStart": 2830, + "end": 2836, + "start": 2830, "type": "TagDeclarator", "value": "seg10" }, @@ -2001,9 +2001,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4188, - "end": 4194, - "start": 4188, + "commentStart": 4227, + "end": 4233, + "start": 4227, "type": "TagDeclarator", "value": "seg11" }, @@ -2021,9 +2021,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4328, - "end": 4334, - "start": 4328, + "commentStart": 4370, + "end": 4376, + "start": 4370, "type": "TagDeclarator", "value": "seg12" }, @@ -2079,9 +2079,9 @@ description: Variables in memory after executing wing-spar.kcl -24.0 ], "tag": { - "commentStart": 4188, - "end": 4194, - "start": 4188, + "commentStart": 4227, + "end": 4233, + "start": 4227, "type": "TagDeclarator", "value": "seg11" }, @@ -2128,9 +2128,9 @@ description: Variables in memory after executing wing-spar.kcl -29.0 ], "tag": { - "commentStart": 4328, - "end": 4334, - "start": 4328, + "commentStart": 4370, + "end": 4376, + "start": 4370, "type": "TagDeclarator", "value": "seg12" }, @@ -2304,9 +2304,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2102, - "end": 2108, - "start": 2102, + "commentStart": 2105, + "end": 2111, + "start": 2105, "type": "TagDeclarator", "value": "seg01" }, @@ -2324,9 +2324,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2216, - "end": 2222, - "start": 2216, + "commentStart": 2222, + "end": 2228, + "start": 2222, "type": "TagDeclarator", "value": "seg02" }, @@ -2344,9 +2344,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2331, - "end": 2337, - "start": 2331, + "commentStart": 2340, + "end": 2346, + "start": 2340, "type": "TagDeclarator", "value": "seg03" }, @@ -2364,9 +2364,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2446, - "end": 2452, - "start": 2446, + "commentStart": 2458, + "end": 2464, + "start": 2458, "type": "TagDeclarator", "value": "seg04" }, @@ -2426,9 +2426,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2809, - "end": 2815, - "start": 2809, + "commentStart": 2830, + "end": 2836, + "start": 2830, "type": "TagDeclarator", "value": "seg10" }, @@ -2456,9 +2456,9 @@ description: Variables in memory after executing wing-spar.kcl -15.299999999999999 ], "tag": { - "commentStart": 2102, - "end": 2108, - "start": 2102, + "commentStart": 2105, + "end": 2111, + "start": 2105, "type": "TagDeclarator", "value": "seg01" }, @@ -2505,9 +2505,9 @@ description: Variables in memory after executing wing-spar.kcl 34.204 ], "tag": { - "commentStart": 2216, - "end": 2222, - "start": 2216, + "commentStart": 2222, + "end": 2228, + "start": 2222, "type": "TagDeclarator", "value": "seg02" }, @@ -2554,9 +2554,9 @@ description: Variables in memory after executing wing-spar.kcl 30.0 ], "tag": { - "commentStart": 2331, - "end": 2337, - "start": 2331, + "commentStart": 2340, + "end": 2346, + "start": 2340, "type": "TagDeclarator", "value": "seg03" }, @@ -2603,9 +2603,9 @@ description: Variables in memory after executing wing-spar.kcl 21.796 ], "tag": { - "commentStart": 2446, - "end": 2452, - "start": 2446, + "commentStart": 2458, + "end": 2464, + "start": 2458, "type": "TagDeclarator", "value": "seg04" }, @@ -2776,9 +2776,9 @@ description: Variables in memory after executing wing-spar.kcl 29.999999999999996 ], "tag": { - "commentStart": 2809, - "end": 2815, - "start": 2809, + "commentStart": 2830, + "end": 2836, + "start": 2830, "type": "TagDeclarator", "value": "seg10" }, @@ -2973,9 +2973,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4188, - "end": 4194, - "start": 4188, + "commentStart": 4227, + "end": 4233, + "start": 4227, "type": "TagDeclarator", "value": "seg11" }, @@ -2993,9 +2993,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4328, - "end": 4334, - "start": 4328, + "commentStart": 4370, + "end": 4376, + "start": 4370, "type": "TagDeclarator", "value": "seg12" }, @@ -3051,9 +3051,9 @@ description: Variables in memory after executing wing-spar.kcl -24.0 ], "tag": { - "commentStart": 4188, - "end": 4194, - "start": 4188, + "commentStart": 4227, + "end": 4233, + "start": 4227, "type": "TagDeclarator", "value": "seg11" }, @@ -3100,9 +3100,9 @@ description: Variables in memory after executing wing-spar.kcl -29.0 ], "tag": { - "commentStart": 4328, - "end": 4334, - "start": 4328, + "commentStart": 4370, + "end": 4376, + "start": 4370, "type": "TagDeclarator", "value": "seg12" }, @@ -3276,9 +3276,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2102, - "end": 2108, - "start": 2102, + "commentStart": 2105, + "end": 2111, + "start": 2105, "type": "TagDeclarator", "value": "seg01" }, @@ -3296,9 +3296,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2216, - "end": 2222, - "start": 2216, + "commentStart": 2222, + "end": 2228, + "start": 2222, "type": "TagDeclarator", "value": "seg02" }, @@ -3316,9 +3316,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2331, - "end": 2337, - "start": 2331, + "commentStart": 2340, + "end": 2346, + "start": 2340, "type": "TagDeclarator", "value": "seg03" }, @@ -3336,9 +3336,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2446, - "end": 2452, - "start": 2446, + "commentStart": 2458, + "end": 2464, + "start": 2458, "type": "TagDeclarator", "value": "seg04" }, @@ -3398,9 +3398,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2809, - "end": 2815, - "start": 2809, + "commentStart": 2830, + "end": 2836, + "start": 2830, "type": "TagDeclarator", "value": "seg10" }, @@ -3428,9 +3428,9 @@ description: Variables in memory after executing wing-spar.kcl -15.299999999999999 ], "tag": { - "commentStart": 2102, - "end": 2108, - "start": 2102, + "commentStart": 2105, + "end": 2111, + "start": 2105, "type": "TagDeclarator", "value": "seg01" }, @@ -3477,9 +3477,9 @@ description: Variables in memory after executing wing-spar.kcl 34.204 ], "tag": { - "commentStart": 2216, - "end": 2222, - "start": 2216, + "commentStart": 2222, + "end": 2228, + "start": 2222, "type": "TagDeclarator", "value": "seg02" }, @@ -3526,9 +3526,9 @@ description: Variables in memory after executing wing-spar.kcl 30.0 ], "tag": { - "commentStart": 2331, - "end": 2337, - "start": 2331, + "commentStart": 2340, + "end": 2346, + "start": 2340, "type": "TagDeclarator", "value": "seg03" }, @@ -3575,9 +3575,9 @@ description: Variables in memory after executing wing-spar.kcl 21.796 ], "tag": { - "commentStart": 2446, - "end": 2452, - "start": 2446, + "commentStart": 2458, + "end": 2464, + "start": 2458, "type": "TagDeclarator", "value": "seg04" }, @@ -3748,9 +3748,9 @@ description: Variables in memory after executing wing-spar.kcl 29.999999999999996 ], "tag": { - "commentStart": 2809, - "end": 2815, - "start": 2809, + "commentStart": 2830, + "end": 2836, + "start": 2830, "type": "TagDeclarator", "value": "seg10" }, @@ -3947,9 +3947,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2102, - "end": 2108, - "start": 2102, + "commentStart": 2105, + "end": 2111, + "start": 2105, "type": "TagDeclarator", "value": "seg01" }, @@ -3967,9 +3967,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2216, - "end": 2222, - "start": 2216, + "commentStart": 2222, + "end": 2228, + "start": 2222, "type": "TagDeclarator", "value": "seg02" }, @@ -3987,9 +3987,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2331, - "end": 2337, - "start": 2331, + "commentStart": 2340, + "end": 2346, + "start": 2340, "type": "TagDeclarator", "value": "seg03" }, @@ -4007,9 +4007,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2446, - "end": 2452, - "start": 2446, + "commentStart": 2458, + "end": 2464, + "start": 2458, "type": "TagDeclarator", "value": "seg04" }, @@ -4069,9 +4069,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2809, - "end": 2815, - "start": 2809, + "commentStart": 2830, + "end": 2836, + "start": 2830, "type": "TagDeclarator", "value": "seg10" }, @@ -4099,9 +4099,9 @@ description: Variables in memory after executing wing-spar.kcl -15.299999999999999 ], "tag": { - "commentStart": 2102, - "end": 2108, - "start": 2102, + "commentStart": 2105, + "end": 2111, + "start": 2105, "type": "TagDeclarator", "value": "seg01" }, @@ -4148,9 +4148,9 @@ description: Variables in memory after executing wing-spar.kcl 34.204 ], "tag": { - "commentStart": 2216, - "end": 2222, - "start": 2216, + "commentStart": 2222, + "end": 2228, + "start": 2222, "type": "TagDeclarator", "value": "seg02" }, @@ -4197,9 +4197,9 @@ description: Variables in memory after executing wing-spar.kcl 30.0 ], "tag": { - "commentStart": 2331, - "end": 2337, - "start": 2331, + "commentStart": 2340, + "end": 2346, + "start": 2340, "type": "TagDeclarator", "value": "seg03" }, @@ -4246,9 +4246,9 @@ description: Variables in memory after executing wing-spar.kcl 21.796 ], "tag": { - "commentStart": 2446, - "end": 2452, - "start": 2446, + "commentStart": 2458, + "end": 2464, + "start": 2458, "type": "TagDeclarator", "value": "seg04" }, @@ -4419,9 +4419,9 @@ description: Variables in memory after executing wing-spar.kcl 29.999999999999996 ], "tag": { - "commentStart": 2809, - "end": 2815, - "start": 2809, + "commentStart": 2830, + "end": 2836, + "start": 2830, "type": "TagDeclarator", "value": "seg10" }, @@ -4612,9 +4612,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4950, - "end": 4956, - "start": 4950, + "commentStart": 4998, + "end": 5004, + "start": 4998, "type": "TagDeclarator", "value": "seg14" }, @@ -4684,9 +4684,9 @@ description: Variables in memory after executing wing-spar.kcl -24.0 ], "tag": { - "commentStart": 4950, - "end": 4956, - "start": 4950, + "commentStart": 4998, + "end": 5004, + "start": 4998, "type": "TagDeclarator", "value": "seg14" }, @@ -4903,9 +4903,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3122, - "end": 3128, - "start": 3122, + "commentStart": 3143, + "end": 3149, + "start": 3143, "type": "TagDeclarator", "value": "seg05" }, @@ -4923,9 +4923,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3236, - "end": 3242, - "start": 3236, + "commentStart": 3260, + "end": 3266, + "start": 3260, "type": "TagDeclarator", "value": "seg06" }, @@ -4943,9 +4943,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3350, - "end": 3356, - "start": 3350, + "commentStart": 3377, + "end": 3383, + "start": 3377, "type": "TagDeclarator", "value": "seg07" }, @@ -4963,9 +4963,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3463, - "end": 3469, - "start": 3463, + "commentStart": 3493, + "end": 3499, + "start": 3493, "type": "TagDeclarator", "value": "seg08" }, @@ -5025,9 +5025,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3829, - "end": 3835, - "start": 3829, + "commentStart": 3868, + "end": 3874, + "start": 3868, "type": "TagDeclarator", "value": "seg09" }, @@ -5055,9 +5055,9 @@ description: Variables in memory after executing wing-spar.kcl -12.6 ], "tag": { - "commentStart": 3122, - "end": 3128, - "start": 3122, + "commentStart": 3143, + "end": 3149, + "start": 3143, "type": "TagDeclarator", "value": "seg05" }, @@ -5104,9 +5104,9 @@ description: Variables in memory after executing wing-spar.kcl 25.204 ], "tag": { - "commentStart": 3236, - "end": 3242, - "start": 3236, + "commentStart": 3260, + "end": 3266, + "start": 3260, "type": "TagDeclarator", "value": "seg06" }, @@ -5153,9 +5153,9 @@ description: Variables in memory after executing wing-spar.kcl 21.0 ], "tag": { - "commentStart": 3350, - "end": 3356, - "start": 3350, + "commentStart": 3377, + "end": 3383, + "start": 3377, "type": "TagDeclarator", "value": "seg07" }, @@ -5202,9 +5202,9 @@ description: Variables in memory after executing wing-spar.kcl 12.796 ], "tag": { - "commentStart": 3463, - "end": 3469, - "start": 3463, + "commentStart": 3493, + "end": 3499, + "start": 3493, "type": "TagDeclarator", "value": "seg08" }, @@ -5375,9 +5375,9 @@ description: Variables in memory after executing wing-spar.kcl 21.0 ], "tag": { - "commentStart": 3829, - "end": 3835, - "start": 3829, + "commentStart": 3868, + "end": 3874, + "start": 3868, "type": "TagDeclarator", "value": "seg09" }, @@ -5568,9 +5568,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4950, - "end": 4956, - "start": 4950, + "commentStart": 4998, + "end": 5004, + "start": 4998, "type": "TagDeclarator", "value": "seg14" }, @@ -5640,9 +5640,9 @@ description: Variables in memory after executing wing-spar.kcl -24.0 ], "tag": { - "commentStart": 4950, - "end": 4956, - "start": 4950, + "commentStart": 4998, + "end": 5004, + "start": 4998, "type": "TagDeclarator", "value": "seg14" }, @@ -5859,9 +5859,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3122, - "end": 3128, - "start": 3122, + "commentStart": 3143, + "end": 3149, + "start": 3143, "type": "TagDeclarator", "value": "seg05" }, @@ -5879,9 +5879,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3236, - "end": 3242, - "start": 3236, + "commentStart": 3260, + "end": 3266, + "start": 3260, "type": "TagDeclarator", "value": "seg06" }, @@ -5899,9 +5899,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3350, - "end": 3356, - "start": 3350, + "commentStart": 3377, + "end": 3383, + "start": 3377, "type": "TagDeclarator", "value": "seg07" }, @@ -5919,9 +5919,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3463, - "end": 3469, - "start": 3463, + "commentStart": 3493, + "end": 3499, + "start": 3493, "type": "TagDeclarator", "value": "seg08" }, @@ -5981,9 +5981,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3829, - "end": 3835, - "start": 3829, + "commentStart": 3868, + "end": 3874, + "start": 3868, "type": "TagDeclarator", "value": "seg09" }, @@ -6011,9 +6011,9 @@ description: Variables in memory after executing wing-spar.kcl -12.6 ], "tag": { - "commentStart": 3122, - "end": 3128, - "start": 3122, + "commentStart": 3143, + "end": 3149, + "start": 3143, "type": "TagDeclarator", "value": "seg05" }, @@ -6060,9 +6060,9 @@ description: Variables in memory after executing wing-spar.kcl 25.204 ], "tag": { - "commentStart": 3236, - "end": 3242, - "start": 3236, + "commentStart": 3260, + "end": 3266, + "start": 3260, "type": "TagDeclarator", "value": "seg06" }, @@ -6109,9 +6109,9 @@ description: Variables in memory after executing wing-spar.kcl 21.0 ], "tag": { - "commentStart": 3350, - "end": 3356, - "start": 3350, + "commentStart": 3377, + "end": 3383, + "start": 3377, "type": "TagDeclarator", "value": "seg07" }, @@ -6158,9 +6158,9 @@ description: Variables in memory after executing wing-spar.kcl 12.796 ], "tag": { - "commentStart": 3463, - "end": 3469, - "start": 3463, + "commentStart": 3493, + "end": 3499, + "start": 3493, "type": "TagDeclarator", "value": "seg08" }, @@ -6331,9 +6331,9 @@ description: Variables in memory after executing wing-spar.kcl 21.0 ], "tag": { - "commentStart": 3829, - "end": 3835, - "start": 3829, + "commentStart": 3868, + "end": 3874, + "start": 3868, "type": "TagDeclarator", "value": "seg09" }, @@ -6524,9 +6524,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4950, - "end": 4956, - "start": 4950, + "commentStart": 4998, + "end": 5004, + "start": 4998, "type": "TagDeclarator", "value": "seg14" }, @@ -6596,9 +6596,9 @@ description: Variables in memory after executing wing-spar.kcl -24.0 ], "tag": { - "commentStart": 4950, - "end": 4956, - "start": 4950, + "commentStart": 4998, + "end": 5004, + "start": 4998, "type": "TagDeclarator", "value": "seg14" }, @@ -6815,9 +6815,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3122, - "end": 3128, - "start": 3122, + "commentStart": 3143, + "end": 3149, + "start": 3143, "type": "TagDeclarator", "value": "seg05" }, @@ -6835,9 +6835,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3236, - "end": 3242, - "start": 3236, + "commentStart": 3260, + "end": 3266, + "start": 3260, "type": "TagDeclarator", "value": "seg06" }, @@ -6855,9 +6855,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3350, - "end": 3356, - "start": 3350, + "commentStart": 3377, + "end": 3383, + "start": 3377, "type": "TagDeclarator", "value": "seg07" }, @@ -6875,9 +6875,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3463, - "end": 3469, - "start": 3463, + "commentStart": 3493, + "end": 3499, + "start": 3493, "type": "TagDeclarator", "value": "seg08" }, @@ -6937,9 +6937,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3829, - "end": 3835, - "start": 3829, + "commentStart": 3868, + "end": 3874, + "start": 3868, "type": "TagDeclarator", "value": "seg09" }, @@ -6967,9 +6967,9 @@ description: Variables in memory after executing wing-spar.kcl -12.6 ], "tag": { - "commentStart": 3122, - "end": 3128, - "start": 3122, + "commentStart": 3143, + "end": 3149, + "start": 3143, "type": "TagDeclarator", "value": "seg05" }, @@ -7016,9 +7016,9 @@ description: Variables in memory after executing wing-spar.kcl 25.204 ], "tag": { - "commentStart": 3236, - "end": 3242, - "start": 3236, + "commentStart": 3260, + "end": 3266, + "start": 3260, "type": "TagDeclarator", "value": "seg06" }, @@ -7065,9 +7065,9 @@ description: Variables in memory after executing wing-spar.kcl 21.0 ], "tag": { - "commentStart": 3350, - "end": 3356, - "start": 3350, + "commentStart": 3377, + "end": 3383, + "start": 3377, "type": "TagDeclarator", "value": "seg07" }, @@ -7114,9 +7114,9 @@ description: Variables in memory after executing wing-spar.kcl 12.796 ], "tag": { - "commentStart": 3463, - "end": 3469, - "start": 3463, + "commentStart": 3493, + "end": 3499, + "start": 3493, "type": "TagDeclarator", "value": "seg08" }, @@ -7287,9 +7287,9 @@ description: Variables in memory after executing wing-spar.kcl 21.0 ], "tag": { - "commentStart": 3829, - "end": 3835, - "start": 3829, + "commentStart": 3868, + "end": 3874, + "start": 3868, "type": "TagDeclarator", "value": "seg09" }, @@ -7480,9 +7480,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4950, - "end": 4956, - "start": 4950, + "commentStart": 4998, + "end": 5004, + "start": 4998, "type": "TagDeclarator", "value": "seg14" }, @@ -7552,9 +7552,9 @@ description: Variables in memory after executing wing-spar.kcl -24.0 ], "tag": { - "commentStart": 4950, - "end": 4956, - "start": 4950, + "commentStart": 4998, + "end": 5004, + "start": 4998, "type": "TagDeclarator", "value": "seg14" }, @@ -7771,9 +7771,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3122, - "end": 3128, - "start": 3122, + "commentStart": 3143, + "end": 3149, + "start": 3143, "type": "TagDeclarator", "value": "seg05" }, @@ -7791,9 +7791,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3236, - "end": 3242, - "start": 3236, + "commentStart": 3260, + "end": 3266, + "start": 3260, "type": "TagDeclarator", "value": "seg06" }, @@ -7811,9 +7811,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3350, - "end": 3356, - "start": 3350, + "commentStart": 3377, + "end": 3383, + "start": 3377, "type": "TagDeclarator", "value": "seg07" }, @@ -7831,9 +7831,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3463, - "end": 3469, - "start": 3463, + "commentStart": 3493, + "end": 3499, + "start": 3493, "type": "TagDeclarator", "value": "seg08" }, @@ -7893,9 +7893,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3829, - "end": 3835, - "start": 3829, + "commentStart": 3868, + "end": 3874, + "start": 3868, "type": "TagDeclarator", "value": "seg09" }, @@ -7923,9 +7923,9 @@ description: Variables in memory after executing wing-spar.kcl -12.6 ], "tag": { - "commentStart": 3122, - "end": 3128, - "start": 3122, + "commentStart": 3143, + "end": 3149, + "start": 3143, "type": "TagDeclarator", "value": "seg05" }, @@ -7972,9 +7972,9 @@ description: Variables in memory after executing wing-spar.kcl 25.204 ], "tag": { - "commentStart": 3236, - "end": 3242, - "start": 3236, + "commentStart": 3260, + "end": 3266, + "start": 3260, "type": "TagDeclarator", "value": "seg06" }, @@ -8021,9 +8021,9 @@ description: Variables in memory after executing wing-spar.kcl 21.0 ], "tag": { - "commentStart": 3350, - "end": 3356, - "start": 3350, + "commentStart": 3377, + "end": 3383, + "start": 3377, "type": "TagDeclarator", "value": "seg07" }, @@ -8070,9 +8070,9 @@ description: Variables in memory after executing wing-spar.kcl 12.796 ], "tag": { - "commentStart": 3463, - "end": 3469, - "start": 3463, + "commentStart": 3493, + "end": 3499, + "start": 3493, "type": "TagDeclarator", "value": "seg08" }, @@ -8243,9 +8243,9 @@ description: Variables in memory after executing wing-spar.kcl 21.0 ], "tag": { - "commentStart": 3829, - "end": 3835, - "start": 3829, + "commentStart": 3868, + "end": 3874, + "start": 3868, "type": "TagDeclarator", "value": "seg09" }, @@ -8438,9 +8438,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3122, - "end": 3128, - "start": 3122, + "commentStart": 3143, + "end": 3149, + "start": 3143, "type": "TagDeclarator", "value": "seg05" }, @@ -8458,9 +8458,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3236, - "end": 3242, - "start": 3236, + "commentStart": 3260, + "end": 3266, + "start": 3260, "type": "TagDeclarator", "value": "seg06" }, @@ -8478,9 +8478,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3350, - "end": 3356, - "start": 3350, + "commentStart": 3377, + "end": 3383, + "start": 3377, "type": "TagDeclarator", "value": "seg07" }, @@ -8498,9 +8498,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3463, - "end": 3469, - "start": 3463, + "commentStart": 3493, + "end": 3499, + "start": 3493, "type": "TagDeclarator", "value": "seg08" }, @@ -8560,9 +8560,9 @@ description: Variables in memory after executing wing-spar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3829, - "end": 3835, - "start": 3829, + "commentStart": 3868, + "end": 3874, + "start": 3868, "type": "TagDeclarator", "value": "seg09" }, @@ -8590,9 +8590,9 @@ description: Variables in memory after executing wing-spar.kcl -12.6 ], "tag": { - "commentStart": 3122, - "end": 3128, - "start": 3122, + "commentStart": 3143, + "end": 3149, + "start": 3143, "type": "TagDeclarator", "value": "seg05" }, @@ -8639,9 +8639,9 @@ description: Variables in memory after executing wing-spar.kcl 25.204 ], "tag": { - "commentStart": 3236, - "end": 3242, - "start": 3236, + "commentStart": 3260, + "end": 3266, + "start": 3260, "type": "TagDeclarator", "value": "seg06" }, @@ -8688,9 +8688,9 @@ description: Variables in memory after executing wing-spar.kcl 21.0 ], "tag": { - "commentStart": 3350, - "end": 3356, - "start": 3350, + "commentStart": 3377, + "end": 3383, + "start": 3377, "type": "TagDeclarator", "value": "seg07" }, @@ -8737,9 +8737,9 @@ description: Variables in memory after executing wing-spar.kcl 12.796 ], "tag": { - "commentStart": 3463, - "end": 3469, - "start": 3463, + "commentStart": 3493, + "end": 3499, + "start": 3493, "type": "TagDeclarator", "value": "seg08" }, @@ -8910,9 +8910,9 @@ description: Variables in memory after executing wing-spar.kcl 21.0 ], "tag": { - "commentStart": 3829, - "end": 3835, - "start": 3829, + "commentStart": 3868, + "end": 3874, + "start": 3868, "type": "TagDeclarator", "value": "seg09" }, diff --git a/rust/kcl-lib/tests/loop_tag/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/loop_tag/artifact_graph_flowchart.snap.md index b7755cb188..8da432c289 100644 --- a/rust/kcl-lib/tests/loop_tag/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/loop_tag/artifact_graph_flowchart.snap.md @@ -1,113 +1,113 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[733, 769, 0]"] + 2["Path
[736, 772, 0]"] %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 3["Segment
[923, 986, 0]"] + 3["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 4["Segment
[923, 986, 0]"] + 4["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 5["Segment
[923, 986, 0]"] + 5["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 6["Segment
[923, 986, 0]"] + 6["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 7["Segment
[923, 986, 0]"] + 7["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 8["Segment
[923, 986, 0]"] + 8["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 9["Segment
[923, 986, 0]"] + 9["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 10["Segment
[923, 986, 0]"] + 10["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 11["Segment
[923, 986, 0]"] + 11["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 12["Segment
[923, 986, 0]"] + 12["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 13["Segment
[923, 986, 0]"] + 13["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 14["Segment
[923, 986, 0]"] + 14["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 15["Segment
[923, 986, 0]"] + 15["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 16["Segment
[923, 986, 0]"] + 16["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 17["Segment
[923, 986, 0]"] + 17["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 18["Segment
[923, 986, 0]"] + 18["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 19["Segment
[923, 986, 0]"] + 19["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 20["Segment
[923, 986, 0]"] + 20["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 21["Segment
[923, 986, 0]"] + 21["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 22["Segment
[923, 986, 0]"] + 22["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 23["Segment
[923, 986, 0]"] + 23["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 24["Segment
[923, 986, 0]"] + 24["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 25["Segment
[923, 986, 0]"] + 25["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 26["Segment
[923, 986, 0]"] + 26["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 27["Segment
[923, 986, 0]"] + 27["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 28["Segment
[923, 986, 0]"] + 28["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 29["Segment
[923, 986, 0]"] + 29["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 30["Segment
[923, 986, 0]"] + 30["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 31["Segment
[923, 986, 0]"] + 31["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 32["Segment
[923, 986, 0]"] + 32["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 33["Segment
[923, 986, 0]"] + 33["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 34["Segment
[923, 986, 0]"] + 34["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 35["Segment
[923, 986, 0]"] + 35["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 36["Segment
[923, 986, 0]"] + 36["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 37["Segment
[923, 986, 0]"] + 37["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 38["Segment
[923, 986, 0]"] + 38["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 39["Segment
[923, 986, 0]"] + 39["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 40["Segment
[923, 986, 0]"] + 40["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 41["Segment
[923, 986, 0]"] + 41["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 42["Segment
[923, 986, 0]"] + 42["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 43["Segment
[923, 986, 0]"] + 43["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 44["Segment
[923, 986, 0]"] + 44["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 45["Segment
[923, 986, 0]"] + 45["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 46["Segment
[923, 986, 0]"] + 46["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 47["Segment
[923, 986, 0]"] + 47["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 48["Segment
[923, 986, 0]"] + 48["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 49["Segment
[923, 986, 0]"] + 49["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 50["Segment
[923, 986, 0]"] + 50["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 51["Segment
[923, 986, 0]"] + 51["Segment
[926, 989, 0]"] %% [ProgramBodyItem { index: 6 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 1 }, FunctionExpressionBody, FunctionExpressionBodyItem { index: 0 }, ReturnStatementArg] - 52["Segment
[1050, 1068, 0]"] + 52["Segment
[1053, 1071, 0]"] %% [ProgramBodyItem { index: 7 }, VariableDeclarationDeclaration, VariableDeclarationInit] 53[Solid2d] end - 1["Plane
[710, 727, 0]"] + 1["Plane
[713, 730, 0]"] %% [ProgramBodyItem { index: 5 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 54["Sweep Extrusion
[1122, 1160, 0]"] + 54["Sweep Extrusion
[1125, 1163, 0]"] %% [ProgramBodyItem { index: 8 }, VariableDeclarationDeclaration, VariableDeclarationInit] 55[Wall] %% face_code_ref=Missing NodePath diff --git a/rust/kcl-lib/tests/loop_tag/ast.snap b/rust/kcl-lib/tests/loop_tag/ast.snap index 1a893a3ce9..72debe325e 100644 --- a/rust/kcl-lib/tests/loop_tag/ast.snap +++ b/rust/kcl-lib/tests/loop_tag/ast.snap @@ -125,13 +125,13 @@ description: Result of parsing loop_tag.kcl "left": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } }, "operator": "/", diff --git a/rust/kcl-lib/tests/loop_tag/input.kcl b/rust/kcl-lib/tests/loop_tag/input.kcl index e86bf8abbd..0ad68c062c 100644 --- a/rust/kcl-lib/tests/loop_tag/input.kcl +++ b/rust/kcl-lib/tests/loop_tag/input.kcl @@ -9,7 +9,7 @@ radius = 10 height = 50 numSides = 50 -angleIncrement = 360 / numSides +angleIncrement = 360deg / numSides // Function to calculate the coordinates of a point on the circle fn calculatePoint(@index) { diff --git a/rust/kcl-lib/tests/loop_tag/ops.snap b/rust/kcl-lib/tests/loop_tag/ops.snap index d2d34b1674..0b74c4031b 100644 --- a/rust/kcl-lib/tests/loop_tag/ops.snap +++ b/rust/kcl-lib/tests/loop_tag/ops.snap @@ -110,13 +110,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 7.2, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -222,13 +218,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 0.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -471,13 +463,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 7.2, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -723,13 +711,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 14.4, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -975,13 +959,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 21.6, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1227,13 +1207,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 28.8, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1479,13 +1455,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 36.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1731,13 +1703,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 43.2, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -1983,13 +1951,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 50.4, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -2235,13 +2199,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 57.6, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -2487,13 +2447,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 64.8, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -2739,13 +2695,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 72.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -2991,13 +2943,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 79.2, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -3243,13 +3191,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 86.4, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -3495,13 +3439,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 93.60000000000001, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -3747,13 +3687,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 100.8, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -3999,13 +3935,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 108.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -4251,13 +4183,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 115.2, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -4503,13 +4431,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 122.4, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -4755,13 +4679,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 129.6, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -5007,13 +4927,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 136.8, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -5259,13 +5175,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 144.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -5511,13 +5423,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 151.20000000000002, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -5763,13 +5671,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 158.4, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -6015,13 +5919,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 165.6, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -6267,13 +6167,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 172.8, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -6519,13 +6415,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 180.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -6771,13 +6663,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 187.20000000000002, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -7023,13 +6911,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 194.4, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -7275,13 +7159,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 201.6, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -7527,13 +7407,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 208.8, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -7779,13 +7655,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 216.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -8031,13 +7903,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 223.20000000000002, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -8283,13 +8151,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 230.4, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -8535,13 +8399,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 237.6, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -8787,13 +8647,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 244.8, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -9039,13 +8895,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 252.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -9291,13 +9143,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 259.2, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -9543,13 +9391,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 266.40000000000003, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -9795,13 +9639,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 273.6, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -10047,13 +9887,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 280.8, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -10299,13 +10135,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 288.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -10551,13 +10383,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 295.2, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -10803,13 +10631,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 302.40000000000003, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -11055,13 +10879,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 309.6, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -11307,13 +11127,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 316.8, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -11559,13 +11375,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 324.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -11811,13 +11623,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 331.2, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -12063,13 +11871,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 338.40000000000003, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -12315,13 +12119,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 345.6, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -12567,13 +12367,9 @@ description: Operations executed loop_tag.kcl "type": "Number", "value": 352.8, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", diff --git a/rust/kcl-lib/tests/loop_tag/program_memory.snap b/rust/kcl-lib/tests/loop_tag/program_memory.snap index a9ba234e42..6ec6f4238d 100644 --- a/rust/kcl-lib/tests/loop_tag/program_memory.snap +++ b/rust/kcl-lib/tests/loop_tag/program_memory.snap @@ -7,13 +7,9 @@ description: Variables in memory after executing loop_tag.kcl "type": "Number", "value": 7.2, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "calculatePoint": { @@ -36,9 +32,9 @@ description: Variables in memory after executing loop_tag.kcl 0.0 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -61,9 +57,9 @@ description: Variables in memory after executing loop_tag.kcl 1.2533323356430426 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -86,9 +82,9 @@ description: Variables in memory after executing loop_tag.kcl 3.7402312072915906 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -111,9 +107,9 @@ description: Variables in memory after executing loop_tag.kcl 7.42147673413837 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -136,9 +132,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239013475155524 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -161,9 +157,9 @@ description: Variables in memory after executing loop_tag.kcl 18.116865998080257 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -186,9 +182,9 @@ description: Variables in memory after executing loop_tag.kcl 24.962337057367144 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -211,9 +207,9 @@ description: Variables in memory after executing loop_tag.kcl 32.66746948512503 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -236,9 +232,9 @@ description: Variables in memory after executing loop_tag.kcl 41.11074874014518 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -261,9 +257,9 @@ description: Variables in memory after executing loop_tag.kcl 50.15901926480538 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -286,9 +282,9 @@ description: Variables in memory after executing loop_tag.kcl 59.66958442775692 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -311,9 +307,9 @@ description: Variables in memory after executing loop_tag.kcl 69.4924569350438 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -336,9 +332,9 @@ description: Variables in memory after executing loop_tag.kcl 79.47272421932652 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -361,9 +357,9 @@ description: Variables in memory after executing loop_tag.kcl 89.45299150360924 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -386,9 +382,9 @@ description: Variables in memory after executing loop_tag.kcl 99.27586401089613 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -411,9 +407,9 @@ description: Variables in memory after executing loop_tag.kcl 108.78642917384767 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -436,9 +432,9 @@ description: Variables in memory after executing loop_tag.kcl 117.83469969850786 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -461,9 +457,9 @@ description: Variables in memory after executing loop_tag.kcl 126.277978953528 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -486,9 +482,9 @@ description: Variables in memory after executing loop_tag.kcl 133.9831113812859 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -511,9 +507,9 @@ description: Variables in memory after executing loop_tag.kcl 140.8285824405728 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -536,9 +532,9 @@ description: Variables in memory after executing loop_tag.kcl 146.70643496349754 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -561,9 +557,9 @@ description: Variables in memory after executing loop_tag.kcl 151.5239717045147 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -586,9 +582,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052172313615 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -611,9 +607,9 @@ description: Variables in memory after executing loop_tag.kcl 157.69211610301005 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -636,9 +632,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454484386531 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -661,9 +657,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454484386531 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -686,9 +682,9 @@ description: Variables in memory after executing loop_tag.kcl 157.69211610301005 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -711,9 +707,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052172313615 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -736,9 +732,9 @@ description: Variables in memory after executing loop_tag.kcl 151.52397170451474 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -761,9 +757,9 @@ description: Variables in memory after executing loop_tag.kcl 146.70643496349757 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -786,9 +782,9 @@ description: Variables in memory after executing loop_tag.kcl 140.82858244057283 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -811,9 +807,9 @@ description: Variables in memory after executing loop_tag.kcl 133.98311138128594 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -836,9 +832,9 @@ description: Variables in memory after executing loop_tag.kcl 126.27797895352805 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -861,9 +857,9 @@ description: Variables in memory after executing loop_tag.kcl 117.83469969850789 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -886,9 +882,9 @@ description: Variables in memory after executing loop_tag.kcl 108.7864291738477 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -911,9 +907,9 @@ description: Variables in memory after executing loop_tag.kcl 99.27586401089616 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -936,9 +932,9 @@ description: Variables in memory after executing loop_tag.kcl 89.45299150360927 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -961,9 +957,9 @@ description: Variables in memory after executing loop_tag.kcl 79.47272421932655 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -986,9 +982,9 @@ description: Variables in memory after executing loop_tag.kcl 69.49245693504383 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1011,9 +1007,9 @@ description: Variables in memory after executing loop_tag.kcl 59.669584427756945 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1036,9 +1032,9 @@ description: Variables in memory after executing loop_tag.kcl 50.15901926480541 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1061,9 +1057,9 @@ description: Variables in memory after executing loop_tag.kcl 41.11074874014521 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1086,9 +1082,9 @@ description: Variables in memory after executing loop_tag.kcl 32.66746948512506 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1111,9 +1107,9 @@ description: Variables in memory after executing loop_tag.kcl 24.962337057367172 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1136,9 +1132,9 @@ description: Variables in memory after executing loop_tag.kcl 18.116865998080282 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1161,9 +1157,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239013475155549 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1186,9 +1182,9 @@ description: Variables in memory after executing loop_tag.kcl 7.421476734138388 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1211,9 +1207,9 @@ description: Variables in memory after executing loop_tag.kcl 3.740231207291609 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1236,9 +1232,9 @@ description: Variables in memory after executing loop_tag.kcl 1.253332335643064 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1344,9 +1340,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1357,9 +1353,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1370,9 +1366,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1383,9 +1379,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1396,9 +1392,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1409,9 +1405,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1422,9 +1418,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1435,9 +1431,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1448,9 +1444,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1461,9 +1457,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1474,9 +1470,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1487,9 +1483,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1500,9 +1496,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1513,9 +1509,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1526,9 +1522,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1539,9 +1535,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1552,9 +1548,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1565,9 +1561,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1578,9 +1574,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1591,9 +1587,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1604,9 +1600,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1617,9 +1613,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1630,9 +1626,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1643,9 +1639,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1656,9 +1652,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1669,9 +1665,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1682,9 +1678,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1695,9 +1691,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1708,9 +1704,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1721,9 +1717,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1734,9 +1730,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1747,9 +1743,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1760,9 +1756,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1773,9 +1769,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1786,9 +1782,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1799,9 +1795,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1812,9 +1808,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1825,9 +1821,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1838,9 +1834,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1851,9 +1847,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1864,9 +1860,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1877,9 +1873,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1890,9 +1886,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1903,9 +1899,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1916,9 +1912,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1929,9 +1925,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1942,9 +1938,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1955,9 +1951,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1968,9 +1964,9 @@ description: Variables in memory after executing loop_tag.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -1998,9 +1994,9 @@ description: Variables in memory after executing loop_tag.kcl 0.0 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2023,9 +2019,9 @@ description: Variables in memory after executing loop_tag.kcl 1.2533323356430426 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2048,9 +2044,9 @@ description: Variables in memory after executing loop_tag.kcl 3.7402312072915906 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2073,9 +2069,9 @@ description: Variables in memory after executing loop_tag.kcl 7.42147673413837 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2098,9 +2094,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239013475155524 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2123,9 +2119,9 @@ description: Variables in memory after executing loop_tag.kcl 18.116865998080257 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2148,9 +2144,9 @@ description: Variables in memory after executing loop_tag.kcl 24.962337057367144 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2173,9 +2169,9 @@ description: Variables in memory after executing loop_tag.kcl 32.66746948512503 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2198,9 +2194,9 @@ description: Variables in memory after executing loop_tag.kcl 41.11074874014518 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2223,9 +2219,9 @@ description: Variables in memory after executing loop_tag.kcl 50.15901926480538 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2248,9 +2244,9 @@ description: Variables in memory after executing loop_tag.kcl 59.66958442775692 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2273,9 +2269,9 @@ description: Variables in memory after executing loop_tag.kcl 69.4924569350438 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2298,9 +2294,9 @@ description: Variables in memory after executing loop_tag.kcl 79.47272421932652 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2323,9 +2319,9 @@ description: Variables in memory after executing loop_tag.kcl 89.45299150360924 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2348,9 +2344,9 @@ description: Variables in memory after executing loop_tag.kcl 99.27586401089613 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2373,9 +2369,9 @@ description: Variables in memory after executing loop_tag.kcl 108.78642917384767 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2398,9 +2394,9 @@ description: Variables in memory after executing loop_tag.kcl 117.83469969850786 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2423,9 +2419,9 @@ description: Variables in memory after executing loop_tag.kcl 126.277978953528 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2448,9 +2444,9 @@ description: Variables in memory after executing loop_tag.kcl 133.9831113812859 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2473,9 +2469,9 @@ description: Variables in memory after executing loop_tag.kcl 140.8285824405728 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2498,9 +2494,9 @@ description: Variables in memory after executing loop_tag.kcl 146.70643496349754 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2523,9 +2519,9 @@ description: Variables in memory after executing loop_tag.kcl 151.5239717045147 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2548,9 +2544,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052172313615 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2573,9 +2569,9 @@ description: Variables in memory after executing loop_tag.kcl 157.69211610301005 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2598,9 +2594,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454484386531 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2623,9 +2619,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454484386531 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2648,9 +2644,9 @@ description: Variables in memory after executing loop_tag.kcl 157.69211610301005 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2673,9 +2669,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052172313615 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2698,9 +2694,9 @@ description: Variables in memory after executing loop_tag.kcl 151.52397170451474 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2723,9 +2719,9 @@ description: Variables in memory after executing loop_tag.kcl 146.70643496349757 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2748,9 +2744,9 @@ description: Variables in memory after executing loop_tag.kcl 140.82858244057283 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2773,9 +2769,9 @@ description: Variables in memory after executing loop_tag.kcl 133.98311138128594 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2798,9 +2794,9 @@ description: Variables in memory after executing loop_tag.kcl 126.27797895352805 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2823,9 +2819,9 @@ description: Variables in memory after executing loop_tag.kcl 117.83469969850789 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2848,9 +2844,9 @@ description: Variables in memory after executing loop_tag.kcl 108.7864291738477 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2873,9 +2869,9 @@ description: Variables in memory after executing loop_tag.kcl 99.27586401089616 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2898,9 +2894,9 @@ description: Variables in memory after executing loop_tag.kcl 89.45299150360927 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2923,9 +2919,9 @@ description: Variables in memory after executing loop_tag.kcl 79.47272421932655 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2948,9 +2944,9 @@ description: Variables in memory after executing loop_tag.kcl 69.49245693504383 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2973,9 +2969,9 @@ description: Variables in memory after executing loop_tag.kcl 59.669584427756945 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -2998,9 +2994,9 @@ description: Variables in memory after executing loop_tag.kcl 50.15901926480541 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3023,9 +3019,9 @@ description: Variables in memory after executing loop_tag.kcl 41.11074874014521 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3048,9 +3044,9 @@ description: Variables in memory after executing loop_tag.kcl 32.66746948512506 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3073,9 +3069,9 @@ description: Variables in memory after executing loop_tag.kcl 24.962337057367172 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3098,9 +3094,9 @@ description: Variables in memory after executing loop_tag.kcl 18.116865998080282 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3123,9 +3119,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239013475155549 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3148,9 +3144,9 @@ description: Variables in memory after executing loop_tag.kcl 7.421476734138388 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3173,9 +3169,9 @@ description: Variables in memory after executing loop_tag.kcl 3.740231207291609 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3198,9 +3194,9 @@ description: Variables in memory after executing loop_tag.kcl 1.253332335643064 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3318,9 +3314,9 @@ description: Variables in memory after executing loop_tag.kcl 0.0 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3343,9 +3339,9 @@ description: Variables in memory after executing loop_tag.kcl 1.2533323356430426 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3368,9 +3364,9 @@ description: Variables in memory after executing loop_tag.kcl 3.7402312072915906 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3393,9 +3389,9 @@ description: Variables in memory after executing loop_tag.kcl 7.42147673413837 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3418,9 +3414,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239013475155524 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3443,9 +3439,9 @@ description: Variables in memory after executing loop_tag.kcl 18.116865998080257 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3468,9 +3464,9 @@ description: Variables in memory after executing loop_tag.kcl 24.962337057367144 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3493,9 +3489,9 @@ description: Variables in memory after executing loop_tag.kcl 32.66746948512503 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3518,9 +3514,9 @@ description: Variables in memory after executing loop_tag.kcl 41.11074874014518 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3543,9 +3539,9 @@ description: Variables in memory after executing loop_tag.kcl 50.15901926480538 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3568,9 +3564,9 @@ description: Variables in memory after executing loop_tag.kcl 59.66958442775692 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3593,9 +3589,9 @@ description: Variables in memory after executing loop_tag.kcl 69.4924569350438 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3618,9 +3614,9 @@ description: Variables in memory after executing loop_tag.kcl 79.47272421932652 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3643,9 +3639,9 @@ description: Variables in memory after executing loop_tag.kcl 89.45299150360924 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3668,9 +3664,9 @@ description: Variables in memory after executing loop_tag.kcl 99.27586401089613 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3693,9 +3689,9 @@ description: Variables in memory after executing loop_tag.kcl 108.78642917384767 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3718,9 +3714,9 @@ description: Variables in memory after executing loop_tag.kcl 117.83469969850786 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3743,9 +3739,9 @@ description: Variables in memory after executing loop_tag.kcl 126.277978953528 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3768,9 +3764,9 @@ description: Variables in memory after executing loop_tag.kcl 133.9831113812859 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3793,9 +3789,9 @@ description: Variables in memory after executing loop_tag.kcl 140.8285824405728 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3818,9 +3814,9 @@ description: Variables in memory after executing loop_tag.kcl 146.70643496349754 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3843,9 +3839,9 @@ description: Variables in memory after executing loop_tag.kcl 151.5239717045147 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3868,9 +3864,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052172313615 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3893,9 +3889,9 @@ description: Variables in memory after executing loop_tag.kcl 157.69211610301005 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3918,9 +3914,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454484386531 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3943,9 +3939,9 @@ description: Variables in memory after executing loop_tag.kcl 158.9454484386531 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3968,9 +3964,9 @@ description: Variables in memory after executing loop_tag.kcl 157.69211610301005 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -3993,9 +3989,9 @@ description: Variables in memory after executing loop_tag.kcl 155.2052172313615 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4018,9 +4014,9 @@ description: Variables in memory after executing loop_tag.kcl 151.52397170451474 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4043,9 +4039,9 @@ description: Variables in memory after executing loop_tag.kcl 146.70643496349757 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4068,9 +4064,9 @@ description: Variables in memory after executing loop_tag.kcl 140.82858244057283 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4093,9 +4089,9 @@ description: Variables in memory after executing loop_tag.kcl 133.98311138128594 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4118,9 +4114,9 @@ description: Variables in memory after executing loop_tag.kcl 126.27797895352805 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4143,9 +4139,9 @@ description: Variables in memory after executing loop_tag.kcl 117.83469969850789 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4168,9 +4164,9 @@ description: Variables in memory after executing loop_tag.kcl 108.7864291738477 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4193,9 +4189,9 @@ description: Variables in memory after executing loop_tag.kcl 99.27586401089616 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4218,9 +4214,9 @@ description: Variables in memory after executing loop_tag.kcl 89.45299150360927 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4243,9 +4239,9 @@ description: Variables in memory after executing loop_tag.kcl 79.47272421932655 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4268,9 +4264,9 @@ description: Variables in memory after executing loop_tag.kcl 69.49245693504383 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4293,9 +4289,9 @@ description: Variables in memory after executing loop_tag.kcl 59.669584427756945 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4318,9 +4314,9 @@ description: Variables in memory after executing loop_tag.kcl 50.15901926480541 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4343,9 +4339,9 @@ description: Variables in memory after executing loop_tag.kcl 41.11074874014521 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4368,9 +4364,9 @@ description: Variables in memory after executing loop_tag.kcl 32.66746948512506 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4393,9 +4389,9 @@ description: Variables in memory after executing loop_tag.kcl 24.962337057367172 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4418,9 +4414,9 @@ description: Variables in memory after executing loop_tag.kcl 18.116865998080282 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4443,9 +4439,9 @@ description: Variables in memory after executing loop_tag.kcl 12.239013475155549 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4468,9 +4464,9 @@ description: Variables in memory after executing loop_tag.kcl 7.421476734138388 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4493,9 +4489,9 @@ description: Variables in memory after executing loop_tag.kcl 3.740231207291609 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, @@ -4518,9 +4514,9 @@ description: Variables in memory after executing loop_tag.kcl 1.253332335643064 ], "tag": { - "commentStart": 970, - "end": 985, - "start": 970, + "commentStart": 973, + "end": 988, + "start": 973, "type": "TagDeclarator", "value": "problematicTag" }, diff --git a/rust/kcl-lib/tests/loop_tag/unparsed.snap b/rust/kcl-lib/tests/loop_tag/unparsed.snap index 0543b6ccbf..dfbaf0b3ae 100644 --- a/rust/kcl-lib/tests/loop_tag/unparsed.snap +++ b/rust/kcl-lib/tests/loop_tag/unparsed.snap @@ -16,7 +16,7 @@ description: Result of unparsing loop_tag.kcl radius = 10 height = 50 numSides = 50 -angleIncrement = 360 / numSides +angleIncrement = 360deg / numSides // Function to calculate the coordinates of a point on the circle fn calculatePoint(@index) { diff --git a/rust/kcl-lib/tests/parametric_with_tan_arc/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/parametric_with_tan_arc/artifact_graph_flowchart.snap.md index 5960b0c851..b0387e542d 100644 --- a/rust/kcl-lib/tests/parametric_with_tan_arc/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/parametric_with_tan_arc/artifact_graph_flowchart.snap.md @@ -5,25 +5,25 @@ flowchart LR %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] 3["Segment
[293, 320, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] - 4["Segment
[326, 369, 0]"] + 4["Segment
[326, 372, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 5["Segment
[375, 404, 0]"] + 5["Segment
[378, 407, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] - 6["Segment
[410, 437, 0]"] + 6["Segment
[413, 440, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] - 7["Segment
[443, 471, 0]"] + 7["Segment
[446, 474, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 8["Segment
[477, 533, 0]"] + 8["Segment
[480, 539, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 9["Segment
[539, 567, 0]"] + 9["Segment
[545, 573, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] - 10["Segment
[573, 581, 0]"] + 10["Segment
[579, 587, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] 11[Solid2d] end 1["Plane
[239, 256, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 12["Sweep Extrusion
[587, 610, 0]"] + 12["Sweep Extrusion
[593, 616, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }] 13[Wall] %% face_code_ref=Missing NodePath diff --git a/rust/kcl-lib/tests/parametric_with_tan_arc/ast.snap b/rust/kcl-lib/tests/parametric_with_tan_arc/ast.snap index 573424d62e..2afd33790b 100644 --- a/rust/kcl-lib/tests/parametric_with_tan_arc/ast.snap +++ b/rust/kcl-lib/tests/parametric_with_tan_arc/ast.snap @@ -700,13 +700,13 @@ description: Result of parsing parametric_with_tan_arc.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } } @@ -1030,13 +1030,13 @@ description: Result of parsing parametric_with_tan_arc.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, diff --git a/rust/kcl-lib/tests/parametric_with_tan_arc/input.kcl b/rust/kcl-lib/tests/parametric_with_tan_arc/input.kcl index 76226836cf..8fe1704dd1 100644 --- a/rust/kcl-lib/tests/parametric_with_tan_arc/input.kcl +++ b/rust/kcl-lib/tests/parametric_with_tan_arc/input.kcl @@ -11,11 +11,11 @@ wallMountL = 8 bracket = startSketchOn(XY) |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL]) - |> tangentialArc(radius = filletR, angle = 90) + |> tangentialArc(radius = filletR, angle = 90deg) |> line(end = [-shelfMountL, 0]) |> line(end = [0, -thickness]) |> line(end = [shelfMountL, 0]) - |> tangentialArc(radius = filletR - thickness, angle = -90) + |> tangentialArc(radius = filletR - thickness, angle = -90deg) |> line(end = [0, -wallMountL]) |> close(%) |> extrude(length = width) diff --git a/rust/kcl-lib/tests/parametric_with_tan_arc/unparsed.snap b/rust/kcl-lib/tests/parametric_with_tan_arc/unparsed.snap index 61aad4046f..32cffa24b4 100644 --- a/rust/kcl-lib/tests/parametric_with_tan_arc/unparsed.snap +++ b/rust/kcl-lib/tests/parametric_with_tan_arc/unparsed.snap @@ -15,11 +15,11 @@ wallMountL = 8 bracket = startSketchOn(XY) |> startProfile(at = [0, 0]) |> line(end = [0, wallMountL]) - |> tangentialArc(radius = filletR, angle = 90) + |> tangentialArc(radius = filletR, angle = 90deg) |> line(end = [-shelfMountL, 0]) |> line(end = [0, -thickness]) |> line(end = [shelfMountL, 0]) - |> tangentialArc(radius = filletR - thickness, angle = -90) + |> tangentialArc(radius = filletR - thickness, angle = -90deg) |> line(end = [0, -wallMountL]) |> close(%) |> extrude(length = width) diff --git a/rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap.md index b914b1d6a2..0d1ecac84f 100644 --- a/rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/subtract_regression10/artifact_graph_flowchart.snap.md @@ -7,279 +7,279 @@ flowchart LR %% [ProgramBodyItem { index: 8 }, ExpressionStatementExpr, PipeBodyItem { index: 1 }] 4["Segment
[614, 787, 0]"] %% [ProgramBodyItem { index: 8 }, ExpressionStatementExpr, PipeBodyItem { index: 2 }] - 5["Segment
[793, 857, 0]"] + 5["Segment
[793, 860, 0]"] %% [ProgramBodyItem { index: 8 }, ExpressionStatementExpr, PipeBodyItem { index: 3 }] end subgraph path7 [Path] - 7["Path
[1105, 1249, 0]"] + 7["Path
[1108, 1252, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 8["Segment
[1255, 1279, 0]"] + 8["Segment
[1258, 1282, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] - 9["Segment
[1285, 1303, 0]"] + 9["Segment
[1288, 1306, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 10["Segment
[1309, 1327, 0]"] + 10["Segment
[1312, 1330, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] - 11["Segment
[1333, 1351, 0]"] + 11["Segment
[1336, 1354, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] - 12["Segment
[1357, 1374, 0]"] + 12["Segment
[1360, 1377, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 13["Segment
[1380, 1398, 0]"] + 13["Segment
[1383, 1401, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 14["Segment
[1404, 1422, 0]"] + 14["Segment
[1407, 1425, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] - 15["Segment
[1428, 1446, 0]"] + 15["Segment
[1431, 1449, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] - 16["Segment
[1452, 1469, 0]"] + 16["Segment
[1455, 1472, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }] - 17["Segment
[1475, 1493, 0]"] + 17["Segment
[1478, 1496, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 11 }] - 18["Segment
[1499, 1517, 0]"] + 18["Segment
[1502, 1520, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 12 }] - 19["Segment
[1523, 1541, 0]"] + 19["Segment
[1526, 1544, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 13 }] - 20["Segment
[1547, 1564, 0]"] + 20["Segment
[1550, 1567, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 14 }] - 21["Segment
[1570, 1626, 0]"] + 21["Segment
[1573, 1629, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 15 }] - 22["Segment
[1632, 1650, 0]"] + 22["Segment
[1635, 1653, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 16 }] - 23["Segment
[1656, 1710, 0]"] + 23["Segment
[1659, 1713, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 17 }] - 24["Segment
[1716, 1760, 0]"] + 24["Segment
[1719, 1766, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 18 }] - 25["Segment
[1766, 1803, 0]"] + 25["Segment
[1772, 1809, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 19 }] - 26["Segment
[1809, 1865, 0]"] + 26["Segment
[1815, 1871, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 27["Segment
[1871, 1878, 0]"] + 27["Segment
[1877, 1884, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 21 }] 28[Solid2d] end subgraph path69 [Path] - 69["Path
[2014, 2178, 0]"] + 69["Path
[2020, 2184, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 70["Segment
[2184, 2217, 0]"] + 70["Segment
[2190, 2223, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] - 71["Segment
[2223, 2244, 0]"] + 71["Segment
[2229, 2250, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 72["Segment
[2250, 2287, 0]"] + 72["Segment
[2256, 2293, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] - 73["Segment
[2293, 2349, 0]"] + 73["Segment
[2299, 2355, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] - 74["Segment
[2355, 2362, 0]"] + 74["Segment
[2361, 2368, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] 75[Solid2d] end subgraph path94 [Path] - 94["Path
[2795, 3000, 0]"] + 94["Path
[2804, 3009, 0]"] %% [ProgramBodyItem { index: 13 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 95["Segment
[2795, 3000, 0]"] + 95["Segment
[2804, 3009, 0]"] %% [ProgramBodyItem { index: 13 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] 96[Solid2d] end subgraph path105 [Path] - 105["Path
[3228, 3394, 0]"] + 105["Path
[3237, 3403, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 106["Segment
[3400, 3418, 0]"] + 106["Segment
[3409, 3427, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] - 107["Segment
[3424, 3606, 0]"] + 107["Segment
[3433, 3615, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 108["Segment
[3612, 3634, 0]"] + 108["Segment
[3621, 3643, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] - 109["Segment
[3640, 3662, 0]"] + 109["Segment
[3649, 3671, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] - 110["Segment
[3668, 3686, 0]"] + 110["Segment
[3677, 3695, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 111["Segment
[3668, 3686, 0]"] + 111["Segment
[3677, 3695, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 112["Segment
[3668, 3686, 0]"] + 112["Segment
[3677, 3695, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 113["Segment
[3668, 3686, 0]"] + 113["Segment
[3677, 3695, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 114["Segment
[3668, 3686, 0]"] + 114["Segment
[3677, 3695, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 115["Segment
[3668, 3686, 0]"] + 115["Segment
[3677, 3695, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 116["Segment
[3668, 3686, 0]"] + 116["Segment
[3677, 3695, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 117["Segment
[3692, 3699, 0]"] + 117["Segment
[3701, 3708, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] 118[Solid2d] end subgraph path145 [Path] - 145["Path
[3956, 4116, 0]"] + 145["Path
[3965, 4125, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 146["Segment
[4122, 4186, 0]"] + 146["Segment
[4131, 4198, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] - 147["Segment
[4192, 4229, 0]"] + 147["Segment
[4204, 4244, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 148["Segment
[4235, 4299, 0]"] + 148["Segment
[4250, 4317, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] - 149["Segment
[4305, 4343, 0]"] + 149["Segment
[4323, 4364, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] - 150["Segment
[4349, 4413, 0]"] + 150["Segment
[4370, 4437, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 151["Segment
[4419, 4482, 0]"] + 151["Segment
[4443, 4506, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 152["Segment
[4488, 4552, 0]"] + 152["Segment
[4512, 4579, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] - 153["Segment
[4558, 4596, 0]"] + 153["Segment
[4585, 4626, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] - 154["Segment
[4602, 4666, 0]"] + 154["Segment
[4632, 4699, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 10 }] - 155["Segment
[4672, 4720, 0]"] + 155["Segment
[4705, 4756, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 11 }] - 156["Segment
[4726, 4822, 0]"] + 156["Segment
[4762, 4858, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 12 }] - 157["Segment
[4828, 4866, 0]"] + 157["Segment
[4864, 4905, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 13 }] - 158["Segment
[4872, 4936, 0]"] + 158["Segment
[4911, 4978, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 14 }] - 159["Segment
[4942, 4980, 0]"] + 159["Segment
[4984, 5025, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 15 }] - 160["Segment
[4986, 5050, 0]"] + 160["Segment
[5031, 5098, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 16 }] - 161["Segment
[5056, 5151, 0]"] + 161["Segment
[5104, 5199, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 17 }] - 162["Segment
[5157, 5257, 0]"] + 162["Segment
[5205, 5308, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 18 }] - 163["Segment
[5263, 5340, 0]"] + 163["Segment
[5314, 5394, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 19 }] - 164["Segment
[5346, 5368, 0]"] + 164["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 165["Segment
[5346, 5368, 0]"] + 165["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 166["Segment
[5346, 5368, 0]"] + 166["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 167["Segment
[5346, 5368, 0]"] + 167["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 168["Segment
[5346, 5368, 0]"] + 168["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 169["Segment
[5346, 5368, 0]"] + 169["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 170["Segment
[5346, 5368, 0]"] + 170["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 171["Segment
[5346, 5368, 0]"] + 171["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 172["Segment
[5346, 5368, 0]"] + 172["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 173["Segment
[5346, 5368, 0]"] + 173["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 174["Segment
[5346, 5368, 0]"] + 174["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 175["Segment
[5346, 5368, 0]"] + 175["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 176["Segment
[5346, 5368, 0]"] + 176["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 177["Segment
[5346, 5368, 0]"] + 177["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 178["Segment
[5346, 5368, 0]"] + 178["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 179["Segment
[5346, 5368, 0]"] + 179["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 180["Segment
[5346, 5368, 0]"] + 180["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 181["Segment
[5346, 5368, 0]"] + 181["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 182["Segment
[5346, 5368, 0]"] + 182["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 183["Segment
[5346, 5368, 0]"] + 183["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 184["Segment
[5346, 5368, 0]"] + 184["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 185["Segment
[5346, 5368, 0]"] + 185["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 186["Segment
[5346, 5368, 0]"] + 186["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 187["Segment
[5346, 5368, 0]"] + 187["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 188["Segment
[5346, 5368, 0]"] + 188["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 189["Segment
[5346, 5368, 0]"] + 189["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 190["Segment
[5346, 5368, 0]"] + 190["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 191["Segment
[5346, 5368, 0]"] + 191["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 192["Segment
[5346, 5368, 0]"] + 192["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 193["Segment
[5346, 5368, 0]"] + 193["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 194["Segment
[5346, 5368, 0]"] + 194["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 195["Segment
[5346, 5368, 0]"] + 195["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 196["Segment
[5346, 5368, 0]"] + 196["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 197["Segment
[5346, 5368, 0]"] + 197["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 198["Segment
[5346, 5368, 0]"] + 198["Segment
[5400, 5422, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 20 }] - 199["Segment
[5374, 5381, 0]"] + 199["Segment
[5428, 5435, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 21 }] 200[Solid2d] end subgraph path310 [Path] - 310["Path
[5900, 5941, 0]"] + 310["Path
[5954, 5995, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 311["Segment
[5947, 5964, 0]"] + 311["Segment
[6001, 6018, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] - 312["Segment
[5970, 6007, 0]"] + 312["Segment
[6024, 6064, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 313["Segment
[6013, 6069, 0]"] + 313["Segment
[6070, 6126, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] - 314["Segment
[6075, 6112, 0]"] + 314["Segment
[6132, 6172, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] - 315["Segment
[6118, 6155, 0]"] + 315["Segment
[6178, 6215, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 6 }] - 316["Segment
[6161, 6179, 0]"] + 316["Segment
[6221, 6239, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 317["Segment
[6161, 6179, 0]"] + 317["Segment
[6221, 6239, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 318["Segment
[6161, 6179, 0]"] + 318["Segment
[6221, 6239, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 319["Segment
[6161, 6179, 0]"] + 319["Segment
[6221, 6239, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 320["Segment
[6161, 6179, 0]"] + 320["Segment
[6221, 6239, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 321["Segment
[6161, 6179, 0]"] + 321["Segment
[6221, 6239, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 322["Segment
[6161, 6179, 0]"] + 322["Segment
[6221, 6239, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 323["Segment
[6161, 6179, 0]"] + 323["Segment
[6221, 6239, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 324["Segment
[6161, 6179, 0]"] + 324["Segment
[6221, 6239, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] - 325["Segment
[6185, 6192, 0]"] + 325["Segment
[6245, 6252, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] 326[Solid2d] end subgraph path359 [Path] - 359["Path
[6473, 6567, 0]"] + 359["Path
[6533, 6627, 0]"] %% [ProgramBodyItem { index: 21 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 360["Segment
[6473, 6567, 0]"] + 360["Segment
[6533, 6627, 0]"] %% [ProgramBodyItem { index: 21 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] 361[Solid2d] end subgraph path368 [Path] - 368["Path
[6627, 6829, 0]"] + 368["Path
[6687, 6889, 0]"] %% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 369["Segment
[6627, 6829, 0]"] + 369["Segment
[6687, 6889, 0]"] %% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] 370[Solid2d] end subgraph path380 [Path] - 380["Path
[7102, 7138, 0]"] + 380["Path
[7162, 7198, 0]"] %% [ProgramBodyItem { index: 24 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] - 381["Segment
[7102, 7138, 0]"] + 381["Segment
[7162, 7198, 0]"] %% [ProgramBodyItem { index: 24 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] 382[Solid2d] end 1["Plane
[479, 496, 0]"] %% [ProgramBodyItem { index: 7 }, VariableDeclarationDeclaration, VariableDeclarationInit] - 6["Plane
[1082, 1099, 0]"] + 6["Plane
[1085, 1102, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 29["Sweep Revolve
[1884, 1914, 0]"] + 29["Sweep Revolve
[1890, 1920, 0]"] %% [ProgramBodyItem { index: 9 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 22 }] 30[Wall] %% face_code_ref=Missing NodePath @@ -338,9 +338,9 @@ flowchart LR 65["SweepEdge Adjacent"] 66["SweepEdge Adjacent"] 67["SweepEdge Adjacent"] - 68["Plane
[1991, 2008, 0]"] + 68["Plane
[1997, 2014, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 76["Sweep Extrusion
[2368, 2407, 0]"] + 76["Sweep Extrusion
[2374, 2413, 0]"] %% [ProgramBodyItem { index: 10 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 7 }] 77[Wall] %% face_code_ref=Missing NodePath @@ -362,13 +362,13 @@ flowchart LR 88["SweepEdge Adjacent"] 89["SweepEdge Opposite"] 90["SweepEdge Adjacent"] - 91["CompositeSolid Union
[2708, 2724, 0]"] + 91["CompositeSolid Union
[2717, 2733, 0]"] %% [ProgramBodyItem { index: 12 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 0 }] - 92["CompositeSolid Subtract
[2677, 2725, 0]"] + 92["CompositeSolid Subtract
[2686, 2734, 0]"] %% [ProgramBodyItem { index: 12 }, VariableDeclarationDeclaration, VariableDeclarationInit] - 93["Plane
[2772, 2789, 0]"] + 93["Plane
[2781, 2798, 0]"] %% [ProgramBodyItem { index: 13 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 97["Sweep Extrusion
[3006, 3046, 0]"] + 97["Sweep Extrusion
[3015, 3055, 0]"] %% [ProgramBodyItem { index: 13 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] 98[Wall] %% face_code_ref=Missing NodePath @@ -378,11 +378,11 @@ flowchart LR %% face_code_ref=Missing NodePath 101["SweepEdge Opposite"] 102["SweepEdge Adjacent"] - 103["EdgeCut Fillet
[3052, 3126, 0]"] + 103["EdgeCut Fillet
[3061, 3135, 0]"] %% [ProgramBodyItem { index: 13 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 104["Plane
[3205, 3222, 0]"] + 104["Plane
[3214, 3231, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 119["Sweep Extrusion
[3705, 3744, 0]"] + 119["Sweep Extrusion
[3714, 3753, 0]"] %% [ProgramBodyItem { index: 14 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 8 }] 120[Wall] %% face_code_ref=Missing NodePath @@ -416,11 +416,11 @@ flowchart LR 140["SweepEdge Adjacent"] 141["SweepEdge Opposite"] 142["SweepEdge Adjacent"] - 143["CompositeSolid Subtract
[3781, 3825, 0]"] + 143["CompositeSolid Subtract
[3790, 3834, 0]"] %% [ProgramBodyItem { index: 15 }, VariableDeclarationDeclaration, VariableDeclarationInit] - 144["Plane
[3933, 3950, 0]"] + 144["Plane
[3942, 3959, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 201["Sweep Extrusion
[5387, 5425, 0]"] + 201["Sweep Extrusion
[5441, 5479, 0]"] %% [ProgramBodyItem { index: 16 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 22 }] 202[Wall] %% face_code_ref=Missing NodePath @@ -566,9 +566,9 @@ flowchart LR 306["SweepEdge Adjacent"] 307["SweepEdge Opposite"] 308["SweepEdge Adjacent"] - 309["Plane
[5861, 5894, 0]"] + 309["Plane
[5915, 5948, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 327["Sweep Extrusion
[6198, 6237, 0]"] + 327["Sweep Extrusion
[6258, 6297, 0]"] %% [ProgramBodyItem { index: 18 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 9 }] 328[Wall] %% face_code_ref=Missing NodePath @@ -610,11 +610,11 @@ flowchart LR 354["SweepEdge Adjacent"] 355["SweepEdge Opposite"] 356["SweepEdge Adjacent"] - 357["CompositeSolid Intersect
[6268, 6327, 0]"] + 357["CompositeSolid Intersect
[6328, 6387, 0]"] %% [ProgramBodyItem { index: 19 }, VariableDeclarationDeclaration, VariableDeclarationInit] - 358["Plane
[6443, 6460, 0]"] + 358["Plane
[6503, 6520, 0]"] %% [ProgramBodyItem { index: 20 }, VariableDeclarationDeclaration, VariableDeclarationInit] - 362["Sweep Extrusion
[6573, 6611, 0]"] + 362["Sweep Extrusion
[6633, 6671, 0]"] %% [ProgramBodyItem { index: 21 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] 363[Wall] %% face_code_ref=Missing NodePath @@ -624,7 +624,7 @@ flowchart LR %% face_code_ref=Missing NodePath 366["SweepEdge Opposite"] 367["SweepEdge Adjacent"] - 371["Sweep Extrusion
[6835, 6873, 0]"] + 371["Sweep Extrusion
[6895, 6933, 0]"] %% [ProgramBodyItem { index: 22 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] 372[Wall] %% face_code_ref=Missing NodePath @@ -634,13 +634,13 @@ flowchart LR %% face_code_ref=Missing NodePath 375["SweepEdge Opposite"] 376["SweepEdge Adjacent"] - 377["CompositeSolid Union
[6973, 7005, 0]"] + 377["CompositeSolid Union
[7033, 7065, 0]"] %% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 0 }] - 378["CompositeSolid Subtract
[6926, 7006, 0]"] + 378["CompositeSolid Subtract
[6986, 7066, 0]"] %% [ProgramBodyItem { index: 23 }, VariableDeclarationDeclaration, VariableDeclarationInit] - 379["Plane
[7063, 7096, 0]"] + 379["Plane
[7123, 7156, 0]"] %% [ProgramBodyItem { index: 24 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 383["Sweep Extrusion
[7278, 7299, 0]"] + 383["Sweep Extrusion
[7341, 7362, 0]"] %% [ProgramBodyItem { index: 24 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] 384[Wall] %% face_code_ref=Missing NodePath @@ -650,11 +650,11 @@ flowchart LR %% face_code_ref=Missing NodePath 387["SweepEdge Opposite"] 388["SweepEdge Adjacent"] - 389["Sweep Extrusion
[7278, 7299, 0]"] + 389["Sweep Extrusion
[7341, 7362, 0]"] %% [ProgramBodyItem { index: 24 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 390["CompositeSolid Union
[7355, 7371, 0]"] + 390["CompositeSolid Union
[7418, 7434, 0]"] %% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit, CallKwArg { index: 0 }] - 391["CompositeSolid Subtract
[7317, 7372, 0]"] + 391["CompositeSolid Subtract
[7380, 7435, 0]"] %% [ProgramBodyItem { index: 25 }, VariableDeclarationDeclaration, VariableDeclarationInit] 1 --- 2 2 --- 3 diff --git a/rust/kcl-lib/tests/subtract_regression10/ast.snap b/rust/kcl-lib/tests/subtract_regression10/ast.snap index ad168c4517..8585612015 100644 --- a/rust/kcl-lib/tests/subtract_regression10/ast.snap +++ b/rust/kcl-lib/tests/subtract_regression10/ast.snap @@ -894,13 +894,13 @@ description: Result of parsing subtract_regression10.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -2402,13 +2402,13 @@ description: Result of parsing subtract_regression10.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -3824,13 +3824,13 @@ description: Result of parsing subtract_regression10.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6439,13 +6439,13 @@ description: Result of parsing subtract_regression10.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -6536,13 +6536,13 @@ description: Result of parsing subtract_regression10.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -6647,13 +6647,13 @@ description: Result of parsing subtract_regression10.kcl "right": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -6745,13 +6745,13 @@ description: Result of parsing subtract_regression10.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -6863,13 +6863,13 @@ description: Result of parsing subtract_regression10.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -7121,13 +7121,13 @@ description: Result of parsing subtract_regression10.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -7219,13 +7219,13 @@ description: Result of parsing subtract_regression10.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -7337,13 +7337,13 @@ description: Result of parsing subtract_regression10.kcl "right": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -7435,13 +7435,13 @@ description: Result of parsing subtract_regression10.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -7669,13 +7669,13 @@ description: Result of parsing subtract_regression10.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -7787,13 +7787,13 @@ description: Result of parsing subtract_regression10.kcl "right": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -7885,13 +7885,13 @@ description: Result of parsing subtract_regression10.kcl "argument": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } }, "commentStart": 0, @@ -8003,13 +8003,13 @@ description: Result of parsing subtract_regression10.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -8287,13 +8287,13 @@ description: Result of parsing subtract_regression10.kcl "right": { "commentStart": 0, "end": 0, - "raw": "45", + "raw": "45deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 45.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -8452,13 +8452,13 @@ description: Result of parsing subtract_regression10.kcl "right": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -9499,13 +9499,13 @@ description: Result of parsing subtract_regression10.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "80", + "raw": "80deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 80.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -9678,13 +9678,13 @@ description: Result of parsing subtract_regression10.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "80", + "raw": "80deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 80.0, - "suffix": "None" + "suffix": "Deg" } } }, @@ -11229,13 +11229,13 @@ description: Result of parsing subtract_regression10.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "360", + "raw": "360deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 360.0, - "suffix": "None" + "suffix": "Deg" } } }, diff --git a/rust/kcl-lib/tests/subtract_regression10/input.kcl b/rust/kcl-lib/tests/subtract_regression10/input.kcl index 71dc6a9539..95c92c9546 100644 --- a/rust/kcl-lib/tests/subtract_regression10/input.kcl +++ b/rust/kcl-lib/tests/subtract_regression10/input.kcl @@ -24,7 +24,7 @@ startProfile(kinematicSketch, at = [0, 0]) ], tag = $seg02, ) - |> angledLine(angle = segAng(seg02) - 90, length = 1, tag = $seg03) + |> angledLine(angle = segAng(seg02) - 90deg, length = 1, tag = $seg03) // Sketch a profile with a total width equal to half the bore of the piston head. Include lands and gaps for compression rings. Then revolve the profile about the center axis to form the start of a piston head pistonBore = startSketchOn(XZ) @@ -48,7 +48,7 @@ pistonBore = startSketchOn(XZ) |> yLine(endAbsolute = profileStartY(%) - pistonHeight - 3) |> xLine(length = -8) |> yLine(endAbsolute = profileStartY(%) - 8 - (bore / 4)) - |> tangentialArc(angle = 90, radius = bore / 4) + |> tangentialArc(angle = 90deg, radius = bore / 4) |> xLine(endAbsolute = profileStartX(%)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -73,7 +73,7 @@ cutDivots = patternCircular3d( instances = 2, axis = [0, 0, 1], center = [0, 0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) @@ -119,24 +119,24 @@ connectingRodProfile = startSketchOn(XZ) segEndX(seg01) - (1.25 * crankRadius * cos(segAng(seg02))), segEndY(seg01) - (1.25 * crankRadius * sin(segAng(seg02))) ]) - |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 2) - |> tangentialArc(angle = 45, radius = 5) - |> angledLine(angle = segAng(seg02) - 45, length = crankRadius / 2) - |> tangentialArc(angle = -45, radius = 5) - |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 2) + |> angledLine(angle = segAng(seg02) - 90deg, length = crankRadius / 2) + |> tangentialArc(angle = 45deg, radius = 5) + |> angledLine(angle = segAng(seg02) - 45deg, length = crankRadius / 2) + |> tangentialArc(angle = -45deg, radius = 5) + |> angledLine(angle = segAng(seg02) - 90deg, length = crankRadius / 2) |> angledLine(angle = segAng(seg02), length = crankRadius * 1.625) - |> angledLine(angle = segAng(seg02) + 90, length = crankRadius / 2) - |> tangentialArc(angle = -45, radius = 5) - |> angledLine(angle = segAng(seg02) + 45, length = crankRadius / 2) - |> tangentialArc(angle = -45, radius = crankRadius) + |> angledLine(angle = segAng(seg02) + 90deg, length = crankRadius / 2) + |> tangentialArc(angle = -45deg, radius = 5) + |> angledLine(angle = segAng(seg02) + 45deg, length = crankRadius / 2) + |> tangentialArc(angle = -45deg, radius = crankRadius) |> angledLineThatIntersects(angle = segAng(seg02), intersectTag = seg03, offset = -crankRadius / 2) - |> tangentialArc(angle = -45, radius = 5) - |> angledLine(angle = segAng(seg02) - 45, length = crankRadius / 5) - |> tangentialArc(angle = -45, radius = 5) - |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 5) + |> tangentialArc(angle = -45deg, radius = 5) + |> angledLine(angle = segAng(seg02) - 45deg, length = crankRadius / 5) + |> tangentialArc(angle = -45deg, radius = 5) + |> angledLine(angle = segAng(seg02) - 90deg, length = crankRadius / 5) |> angledLineThatIntersects(angle = segAng(seg02), intersectTag = seg03, offset = crankRadius / 3) - |> angledLineThatIntersects(angle = segAng(seg02) + 45, intersectTag = seg03, offset = crankRadius / 2) - |> angledLineThatIntersects(%, angle = segAng(seg02) + 90, intersectTag = seg02) + |> angledLineThatIntersects(angle = segAng(seg02) + 45deg, intersectTag = seg03, offset = crankRadius / 2) + |> angledLineThatIntersects(%, angle = segAng(seg02) + 90deg, intersectTag = seg02) |> mirror2d(axis = seg02) |> close() |> extrude(length = 54, symmetric = true) @@ -160,9 +160,9 @@ connectingRodPlane = { connectingRodShape = startSketchOn(connectingRodPlane) |> startProfile(at = [crankRadius * 1.5, 0]) |> yLine(length = 4) - |> tangentialArc(angle = 80, radius = 8) + |> tangentialArc(angle = 80deg, radius = 8) |> tangentialArc(endAbsolute = [-lastSegX(%), lastSegY(%)]) - |> tangentialArc(angle = 80, radius = 8) + |> tangentialArc(angle = 80deg, radius = 8) |> yLine(endAbsolute = profileStartY(%)) |> mirror2d(axis = X) |> close() @@ -197,7 +197,7 @@ boltHoles = startSketchOn(connectingRodPlane) |> patternCircular2d( instances = 2, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> extrude(length = 300) diff --git a/rust/kcl-lib/tests/subtract_regression10/program_memory.snap b/rust/kcl-lib/tests/subtract_regression10/program_memory.snap index 11e6d5b35f..a760086134 100644 --- a/rust/kcl-lib/tests/subtract_regression10/program_memory.snap +++ b/rust/kcl-lib/tests/subtract_regression10/program_memory.snap @@ -5271,9 +5271,9 @@ description: Variables in memory after executing subtract_regression10.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2986, - "end": 2992, - "start": 2986, + "commentStart": 2995, + "end": 3001, + "start": 2995, "type": "TagDeclarator", "value": "seg04" }, @@ -5300,9 +5300,9 @@ description: Variables in memory after executing subtract_regression10.kcl ], "radius": 7.5, "tag": { - "commentStart": 2986, - "end": 2992, - "start": 2986, + "commentStart": 2995, + "end": 3001, + "start": 2995, "type": "TagDeclarator", "value": "seg04" }, diff --git a/rust/kcl-lib/tests/subtract_regression10/unparsed.snap b/rust/kcl-lib/tests/subtract_regression10/unparsed.snap index 27a00ca823..6042ca6b33 100644 --- a/rust/kcl-lib/tests/subtract_regression10/unparsed.snap +++ b/rust/kcl-lib/tests/subtract_regression10/unparsed.snap @@ -28,7 +28,7 @@ startProfile(kinematicSketch, at = [0, 0]) ], tag = $seg02, ) - |> angledLine(angle = segAng(seg02) - 90, length = 1, tag = $seg03) + |> angledLine(angle = segAng(seg02) - 90deg, length = 1, tag = $seg03) // Sketch a profile with a total width equal to half the bore of the piston head. Include lands and gaps for compression rings. Then revolve the profile about the center axis to form the start of a piston head pistonBore = startSketchOn(XZ) @@ -52,7 +52,7 @@ pistonBore = startSketchOn(XZ) |> yLine(endAbsolute = profileStartY(%) - pistonHeight - 3) |> xLine(length = -8) |> yLine(endAbsolute = profileStartY(%) - 8 - (bore / 4)) - |> tangentialArc(angle = 90, radius = bore / 4) + |> tangentialArc(angle = 90deg, radius = bore / 4) |> xLine(endAbsolute = profileStartX(%)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -77,7 +77,7 @@ cutDivots = patternCircular3d( instances = 2, axis = [0, 0, 1], center = [0, 0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) @@ -123,24 +123,24 @@ connectingRodProfile = startSketchOn(XZ) segEndX(seg01) - (1.25 * crankRadius * cos(segAng(seg02))), segEndY(seg01) - (1.25 * crankRadius * sin(segAng(seg02))) ]) - |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 2) - |> tangentialArc(angle = 45, radius = 5) - |> angledLine(angle = segAng(seg02) - 45, length = crankRadius / 2) - |> tangentialArc(angle = -45, radius = 5) - |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 2) + |> angledLine(angle = segAng(seg02) - 90deg, length = crankRadius / 2) + |> tangentialArc(angle = 45deg, radius = 5) + |> angledLine(angle = segAng(seg02) - 45deg, length = crankRadius / 2) + |> tangentialArc(angle = -45deg, radius = 5) + |> angledLine(angle = segAng(seg02) - 90deg, length = crankRadius / 2) |> angledLine(angle = segAng(seg02), length = crankRadius * 1.625) - |> angledLine(angle = segAng(seg02) + 90, length = crankRadius / 2) - |> tangentialArc(angle = -45, radius = 5) - |> angledLine(angle = segAng(seg02) + 45, length = crankRadius / 2) - |> tangentialArc(angle = -45, radius = crankRadius) + |> angledLine(angle = segAng(seg02) + 90deg, length = crankRadius / 2) + |> tangentialArc(angle = -45deg, radius = 5) + |> angledLine(angle = segAng(seg02) + 45deg, length = crankRadius / 2) + |> tangentialArc(angle = -45deg, radius = crankRadius) |> angledLineThatIntersects(angle = segAng(seg02), intersectTag = seg03, offset = -crankRadius / 2) - |> tangentialArc(angle = -45, radius = 5) - |> angledLine(angle = segAng(seg02) - 45, length = crankRadius / 5) - |> tangentialArc(angle = -45, radius = 5) - |> angledLine(angle = segAng(seg02) - 90, length = crankRadius / 5) + |> tangentialArc(angle = -45deg, radius = 5) + |> angledLine(angle = segAng(seg02) - 45deg, length = crankRadius / 5) + |> tangentialArc(angle = -45deg, radius = 5) + |> angledLine(angle = segAng(seg02) - 90deg, length = crankRadius / 5) |> angledLineThatIntersects(angle = segAng(seg02), intersectTag = seg03, offset = crankRadius / 3) - |> angledLineThatIntersects(angle = segAng(seg02) + 45, intersectTag = seg03, offset = crankRadius / 2) - |> angledLineThatIntersects(%, angle = segAng(seg02) + 90, intersectTag = seg02) + |> angledLineThatIntersects(angle = segAng(seg02) + 45deg, intersectTag = seg03, offset = crankRadius / 2) + |> angledLineThatIntersects(%, angle = segAng(seg02) + 90deg, intersectTag = seg02) |> mirror2d(axis = seg02) |> close() |> extrude(length = 54, symmetric = true) @@ -164,9 +164,9 @@ connectingRodPlane = { connectingRodShape = startSketchOn(connectingRodPlane) |> startProfile(at = [crankRadius * 1.5, 0]) |> yLine(length = 4) - |> tangentialArc(angle = 80, radius = 8) + |> tangentialArc(angle = 80deg, radius = 8) |> tangentialArc(endAbsolute = [-lastSegX(%), lastSegY(%)]) - |> tangentialArc(angle = 80, radius = 8) + |> tangentialArc(angle = 80deg, radius = 8) |> yLine(endAbsolute = profileStartY(%)) |> mirror2d(axis = X) |> close() @@ -201,7 +201,7 @@ boltHoles = startSketchOn(connectingRodPlane) |> patternCircular2d( instances = 2, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> extrude(length = 300) diff --git a/rust/kcl-lib/tests/tan_arc_x_line/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/tan_arc_x_line/artifact_graph_flowchart.snap.md index 5f26d5923f..86bd87ed52 100644 --- a/rust/kcl-lib/tests/tan_arc_x_line/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/tan_arc_x_line/artifact_graph_flowchart.snap.md @@ -1,20 +1,20 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[87, 122, 0]"] + 2["Path
[93, 128, 0]"] %% [ProgramBodyItem { index: 5 }, ExpressionStatementExpr, PipeBodyItem { index: 1 }] - 3["Segment
[128, 176, 0]"] + 3["Segment
[134, 182, 0]"] %% [ProgramBodyItem { index: 5 }, ExpressionStatementExpr, PipeBodyItem { index: 2 }] - 4["Segment
[182, 241, 0]"] + 4["Segment
[188, 247, 0]"] %% [ProgramBodyItem { index: 5 }, ExpressionStatementExpr, PipeBodyItem { index: 3 }] - 5["Segment
[247, 312, 0]"] + 5["Segment
[253, 318, 0]"] %% [ProgramBodyItem { index: 5 }, ExpressionStatementExpr, PipeBodyItem { index: 4 }] - 6["Segment
[318, 384, 0]"] + 6["Segment
[324, 390, 0]"] %% [ProgramBodyItem { index: 5 }, ExpressionStatementExpr, PipeBodyItem { index: 5 }] - 7["Segment
[390, 412, 0]"] + 7["Segment
[396, 418, 0]"] %% [ProgramBodyItem { index: 5 }, ExpressionStatementExpr, PipeBodyItem { index: 6 }] end - 1["Plane
[64, 81, 0]"] + 1["Plane
[70, 87, 0]"] %% [ProgramBodyItem { index: 5 }, ExpressionStatementExpr, PipeBodyItem { index: 0 }] 1 --- 2 2 --- 3 diff --git a/rust/kcl-lib/tests/tan_arc_x_line/ast.snap b/rust/kcl-lib/tests/tan_arc_x_line/ast.snap index 0d70f4d601..e797de89bd 100644 --- a/rust/kcl-lib/tests/tan_arc_x_line/ast.snap +++ b/rust/kcl-lib/tests/tan_arc_x_line/ast.snap @@ -86,13 +86,13 @@ description: Result of parsing tan_arc_x_line.kcl "init": { "commentStart": 0, "end": 0, - "raw": "135", + "raw": "135deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 135.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, @@ -152,13 +152,13 @@ description: Result of parsing tan_arc_x_line.kcl "init": { "commentStart": 0, "end": 0, - "raw": "110", + "raw": "110deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 110.0, - "suffix": "None" + "suffix": "Deg" } }, "start": 0, diff --git a/rust/kcl-lib/tests/tan_arc_x_line/input.kcl b/rust/kcl-lib/tests/tan_arc_x_line/input.kcl index 2aeeadfd8b..6d1357cdd0 100644 --- a/rust/kcl-lib/tests/tan_arc_x_line/input.kcl +++ b/rust/kcl-lib/tests/tan_arc_x_line/input.kcl @@ -1,8 +1,8 @@ startX = 0 startY = 0 -angleOffset = 135 +angleOffset = 135deg r = 1 -angleStart = 110 +angleStart = 110deg startSketchOn(XY) |> startProfile(at = [startX, startY]) diff --git a/rust/kcl-lib/tests/tan_arc_x_line/ops.snap b/rust/kcl-lib/tests/tan_arc_x_line/ops.snap index 703599b092..7363453b66 100644 --- a/rust/kcl-lib/tests/tan_arc_x_line/ops.snap +++ b/rust/kcl-lib/tests/tan_arc_x_line/ops.snap @@ -77,13 +77,9 @@ description: Operations executed tan_arc_x_line.kcl "type": "Number", "value": 135.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", @@ -143,13 +139,9 @@ description: Operations executed tan_arc_x_line.kcl "type": "Number", "value": 110.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "visibility": "default", diff --git a/rust/kcl-lib/tests/tan_arc_x_line/program_memory.snap b/rust/kcl-lib/tests/tan_arc_x_line/program_memory.snap index 458e050ddc..c8848304d9 100644 --- a/rust/kcl-lib/tests/tan_arc_x_line/program_memory.snap +++ b/rust/kcl-lib/tests/tan_arc_x_line/program_memory.snap @@ -7,26 +7,18 @@ description: Variables in memory after executing tan_arc_x_line.kcl "type": "Number", "value": 135.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "angleStart": { "type": "Number", "value": 110.0, "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } + "type": "Known", + "type": "Angle", + "type": "Degrees" } }, "arc1": { diff --git a/rust/kcl-lib/tests/tan_arc_x_line/unparsed.snap b/rust/kcl-lib/tests/tan_arc_x_line/unparsed.snap index cd790a9556..36a7a25bee 100644 --- a/rust/kcl-lib/tests/tan_arc_x_line/unparsed.snap +++ b/rust/kcl-lib/tests/tan_arc_x_line/unparsed.snap @@ -4,9 +4,9 @@ description: Result of unparsing tan_arc_x_line.kcl --- startX = 0 startY = 0 -angleOffset = 135 +angleOffset = 135deg r = 1 -angleStart = 110 +angleStart = 110deg startSketchOn(XY) |> startProfile(at = [startX, startY]) diff --git a/rust/kcl-lib/tests/tangential_arc/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/tangential_arc/artifact_graph_flowchart.snap.md index 92d6c0b4b1..92db56f633 100644 --- a/rust/kcl-lib/tests/tangential_arc/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/tangential_arc/artifact_graph_flowchart.snap.md @@ -5,14 +5,14 @@ flowchart LR %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 1 }] 3["Segment
[66, 85, 0]"] %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 2 }] - 4["Segment
[91, 128, 0]"] + 4["Segment
[91, 131, 0]"] %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 3 }] - 5["Segment
[134, 154, 0]"] + 5["Segment
[137, 157, 0]"] %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 4 }] end 1["Plane
[12, 29, 0]"] %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 0 }] - 6["Sweep Extrusion
[160, 180, 0]"] + 6["Sweep Extrusion
[163, 183, 0]"] %% [ProgramBodyItem { index: 0 }, VariableDeclarationDeclaration, VariableDeclarationInit, PipeBodyItem { index: 5 }] 7[Wall] %% face_code_ref=Missing NodePath diff --git a/rust/kcl-lib/tests/tangential_arc/ast.snap b/rust/kcl-lib/tests/tangential_arc/ast.snap index e61d00ea4f..20edebd584 100644 --- a/rust/kcl-lib/tests/tangential_arc/ast.snap +++ b/rust/kcl-lib/tests/tangential_arc/ast.snap @@ -229,13 +229,13 @@ description: Result of parsing tangential_arc.kcl "arg": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "90deg", "start": 0, "type": "Literal", "type": "Literal", "value": { "value": 90.0, - "suffix": "None" + "suffix": "Deg" } } } diff --git a/rust/kcl-lib/tests/tangential_arc/input.kcl b/rust/kcl-lib/tests/tangential_arc/input.kcl index 0f701a5c33..73394a282f 100644 --- a/rust/kcl-lib/tests/tangential_arc/input.kcl +++ b/rust/kcl-lib/tests/tangential_arc/input.kcl @@ -1,6 +1,6 @@ boxSketch = startSketchOn(XY) |> startProfile(at = [0, 0]) |> line(end = [0, 10]) - |> tangentialArc(radius = 5, angle = 90) + |> tangentialArc(radius = 5, angle = 90deg) |> line(end = [5, -15]) |> extrude(length = 10) diff --git a/rust/kcl-lib/tests/tangential_arc/unparsed.snap b/rust/kcl-lib/tests/tangential_arc/unparsed.snap index b37e9248ea..f364d87436 100644 --- a/rust/kcl-lib/tests/tangential_arc/unparsed.snap +++ b/rust/kcl-lib/tests/tangential_arc/unparsed.snap @@ -5,6 +5,6 @@ description: Result of unparsing tangential_arc.kcl boxSketch = startSketchOn(XY) |> startProfile(at = [0, 0]) |> line(end = [0, 10]) - |> tangentialArc(radius = 5, angle = 90) + |> tangentialArc(radius = 5, angle = 90deg) |> line(end = [5, -15]) |> extrude(length = 10) From 8c36105113f78e05713553f2e68f935c415cf5fc Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Tue, 17 Jun 2025 16:00:45 +1200 Subject: [PATCH 4/7] Generate angle suffixes in the frontend Signed-off-by: Nick Cameron --- package-lock.json | 1 + rust/kcl-lib/src/lib.rs | 3 +- rust/kcl-lib/src/parsing/ast/types/mod.rs | 22 +-- rust/kcl-wasm-lib/src/wasm.rs | 5 +- src/components/SetAngleLengthModal.tsx | 8 +- src/components/SetHorVertDistanceModal.tsx | 8 +- src/components/Toolbar/Intersect.tsx | 2 +- src/components/Toolbar/SetAbsDistance.tsx | 2 +- src/components/Toolbar/SetAngleBetween.tsx | 2 +- .../Toolbar/SetHorzVertDistance.tsx | 2 +- src/components/Toolbar/setAngleLength.tsx | 25 ++- src/components/UnitsMenu.tsx | 9 +- src/lang/create.ts | 93 +++++++----- src/lang/modifyAst.test.ts | 74 ++++----- src/lang/project.ts | 12 +- src/lang/std/sketch.test.ts | 72 ++++----- src/lang/std/sketch.ts | 41 ++--- src/lang/std/sketchConstraints.test.ts | 62 ++++---- src/lang/std/sketchConstraints.ts | 2 +- src/lang/std/sketchcombos.test.ts | 114 +++++++------- src/lang/std/sketchcombos.ts | 63 ++++---- src/lang/std/std.test.ts | 2 +- src/lang/std/stdTypes.ts | 4 +- src/lang/wasm.ts | 5 +- src/lib/constants.ts | 2 +- src/lib/exampleKcl.ts | 142 +++++++++--------- src/lib/kclCommands.ts | 9 +- src/lib/rectangleTool.test.ts | 4 +- src/lib/rectangleTool.ts | 10 +- 29 files changed, 403 insertions(+), 397 deletions(-) diff --git a/package-lock.json b/package-lock.json index f6d219b489..2984567764 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2495,6 +2495,7 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { diff --git a/rust/kcl-lib/src/lib.rs b/rust/kcl-lib/src/lib.rs index 95cdde5342..9f6825e068 100644 --- a/rust/kcl-lib/src/lib.rs +++ b/rust/kcl-lib/src/lib.rs @@ -231,10 +231,9 @@ impl Program { pub fn change_default_units( &self, length_units: Option, - angle_units: Option, ) -> Result { Ok(Self { - ast: self.ast.change_default_units(length_units, angle_units)?, + ast: self.ast.change_default_units(length_units)?, original_file_contents: self.original_file_contents.clone(), }) } diff --git a/rust/kcl-lib/src/parsing/ast/types/mod.rs b/rust/kcl-lib/src/parsing/ast/types/mod.rs index c5f2b7c085..8be4719639 100644 --- a/rust/kcl-lib/src/parsing/ast/types/mod.rs +++ b/rust/kcl-lib/src/parsing/ast/types/mod.rs @@ -28,7 +28,7 @@ use crate::{ errors::KclError, execution::{ annotations, - types::{ArrayLen, UnitAngle, UnitLen}, + types::{ArrayLen, UnitLen}, KclValue, Metadata, TagIdentifier, }, parsing::{ast::digest::Digest, token::NumericSuffix, PIPE_OPERATOR}, @@ -360,7 +360,6 @@ impl Node { pub fn change_default_units( &self, length_units: Option, - angle_units: Option, ) -> Result { let mut new_program = self.clone(); let mut found = false; @@ -372,13 +371,6 @@ impl Node { Expr::Name(Box::new(Name::new(&len.to_string()))), ); } - if let Some(angle) = angle_units { - node.inner.add_or_update( - annotations::SETTINGS_UNIT_ANGLE, - Expr::Name(Box::new(Name::new(&angle.to_string()))), - ); - } - // Previous source range no longer makes sense, but we want to // preserve other things like comments. node.reset_source(); @@ -395,12 +387,6 @@ impl Node { Expr::Name(Box::new(Name::new(&len.to_string()))), ); } - if let Some(angle) = angle_units { - settings.inner.add_or_update( - annotations::SETTINGS_UNIT_ANGLE, - Expr::Name(Box::new(Name::new(&angle.to_string()))), - ); - } new_program.inner_attrs.push(settings); } @@ -4256,7 +4242,7 @@ startSketchOn(XY)"#; // Edit the ast. let new_program = program - .change_default_units(Some(crate::execution::types::UnitLen::Mm), None) + .change_default_units(Some(crate::execution::types::UnitLen::Mm)) .unwrap(); let result = new_program.meta_settings().unwrap(); @@ -4285,7 +4271,7 @@ startSketchOn(XY) // Edit the ast. let new_program = program - .change_default_units(Some(crate::execution::types::UnitLen::Mm), None) + .change_default_units(Some(crate::execution::types::UnitLen::Mm)) .unwrap(); let result = new_program.meta_settings().unwrap(); @@ -4320,7 +4306,7 @@ startSketchOn(XY) let program = crate::parsing::top_level_parse(code).unwrap(); let new_program = program - .change_default_units(Some(crate::execution::types::UnitLen::Cm), None) + .change_default_units(Some(crate::execution::types::UnitLen::Cm)) .unwrap(); let result = new_program.meta_settings().unwrap(); diff --git a/rust/kcl-wasm-lib/src/wasm.rs b/rust/kcl-wasm-lib/src/wasm.rs index c44f8c634f..20acc57c60 100644 --- a/rust/kcl-wasm-lib/src/wasm.rs +++ b/rust/kcl-wasm-lib/src/wasm.rs @@ -289,14 +289,13 @@ pub fn kcl_settings(program_json: &str) -> Result { /// Takes a kcl string and Meta settings and changes the meta settings in the kcl string. #[wasm_bindgen] -pub fn change_default_units(code: &str, len_str: &str, angle_str: &str) -> Result { +pub fn change_default_units(code: &str, len_str: &str) -> Result { console_error_panic_hook::set_once(); let len: Option = serde_json::from_str(len_str).map_err(|e| e.to_string())?; - let angle: Option = serde_json::from_str(angle_str).map_err(|e| e.to_string())?; let program = Program::parse_no_errs(code).map_err(|e| e.to_string())?; - let new_program = program.change_default_units(len, angle).map_err(|e| e.to_string())?; + let new_program = program.change_default_units(len).map_err(|e| e.to_string())?; let formatted = new_program.recast(); diff --git a/src/components/SetAngleLengthModal.tsx b/src/components/SetAngleLengthModal.tsx index e45518b360..679ffbf929 100644 --- a/src/components/SetAngleLengthModal.tsx +++ b/src/components/SetAngleLengthModal.tsx @@ -22,7 +22,7 @@ type ModalResolve = { type ModalReject = boolean type SetAngleLengthModalProps = InstanceProps & { - value: number + value: string valueName: string shouldCreateVariable?: boolean } @@ -41,8 +41,10 @@ export const SetAngleLengthModal = ({ valueName, shouldCreateVariable: initialShouldCreateVariable = false, }: SetAngleLengthModalProps) => { - const [sign, setSign] = useState(Math.sign(Number(initialValue))) - const [value, setValue] = useState(String(initialValue * sign)) + const [sign, setSign] = useState(initialValue.startsWith('-') ? -1 : 1) + const [value, setValue] = useState( + initialValue.startsWith('-') ? initialValue.substring(1) : initialValue + ) const [shouldCreateVariable, setShouldCreateVariable] = useState( initialShouldCreateVariable ) diff --git a/src/components/SetHorVertDistanceModal.tsx b/src/components/SetHorVertDistanceModal.tsx index dd9fd406e1..9e3fa841a9 100644 --- a/src/components/SetHorVertDistanceModal.tsx +++ b/src/components/SetHorVertDistanceModal.tsx @@ -25,7 +25,7 @@ type ModalReject = boolean type GetInfoModalProps = InstanceProps & { segName: string isSegNameEditable: boolean - value?: number + value?: string initialVariableName: string } @@ -44,10 +44,12 @@ export const GetInfoModal = ({ value: initialValue, initialVariableName, }: GetInfoModalProps) => { - const [sign, setSign] = useState(Math.sign(Number(initialValue))) + const [sign, setSign] = useState(initialValue?.startsWith('-') ? -1 : 1) const [segName, setSegName] = useState(initialSegName) const [value, setValue] = useState( - initialValue === undefined ? '' : String(Math.abs(initialValue)) + initialValue?.startsWith('-') + ? initialValue.substring(1) + : initialValue || '' ) const [shouldCreateVariable, setShouldCreateVariable] = useState(false) diff --git a/src/components/Toolbar/Intersect.tsx b/src/components/Toolbar/Intersect.tsx index a1c50f45ef..3c8db63f37 100644 --- a/src/components/Toolbar/Intersect.tsx +++ b/src/components/Toolbar/Intersect.tsx @@ -171,7 +171,7 @@ export async function applyConstraintIntersect({ if ( !variableName && segName === tagInfo?.tag && - Number(value) === valueUsedInTransform + value === valueUsedInTransform ) { return { modifiedAst, diff --git a/src/components/Toolbar/SetAbsDistance.tsx b/src/components/Toolbar/SetAbsDistance.tsx index 9beac96f95..fb3653c77a 100644 --- a/src/components/Toolbar/SetAbsDistance.tsx +++ b/src/components/Toolbar/SetAbsDistance.tsx @@ -108,7 +108,7 @@ export async function applyConstraintAbsDistance({ if (err(transform1)) return Promise.reject(transform1) const { valueUsedInTransform } = transform1 - let forceVal = valueUsedInTransform || 0 + let forceVal = valueUsedInTransform || '' const { valueNode, variableName, newVariableInsertIndex, sign } = await getModalInfo({ value: forceVal, diff --git a/src/components/Toolbar/SetAngleBetween.tsx b/src/components/Toolbar/SetAngleBetween.tsx index 7bef34e6b0..b8d3628b9a 100644 --- a/src/components/Toolbar/SetAngleBetween.tsx +++ b/src/components/Toolbar/SetAngleBetween.tsx @@ -120,7 +120,7 @@ export async function applyConstraintAngleBetween({ } as any) if ( segName === tagInfo?.tag && - Number(value) === valueUsedInTransform && + value === valueUsedInTransform && !variableName ) { return { diff --git a/src/components/Toolbar/SetHorzVertDistance.tsx b/src/components/Toolbar/SetHorzVertDistance.tsx index d279064ef7..ad358f325c 100644 --- a/src/components/Toolbar/SetHorzVertDistance.tsx +++ b/src/components/Toolbar/SetHorzVertDistance.tsx @@ -127,7 +127,7 @@ export async function applyConstraintHorzVertDistance({ if ( !variableName && segName === tagInfo?.tag && - Number(value) === valueUsedInTransform + value === valueUsedInTransform ) { return { modifiedAst, diff --git a/src/components/Toolbar/setAngleLength.tsx b/src/components/Toolbar/setAngleLength.tsx index 5111b93628..f65e902bfa 100644 --- a/src/components/Toolbar/setAngleLength.tsx +++ b/src/components/Toolbar/setAngleLength.tsx @@ -122,25 +122,36 @@ export async function applyConstraintAngleLength({ const isReferencingXAxisAngle = isReferencingXAxis && angleOrLength === 'setAngle' - let forceVal = valueUsedInTransform || 0 + let forceVal = valueUsedInTransform || '' + // TODO it would be better to preserve the units, but its an edge case for now. + let degrees + if (forceVal.endsWith('rad')) { + degrees = + Number(forceVal.substring(0, forceVal.length - 3)) * (180 / Math.PI) + } else { + if (forceVal.endsWith('deg')) { + forceVal = forceVal.substring(0, forceVal.length - 3) + } + degrees = Number(forceVal) + } + let calcIdentifier = createName(['turns'], 'ZERO') if (isReferencingYAxisAngle) { calcIdentifier = createName( ['turns'], - forceVal < 0 ? 'THREE_QUARTER_TURN' : 'QUARTER_TURN' + degrees < 0 ? 'THREE_QUARTER_TURN' : 'QUARTER_TURN' ) - forceVal = normaliseAngle(forceVal + (forceVal < 0 ? 90 : -90)) + degrees = normaliseAngle(degrees + (degrees < 0 ? 90 : -90)) } else if (isReferencingXAxisAngle) { calcIdentifier = createName( ['turns'], - Math.abs(forceVal) > 90 ? 'HALF_TURN' : 'ZERO' + Math.abs(degrees) > 90 ? 'HALF_TURN' : 'ZERO' ) - forceVal = - Math.abs(forceVal) > 90 ? normaliseAngle(forceVal - 180) : forceVal + degrees = Math.abs(degrees) > 90 ? normaliseAngle(degrees - 180) : forceVal } const { valueNode, variableName, newVariableInsertIndex, sign } = await getModalInfo({ - value: forceVal, + value: String(degrees) + 'deg', valueName: angleOrLength === 'setAngle' ? 'angle' : 'length', shouldCreateVariable: true, }) diff --git a/src/components/UnitsMenu.tsx b/src/components/UnitsMenu.tsx index 77cc639be7..286e943a24 100644 --- a/src/components/UnitsMenu.tsx +++ b/src/components/UnitsMenu.tsx @@ -2,11 +2,7 @@ import { Popover } from '@headlessui/react' import { useEffect, useState } from 'react' import toast from 'react-hot-toast' -import { - changeDefaultUnits, - unitAngleToUnitAng, - unitLengthToUnitLen, -} from '@src/lang/wasm' +import { changeDefaultUnits, unitLengthToUnitLen } from '@src/lang/wasm' import { DEFAULT_DEFAULT_LENGTH_UNIT } from '@src/lib/constants' import { baseUnitLabels, baseUnitsUnion } from '@src/lib/settings/settingsTypes' import { codeManager, kclManager } from '@src/lib/singletons' @@ -48,8 +44,7 @@ export function UnitsMenu() { onClick={() => { const newCode = changeDefaultUnits( codeManager.code, - unitLengthToUnitLen(unit), - unitAngleToUnitAng(undefined) + unitLengthToUnitLen(unit) ) if (err(newCode)) { toast.error( diff --git a/src/lang/create.ts b/src/lang/create.ts index c020b4fd59..3c53876df5 100644 --- a/src/lang/create.ts +++ b/src/lang/create.ts @@ -20,7 +20,7 @@ import type { Identifier, LabeledArg, Literal, - LiteralValue, + NumericSuffix, ObjectExpression, PathToNode, PipeExpression, @@ -31,60 +31,77 @@ import type { VariableDeclaration, VariableDeclarator, } from '@src/lang/wasm' -import { formatNumberLiteral } from '@src/lang/wasm' import { err } from '@src/lib/trap' -export function createLiteral(value: number | string | boolean): Node { +export function createLiteral( + value: number | string | boolean, + suffix?: NumericSuffix +): Node { // TODO: Should we handle string escape sequences? return { type: 'Literal', start: 0, end: 0, moduleId: 0, - value: typeof value === 'number' ? { value, suffix: 'None' } : value, - raw: `${value}`, + value: + typeof value === 'number' + ? { value, suffix: suffix ? suffix : 'None' } + : value, + raw: createRawStr(value, suffix), outerAttrs: [], preComments: [], commentStart: 0, } } -/** - * Note: This depends on WASM, but it's not async. Callers are responsible for - * awaiting init of the WASM module. - */ -export function createLiteralMaybeSuffix( - value: LiteralValue -): Node | Error { - if (typeof value === 'string' || typeof value === 'boolean') { - return createLiteral(value) +function createRawStr( + value: number | string | boolean, + suffix?: NumericSuffix +): string { + if (typeof value !== 'number' || !suffix) { + return `${value}` } - let raw: string - if (typeof value.value === 'number' && value.suffix === 'None') { - // Fast path for numbers when there are no units. - raw = `${value.value}` - } else { - const formatted = formatNumberLiteral(value.value, value.suffix) - if (err(formatted)) { - return new Error( - `Invalid number literal: value=${value.value}, suffix=${value.suffix}`, - { cause: formatted } - ) - } - raw = formatted - } - return { - type: 'Literal', - start: 0, - end: 0, - moduleId: 0, - value, - raw, - outerAttrs: [], - preComments: [], - commentStart: 0, + let sufStr + switch (suffix) { + case 'None': + case 'Length': + case 'Angle': + sufStr = '' + break + case 'Count': + sufStr = '_' + break + case 'Mm': + sufStr = 'mm' + break + case 'Cm': + sufStr = 'cm' + break + case 'M': + sufStr = 'm' + break + case 'Inch': + sufStr = 'in' + break + case 'Ft': + sufStr = 'ft' + break + case 'Yd': + sufStr = 'yd' + break + case 'Deg': + sufStr = 'deg' + break + case 'Rad': + sufStr = 'rad' + break + case 'Unknown': + sufStr = '_?' + break } + + return `${value}${sufStr}` } export function createTagDeclarator(value: string): Node { diff --git a/src/lang/modifyAst.test.ts b/src/lang/modifyAst.test.ts index f65d4c6ed6..960b51386c 100644 --- a/src/lang/modifyAst.test.ts +++ b/src/lang/modifyAst.test.ts @@ -4,7 +4,6 @@ import { createArrayExpression, createIdentifier, createLiteral, - createLiteralMaybeSuffix, createObjectExpression, createPipeExpression, createPipeSubstitution, @@ -24,13 +23,12 @@ import { getNodePathFromSourceRange } from '@src/lang/queryAstNodePathUtils' import type { Artifact } from '@src/lang/std/artifactGraph' import { codeRefFromRange } from '@src/lang/std/artifactGraph' import { topLevelRange } from '@src/lang/util' -import type { Identifier, Literal, LiteralValue } from '@src/lang/wasm' +import type { Identifier, Literal } from '@src/lang/wasm' import { assertParse, recast } from '@src/lang/wasm' import { initPromise } from '@src/lang/wasmUtils' import { enginelessExecutor } from '@src/lib/testHelpers' import { err } from '@src/lib/trap' import { deleteFromSelection } from '@src/lang/modifyAst/deleteFromSelection' -import { assertNotErr } from '@src/unitTestUtils' beforeAll(async () => { await initPromise @@ -45,9 +43,7 @@ describe('Testing createLiteral', () => { expect((result as Literal).raw).toBe('5') }) it('should create a literal number with units', () => { - const lit: LiteralValue = { value: 5, suffix: 'Mm' } - const result = createLiteralMaybeSuffix(lit) - assertNotErr(result) + const result = createLiteral(5, 'Mm') expect(result.type).toBe('Literal') expect((result as any).value.value).toBe(5) expect((result as any).value.suffix).toBe('Mm') @@ -305,24 +301,24 @@ describe('Testing moveValueIntoNewVariable', () => { ` const code = `${fn('def')}${fn('jkl')}${fn('hmm')} fn ghi(@x) { - return 2 + return 2deg } -abc = 3 +abc = 3deg identifierGuy = 5 -yo = 5 + 6 +yo = 5deg + 6deg part001 = startSketchOn(XY) |> startProfile(at = [-1.2, 4.83]) |> line(end = [2.8, 0]) -|> angledLine(angle = 100 + 100, length = 3.09) +|> angledLine(angle = 100deg + 100deg, length = 3.09) |> angledLine(angle = abc, length = 3.09) |> angledLine(angle = def(yo), length = 3.09) |> angledLine(angle = ghi(%), length = 3.09) -|> angledLine(angle = jkl(yo) + 2, length = 3.09) +|> angledLine(angle = jkl(yo) + 2deg, length = 3.09) yo2 = hmm([identifierGuy + 5])` it('should move a binary expression into a new variable', async () => { const ast = assertParse(code) const execState = await enginelessExecutor(ast) - const startIndex = code.indexOf('100 + 100') + 1 + const startIndex = code.indexOf('100deg + 100deg') + 1 const { modifiedAst } = moveValueIntoNewVariable( ast, execState.variables, @@ -330,7 +326,7 @@ yo2 = hmm([identifierGuy + 5])` 'newVar' ) const newCode = recast(modifiedAst) - expect(newCode).toContain(`newVar = 100 + 100`) + expect(newCode).toContain(`newVar = 100deg + 100deg`) expect(newCode).toContain(`angledLine(angle = newVar, length = 3.09)`) }) it('should move a value into a new variable', async () => { @@ -372,7 +368,7 @@ yo2 = hmm([identifierGuy + 5])` 'newVar' ) const newCode = recast(modifiedAst) - expect(newCode).toContain(`newVar = jkl(yo) + 2`) + expect(newCode).toContain(`newVar = jkl(yo) + 2deg`) expect(newCode).toContain(`angledLine(angle = newVar, length = 3.09)`) }) it('should move a identifier into a new variable', async () => { @@ -587,7 +583,7 @@ describe('Testing deleteSegmentFromPipeExpression', () => { ) => `part001 = startSketchOn(-XZ) |> startProfile(at = [54.78, -95.91]) |> line(end = [306.21, 198.82], tag = $b) -${!replace1 ? ` |> ${line}\n` : ''} |> angledLine(angle = -65, length = ${ +${!replace1 ? ` |> ${line}\n` : ''} |> angledLine(angle = -65deg, length = ${ !replace1 ? 'segLen(a)' : replace1 }) |> line(end = [306.21, 198.87]) @@ -595,45 +591,49 @@ ${!replace1 ? ` |> ${line}\n` : ''} |> angledLine(angle = -65, length = ${ |> line(end = [-963.39, -154.67]) ` test.each([ - ['line', 'line(end = [306.21, 198.85], tag = $a)', ['365.11', '33']], + ['line', 'line(end = [306.21, 198.85], tag = $a)', ['365.11', '33deg']], [ 'lineTo', 'line(endAbsolute = [306.21, 198.85], tag = $a)', - ['110.48', '120'], + ['110.48', '120deg'], + ], + ['yLine', 'yLine(length = 198.85, tag = $a)', ['198.85', '90deg']], + ['xLine', 'xLine(length = 198.85, tag = $a)', ['198.85', '0deg']], + ['yLineTo', 'yLine(endAbsolute = 198.85, tag = $a)', ['95.94', '90deg']], + [ + 'xLineTo', + 'xLine(endAbsolute = 198.85, tag = $a)', + ['162.14', '180deg'], ], - ['yLine', 'yLine(length = 198.85, tag = $a)', ['198.85', '90']], - ['xLine', 'xLine(length = 198.85, tag = $a)', ['198.85', '0']], - ['yLineTo', 'yLine(endAbsolute = 198.85, tag = $a)', ['95.94', '90']], - ['xLineTo', 'xLine(endAbsolute = 198.85, tag = $a)', ['162.14', '180']], [ 'angledLine', - 'angledLine(angle = 45.5, length = 198.85, tag = $a)', - ['198.85', '46'], + 'angledLine(angle = 45.5deg, length = 198.85, tag = $a)', + ['198.85', '46deg'], ], [ 'angledLine', - 'angledLine(angle = 45.5, lengthX = 198.85, tag = $a)', - ['283.7', '46'], + 'angledLine(angle = 45.5deg, lengthX = 198.85, tag = $a)', + ['283.7', '46deg'], ], [ 'angledLine', - 'angledLine(angle = 45.5, lengthY = 198.85, tag = $a)', - ['278.79', '46'], + 'angledLine(angle = 45.5deg, lengthY = 198.85, tag = $a)', + ['278.79', '46deg'], ], [ 'angledLine', - 'angledLine(angle = 45.5, endAbsoluteX = 198.85, tag = $a)', - ['231.33', '-134'], + 'angledLine(angle = 45.5deg, endAbsoluteX = 198.85, tag = $a)', + ['231.33', '-134deg'], ], [ 'angledLine', - 'angledLine(angle = 45.5, endAbsoluteY = 198.85, tag = $a)', - ['134.51', '46'], + 'angledLine(angle = 45.5deg, endAbsoluteY = 198.85, tag = $a)', + ['134.51', '46deg'], ], [ 'angledLineThatIntersects', - `angledLineThatIntersects(angle = 45.5, intersectTag = b, offset = 198.85, tag = $a)`, - ['918.4', '46'], + `angledLineThatIntersects(angle = 45.5deg, intersectTag = b, offset = 198.85, tag = $a)`, + ['918.4', '46deg'], ], ])(`%s`, async (_, line, [replace1, replace2]) => { const code = makeCode(line) @@ -724,7 +724,7 @@ sketch003 = startSketchOn(XZ) // |> startProfile(at = [-12.55, 2.89]) // |> line(end = [3.02, 1.9]) // |> line(end = [1.82, -1.49], tag = $seg02) - // |> angledLine(angle = -86, length = segLen(seg02)) + // |> angledLine(angle = -86deg, length = segLen(seg02)) // |> line(end = [-3.97, -0.53]) // |> line(end = [0.3, 0.84]) // |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -749,7 +749,7 @@ sketch003 = startSketchOn(XZ) // |> startProfile(at = [-12.55, 2.89]) // |> line(end = [3.02, 1.9]) // |> line(end = [1.82, -1.49], tag = $seg02) - // |> angledLine(angle = -86, length = segLen(seg02)) + // |> angledLine(angle = -86deg, length = segLen(seg02)) // |> line(end = [-3.97, -0.53]) // |> line(end = [0.3, 0.84]) // |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -778,7 +778,7 @@ sketch003 = startSketchOn(XZ) // |> startProfile(at = [-12.55, 2.89]) // |> line(end = [3.02, 1.9]) // |> line(end = [1.82, -1.49], tag = $seg02) - // |> angledLine(angle = -86, length = segLen(seg02)) + // |> angledLine(angle = -86deg, length = segLen(seg02)) // |> line(end = [-3.97, -0.53]) // |> line(end = [0.3, 0.84]) // |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -803,7 +803,7 @@ sketch003 = startSketchOn(XZ) // |> startProfile(at = [-12.55, 2.89]) // |> line(end = [3.02, 1.9]) // |> line(end = [1.82, -1.49], tag = $seg02) - // |> angledLine(angle = -86, length = segLen(seg02)) + // |> angledLine(angle = -86deg, length = segLen(seg02)) // |> line(end = [-3.97, -0.53]) // |> line(end = [0.3, 0.84]) // |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) diff --git a/src/lang/project.ts b/src/lang/project.ts index 32530877e4..3fbd95caac 100644 --- a/src/lang/project.ts +++ b/src/lang/project.ts @@ -1,10 +1,6 @@ import type { UnitLength } from '@rust/kcl-lib/bindings/ModelingCmd' -import { - changeDefaultUnits, - unitAngleToUnitAng, - unitLengthToUnitLen, -} from '@src/lang/wasm' +import { changeDefaultUnits, unitLengthToUnitLen } from '@src/lang/wasm' import { DEFAULT_DEFAULT_LENGTH_UNIT } from '@src/lib/constants' /** @@ -26,9 +22,5 @@ export function newKclFile( return '' } - return changeDefaultUnits( - '', - unitLengthToUnitLen(defaultLengthUnit), - unitAngleToUnitAng(undefined) - ) + return changeDefaultUnits('', unitLengthToUnitLen(defaultLengthUnit)) } diff --git a/src/lang/std/sketch.test.ts b/src/lang/std/sketch.test.ts index 41376af724..534f2ae382 100644 --- a/src/lang/std/sketch.test.ts +++ b/src/lang/std/sketch.test.ts @@ -204,7 +204,7 @@ describe('testing addTagForSketchOnFace', () => { const genCode = (insertCode: string) => `sketch001 = startSketchOn(XZ) |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) |> close() @@ -281,18 +281,18 @@ describe('testing getConstraintInfo', () => { const code = `part001 = startSketchOn(-XZ) |> startProfile(at = [0,0]) |> line(end = [3, 4]) - |> angledLine(angle = 3.14, length = 3.14) + |> angledLine(angle = 3.14deg, length = 3.14) |> line(endAbsolute = [6.14, 3.14]) |> xLine(endAbsolute = 8) |> yLine(endAbsolute = 5) |> yLine(length = 3.14, tag = $a) |> xLine(length = 3.14) - |> angledLine(angle = 3.14, lengthX = 3.14) - |> angledLine(angle = 30, lengthY = 3) - |> angledLine(angle = 12.14, endAbsoluteX = 12) - |> angledLine(angle = 30, endAbsoluteY = 10.14) + |> angledLine(angle = 3.14deg, lengthX = 3.14) + |> angledLine(angle = 30deg, lengthY = 3) + |> angledLine(angle = 12.14deg, endAbsoluteX = 12) + |> angledLine(angle = 30deg, endAbsoluteY = 10.14) |> angledLineThatIntersects( - angle = 3.14, + angle = 3.14deg, intersectTag = a, offset = 0, ) @@ -327,7 +327,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: false, - value: '3.14', + value: '3.14deg', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -473,7 +473,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: false, - value: '3.14', + value: '3.14deg', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -496,7 +496,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: false, - value: '30', + value: '30deg', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -519,7 +519,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: false, - value: '12.14', + value: '12.14deg', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -542,7 +542,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: false, - value: '30', + value: '30deg', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -565,7 +565,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: false, - value: '3.14', + value: '3.14deg', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -658,18 +658,18 @@ describe('testing getConstraintInfo', () => { const code = `part001 = startSketchOn(-XZ) |> startProfile(at = [0, 0]) |> line(end = [3, 4]) - |> angledLine(angle = 3.14, length = 3.14) + |> angledLine(angle = 3.14deg, length = 3.14) |> line(endAbsolute = [6.14, 3.14]) |> xLine(endAbsolute = 8) |> yLine(endAbsolute = 5) |> yLine(length = 3.14, tag = $a) |> xLine(length = 3.14) - |> angledLine(angle = 3.14, lengthX = 3.14) - |> angledLine(angle = 30, lengthY = 3) - |> angledLine(angle = 12, endAbsoluteX = 12) - |> angledLine(angle = 30, endAbsoluteY = 10) + |> angledLine(angle = 3.14deg, lengthX = 3.14) + |> angledLine(angle = 30deg, lengthY = 3) + |> angledLine(angle = 12deg, endAbsoluteX = 12) + |> angledLine(angle = 30deg, endAbsoluteY = 10) |> angledLineThatIntersects( - angle = 3.14, + angle = 3.14deg, intersectTag = a, offset = 0, ) @@ -681,7 +681,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: false, - value: '3.14', + value: '3.14deg', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -704,7 +704,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: false, - value: '3.14', + value: '3.14deg', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -727,7 +727,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: false, - value: '30', + value: '30deg', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -750,7 +750,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: false, - value: '12', + value: '12deg', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -773,7 +773,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: false, - value: '30', + value: '30deg', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -814,18 +814,18 @@ describe('testing getConstraintInfo', () => { const code = `part001 = startSketchOn(-XZ) |> startProfile(at = [0, 0]) |> line(end = [3 + 0, 4 + 0]) - |> angledLine(angle = 3.14 + 0, length = 3.14 + 0 ) + |> angledLine(angle = 3.14deg + 0, length = 3.14 + 0 ) |> line(endAbsolute = [6.14 + 0, 3.14 + 0]) |> xLine(endAbsolute = 8 + 0) |> yLine(endAbsolute = 5 + 0) |> yLine(length = 3.14 + 0, tag = $a) |> xLine(length = 3.14 + 0) - |> angledLine(angle = 3.14 + 0, lengthX = 3.14 + 0) - |> angledLine(angle = 30 + 0, lengthY = 3 + 0) - |> angledLine(angle = 12.14 + 0, endAbsoluteX = 12 + 0) - |> angledLine(angle = 30 + 0, endAbsoluteY = 10.14 + 0) + |> angledLine(angle = 3.14deg + 0, lengthX = 3.14 + 0) + |> angledLine(angle = 30deg + 0, lengthY = 3 + 0) + |> angledLine(angle = 12.14deg + 0, endAbsoluteX = 12 + 0) + |> angledLine(angle = 30deg + 0, endAbsoluteY = 10.14 + 0) |> angledLineThatIntersects( - angle = 3.14 + 0, + angle = 3.14deg + 0, intersectTag = a, offset = 0 + 0, ) @@ -860,7 +860,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: true, - value: '3.14 + 0', + value: '3.14deg + 0', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -1006,7 +1006,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: true, - value: '3.14 + 0', + value: '3.14deg + 0', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -1029,7 +1029,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: true, - value: '30 + 0', + value: '30deg + 0', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -1052,7 +1052,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: true, - value: '12.14 + 0', + value: '12.14deg + 0', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -1075,7 +1075,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: true, - value: '30 + 0', + value: '30deg + 0', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), @@ -1098,7 +1098,7 @@ describe('testing getConstraintInfo', () => { { type: 'angle', isConstrained: true, - value: '3.14 + 0', + value: '3.14deg + 0', sourceRange: [expect.any(Number), expect.any(Number), 0], argPosition: { type: 'labeledArg', key: 'angle' }, pathToNode: expect.any(Array), diff --git a/src/lang/std/sketch.ts b/src/lang/std/sketch.ts index c0528e4215..cd9974f025 100644 --- a/src/lang/std/sketch.ts +++ b/src/lang/std/sketch.ts @@ -1570,9 +1570,12 @@ export const arc: SketchLineHelperKw = { createLabeledArg('radius', createLiteral(roundOff(radius))), createLabeledArg( 'angleStart', - createLiteral(roundOff(startAngleDegrees)) + createLiteral(roundOff(startAngleDegrees), 'Deg') + ), + createLabeledArg( + 'angleEnd', + createLiteral(roundOff(endAngleDegrees), 'Deg') ), - createLabeledArg('angleEnd', createLiteral(roundOff(endAngleDegrees))), ]) if ( @@ -1623,13 +1626,13 @@ export const arc: SketchLineHelperKw = { type: 'objectProperty', key: 'angle', argType: 'angle', - expr: createLiteral(roundOff(startAngleDegrees)), + expr: createLiteral(roundOff(startAngleDegrees), 'Deg'), }, { type: 'objectProperty', key: 'angle', argType: 'angle', - expr: createLiteral(roundOff(endAngleDegrees)), + expr: createLiteral(roundOff(endAngleDegrees), 'Deg'), }, ]) if (err(result)) return result @@ -1689,8 +1692,8 @@ export const arc: SketchLineHelperKw = { const endAngleDegrees = (endAngle * 180) / Math.PI const newRadius = createLiteral(roundOff(radius)) - const newAngleStart = createLiteral(roundOff(startAngleDegrees)) - const newAngleEnd = createLiteral(roundOff(endAngleDegrees)) + const newAngleStart = createLiteral(roundOff(startAngleDegrees), 'Deg') + const newAngleEnd = createLiteral(roundOff(endAngleDegrees), 'Deg') mutateKwArg('radius', callExpression, newRadius) mutateKwArg('angleStart', callExpression, newAngleStart) mutateKwArg('angleEnd', callExpression, newAngleEnd) @@ -2409,7 +2412,7 @@ export const angledLine: SketchLineHelperKw = { createLocalName(snaps?.previousArcTag), [] ) - : createLiteral(roundOff(getAngle(from, to), 0)) + : createLiteral(roundOff(getAngle(from, to), 0), 'Deg') const newLengthVal = createLiteral(roundOff(getLength(from, to), 2)) const newLine = createCallExpressionStdLibKw('angledLine', null, [ createLabeledArg(ARG_ANGLE, newAngleVal), @@ -2463,7 +2466,7 @@ export const angledLine: SketchLineHelperKw = { const angle = roundOff(getAngle(from, to), 0) const lineLength = roundOff(getLength(from, to), 2) - const angleLit = createLiteral(angle) + const angleLit = createLiteral(angle, 'Deg') const lengthLit = createLiteral(lineLength) mutateKwArg(ARG_ANGLE, callExpression, angleLit) @@ -2520,7 +2523,7 @@ export const angledLineOfXLength: SketchLineHelperKw = { if (err(sketch)) { return sketch } - const angle = createLiteral(roundOff(getAngle(from, to), 0)) + const angle = createLiteral(roundOff(getAngle(from, to), 0), 'Deg') const xLength = createLiteral(roundOff(Math.abs(from[0] - to[0]), 2) || 0.1) let newLine: Expr if (replaceExistingCallback) { @@ -2579,7 +2582,7 @@ export const angledLineOfXLength: SketchLineHelperKw = { ? Math.abs(xLength) : xLength // todo make work for variable angle > 180 - const angleLit = createLiteral(angle) + const angleLit = createLiteral(angle, 'Deg') const lengthLit = createLiteral(adjustedXLength) removeDeterminingArgs(callExpression) @@ -2632,7 +2635,7 @@ export const angledLineOfYLength: SketchLineHelperKw = { const sketch = sketchFromKclValue(variables[variableName], variableName) if (err(sketch)) return sketch - const angle = createLiteral(roundOff(getAngle(from, to), 0)) + const angle = createLiteral(roundOff(getAngle(from, to), 0), 'Deg') const yLength = createLiteral(roundOff(Math.abs(from[1] - to[1]), 2) || 0.1) let newLine: Expr if (replaceExistingCallback) { @@ -2691,7 +2694,7 @@ export const angledLineOfYLength: SketchLineHelperKw = { ? Math.abs(yLength) : yLength // todo make work for variable angle > 180 - const angleLit = createLiteral(angle) + const angleLit = createLiteral(angle, 'Deg') const lengthLit = createLiteral(adjustedYLength) removeDeterminingArgs(callExpression) @@ -2728,7 +2731,7 @@ export const angledLineToX: SketchLineHelperKw = { if (err(nodeMeta)) return nodeMeta const { node: pipe } = nodeMeta - const angle = createLiteral(roundOff(getAngle(from, to), 0)) + const angle = createLiteral(roundOff(getAngle(from, to), 0), 'Deg') const xArg = createLiteral(roundOff(to[0], 2)) if (replaceExistingCallback) { const result = replaceExistingCallback([ @@ -2779,7 +2782,7 @@ export const angledLineToX: SketchLineHelperKw = { const adjustedXLength = xLength - const angleLit = createLiteral(angle) + const angleLit = createLiteral(angle, 'Deg') const lengthLit = createLiteral(adjustedXLength) removeDeterminingArgs(callExpression) @@ -2816,7 +2819,7 @@ export const angledLineToY: SketchLineHelperKw = { const { node: pipe } = nodeMeta - const angle = createLiteral(roundOff(getAngle(from, to), 0)) + const angle = createLiteral(roundOff(getAngle(from, to), 0), 'Deg') const yArg = createLiteral(roundOff(to[1], 2)) if (replaceExistingCallback) { @@ -2868,7 +2871,7 @@ export const angledLineToY: SketchLineHelperKw = { const adjustedXLength = xLength - const angleLit = createLiteral(angle) + const angleLit = createLiteral(angle, 'Deg') const lengthLit = createLiteral(adjustedXLength) removeDeterminingArgs(callExpression) @@ -2911,7 +2914,7 @@ export const angledLineThatIntersects: SketchLineHelperKw = { const { node: pipe } = nodeMeta - const angle = createLiteral(roundOff(getAngle(from, to), 0)) + const angle = createLiteral(roundOff(getAngle(from, to), 0), 'Deg') if (!referencedSegment) { return new Error('referencedSegment must be provided') } @@ -2994,7 +2997,7 @@ export const angledLineThatIntersects: SketchLineHelperKw = { ) } - mutateKwArg(ARG_ANGLE, callExpression, createLiteral(angle)) + mutateKwArg(ARG_ANGLE, callExpression, createLiteral(angle, 'Deg')) mutateKwArg(ARG_OFFSET, callExpression, createLiteral(offset)) return { modifiedAst: _node, @@ -3504,7 +3507,7 @@ export function replaceSketchLine({ }): | { modifiedAst: Node - valueUsedInTransform?: number + valueUsedInTransform?: string pathToNode: PathToNode } | Error { diff --git a/src/lang/std/sketchConstraints.test.ts b/src/lang/std/sketchConstraints.test.ts index aadcdfe754..cc14295f22 100644 --- a/src/lang/std/sketchConstraints.test.ts +++ b/src/lang/std/sketchConstraints.test.ts @@ -72,22 +72,22 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => { ` |> startProfile(at = [0, 0])`, ` |> line(endAbsolute = [1, 1], tag = $abc1)`, ` |> line(end = [-2.04, -0.7], tag = $abc2)`, - ` |> angledLine(angle = 157, length = 1.69, tag = $abc3)`, - ` |> angledLine(angle = 217, lengthX = 0.86, tag = $abc4)`, - ` |> angledLine(angle = 104, lengthY = 1.58, tag = $abc5)`, - ` |> angledLine(angle = 55, endAbsoluteX = -2.89, tag = $abc6)`, - ` |> angledLine(angle = 330, endAbsoluteY = 2.53, tag = $abc7)`, + ` |> angledLine(angle = 157deg, length = 1.69, tag = $abc3)`, + ` |> angledLine(angle = 217deg, lengthX = 0.86, tag = $abc4)`, + ` |> angledLine(angle = 104deg, lengthY = 1.58, tag = $abc5)`, + ` |> angledLine(angle = 55deg, endAbsoluteX = -2.89, tag = $abc6)`, + ` |> angledLine(angle = 330deg, endAbsoluteY = 2.53, tag = $abc7)`, ` |> xLine(length = 1.47, tag = $abc8)`, ` |> yLine(length = 1.57, tag = $abc9)`, ` |> xLine(endAbsolute = 1.49, tag = $abc10)`, ` |> yLine(endAbsolute = 2.64, tag = $abc11)`, ` |> line(endAbsolute = [2.55, 3.58]) // lineTo`, ` |> line(end = [0.73, -0.75])`, - ` |> angledLine(angle = 63, length = 1.38) // angledLine`, - ` |> angledLine(angle = 319, lengthX = 1.15) // angledLineOfXLength`, - ` |> angledLine(angle = 50, lengthY = 1.35) // angledLineOfYLength`, - ` |> angledLine(angle = 291, endAbsoluteX = 6.66) // angledLineToX`, - ` |> angledLine(angle = 228, endAbsoluteY = 2.14) // angledLineToY`, + ` |> angledLine(angle = 63deg, length = 1.38) // angledLine`, + ` |> angledLine(angle = 319deg, lengthX = 1.15) // angledLineOfXLength`, + ` |> angledLine(angle = 50deg, lengthY = 1.35) // angledLineOfYLength`, + ` |> angledLine(angle = 291deg, endAbsoluteX = 6.66) // angledLineToX`, + ` |> angledLine(angle = 228deg, endAbsoluteY = 2.14) // angledLineToY`, ` |> xLine(length = -1.33)`, ` |> yLine(length = -1.07)`, ` |> xLine(endAbsolute = 3.27)`, @@ -143,7 +143,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => { it('angledLine with tag converts to xLine', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: bigExample, - callToSwap: 'angledLine(angle = 157, length = 1.69, tag = $abc3)', + callToSwap: 'angledLine(angle = 157deg, length = 1.69, tag = $abc3)', constraintType: 'horizontal', }) const expectedLine = 'xLine(length = -1.56, tag = $abc3)' @@ -154,7 +154,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => { it('angledLine w/o tag converts to xLine', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: bigExample, - callToSwap: 'angledLine(angle = 63, length = 1.38)', + callToSwap: 'angledLine(angle = 63deg, length = 1.38)', constraintType: 'horizontal', }) const expectedLine = 'xLine(length = 0.63) // angledLine' @@ -165,7 +165,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => { it('angledLineOfXLength with tag converts to xLine', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: bigExample, - callToSwap: 'angledLine(angle = 217, lengthX = 0.86, tag = $abc4)', + callToSwap: 'angledLine(angle = 217deg, lengthX = 0.86, tag = $abc4)', constraintType: 'horizontal', }) const expectedLine = 'xLine(length = -0.86, tag = $abc4)' @@ -177,7 +177,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => { it('angledLineOfXLength w/o tag converts to xLine', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: bigExample, - callToSwap: 'angledLine(angle = 319, lengthX = 1.15)', + callToSwap: 'angledLine(angle = 319deg, lengthX = 1.15)', constraintType: 'horizontal', }) const expectedLine = 'xLine(length = 1.15) // angledLineOfXLength' @@ -188,7 +188,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => { it('angledLineOfYLength with tag converts to yLine', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: bigExample, - callToSwap: 'angledLine(angle = 104, lengthY = 1.58, tag = $abc5)', + callToSwap: 'angledLine(angle = 104deg, lengthY = 1.58, tag = $abc5)', constraintType: 'vertical', }) const expectedLine = 'yLine(length = 1.58, tag = $abc5)' @@ -199,7 +199,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => { it('angledLineOfYLength w/o tag converts to yLine', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: bigExample, - callToSwap: 'angledLine(angle = 50, lengthY = 1.35)', + callToSwap: 'angledLine(angle = 50deg, lengthY = 1.35)', constraintType: 'vertical', }) const expectedLine = 'yLine(length = 1.35) // angledLineOfYLength' @@ -210,7 +210,8 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => { it('angledLineToX with tag converts to xLineTo', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: bigExample, - callToSwap: 'angledLine(angle = 55, endAbsoluteX = -2.89, tag = $abc6)', + callToSwap: + 'angledLine(angle = 55deg, endAbsoluteX = -2.89, tag = $abc6)', constraintType: 'horizontal', }) const expectedLine = 'xLine(endAbsolute = -2.89, tag = $abc6)' @@ -221,7 +222,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => { it('angledLineToX w/o tag converts to xLineTo', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: bigExample, - callToSwap: 'angledLine(angle = 291, endAbsoluteX = 6.66)', + callToSwap: 'angledLine(angle = 291deg, endAbsoluteX = 6.66)', constraintType: 'horizontal', }) const expectedLine = 'xLine(endAbsolute = 6.66) // angledLineToX' @@ -232,7 +233,8 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => { it('angledLineToY with tag converts to yLineTo', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: bigExample, - callToSwap: 'angledLine(angle = 330, endAbsoluteY = 2.53, tag = $abc7)', + callToSwap: + 'angledLine(angle = 330deg, endAbsoluteY = 2.53, tag = $abc7)', constraintType: 'vertical', }) const expectedLine = 'yLine(endAbsolute = 2.53, tag = $abc7)' @@ -243,7 +245,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo', () => { it('angledLineToY w/o tag converts to yLineTo', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: bigExample, - callToSwap: 'angledLine(angle = 228, endAbsoluteY = 2.14)', + callToSwap: 'angledLine(angle = 228deg, endAbsoluteY = 2.14)', constraintType: 'vertical', }) const expectedLine = 'yLine(endAbsolute = 2.14) // angledLineToY' @@ -258,7 +260,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo while keeping var const variablesExampleArr = [ `lineX = -1`, `lineToX = -1.3`, - `angledLineAngle = 207`, + `angledLineAngle = 207deg`, `angledLineOfXLengthX = 0.8`, `angledLineOfYLengthY = 0.89`, `angledLineToXx = -1.86`, @@ -270,10 +272,10 @@ describe('testing swapping out sketch calls with xLine/xLineTo while keeping var ` |> line(end = [lineX, 2.13])`, ` |> line(endAbsolute = [lineToX, 2.85])`, ` |> angledLine(angle = angledLineAngle, length = 1.64)`, - ` |> angledLine(angle = 329, lengthX = angledLineOfXLengthX)`, - ` |> angledLine(angle = 222, lengthY = angledLineOfYLengthY)`, - ` |> angledLine(angle = 330, endAbsoluteX = angledLineToXx)`, - ` |> angledLine(angle = 217, endAbsoluteY = angledLineToYy)`, + ` |> angledLine(angle = 329deg, lengthX = angledLineOfXLengthX)`, + ` |> angledLine(angle = 222deg, lengthY = angledLineOfYLengthY)`, + ` |> angledLine(angle = 330deg, endAbsoluteX = angledLineToXx)`, + ` |> angledLine(angle = 217deg, endAbsoluteY = angledLineToYy)`, ` |> line(end = [0.89, -0.1])`, ] const varExample = variablesExampleArr.join('\n') @@ -302,7 +304,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo while keeping var it('angledLineOfXLength keeps variable when converted to xLine', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: varExample, - callToSwap: 'angledLine(angle = 329, lengthX = angledLineOfXLengthX)', + callToSwap: 'angledLine(angle = 329deg, lengthX = angledLineOfXLengthX)', constraintType: 'horizontal', }) const expectedLine = 'xLine(length = angledLineOfXLengthX)' @@ -313,7 +315,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo while keeping var it('angledLineOfYLength keeps variable when converted to yLine', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: varExample, - callToSwap: 'angledLine(angle = 222, lengthY = angledLineOfYLengthY)', + callToSwap: 'angledLine(angle = 222deg, lengthY = angledLineOfYLengthY)', constraintType: 'vertical', }) const expectedLine = 'yLine(length = -angledLineOfYLengthY)' @@ -324,7 +326,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo while keeping var it('angledLineToX keeps variable when converted to xLineTo', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: varExample, - callToSwap: 'angledLine(angle = 330, endAbsoluteX = angledLineToXx)', + callToSwap: 'angledLine(angle = 330deg, endAbsoluteX = angledLineToXx)', constraintType: 'horizontal', }) const expectedLine = 'xLine(endAbsolute = angledLineToXx)' @@ -335,7 +337,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo while keeping var it('angledLineToY keeps variable when converted to yLineTo', async () => { const { newCode, originalRange } = await testingSwapSketchFnCall({ inputCode: varExample, - callToSwap: 'angledLine(angle = 217, endAbsoluteY = angledLineToYy)', + callToSwap: 'angledLine(angle = 217deg, endAbsoluteY = angledLineToYy)', constraintType: 'vertical', }) const expectedLine = 'yLine(endAbsolute = angledLineToYy)' @@ -348,7 +350,7 @@ describe('testing swapping out sketch calls with xLine/xLineTo while keeping var const illegalConvert = () => testingSwapSketchFnCall({ inputCode: varExample, - callToSwap: 'angledLine(angle = 217, endAbsoluteY = angledLineToYy)', + callToSwap: 'angledLine(angle = 217deg, endAbsoluteY = angledLineToYy)', constraintType: 'horizontal', }) await expect(illegalConvert).rejects.toThrowError('no callback helper') diff --git a/src/lang/std/sketchConstraints.ts b/src/lang/std/sketchConstraints.ts index 95305c634d..583c590614 100644 --- a/src/lang/std/sketchConstraints.ts +++ b/src/lang/std/sketchConstraints.ts @@ -99,7 +99,7 @@ export function isSketchVariablesLinked( |> line(end = [myVar, 0.38]) // ❗ <- cursor in this fn call (the primary) |> line(end = [0.41, baz]) |> xLine(length = 0.91) - |> angledLine(angle = 37, length = 2) + |> angledLine(angle = 37deg, length = 2) const yo = line(end = [myVar, 0.38], tag = part001) |> line(end = [1, 1]) const yo2 = line(end = [myVar, 0.38], tag = yo) diff --git a/src/lang/std/sketchcombos.test.ts b/src/lang/std/sketchcombos.test.ts index ed66e016a4..bd46e93ec8 100644 --- a/src/lang/std/sketchcombos.test.ts +++ b/src/lang/std/sketchcombos.test.ts @@ -42,25 +42,29 @@ describe('testing getConstraintType', () => { expect(helper(`line(endAbsolute = [myVar, 5])`)).toBe('xAbsolute') }) it('testing angledLine', () => { - expect(helper(`angledLine(angle = 5, length = myVar)`)).toBe('length') + expect(helper(`angledLine(angle = 5deg, length = myVar)`)).toBe('length') expect(helper(`angledLine(angle = myVar, length = 5)`)).toBe('angle') }) it('testing angledLineOfXLength', () => { - expect(helper(`angledLine(angle = 5, lengthX = myVar)`)).toBe('xRelative') + expect(helper(`angledLine(angle = 5deg, lengthX = myVar)`)).toBe( + 'xRelative' + ) expect(helper(`angledLine(angle = myVar, lengthX = 5)`)).toBe('angle') }) it('testing angledLineToX', () => { - expect(helper(`angledLine(angle = 5, endAbsoluteX = myVar)`)).toBe( + expect(helper(`angledLine(angle = 5deg, endAbsoluteX = myVar)`)).toBe( 'xAbsolute' ) expect(helper(`angledLine(angle = myVar, endAbsoluteX = 5)`)).toBe('angle') }) it('testing angledLineOfYLength', () => { - expect(helper(`angledLine(angle = 5, lengthY = myVar)`)).toBe('yRelative') + expect(helper(`angledLine(angle = 5deg, lengthY = myVar)`)).toBe( + 'yRelative' + ) expect(helper(`angledLine(angle = myVar, lengthY = 5)`)).toBe('angle') }) it('testing angledLineToY', () => { - expect(helper(`angledLine(angle = 5, endAbsoluteY = myVar)`)).toBe( + expect(helper(`angledLine(angle = 5deg, endAbsoluteY = myVar)`)).toBe( 'yAbsolute' ) expect(helper(`angledLine(angle = myVar, endAbsoluteY = 5)`)).toBe('angle') @@ -172,7 +176,7 @@ describe('testing transformAstForSketchLines for equal length constraint', () => const expectedModifiedScript = `sketch001 = startSketchOn(XZ) |> startProfile(at = [0, 0]) |> line(end = [5, 5], tag = $seg01) - |> angledLine(angle = 112, length = segLen(seg01)) + |> angledLine(angle = 112deg, length = segLen(seg01)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() ` @@ -248,30 +252,30 @@ describe('testing transformAstForSketchLines for equal length constraint', () => const inputScript = `myVar = 3 myVar2 = 5 myVar3 = 6 -myAng = 40 -myAng2 = 134 +myAng = 40deg +myAng2 = 134deg part001 = startSketchOn(XY) |> startProfile(at = [0, 0]) |> line(end = [1, 3.82]) // ln-should-get-tag |> line(endAbsolute = [2, 4]) // ln-lineTo-free should become angledLine - |> angledLine(angle = 45, endAbsoluteX = 2.5) // ln-angledLineToX-free should become angledLine + |> angledLine(angle = 45deg, endAbsoluteX = 2.5) // ln-angledLineToX-free should become angledLine |> angledLine(angle = myAng, endAbsoluteX = 3) // ln-angledLineToX-angle should become angledLine - |> angledLine(angle = 135, endAbsoluteY = 5) // ln-angledLineToY-free should become angledLine + |> angledLine(angle = 135deg, endAbsoluteY = 5) // ln-angledLineToY-free should become angledLine |> angledLine(angle = myAng2, endAbsoluteY = 4) // ln-angledLineToY-angle should become angledLine |> line(end = [myVar, 1]) // ln-should use legLen for y |> line(end = [myVar, -1]) // ln-legLen but negative |> line(end = [-0.62, -1.54]) // ln-should become angledLine |> angledLine(angle = myVar, length = 1.04) // ln-use segLen for second arg - |> angledLine(angle = 45, length = 1.04) // ln-segLen again - |> angledLine(angle = 54, lengthX = 2.35) // ln-should be transformed to angledLine - |> angledLine(angle = 50, lengthX = myVar) // ln-should use legAngX to calculate angle - |> angledLine(angle = 209, lengthX = myVar) // ln-same as above but should have + 180 to match original quadrant + |> angledLine(angle = 45deg, length = 1.04) // ln-segLen again + |> angledLine(angle = 54deg, lengthX = 2.35) // ln-should be transformed to angledLine + |> angledLine(angle = 50deg, lengthX = myVar) // ln-should use legAngX to calculate angle + |> angledLine(angle = 209deg, lengthX = myVar) // ln-same as above but should have + 180 to match original quadrant |> line(end = [1, myVar]) // ln-legLen again but yRelative |> line(end = [-1, myVar]) // ln-negative legLen yRelative - |> angledLine(angle = 58, lengthY = 0.7) // ln-angledLineOfYLength-free should become angledLine + |> angledLine(angle = 58deg, lengthY = 0.7) // ln-angledLineOfYLength-free should become angledLine |> angledLine(angle = myAng, lengthY = 0.7) // ln-angledLineOfYLength-angle should become angledLine - |> angledLine(angle = 35, lengthY = myVar) // ln-angledLineOfYLength-yRelative use legAngY - |> angledLine(angle = 305, lengthY = myVar) // ln-angledLineOfYLength-yRelative with angle > 90 use binExp + |> angledLine(angle = 35deg, lengthY = myVar) // ln-angledLineOfYLength-yRelative use legAngY + |> angledLine(angle = 305deg, lengthY = myVar) // ln-angledLineOfYLength-yRelative with angle > 90 use binExp |> xLine(length = 1.03) // ln-xLine-free should sub in segLen |> yLine(length = 1.04) // ln-yLine-free should sub in segLen |> xLine(endAbsolute = 30) // ln-xLineTo-free should convert to xLine @@ -280,15 +284,15 @@ part001 = startSketchOn(XY) const expectModifiedScript = `myVar = 3 myVar2 = 5 myVar3 = 6 -myAng = 40 -myAng2 = 134 +myAng = 40deg +myAng2 = 134deg part001 = startSketchOn(XY) |> startProfile(at = [0, 0]) |> line(end = [1, 3.82], tag = $seg01) // ln-should-get-tag - |> angledLine(angle = 10, length = segLen(seg01)) // ln-lineTo-free should become angledLine - |> angledLine(angle = 45, length = segLen(seg01)) // ln-angledLineToX-free should become angledLine + |> angledLine(angle = 10deg, length = segLen(seg01)) // ln-lineTo-free should become angledLine + |> angledLine(angle = 45deg, length = segLen(seg01)) // ln-angledLineToX-free should become angledLine |> angledLine(angle = myAng, length = segLen(seg01)) // ln-angledLineToX-angle should become angledLine - |> angledLine(angle = 135, length = segLen(seg01)) // ln-angledLineToY-free should become angledLine + |> angledLine(angle = 135deg, length = segLen(seg01)) // ln-angledLineToY-free should become angledLine |> angledLine(angle = myAng2, length = segLen(seg01)) // ln-angledLineToY-angle should become angledLine |> line(end = [ min([segLen(seg01), myVar]), @@ -298,12 +302,12 @@ part001 = startSketchOn(XY) min([segLen(seg01), myVar]), -legLen(hypotenuse = segLen(seg01), leg = myVar) ]) // ln-legLen but negative - |> angledLine(angle = -112, length = segLen(seg01)) // ln-should become angledLine + |> angledLine(angle = -112deg, length = segLen(seg01)) // ln-should become angledLine |> angledLine(angle = myVar, length = segLen(seg01)) // ln-use segLen for second arg - |> angledLine(angle = 45, length = segLen(seg01)) // ln-segLen again - |> angledLine(angle = 54, length = segLen(seg01)) // ln-should be transformed to angledLine + |> angledLine(angle = 45deg, length = segLen(seg01)) // ln-segLen again + |> angledLine(angle = 54deg, length = segLen(seg01)) // ln-should be transformed to angledLine |> angledLine(angle = legAngX(hypotenuse = segLen(seg01), leg = myVar), lengthX = min([segLen(seg01), myVar])) // ln-should use legAngX to calculate angle - |> angledLine(angle = 180 + legAngX(hypotenuse = segLen(seg01), leg = myVar), lengthX = min([segLen(seg01), myVar])) // ln-same as above but should have + 180 to match original quadrant + |> angledLine(angle = 180deg + legAngX(hypotenuse = segLen(seg01), leg = myVar), lengthX = min([segLen(seg01), myVar])) // ln-same as above but should have + 180 to match original quadrant |> line(end = [ legLen(hypotenuse = segLen(seg01), leg = myVar), min([segLen(seg01), myVar]) @@ -312,10 +316,10 @@ part001 = startSketchOn(XY) -legLen(hypotenuse = segLen(seg01), leg = myVar), min([segLen(seg01), myVar]) ]) // ln-negative legLen yRelative - |> angledLine(angle = 58, length = segLen(seg01)) // ln-angledLineOfYLength-free should become angledLine + |> angledLine(angle = 58deg, length = segLen(seg01)) // ln-angledLineOfYLength-free should become angledLine |> angledLine(angle = myAng, length = segLen(seg01)) // ln-angledLineOfYLength-angle should become angledLine |> angledLine(angle = legAngY(hypotenuse = segLen(seg01), leg = myVar), lengthX = min([segLen(seg01), myVar])) // ln-angledLineOfYLength-yRelative use legAngY - |> angledLine(angle = 270 + legAngY(hypotenuse = segLen(seg01), leg = myVar), lengthX = min([segLen(seg01), myVar])) // ln-angledLineOfYLength-yRelative with angle > 90 use binExp + |> angledLine(angle = 270deg + legAngY(hypotenuse = segLen(seg01), leg = myVar), lengthX = min([segLen(seg01), myVar])) // ln-angledLineOfYLength-yRelative with angle > 90 use binExp |> xLine(length = segLen(seg01)) // ln-xLine-free should sub in segLen |> yLine(length = segLen(seg01)) // ln-yLine-free should sub in segLen |> xLine(length = segLen(seg01)) // ln-xLineTo-free should convert to xLine @@ -370,18 +374,18 @@ part001 = startSketchOn(XY) |> line(endAbsolute = [3, 11]) // select for vertical constraint 3 |> line(endAbsolute = [myVar2, 12.63]) // select for horizontal constraint 4 |> line(endAbsolute = [4.08, myVar2]) // select for vertical constraint 4 - |> angledLine(angle = 156, length = 1.34) // select for horizontal constraint 5 - |> angledLine(angle = 103, length = 1.44) // select for vertical constraint 5 - |> angledLine(angle = -178, length = myVar) // select for horizontal constraint 6 - |> angledLine(angle = 129, length = myVar) // select for vertical constraint 6 - |> angledLine(angle = 237, lengthX = 1.05) // select for horizontal constraint 7 - |> angledLine(angle = 196, lengthY = 1.11) // select for vertical constraint 7 - |> angledLine(angle = 194, lengthX = myVar) // select for horizontal constraint 8 - |> angledLine(angle = 248, lengthY = myVar) // select for vertical constraint 8 - |> angledLine(angle = 202, endAbsoluteX = -10.92) // select for horizontal constraint 9 - |> angledLine(angle = 223, endAbsoluteY = 7.68) // select for vertical constraint 9 - |> angledLine(angle = 333, endAbsoluteX = myVar3) // select for horizontal constraint 10 - |> angledLine(angle = 301, endAbsoluteY = myVar) // select for vertical constraint 10 + |> angledLine(angle = 156deg, length = 1.34) // select for horizontal constraint 5 + |> angledLine(angle = 103deg, length = 1.44) // select for vertical constraint 5 + |> angledLine(angle = -178deg, length = myVar) // select for horizontal constraint 6 + |> angledLine(angle = 129deg, length = myVar) // select for vertical constraint 6 + |> angledLine(angle = 237deg, lengthX = 1.05) // select for horizontal constraint 7 + |> angledLine(angle = 196deg, lengthY = 1.11) // select for vertical constraint 7 + |> angledLine(angle = 194deg, lengthX = myVar) // select for horizontal constraint 8 + |> angledLine(angle = 248deg, lengthY = myVar) // select for vertical constraint 8 + |> angledLine(angle = 202deg, endAbsoluteX = -10.92) // select for horizontal constraint 9 + |> angledLine(angle = 223deg, endAbsoluteY = 7.68) // select for vertical constraint 9 + |> angledLine(angle = 333deg, endAbsoluteX = myVar3) // select for horizontal constraint 10 + |> angledLine(angle = 301deg, endAbsoluteY = myVar) // select for vertical constraint 10 ` it('should transform horizontal lines the ast', async () => { const expectModifiedScript = `myVar = 2 @@ -399,17 +403,17 @@ part001 = startSketchOn(XY) |> xLine(endAbsolute = myVar2) // select for horizontal constraint 4 |> line(endAbsolute = [4.08, myVar2]) // select for vertical constraint 4 |> xLine(length = -1.22) // select for horizontal constraint 5 - |> angledLine(angle = 103, length = 1.44) // select for vertical constraint 5 + |> angledLine(angle = 103deg, length = 1.44) // select for vertical constraint 5 |> xLine(length = -myVar) // select for horizontal constraint 6 - |> angledLine(angle = 129, length = myVar) // select for vertical constraint 6 + |> angledLine(angle = 129deg, length = myVar) // select for vertical constraint 6 |> xLine(length = -1.05) // select for horizontal constraint 7 - |> angledLine(angle = 196, lengthY = 1.11) // select for vertical constraint 7 + |> angledLine(angle = 196deg, lengthY = 1.11) // select for vertical constraint 7 |> xLine(length = -myVar) // select for horizontal constraint 8 - |> angledLine(angle = 248, lengthY = myVar) // select for vertical constraint 8 + |> angledLine(angle = 248deg, lengthY = myVar) // select for vertical constraint 8 |> xLine(endAbsolute = -10.92) // select for horizontal constraint 9 - |> angledLine(angle = 223, endAbsoluteY = 7.68) // select for vertical constraint 9 + |> angledLine(angle = 223deg, endAbsoluteY = 7.68) // select for vertical constraint 9 |> xLine(endAbsolute = myVar3) // select for horizontal constraint 10 - |> angledLine(angle = 301, endAbsoluteY = myVar) // select for vertical constraint 10 + |> angledLine(angle = 301deg, endAbsoluteY = myVar) // select for vertical constraint 10 ` const ast = assertParse(inputScript) @@ -458,17 +462,17 @@ part001 = startSketchOn(XY) |> yLine(endAbsolute = 11) // select for vertical constraint 3 |> line(endAbsolute = [myVar2, 12.63]) // select for horizontal constraint 4 |> yLine(endAbsolute = myVar2) // select for vertical constraint 4 - |> angledLine(angle = 156, length = 1.34) // select for horizontal constraint 5 + |> angledLine(angle = 156deg, length = 1.34) // select for horizontal constraint 5 |> yLine(length = 1.4) // select for vertical constraint 5 - |> angledLine(angle = -178, length = myVar) // select for horizontal constraint 6 + |> angledLine(angle = -178deg, length = myVar) // select for horizontal constraint 6 |> yLine(length = myVar) // select for vertical constraint 6 - |> angledLine(angle = 237, lengthX = 1.05) // select for horizontal constraint 7 + |> angledLine(angle = 237deg, lengthX = 1.05) // select for horizontal constraint 7 |> yLine(length = -1.11) // select for vertical constraint 7 - |> angledLine(angle = 194, lengthX = myVar) // select for horizontal constraint 8 + |> angledLine(angle = 194deg, lengthX = myVar) // select for horizontal constraint 8 |> yLine(length = -myVar) // select for vertical constraint 8 - |> angledLine(angle = 202, endAbsoluteX = -10.92) // select for horizontal constraint 9 + |> angledLine(angle = 202deg, endAbsoluteX = -10.92) // select for horizontal constraint 9 |> yLine(endAbsolute = 7.68) // select for vertical constraint 9 - |> angledLine(angle = 333, endAbsoluteX = myVar3) // select for horizontal constraint 10 + |> angledLine(angle = 333deg, endAbsoluteX = myVar3) // select for horizontal constraint 10 |> yLine(endAbsolute = myVar) // select for vertical constraint 10 ` const ast = assertParse(inputScript) @@ -606,7 +610,7 @@ describe('testing getConstraintLevelFromSourceRange', () => { baseThick = 1 armThick = 0.5 totalHeight = 4 -armAngle = 60 +armAngle = 60deg totalLength = 9.74 yDatum = 0 @@ -622,12 +626,12 @@ part001 = startSketchOn(XY) |> xLine(length = 4.4) // partial |> yLine(length = -1) // partial |> xLine(length = -4.2 + 0) // full - |> angledLine(angle = segAng(seg01bing) + 180, length = 1.79) // partial + |> angledLine(angle = segAng(seg01bing) + 180deg, length = 1.79) // partial |> line(end = [1.44, -0.74]) // free |> xLine(length = 3.36) // partial |> line(end = [1.49, 1.06]) // free |> xLine(length = -3.43 + 0) // full - |> angledLine(angle = 243 + 0, lengthX = 1.2 + 0) // full` + |> angledLine(angle = 243deg + 0, lengthX = 1.2 + 0) // full` const ast = assertParse(code) const constraintLevels: ConstraintLevel[] = ['full', 'partial', 'free'] constraintLevels.forEach((constraintLevel) => { diff --git a/src/lang/std/sketchcombos.ts b/src/lang/std/sketchcombos.ts index 2be5132eea..e4760a7a46 100644 --- a/src/lang/std/sketchcombos.ts +++ b/src/lang/std/sketchcombos.ts @@ -144,7 +144,7 @@ function createCallWrapper( tooltip: ToolTip, val: [Expr, Expr] | Expr, tag?: Expr, - valueUsedInTransform?: number + valueUsedInTransform?: string ): CreatedSketchExprResult | Error { if (isArray(val)) { if (tooltip === 'line') { @@ -237,7 +237,7 @@ function createCallWrapper( console.error(fnName) return { callExp: createCallExpressionStdLibKw('', null, []), - valueUsedInTransform: 0, + valueUsedInTransform: '', } } return { @@ -270,7 +270,7 @@ function createStdlibCallExpressionKw( tool: ToolTip, labeled: LabeledArg[], tag?: Expr, - valueUsedInTransform?: number, + valueUsedInTransform?: string, unlabeled?: Expr, noncode?: NonCodeMeta ): CreatedSketchExprResult { @@ -302,7 +302,7 @@ function intersectCallWrapper({ offsetVal: Expr intersectTag: Expr tag?: Expr - valueUsedInTransform?: number + valueUsedInTransform?: string }): CreatedSketchExprResult { const args: LabeledArg[] = [ createLabeledArg(ARG_ANGLE, angleVal), @@ -335,9 +335,8 @@ const xyLineSetLength = : referenceSeg ? segRef : args[0].expr - const literalArg = asNum(args[0].expr.value) - if (err(literalArg)) return literalArg - return createCallWrapper(xOrY, lineVal, tag, literalArg) + + return createCallWrapper(xOrY, lineVal, tag, args[0].expr.raw) } type AngLenNone = 'ang' | 'len' | 'none' @@ -376,10 +375,9 @@ const basicAngledLineCreateNode = : args[1].expr const shouldForceAng = valToForce === 'ang' && forceValueUsedInTransform const shouldForceLen = valToForce === 'len' && forceValueUsedInTransform - const literalArg = asNum( - valToForce === 'ang' ? args[0].expr.value : args[1].expr.value - ) - if (err(literalArg)) return literalArg + const literalArg = + valToForce === 'ang' ? args[0].expr.raw : args[1].expr.raw + return createCallWrapper( 'angledLine', [ @@ -443,7 +441,7 @@ const getLegAng = (ang: number, legAngleVal: BinaryPart) => { const normalisedAngle = ((ang % 360) + 360) % 360 // between 0 and 360 const truncatedTo90 = Math.floor(normalisedAngle / 90) * 90 const binExp = createBinaryExpressionWithUnary([ - createLiteral(truncatedTo90), + createLiteral(truncatedTo90, 'Deg'), legAngleVal, ]) return truncatedTo90 === 0 ? legAngleVal : binExp @@ -457,7 +455,7 @@ function getClosesAngleDirection( const angDiff = Math.abs(currentAng - refAngle) const normalisedAngle = ((angDiff % 360) + 360) % 360 // between 0 and 180 return normalisedAngle > 90 - ? createBinaryExpressionWithUnary([angleVal, createLiteral(180)]) + ? createBinaryExpressionWithUnary([angleVal, createLiteral(180, 'Deg')]) : angleVal } @@ -486,7 +484,7 @@ const setHorzVertDistanceCreateNode = 'lineTo', !index ? [finalValue, args[1].expr] : [args[0].expr, finalValue], tag, - valueUsedInTransform + String(valueUsedInTransform) ) } const setHorzVertDistanceForAngleLineCreateNode = @@ -511,7 +509,7 @@ const setHorzVertDistanceForAngleLineCreateNode = xOrY === 'x' ? 'angledLineToX' : 'angledLineToY', [inputs[0].expr, binExp], tag, - valueUsedInTransform + String(valueUsedInTransform) ) } @@ -531,14 +529,14 @@ const setAbsDistanceCreateNode = xOrY === 'x' ? 'xLineTo' : 'yLineTo', val, tag, - valueUsedInTransform + String(valueUsedInTransform) ) } return createCallWrapper( 'lineTo', !index ? [val, args[1].expr] : [args[0].expr, val], tag, - valueUsedInTransform + String(valueUsedInTransform) ) } const setAbsDistanceForAngleLineCreateNode = @@ -552,7 +550,7 @@ const setAbsDistanceForAngleLineCreateNode = xOrY === 'x' ? 'angledLineToX' : 'angledLineToY', [inputs[0].expr, val], tag, - valueUsedInTransform + String(valueUsedInTransform) ) } @@ -578,7 +576,7 @@ const setHorVertDistanceForXYLines = xOrY === 'x' ? 'xLineTo' : 'yLineTo', makeBinExp, tag, - valueUsedInTransform + String(valueUsedInTransform) ) } @@ -628,14 +626,14 @@ const setAngledIntersectLineForLines: CreateStdLibSketchCallExpr = ({ } const angleVal = [0, 90, 180, 270].includes(angle) ? createName(['turns'], varNameMap[angle]) - : createLiteral(angle) + : createLiteral(angle, 'Deg') return intersectCallWrapper({ fnName: 'angledLineThatIntersects', angleVal, offsetVal: forceValueUsedInTransform || createLiteral(valueUsedInTransform), intersectTag: createLocalName(referenceSegName), tag, - valueUsedInTransform, + valueUsedInTransform: String(valueUsedInTransform), }) } @@ -655,7 +653,7 @@ const setAngledIntersectForAngledLines: CreateStdLibSketchCallExpr = ({ offsetVal: forceValueUsedInTransform || createLiteral(valueUsedInTransform), intersectTag: createLocalName(referenceSegName), tag, - valueUsedInTransform, + valueUsedInTransform: String(valueUsedInTransform), }) } @@ -686,7 +684,7 @@ const setAngleBetweenCreateNode = } const binExp = createBinaryExpressionWithUnary([ firstHalfValue, - forceValueUsedInTransform || createLiteral(valueUsedInTransform), + forceValueUsedInTransform || createLiteral(valueUsedInTransform, 'Deg'), ]) return createCallWrapper( transformToType === 'none' @@ -700,7 +698,7 @@ const setAngleBetweenCreateNode = ? [binExp, inputs[0].expr] : [binExp, inputs[1].expr], tag, - valueUsedInTransform + String(valueUsedInTransform) + 'deg' ) } @@ -883,7 +881,7 @@ const transformMap: TransformMap = { 'angledLineToY', [forceValueUsedInTransform || args[0].expr, inputs[1].expr], tag, - val + String(val) ) }, }, @@ -1155,16 +1153,17 @@ const transformMap: TransformMap = { const argVal = asNum(args[0].expr.value) if (err(argVal)) return argVal const segLen = createSegLen(referenceSegName) - if (argVal > 0) return createCallWrapper('xLine', segLen, tag, argVal) + if (argVal > 0) + return createCallWrapper('xLine', segLen, tag, String(argVal)) if (isExprBinaryPart(segLen)) return createCallWrapper( 'xLine', createUnaryExpression(segLen), tag, - argVal + String(argVal) ) // should probably return error here instead - return createCallWrapper('xLine', segLen, tag, argVal) + return createCallWrapper('xLine', segLen, tag, String(argVal)) }, }, setHorzDistance: { @@ -1194,7 +1193,7 @@ const transformMap: TransformMap = { if (err(argVal)) return argVal let segLen = createSegLen(referenceSegName) if (argVal < 0) segLen = createUnaryExpression(segLen) - return createCallWrapper('yLine', segLen, tag, argVal) + return createCallWrapper('yLine', segLen, tag, String(argVal)) }, }, setLength: { @@ -1825,7 +1824,7 @@ export function transformSecondarySketchLinesTagFirst({ }): | { modifiedAst: Node - valueUsedInTransform?: number + valueUsedInTransform?: string pathToNodeMap: PathToNodeMap tagInfo: { tag: string @@ -1904,7 +1903,7 @@ export function transformAstSketchLines({ }): | { modifiedAst: Node - valueUsedInTransform?: number + valueUsedInTransform?: string pathToNodeMap: PathToNodeMap } | Error { @@ -2090,7 +2089,7 @@ export function transformAstSketchLines({ const { modifiedAst, valueUsedInTransform, pathToNode } = replacedSketchLine node = modifiedAst pathToNodeMap[index] = pathToNode - if (typeof valueUsedInTransform === 'number') { + if (typeof valueUsedInTransform === 'string') { _valueUsedInTransform = valueUsedInTransform } } diff --git a/src/lang/std/std.test.ts b/src/lang/std/std.test.ts index ad586c776a..f87f41ff1e 100644 --- a/src/lang/std/std.test.ts +++ b/src/lang/std/std.test.ts @@ -13,7 +13,7 @@ describe('testing angledLineThatIntersects', () => { |> line(endAbsolute = [2, 2], tag = $yo) |> line(endAbsolute = [3, 1]) |> angledLineThatIntersects( - angle = 180, + angle = 180deg, intersectTag = yo, offset = ${offset}, tag = $yo2, diff --git a/src/lang/std/stdTypes.ts b/src/lang/std/stdTypes.ts index 669e6e3420..597ce6ba4c 100644 --- a/src/lang/std/stdTypes.ts +++ b/src/lang/std/stdTypes.ts @@ -250,7 +250,7 @@ export type SimplifiedArgDetails = */ export interface CreatedSketchExprResult { callExp: Expr - valueUsedInTransform?: number + valueUsedInTransform?: string } export type CreateStdLibSketchCallExpr = (args: { @@ -288,7 +288,7 @@ export interface SketchLineHelperKw { | { modifiedAst: Node pathToNode: PathToNode - valueUsedInTransform?: number + valueUsedInTransform?: string } | Error updateArgs: (a: updateArgs) => diff --git a/src/lang/wasm.ts b/src/lang/wasm.ts index 8bf410b879..5a42cefd08 100644 --- a/src/lang/wasm.ts +++ b/src/lang/wasm.ts @@ -764,11 +764,10 @@ export function kclSettings( */ export function changeDefaultUnits( kcl: string, - len: UnitLen | null, - angle: UnitAng | null + len: UnitLen | null ): string | Error { try { - return change_default_units(kcl, JSON.stringify(len), JSON.stringify(angle)) + return change_default_units(kcl, JSON.stringify(len)) } catch (e) { console.error('Caught error changing kcl settings', e) return new Error('Caught error changing kcl settings', { cause: e }) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 801b9af36e..7b64e17d7c 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -61,7 +61,7 @@ export const KCL_DEFAULT_LENGTH = `5` export const KCL_DEFAULT_TRANSFORM = `0` /** The default KCL degree expression */ -export const KCL_DEFAULT_DEGREE = `360` +export const KCL_DEFAULT_DEGREE = `360deg` /** The default KCL color expression */ export const KCL_DEFAULT_COLOR = `#3c73ff` diff --git a/src/lib/exampleKcl.ts b/src/lib/exampleKcl.ts index 64fcc6a428..52a27ab6d2 100644 --- a/src/lib/exampleKcl.ts +++ b/src/lib/exampleKcl.ts @@ -70,7 +70,7 @@ import * from "parameters.kcl" bottomFaceSketch = startSketchOn(XY) |> startProfile(at = [-fanSize / 2, -fanSize / 2]) |> angledLine(angle = 0, length = fanSize, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = fanSize, tag = $rectangleSegmentB001) + |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = fanSize, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001) |> close() @@ -108,19 +108,19 @@ bottomFaceSketch = startSketchOn(XY) // Add large openings to the bottom face to allow airflow through the fan airflowPattern = startSketchOn(bottomFaceSketch, face = END) |> startProfile(at = [fanSize * 7 / 25, -fanSize * 9 / 25]) - |> angledLine(angle = 140, length = fanSize * 12 / 25, tag = $seg01) - |> tangentialArc(radius = fanSize * 1 / 50, angle = 90) - |> angledLine(angle = -130, length = fanSize * 8 / 25) - |> tangentialArc(radius = fanSize * 1 / 50, angle = 90) - |> angledLine(angle = segAng(seg01) + 180, length = fanSize * 2 / 25) - |> tangentialArc(radius = fanSize * 8 / 25, angle = 40) + |> angledLine(angle = 140deg, length = fanSize * 12 / 25, tag = $seg01) + |> tangentialArc(radius = fanSize * 1 / 50, angle = 90deg) + |> angledLine(angle = -130deg, length = fanSize * 8 / 25) + |> tangentialArc(radius = fanSize * 1 / 50, angle = 90deg) + |> angledLine(angle = segAng(seg01) + 180deg, length = fanSize * 2 / 25) + |> tangentialArc(radius = fanSize * 8 / 25, angle = 40deg) |> xLine(length = fanSize * 3 / 25) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> patternCircular2d( instances = 4, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> extrude(length = -4) @@ -133,13 +133,13 @@ bodyMiddle = startSketchOn(bottomFaceSketch, face = END) housingMiddleLength / 2, -housingMiddleLength / 2 - housingMiddleRadius ]) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> yLine(length = housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> xLine(length = -housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> yLine(length = -housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> extrude(length = fanHeight - 4 - 4) @@ -152,7 +152,7 @@ bodyFanHole = startSketchOn(bodyMiddle, face = END) topFaceSketch = startSketchOn(bodyMiddle, face = END) topHoles = startProfile(topFaceSketch, at = [-fanSize / 2, -fanSize / 2]) |> angledLine(angle = 0, length = fanSize, tag = $rectangleSegmentA002) - |> angledLine(angle = segAng(rectangleSegmentA002) + 90, length = fanSize, tag = $rectangleSegmentB002) + |> angledLine(angle = segAng(rectangleSegmentA002) + 90deg, length = fanSize, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $rectangleSegmentC002) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD002) |> close() @@ -229,7 +229,7 @@ export mountingHoleSize = 4.5 bottomFaceSketch = startSketchOn(XY) |> startProfile(at = [-fanSize / 2, -fanSize / 2]) |> angledLine(angle = 0, length = fanSize, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = fanSize, tag = $rectangleSegmentB001) + |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = fanSize, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001) |> close() @@ -267,19 +267,19 @@ bottomFaceSketch = startSketchOn(XY) // Add large openings to the bottom face to allow airflow through the fan airflowPattern = startSketchOn(bottomFaceSketch, face = END) |> startProfile(at = [fanSize * 7 / 25, -fanSize * 9 / 25]) - |> angledLine(angle = 140, length = fanSize * 12 / 25, tag = $seg01) - |> tangentialArc(radius = fanSize * 1 / 50, angle = 90) - |> angledLine(angle = -130, length = fanSize * 8 / 25) - |> tangentialArc(radius = fanSize * 1 / 50, angle = 90) - |> angledLine(angle = segAng(seg01) + 180, length = fanSize * 2 / 25) - |> tangentialArc(radius = fanSize * 8 / 25, angle = 40) + |> angledLine(angle = 140deg, length = fanSize * 12 / 25, tag = $seg01) + |> tangentialArc(radius = fanSize * 1 / 50, angle = 90deg) + |> angledLine(angle = -130deg, length = fanSize * 8 / 25) + |> tangentialArc(radius = fanSize * 1 / 50, angle = 90deg) + |> angledLine(angle = segAng(seg01) + 180deg, length = fanSize * 2 / 25) + |> tangentialArc(radius = fanSize * 8 / 25, angle = 40deg) |> xLine(length = fanSize * 3 / 25) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> patternCircular2d( instances = 4, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> extrude(length = -4) @@ -292,13 +292,13 @@ bodyMiddle = startSketchOn(bottomFaceSketch, face = END) housingMiddleLength / 2, -housingMiddleLength / 2 - housingMiddleRadius ]) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> yLine(length = housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> xLine(length = -housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> yLine(length = -housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> extrude(length = fanHeight - 4 - 4) @@ -311,7 +311,7 @@ bodyFanHole = startSketchOn(bodyMiddle, face = END) topFaceSketch = startSketchOn(bodyMiddle, face = END) topHoles = startProfile(topFaceSketch, at = [-fanSize / 2, -fanSize / 2]) |> angledLine(angle = 0, length = fanSize, tag = $rectangleSegmentA002) - |> angledLine(angle = segAng(rectangleSegmentA002) + 90, length = fanSize, tag = $rectangleSegmentB002) + |> angledLine(angle = segAng(rectangleSegmentA002) + 90deg, length = fanSize, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $rectangleSegmentC002) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD002) |> close() @@ -387,7 +387,7 @@ export mountingHoleSize = 4.5 bottomFaceSketch = startSketchOn(XY) |> startProfile(at = [-fanSize / 2, -fanSize / 2]) |> angledLine(angle = 0, length = fanSize, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = fanSize, tag = $rectangleSegmentB001) + |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = fanSize, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001) |> close() @@ -425,19 +425,19 @@ bottomFaceSketch = startSketchOn(XY) // Add large openings to the bottom face to allow airflow through the fan airflowPattern = startSketchOn(bottomFaceSketch, face = END) |> startProfile(at = [fanSize * 7 / 25, -fanSize * 9 / 25]) - |> angledLine(angle = 140, length = fanSize * 12 / 25, tag = $seg01) - |> tangentialArc(radius = fanSize * 1 / 50, angle = 90) - |> angledLine(angle = -130, length = fanSize * 8 / 25) - |> tangentialArc(radius = fanSize * 1 / 50, angle = 90) - |> angledLine(angle = segAng(seg01) + 180, length = fanSize * 2 / 25) - |> tangentialArc(radius = fanSize * 8 / 25, angle = 40) + |> angledLine(angle = 140deg, length = fanSize * 12 / 25, tag = $seg01) + |> tangentialArc(radius = fanSize * 1 / 50, angle = 90deg) + |> angledLine(angle = -130deg, length = fanSize * 8 / 25) + |> tangentialArc(radius = fanSize * 1 / 50, angle = 90deg) + |> angledLine(angle = segAng(seg01) + 180deg, length = fanSize * 2 / 25) + |> tangentialArc(radius = fanSize * 8 / 25, angle = 40deg) |> xLine(length = fanSize * 3 / 25) |> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> patternCircular2d( instances = 4, center = [0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) |> extrude(length = -4) @@ -450,13 +450,13 @@ bodyMiddle = startSketchOn(bottomFaceSketch, face = END) housingMiddleLength / 2, -housingMiddleLength / 2 - housingMiddleRadius ]) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> yLine(length = housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> xLine(length = -housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> yLine(length = -housingMiddleLength) - |> tangentialArc(radius = housingMiddleRadius, angle = 90) + |> tangentialArc(radius = housingMiddleRadius, angle = 90deg) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> extrude(length = fanHeight - 4 - 4) @@ -469,7 +469,7 @@ bodyFanHole = startSketchOn(bodyMiddle, face = END) topFaceSketch = startSketchOn(bodyMiddle, face = END) topHoles = startProfile(topFaceSketch, at = [-fanSize / 2, -fanSize / 2]) |> angledLine(angle = 0, length = fanSize, tag = $rectangleSegmentA002) - |> angledLine(angle = segAng(rectangleSegmentA002) + 90, length = fanSize, tag = $rectangleSegmentB002) + |> angledLine(angle = segAng(rectangleSegmentA002) + 90deg, length = fanSize, tag = $rectangleSegmentB002) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002), tag = $rectangleSegmentC002) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD002) |> close() @@ -543,11 +543,11 @@ ${fanHousingBrowser} fanCenter = startSketchOn(XZ) |> startProfile(at = [-0.0001, fanHeight]) |> xLine(endAbsolute = -15 + 1.5) - |> tangentialArc(radius = 1.5, angle = 90) + |> tangentialArc(radius = 1.5, angle = 90deg) |> yLine(endAbsolute = 4.5) |> xLine(endAbsolute = -13) |> yLine(endAbsolute = profileStartY(%) - 5) - |> tangentialArc(radius = 1, angle = -90) + |> tangentialArc(radius = 1, angle = -90deg) |> xLine(endAbsolute = -1) |> yLine(length = 2) |> xLine(length = -0.15) @@ -571,32 +571,32 @@ fn fanBlade(offsetHeight, startAngle: number(deg)) { 15 * cos(startAngle), 15 * sin(startAngle) ]) - |> arc(angleStart = startAngle, angleEnd = startAngle + 14, radius = 15) + |> arc(angleStart = startAngle, angleEnd = startAngle + 14deg, radius = 15) |> arc( endAbsolute = [ - fanSize * 22 / 50 * cos(startAngle - 20), - fanSize * 22 / 50 * sin(startAngle - 20) + fanSize * 22 / 50 * cos(startAngle - 20deg), + fanSize * 22 / 50 * sin(startAngle - 20deg) ], interiorAbsolute = [ - fanSize * 11 / 50 * cos(startAngle + 3), - fanSize * 11 / 50 * sin(startAngle + 3) + fanSize * 11 / 50 * cos(startAngle + 3deg), + fanSize * 11 / 50 * sin(startAngle + 3deg) ], ) |> arc( endAbsolute = [ - fanSize * 22 / 50 * cos(startAngle - 24), - fanSize * 22 / 50 * sin(startAngle - 24) + fanSize * 22 / 50 * cos(startAngle - 24deg), + fanSize * 22 / 50 * sin(startAngle - 24deg) ], interiorAbsolute = [ - fanSize * 22 / 50 * cos(startAngle - 22), - fanSize * 22 / 50 * sin(startAngle - 22) + fanSize * 22 / 50 * cos(startAngle - 22deg), + fanSize * 22 / 50 * sin(startAngle - 22deg) ], ) |> arc( endAbsolute = [profileStartX(%), profileStartY(%)], interiorAbsolute = [ - fanSize * 11 / 50 * cos(startAngle - 5), - fanSize * 11 / 50 * sin(startAngle - 5) + fanSize * 11 / 50 * cos(startAngle - 5deg), + fanSize * 11 / 50 * sin(startAngle - 5deg) ], ) |> close() @@ -605,8 +605,8 @@ fn fanBlade(offsetHeight, startAngle: number(deg)) { // Loft the fan blade cross sections into a single blade, then pattern them about the fan center crossSections = [ - fanBlade(offsetHeight = 4.5, startAngle = 50), - fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30), + fanBlade(offsetHeight = 4.5, startAngle = 50deg), + fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30deg), fanBlade(offsetHeight = fanHeight - 2, startAngle = 0) ] loft(crossSections) @@ -615,7 +615,7 @@ loft(crossSections) instances = 9, axis = [0, 0, 1], center = [0, 0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) @@ -650,11 +650,11 @@ ${modifiedFanHousingBrowser} fanCenter = startSketchOn(XZ) |> startProfile(at = [-0.0001, fanHeight]) |> xLine(endAbsolute = -15 + 1.5) - |> tangentialArc(radius = 1.5, angle = 90) + |> tangentialArc(radius = 1.5, angle = 90deg) |> yLine(endAbsolute = 4.5) |> xLine(endAbsolute = -13) |> yLine(endAbsolute = profileStartY(%) - 5) - |> tangentialArc(radius = 1, angle = -90) + |> tangentialArc(radius = 1, angle = -90deg) |> xLine(endAbsolute = -1) |> yLine(length = 2) |> xLine(length = -0.15) @@ -678,32 +678,32 @@ fn fanBlade(offsetHeight, startAngle: number(deg)) { 15 * cos(startAngle), 15 * sin(startAngle) ]) - |> arc(angleStart = startAngle, angleEnd = startAngle + 14, radius = 15) + |> arc(angleStart = startAngle, angleEnd = startAngle + 14deg, radius = 15) |> arc( endAbsolute = [ - fanSize * 22 / 50 * cos(startAngle - 20), - fanSize * 22 / 50 * sin(startAngle - 20) + fanSize * 22 / 50 * cos(startAngle - 20deg), + fanSize * 22 / 50 * sin(startAngle - 20deg) ], interiorAbsolute = [ - fanSize * 11 / 50 * cos(startAngle + 3), - fanSize * 11 / 50 * sin(startAngle + 3) + fanSize * 11 / 50 * cos(startAngle + 3deg), + fanSize * 11 / 50 * sin(startAngle + 3deg) ], ) |> arc( endAbsolute = [ - fanSize * 22 / 50 * cos(startAngle - 24), - fanSize * 22 / 50 * sin(startAngle - 24) + fanSize * 22 / 50 * cos(startAngle - 24deg), + fanSize * 22 / 50 * sin(startAngle - 24deg) ], interiorAbsolute = [ - fanSize * 22 / 50 * cos(startAngle - 22), - fanSize * 22 / 50 * sin(startAngle - 22) + fanSize * 22 / 50 * cos(startAngle - 22deg), + fanSize * 22 / 50 * sin(startAngle - 22deg) ], ) |> arc( endAbsolute = [profileStartX(%), profileStartY(%)], interiorAbsolute = [ - fanSize * 11 / 50 * cos(startAngle - 5), - fanSize * 11 / 50 * sin(startAngle - 5) + fanSize * 11 / 50 * cos(startAngle - 5deg), + fanSize * 11 / 50 * sin(startAngle - 5deg) ], ) |> close() @@ -712,8 +712,8 @@ fn fanBlade(offsetHeight, startAngle: number(deg)) { // Loft the fan blade cross sections into a single blade, then pattern them about the fan center crossSections = [ - fanBlade(offsetHeight = 4.5, startAngle = 50), - fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30), + fanBlade(offsetHeight = 4.5, startAngle = 50deg), + fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30deg), fanBlade(offsetHeight = fanHeight - 2, startAngle = 0) ] loft(crossSections) @@ -722,7 +722,7 @@ loft(crossSections) instances = 9, axis = [0, 0, 1], center = [0, 0, 0], - arcDegrees = 360, + arcDegrees = 360deg, rotateDuplicates = true, ) diff --git a/src/lib/kclCommands.ts b/src/lib/kclCommands.ts index 9d4ee50fb8..371ec57792 100644 --- a/src/lib/kclCommands.ts +++ b/src/lib/kclCommands.ts @@ -3,11 +3,7 @@ import toast from 'react-hot-toast' import { updateModelingState } from '@src/lang/modelingWorkflows' import { addModuleImport } from '@src/lang/modifyAst' -import { - changeDefaultUnits, - unitAngleToUnitAng, - unitLengthToUnitLen, -} from '@src/lang/wasm' +import { changeDefaultUnits, unitLengthToUnitLen } from '@src/lang/wasm' import type { Command, CommandArgumentOption } from '@src/lib/commandTypes' import { DEFAULT_DEFAULT_LENGTH_UNIT, @@ -69,8 +65,7 @@ export function kclCommands(commandProps: KclCommandConfig): Command[] { if (typeof data === 'object' && 'unit' in data) { const newCode = changeDefaultUnits( codeManager.code, - unitLengthToUnitLen(data.unit), - unitAngleToUnitAng(undefined) + unitLengthToUnitLen(data.unit) ) if (err(newCode)) { toast.error(`Failed to set per-file units: ${newCode.message}`) diff --git a/src/lib/rectangleTool.test.ts b/src/lib/rectangleTool.test.ts index 176d0e32b2..c13a0f29e3 100644 --- a/src/lib/rectangleTool.test.ts +++ b/src/lib/rectangleTool.test.ts @@ -21,7 +21,7 @@ describe('library rectangleTool helper functions', () => { const sourceCode = `sketch001 = startSketchOn(XZ) profile001 = startProfile(at = [120.37, 162.76]) |> angledLine(angle = 0, length = 0, tag = $rectangleSegmentA001) -|> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 0, tag = $rectangleSegmentB001) +|> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = 0, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -71,7 +71,7 @@ profile001 = startProfile(at = [120.37, 162.76]) const expectedSourceCode = `sketch001 = startSketchOn(XZ) profile001 = startProfile(at = [80, 120]) |> angledLine(angle = 0, length = 80, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 120, tag = $rectangleSegmentB001) + |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = 120, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() diff --git a/src/lib/rectangleTool.ts b/src/lib/rectangleTool.ts index 2bd2241c37..87bea7c079 100644 --- a/src/lib/rectangleTool.ts +++ b/src/lib/rectangleTool.ts @@ -54,7 +54,7 @@ function angledLine( export const getRectangleCallExpressions = (tag: string) => { return [ angledLine( - createLiteral(0), // 0 deg + createLiteral(0, 'Deg'), // 0 deg createLiteral(0), // This will be the width of the rectangle tag ), @@ -62,7 +62,7 @@ export const getRectangleCallExpressions = (tag: string) => { createBinaryExpression([ createCallExpressionStdLibKw('segAng', createLocalName(tag), []), '+', - createLiteral(90), + createLiteral(90, 'Deg'), ]), // 90 offset from the previous line createLiteral(0) // This will be the height of the rectangle ), @@ -108,7 +108,7 @@ export function updateRectangleSketch( tag: string ) { const firstEdge = pipeExpression.body[1] as CallExpressionKw - mutateKwArgOnly('angle', firstEdge, createLiteral(x >= 0 ? 0 : 180)) + mutateKwArgOnly('angle', firstEdge, createLiteral(x >= 0 ? 0 : 180, 'Deg')) mutateKwArgOnly('length', firstEdge, createLiteral(Math.abs(x))) const secondEdge = pipeExpression.body[2] as CallExpressionKw // 90 offset from the previous line @@ -118,7 +118,7 @@ export function updateRectangleSketch( createBinaryExpression([ createCallExpressionStdLibKw('segAng', createLocalName(tag), []), Math.sign(y) === Math.sign(x) ? '+' : '-', - createLiteral(90), + createLiteral(90, 'Deg'), ]) ) // This will be the height of the rectangle @@ -196,7 +196,7 @@ export function updateCenterRectangleSketch( const newAngle = createBinaryExpression([ createCallExpressionStdLibKw('segAng', createLocalName(tag), []), oldAngleOperator, - createLiteral(90), + createLiteral(90, 'Deg'), ]) // Calculate new height. From 4b4960ac2c135821343683e4e7114d58f335052e Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Tue, 17 Jun 2025 16:08:14 +1200 Subject: [PATCH 5/7] autocomplete Signed-off-by: Nick Cameron --- rust/kcl-lib/src/docs/kcl_doc.rs | 11 ++++++++++- rust/kcl-lib/src/docs/mod.rs | 4 ++-- rust/kcl-lib/src/lib.rs | 5 +---- rust/kcl-lib/src/parsing/ast/types/mod.rs | 5 +---- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/rust/kcl-lib/src/docs/kcl_doc.rs b/rust/kcl-lib/src/docs/kcl_doc.rs index 2b027a1051..09c2b489cb 100644 --- a/rust/kcl-lib/src/docs/kcl_doc.rs +++ b/rust/kcl-lib/src/docs/kcl_doc.rs @@ -816,7 +816,16 @@ impl ArgData { } match self.ty.as_deref() { Some("Sketch") if self.kind == ArgKind::Special => None, - Some(s) if s.starts_with("number") => Some((index, format!(r#"{label}${{{}:10}}"#, index))), + Some(s) if s.starts_with("number") => { + let value = match &*self.name { + "angleStart" => "0", + "angleEnd" => "180deg", + "angle" => "180deg", + "arcDegrees" => "360deg", + _ => "10", + }; + Some((index, format!(r#"{label}${{{}:{value}}}"#, index))) + } Some("Point2d") => Some((index + 1, format!(r#"{label}[${{{}:0}}, ${{{}:0}}]"#, index, index + 1))), Some("Point3d") => Some(( index + 2, diff --git a/rust/kcl-lib/src/docs/mod.rs b/rust/kcl-lib/src/docs/mod.rs index 55b6ae9849..2abb9fce32 100644 --- a/rust/kcl-lib/src/docs/mod.rs +++ b/rust/kcl-lib/src/docs/mod.rs @@ -106,7 +106,7 @@ mod tests { let snippet = data.to_autocomplete_snippet(); assert_eq!( snippet, - r#"arc(angleStart = ${0:10}, angleEnd = ${1:10}, diameter = ${2:10})"# + r#"arc(angleStart = ${0:0}, angleEnd = ${1:180deg}, diameter = ${2:10})"# ); } @@ -172,7 +172,7 @@ mod tests { let snippet = helix_fn.to_autocomplete_snippet(); assert_eq!( snippet, - r#"helix(revolutions = ${0:10}, angleStart = ${1:10}, radius = ${2:10}, axis = ${3:X}, length = ${4:10})"# + r#"helix(revolutions = ${0:10}, angleStart = ${1:0}, radius = ${2:10}, axis = ${3:X}, length = ${4:10})"# ); } diff --git a/rust/kcl-lib/src/lib.rs b/rust/kcl-lib/src/lib.rs index 9f6825e068..a4eeb14511 100644 --- a/rust/kcl-lib/src/lib.rs +++ b/rust/kcl-lib/src/lib.rs @@ -228,10 +228,7 @@ impl Program { } /// Change the meta settings for the kcl file. - pub fn change_default_units( - &self, - length_units: Option, - ) -> Result { + pub fn change_default_units(&self, length_units: Option) -> Result { Ok(Self { ast: self.ast.change_default_units(length_units)?, original_file_contents: self.original_file_contents.clone(), diff --git a/rust/kcl-lib/src/parsing/ast/types/mod.rs b/rust/kcl-lib/src/parsing/ast/types/mod.rs index 8be4719639..952c20ae24 100644 --- a/rust/kcl-lib/src/parsing/ast/types/mod.rs +++ b/rust/kcl-lib/src/parsing/ast/types/mod.rs @@ -357,10 +357,7 @@ impl Node { Ok(None) } - pub fn change_default_units( - &self, - length_units: Option, - ) -> Result { + pub fn change_default_units(&self, length_units: Option) -> Result { let mut new_program = self.clone(); let mut found = false; for node in &mut new_program.inner_attrs { From d4c5cef78a7dbaa56a32961ca22def4c0b133eca Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Tue, 17 Jun 2025 17:08:10 +1200 Subject: [PATCH 6/7] More warnings Signed-off-by: Nick Cameron --- e2e/playwright/editor-tests.spec.ts | 2 +- e2e/playwright/point-click.spec.ts | 130 +++++++++--------- e2e/playwright/sketch-tests.spec.ts | 88 ++++++------ e2e/playwright/snapshot-tests.spec.ts | 18 +-- e2e/playwright/testing-constraints.spec.ts | 22 +-- .../e2e-can-sketch-on-chamfer-no-pipeExpr.kcl | 4 +- .../inputs/e2e-can-sketch-on-chamfer.kcl | 4 +- rust/kcl-lib/src/execution/annotations.rs | 4 +- rust/kcl-lib/src/execution/exec_ast.rs | 1 + rust/kcl-lib/src/execution/mod.rs | 3 +- rust/kcl-lib/src/execution/types.rs | 16 ++- rust/kcl-lib/src/std/extrude.rs | 7 +- src/lang/std/sketch.ts | 10 +- src/machines/modelingMachine.test.ts | 48 ++++--- 14 files changed, 195 insertions(+), 162 deletions(-) diff --git a/e2e/playwright/editor-tests.spec.ts b/e2e/playwright/editor-tests.spec.ts index c04393f753..4719253570 100644 --- a/e2e/playwright/editor-tests.spec.ts +++ b/e2e/playwright/editor-tests.spec.ts @@ -912,7 +912,7 @@ a1 = startSketchOn(offsetPlane(XY, offset = 10)) |> close() |> revolve( axis = revolveAxis, - angle = 90 + angle = 90deg ) ` ) diff --git a/e2e/playwright/point-click.spec.ts b/e2e/playwright/point-click.spec.ts index fdc9be1224..fc26f0c7d3 100644 --- a/e2e/playwright/point-click.spec.ts +++ b/e2e/playwright/point-click.spec.ts @@ -317,7 +317,7 @@ test.describe('Point-and-click tests', () => { clickCoords: { x: 570, y: 220 }, cameraPos: { x: 16020, y: -2000, z: 10500 }, cameraTarget: { x: -150, y: -4500, z: -80 }, - beforeChamferSnippet: `angledLine(angle=segAng(rectangleSegmentA001)-90,length=217.26,tag=$seg01) + beforeChamferSnippet: `angledLine(angle=segAng(rectangleSegmentA001)-90deg,length=217.26,tag=$seg01) chamfer(length = 30,tags = [ seg01, getNextAdjacentEdge(yo), @@ -330,8 +330,8 @@ test.describe('Point-and-click tests', () => { 'sketch002 = startSketchOn(extrude001, face = seg03)', afterRectangle1stClickSnippet: 'startProfile(sketch002, at = [205.96, 254.59])', - afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.39,tag=$rectangleSegmentA002) - |>angledLine(angle=segAng(rectangleSegmentA002)-90,length=105.26) + afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.39,tag=$rectangleSegmentA002) + |>angledLine(angle=segAng(rectangleSegmentA002)-90deg,length=105.26) |>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002)) |>line(endAbsolute=[profileStartX(%),profileStartY(%)]) |>close()`, @@ -341,7 +341,7 @@ test.describe('Point-and-click tests', () => { clickCoords: { x: 690, y: 250 }, cameraPos: { x: 16020, y: -2000, z: 10500 }, cameraTarget: { x: -150, y: -4500, z: -80 }, - beforeChamferSnippet: `angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01)chamfer( + beforeChamferSnippet: `angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01)chamfer( length = 30, tags = [ seg01, @@ -354,8 +354,8 @@ test.describe('Point-and-click tests', () => { 'sketch003 = startSketchOn(extrude001, face = seg04)', afterRectangle1stClickSnippet: 'startProfile(sketch003, at = [-209.64, 255.28])', - afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.56,tag=$rectangleSegmentA003) - |>angledLine(angle=segAng(rectangleSegmentA003)-90,length=106.84) + afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.56,tag=$rectangleSegmentA003) + |>angledLine(angle=segAng(rectangleSegmentA003)-90deg,length=106.84) |>angledLine(angle=segAng(rectangleSegmentA003),length=-segLen(rectangleSegmentA003)) |>line(endAbsolute=[profileStartX(%),profileStartY(%)]) |>close()`, @@ -365,7 +365,7 @@ test.describe('Point-and-click tests', () => { clickCoords: { x: 677, y: 87 }, cameraPos: { x: -6200, y: 1500, z: 6200 }, cameraTarget: { x: 8300, y: 1100, z: 4800 }, - beforeChamferSnippet: `angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001)chamfer( + beforeChamferSnippet: `angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001)chamfer( length = 30, tags = [ getNextAdjacentEdge(yo), @@ -376,8 +376,8 @@ test.describe('Point-and-click tests', () => { 'sketch004 = startSketchOn(extrude001, face = seg05)', afterRectangle1stClickSnippet: 'startProfile(sketch004, at = [82.57, 322.96])', - afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.16,tag=$rectangleSegmentA004) - |>angledLine(angle=segAng(rectangleSegmentA004)-90,length=103.07) + afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.16,tag=$rectangleSegmentA004) + |>angledLine(angle=segAng(rectangleSegmentA004)-90deg,length=103.07) |>angledLine(angle=segAng(rectangleSegmentA004),length=-segLen(rectangleSegmentA004)) |>line(endAbsolute=[profileStartX(%),profileStartY(%)]) |>close()`, @@ -394,8 +394,8 @@ test.describe('Point-and-click tests', () => { 'sketch005 = startSketchOn(extrude001, face = seg06)', afterRectangle1stClickSnippet: 'startProfile(sketch005, at = [-23.43, 19.69])', - afterRectangle2ndClickSnippet: `angledLine(angle=0,length=9.1,tag=$rectangleSegmentA005) - |>angledLine(angle=segAng(rectangleSegmentA005)-90,length=84.07) + afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=9.1,tag=$rectangleSegmentA005) + |>angledLine(angle=segAng(rectangleSegmentA005)-90deg,length=84.07) |>angledLine(angle=segAng(rectangleSegmentA005),length=-segLen(rectangleSegmentA005)) |>line(endAbsolute=[profileStartX(%),profileStartY(%)]) |>close()`, @@ -407,8 +407,8 @@ test.describe('Point-and-click tests', () => { sketch001 = startSketchOn(XZ) |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] - |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) + |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) |> close() @@ -419,29 +419,29 @@ extrude001 = extrude(sketch001, length = 100) |> chamfer(length = 30, tags = [getNextAdjacentEdge(yo)], tag = $seg06) sketch002 = startSketchOn(extrude001, face = seg03) profile001 = startProfile(sketch002, at = [205.96, 254.59]) - |> angledLine(angle = 0, length = 11.39, tag = $rectangleSegmentA002) - |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 105.26) + |> angledLine(angle = 0deg, length = 11.39, tag = $rectangleSegmentA002) + |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 105.26) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch003 = startSketchOn(extrude001, face = seg04) profile002 = startProfile(sketch003, at = [-209.64, 255.28]) - |> angledLine(angle = 0, length = 11.56, tag = $rectangleSegmentA003) - |> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 106.84) + |> angledLine(angle = 0deg, length = 11.56, tag = $rectangleSegmentA003) + |> angledLine(angle = segAng(rectangleSegmentA003) - 90deg, length = 106.84) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch004 = startSketchOn(extrude001, face = seg05) profile003 = startProfile(sketch004, at = [82.57, 322.96]) - |> angledLine(angle = 0, length = 11.16, tag = $rectangleSegmentA004) - |> angledLine(angle = segAng(rectangleSegmentA004) - 90, length = 103.07) + |> angledLine(angle = 0deg, length = 11.16, tag = $rectangleSegmentA004) + |> angledLine(angle = segAng(rectangleSegmentA004) - 90deg, length = 103.07) |> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() sketch005 = startSketchOn(extrude001, face = seg06) profile004 = startProfile(sketch005, at = [-23.43, 19.69]) - |> angledLine(angle = 0, length = 9.1, tag = $rectangleSegmentA005) - |> angledLine(angle = segAng(rectangleSegmentA005) - 90, length = 84.07) + |> angledLine(angle = 0deg, length = 9.1, tag = $rectangleSegmentA005) + |> angledLine(angle = segAng(rectangleSegmentA005) - 90deg, length = 84.07) |> angledLine(angle = segAng(rectangleSegmentA005), length = -segLen(rectangleSegmentA005)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -482,7 +482,7 @@ profile004 = startProfile(sketch005, at = [-23.43, 19.69]) clickCoords: { x: 570, y: 220 }, cameraPos: { x: 16020, y: -2000, z: 10500 }, cameraTarget: { x: -150, y: -4500, z: -80 }, - beforeChamferSnippet: `angledLine(angle=segAng(rectangleSegmentA001)-90,length=217.26,tag=$seg01) + beforeChamferSnippet: `angledLine(angle=segAng(rectangleSegmentA001)-90deg,length=217.26,tag=$seg01) chamfer(extrude001,length=30,tags=[ seg01, getNextAdjacentEdge(yo), @@ -494,8 +494,8 @@ profile004 = startProfile(sketch005, at = [-23.43, 19.69]) 'sketch002 = startSketchOn(extrude001, face = seg03)', afterRectangle1stClickSnippet: 'startProfile(sketch002, at = [205.96, 254.59])', - afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.39,tag=$rectangleSegmentA002) - |>angledLine(angle=segAng(rectangleSegmentA002)-90,length=105.26) + afterRectangle2ndClickSnippet: `angledLine(angle=0deg,length=11.39,tag=$rectangleSegmentA002) + |>angledLine(angle=segAng(rectangleSegmentA002)-90deg,length=105.26) |>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002)) |>line(endAbsolute=[profileStartX(%),profileStartY(%)]) |>close()`, @@ -504,8 +504,8 @@ profile004 = startProfile(sketch005, at = [-23.43, 19.69]) `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) |> startProfile(at = [75.8, 317.2]) - |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) + |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) |> close() @@ -526,8 +526,8 @@ chamf = chamfer( ) sketch002 = startSketchOn(extrude001, face = seg03) profile001 = startProfile(sketch002, at = [205.96, 254.59]) - |> angledLine(angle = 0, length = 11.39, tag = $rectangleSegmentA002) - |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 105.26) + |> angledLine(angle = 0deg, length = 11.39, tag = $rectangleSegmentA002) + |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 105.26) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -1153,7 +1153,7 @@ openSketch = startSketchOn(XY) }) => { // One dumb hardcoded screen pixel value const testPoint = { x: 620, y: 257 } - const expectedOutput = `helix001 = helix( axis = X, radius = 5, length = 5, revolutions = 1, angleStart = 270, ccw = false,)` + const expectedOutput = `helix001 = helix( axis = X, radius = 5, length = 5, revolutions = 1, angleStart = 270deg, ccw = false,)` const expectedLine = `axis=X,` await homePage.goToModelingScene() @@ -1183,7 +1183,7 @@ openSketch = startSketchOn(XY) stage: 'arguments', currentArgKey: 'angleStart', highlightedHeaderArg: 'angleStart', - currentArgValue: '360', + currentArgValue: '360deg', headerArguments: { Mode: 'Axis', Axis: 'X', @@ -1195,7 +1195,7 @@ openSketch = startSketchOn(XY) }, commandName: 'Helix', }) - await cmdBar.currentArgumentInput.locator('.cm-content').fill('270') + await cmdBar.currentArgumentInput.locator('.cm-content').fill('270deg') await cmdBar.progressCmdBar() await cmdBar.progressCmdBar() await cmdBar.progressCmdBar() @@ -1471,9 +1471,9 @@ extrude001 = extrude(profile001, length = 100) // One dumb hardcoded screen pixel value const testPoint = { x: 620, y: 257 } const [clickOnWall] = scene.makeMouseHelpers(testPoint.x, testPoint.y) - const expectedOutput = `helix001 = helix( cylinder = extrude001, revolutions = 1, angleStart = 360, ccw = false,)` + const expectedOutput = `helix001 = helix( cylinder = extrude001, revolutions = 1, angleStart = 360deg, ccw = false,)` const expectedLine = `cylinder = extrude001,` - const expectedEditedOutput = `helix001 = helix( cylinder = extrude001, revolutions = 1, angleStart = 360, ccw = true,)` + const expectedEditedOutput = `helix001 = helix( cylinder = extrude001, revolutions = 1, angleStart = 360deg, ccw = true,)` await test.step(`Go through the command bar flow`, async () => { await toolbar.helixButton.click() @@ -1776,8 +1776,8 @@ profile002 = startProfile(sketch002, at = [0, 0]) initialCode: `@settings(defaultLengthUnit = in) sketch001 = startSketchOn(YZ) profile001 = startProfile(sketch001, at = [-400, -400]) - |> angledLine(angle = 0, length = 800, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 800) + |> angledLine(angle = 0deg, length = 800, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) + 90deg, length = 800) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -1950,7 +1950,7 @@ profile002 = startProfile(sketch002, at = [0, 0]) radius = 1, length = 10, revolutions = 10, - angleStart = 0, + angleStart = 0deg, ccw = false, ) sketch001 = startSketchOn(XZ) @@ -3660,8 +3660,8 @@ profile001 = startProfile(sketch001, at = [-20, 20]) const initialCode = ` sketch001 = startSketchOn(XZ) |> startProfile(at = [-100.0, 100.0]) -|> angledLine(angle = 0, length = 200.0, tag = $rectangleSegmentA001) -|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 200, tag = $rectangleSegmentB001) +|> angledLine(angle = 0deg, length = 200.0, tag = $rectangleSegmentA001) +|> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 200, tag = $rectangleSegmentB001) |> angledLine( angle=segAng(rectangleSegmentA001), length=-segLen(rectangleSegmentA001), @@ -3672,9 +3672,9 @@ tag=$rectangleSegmentC001, extrude001 = extrude(sketch001, length = 200) sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) |> startProfile(at = [-66.77, 84.81]) -|> angledLine(angle = 180, length = 27.08, tag = $rectangleSegmentA002) +|> angledLine(angle = 180deg, length = 27.08, tag = $rectangleSegmentA002) |> angledLine( -angle=segAng(rectangleSegmentA002) - 90, +angle=segAng(rectangleSegmentA002) - 90deg, length=27.8, tag=$rectangleSegmentB002, ) @@ -3706,11 +3706,10 @@ tag=$rectangleSegmentC002, await cmdBar.progressCmdBar() await cmdBar.progressCmdBar() - const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360, axis = X)` + const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360deg, axis = X)` expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy() // Edit flow - const newAngle = '90' await toolbar.openPane('feature-tree') const operationButton = await toolbar.getFeatureTreeOperation( 'Revolve', @@ -3720,26 +3719,26 @@ tag=$rectangleSegmentC002, await cmdBar.expectState({ commandName: 'Revolve', currentArgKey: 'angle', - currentArgValue: '360', + currentArgValue: '360deg', headerArguments: { Angle: '360', }, highlightedHeaderArg: 'angle', stage: 'arguments', }) - await page.keyboard.insertText(newAngle) + await page.keyboard.insertText('90deg') await cmdBar.progressCmdBar() await cmdBar.expectState({ stage: 'review', headerArguments: { - Angle: newAngle, + Angle: '90', }, commandName: 'Revolve', }) await cmdBar.progressCmdBar() await toolbar.closePane('feature-tree') await editor.expectEditor.toContain( - newCodeToFind.replace('angle = 360', 'angle = ' + newAngle) + newCodeToFind.replace('angle = 360deg', 'angle = 90deg') ) }) test('revolve surface around edge from an extruded solid2d', async ({ @@ -3753,8 +3752,8 @@ tag=$rectangleSegmentC002, }) => { const initialCode = `sketch001 = startSketchOn(XZ) |> startProfile(at = [-102.57, 101.72]) - |> angledLine(angle = 0, length = 202.6, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 202.6, tag = $rectangleSegmentB001) + |> angledLine(angle = 0deg, length = 202.6, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 202.6, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -3779,17 +3778,17 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) await toolbar.revolveButton.click() await cmdBar.progressCmdBar() await page.getByText('Edge', { exact: true }).click() - const lineCodeToSelection = `angledLine(angle = 0, length = 202.6, tag = $rectangleSegmentA001)` + const lineCodeToSelection = `angledLine(angle = 0deg, length = 202.6, tag = $rectangleSegmentA001)` await page.getByText(lineCodeToSelection).click() await cmdBar.progressCmdBar() await cmdBar.progressCmdBar() await cmdBar.progressCmdBar() - const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360, axis = rectangleSegmentA001)` + const newCodeToFind = `revolve001 = revolve(sketch002, angle = 360deg, axis = rectangleSegmentA001)` await editor.expectEditor.toContain(newCodeToFind) // Edit flow - const newAngle = '180' + const newAngle = '180deg' await toolbar.openPane('feature-tree') const operationButton = await toolbar.getFeatureTreeOperation( 'Revolve', @@ -3799,9 +3798,9 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) await cmdBar.expectState({ commandName: 'Revolve', currentArgKey: 'angle', - currentArgValue: '360', + currentArgValue: '360deg', headerArguments: { - Angle: '360', + Angle: '360deg', }, highlightedHeaderArg: 'angle', stage: 'arguments', @@ -3823,7 +3822,7 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) await toolbar.closePane('feature-tree') await editor.expectEditor.toContain('angle001 = ' + newAngle) await editor.expectEditor.toContain( - newCodeToFind.replace('angle = 360', 'angle = angle001') + newCodeToFind.replace('angle = 360deg', 'angle = angle001') ) expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy() }) @@ -3842,8 +3841,8 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) |> xLine(length = 2.6) sketch001 = startSketchOn(-XY) |> startProfile(at = [-0.48, 1.25]) - |> angledLine(angle = 0, length = 2.38, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.4, tag = $rectangleSegmentB001) + |> angledLine(angle = 0deg, length = 2.38, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 2.4, tag = $rectangleSegmentB001) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -3880,11 +3879,10 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) await cmdBar.progressCmdBar() await cmdBar.progressCmdBar() - const newCodeToFind = `revolve001 = revolve(sketch003, angle = 360, axis = seg01)` + const newCodeToFind = `revolve001 = revolve(sketch003, angle = 360deg, axis = seg01)` expect(editor.expectEditor.toContain(newCodeToFind)).toBeTruthy() // Edit flow - const newAngle = '270' await toolbar.openPane('feature-tree') const operationButton = await toolbar.getFeatureTreeOperation( 'Revolve', @@ -3894,26 +3892,26 @@ sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001) await cmdBar.expectState({ commandName: 'Revolve', currentArgKey: 'angle', - currentArgValue: '360', + currentArgValue: '360deg', headerArguments: { Angle: '360', }, highlightedHeaderArg: 'angle', stage: 'arguments', }) - await page.keyboard.insertText(newAngle) + await page.keyboard.insertText('270deg') await cmdBar.progressCmdBar() await cmdBar.expectState({ stage: 'review', headerArguments: { - Angle: newAngle, + Angle: '270', }, commandName: 'Revolve', }) await cmdBar.progressCmdBar() await toolbar.closePane('feature-tree') await editor.expectEditor.toContain( - newCodeToFind.replace('angle = 360', 'angle = ' + newAngle) + newCodeToFind.replace('angle = 360deg', 'angle = 270deg') ) }) }) @@ -4856,7 +4854,7 @@ path001 = startProfile(sketch001, at = [0, 0]) await cmdBar.expectState({ stage: 'arguments', currentArgKey: 'angle', - currentArgValue: '360', + currentArgValue: '360deg', headerArguments: { Profiles: '2 profiles', AxisOrEdge: 'Edge', @@ -4866,7 +4864,7 @@ path001 = startProfile(sketch001, at = [0, 0]) highlightedHeaderArg: 'angle', commandName: 'Revolve', }) - await page.keyboard.insertText('180') + await page.keyboard.insertText('180deg') await cmdBar.progressCmdBar() await cmdBar.expectState({ stage: 'review', @@ -4885,7 +4883,7 @@ path001 = startProfile(sketch001, at = [0, 0]) shouldNormalise: true, }) await editor.expectEditor.toContain( - `revolve001 = revolve([profile001, profile002], angle=180, axis=seg01)`, + `revolve001 = revolve([profile001, profile002], angle=180deg, axis=seg01)`, { shouldNormalise: true } ) }) @@ -4897,7 +4895,7 @@ path001 = startProfile(sketch001, at = [0, 0]) await page.getByTestId('context-menu-delete').click() await scene.settled(cmdBar) await editor.expectEditor.not.toContain( - `revolve001 = revolve([profile001, profile002], axis = XY, angle = 180)`, + `revolve001 = revolve([profile001, profile002], axis = XY, angle = 180deg)`, { shouldNormalise: true } ) }) diff --git a/e2e/playwright/sketch-tests.spec.ts b/e2e/playwright/sketch-tests.spec.ts index 9c29666e57..b55495aa44 100644 --- a/e2e/playwright/sketch-tests.spec.ts +++ b/e2e/playwright/sketch-tests.spec.ts @@ -2100,8 +2100,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73]) ) await crnRect1point2() await editor.expectEditor.toContain( - `|> angledLine(angle = 0, length = 2.37, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 7.8) + `|> angledLine(angle = 0deg, length = 2.37, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 7.8) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close()`.replaceAll('\n', '') @@ -2115,8 +2115,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73]) await crnRect2point2() await page.waitForTimeout(300) await editor.expectEditor.toContain( - `|> angledLine(angle = 0, length = 5.49, tag = $rectangleSegmentA002) - |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 4.14) + `|> angledLine(angle = 0deg, length = 5.49, tag = $rectangleSegmentA002) + |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 4.14) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close()`.replaceAll('\n', '') @@ -2134,8 +2134,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73]) await cntrRect1point2() await page.waitForTimeout(300) await editor.expectEditor.toContain( - `|> angledLine(angle = 0, length = 7.06, tag = $rectangleSegmentA003) - |> angledLine(angle = segAng(rectangleSegmentA003) + 90, length = 4.34) + `|> angledLine(angle = 0deg, length = 7.06, tag = $rectangleSegmentA003) + |> angledLine(angle = segAng(rectangleSegmentA003) + 90deg, length = 4.34) |> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close()`.replaceAll('\n', '') @@ -2150,8 +2150,8 @@ profile003 = startProfile(sketch001, at = [206.63, -56.73]) await cntrRect2point2() await page.waitForTimeout(300) await editor.expectEditor.toContain( - `|> angledLine(angle = 0, length = 3.12, tag = $rectangleSegmentA004) - |> angledLine(angle = segAng(rectangleSegmentA004) + 90, length = 6.24) + `|> angledLine(angle = 0deg, length = 3.12, tag = $rectangleSegmentA004) + |> angledLine(angle = segAng(rectangleSegmentA004) + 90deg, length = 6.24) |> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close()`.replaceAll('\n', '') @@ -2300,8 +2300,8 @@ profile001 = startProfile(sketch001, at = [6.24, 4.54]) |> line(end = [8.61, 0.74]) |> line(end = [10.99, -5.22]) profile002 = startProfile(sketch001, at = [11.19, 5.02]) - |> angledLine(angle = 0, length = 10.78, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.14) + |> angledLine(angle = 0deg, length = 10.78, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 4.14) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -2373,7 +2373,7 @@ profile004 = circleThreePoint(sketch001, p1 = [13.44, -6.8], p2 = [13.39, -2.07] await page.mouse.up() await page.waitForTimeout(200) await editor.expectEditor.toContain( - `angledLine(angle = -7, length = 10.27, tag = $rectangleSegmentA001)` + `angledLine(angle = -7deg, length = 10.27, tag = $rectangleSegmentA001)` ) }) @@ -2415,8 +2415,8 @@ profile004 = circleThreePoint(sketch001, p1 = [13.44, -6.8], p2 = [13.39, -2.07] await page.waitForTimeout(100) await rectEnd() await editor.expectEditor.toContain( - `|> angledLine(angle = 180, length = 1.97, tag = $rectangleSegmentA002) - |> angledLine(angle = segAng(rectangleSegmentA002) + 90, length = 3.89) + `|> angledLine(angle = 180deg, length = 1.97, tag = $rectangleSegmentA002) + |> angledLine(angle = segAng(rectangleSegmentA002) + 90deg, length = 3.89) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close()`.replaceAll('\n', '') @@ -2441,8 +2441,8 @@ profile001 = startProfile(sketch001, at = [6.24, 4.54]) |> line(end = [8.61, 0.74]) |> line(end = [10.99, -5.22]) profile002 = startProfile(sketch001, at = [11.19, 5.02]) - |> angledLine(angle = 0, length = 10.78, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.14) + |> angledLine(angle = 0deg, length = 10.78, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 4.14) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -2771,8 +2771,8 @@ profile002 = startProfile(sketch002, at = [0.75, 13.46]) |> line(end = [4.52, 3.79]) |> line(end = [5.98, -2.81]) profile003 = startProfile(sketch002, at = [3.19, 13.3]) - |> angledLine(angle = 0, length = 6.64, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.81) + |> angledLine(angle = 0deg, length = 6.64, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 2.81) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -2789,7 +2789,7 @@ profile006 = startProfile(sketch002, at = [9.65, 3.82]) |> close() revolve001 = revolve( profile004, - angle = 45, + angle = 45deg, axis = getNextAdjacentEdge(seg01) ) extrude002 = extrude(profile006, length = 4) @@ -2813,8 +2813,8 @@ profile010 = circle( radius = 2.67 ) profile011 = startProfile(sketch003, at = [5.07, -6.39]) - |> angledLine(angle = 0, length = 4.54, tag = $rectangleSegmentA002) - |> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 4.17) + |> angledLine(angle = 0deg, length = 4.54, tag = $rectangleSegmentA002) + |> angledLine(angle = segAng(rectangleSegmentA002) - 90deg, length = 4.17) |> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002)) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() @@ -2966,7 +2966,7 @@ loft([profile001, profile002]) ) await rect1Crn2() await editor.expectEditor.toContain( - `angledLine(angle = 0, length = 113.01, tag = $rectangleSegmentA001)` + `angledLine(angle = 0deg, length = 113.01, tag = $rectangleSegmentA001)` ) }) test('Can enter sketch loft edges offsetPlane and continue sketch', async ({ @@ -3035,7 +3035,7 @@ loft([profile001, profile002]) ) await rect1Crn2() await editor.expectEditor.toContain( - `angledLine(angle = 0, length = 106.42], tag = $rectangleSegmentA001)` + `angledLine(angle = 0deg, length = 106.42], tag = $rectangleSegmentA001)` ) await page.waitForTimeout(100) }) @@ -3257,8 +3257,8 @@ test.describe('manual edits during sketch mode', () => { extrude001 = extrude(profile001, length = 500) sketch002 = startSketchOn(extrude001, face = seg01) profile002 = startProfile(sketch002, at = [83.39, 329.15]) - |> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) - |> angledLine(length = 156.54, angle = -28) + |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001) + |> angledLine(length = 156.54, angle = -28deg) |> angledLine( angle = -151, length = 116.27, @@ -3296,7 +3296,9 @@ test.describe('manual edits during sketch mode', () => { await expect .poll( async () => { - await editor.expectEditor.toContain('length = 156.54, angle = -28') + await editor.expectEditor.toContain( + 'length = 156.54, angle = -28deg' + ) await page.mouse.move(handle1Location.x, handle1Location.y) await page.mouse.down() await page.mouse.move( @@ -3307,7 +3309,9 @@ test.describe('manual edits during sketch mode', () => { } ) await page.mouse.up() - await editor.expectEditor.toContain('length = 231.59, angle = -34') + await editor.expectEditor.toContain( + 'length = 231.59, angle = -34deg' + ) return true }, { timeout: 10_000 } @@ -3325,7 +3329,7 @@ test.describe('manual edits during sketch mode', () => { const handle2Location = { x: 872, y: 273 } await test.step('Edit sketch again', async () => { - await editor.expectEditor.toContain('length = 231.59, angle = -34') + await editor.expectEditor.toContain('length = 231.59, angle = -34deg') await page.waitForTimeout(500) await expect .poll( @@ -3336,7 +3340,9 @@ test.describe('manual edits during sketch mode', () => { steps: 5, }) await page.mouse.up() - await editor.expectEditor.toContain('length = 167.36, angle = -14') + await editor.expectEditor.toContain( + 'length = 167.36, angle = -14deg' + ) return true }, { timeout: 10_000 } @@ -3361,14 +3367,18 @@ test.describe('manual edits during sketch mode', () => { await expect .poll( async () => { - await editor.expectEditor.toContain('length = 167.36, angle = -14') + await editor.expectEditor.toContain( + 'length = 167.36, angle = -14deg' + ) await page.mouse.move(handle3Location.x, handle3Location.y) await page.mouse.down() await page.mouse.move(handle3Location.x, handle3Location.y + 110, { steps: 5, }) await page.mouse.up() - await editor.expectEditor.toContain('length = 219.2, angle = -56') + await editor.expectEditor.toContain( + 'length = 219.2, angle = -56deg' + ) return true }, { timeout: 10_000 } @@ -3393,9 +3403,9 @@ profile001 = startProfile(sketch001, at = [106.68, 89.77]) extrude001 = extrude(profile001, length = 500) sketch002 = startSketchOn(extrude001, face = seg01) profile002 = startProfile(sketch002, at = [83.39, 329.15]) - |> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) - |> angledLine(length = 219.2, angle = -56) - |> angledLine(angle = -151, length = 116.27) + |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001) + |> angledLine(length = 219.2, angle = -56deg) + |> angledLine(angle = -151deg, length = 116.27) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() profile003 = startProfile(sketch002, at = [-201.08, 254.17]) @@ -3432,10 +3442,10 @@ profile003 = startProfile(sketch002, at = [-201.08, 254.17]) extrude001 = extrude(profile001, length = 500) sketch002 = startSketchOn(extrude001, face = seg01) profile002 = startProfile(sketch002, at = [83.39, 329.15]) - |> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) - |> angledLine(length = 156.54, angle = -28) + |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001) + |> angledLine(length = 156.54, angle = -28deg) |> angledLine( - angle = -151, + angle = -151deg, length = 116.27, ) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) @@ -3496,10 +3506,10 @@ profile003 = startProfile(sketch002, at = [-201.08, 254.17]) extrude001 = extrude(profile001, length = 500) sketch002 = startSketchOn(extrude001, face = seg01) profile002 = startProfile(sketch002, at = [83.39, 329.15]) - |> angledLine(angle = 0, length = 119.61, tag = $rectangleSegmentA001) - |> angledLine(length = 156.54, angle = -28) + |> angledLine(angle = 0deg, length = 119.61, tag = $rectangleSegmentA001) + |> angledLine(length = 156.54, angle = -28deg) |> angledLine( - angle = -151, + angle = -151deg, length = 116.27, ) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) diff --git a/e2e/playwright/snapshot-tests.spec.ts b/e2e/playwright/snapshot-tests.spec.ts index 5d59d9caa1..32ca803ce5 100644 --- a/e2e/playwright/snapshot-tests.spec.ts +++ b/e2e/playwright/snapshot-tests.spec.ts @@ -845,14 +845,14 @@ test.describe('code color goober', { tag: '@snapshot' }, () => { sweepPath = startSketchOn(XZ) |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) - |> tangentialArc(angle = 90, radius = 5) + |> tangentialArc(angle = 90deg, radius = 5) |> line(end = [-3, 0]) - |> tangentialArc(angle = -90, radius = 5) + |> tangentialArc(angle = -90deg, radius = 5) |> line(end = [0, 7]) sweepSketch = startSketchOn(XY) |> startProfile(at = [2, 0]) - |> arc(angleStart = 0, angleEnd = 360, radius = 2) + |> arc(angleStart = 0, angleEnd = 360deg, radius = 2) |> sweep(path = sweepPath) |> appearance( color = "#bb00ff", @@ -889,14 +889,14 @@ sweepSketch = startSketchOn(XY) sweepPath = startSketchOn(XZ) |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) - |> tangentialArc(angle = 90, radius = 5) + |> tangentialArc(angle = 90deg, radius = 5) |> line(end = [-3, 0]) - |> tangentialArc(angle = -90, radius = 5) + |> tangentialArc(angle = -90deg, radius = 5) |> line(end = [0, 7]) sweepSketch = startSketchOn(XY) |> startProfile(at = [2, 0]) - |> arc(angleStart = 0, angleEnd = 360, radius = 2) + |> arc(angleStart = 0deg, angleEnd = 360deg, radius = 2) |> sweep(path = sweepPath) |> appearance( color = '#bb00ff', @@ -934,14 +934,14 @@ sweepSketch = startSketchOn(XY) sweepPath = startSketchOn(XZ) |> startProfile(at = [0.05, 0.05]) |> line(end = [0, 7]) - |> tangentialArc(angle = 90, radius = 5) + |> tangentialArc(angle = 90deg, radius = 5) |> line(end = [-3, 0]) - |> tangentialArc(angle = -90, radius = 5) + |> tangentialArc(angle = -90deg, radius = 5) |> line(end = [0, 7]) sweepSketch = startSketchOn(XY) |> startProfile(at = [2, 0]) - |> arc(angleStart = 0, angleEnd = 360, radius = 2) + |> arc(angleStart = 0deg, angleEnd = 360deg, radius = 2) |> sweep(path = sweepPath) |> appearance( color = "#bb00ff", diff --git a/e2e/playwright/testing-constraints.spec.ts b/e2e/playwright/testing-constraints.spec.ts index bd2babdd66..8b4dea4d62 100644 --- a/e2e/playwright/testing-constraints.spec.ts +++ b/e2e/playwright/testing-constraints.spec.ts @@ -57,7 +57,7 @@ test.describe('Testing constraints', () => { .click() await expect(page.locator('.cm-content')).toHaveText( - `length001 = 20sketch001 = startSketchOn(XY) |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> angledLine(angle = 90, length = length001) |> xLine(length = -20)` + `length001 = 20sketch001 = startSketchOn(XY) |> startProfile(at = [-10, -10]) |> line(end = [20, 0]) |> angledLine(angle = 90deg, length = length001) |> xLine(length = -20)` ) // Make sure we didn't pop out of sketch mode. @@ -208,7 +208,9 @@ test.describe('Testing constraints', () => { .click() // Wait for the codemod to take effect - await expect(page.locator('.cm-content')).toContainText(`angle = -57,`) + await expect(page.locator('.cm-content')).toContainText( + `angle = -57deg,` + ) await expect(page.locator('.cm-content')).toContainText( `offset = ${offset},` ) @@ -219,7 +221,7 @@ test.describe('Testing constraints', () => { `|> line(end = [74.36, 130.4], tag = $seg01)` ) await expect(activeLinesContent[1]).toHaveText( - ` |> angledLineThatIntersects(angle = -57, offset = ${offset}, intersectTag = seg01)` + ` |> angledLineThatIntersects(angle = -57deg, offset = ${offset}, intersectTag = seg01)` ) // checking the count of the overlays is a good proxy check that the client sketch scene is in a good state @@ -470,7 +472,7 @@ test.describe('Testing constraints', () => { testName: 'No variable', addVariable: false, axisSelect: false, - value: 'segAng(seg01) + 22.69', + value: 'segAng(seg01) + 22.69deg', }, { testName: 'Add variable, selecting axis', @@ -482,7 +484,7 @@ test.describe('Testing constraints', () => { testName: 'No variable, selecting axis', addVariable: false, axisSelect: true, - value: 'turns::QUARTER_TURN - 7', + value: 'turns::QUARTER_TURN - 7deg', }, ] as const for (const { testName, addVariable, value, axisSelect } of cases) { @@ -585,7 +587,7 @@ test.describe('Testing constraints', () => { testName: 'Angle - No variable', addVariable: false, constraint: 'angle', - value: '83, 78.33', + value: '83deg, 78.33', }, ] as const for (const { testName, addVariable, value, constraint } of cases) { @@ -657,13 +659,13 @@ test.describe('Testing constraints', () => { testName: 'Length - Add variable', addVariable: true, constraint: 'length', - value: '83, length001', + value: '83deg, length001', }, { testName: 'Length - No variable', addVariable: false, constraint: 'length', - value: '83, 78.33', + value: '83deg, 78.33', }, ] as const for (const { testName, addVariable, value, constraint } of cases) { @@ -852,7 +854,7 @@ part002 = startSketchOn(XZ) test.describe('Two segment - no modal constraints', () => { const cases = [ { - codeAfter: `|> angledLine(angle = 83, length = segLen(seg01))`, + codeAfter: `|> angledLine(angle = 83deg, length = segLen(seg01))`, constraintName: 'Equal Length', }, { @@ -1174,7 +1176,7 @@ test.describe('Electron constraint tests', () => { await cmdBar.progressCmdBar() await editor.expectEditor.toContain('length001 = 15.3') await editor.expectEditor.toContain( - '|> angledLine(angle = 9, length = length001)' + '|> angledLine(angle = 9deg, length = length001)' ) }) diff --git a/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer-no-pipeExpr.kcl b/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer-no-pipeExpr.kcl index cd013a5fc4..489eca0dfb 100644 --- a/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer-no-pipeExpr.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer-no-pipeExpr.kcl @@ -1,8 +1,8 @@ @settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) |> startProfile(at = [75.8, 317.2]) - |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) + |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) |> close() diff --git a/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer.kcl b/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer.kcl index 768bf99328..60ee4f65d9 100644 --- a/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/e2e-can-sketch-on-chamfer.kcl @@ -1,8 +1,8 @@ @settings(defaultLengthUnit = in) sketch001 = startSketchOn(XZ) |> startProfile(at = [75.8, 317.2]) // [$startCapTag, $EndCapTag] - |> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001) - |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01) + |> angledLine(angle = 0deg, length = 268.43, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90deg, length = 217.26, tag = $seg01) |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) |> close() diff --git a/rust/kcl-lib/src/execution/annotations.rs b/rust/kcl-lib/src/execution/annotations.rs index c7c92fd2b7..2df175ccb0 100644 --- a/rust/kcl-lib/src/execution/annotations.rs +++ b/rust/kcl-lib/src/execution/annotations.rs @@ -12,7 +12,7 @@ use crate::{ }; /// Annotations which should cause re-execution if they change. -pub(super) const SIGNIFICANT_ATTRS: [&str; 2] = [SETTINGS, NO_PRELUDE]; +pub(super) const SIGNIFICANT_ATTRS: [&str; 3] = [SETTINGS, NO_PRELUDE, WARNINGS]; pub(crate) const SETTINGS: &str = "settings"; pub(crate) const SETTINGS_UNIT_LENGTH: &str = "defaultLengthUnit"; @@ -162,7 +162,7 @@ pub(super) fn many_of( vec![source_range], )) }) - .map(|v| *v) + .copied() }) .collect::, KclError>>() } diff --git a/rust/kcl-lib/src/execution/exec_ast.rs b/rust/kcl-lib/src/execution/exec_ast.rs index 5dcce9b81b..88636ffb09 100644 --- a/rust/kcl-lib/src/execution/exec_ast.rs +++ b/rust/kcl-lib/src/execution/exec_ast.rs @@ -1780,6 +1780,7 @@ impl Node { #[cfg(test)] mod test { use std::sync::Arc; + use tokio::io::AsyncWriteExt; use super::*; diff --git a/rust/kcl-lib/src/execution/mod.rs b/rust/kcl-lib/src/execution/mod.rs index a4b8ab7494..28cb9b4465 100644 --- a/rust/kcl-lib/src/execution/mod.rs +++ b/rust/kcl-lib/src/execution/mod.rs @@ -604,8 +604,9 @@ impl ExecutorContext { settings: &self.settings, }; + let cache_result = cache::get_changed_program(old, new).await; // Get the program that actually changed from the old and new information. - let (clear_scene, program, import_check_info) = match cache::get_changed_program(old, new).await { + let (clear_scene, program, import_check_info) = match cache_result { CacheResult::ReExecute { clear_scene, reapply_settings, diff --git a/rust/kcl-lib/src/execution/types.rs b/rust/kcl-lib/src/execution/types.rs index 4bde96ec77..ded41cc356 100644 --- a/rust/kcl-lib/src/execution/types.rs +++ b/rust/kcl-lib/src/execution/types.rs @@ -760,7 +760,7 @@ impl NumericType { } } - fn coerce(&self, val: &KclValue) -> Result { + fn coerce(&self, val: &KclValue, exec_state: &mut ExecState) -> Result { let KclValue::Number { value, ty, meta } = val else { return Err(val.into()); }; @@ -832,6 +832,14 @@ impl NumericType { } (Default { angle: a1, .. }, Known(UnitType::Angle(a2))) => { + let mut source_ranges = Into::>::into(val); + // A single source range means it's not via a function or something. + if source_ranges.len() == 1 { + exec_state.warn( + CompilationError::err(source_ranges.pop().unwrap(), "Prefer to use explicit units for angles"), + annotations::WARN_ANGLE_UNITS, + ); + } let (value, ty) = a1.adjust_to(*value, *a2); Ok(KclValue::Number { value, @@ -1156,7 +1164,7 @@ impl KclValue { PrimitiveType::Any => Ok(self.clone()), PrimitiveType::Number(ty) => { if convert_units { - return ty.coerce(self); + return ty.coerce(self, exec_state); } // Instead of converting units, reinterpret the number as having @@ -1172,10 +1180,10 @@ impl KclValue { value: *n, meta: meta.clone(), }; - return ty.coerce(&value); + return ty.coerce(&value, exec_state); } } - ty.coerce(self) + ty.coerce(self, exec_state) } PrimitiveType::String => match self { KclValue::String { .. } => Ok(self.clone()), diff --git a/rust/kcl-lib/src/std/extrude.rs b/rust/kcl-lib/src/std/extrude.rs index b1d48a2b88..55dc76b0c3 100644 --- a/rust/kcl-lib/src/std/extrude.rs +++ b/rust/kcl-lib/src/std/extrude.rs @@ -105,7 +105,12 @@ async fn inner_extrude( (Some(angle), angle_step, center) => { let center = center.clone().map(point_to_mm).map(Point2d::from).unwrap_or_default(); let total_rotation_angle = Angle::from_degrees(angle.to_degrees(exec_state, args.source_range)); - let angle_step_size = Angle::from_degrees(angle_step.clone().map(|a| a.to_degrees(exec_state, args.source_range)).unwrap_or(15.0)); + let angle_step_size = Angle::from_degrees( + angle_step + .clone() + .map(|a| a.to_degrees(exec_state, args.source_range)) + .unwrap_or(15.0), + ); ModelingCmd::from(mcmd::TwistExtrude { target: sketch.id.into(), distance: LengthUnit(length.to_mm()), diff --git a/src/lang/std/sketch.ts b/src/lang/std/sketch.ts index cd9974f025..b9dcbf4e26 100644 --- a/src/lang/std/sketch.ts +++ b/src/lang/std/sketch.ts @@ -31,7 +31,6 @@ import { createCallExpressionStdLibKw, createLabeledArg, createLiteral, - createLiteralMaybeSuffix, createLocalName, createPipeExpression, createTagDeclarator, @@ -4227,13 +4226,8 @@ const tangentialArcHelpers = { callExpression, createLiteral(roundOff(radius, 2)) ) - const angleValue = createLiteralMaybeSuffix({ - value: roundOff(angle, 2), - suffix: 'Deg', - }) - if (!err(angleValue)) { - mutateKwArg(ARG_ANGLE, callExpression, angleValue) - } + const angleValue = createLiteral(roundOff(angle, 2), 'Deg') + mutateKwArg(ARG_ANGLE, callExpression, angleValue) } else { console.debug('Invalid center calculated for tangential arc') } diff --git a/src/machines/modelingMachine.test.ts b/src/machines/modelingMachine.test.ts index 2181d30d89..89e79209a0 100644 --- a/src/machines/modelingMachine.test.ts +++ b/src/machines/modelingMachine.test.ts @@ -376,45 +376,53 @@ p3 = [342.51, 216.38], namedConstantConstraint: [ { name: 'should constrain angledLine, angle value', - ...makeStraightSegmentSnippet('angledLine(angle = 45, length = 100)'), + ...makeStraightSegmentSnippet( + 'angledLine(angle = 45deg, length = 100)' + ), constraintIndex: 0, expectedResult: 'angledLine(angle = test_variable, length = 100)', }, { name: 'should constrain angledLine, length value', - ...makeStraightSegmentSnippet('angledLine(angle = 45, length = 100)'), + ...makeStraightSegmentSnippet( + 'angledLine(angle = 45deg, length = 100)' + ), constraintIndex: 1, - expectedResult: 'angledLine(angle = 45, length = test_variable)', + expectedResult: 'angledLine(angle = 45deg, length = test_variable)', }, { name: 'should constrain angledLine, endAbsoluteY value', ...makeStraightSegmentSnippet( - 'angledLine(angle = 45, endAbsoluteY = 5)' + 'angledLine(angle = 45deg, endAbsoluteY = 5)' ), constraintIndex: 1, expectedResult: - 'angledLine(angle = 45, endAbsoluteY = test_variable)', + 'angledLine(angle = 45deg, endAbsoluteY = test_variable)', }, { name: 'should constrain angledLine, endAbsoluteX value', ...makeStraightSegmentSnippet( - 'angledLine(angle = 45, endAbsoluteX = 5)' + 'angledLine(angle = 45deg, endAbsoluteX = 5)' ), constraintIndex: 1, expectedResult: - 'angledLine(angle = 45, endAbsoluteX = test_variable)', + 'angledLine(angle = 45deg, endAbsoluteX = test_variable)', }, { name: 'should constrain angledLine, lengthY value', - ...makeStraightSegmentSnippet('angledLine(angle = 45, lengthY = 5)'), + ...makeStraightSegmentSnippet( + 'angledLine(angle = 45deg, lengthY = 5)' + ), constraintIndex: 1, - expectedResult: 'angledLine(angle = 45, lengthY = test_variable)', + expectedResult: 'angledLine(angle = 45deg, lengthY = test_variable)', }, { name: 'should constrain angledLine, lengthX value', - ...makeStraightSegmentSnippet('angledLine(angle = 45, lengthX = 5)'), + ...makeStraightSegmentSnippet( + 'angledLine(angle = 45deg, lengthX = 5)' + ), constraintIndex: 1, - expectedResult: 'angledLine(angle = 45, lengthX = test_variable)', + expectedResult: 'angledLine(angle = 45deg, lengthX = test_variable)', }, ], removeAllConstraintsCases: [ @@ -466,7 +474,7 @@ p3 = [342.51, 216.38], 'angledLine(angle = testVar1, length = testVar2)' ), constraintIndex: 0, - expectedResult: 'angledLine(angle = 55, length = testVar2)', + expectedResult: 'angledLine(angle = 55deg, length = testVar2)', }, { name: 'should un-constrain angledLine, length value', @@ -512,27 +520,33 @@ p3 = [342.51, 216.38], deleteSegment: [ { name: 'should delete angledLine, angle length', - ...makeStraightSegmentSnippet('angledLine(angle = 45, length = 100)'), + ...makeStraightSegmentSnippet( + 'angledLine(angle = 45deg, length = 100)' + ), }, { name: 'should delete angledLine, endAbsoluteY', ...makeStraightSegmentSnippet( - 'angledLine(angle = 45, endAbsoluteY = 5)' + 'angledLine(angle = 45deg, endAbsoluteY = 5)' ), }, { name: 'should delete angledLine, endAbsoluteX', ...makeStraightSegmentSnippet( - 'angledLine(angle = 45, endAbsoluteX = 5)' + 'angledLine(angle = 45deg, endAbsoluteX = 5)' ), }, { name: 'should delete angledLine, lengthY', - ...makeStraightSegmentSnippet('angledLine(angle = 45, lengthY = 5)'), + ...makeStraightSegmentSnippet( + 'angledLine(angle = 45deg, lengthY = 5)' + ), }, { name: 'should delete angledLine, lengthX', - ...makeStraightSegmentSnippet('angledLine(angle = 45, lengthX = 5)'), + ...makeStraightSegmentSnippet( + 'angledLine(angle = 45deg, lengthX = 5)' + ), }, ], }, From 14e331105032ad2a7ac86c155f1f1edbceccd5ba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 19 Jun 2025 01:52:08 +0000 Subject: [PATCH 7/7] Update snapshots --- ...ode-color-goober-1-Google-Chrome-linux.png | Bin 136914 -> 138507 bytes ...r-opening-window-1-Google-Chrome-linux.png | Bin 120013 -> 121719 bytes ...th-single-quotes-1-Google-Chrome-linux.png | Bin 136878 -> 138591 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-1-Google-Chrome-linux.png index 1a6b72f11dad2b04d3a58df4fa5ff32d1b5796d5..aab2024ba360360dbac3ec392b2b47f6cef08429 100644 GIT binary patch delta 98971 zcmag`by!tj`0fi&KxqUdr9q{;I|b?P?(USFC%x-6h>!0@7WJhO_Yd?rZP; z{;qSK^)E14W34ft=f3afGv-7oVpt>MFYFYsE1R|o-amtnEh$~<_^Ye(XKb%yiY&x$ zWa|qROfxm5prnW1T`(WExTa{Ha`YlJ+B;gqAHsKrR&q zD2hnVF3KZ~xaoWoNxX`_bBG4t#jNltC{!YQ*Cmvr&a6ED-v~5yE0@dNEnlpow;YdT~lh z%Cz<6w>f#N%hV3TF-vwkJ3E31_=IpsR11q}iqta3yH8vu@>YV9-&R)<$pbM68iJe$ z3chQXsuxf9ZWt+hM)h=B6SWvJt+L6X_SyyB2F*!c65YSt^|LZ!qO^H6*V#>Ift5Uh zCsG{p?caMpLp>!B75xUD&Ltwhim5hA3}g`{=DNzc=j&m;!=*QD1$MsYl-#fB0TLr8Z4wMOCM zY`aRhW)+Jv3J$>sF4Z1Ug#<<)#XCEqUP0f#Xn_#C51LWk4G2tI{d~L2Gaz+uK1BR5 z=VfupnR=?l7@V-QIl4heIAxRH<65opI4cI&EEjn}r%rDF2s zg#!Z#hj5)sCpbpi9=mzo%am+YZZm|0`MhB&e*x{IqYlEyMlGyk<^+GbmxOor{APU> z#&wbj_8^aEaaFg+PG1sMjquSF_*LMAkNkYvwXV?3--n3#Y#p!w z*PbhOGx^-8TOB=vJ;*nE*>`tuwkL3|()n+LT|8*P0ekyI$Rc`OP+)mzsGD&e=U5)? zYySeox{tH(dc>RR2Ho-%!rGo%QBhy`ziz0||3pJhp*%NHGT&Ot&ZolqO9?IBs}M3( zlL<0}CEPI>5L>&kTNf1VhE*T7L>{`tw)&T801%3~6 z)nEHA3Q>inYQ%iBdHy9JV_AdLW|_d|b#gozuePKl zKrI?BKD#@6$$z}toPB5=Xb9RQc_rmNhUQsteJ;C5qL_h8RSyGp%e$NsgkfT_Yuc`^ zew1-a^i|>ffb7wkZJ5jR);t+*TXG-9DGFoijFUZYRx}x|NB88TbU}T=M+ETB9;CLn zkLNoT>*_jg%wM~o&qLY$u=o(wTm>f<|MlbD*|ja@`DCFB@aMcUwRy%I(8MC<>S1CQ zeP^v&7^SY^qoRxmVEH^4NTq*jtfl=xeYTBKi@TLtPz(>?Dkgfwa{vGtAoW2+b-yoX z1QFF*srWo4hGiI%j@O0WkQihsJ8II%PUNy>lb-ZT}9 zC&>}F%}S;*UoK2jq{-XtiF7-AGBeT)_pN4(mPbps(a>-+l)?D-ZS?hee=5B2A|+8M zo^4C;&6K5t0Tej5hpTB$N%YNFLq253TeC-gwDfIg#_NqB-PoNho4!}|+Dxc?jey4| zDzXh>AztN#Y3+;#)`CFL{2QTa1lnHJ?xjlpH4z^zGq6(TBRXnh5sQkvX8gi$CP zW7{2Gn$^ItkPAH=p11ZquAS|yx)4rEG&C~fllaV}APlGxbajHCM!SWLqWPNSGTU7B zoXOgzKb;Oy*WH}z%fg$g|CSY~cS=H+N5gQ$rw{eA0dor<8az9aa3*4AbAVs(#@X7_ z&To=AqXyA8qkNIdoB*m7p8jpD$R4JjO3Efuq0g z>9{avG}NX#kRKxfo5tCj@!v&9;_c^$(l_YUK%R&=H6~367VaFf$ zXYKMjDOE^T~#&OG|kjO=5zr7!D zZL}A>lP__*0vNG5#<~8~gjpoVhJGbCGQi!Q9A!jC@_tBmOkpr?0NMqVD#AXB z+l~y=TH1i}7bmalU45w#UchUp$7;WLJ8iwv=&GJIUh?0??b15ldES)pd0vO+T<&)N z&Buz#5b%HnRx>b?`;>BWFjuFNT1#+lKH&%G>(z> zY_1*XQ1Qwu9txC@kr=_q81oWxtS-OuA>u|uR+OO+!k8R?n zSQl!O`-wMe{Vct$KArb?LT$JA3Vmhz)I=PV)@ze=?yaY0-c`1pXG!`UD|e5VaO9?2 zVqtf0PP-k)<71|kYdQ@68Z%=6hHP)z^z2LGid4Rcd*t4#vfCi<|8;u&lH1?9nvSOd zveP`VzHh&94Uv8tAKzmU`C_)w?Cspdlf5kPvShfgh~RIdp@+NBtgy0rKzK*ylH8M& zVP!#8zP8^(MbOw;i@H;GN&;U@{}e%WUQa-m2{!4!_UZxe5Ez|~^=ctXo*vJAYKJA* z@5#^6-XbK+A0mAzEk69X%yH-8(hT~xOi;ozHL#tn1k?K6l)b;p$`)+z{oPedM|?BU zx^H$a*4e4I4Bc45pH~d8OVpgHVN{KHy9VbQs141>{c%;)xKv(1emkI ziIEC;)_<5l1{Oolg%bHE6ET#r-Etb0i^c(ABb#&T%->GTY30)gVs?r&ZD8vJOUOmc z(vTS@OJ-TtdM)l`53WK6E{3dLYQoyky(_UVY8u;W=53NrQ zy4;fm%A7^9ctd=3oIOI4;BRw>MxW1$v6_W*I$Dj?>`VHh)TmKJ=L16Y1U9dZiJ0PDP%JtURTgpYUAZ`dXzKchy14m>A+6ip!dn z#{?;-?JnUufM5GypY|jJyEF%I5(rzPy38VJdEX?Wq*vwltb_t3z7YBh?Cf0sg+OW- z_Rh!~np#RU-dau4VgKY(q*qsPHrb~;3X9A*AjPL~-u|TtL@!&WGDy|zSNHm=RtG9# z_n0&Q(1Jv_o0>^GX&v!!gZu(p+?U0MyhVq6Fjp@>7X-qk@Bqt8FOtE7ly3cc+(RPx z^WB`k9~6$6HMnpCjELY|PY5htys+Syu?c}T8!KhnEreiSF`d}CF&?bxcfw@0<8vgJ zYSat!jJ9Eh>AR>wRwUuoRagS#wxKY<3cnywT{NAC67G;KutJpnZJ5V*TOcpq=7+jB zUR^>0m?z{F)l#L72sAg{tY_Q&a0lBIbEh)6)e@2q(1iaU@-k-3Pn0w`T=F0nbmJ{8 zZt?=1E?Bj7uCkr%_^6?^?k2_*Cm3HNL%i>-= zH?e1GK(|`?(yEkT8q&L|3vI6nPbHD2)AfrO1|r6d5jB`5zXKv_%Jwa1MDhW5Pm3C) zXMvOX-C7Z=vm=9>K*)VP?#oa|bM{NG){g-H>s~K~)V=TQ@=Crfj~C;4VcVIDY0O|L z#4%}y&{5;V5MjcE%sU3>v?HkA3Ezmu6-rEw%(Zs&7q;Ywteu4)qB--tbX;9u^e@E$@faGVpYs-q{awmRRY`gkUv(}^!9%(L7|6y%9RL`dx8tI89a-Y3KE;Vw{ zA6!}5V(Iwe-Fv4H;V7hT%!PA&h-gHG?2iFw#L6q=3Jb(q_$%m`go!9nn-GhJw*J6) zF3pzj-kk6T;@ZyS5t4~yg5N2=drKKX{w$5apKI(9ki5AZ!{W`QIL>gux%W0vk?^{j zClihlC85BmuzG))2(YGcHWliZO@2N3s$@@+w>VdV2rBDVk$s9q=`m!(uL=;2I8;u9 ze2|;It+47%zmc6WT?HnwhJ`ZAKF)M#u8w>gHq=d!l6hCEExLv96(m4FlFRUGsJ5$a z3f^6p^82idyAOeDlfOF*wrYDg@wpArRA6FyHQTXxrgJlmgUQls!#|(8`zVs9^3ro2 z^LzF#UK2BZoO;I`w6NmVax$Su!T1ZelJ!r9`9YFZ*Sj`DEKP!T*9j=aOT%|GOSea{ z-g$n~x?B*^($Kl?2k&s7!W4*WNMF4n-W@S#(|uW@4 z79bN8`MWVF;QA96pmi=kTMo>W`YtRo^!G!nq~XE)rw`_z_IBDeH~z}5;}O3*y9E40 zhkoqPAj#rUPJYE<@vH7>5$hArW5^iac8-)q{!7p`4gXbI#s~b$`1y$VMsvo^O8IAd zS|6-G4-3h%8(ajdT{sgdqLCuTeji&6)Cjy_#8y=Gj49G9HBpT8o6mXt%Qc;sRwTz4 zNBs1Zbqi5In9Y}WB_w8YG*TkbXGBT3-ZYh#%cu5_t}lSP5n{f6Mf0|>j_QAV;O*d; z>>J|LYGyxhC@{3rIBwduOGMl|DRd!us7*k;x+UeUM?u~hVZV{cSA?}uiS?GkJj6Kj}pLFOY?=l8#3zggYPW5 zYc9awgQhG$XF)WFqv`iKb_qK@p8c71AkjQ&X1dz&War<^%%ZCJZz@U z;1UDWxuL$KPuwQM43p}^37k^z(Cm6!lgmLaqI=ivDYbL{0AF41gRP?8Y#k8JKU|N> z;(jx}hE&LIZ2vsUyhm0l=OYFyC58Le+`;Mygx*lb)9p+Ovxo~fSVpZe&)qI9$K+>? zV#)Q}wwvAgj=<=N-m>ZRu-E)14>z!{y5dH?-0hixgWm<^4zow2Hmweot0{F6Mb_Z- zluS*Y!du~PKg-HC|3O&)q5aA#vqT6?{ zN|p!Suar!1e1J7d+(5#dG-cycUus$_eP5?;U? zwvHe7-@Oo`Yz??0$yl)*A;02WY}afS5;El(GMdb*+-r?xRRU2KE{mag%$GgLi zPY*LRB9KXxa{K$8w$;|lm3&bB@c4s7AMcGh_O9mYEKjRNdYCJhyd|I5zSNAlO`$GR zWXKKNN2HRNAB%!lMoJvxtocW@(`qGmJftgM`U{C-l>faF7!{{CtQL&8`fs$g(cQ~phEu$f1Bxi(RH`e*PDbpf>tz0 z6|zdad0N@LBeT)H9 z-!~C&$b3HAh{y+N=PDLsqpe%F`A26)BEHC`=seb6bUbq1xMBNHysMyr9xk8yXP=bD z`3~gf+80)9sBrpW(7sO-BR`}56u+ghOhAcodP=Q7IPw%b+O<;OV0a17)R^fJp<|TKqT?+_D6SggSEJu z1my-KxNgTgFK`2#a;y<;u3!M&Ldyo_abu8Zoef{|TgGp>-|^K~x25{*3}=G|F0}hO zac&brBe5$ie0ht37(f{=9%a6qv%M(dm|A$cD;l=8MiihzApV5qR_xJ`5@4i#E}|Wp zh1ikv-$x=0&SFfIYS#>ev|Os_yL%~0zJM`g)@pt1n4S%86>csPSyGQZ7V-ukuhHuy z1g-IrTda}JeMTjJA zeoId~-h~2C-oo=I#a8k#?Pr1;2qpr}x3^zXX*QbLQlB7?eMi!Q$x7qFwu{J-`b;Ua-pRavR5th~3kmpYN6GNsD|5)x-L+dnJr`0rgYVxWDH8 z`2A``TiNON`fS9vp}FoKp_}<&hbEiqrfnQ4I)FJzHZ%(x`D-Bp=AfCn;*MA!Iswyl z7WGv&O_k8VAZt4KkX!wNx=5?E$T|V)BtJl?(Zdj8L6vibKfV1a9E2*ZW_S9-j!@+d%Qnu{D7G#g z+`+<%aj)(PQEyMH+w3du{T}(7=C={em6tJFL#VffHnTcUD$~yQgB)}Q_obQQM)`1y zIfn!Q2GaahYa65*s+UnJ^IZ(bE?z#b%<{$FEP*HpJ~8OjF8N+91Ha6NlS_5#yu7@4nQB{O zq_uN@%>4SMxiNB*xyIt0WLf|Qz|NlhE(p$;qWSB2+@f^SA(YHI;+}#A+s;wg9XyCt zp?mAI3bi#?J>7TbF92c8=Q!c95D#xFGE#1c?ZwEb8jiP zsrp1l%7_jeMIPi~WK@>bp2S=+JmO{WE^H^58*P3WN1+U6qy9;K1}-g}O2=`wRTnFN z1%*%6`P6T(Z#@=A%Y@45lW~!RKfpqUrlK=m;X?i%WpBI=Lw5FZG+Na}_2gNp=r%sb zNr>ZwRH&Ak3MBaOg^YM!Bi0aoJT>AgjV zwucS`()*JxbQthYy7!UipU()|+S>4BzxA`J_u7vfDCKod65NSPBHaS>-DE+Wz( zOh4C_?)TyJ;PLytn>)(;js7R0QhLWGq(d6Jg(=jpbzVwdN^Xl_LA0?V#yJvT%vQkWU?56?0H zQS@-GVgsrSj}`Fj?d{P8um2<%_|2bJVllPdpWR;WNAOjl-{>>V=<41I5`Ekj^8V~S zQNKR?Y7;{#Tm^DS$23~!d3U@_AF;zsn$YcPHQ5OD_m|s{ zyJ_{@f5nbDJH{oVnJQcYWPz5ayEQac;ov1 zLHWc-yQr`*I$BzSJx8e8BR5UJ;*9$)`Hs~0;yc?H5wVT2$5vGbQg&p|yDEi}Lr{pN z0to?fzceZ@`02_mnyHO(~FG34jjp}2_W8MZK zTX{B%-Hu5z#7a-RvzmskrAO7vm^oYgxytPc$s!^|H)pBpEAdV#{ro=6{Xvp?LMgu0 z<%XbzmVApmpu0Dcbqh53FKABoJ7f*TARz0mr=o8O*<0xC_AH+CT8f$e%5{aza|?Gn z!untBM5PQwL{l)wA>)<7bf0>6a74rPcAx`~Dl6gh0VVeHA~G=nEYZLqHsi~DCoE;J zuU<_G?=B9xygfc5^dQ)!?xOZ|tfUJRN=Od65x0T$Fs5lk^9sj^Kqh@30t?~4{rBw) z61iv>Iz! zTMi8-uKgxd(*IxvaR;sM>s9VwR>#CYnB0|S;Vyg5HuuQzg((x$yV+~=BpP(FS0py>hQMfY-*MvCl~W3 zz{z>@Vu^wi{!lwz6q=&86I8n$yE)F@wkbIs{Lj&-+YLM<>kfQuN<9 zzP8&-ME(vqcWBbdR(fiFm}L8S)k~Qt(HB9y_tV}~TU3x~#Aenl1A~{DjjTX~2K{xT zM97ktV}l-;nN9IUtdn&@;W9tQDE}?a-fvded(Y8Fj?<-^-aZmOk88)_s?ol?Tjz-U zbWg^-2C16IkRe}h>kLoEUbSul_b$*^nOa@9>^t;+0f0NmH`02h{m%$&PiMb-f+*4O z2j^7A7{BYcD07>PbY{N#Cyxv8?1wN#GslLzz{%~g^kW?7BvHmD_xDWJ7l}4K4Pu0G zhN>T~mu(0~((L)cAWM#AeW6#fk(vJsCg7rW75@-U8Z~OpS|^)<06fvvr%q110H94$ z;SxO*yMd!f^<&XMogNL~FXabQo-fO*rGrC@{qp4H6GOdENi8yVM|xyt=~THBkv zX#s}N_+vVyPvPW3-^nscvyd5{$+&?ZKOuH&;~1LbOXjY|VyEKHa{IMZeGwhy`1V#W zt_oJHOsc83Mlg~6yipgI))B;U;_mQS3mS5HgXRX6_xxT~pQ@RnG{z?Gm#4Fa^1L=K z3$gO_o3wMX&GI2%Jo)`>n}ZXi%dgf>tGyn)=kW$iUjrwmE-SJruaDQ%C}SkqtqUcp zSoWI(e*aGb;fKA@Qu_$A=o1?U(W?Yfau3aT!8f zEaML$ADL=vEuZ*xg>1@Jhvr-FAXBjIiJluVcyi{y5@%VFEn7qP+RL1gZ1&(dCh|;Ij*d=2HpG}e8ho8s!}+n7 z_*Pm(%ILA=W!>ZBKDscBI5i<$6C(I5+q#A#k}zHy1Av$GAKEkgiEjX)ind;xr`7q*4IH)pUp8FHKSX{BNNkQ_{b&Hq)M5Dg@1dHIMrDje}3r({25t` zmwBJ!%qRyz`$T6qu-jKE;ok66-tTwR|5mma0jvV@!*) zWVgxM;0(|3TKsH)V^b@{bQlWk3WU4rO&!4?90GJ z>v50Vw}Ji=+4&0P7grmw!kU4?r4w{1IS*{deER&AG-;zhoOu1y+AvuV~^8Zq#Yy=_cq?l00n8&;MSy z_&D)2g-QKy7!Dn%?DL7?#qIV|m;7qq zC`OFE6BoMI(gd}%>!0qtqB4kl?#_PSknb0bH3!~STNMlQ&_$9X9{(O znuf(#43eUvXlr&LdUXPu68mzkhqEAdkvFC>%7raKygRTl6iUb(=m{~9C1w>21>M4b zU9SiPoj&`BlxErZ{pnxWgCZ&b^a8!@N2pPcS7LOuQ_$=2 z$5?DR^`|0mvgNoT&*~Ci@K0ibjJ=aOog4DVlcr;AZz8jER}8Jj%S5ifLv_b&!%fM}39MK2;2~4-bo% za-Mt&ub?^duZq6I7s!ZO1On*Qz?Q~v8c@Fcig02))u7Lr% zl^Fm_*G9M-x!yr{bFQIprzbcS<#h$UFOi}Ws@3YOfIm|l{eK-b`i`3g7-d68jgTAY z8`M=)%YX4IC{>Fm-9HI*{c+jJcguAPMO!>{OLry7^3;BjqY6((obh@HPUXS+*IuR<^=(JS>LO7 zv7N{EX(+24be8YmQyPVWhOxiXx{P6j%}x6Fd6U#lh}2l*AOBYB0_|yC-z}$lQNri3 zfor4}z{&K1&dxHj7GtlQ|7*9tOYN5Q!M#B)q~H!8N*bQ=Nxq@!2(aG}zYieR6?#j? zU0k6rgKEYq6{E}|#C?$R19oyAK6f+f5(d^tW;?9%r($)L-kboc#KL??ItFJC06374 z0@~Ag9I3^03oVTC6vVlJPq z*np`JoD`wKw!5+u5HCZasKl}@di-624UF(g*~VEC!|=kLh6T`mi?_7tEC4v_z5Edr ziJdEFD?Ny`D#vWKnJPuMop`jlcetWSzSVH1RvCG<Ocf1au{Wt(c9 z`Aw`-B{hIpKZNVqSKz1Oy*iuim!KrX)_d6CnQ4o=@j+@Ibl{12#i-6-J8wLw-gnMF zsZa~R`M+%Pn7z4m!X1K)(%A1ple%^1hQMg|By8D@xPLOdYZ2NpV1;E=9!Q(`{Dy_B zdKpR?BK@d|h+ee6H7dEvu_7_~fuk0;9s_df@gpoB23kG5-TbiXABV|OZoscYVfB6A z^(l#S7IZ>?UBfF(#!hnQ=-C_K)j$N;FW0Foq@)>oJ)R%JRfIsN+{dP7u`-L*fvNQm z_P1IBfB;q=V$wPuwP6)hIosJL9g%)eK!oykR1WAkp^O|eI%%I5l4+mX|D+?BWNPKU z06@XENmH%@%=YxX97~2rrB4tgbC~X6HH3!q@@J)&7BO)KRgI9vc^Hl3KC01e} ztmvP=R;Rm@5!i~ThCU}Edm$UIfr4T+=eZ$&;j()5m%wL{=7S-1K(YU?t$kk^n-ACL zLW{2-{I;69pxPh;y>O&Mz^qAhPAfrlXTI+{FIGUu0bDc3IN$HICV^~ydZm5TlYVf( z(!{$-denq1+$3D|Rn;PzteaP-vAZnA=C7taV5*;8NZ)!XZke5J!ETp(Rc1DKy0jMb z7z@S}B^VI?R#+Lr^7aA+(Ha_mdwA>o6T>jmVS&tabb~8}0^ShYxnCVpfyFk0Xiq+C5 zvah-sQfOQqC@=f=jYmsox76m-zYE;N#qCzGgH#%v+vs z>=PKUuIlE2ChOEv-#nOTV{fld;^~n#os&Mkn#J^=n1Fn_uf3^z;nP&g&-jcU@VNeb z1wi?~)T`gbqUcKA#jZp5NO>vPM1!&ocFw+5r6q+CSp_Gti35YPs9s{?=2922*XuC} zFa;;4*$kpGi3!rEL0KjV#LW?}m}v?Utiz?W7pTEZr)Uhoxo9z8qTWn>AQ9DC8GS2^ zbD)~V@7_d1`we#Y?J0pNvFBYPAo5+aY&wSS5;<+<&nGIgX{sg~^^dGpK5b~uxh-Ly zuo9h`N-|Y>C88vJ+KKV&rw^mERw)CDEKVUBVG;8jk?7BU)Y5ck8PP~udZ5v5A28gX z0Za3G-S%e$PTJvk(~i#iOJsTKb6ZvG3sL*wU87B=%VN z?E+_wwckkrsZ9A?*xx&w9_yCJm_irPz%t}CNXr50WZ~Jw>m=D9+?*UjRFiY-AUD3v z|9}!YhFFtKy`?&$P~yMMrE)Q*@~G?NPVHy#KWv|yOdb)YK}9Yn4Nk_EML=4hV!3iH z&V^TSESQy=t-=TU_?aG`8I)p7mZBu;cvpH8~e4EtFPecaG=fmN-q5o8@q93 zY_%kh!*%dD|M=6cen1CV>q1Q{%adkahoR=hEY1;(zOaa!k@)7O4d7@rTlfals)s-i zGI;rRjF;@tga{AHnpi}R7qQPEW%m3KHD0lI&M7c^Sc=Bm4*orTTclp2y?8qK)z?#w zPUS)002>~d)loA_Cl*UaS2*?9tmJ>mh>Dz^h6R>P5Y(oYz4U*$k-L&R16@uFiqz#= zR84MUdtacCrV_LpvsQaK*Z;a{d{`3!n6cF^tp|3p-uq!H!KRHU>J%?j)g4{$Np zaJM?0QW!%R8_MvNXXIOP0-~a@Qef7<_rWNVY0(@@qRu<s%Kz;$>MGpQ07K-HZzr6lfGsB6KL9$+yzWj5jmAjZPg+UeE&IpDa zJepjM_Ug(07sZ9@JJ7}?C0TvPpzt=`%=N0t-n9-8`_uV&eBsF`O9_~A&44cN+Yl5Q z3&rajThck_KQ(Vy8%cPuSs@UaNy9Vrw$p38Sr}jTq_ZXQ?q5AJs!RkFJ#uO9uF3{t zaFR6WSj!=|@0WzBRbEMgyoCO+lXLWW0snl2l2;l=9`u!)tHrL3PDlYn|G(1<#Nr6X z+R+j)*1i3(!wa?ri~XPYV&7SaYawn`Ca~|JpatO(95~J`ui4V&bE&0 zn?+~^RRev6lPRVHmn~R+o$XJN2OB+ewKD*p#)%Q~oU*cCdkL7aGcYi4aKx=pV7te% zNB5hKprDeQ2D!>&<-QMyWb(McxD?y=R`}f0tVcxpZ@2%ROyCWK?(Pdci3omve)UrA z&71-Z(J>Zf^ChqTsi_8#iiNP+*^k87<+{AwgVlS*KM>@bq7Fl-AN~(L_@*C)v4BlP z)a-lbe#xxK6g(EuW6S@`MI~v(*UUBo>op(9d$20<{aXsGnfub9Yt4q(&w|L)4nn5I z=g@U5Vu%OH$j$9Cl9*5M{zNRO>&Gf$rv6Ve+%&15H$Qlgy<*!j!^$6w*#h3xGVVxG z!IgssyINcdlmhktMwFJH_6K8?8cRy(Z@c)8>P@bWmLCqzgT_aB1N-$`GvqT+0J9&p zP!P<>x1&}I#UnnRsDSp^BDHFZ5&0F;-E+QPMJgEM_NiZw?$seC9nQnSK#9)hlQcOU zfb3k<>nY$M^ZyRq!NWoIGPOcg1ivRU$If3}ycv6QUO}#?j?2+itif*x`Q{RFG1pU~ z{^h#a9!Qxq4?1=B%dNh5E1xzZVq>vQ2KT0m@#r;wLD3W##0kvScDKEQ9znkjQH}8x zgWBn7SKC)oh)Fz8BPRvi5fUoVE`rc8D;dHJI6sUw=?C7e%|xH5DOErz4g)QBxrLe0 zCdYLj&a*eRU;H`V4IF%f!!&z zZx4&a#&7Dc&gK8zfI*T>uSHdkEbOKVlx$|p^s3AwIt(3^4O!7mVR0&bEay}`ahY7j;hnbHdP;QsVV_={I!-wM9_1s)Z-P@waQK(?TGIVkLpnQr7*5qXrpWFCQ zoZsZT&@|GV*1BAj=0|-iOuqGBv4f=6B7j5DrU4M_lUG||gjTYs*EyxA;NwZfrY z_8uLQjl3)^OZX7%b&=ooo-G>AH7R2QE5{S?y#wO_4K%pBfJGm+Q{|Js=S}cqH z&zOh_E$sGGd%Pit7r0jNgRCtc5gZ*TWy*#!ukBSgIziyb~0lbkG{@J;HiIbf!8K8;3RPEyNUiyu(-+anr|E*6m;9# z?Nzh7@L{w$oBN4!Q$t%L*se1cus!c~SF+=qUxqo6O}eTk{T@Kn6aP`$@$??CqJV!q z3`W3P%xRgwZ{!b{TH4Wvno&5vQ%+1CI601|Ik5!1|8~ zRa%Q9?|B6RsT6r~gqCz;)-=8#vPtXkFz%W_07%$`1=5K|Vx(vkDBT!f(Egx=-=yo8 zYZR;LGLE_qD3AgE<>srR$LhbGm3FFuu?3#lDWDxRX9n5>x=O7R2nb6*(lb;iBs`yp zz|zmt?b>c&ucfsRfacK?>93+`Zv|g+aW1hjF5SfqQ+a(7NEmz@_&eu^;A(}&PR*`2 z&y>5$wvEIHLF$1vh9!#>?hux+iu$*6sGNH~;=PoJlqpfFOuMPS@))sh4V;{u#Yt-i zfxOgY011*w3zghCeoRS05q8FX)$Tgajy)ksn#kym!Ngpa`V$}5x#h51ip9Ql@dMl! z>Cp2C^!-g|px$j&zEEDKZD?g_UA;#7&qRg)WLlRKQAm{pV)?98gRT0vHk&w2c);kh zy+viQ_cYw{z)L4Q6zlyI?^`-JXh0AI-ZqLX3H9@r?-wwRcNO2c3mNMoa!sX7Ccgf) zQfABkQ7Lk@LNL(mEj}`}XtAKvWd8a;p+W-;XjxGubMq9&Ka5)TETQYPvmX$>X|)U zbteipg2T~sc@Izb_D3V-yqWmKOqfrSN-FdPdw26ViAxLbz4uH>8OxP&oB1Z(JyEgD z^z7ECj&(RWXRaVPIB{GSxHAkHcz35BcrhlvaLr%ah!|PZF3}O?)0j6q8&m}5dE@$w zhLf1BH}G}^+CXog^?Ew-o0f?AH@sEJBdNdGjP|70g0Kiv=DE3-^)$L-wQ`ZX1phlU zE*gFv7;Vf<;k2t2%&y|3Uq63|{B>#W%-#I9@w#GlRF8-ZgSKWN z&FuZF*PY?;r?cXoDfz=37-I4&*&DN28Z?W@&fb@2hn`2PA2amR+^@mnvvLl>`s!hNw3QkdCJEE2ewF9m$`KGZ@M* zY=?{wD5tX=Vyuqaw=TI7ABT6|8MZFPvW}uU{PsYFDtb{aTI;?@;^Q_49!s_{eZQN{ z%l%muVwvoqs;YkH!Yi`(~3xMFe9)12P|rNnGG}bM)i# zlie=l_WuADw)2>p8(FA7#eSH8%+M)JLVu)-BK&ZB4taE4L3t5=j!q-06xi_&72b#y zDMm{3nOpb=EHFPRxXtkYBpu6VQqFslMQ`H!nadSB?*mF|*R+hlRefjaL$``h51z3V zoX6cKDzB0cj$l*Q$$Sk3T+peZ<^~m66Oa|v{gz%h%jT**W-XGY>nBL!8Sa2>dlbZi6g-{a_#(-x(lG+Vy8peW%tR+U{*`$I#0*6>tPEbq zVjMj*QU8tEcevG@1~O=k36#KoMh^ZLyTFx}nK;T*AlcWgWUMV_c~0Pc*TJ3oa)E=z z?V3TFXoMaYL-|1pwEw5M;ISwJ;Ux8yXv?XI_o&ArzOep3Y`t|@TWi!k7@&C3QlPjN zcXumJad&rjKTx!21=r$G+}*XfJHg%EVRCQpH}jkM=6UiY`6D^Wd1cF5YwtG(22&eT zN~#}@t**MIQy0oJr;PImaqtOPR{N{w3vacCM#x$Z1C_kW4Nw z|HrqX<3TZ#ezJT+k}pIvC6Uv^t!+uyTFn(ZZA~6u79(BGDxUh)$^%%cxrz@esuT-( z8FlMOdH3%ZzyI^aPZjf5lP94mHRRrrZnWWP!LD|l)>=`}|12@f`R-u!to0ZW%gKZl zt(XX}GyhZ@>lJ-v!Jmxd{Q~uogg+FWu9Hz->(Lo=1AoQS*#BHKcW>ZUYS&m)bYiNm zGZJK92GorA=_(pOBKxe})Yh9+tCkn-}v9Je*#Dlq7x$ zDa&qcw=FI%Vy=UK6Gj!Axqe98<7@;p-j|BRAdwbi4eta@&X!>OibhL8diXxNADK>x zz=te_eks^Ib*U#dVx!8<=xmgOMaq!&qE1fm3D{u@c9qA=YuYFX=u!^;_x4{NexS4B zMxAf=$KrFLg0yvXZjTmn)QhJkCqpSn-vmtlc#2{R(^zTG02fYKJ6BIO@?eo-_v{LXytD z2KkXD-CrZN-A-V0UYp&Hs)bQnkp}{`2NZY`D|R#+W~G`rE4_v8hmFzcvmN==e_gKg z6(gx`o$W#jhm9N>GBUD?vN9YAZLp$(Ybnx3=+a*;0U)AEM1Vo=K~6TH&x~K5H=KY9 zRxE$_uN|w>FCo3UxR^Y=MnOS=`G6)`$cIHLECo^c`IrP-8fv!IrmKkawYk5=bU)_% zcj2)6UXziUR%!;XDI_DHyf@bO1V1pD+yVmUOchh;0i%eueG%X4+&}!Q5W+k0W-$Y5 z+S)RDjYEQiRn^o`Or=`ISa4(cr^;=a&~9_R z`Z!3Dix-|Ep#L_3%}T#aKx6ocdFd8#6^1RlMJ?INtt}!2Djb!V+UO=?c*c*g4(=lh ztf`8r@zE*4b*-^MWBH7hCr2Kf-v5{XCKo=PML$_?bb%<&%iCWb0(z%xdJONLHn~cc zifPLhZ6z&(4+)YFmi7DC4W)QF(<>R@tTxyBxR@w%d>?EujNnjg#|4rmW zo53@rPmmHE7-(pH-*fRmVMFUQPP-H-3cP@MbWu=3kb56fu%ey~0&r}{XHA9EiPcN9 z_x>aG|tmJ(d4C42@V`L7}|3IF-#JCNXht_2s5sr9d7<^BV$b z(`apQja5vKbprXbH6PEQ;oFA=f+~W0>PVQOhoFY3|9}NBWiaTMDs86sLD8>YzqYna zg@oG21Rsxpjo!$Skr9}8M4|&x_xaiC;s+z;HOb%ShsKAO80gSZ{m8i1@(_HgBgX9^ zHH>we|6Xq#Vf-+7yzn2SCckf?lO))CP}RMQU&u8sjGHdCYCdx(Un1aOUL!O+$^cP4 z^&bN?E;ZTA5ezYy9W774Sg2~s5T_EGuv&rW91FeM^)^Vy4pfH0qsY=JtRz~Dzsf04 z5;_@s6?$ZH_D(P21W9)5KGt#Zh*`)#Mnbe3VzCjTaeFj3V-GYxTP&K@RKF1W;VV~D zEztWLwt^-meta5|x7D}t^GHRri+#DalXGO2#N5|1&@l3zf;aK~q+~uv77Re_9g0H| zdW_Uq%UR!(&I#_X(Yf}k*()t%xWY>#vzFM^@4a-8w-6bP56;Sd4=Sm~1KnVVSOo?F^TeX4A95|R~D!$g)X!PIg+`b`Og z)k??72%H(_pD0b~w-?rF`1Dxq0QNiV?Snf91@99;$P|4dE~EV{0SIDo7KD@-rr~AvCwA43)XIiK->~{QM1!l2ovSfonVZ1g?)o~j?Nz3DCOAaWiX9@R0N4c~ zRS0&3@%6E%?*PB+>2oovm=`F}_lZi`gfb)qBr99=)0gd~$>Ltn*}yxdGgxSl=3~b@ z-qx}rkrtE3-M#|J-X4ZFlRN+rR+M#_T2PUkQXuB2Yi{%@0rnY$UOS34kUVTxe=E~I zUe0QHvU6IQD@qkAQcM)CHpTfDRSIg7_%fLN81LRL>oJBA&hSk z@elXO=d4^(@Lu9wlooh0+)d9TN<(-qgCrZ7ll=K#RwQprzeeEi9s_(b)Y>0dyhR*w zK_x;yx_0BS*H?|>BrmO1SRkZDZOEe}$D5neN#Ak)T|rEZf7NiNz7G*+dwJ^qjk*ui)(Z{zE{VVTz zw2S9n>(?$S7Xez(Kb4TeW((Up5}>;SnU{j89Y-bu)%|P8K8e0PQ{KN8}{ZQZJ^wxFO&vI zivE%*7Sg2WL{YDeNZl^23Xhx5R#|v{Lf@Z3-lu#5sEd*9g|W+jYO<%~1!5@*B)LTX z6N0guO8AP-Gej7Bdf)G;>mPR3#w=GFM>o_xG?&*?Zyi^jn}F7|r6&l7PO}U)cZu&_ zkJ3Fnb;M`G#+Hj2Wl!psn>X>6_Ivl^D-fYXMcomHloL=WiT(BkWWzd?6B5i2=_ye- z(I+r9=osLK0R>&d1oSYiwQ}hz7RB8z-_E1pzclPNm;a`f;UPG& z^ROM^%~U_3?wJ@`+6@fL6!70ltWl8!kpRrxS77)I?uysPwAis;N{Ust({6|7&Hap% zvN0k5RKyP}*Qc?iViIEAWT#JuVnWCF`FoS%3QVWtXVgRE(_6`_z-6O+aqDv#JT_D7 z$$0rAqsuM5+~tK9G4{1)U(t^YMlQy&$T9c;i4b3#MV61Iu8`-$dt=mHfFqs>*fs5G z_7Y5C-;AL_%*47yemwlrO*F(klQR?A5Pl`GSwIPkDkkB=x0E51?B{SaEr!D3=A7KB z_L|6Tmk_(FKk--tkFB)b3dR_&tVQH_EW zPeEUnv%zI=JQPTmu52icU3v(BQ9>&JC0v&6(?8Xd+9|H{xZ4LAVB_EG3x(gDtki=C z;wK8fW`J)q1eIs!E)7KogAi%ZEYghgrJrChL`z3t1Tids(6!SQc^Y-Pa*7K$p0zZ( zLwZlla|`u6_T2>t_1rlKDH#(`4?iq6wSMvKY`SPEb;NgFyTGjgQ{!*}bNTh{irnEb()gV)d0b&AxT!Nw zSH~y7B*J)qc_Y-m;p}C!KH^S_rhIKLA-A zAVKmfVyG8NG? z$@95=D*9$&kv})1o+p>Nx%Ga;pr(aHi0{xhMU=F-yjalXqQY#?c=Y~YuqyN+WuuFq z*g%LXa(MZ?w`J_b<~jaunofS_k{ZwCh{|<+yo9JUKf8SHz79AoFOqYxNjP*(CM*rZ zx9;w>pUn|cO}MeF1u0S`^6-51$ZlL8c|y)Io*Tm{U2b+>AynBYm8_@CrT_NER=_V# zDaaVx$4U4s=1bZ}Mj2e*)8&sZGa^Q#(Jd_W2SRxvkn2KvYWVsbey9e+1OV^1Z!I|t z;@>0k5Euv&g8*F~-8?W>H_e2HUIohyA;kOwI_qS zIB&#&g8pbv=`eXNh9zJ$ynW#JLK2p5TU&9Jti8!^iK3kg!kzf!PrqS#9-2}N`xjJ4 z`jU0bV@YXbrAW{r^J)a`677SaV$S$BI$WT_XLp-81$a0)9K&JMyI#u~bK+ix?8&6N z)`QrLh$+C@O2?aZ@8k)R%`lwoO&l!g{ zMpXtHfTqSdbw2mBK~v@YEJ%MwT?;Q7CVtmjMLwIVndpFj7mEEyv zI)a8H`dk@kd!)!Hr%NoCMo7yUu(7~m8Ie8x;Y43kPPChCaKatDfPkO9lE-dH3@2!< zdf_XP{t3T+xRh^E0W!!pL=<%A{KxumNl()jXw>Rm*ramZpS3=EG~+GB0D;&gU_fV@ zwxDl^Zlaw1HS}TKawd#S6!`BJL;nanR|SyB z$tB}pVpN~DXIc{cfn!vtuf_Ar5Rjbf2!cqCY>xuMM52nVauwu+D6Q^1db9kCi=?Kx$=AcpD=M|$M8#q`@!ONBIUbvF`2sBa zVP5hjcw`Kmk-Ctlv`YB%+uFLBKog8B^@vkmu2iAGPK6p|IKt$U8-w*rjBqmh8+>zkHQ!>WiCCmE1}!Grv2Ydw=wRf+hdBlR z5b_@lgcWU6$l-($m^h!CKtX?OjV3U|Ys!KNN1!fgQ@qeZ^`1RB^PqBzg~Z=U$) zYzHg{k9w6VRnU&^>%|~u39q)Qx!TVCKn8SnagG)nQI4;R0xc{$>6()7#%m{T^A_cXTqs$1u5XR1mMO8d;0 zk;G5V%A1gkjz_e;eQcA=^i!H)z38ol0&%2*9BO2^IpZ#aCTD~nDEKwWIv#F;1Bvo3Y_eDOmxJfyJXW|lEJMPcfa0xGD4H$Xm~ z)!EQ=f3RcxI_tYA_E1oFD~GYnH$~O)na;N#qBYU(`VTG!+rYrEJ_uL#y6I>1H5%2( znj#jt%=o&N5D6U+5ARNg;+?1Op}_`hXo%qDd$!QQ}4vB)`xg@PoiZX+!wC>MRDTg>kFFry9s`KHx$|HX>NUW zO9ibJU0O_PLtd8#m7_a>vzMnl5k|5+{afvfYM5f5-$T#Aj7+0xOuw`eoA?a=IIS_( zQC%MG=h2l5dEIG%Kv9{gJcm+tej<`MDD*IWufw$7X8TuHDKXf|ebNXPgM&OAjb?Zu zi~a*(9?!hSDER0n_5O^eA?2c&C}H(H1jPR~H9R$mp{72NSV{Tuw$hhcWpu~+L zy0GkWt>mVX#7$D*Qo68Uv7jSZ%^E)qq@7?wVTOkQ-q&rX22ZLJ3|uxi#b3PS@n=UF zZOU;DnCj;MgJeR2+G8fdo3{kct|4&Atl>@F38z5_qP9yRg!&s$mniYZo65`^b>UsX&Bb=G8?C6J=32|YB&spptE(p@)UoM63lc%;4LmQ5w$G=QHzSqdjngarR)uf<6rn& zdxoz$Yimt=l$H0ZA?h^-0{I)X?pO8(iZnS)0BuRS z6miGB8#Isk7$CRa^wR?PJ3~+Qjpo%+mKo8HneJlwix>%Cu7emH^C+;|cn@ri zX*vRT@fai-OOY@!dH&n+tio?d1DU@X#gU%OnYv3W+v20D<9=f_Gwfb}R!>hzqnmHC zbMtw{+c7)ua3d)G1F*~_-O!;l-56rpQ%u?i2vYnLCq|P=){HDvar_U#h1%i?|!TjW`nFepfe{*tG$>4nhX`*N5Gv^_@x zD;M?6wy5afmy4i4mMo3#w_oCA>b8D<7#GPU{riugP1S@<1 z3t1J0DItgR6q@rXP4?pE;?@R|;w|MHPaWPq+i2Mz2*FIInaye9J9iHP$^16Y>zSo| zLRuC46I1x0T)dIIlhLt=%VJYMNZX{Qdeba}we$j14!ZZV&yawvEd}W?L;UqoqzmUr z%dIJbDD@PNX^r>qVn_dc0)duA;CjNBUAOHg{YT9~c_0{{fNry9XWjQ$+`_^!W zsUY#`{6TLFU~j;6QkLuTACTU3W{a24|5R|p&9C_`GeKA zL)wp4tfm$wW}lW6n%(`c4*qmMVyf(fNK!@pbo=>(m{wK=5-SH@ZQ`E67Y%u`3pBa4 zc(!2YElWWBeyiw>pW1>M-XG&i6`WEjKDR5@xkgdX@cTqs-j|z$tj8CpPaP)5p1${c zvyG2^xrK(edCAQrd!*fzfs*rgD@zVq(6>8yjYOQ7u)t>ov94}T zJF79NL+;ENx5f2k*4~-tjQJu+FC=5eTRE5RDXo1_1wDx;AO1=$)$<;GA4ks;q~3hdF1ixh7Pl(>Jj|<;yabJHunQ;590QI4poS})OZtGL9>|1H1GO^(=i%|(NgvDc$}ju$ZF2q8f3j;WuBci!9f)P!xN7kO2G^&3Co zQ{Favik{6p7JWp?QxFJO%une$Zs9A({kFV%#xl4O@lD^3qn-<47nGI61apKq=HH|_ z3g@RjIM`l-CM|IOPv`#BgIKParLd?AP5L7FN8_6X!O|NArAnrewAZkp$2d3vHr|=3 zM_1WRK3JZBb1bgd{}a~ekL~yLGAtA=F0DlR(8|btR2iirpluf(DdoT(+7xb(oc!?6 zTatD&%R#z+I;zuhKMyb=wYD|X``9d2a)=n=lVz9AolX|k=M(CXAbK*BnsKN8qyPTj z&_?11NdLwFeKKF$m z$)v;M9bIo53<#h>Yh^oiNej~IIiob=573@e<;I1jc`(DQ8$_CX(cL z;(2nf(rGlI-}cffkiKb$imN)<2jhc}cC_t%?>Ul&-*B=MzI0l2zkYbKT+(U3t{fNM z?X-E3>#e8Wk509{IP*I_?<3P5BtK8>$_WzRm;~GB7pN666E2ArmH_4b_sXecCY<7Z zpa9ikFSge&i{qzqk6BeUlEttAyp3-`>Tsc39&Q8v+;!>kIk1v&zTA(-`T{0K{AOza#J4%z{>luBnROg)qmz5aj=#i0jk52 zeOf)<(_40jUeoPnYaA*<1K!S{T)zku1U11f3XFnJ?8io0D9IiSkTuRUONfgHU(}A| zemc^4>ln*?3DYPXh|h;)WjYMtEOnICE{Gv~)!LgcSQK<5R1h@CpV4IWskKI99GmdV z>C~Wp6Tp;MQg`BNRJjcaiK(%iPdY4kRs)SDefNYfvtUe&1VO?9u|x2H!TEF6M)xjY z9m=wTU8IW)GR7ITQy>NfMAMm=%A^{a*aCr2^ZaGnWpBFT`_#9ypvI=ZZjR-6UGpgL+Uj0Bi>#N(AmKUpaUAkD&d@Y2#-1l9Yd=HIaxEnZxi&7!sxpQ zauv6KJ|jG|hUe3>4yfk)Lodqwi`fJkcGuD%z=|sAPL@o{E;wst7B_3S+B%ExQ*S=^ zp(|;A+FH5wFi&s3TD&}%-C1A$ad4Qq0M2H?bLL%ig@ZA>9&HpWO4?>vSB#r28K1{e zqxzX}3jvrS0t~S^Tmhto|FXU>>NC`>(h!r*DcK8YlCE}jU54sPxof5ybpFRQZic*hzU#WStHXi=4NShBC64&2x z-;L`@NA{W=^%oQ^rfAAbiS~yOuim%5_FSY3y?;tk2h4=EpO9C}cq=qc!4zH?AEh%>~@i@@rDu_QdCN@?p2 z6iinDi)cbu5bifE6tet_;Gmqazp)p>yD!pA2pHlk)yLxbtv3mLP==@VnFF~3ZT=!t z<^TgLUUcgUVTjiUFPzD~C1piUu5ErNp;;bBca%QS*Iyduc~w^0Hq4Ofl{&#kkN=g& zw9zoVICfTz;go%|uFY#*`EA5ssLm*`GTov2x}>59Nv|w&nSQG?`q9!IhwNV_(dVFL z3K;pVjc2sWNhfUs=-Cps+&?b^qMbWSK<-^KPc%|Fn`JldAi7{lh2c* zH}OAg(Gj;?Ivbp#TRE4p|CzFQy)T0Y8Qyxl3MRT658S`r-XZG|9A+cr1Y_)u!j^i>w8hyjjbO%Ih)Q><)ceXA#%yW$(a()TNWi* ztU7|NYE|2TH&w2SHFoNb+?^AJ+s38<<5|b+LJaq82n<=#c|dYQy9kshf+Ywq05-{t zeNsXoZ;CV>)uvXW6rz0k;Ode#WcaJ0De)z_nKe20n=xYVAy1%Y`cXK6ywzbVMO4`c}CBvmQ2K@x0HUxQb1WI~?) zgq=2)P#zf*F<2m+hvzLx#e?VR#AFBd=Nb9xxY5`+@_tqhi0%kgYb5+@Ndai1F3~sZ z?>{N&0E50&w6*xkNA^EvEti8Fg zC-8ROE2^+t19@kT-}zgPYg7ITey>#*RQ=kENu0WtM4;E#Pso3LdD7k6^za`LRzZqj zI?a*&pvGoCr=7}{OoR{^;${D3=xOvq-<3A(3fSv6?Tv+q4rGicHk=SR&NvcOT&^=z%0_X^=dQ{OeS| zyV;j_%KUz#%QgE~BlSnRZNALwT>*4 zHs5ylk~sS0o^Ql`2`f7BL^Md5La3k{l3;_or7y5Ff!3u)tLGO?x4W_TYcj&6o(__R&u3zQvr0N{S6!v*Hp~mmd&)p<7?Zb~Dvk+Jw2&Q`Z zveMi)C-rv=X#g=_DG{{TTdsQupfaBi#HwR5?8fm!-89s^jLaXt>zsNH_*=>!(B_B; z-Gs`ED&v$}mXse`IuIJL5y_-w9Bp6vi`a`OSY$VA1dN;c9)G~_SWUuuf8@W54Bxs8 zTMllo$SymSv)}amV6vT!r>F`=uJR23sPl3mmM{u}5dgH*Vc(SngrI879Il@!5OT!J zkAitLL&gUB<3i zAA1pcYTkB^u9nA)IJ!7{`|jvWEoD$%Q!S-AY2b6= zse4m5G6g`w72j?XAuS07Vxg-&m2x7%27{t+vBk-My=NKLJ6ZIX)yx7osZStu5)6R` zvjZQ4_iw!-l}U>knR2ykA4wgg4IS^|T1r%0a7r6lZ(`mWNqNraGaP@gBHW#-l;=y+ zv5$>OWkL)`Z+0)7k;J!lPk65t8l&I7KD7Zny$^&m>c81W<|KR-FPn0rd1$-KRc#j* z{A^KI>#OcvBwl2=LzOq&;wZS{ea`JMmfDpKNkg5fo3hJySH2waHb$LSaL}0Q^S3b> zKyt~Y3?KchIT+y|VRM^*s(tUCATYM#_d|eA29HXh%Ed=Wz0R5BN78QX4%%D1pzli?iZ+Y*n=Wp?t zdXJ+D*KNpmRxmJc%9M$YbKZAGLkA-UwU$*)#nHF!SH}FdOg8$?*uY;evZhS@LC1Rr zMK)WK6rq>?CcW}2TMH$C8Td<`_F2J8N!#Wf2m-i7xZJAZzXkiYjT(9~FcoXh!h?ti zPLSDldK-PzhaMhk@QTzQtw+6zKohAh{o^?9=gXa{^Tp%2Md58L@Kd2wJf> zLe=d@q@Z69cxrypNKhn5Q4(j@n@!=Cjl&hr=@utm`(Ia^K)-6Fj98psSYw~)t&GYD zK>jOJH;M2;z|-#!COsbS^TDlyd|l=BMJfy$Ht+Gw+s0McErygc5r9%<73U-4i3#0& zA$KpC4L3GwY(Otv3A5gLF@vft&f_}zsvjP-gbi0eP~%S)6EJk)WOO=gMSG$={4Lx9 zKAe0dm^P@brv7xZN*Th`b*g%d*`5Cpuln|XU8T)y1)a?$^@u}>bTV!T0;M~>M=lG5b~zQxq>`);KxF%J zCZz3+%~Pvh3ZL9Xc}{C>c|9MCmG@5Ll*#p{|2%I5A_c;;-7M{)LKQe94ybA}aLns)^(Vt%_mpeZMUFB}ODazwztIcTIci`F)D%B9Uncl!Cf$1W?Kfh+&RHj!W3vd74XX~Dc|i3j)Q-vOf8oh;kfk;p1%(Ha5-AXnW|BB!A+`C zL!B8?$CRo*zWBJ;N$@osSUuV!if62DTly-X1kO%GOPszbeBov|i=}~bNdFBTfdBJp z(^pTQProy7A6~h;1}P*@CqjcrQ)O%p?ptyhd*YiZc|FA}_eLX>H8^+UKe*h^slI5cxl6h}LAMJJA&u#B z)BVztoCUL{^?&|fdY5*&M|g75$!3jw>yvLv44@UG;2rDd@4O z77xU&s9~2ZJ;g36RivuTWUuvG4Pt-Qlv@1Mf1B+&ij}HD0GFCzzVa-~-nq*w%8vu#kE zkexI}MxPjirHGM0$JR5WlcM>pIV8LJXM2X<8*1wDL5%;8DkBf76SUU54Kc@pneh-z z#H~QgzN0+4hb&0(7Xwj4GXz1TQ6&a2;0Yo6k}UmVe>%B9ZsBp?O-pDk7i9llI(4-kSt zx3&XlZ@0(f-HK`1cwoehXQRBzng#8w3)NN|7H%`bL^B%Orwu__$g-uZpFSaCDt{6J z=HNi~C-m_NhlGsx_xF0g1;x#@mFDH9v<5qhjBKH9m*@HcP*97kda^oJGM)xxh5D+? zP30}-%hrM%&v&EF7F0r?q<5d zv9Df)49ZOI{^9sTpqOYvMNxMm^0dM}9U0V$08 z0&j~BXgci6<$Cc0OB@x)$q=2&NGtv|v74ixFoN0Mwazi3zyt@3!9Y&n6Uk{b@|quQ zrA)p*Cf6I8T4G}TxZhtc)Ie6J&$-wJX|V?d2a|0ToW`U5LO>{_ut7}YzF7r1l!%R4 zzC=%;!|z}S2P9md!xae^B$A`F)KZM>24JkdOT|6jS*LP^0+nV7)l?~%Xn(R`KGUQJ zovoecExs^o6iwCVg4RZGhJU`vEk6ZJ7D*CWcJtecs3CgkPs2O5Ut@gCW}n>JpK}SG z(ky;ctmRh>;BqOjBqD6^zc}4p<~cKf!u7c81^hrD&a$ZQ08QBY zTN{|f?0U+43Qy0F2wkfPXi(k#YJiyr3a$$}EJ)uM3UrkO5Ga?1Iz+^rjD0ZiOBxRv zd*{UC^U}~WsWz8WG2FNrMxPFqdPtT;L_3$nxoY@^)9k=?y^?nXBZ=^W)PHu+!{1cU zN?5&jK5SFOwnU9Pu|w$}@Chv>RUSAPM^9 z>vQ&YyFrZmoKU!S(!$yxBHKXbp@(#>UO_=vZd^vKg^-#Roe02q-iK|Wx&L3O z58U&c-23ss9Wi)`hj0*aBHBya#-mto*w{i};N{(yo4Os56Y{_2Y(E+O3p(l3=+8?K z=#B5x1a+`5^_!55k^WuArsIO|p#@&vvTsBa`RWAi_U{kHm`-0`s$*uIWTAkr78;LO zg^QG*2Z9{p3yO2z51P9nZ>jX-76kqAyK^#I9qU@kb+YDwxTazAFGg#vcC?hBH;8(8 z1bKj^m3`bDY+S0J3g~RQW?{Q^1uc_rfjaT?Z9)s=#D;g9%`?`-fjp1=eHqJ8qb#ix zmgKg4s)Nrn+oxDtZ|i=k7CZwUR_i;3nm|^C@}fm59&Es$q1VY_uhSh1hp~~P$->hZ zX{oa_=PDR-<6I)qBGDx}6>&JPt@t_^;qdn2?X;QjJ6So=+~UWZyJWt!5^6$UN zmEt(c!Gk|7lfKAspQCF_Ch$hFZaZ3{h9Sjn?7Hsf`gup@P9MGnBMllpNomFyK(zJ(v|6* zC_30l#nv^6ufnpzzq@BWKth0W*>4C%#r^qc%`W2IU?gxk7Lh2LIzc-v$aed_X9x@MmHDhA}^tK>hL*;}d5 zej((k_P)re{|fQpkTFoHp$C|#iCbBnqbGm+f1|_OCD@i>+G@*FZZ4Wv&56!W zuw9?f#$41{y5lDW9Rv-A&4+5?BpyvU>Q@tR@5A;wg3LxhYm{qVh}_%hoLz2vFabQ# zt&wCctTsND5i%$)*i1;E1A&5C$*M;-Yu2#0(Lo77sAgTC3fN+JbgwhO;W;u>!mhAP z5lUDj=I9}{wUsh0M*TR#4Xk&(IQtO=l*T>pcH13zl5v#5sCS@zd$qa3OStEQl|EDI zM3=vPB>(Qd3HD>?%(g1Du!+d$i)fck_0M#IX~-Z(edDa=!qS#X-eT8@*12ZS#zDSE zvfX}QDQWBE^t~WgK5J`Xd2RoFq#Hs=fJ9+~%0vOz*}Q61ShHM#IA|d~UB?8|-1FYF zuD%2T!D$y2!(^ExvB{BJMR#TB!5jMyR`UTeoOfb+xIRq*8bKa zE&q;^j&Yt`a`m|Jv(2D#R)fSgVTkAtx7i0?pPjpnM4;>)La>Yrcp^4}v5np21;yw) zQfry^;-T-he)`SV%K~DBjO)RY>D2=pYg0dU%G0&o#ov%D+{A{Fj^ft*1RiWR&XhXXViF6<&}NYySv_`Vs%SE3AFU?=2* zi$d9oCi$VPgI!$=OIgAV;HRQqWpho-lK6Pgh-`tsI0Lt-(qC0S8oq)~Ot$0X9hXw> zVgt1mrCTE?cGupOzXBWNPg}{v*moO4zQRYvz}YyL92$1catl~@hB0slJ0N@MM*aknRYpjSNG+5(Fooj#L470+9HGk(}?v06uQ-jvLbVX#o#aQ18k zvTRaKyjAH-Dd4>5`I08E|B-LF0p9zw9$Rr~$#;z4gqEU&xvm-p6qWi9d7};GHOGIn z*7dCIV&x&HYDF%v10>T0Q~asvP6oOg&rZ?|GUCjl7mV`M}^mua=_0^QPL|S1zzL$7kG6)0fXm z@t0B1=o9`M7MlcAJJuF=j}(&y{ISeZ=DTCXgIZIt$?0Djwh4sDc-sj$xL1Y}6{h6u zgh?aSmS=eKXFo&pzj?s_5l;l&>V`HI{xvn_yZ?nuVW*{r2O?lFplXwLyqUPPaLV0< zt+lbn{!6?=Gc@fF2Hm;IN(JM*z15OT4pemK(Vl~e%@Q2$USa?D(j0nn;xx?8!u30~ zDZXNzXmxnS=gluJxA}Y(U{v@Fh2~|!=bsoPKS?s<2DYnqU;SUHr%C>DBGNr~VNu|! zxss<@Qlr(xBs}D>W9iuAc?W^3%g9wA%2|n@WR-3+%FKE6D)Jg5pZR|{ zh?FQ`pzyK@d9zD1Bnq>P@+6IF#Y^7Ssz3sA04jGvMlp(c)g?4EMEwULZ7gGOdg+lY z7vs$0MDq=mWLpaDDhes5r)cA*jZEg1ayUD445x_BR(2*2y7n_e*2SYyv01Ha`2nJ{ zk^JzmoNr1?g-S>P5(5OR*16H%+U4-+*frWY5;o)i>iis-@uK?v;IMl0eEX*K?@IWH zym?9r;YeU-7aewa&PQD~t)s~+_L14}1_-2i*99Gu1FrbaB#sB!;G4*7DI-VVx%(&8 z|1P3n7PF@@bWDU`r9hx`MYo&hl`|ohXdx{t1~%sIK8Ig|JK>{dJzSD;d~bn}vnysM z#a|Z0(N63ibzMmR4 zgq;5dGl}G1Ih{AX7b6RF)KN%!YdAhX+s^h9z)B)E^4^4+DyteMSOdY9H`xj{L@rq( zOieN9KdS%W-ycPEQhWrVwbYc~f_mDy=p`tYN;qp)xe&rdv3dtYK9L@l2>cJ<`}QAN z48kj#)CsVF)uS?+>jhaIIwvdjTx@hFZ;~$|q>T*>6`#vgAA=1ryTW=`3PTHTe2Cun zBD-rCmhFVaI$0N$?Qf+VI0jYAk`J;$T?yOJz5FhVM!Am5OBEq<$*t+W>UKYW4#m zf$$RLXv{LW1W`P!5Naf)1h|lgv3DM*%wZ@}WU)z=R#If9czw&Ud@=={7bQ2~7>7h)m6{4Gx6&2>V8u6C92 z$e7Qo%}VTu8YVjQTRA&#TSg^^3zTfAcq+N$7yK~0plfCI-owx0$9BJ$32g}Vza@F`+*Z09A>vTnelzr zNs#ccrn}KBqWDpuQe|^lpjY=Kc_*}>dJ-mtu{ohk%gL}FOsjq}!h?+5%-7DyB!6=S z#!JN7KhS4NYy)U+jWyuejKnmjqt}(%d`0{%`fa?D)A2Y!N4hP))r!v6E`n{{#T~}* zahL$hC^+*rVUnmAX-Ewk{1EvY_QQci9n@Jh_{Q+%#+IP#8G}R|n1H0-Ha1SD(E3kg z=+iQJuQW_DHg?bfJ|+bpeeQ!B!nr~fv_9Y>fzZ+g{*)-FOv|$EjGUhrC(0TO4gF4t z&f9etHyj8(+k==~&|P*eMEg96FG@BG>3_KDvr~9oBW7dozqR~l18g70*PT@ezoCK+ z5q;AyC5Z~-{x!&62kLAp1wEpp~i zRD3GBo=!6<_;zndnaxg_t9pD<QyK+U^_=pFgjI1quHTkZruvoGAhJ%GB|l z{C0{$ESEN0@@>`oO87uw^;uN~5fqKos9Ny(?5ZjwVQoErZUX!G;N_%+G7SIFp8sm< zHa@R>Onvtfuu{V`VY1yiHnEo@(Gtx+=sK%&AnwOby8md--~+vQgfaEi?z3os_N_B#W$V8 zA(WDo4oRi^(A`LPBTDxs4v0vDlyo5y7yhTYUdPDPDALO$PL!?gb_aZ=jZ3YrS$VR6sjuSA#q z^`Gg!U%_v9%rIlhgS{-`&hc%2NL)qlPn%No#JrW-{I9j zLeyz8gb(t&S|xJrBHv+roEq;DYBIsV+%11>x4de3%zC~-!PV%tDxAlrde8eXMpb6IU7y#MiT z-oJ^F{@&AU6^)0Hr{52J_$s?)dnD&`;v8`=^}R-|)b=61gbuD$-YQ>@^9pi#j16FnlXU-A`(0QQH>F1PP855od$ z3?AUyDLbg8X1cmDt~n(!%VNT;1tsJ)k{EuJq_H`R{q<&0yMCt~)8>b27@PF*9oDEq z`e}xOp}L>%$h>L;+I$OTkGsP|gAMnZC?FUW7SWMcTS%0y+V8z^FhP=Fd#=fn$ehWwlt{)laM3Of`VS`~SB0a2bF;I4G^?na`sTfo_Pp=&Oz#P2Rjs_k=KEbM z|8>F?b8WH6GVKssy}&%Xd8(tw6;tOj@J8I|{mxMsTY-Tylv3~Tz5MFm+Ai?l;;u`A z-PEFTX-m~4A>~_g;U}LUeMj?D*(_)JVO`R(yU%ZLzw$w(99hOE78Os(Gk1pmXHFs{ z^upV+>UDb2&TC3cBEsuD0;MgyJ@Z`l*?NCO!tkI)MJ4M1(yP@`Z&jlQbA1oK?AHb( z<6aWt{a#HQWWZhdM)6_PC6)iHGL(xoAwM`Ir#Ud1ZBC_R;;XxN#}j(`}x!4O36@;(sfGk z>9O$n<%g!uQ%XDvWfKi-+6Q_1m>&q<6WCBh*Gk478&ph_KOt|E&7a*k28G&8AaFPI zOrzSG9bB-qv{X`5>{)pD4^Ru`*%U<}*m_^>w+k&X!T{j(rqQua@as6YRQabL59uGq z`9k?881&9AcWv2>weUG|j)OeXG*N`|cV@cYf2*~$BWPMfAn7hHImQoe-0q&~^@?Cr+nHk#5{MY1lCT2Wg zQR#&9xSUo~gijP7!5@9LY47agA!iB2+pGok%b(csp-1Z$|H-BdU9#gdInv0dw@Ug0 z{t*3Lb!pZ~66bB^Z+WH?c5B2@iWn@5-LNdQ%9j)`aK$@HDnHk-gmS-_px1%-)teim zPwddbNxA3WSxCta?@6ve2>H)G$(2hJ5+{-REfw*=Vr$fpBpYxeKz%Q4D4+no{fgRC zwuZ1@jt=6IN|g#y{dLlD!@^e;0kGL`RCq^MV*)^T>$AL5&0pe`o{_` zk0o449{Z+&HeY+wOeW2?<21BTf(f|qZ&jlG=nO&p>+Y+#1PDD?f5Kbtg)At~osrDT zCBO=jeyuux`DxzC^3xw6=W+Fr5{UlG3&}`34pA?S(@7zjU|$#rp0wc{P!|5CZiocb=@8{%Cv(w@ zI87#>M%Bg~ZR!_Oj&L-{^$w??!Xu1@r?&F%JrN#^1SBLr##FTZGBfswd()RWD6DUK z%Ks6(-MXhx`{mS7q?&fZ{&%o4ob4vpiA8FaQdVVvTw$pTcT&-&zQjI1DlF?AB zv9VPSf9q~|KpvROnyGr4_0fXcgK0LaPg3!zgZGFVTayyw=ayE+QU%)sM^)dsH8;_I zmDyo}1sb^@K)&2Z%#^(SH)@I}I6o)dZ43u(3sVe|B0ohT0l^Zal!-6Q?m&D!o2zPP zE*ex)O9|36*LV6>xnHCs(BHa5C6mz*yed9M=k941xvASxdl(_;L=r_B6%@rNPMZfq zjzmu{vLl~NiZ5bD=_2lu{k${w#5nHX`M9>wyuMN=-reMQdGx#8JAdyAtguqDRbQak%yIz285EK0Dtl5n`df-vSEUX#7I3s z8X)d!XM)d-$J}nHJf$E$r4YJYC0VBOJN3iy9!Y`Jjxift6j?LWs87UC9KZr*a;=EG z;5-5qty%)8P9(u2?0m;o5z&8~j@P4gY1*F` zO*Pu21MFx<1|of1%CCG$&e4!NFUR`!*_3$Z4ShZ4p|A{cSRTuBD&Tzw6dtR5RyAqu zSxfc2 z=BeZ{kK!?{QzORI0|0-ap`O_)$f+L&vROEd@Ho5`BR1^iO&5M;#fl{Dycd}EFk5OCl$^kbCLFOjg#6X z|8o5FWa}+97b#3d800)(-#GUnyp#Vxk@5vO2y%J{)vIMK?LRmB@i>ENsyJ(CSG5Lz zs}VGQyCN!H%oZ4St=jj>N8v2DS;pzA0B!59?z?>XPh)?4Mqb%ck zEl_|*I4!%VOJ=4>w*t zJT9Td)xT%h!e*}i2<#$YYLTflo%r zXrYty21-2&V{!USYKi)j?_V0PgCFz62%${b>e**qOStGa@QA@KVDCV|#7%RtxQLlz z%Rr5KyEP6elt~>@tu=6qT+ZRx4qi3i_q~xT9juUB1RKAh7iQQWm*^-LM+|c_y+hT* zD>ke|4tgHF2B9X#qN$J|n>IeTrIw4i1vlOnzO5EZLPC*NrwYn;?$cVRoDYoN-Cn(~ z@`{qYd+eLO3m^H-b*TK*MhO=K*_WtVF1biN;#YVv1bD0%a>;krT=#7`E@fHvs%(fi z<@s`VL5?-zYE16s)Wc(0APR<#%}j3hh-ZTMO^<9k59x<-J3b4mDpJ8)Fz=u9>YA$Q zskAIoPE|8Itq-0Qv6Qya%FtR*`awM=+?*iZYq?sF6)I8UKfX}yZjt_(ksehJ8?GkKVIuv>Hop6Kwsi1P z$M*K_C_|W+HTf6oAnW5sGn`fAdhRb0m`X~>+z`u9!_x9jCDh8R|MA=~VS>|B(3#(w zmbTw3(X@{dNvg9bjF5)Ak;Ew~+D|XV`s69^nMjBD2*-LdS+tcx{$cC5qx<@j+o-6U z+=HX>br!c?HTgPH8J;u&S8wo3m=bSOS`0cO)OMi?s<(8c?GPE${mxji}J@aL!Rx7=JUN_fJ>p@{*@|G6W+B(&d z{>?KBsfz|@3b7Wu&HUL#qYUw?=C)mG{yTh`FO}uQVFQYW2i9CCJkcUDdvF)$byTw(6AH; z30_GPqjYoOc5_+6*f}|=FUxhcwRh$|_A1ts1%f28vNtO1m%Yc1RoRW+bHR5PdqG2M zIrFOD4vKBdTE|oMR5`C!5`OLbZEgm)eS;lcfY$?Sv!;tp0b2DS3C{!#AVDty3sIMs zj^pZsS&>4&n6NDzNg5i1{-Ow79O=7!#Y7bMtTLAp7sTG@_r-hs`_Ix_$Zq)r0)r$w zsyE+S2fi)BXPBj#&eUY1CP2#zwxf|Hc!a4D6u}p!Y{4UWfQULvJ@Dqq;#yVUwNEe7 zoDC5Bv!(|^7_!2HER z*thhSG~b$7b3Qmge_D_`B5*}wqk1fX3yw+%ASp{A(GV06z783Sqa&o%YUW^0dhn3J zA?}YEr4pdxbV(NMo@;!3b;Zmj9b!Tzs~}GAT7xbLx+n!NX=by^YR8hFBq0P};hk9G zH84hNjmi-!(hzCDFyX|=I!zj61O$_D=n50-_~_G3^{j4N)vr}<%fu;rgf4a07;Yyq<<=x~r%C#tFbSO~E0Hwg!=*!>ZkyvD z;A(_64{Z>=dO8d#3}#14!yrq?T&OOVn*>KzNWh(0`}6%t!^uQso!@GNlZEPku^iik z?;jU=Wk|W!(iN0HA@3_Vnk71kRWeNGv&yFUM9!?QczO2z07XSeGIGiL8S4JW&Zk?a zWfLn2@=r?nbv($3>2bMm`RKYLBIMzq&O@1UwVM|+y?-AmO6)7GRZSEtXA-SaGCSE& zT@>;TpA@_%1m9W3&bCyrhw}VhXOc$#2%`^sJKv{*^?9Q}?}hNkZTv}0G<1ByFbSG; zRAiV2X|jSHroDb}KD|64p=Qq5y}#o%l=CShu3t=;No~OD>)}V0(2is=FRDl%;lDi;=72o~$xF^SMPdPSBB zPR%gc@f!JOL_B}KJTK~d8mrXtkj&nqCQ#A1(H`Mhz&w89rv)KP(t(P!xP)eKI6Q$6!5FVS%tWuSHSBBk&!EHfVKK%t%dW3zp(d=` zv1+wFt8*qJIUmh_MNx>q?2i?@Lb%-Bqc(iT#j^jJy8S7QUeixw96h53v%}*q6}A0< zlX&A9lY+BAo0HZz1BckIR2L&`a$b7)eRWbFa3xTS8QMVp#JDNIwFPZUbQ=q$d1SUs zEO8qnKqec1^O=JgIG>Un;CqkglCidt30M2?v|jL;mIpG>L!#Pzlz5ke?+A6yyXsT>*f8{?Z(2?KsVL_i zK7T97zkstTPE>r~|5mQywm0+6t2d>pROH+Hmy0IrVXw-e>-w_EKbw?EeR!DHd-nTMha9q(XZ=fPbPpO!K1@pD9sv|Z`bmQgeH7Z;jH zH+hds?sq5R-z1(YnB#ek)me>~POgq4e%eU^3U(oik5EyAyCkIZq9P&~FvDuECf&X> z|FbARMUWtX7sq2ul@unI-+MbYcI+LUFE8---Lk4Kz8A+(&A(f5vT@gZ>f&%R4$1<| z@5DV8WBHFQ!`UDusq;*MX&}^RI`PP*ZF>MJ2ZO&`q5P2=z-C;dARyoadeuf81t)XM zKYi*VdZLJGwQdLB=Wc4!ip~ixeno;;Nu65N_BqIG(GQCrNf{N1nE(Nk zM~7qf6Cf1v6X+EtPM!XmEeP4Iew4T5*ST@eoiUR~gep(WCX(#6A{DdzR(|9f>v{GO z^w^Sc7#nM5*^(M=I|K%PuS_4o1I|B(;4Jexs%8=RtST=yc)2*L(N8ER*piwW)E`dR zGl*)ozt}n-T?(9JX}v4<>bSFY>F_bWs3_rzJUZO>{xx^3WgS1!1ZsJ<`#0M4d>*OK z8kwQ0BO+M7YGPY6)}EQ3KN@)C^6*=r0d%5q?^~WNtBd$)c5fyZ2iE*>QlS9Yn_Nd6 z)pi68Cq3(nb}MINIsDfB8Lqp|9{FE8@?!@BFV<748S>gFVxSIlW^>o2vjOfhCXy9q z7E8SyfscUJ^WXKsATLVy%U@(dl$cl|8uUaW(v2tX zhT)!3=&785i=4o*LY6P>qBNEf${T1|yJ9xloMes&E!VL?aWsy&hZenDd|<(OtZKdAVADtxQT zxcc7K^k)eP8iF`&53>6Lkr5%dC<=K|W}mUi?rVNIC5%I@?F#(6`} zO(_f9;-7=+Y^o=S?@g>s7~Y=$ob!h2thpVg&V$`ibEBCer@C5?fb0ER(O45u2{dO< zE{lu;8jGCPicPPytmT9O5s#G(=k?)Pv>%poczj=0ffqGx9K#m6x4*&si;K&w`c=8* z%b5=RF~_=%y@>KI4wtsTZ*v#rS0>O>J`v4s-mx|HU90Cb^0}0_IVHg_tB~TgZ$E6| z5Bd&SDQCytby&HLbD%FZpiKon|Jtxg542t{WSX`gbQii6x!0Wm60J;vei|3^B#_s6POJgY0CaSiTyzrj5fX$7JWik_GZsKEugduM z$gznd{T1@!N8X!-`Sfx%>cLZ~@Q{^Oe?Z+q-Bwfed3oDMK?01Ryo^@ukQbV&RkU!! zE}?nC{j`L4#rP%rdjnS73mxYTH@*ZY-QTPWnNFvf6Mv7!?s}e{xie(qPeayvkjUOY zKmEMTgqNj7coi)XJRF&+N0wM>%((N~cLUxZhNCTJz68{zxEsMn^HNE8tY}F3)v=`Rf(o8E3MbE)yRCjI7F1>uekbz_w?(1hbw)iW&P-!Ou09R}aqp<3*WiSr3IM6N&$rFcdk$8g=m&odvPJw_>zz**Y7r)+bT*!} zQ4#XUq2dCHk{&#rZ9tJIyXnSX`0-IhoFi>amEGMclJ{|Kt#Y;AOKl_8{iq2*79k`yP|`84{NHH;xV%7=jimllx4rYO*RPhA-hTQzE}>%En>@cY%5HEvy-Ps^ zS7K6gR-=!puWQxzS&0$Ep%V1{145QFE({&ZGZndP{hHtTHM23Q%+0HppUMa6v8pWz z`7Om<&VQ5t8BX@mv`T0$_RB;6jVrp9i%mt)-5vLH`A%4eNWI@`bHkqR_j-&y-@^n7 zHbzx8@4Y+cmoeDV?2w^zjJ6v;1-GUqx*GTmhiM1a9=sjN)C{P7`Q-#>bf$LZp)d|0 zeCKX=uq7yLA`&P3xZdo`5DE2C6?*Z!co4gR|M-sJQ8u`Se`r+0N3au4q+6-cCfx=m z%aU6BDrDxcY{;aMQl1szs^AP;l`D!QSK%Gy;z6PGuVLqlRd>T1zc5QmV!UKPt=%G&T6*OAx11|_W*SoaeBm%!byHGngl^_M-BpbP| zY~1cujW|`m+&KR)qy_#L)ItMhsKhl%hkee|-yKHv?e$z%w|$rsMLKX4ehMiPBcH9} zWQ+K2T)FI`2D$9dUlta!-JMsRoyZ@BY4w5uFS50)`P>Zf+cQ6vNd5>Jw9%syOWfcd zHPvXpeW~XAXV*SHV!T_}7n{(YJ^dVO;&v&KAq1*>O)gikW(k(AozKa2oRwX^znNe4 zBV6onp=zwmFT4sfb#_xsD4G|Kf4x)ot1R`}h4$cg8Ej&1Lw~YhI)AeuvPZ?fOrJv?!y%di(wahR}{Y zC;-P9Q1>DCmcPTd)uH*;fy!rik@VYbUoS?RYkWPaCQa@RyCcw;^5bG6`aVrfpg|r^$@|17PiP%d zF2s-?f=j}pcGzRQtU8Y(Z+{V?&wkgoK2YJg#_iGe3784gV-R{`^14sciv|WT8G50>uW);%FlCo!m+BgdoS|_E2nKR}-&Apk*pO>gJG;Ug5Q7Iqm0~f8e)RXGom6 zEa#FzzMZ3ZHTjg%VB>lrKUTNFsG~G;-iVT%!X)C7f-t238X9t6FMXgHF-2cU{-Zu$Fr#)Yyk>{m(*^yP^J49>-~(UZ6Z|rf`Q)4Gxxxij&zKs+Qy$t)+rS}2c;%*dkz&)J&bs- zVS)Y7qX&5X6X>aG%k4Y!N;V`aBjT>j7s4Ii{Lho7FMf}_V-<6s%xlf)t8aU9ce{F0 zG;}J3fo13l%b^g!PS8d{1s7PS>U8J7iKw}k%(!=P<4Y4_1{C9ee?#G$D7_8$b z4@lBv`b$AD5*f1-poNXSpTI!NNwmepWDJo=DuTx)Zw|7A{e3hmM4#Evi}j7%wo$PI zrR9<7{Z>JOeV?5lcNeRP_#`PKt=`kq&kQIN1D5K1M=+|Y&%yrv<;I(=y5cg!c8`XW z?)R;E=PonsH>0Lbm*)Ya_tnVG!thNKcHiP5*T0`cnD(VCn#AsOyc6(yX#B$gSH)J{ ztlLXjd{%g>T<>~RvsNzQ+F@unwiyokTTRaf&41Q)YMHYz-t|ih^a%{r^aF;sb8?^%;|Qp z|MV%~edlxJlF8d4z!dvAHZ?nGJ5>!L9PYyrStFMs0 z&)1~!52d!byK2bs9IT~X?zcC!4MKSL7@}jUjr=z+w*O0^vc!Br3Z_M z1J*(cj~JDOrk5`B8%Y2dX z0WX*g4EL6P56pRwN-U=7yisb{DZM>9g`|O@%TD0My4T}$Ve94b9>b-Vw~oSUE`cA( zfxr)*XE)hRTNoX4ihQi%(pMCOAw6eY&)NL0TIZ`NJ;trTMy2r=Ew%Fj=el0;Z>jT_0e+33iu zWBKzmQG8%YeEm8$t7GF+gJ;{_m*UulI{*Ee^5Bx1{2Sitj_cKc7Q+=$Fx%(m*J$f) zjb^WpGkC1-`-abK`Yb+dy36m>EZ@t99PS_9qIlgnpB56AUxzgm>H3$Hz9CewQ{ zyUkf`a@IHN`J8+s_I;{6Xz(eA83x!WbD{-G$^DsiYII|o{{ttU6rG2u~>tx zl2D~1Z-$&oQ^3{9#YIRko*MB?ESKO7`FKQxEc|n4L~ux@6lC9ExH*qGbaa-M2zfYt zLL<4kA?d&am|`iveRO-YvT-Nx-dMM3WmrxxH0FPLjg|PAMVn~Ym4 z4F+DGKL%2TxU0+BMQ^6%sB}e@iff~Eo=;UiUUdQGH^dg{TT_sEW$4c}c^U zV77#()k(!RguV`m4zhVCjIj7cC1iS}1XS1n6RHHNIVK!Vyd_DKBS9-cZ>>p_PNV$m4P01%NT2q&*ul&RO{;keFhzih30|p zKSHloj)pi*-4&im{zz`#s&-l!%M?;Q0XtEacPE{F_D=FYDq>Tgr)(=0M}vW@<7LhD zMKe^u#zrL6jQwJ%d!ha8cl|SlFktN4Q?r+4-2^R@!2_SQPIFMZ;=&Oz6?ARiN|vPQ z3XTvR-%2=lCP}OnNhjje_1rHvvvdk40z(V176U_;7B`;AjBnDIi{F!tMrSPg4r)xP z=#;h;X&SUKS48qC-lH?1f<{#xlPFP>hCW_dp@=?-<^)qS`JV%30~%F*0dvhy=UAiF zR~<8JJm36oD@#t-t)+cG=bNy5oczgZf;eJQc>N^)F=bg>l zg)kBm0iQBAJ{FbuwDEaxY`W?6YcBLZlOS+#VEKwl+|%yI=l(PHX9sgQDT^&99)O+7 zXRsa|g-EfZvWY{#luF9azjsi2FGjAx${pV-P~ik3*op_Vk~8RTkox;@1TRr6;w=LG30sg1E;B_nO@6nnhG zv>_C-bV^jmDP^#iiC2Vm%^=JirKB-YiIFu*B~KUKQ@SWRJbF*l40S^0J+*j@#EQb)A##Mmd<(@gq4q3mh}w_ zleCO&d(T0ACts65XT4%_cGx54`svxHr|#=yJ-;Rg4eC}N%NZC(x*lOa8lSPEyOGHj zdifJWuk~oUY_f%X8_8_^b3eyxZ)>@$)~?s0{XaKHPV+g2i-qTVWGWpbNYpYt3z|xw zq3Ar+NLTGI6+%hP2d?;7<{0-5b*vvIQ}h9Z8>nfd_gs%#vtg|Uoyk4TJg4RRIS)%dq6HxI^QI7a_g2(snbuc&9jf}OFvQ)<& z&V%%qU(5$4c%+>Oi)c0|FIjswX0rYIOl=rH)7NGj;G+^E$(P+C=urWf1-y=#zBXSj z>@ki8n3}4rXr320krYIzZa`4bjA{GNh+3vYq~L#wAyUtZwK|-fP+wj7xg8z88+qD# zc}-o@Hc|26^gRCmi~zEFY{31tFUuyu#vf1tpI4Tz0vl~@{df*m+gbtxPfqH&RxCkhF!3->8_Zf{U*$jkz`Gz?Y56|wyjjn?c(kJ&gLGuXb9|y zN3PIR@wpIF;@B|#aWrPUXQ@(DxXL1bc=;?TjgF6|S4TM(5>PPtk%~S9kdCFi&y1P} zwSr#9Zw*KcZ*EcZ{JJzc#DftS1w2f6fr3kMx$?z7_@`&I3(cJ^l7dtd5_mbxO^X=Co(JT0B^j!%rx zssjH#$&(aV1iCsliq51Yfg~RcH3%SNWtrmZ=PR^NNK5L67TSb%EMuCcXhISkK5@$y zRE*dO`hNYq8v5ED;GKlZ;NO)O#JfT%6;6ixK-);)Q0qwwOa+PTz7oOv%{L?}Bn;_$ zQn^-hxVVfcMg1vaDoBr55>ojP=Jry`*euEkx@}~754JwF?>zVuiW(vfL8I+Pyth4z z5pD6ZN{LiKq6Z7)(T;5ieRXom2_%IRa?f$9#LE$EaOY}hn+@n&Nbfo&=%*0IrjLhV zY0zLw&?54&H8A-QT*_(M17q;+&sGV_EMY7vSenR+@2zwBSrX#j{+)xUz&{vKKNR2) zjHs7p4j$7oKo3Ym_zsiaIR!g#mc?grzT>Jzhj?qjNi6Zht#0$23*R$LQJeCHov6ZV zO-0EL##*a-RGJoXT3SUo%NRf$flfn*X--3%Bf+9h%B*Zou6cn7k5eF02`*A(PqI>k z!8Mx|3ar``lC`a^|886P4;~#>&QJ4FovbX#&cyjo3*zNQ`XdHWbV5K0;Z?Hl&xxyH0>EtvB^I-CX40*xK1or?b zII)!VA=YcD9P=EOF)nU<=4_bCLL2+7VMIbjHg=tM%RPF(@ISDHmmEU%T$Y4N zny_a-@)c3H7-_v#q*~0wX8ffdg1BziU0P_NTjNUdjOM;N{K~A6HcJ&;wYC9~DY9xv zwxBWv=N7ay9Hg?vj_X_G(*f`T&sFmw4y_@qR)wpcEgN~uHKd^)UzZ6a))*lF75fZa44M~BeikWiVWWBR}ohQ`WQYPeacNJ0%zJ%2`;XhOg zn0e8qLXE1J61Jg}K=sV-mjmk)CmAn71^8>TFEMnANURNUuu2SCbwyf;&Pgwd(@Za_ z<;ztlN-9GyO@b2^=(vQ-BO^8Ce%Vq3W_a2Li_LvU|FR5Nl2(35Lw%qG;H2-iz7x{r z#EBro+)+KsDWEaPJ}k^qD3QSpxsj>jIdE5*C7%;)R6|LiwJKOZjcx7sf{~`I*p~%Z z4U2FcM3?H|q2pQ5P!qPPsV^L!nZeams7xDlwf$hVUb2J=35@XyR*Gp!JS^5BJ92sS z!C1^1@(gH?GzeZt>VwLkEo9jr^!IbSy6*I*=C)gKLvHQ|2-Ly(Sn0wqyCQ-KkiwC| zCCuOQdbH@ynLDt&KS;P23-F)l>W=w=6 zeVBbh(nJzSzq^&MYeCD>pzaLJ#p(*usV~?Sl5fQq{)ObYplqnLHx$;i%|0(|e+5+e zjZz+XkM2X#?{K}WXWl;!FYYUSY>;3aY;`=zz&A2INL=oCc_r$orqkfRy;nYc`|JJ} z@T1Kpcxy4)yYE-!JF7Y2Mof9nV|x<*OsxO`<$unr6Bt zV<9xnwANAyHQ0#&p*pr?7tkFf4~OT`krRE;r)RSH>`Etis`p%#p6Nlqj@tBi2}tnf zwZ1YuUzU$Gk01&Trw@t8Bo9Bbe)puUN;A`~NX^3Va7` z^^DIZN>|k~1dxGjgGTQW#Ot%?0h9n^uWNhr${`M;ir~!51mV7Ybno42G>60OeVH%I z?Z;(Zb~~j+a)I?AK44^EbollSr?F{(uZ^TRhLKq4?ICvF*{O&*I_~QyW}4dByxzKlWDRQsspe*;J&CNGb$m0LN`rI zZ4^Drr&ILll-lwUeX{ValFQ%^tYaH(Y$LlS+<&*`4JgP>iXD#{WX1Dihs;!frJRji zC{Kz#&EWWK`z{H!EEN7ZQ&~m+m#sX~p zVEz0DqPnWl-_p6xZ6jeN0sMBn9!A7;cXc@UbXvDzv!GB%xusDjPHWfPBS(~isD%e|^MV6m#9+tRh)(>rTWYxQ%+w^AP; zhqeEL`+A<9L)ly}b5@7B;%h@BHE4jLRFlSiyVZvPTm|eQ!F4Ev)An(e9 zA;{s0;*l+;+1apjw0~|?a~;W14YqMr<@|2-xi3XJXEFr~jt~!Y)FZ?MPWiLZf+%c; z0{4D$Gc4VD-DSyDcNB6xaE$JiR?ALL^!rr6a^}1+HnuoDwpdr$t}A}|H9mAYlM=e9 z)AhK$y6B(SY7Q{PQlke!WWlP%2Pl#^FcS05c6e?aigtDA`y5^#&dq|!!~Q=vJ{g(A zH2NDu@*xOxkj1!wJ`^i!*_E1}VhV-t8w&+*9F4qZ#nnt&hZ@`_i^Y+7t|!<3Z^#1| zTr8>LJA`=R*eO;e-pOnC!yq_Q8=sc%YAjTZvpbth?|MeiR%q0|2W{F9Ftz#vhP>Ij+ zW8F7&B){Ff<;|Mlx1K?=hzud{d*7jQ&m z|JsSuAwphp6Q@2SDRIGJ-(K}IL=G@<7Saq2VgwaYIr=-cGO6M8I`8ahQeY);n_FYl zF|16?D*$m6uaPA*Ol~2-_q3vEQt-^(j{S8EigB8`HQ1EbIT4T z=oS9nn^E2l|8WLuv@pZ1vW^;OP`V-QF#l&TM*Bjs-{Ch%()E^D>^JA^TUCm?>z;fa z4`-E1QDAKRKIg-fqqbKK0sB9kA*ul>r^&f0fgaahj$lXRhl^}#a21X~VhlZb)YtLfssy(LX}h)fwD!UI;8IMO(h9%jybe3_c7ryz!c&D!UB3g z-_w%;pyyVAW69Ixu_S0JDkuc!8G0(QAW2|Kn#gI8#heaGquc``@-CN?0YIVXeg$^U zH~GXG8p$h!d85x;%>)=IUqmbg=boL*&S}iwnBJD6CuXK2@LDV@1Qqeu z{Q8eShW|MEkCMh&Fp<9Rq&2V4-WoWY`c6ly*izKA<MayrpaJT$ zi&((R$td#Vm+91RO7AgT6s@mkJGr0)+54={6aJXs7QJVj=?KPBUhazu-(bL~#XUD5 z2IGNhhW}{7eW(Onnxc`@{|oM-CrWhV(=a`1!#aXqq6Tt}H#0JSqf?=+;E<^#g3={# zI^TP1+=cVUtM5yvt`Wus{}z@rPgP*@#hm$owJVqXY0meR@0b_*)&`VPqvqU} zqy+DkQd#(wG3!p50p_$~P@dX?RlX!b7XUOTn^qb6Ol(QBn1h+EhUSR6nE`oJfQtp| zluf5vC1qHbzy!{~d9Sl-@3}OleULfnj_98`N#k-r`|-2%3p5e9k9f|maiGS7hdV@f zruBMBPfW^0UiN07#Xb}r%aU((8M&^kn=UIE+B~iQB{NAa>IzEGRI#(_;+aT$%`T`! z?+fo=?|0OFVG0m{ugfo{{IpukM<{jHm#t> zG{=X}$obzFz-AsV6MCcxxuFcBA*|ed_G5Eo2F9{(c%s7_-G}!@`-4mQvMXbcXYf!| z?J%%^Z+?OWl$?~GZ7MLK@D6d{z71RY^fORSq2O6FGZxx2+I(bi`~g%ej>UlEK7p~b z-Q7c2@Y`~`*V6O~^kJw9jB)BAuzNrsw_8RXDKSz|gvjh260Jqf^XLS<{8j22-}_R2 z(Lbt{LLSE!4&-43Q7How5B-1~jFy!HZ`)d9%=jn;K;6VbuJ%4aDAg2`zq$9vFG%D0 zuh>8M--G`w*@F8w)E7oxUbCgE7}>r%>&}&J1%=TT{~_A{Z1-;Y#&6H?<(%bg+q#+C zWPiP`IT(I@m^=&lZ8hS{*TJjK925@aS7-cdk19FNo|}MY3BTNW)cW4Y#@6x$cwET> zeZ0@2Tq;^Edd{T)fhqsfZQ+V98UKrfA^988IquK5XWSPFsNsFjd&3I87_GbT`4Gx9 zB62oA-fJ>n9qzJV=ys>Z?|+3etNeJ#$M+`Qw91dyFXe|Z6d-L&MR=-78RK2@QF+@a zr8tl(ejQJ;Ex=+Mj$1P7`rW7LtXBQhOwp1{-=lwg2$qLi*Tp-6`KyiYSz0F&;>0hee$`K>*A&_P*Pr@_Z-YtT{2!TZR%J1!y4 zyGP`|h@FqNqwg!L9z@IXl0IQP-#Q%JY7wILy&85(=`%s11V^t+oF2V++W9>GRgCnn z9WUzfmvkDSyQeSz@po;%g{w4y4P~1eIpLo-OTC84!4D4<9^5@cvL`8f+2x@oaeKnE z^l`auaHE~SimW7yZk~KpFtUsCwJH(3cE9Eief%iF67FUpc=2IUwAjSpiqN}dNs%_7 z=|!_ZMR^6jDHw>o#kQ@asH76_-lZsK^_}^3SsANjUUQL9LX@tKjtsM=v9YDRhK>#g zv!;&D+eaL>ZzFKYkN_kCAR?U`h)_obP-S4;7UTddeosZsfHChDq+q-ESGY z_qnA*`4iRE80qO7nxl%*Wb8cBYTGl21kxwyaank!0a63kqBAS0{UkDKQh^XOnMoVM z%kB6gQgj1HY#A5Y{H&Ygz1rtuNVLcVxvZQB#Fi~mTXK#isR4F8;(=VG1g2TSYpc8@ zO-68~AI^g$_`BBwL=D>f^(6+A<#9GT0M!Q`8GwE=cF7ocd73^vX8X3l-5A^%iv8&e z8)r?uiX(pG>(Eor`+%ggjx=1htgJjqJ*r<{M@Q$+i!xLh=$(8XO)X=}sGF%axceOe z4jc)Hhc;o?M@>MEg=_(f3NKdEE$9Q8OX@f(j#STR#sN`#%?eN5O-r|nOXa>AG(KIw zlPNrSu_PxEWp}7Tnq8uT{~t|X85LL4bUP4S2loWG;4Z-icXu6Jf&~qBaEGA5-JReP zAi*`bTOhbT1ou06*LVNVTGOYyx@y<1UDf^`8Tb;#FOVV=E8>-iUP100dJG5ccNj|7 z+n+FixP-@Ph;ZSC)^7c|oqKt1(3Uo_9X|RG&wE59o=FDvUDkKXT zBmjiQCeB2b~=gw=;ghXfVf6frQ) zVNws&t7)KwMj`QQAjjX3Dr81&92e1#b6C!$b?=`k-D{EM+P|1#LBnNda}R(C$GP2N z3QhY6#G*+)t?en%y|3JK@_YAD8D#tL#rUDo#e^xg_65Zj$aFu7eNOS=KvQQS4G&s+ z)oABhm<)4w#cIAuC016bIP9#fOquGjkwnG~dh)U$y$*ZMJ0n?Cig}7ZK7(D~{3n0L zIqT}^bT=R7yXhGKdz^6jV+R0I;Ei4*?J};N<~B#760IAaq<_{wlaL5RgrcyZWN=2$ zgodinQ{fueg%_ z>?FPnj%sx&=S*%EJstu2CtDwR5^%&y+&5lmx`4YRZcPc^Nc7H{WgI$kjb#25vqk*( z?>{L+)OR&2?@YK96%{AsKHdM_#j{ameE(k2yrH`Ko*<-XaFY9WnBk*!T)Z)A< z+HS)P!ly+;DC8(oAg3<0b5NjOjuS~LUnu9KPOO!C58~O&B}p5zfTII2ATrmKzy5<1 z1^i;&`cmD3by!*-qIgP#FKQ|N-@1sD@r#}A;M@!=Z15WQU;vHe21`u+d)xEaPOGkO zJ4zKww5cw(sD3jvup1yO06a<>mt*xlNn+Z6v7@Ahq9hfc%Zt4QRaRBuQJd)NFXK3R zWe>W#4JH;>G?u2OrkVimBQp&R4ey>FdOE6bWlhDp9amcx@K_C79W}WK*2O^Oz&?aH z95fuYTb?Z`pCU(Ji1QKy6Go4tgi!Q?VSOEgY)-JY`~nx|cpLgE+A(h+lY7mgjgtwxA~y)@j*r62MA)VT$;u~@CTUmk=Gq?f z1s=$7zrWeMdlNV_V`pVm(psypsiUK#sjsW8-R$)TczeEMHeVqfgn~n3jsiuIkSfjK z!FVbD2@3|*Tc)!ZeYW|IR-X;ky3_t}H-j7)Z%7Iflw27! zcTS=Jp2;a!jFKX3MESC`KcU`KAUPIYq#F_tR`wnIBi%r)tLz8{yonu~oVs52amrA<5TKJ{-f$$Ipn33aYOcAg?8^eGF z8ez|qrEeAyr1~Z%@sVlOMirB#B4|_?l975W_9#?f;m(dbX9Sor^hM*GgMZZldP28P z0|O=8z8#$^jzob&nMNaTMjHnePzXfF>+jM&>K7Cnh(p=^w=`En;_(g;;)T9`Jt}k> zQuq1DIh6M)*9MCrd0)|F$N@q{~~@Vk{xNnlD3tPQz+IF7&M%uJr8?CfJ>rvcM-K#Cq0_ ziH<%xI-0u?d?~4SAIv@)#RCjYe7nDOTTeGAmMO7{em((#jNC`&cN_OaTW_{TlV#bu z{tm+4?_StzB>81WJlM`+XI4>D@l-|TY*$|ASY9`AW01}nV#tKRTVlgYIOWit-?>Rq zPNHnrsTRslt7ND(s5xi}T2Zkq;;}j)=u1od1>%tz39fck!K|j6T!TmTvZ z3XAO}(+kIAg+sWAFdg`2z3?fKK!ORh)KW#Im4o>B1;Y(vU*UetktF9C+@}1EwXkLb z;a@B1exbFJ^%4eU6EawQOaFxK+s6Fw*uk(Aso+;r(%-$tYmganVpKA$tixYx;P0>K zW&!(R!Al~*%Gcw$tflmCAwimzFTway=rHQD92LDO@?m=50r7r!fda?krA( zsCr~jn}+Iux+6_Ks>pOf_mAmVm~-m2CbpFZ2GpDJet6nt*N7_Hch($MDLf2Gvcr(` z8k_2xbI-yU24TFyTtbJ!m2bEmU}n_E!J(u`Sq#AJ(V}?>F2CG!bW~C27bENY_wRiz zF0){Pw)K$&7Y#~`L!FV8r6{GLK-Ja(2m7i7E+2%glg~scztS&voZrC*!pb*rlpC{} zd~PZx0Y679kS{NXYB%gV}x`T6-*tIP)9`V6QWQi2nt8b;%AK|;nyVG8{22-#;~ zV1=x^6yL;=*a;hnz)Y?@%eqM2lo!f}G9O^a9BZ%MkP@UxTuSk1Pj*uP_pA`Ltk!&=xiqhj9Vc;~zG}K3WDHGPnV)Q?Bgsu8pDrThy6bhpaW!%-8jK-`k`+(#=|buHaJ7D+;&#&Yn;!TIG+a*xx; za&_Nrk#%EZ3e8d#=kgkaKzSU^(&iRR19fX+4Gj$wx63={%TTK5EPLGV4U!|wdvU$DXHs;{* zgjBB8_5_l#R0&2ZP#z;`_ne)v@{~IZswS7zB(r!fk)x0V1x7`og2W^2j<*~Q->w^Q zby;5LRK1?QzO)y8100T991UBYj9Z=7@4Tttb(&cDN_c#ejB||RG>@aoIqQD9vLk*o zg;lV*Ib!dai@2>PfuZZx?*HbTGf9uHp2Kl6xSgkiS~rJBM!HUpvOGTql$5k{_6bI4 zr>euWpvYo3D|x2XbyXubkaW%{Lk^y%?edqkT4P&O(K*>AfVtPyb&gHePRv$TQw;H3 zVeR^}Zd^rf_}Mg;m2usb1)N<~Y-y${K!%fp_AR}e33|jUz`yW}%9J>(qIw%wRK01& z9@3Tl)4QvSfONv!5ek4PlT?`VHQQ6NTU!>ZiiwMK!P>HP!!0*0*PRPJEuMXe50Yus z2F-gG{J+`82=X3ba9!=Q!s>6RxOT&KF zeh=%!K3TS)OUcWkG`jq$s+@J!jliApG!SB{y9yheZQysYYYZC$^U)Z1=r0)GkCll~ z4;^jTty=j0N^=X`*Z!*-_X#xbqJqJwi3qr8xM?4p;ZR{emg}8nP;o%(A`68@>i4Ef38-;3hT8FDSG<3}q&>Pv-(oa*(v{QQ^>42-(e3TWy=;_2 z$@B~14CYsk0}^Y81E(SN`S}7{oDtU+ibIj*!dfBZFV07 zV=$ToyrVLsI08a}ELwQg&xDrHx5~sR!7sl;;UtKePq~)4Ei>yEEx-R9UVs(Ln>A&Z zM(nWe>=E>l^}yC&u9P=sWBRTT?eI%&VtY{H06-K}fjNa(z)O}m>jL?uT5I4jGXD;S zPg03stWD)g_rr!WjHh6b%9hI=7n6~K$pONlNN9wiRInuubMztV;xQ+K!*=mHunJD` zsFNHCf@c#~7|{K7pmM{uKUkHDP(7rV_T{EI?jv%YLnM)WzCc>SeK2#UyC^(oL~DR7 z26h#ejqiT>3P~Jq;%P{I{X>e+JL4wr-+;IWu%o#{&J8NoAb8_2_$b_c^Y9FNtU0a+$wOBCodytIRnL} zGCc!d*I#KGje{im{&NP3!r^dMBbRzU2k*-J)+lH08I-4LL;7KH#<%Bb zw*h&q_UZR->xSp?(B|{v@q*~%lGiJ&NdV>Vf`dx`+=d3eD@4LY`(N&(Bv=xZhbT9UaEM zS|`;t_92JRzrT|IW0mWcE}E~!)R%uwB%~VdR8Z+;;5tw^3B1%kEe{TfzO>d18NgBU zCn`$i$jDMBmS?D;f+hq38_4_4N`r>JnqF2|+;a(pX^fy;G8sPNkt!kX)YsD!_mBhx z_&~KbWsKodv(r;0xqSVwpclM=81@4~7>lNZ-`)5D9IC}cKG?)Y9+8YgwON2%&76lOYQ}x+`nH3e1 zbIP@5L0Ca0C$Pru^g~XamcB1?#AE7`J3HPT`hA-T@2#g;A6%cS;Rf)bQJcbtfu zD2#33RNzwkdpu;66(6LQPL2(7ANG3?R#nc>ci;CtXUP_M`HB3NMF}5XT>8sQ(DNs>R%s7Fl+z-aj6&>9(Or7gjQ}VJ=BK_C|LORBP(!EAhbLDx>m#%`cIvDB#t-#tQ#oT2h!^5P9HmEp ze${~wFOud!JVcK*BcKTe*9D@|NOV(1TuiVCC_ZQicr#Hfjgt?==1A^;NI7^{?HjJs zlIxk4?+!;s{mJSr=!*Pw*~L9XDiRVu%FS|=Aw$c+t4dY)pvOx6_WeoPx;vaWkmuFs zIb(JOBLCV(=a$WGJw8*$tFS?WM-lrxZ)xdZ6-~J0v5a zo(?7ob~B4w3|LTb0W*rnqGJO}wdt;@)7|uR56p?o&g{xg(9C{_MpW2_aDExC#tidBW&vohLMao})3!ys6Cr6XC?FV#{Fq z)f)Qioi_RL_T+9AYc;mglt>cc2&V9`OlZj4Zs81Y) zat&(VEq8_ZrWZZg0j{g~Q{Q-1>`ld6yD3&BQwN^!B?Zrq$cW+Hdie0gQb9Nzk>#q( zUtl4iC~KMq#b&ZIAC@IE0FP=dM7*0v$RkLZsQWx-Zty2lvsq zU_yWxmrKE^n&}8yuHsW9(n%JZ*~@oz@RcW%V``*VkcYWX78zV?!pBj3W1zW%U@sO+ z64e*@#|D+R&MlojUh5X4#0oD$IKY15;X4uv_2C@8bkky#1}q2qWwgODzwN z17OTwPMLhWK2lSPBf=Z$-9eCd=XuQs2REX@qQA_@YuT91ug9Q(H9nl32bik3SiUwr=<$le>N9<|*YkbAb0d+dft-QsVy`(SEF;YZ5! zAHbsQ?9;#fOPc--R(YTC?O`SB^=_w*jLg2Fi!hud`7R07@%6`{4m(_+c>dI1R9@D- z$E8vdFDEXj_poh8VbR;Xgr>?ODp9D5O5UFX+?9?5XoEs@w)p7WzkWRXd*gtE+beup z78(veWgX8v3@Kl<8tZZ&r-?6&7$6N}bWI!D(otr7TDWQ2f`F_$=9EHG>~^V75@Xb$ za>p8^K)gR+5W3W0A&avYrUi7)N^GaQ}yY!mgIve*~ZbfF@q z>Pe_j!#ZOy6e+2|9i2OOYV#Y%)tZSf!2{Br4*@l7m>?*L{+8L2*!qMECMDcWGvV%b z*+zbOV7s1Eq6aR1FQ%$}x0{fi|E21GaSTg-uwSnX_0v3k;HZK6#oW;DZO-n~z{ULw z)SR8cscpsCZpT{r~Fur|)*7 zvtbNy`GUay$LL2GQ^+kuauMvZUL=OS4ujlVd9VLw|kh;E{UMRg{?-y zhh`xkFme3ZLoPJrnmbjjv+H%ID$3}OfB1^|yN+?TibZMtaSD)ZqF}+w*ixjID1PGt zn~leEy-2C79mrz^ooUjQz>lPaO~B_`{@;E9|GKwfBpu4wZ<`8gN@Me-LhwnU}IQps~=NLb~l(FDs6woY*sTJ5vg$?)O z^U7TdGZdg{49;jAN0fg zb6B-?3PgJh90LNnRYyO~!oZRYzrhKZ3xj*gJ0`x6fQ?C87h*@0gd-<~3se6-w*vbX zMD5817C*yEae@gYDushKO0TIzsRCzvIhrn^k?iTEWCeVx??i>|GhK*-o(&QL`XUCe zPBw)i#8T+ee*3{O156EQ^WIV6hW>Mc==qj1Odxk{uQxwZyc08&-ZJ|L_f6@*?m;5D z@W0Q6?=CEY?YcI3b96i|oP0v=Ug+2PJtm>bYlf?4x+eBwlE96)6j7?rV*7~bak%2; zhiMzAC$jHgviFzlPHpcq3qMh)ST&@ozZ|6pmX&yDYXjFctsCKy;b0lsB&AOZu%j+| zS5#l`a!_ZWrKP2-ThJx&(yUslh^IN4)nl;# zQhxr8{kO_V)|BR{CcAl&uTKGigl0xSS7s1RQ@8D_PApW_DoWp{gFMH}UA#x;y?;0M z8&CE%KpzL?jY&z#a_{RxK~Buh2deW!rdq{#c2e@90I>rA`fXbc6`TOZK@7aQA6RfE zcr>LHx}>b&;%;HXN5O>yW5D%-Bon4rHaz=;orkkhbd9yOXS9WC8rxVG2vetv<*rUW zVF^R*zX}Pl^^}V_H_mViT1l>IWYUjM=$b$Y&dOo%PBYy4kXozSyXi&0-u(8o(Tn4G z)MAW5j`3l0lYpe)Z~55AEv?k7Lkp;m!NAaeeMEDgnzBScw!L15N~HZ$6Hs6z zuv*m%1=(Dbo;T$08|nB~!f`t#2Lhip2%6#*#uMzpOc65x4n>%EiKM^}^5r}d7WI{O z>s9eORBgMMpI(=JTZs)DF1ycP{hPh=a^3a@sRT2({-fqBG}lkaL5XD&MSz3fVS*!< zLxSIt=13xjBhSK)vOH!IPlzdsKmZzw77^s}DN%Mfh-h3u%WB2LI4t0Bt0?}cB)MN< zJ4TZkZpUZFn`sfv_Vbm;wf;5h>#v(Us^`YO^Of53`#i^{ujd+*U{YlPEwxBw**Q2C zKXtu}Gq26(WZ-7#b(;M(;@#``nCYwRW}EMQbyQBxnGqXXsi_nMrJZn!3ZM-oPm(DM zW6l7-t%?n|?7b7xBFEH$);rm|#V_17aGA48t#MlVqno{uaBJd*8C<~`5%T%W%l*ofW6)d7FjTQ^100Jl9nT!<4cOr%W} z!LU)-ZZm<(`V^(-HD|G|u1F8vD6H3ZZ<@}o5BPZQFABYt=Fh8lmJDy*ym<)y_VKXa zDfIaqrQPXd8}AIZ6<<`BMi?;I19o)-b~m4OUq?;vdQI=hEBfV-H!6RA z{0Q<&7BHCXITGmmRlvXK+KaUnhrTQ_I@!~DX8UBDqpF8_xigYE$142D9OHQud{b@X zn^(^%*~cJtEmA9icqG7nUbE2(T;0C*^jtYVWr;l`=lKG=MRiXv&H>jON9{vn5yz@o zV2H|FwBEOjD5!!c{+adHvfmXQ7Sk)7aroy#pQ(yId)w?^%bnOxI#&(O7?!nf`9CyW zNZziyy-=tAikT%0<&UR%{_l7XETWiRh+6V%_Ij@;J5e}@aw$ASaTQw5RMX}~bpBB_ zsG9mB)%F=UXBnRU?`&Q6{AHo;_2#+p_BE&HCN1yh`sRJk=I8HzO=sDtR6C^N5=(Co zsiK8dqzQ4UfT{H|^$EKL!o*%|amjk= z*L&nANnaE_Hj}1$Zu+$43>@z=)V&Ot-YpXO+zjOfXQJ*WyrR%QkJh44H|;l~P!SuZ-Sd~T^MKQwy4SVI z=e7Bes=9#dDhY7z?+Fa5P$f&wTX+7!TVRV8 z$m$%@4iiBHq3O4Gwnz5|YabzjG(dqlaCa-f?ZoTJ>kE7LmDfwiV$bE^`lcv={9hbV zPxn>{b!dWSkhTmel^bOwwZiWTu>x;fMZHCenhgU}x87>x{Ib&E+!sj`zNU*pW(F=J zC!TXl0X-l0at0{2K1uS|3|Bpaw3vk1{gmVQJ;M#Z%bK2h{+GS9?yE(y=L%Igy&4@& z9cdIQ1{6sdU$bFGs-b)_&n9gEsXqF5^&h?x!HA~q51qW$rNuZ{yLg^NbBFRv&JVl| zXoxw+9l8at)TfF1YrP@iu}K!tLpYgotd4MA>~|{^SeGo_0_OSBTOEGA`0VvoqEHWe zv~skDjv{FDH~e^S4CS=j9fuxR2jfLd9&q)0B**Kl`|7`<^9^6JKphDHor0$(4tD2| zg+fCU?hh_dC$>h&VjWSB3Bxv?AzVm?qR{!gdO@TKRtG;wlZltp4r!^W#p7=gQ(!iv zk6$9+P%geNJ_ohz?JmLt9=!KuP3uc5J8+L~dIu>mU?IFhMWtHAL4!bst9f{+g6Vne zY#|P=I*g>KW_L{jL#)Gt6Tn>j&Gha>ZEbyInP6)?zuvXCCxAVKhwo-JB&S-!xm)H2 zO7;#6{Zr@=$FV9$?wKQdzS?$3in5&Wvyh97Yv9d?O4afZ(Spbq*n^NmbzL_G|DjHl zKcG-8qUw;)g=T{)&TQr2a6@9Em`V9{(DWEZNN4?W`(s!*N2d&NVR(u`3de(EwY~&m;0~$oY!*B;_oNufbIf*Nn zqG4W{AkfODsrHN!lpfiMoIJ&asUKO=QFKHHTI^j%Pw$k(|Ixngf7^L360^Vl%y9OK zzH5Iy@dfbMTnqt2u;5`HY=@`ZS6#{&xwV!)wzU)sz?uJLY{r&WnCTkz%nJD&sji$J zH4>n#C$GS>c{ALzfyQ=hpvg1jsnXH)*=r{C=(WCfPU!pg&u*8w#MWg0<&dZX8GJ+K z68S4EW#I;q6fl-Q?@apAXm_Tm8PsB!!HC5>O&X;g=|5cpsvXN=e@F!{v~38Dnns?- zBVAk=fcd?C_EAX*MjpmMUroHid+J5s3S($1H`EHOKylI`Z`ez#Os44cWkf97?9_2| zuRX5IeI-HHeEBj*g~89MmL=+Q?T?F`uCA(|Kho*10*30SJ0hvXI4)5;XZJWuzWViw zA1g#hXEG3d`-=+q!x-*Ej}P1rRlhq;Q1?Y5u(^8u1at5|I3g0jpA_bB-}5pw&E-w~ zt%h*QvWU%|s_I!`_~Z&5T;F)w^ltfZKQo10)a-|Z>&!xl@!pD*DkL0EGk>njsZh_3MA!F1Uc>VIQo6z&9{JNvvGd_ zQXY+1M43m2r$e35`WX3PlBKtIp1yMWhilY#7; z?i;Q=mh>8K>wFIZin_nyE<88_mbim!J#cyTqkJFFwavDi=udmFU0d$DKKd6rftij? zd25}1GT=+VMTr(L`t6>vSDU!pzH5I41aa>F?Dw>f9pXWTB?>5ML$lwCWP$@TBnPTi zo4wP@0^7^YPQ=!+20!pOA{r*d-W~8nhEi4L6z>9!g$WKW?e`t0* zy;Q0Oaad-bvD6kg2$I=QUxE7g@^OJi+VpVRQvoVV?Ne@&>^`dozoqsq<72Pg5$utY ztHD-^5uMpIMuDcZTfk3q7eSDTUWeQfDZb@6MMsoMsyMXlsqeRk0}8qevKg~e1v8Tr z~!otId8ukU! znOXi9l};;UxtKyaDVG@g9f7k)%mKSNY3bnwTI2aFbE4<%K)iaMsKG{Qr{ixuo;M>O zPrfl9rYt8x1)6+WAVof(KeyLu!(dmy|F)MyIgg|GO{OH>pxNhKdH|mnT79IZAI6ly z;UG0V7iy~)>2Ww+z|*U8XZuy-Anp@>U$e|2EwMA*QnjSBGo_`COp|`D ze58u?Z*al3ZKc%F*-vSVc=J0vr}6+r(9s!{odDZll_}puWwDhJ$C~3|Sm*21tgd2X z8TLC?!Wge#o6DyPU;r|l`@dyJKo@5lVv(lPuI`bg5Xuw#F$|AM}_v zTjl5%SAedPNwEcVeD)5}+44U69hu{u>HP$SV!0~FS@zJwsw|Di`4|MV6N6Qq(s^o@ z-}F-SMYlE<oU1{DU|M8yJH>bQ4tm64`xcl&&r9`u`rbUs**f*RDb-j;}Ajor0 zf0W^)6)qAQj#sNn5D6xx4XyVVbT7k9_`C7G$@WLO0MnT5KH=L6BvdMf|9QboFfWz) zs*e{CnNfzKeET67AI!K$yS8ryPp2C$Ibh9IAfV&gL?F6S**EixNlI0I=40zmAMWMu zLkyJU`RaZpSyifE5oOz z#~++28WF!-!Za~jqpEzH6s=WBJjLRoMGmlWnfNs2Xe`~lnMQe!xIz-1qxBTY2NJ3& zq*ExZ3nctl(cbH-QG(+%6sN}>@FIP`(4RP{w9#Agc%f#sY{3+%b%j~E{0AdI8$Iqg z*&ZrY87yy!$16Ps)C|*y2G*v^~4VJLS+GWIgc)u0TXR4BK zylimP0#3Fjn9hU`ByiO%Wzb|&+Xh2ThdOHWop4z{j}qa$d{b$0OM5td%CN7WSy#c^Pj?;km2$F z7Qs|ID>IDTczhY!BcU3wDsE^1G&+CK2!UDO@hh_n{zehfqbAy8<(O2*a=3EXLYAaJ zx}Ki0pgN&SMqI*buMFT%A;mL~M-b#2<;i9>BsN}|Fc@6~{qFk-M=~uNmuhxOy2-`u z)(se(0G|5t@DrW8@8+L#c&I`@V*E2Np=7Vxx+hU0Nu|jPp zBH6KElFZT#@*nRBAv}eso9-^(>m*%rW4miICN1)sTopL9pEmDaNVp##asZ^?(|@-@ z+fe~3%e;SE?L^D%%_4tBo%!ofr(@ zz0OGHaSd==WQui|{ds&S_>*~o5NmSJ@7*Oa7m=Sn3>!0bx=XkjtSZ59iTgzRND&^T+`eR`e{9eE? z?pWVlvy1M7KXRhSWOuRr{8_d4H}cncStb`PO;btP?B%|1<5ft!dH#2T@5h`2fTvqc z6Z7}7Fn@`KkSC1;abnzlige=9*2U~5s!L1n-a*xRHIEpH@ZKczA{0vC}bAml- z*({xc9r(PtAeOhXlz@QAstHcQxyZkf=rywGs6epIGzn* z=d9a6`AE;@ZR?AC{`8Hz76N**tmwunEUtL>CHK0%I!>{A2_=#AdD63#j^66^k|}ND z*}LC(rM}fVl(s@Nh-m5_tZMk(jD8oVn|EiM5AR=hw^ZU`_@m>0=8p{jt^rM*=|>Aa ziz26_9S2biSA!>dGU<2{fp4){P2$Y6#TcK|zN4x6R)XO{yLonLKh}}p)D-3MGUS9p zpTyc8tJ4M-3-%Dm+v7O?jl10*7(IWO7GU>R0e0JU{~3F06jha4bq#8Wf)t73uOArJ zxW2^JfKI^|gD~6AffI{0wlldXGrx>2_Xu0AH<8ZP;LK$ou|Ao(dZRot-X$BhrC2(Y zK7nTggMK0r8(oGM;{9Q5_GOsMDBIV2^QhBp?zJqi?Qi^2 z_Id}Hbb3QjmeKzOMMIfIX8gLNm~gpiSiKdX!+PJ!(VyuFE0{E*MHK(e$GU3aU&^}M zf73geoG2g>H{WM_WQ^Vsl=ism{>y3mcTu$iF5cpY2fIH3Cu62Be;r_XXbHQ&-McE9 z&;;K4QAVmAog^a4nvRLA$RCKA4~xR%1*9!)Rpmbhw5354JULf{l&LEIFn#P}<(w^G z@};Tn!1hEq&x@s+2MVx1KCQa=Paj=o4Y2KPEbyw__I{_f(Kz^{Zl7J88vBl|g}~#T zPe%^sk`qasL6NrM{X}kYS#(iNckmGi2Dxo6>9i0E#E$0QnLO(Pr)j|M?aQ&(>s6QO z^XBW&=>iOBZfucYV7 zSeURih0<1mvG~2qnKC&f2k+8q-TI8$r z`eu8W=ZkkYofFo%^on6-T}jSg{ufUHX*HR~H$!5M7^`e!9A|$kyPh7Z#H+&m-_q|> z5BFr!3?Uu`yuh9i&<|E{bJH>J-Q2uuPg+#u~>S)4X8wsh6wv zdoDuioIigg8A}=H zPi&VjhyQ*4vi^E)1KikPweUbt3M7}1DIgFh;TiX%{`U+VAFfq(px4D>_+Ax!J{%bK z@5ldyP6sKq7(PmmF&jBxdybb;ZNkP&D?c|qZ}polk5D}o@QY3-sy^C#e`APH!`QA_ z_Ms3XiuD63Xc|k7*k{apK6PXkU3f7WeI}TOwsPcA#a2K4Tw%Z$r;6r?K|#oT!Qw~p z4ii4PIf?THFu*p`1J*qot+W4ie`*!_2tz+fl6Ana<2o~JHGpZc7 z!DVT<=v6W|aSGfe)m(iX*Ui}4HVQFVxg<%@rCLB}Hd!zIsn<{5;S+k-bbI$V{}ZW8 zr0`a7X24~Gn0_0~?^)wc>jZC>0@|dA(#_9TP`^6U$7a*V!@QTnC}bFKstkPxfrS*B z59Mjh8r-yDQHtJ)KG5OGizm8YDI$zY56$1G3zmwnRRqE$U zfcn{{`qrOjxY-U3$jS64v3BEAF-^D#su+iE5eW+UzgD_9bWzCCEGaT)YmlgMmN&TcqMsbO{tr8BPL9X_0oJONxRrwdWt#ptTy zUwFFG@buIMuf8`t|2i*Y#rM(;mruGL|2~r4^*#|Uh)4``ac#x7M3uqB52vPM85ru4 z+JObE>~2_q$iVvN9F!yrAyr)sP<>l94>$Foj?PG?CN7NCR9?-F{7!~e5)eM?|JMoB zS9%|fKrn``)Sc@WS(S24SXtpLm$e)weiXpfs5W%&*`>Mb3e_sA9;`oY4@HEMOl7rm z(xq8M#|Q|NHs-EP3jq|Q+T#595$)P~f*!+0+Y&UK1yk;r($&0eKj6hl#9AN9_RxOJ z^;&y5--i|!nzVJoQ8V^~QffhHp$EY(?ruM%)?ixkfY$G~8(tg0%SKF$`NhV)Fqtvt z|Dg;BAC-I7!6+nhZmUQ`KPn6z(Qd^}KM#OZ~)`>DGg8`#II_ zZ>3GR?E4wkNex&Is(%#^ZUFv;d`maxu&-xF%z_Nt7t)RdGJR^SccC0XXht9K`S63H zkuB7KVkS4{b&{5vv@n0e;tEjbQEd$de?r)4+Z40b9GQ?CkpcfU0|R^?1#ovU-jz;a zClH;{CX#5>UxV3KU*wY^=mBRaZ1eW*inbRbzWDMIjZ_SCAf);eJl&{3-Ts&xsWt}g zCFwkzTogwid?1vL8WGJ4xV~V3o1&r(Js|>Mc?ir`>#>T)e8Ug~Jjm?`1njX0%5`zo zjimdFRMYz{XF0~H`3zyC*n`36Pc^I?EVSGj#)ED#&PIePDCjjg>|5R0KuM(`P)%!sDOqp4mv&5ide?#z<;~m(6=-x zvR%d@aV$N6o)^|JgY1G!lWJ$p3HECXp3@M+lmfgOU;Lfn=LFgsVUT zp%NUzY_3pH)(@FBBC*coAY!Q4_eiqok|>T#n8wjxN;6rq<(jS{0}TJ#(t1p>&W*Pt z-K;e0?VMysx(OH)BDtwnYOOQPB8A(3#j;_rcOs6qhxMqjS7`e4z6qHNC_oR!$M=e4ELNc536XL=sH7(JhY+NTL-Z=b6^b$UIU@U7 z?nZrx`OKwYmAMIEv?R`DDlxdQ;;)@U-Pu%ar|pQ$$FS9FB6B8It=$Vyv}c@#2~{p|7s(U8`T2?Mw7=d zrmm@wL*3?TlvL|r0j1mm@k%uf&hpYVh+Sk~^=6*suCdfgWt}O)4N1r!0@)HO@bT$z z%e~zG!)bj`=hL>Chte1QLF*3uCb+c2ITUJuaMERVt=A;Yd53{bdwNnw^*)g%y3+8B z@TQ5nIvzMUY}V>%+Qp0RHxP&kzI6^w==y2O2un~IKa5l{=QqaFNT-BqgDd3fSVHAu z*$EsyDs3YrZ)I%DwZfsQWPKYQMHC*3hOSLiND;_9WvSJQhI~RjsI^Puhs;&}hJ@P* zZU=8}@BgS+7{6MGU`{&s64Pdsk^Y^)pC?!?_5_BRPzE0S{@81&EVF*ZWZU*eG~@CV z;XUR_*Nq_&$`+zTEAP}NxFNYjT^DhqM~9VN>NIeU;t8q2>|LXpgg9PZf4mf0(?p;2 zzUh5`#_)&H3bp?;%b!uM#U|)|9dDV6eee{&@L54)=`jgxD+4v`tcVLMW$@xgs%gvt zosAOpvL+^UWMB0;&%7p4M_TX=LVbLL=_+e0IAUATYiGEI-ARdVL`UvFPRG8kwlD|J zk?&K@or>0oi)jPv>z67aU34)WtI}5OMpzm9Fhj)oXO5p}KaA8?zpX&#M3$JZD12zJ z#4uRX5RRz0iCx$#8sU@jGv?*{$O!Zu@K7Qqh9icBVP*zU=LB=cdBKW0Os}Y)#rSJV zkEqFnjYZgujtM_Ui>}QHX47Nwe;}G9Z*izVdR$z)Qo6pIF2=Khjz1?qIiE4+RtYO+ za%f>*4~jLec(ByFw5|oQNI{T$Q*xGWP~nn$*Cq2Haa&vHUcUE-Rk~?u?f}e7cS`Wj>IViS4-ikEaTVEJ9bsV6ax|;MMh6t z#F8RZ-+0`uL$j*Cge3Q1{L3VZCwYagGexEvF!?3K? zwG#(E3A%>Cist`#;80*(a+KpFJjsW9gu{1j6Er)h<$a?qZFOIMh+CW@XT^LReFNI; zJiE`to`93bEJv32LY%C|o~CeSc%glNcw<3ON7wj7?hC4nB^218YOE9>%`MeCXN&9M zOhry7icPGvXA}Z3(OEz#TR7rhp$_dEG3>Ca(VRf@5fnSncQ@wjW}4w0LE=9S|Nbvb z-NOFw#JRY0)Ml99aL|)b%Y-gC!Wyjp{+KRD>SX5RCQGKQRvJDa*EtNr{iE9{VpV)i+HLS*m_?~<1CZMLm? zI5?14HPq@~(=K)|KPoMgM4@8+7iM>){u_O=W9rk268%CiZH*ywZ?nFnZg&^atj%Z} zn(C7jR^h4i{Z^?&p)ugL=*Bp;it+z3^_5{!eP7!{4?Q#}ARyf(T@Kwfbf>g{bT}YG zNGm1M-Q6IlpwcbfARsL*Qttu%{hybMFI>Z%vtzA$-K+NAQR%QF^m4I*H)%X%_0&yP ztaHzm;dc!>X{NoqZ`F@s4t2L2`?~;Pv2PPLCxzn`{KRf}Qmt?q-f^odKWhnWt56HB84wQ;>Z=1L6Yo3|<0kMo@<(aB9!Cr4GJ zcg02+jlb47x4>THX5wzl0I3xftN845e+`^{jyVYnJ|5|F9p}xjphB5zd9gJjEnzYB z4X4t4iivm>h;2I6p#Nv9UauzAZnJjLk8eXXo<8=h?uK)eFXehGN2J2YoWLh3Nq%oHTfs1&XkU($aa%j$Fz4ArK^rmq(nHJcZR1_JmK+)t%Bgd?hA%Px_rW{B7R~ z!X&a{Sfr}Fx$EoPO*00AUZ9apL#W&t#yO#^HGBuBVIiaIL(B?K*;^O+^G%^dt?4%9 z#bR!(o6$~%+}toih$fpV_P0nvXd~k8?Ue+X;r4#)YO}StjwED}-7wy&+8e(QPYDii z%3k1UJ2^bhv?zVb$}&cV|K(UfgOTE_I)%Mx2xfa0tcB>wW)f8 z9#Ns=;-DG~gU03rlOs)DTR0UNJsZLFy!xc{PjN&G>8oMWmzC`Ol71^?mo20~$Orun zYK)c9out37R%^K%JbiCC%dn@X*sKO$>NKRwJ=HWK^3x4wB#+Bc%@wUy&8lDX@sJl% z(g=D=v)7*KkV}Z~?}}{{$rh1X@nY`}{t7j0{L4;O))c`Qc9R`+I^${ntr8wbTWjaS z-VVHWMKdZ=qTR1`;T0zB-!&7>^nKF4T1^_3R4iS`u3DC^azx^9DX(n~cgWCsXDO=v zyEx3m6@L?cb@hnBTUq=|OGd$Z*d8HeTpxp@VyKp${|Eg*5$miPub59CM`z?q4Un0g zkjyQffs(!O%vXRGfv=>=w@cn&E+@9|fSX^z(L2Sld=xjVNvT>C9a;vGy`DoBDiJ1| z6o%a#Dpj!~CAn-NU8neta0eTdMvZX2RK$f2Zoh6+AolU0)Hc5zhoBH~W{KEY=R9`J z4ZEd$^Ex!;pLr9cn>e8-zx6n!qe#IV^a_J6TSa|OzC9KT<;eh=4Oz)t9J ziY;MOG{H6j&3}YHl2VY-mbYI|T~sY23UA|zDrh4M#0nVn0sv z38UlXH${I?8EuTJsVcd&ZJ|7pZkmQ@4FsU(NAkUC6C^$G3i{RPtKTo&>p}HuCc>CV zm$ka7SY?k89=6u%^X_(zD`4jrQ!A1Y%vJcQH5%xdm)FaeH*Y_%({WuyfihVRkbMqU z3w|(sJ2aW#k1u)mykfgIai++5B1io4G_WJqv$pypAxo+G{PfI0e4@ek=Mz@0155+Q z*R6U+`9leVx6p5DA+O#s=nKb0W@F+8DVJN8l1jE~XTp(w_vEESLYIVZKO+rgLfjMX zvcd62!9{1mheq{yd~@6j$s601y01?cw;HBMY#wwIRy`!mBxfo{59i;G@ZyMMCgcPz zEjAVR@GhSp*iTl^^4&=FZ!~0&l-7TC=`1Y7e=Fc(G5$Z-ENlhf&73B&o~ zQ_e_n3p_j%;k`d^P*Le+f=m13>@G`8+Z3PpapD?vuxISbtI0Eq(_qrv1){5H8E)`r z&`ROdW-bJ$IHM+sJZNH-@KeIqbI^y7gU!qLGwwA)l9IQui^pGcefGC~L67{8c!O+` zyM)!IF8ch}*Y|T&T=BwRV9#-`dNgr=WE@28gBx1z^$R=wuvQ8jILsB5O}b1uLOJ$i zYSKpCZy+*Klu?zi5X)qrR~7p~!5TzpLtgcXDeL8*E_}&=&51|+Ote7E^^Wd=DUu=% zkBupnqM4nGJDi41L>dwTvr9iqUj6C~*PZ>kzP`|QUfDNMD;VYejL|!3+GnVOsoZ-P z9+7+9D2OvtdLa^iwRq@j*vVVwJ^P@rqOZ)MdRj$pC`4CN!Q1MI8&iVP>z9XzI91G z)0y*w4v7_GOxnA&Hjt@8Vp#E9JxpLa`!y=Rx8>f#zC-;J*V3`~YEEis4&v{25yq%F z5$qKwN|4?pK0rh^ZD4G)qg2HsYSlceV_QZlr2B@;~C^?XdX~X*bPGmvu8x!KI%OC1`&`&&g96toL;rzwo8QY zQrty6q2Mix8vTIZE8+OmV){vC^Ka7jlT^L21wF571p?(8uy)XjcP$^P^%i`0aDU^$ z54WcXVSQWLPoMS6f60I6IP3Px3;Qu*9{Tf6scG}W@l)`Tu5P+-N>bZf1NN@2uIe6L z9kaR@mA7SKSd4Fy8de#Rn+ks047{q{4^{m(-x-XYkHG|cf%%?WGEYPG$#>+5Frw*M zlTvjIyya44Yzd2Bva(3TZUQ{s&8!ed_&@}b{%_<@X4g^hYqFP@n@b(X*VkDBv_HN* zyDkt4!DA5jyuvvyhL!)aFV2xW zL{ZLBo`8i0Ex%omM&~$L#Ou4N14(I6X_fH!ZgG`eD|&zsM4)_Z;ds(3uZE|&a`2bZn}m;U@BF~78-aIa(9-*uxv#PSKu8aH=%K1A`S!OOzdr}QR) z1c5H6SN;8QAJ1kTt3KZN1qNc$=HuVIqyeO>M*z^7Y<9i&5|724L;DRCP_6=S{L`$PX>V`Z{$4s@l(06e+>dvEAUP-(2 z?FLCOS#}(vsON)at$C-WXy(*x^_eplb4!5-+PAYz6TzwNTF{=7d**?N=P)3Sa@R36 zHOb@{o?qzKin6qG<^E$xH#q3O<7$`;cYVkEbDk;<5t0er{n-IgG!e*Vy*O3mDQ4CB zCS~lqQ_&>xJE4VC8Qh|FZ|7*Om33Q@fB6sJy4ar)MP(7b(WCyz&RW10WKQm|5g5w; zMUIhnd4qw5bwWW|{QMO<)+$p#qC` znkQo`iXs)&NP$J`|tfmP1{d&+z~ou2|3Z^xBv0}p4R%MmDP ziv*jyVh`si7X$IjeE3-9tC=3w0rwwYEH*wJhrzav=U9$jQk$!2S+l zZ`BlQSBpFTEr0TxC@K0lPu7`vk$XD<0Y@Yde`_Iwf`vWde{sh8`G=eNCcQEp-y&mn zQpuCw33Rms&cgDnH18qBewYz?UhM-pbd2v?LSxFII+**G<>kT?pU~R+C|uQZdE?ldZP2OldA9y9wK(A0H}CJIKht;T>(n57 zy*_*$pccyP+FYMAsbtv3%ld?YhJLOczx*|W&`O~2$;%z>g?G&sk;{0hE7=qB*av~o zQPV7L(RiAES{y{(z)oyrs~#0tx*Oj4>rd*$#aL8n;m)KoBVyk5E}#G`A{^$~U`QgX zS*iQgl3*O!s#|PWwVGXxx1p$tSdZK)@J(SCWhaMNIzw?OXkZd%F{nERW+Qo{i>60_ zR62y{a;626gnun-e8{gqFW~NOZZ%?}Z1ul;Cgf$l7$XsnUSpq1!j+|znj`EM%0{r* zEx+3(>FBpM`jLEF45Rg`Cvs_>WJ<3Qwpjc0`A~ar0^!y$wy&b!@IELF8w*5T+9*f- zE0l|7B+9ZyU&264e4qsIPQ}Z4mF|R3+HG?vqpZJwOvzg?>WQq8r_9>7l>p(gTAXfw zl1AHVPfQ;m!hi?Q;33zTSSEErzzh<#-YkZZ^?!A*>IX`o`2R}AkD!3d0!iLF$@7&> z*&h@iG0X|(Kg7=!B1=(OM8RguzFf-H361M>0U9G5tf8b>j*yZGS6-RbsG3z*(jFxjbJRL!BhURi7M&`mjxN4Ph zVmL!hOXaiyl1*pW&qN7l%#0IK`(T%6V0H56`@ErVh=H!fv#@z4RH%)nH$3M`p~mt% zGp#k`uf-P@$^|x8GnplIq?}#*%-m)CiD{Z%4A#R|W+3%3-^uy#0>NZQi0&cHF}p)l zy4{;eL;HjHFEqpBL+V&7UH6w*KANycs+(L@M=pM*YJOTfgveBWPiOt5#fsz)#F8Nw zKn|FvyiPtV^DNLKq4U+E7hWdkz;>$)tL)Fa_tph6Fi zQn1&B`FiL`+1oWwaSsl(L$-+HN+g~<_qE;F<9J=k=y9Ag|AE7fgDdj@)Sk8RI#l;- zExPLTv|d5O&c($=Wf>D<-uSN~xzkfG2LAdr+O^4LX1G13tT)P#3|`E(V=0JWccO*B zNjO#*U^1jR7VRa)GDbLd7YM?ynFUuOZWYIvfPHc6Z^c9KV5oof9;&1e(N#WJm#=YZ z7~Fq#jcW6*ANr<~!!+jjsPYj5?puhv>IxTdNDD23GVb{Jcw*b3!EikT6RA11NG>!( zvW#cZ$d7*=>b^KS8eR%&-I-Mpl;s(z|xJBh08o2BBS|vuD(;DO#t8{aI<< z>0M4?ZeDL*;Wj}$$0O!BqN#0}{w)CN5!l&B@8rdch=x&Sbgp#Dv?bZTH?`a&+Q=ZrX4esGE@^pWXON)-#NWa` zqTSm>C(@{CE(v0)hFY8pgu%1UMs;$@$`^RYlc5Gnp@r5C9~)}a>oC>7%gq^xb24RXC|B&tS(yu+{f@&Y0nx$ ze{y7TC$i#leGBZ|>$&WFglEso&yMJg9m<<=Opc{R;6VR!VT>Z9!CEmR6H}8!vI4Am zWpA;hB38fd93YrPYWTjhKhyz}T}G)X7ijb#S0Z5v0h%`kTa0=h;z(Es>F%ROHa(nt z#<+C`S2G-`lqmPilXC_$|FpYPx9A!&0qYzCEis7 zrhV_#-{sp_aq><6=;_S{WM!?P&ME>1Jb!`br7a*Yi2N&nEsa<ccdb~cM2V-8Z5zCC4i@@D*AzLwqXP=Fq+zAvZ$=2SSb`P1%r zNo`%vd}q$jiPABhOzlM@U5;a|fUb^Yuu z8I(dO2Ii%?u=qm$^yyh#_Vp9)SC1)2p!q{UUvO-;T#(6L)EE=_)vvJYJ9>U8@jctp zUoQ61$^Y(@@_>Vm6YhzgV{114tmhTfWL(cXnSWp*MV~X>%>ogB*8&QNEbqfmhq5>3 zonk-G{S3&cVpu{aQ`E`*NettPcUZ-rJ9NhIqO0c=WfezcCNn95TMB;}5Zp<+t#ooE zHkW282+te8*LQR^MDo`#GTnd0w^qV|}Mwoj97WhZM)$#S)@m${`U{2`x|h>;rz zKXs;rKH2}%NuU}#svH7w@4L(H1MWh4G3mve=`BaYqiBI_qkdXSMPf=N#&V3gWW}(D zZrQd$aL0;HSL1>V1u(^(Cw@2XH6^aSa`twQbGBlI@+a@t2(_;%OKP%NRdO~=BU1A~ z136kCX3bKCVy*{ee!3DC@A-tRJ~I#z@aZ+c-1uXVSI3W&6`N6JIeCF2X`e;-iEc?-* z5`pD==)D=!4RshmCq~g|b?|%_Us1H5q&WTJq!h)XT~=ohhezJ66JF=(84~9oV!;qt zB+35~J&W5oVaUhv1M+@voqAuEz$5=ntS6A&1zgySm1G@#!#i>AB(921%z&sa89ik!i!}<1}ANg4B z88loNzTK?Nr{0dm*J^a8POBARSNCM)r-@-Zt0%GD*HD+qIiN`*ZG{W_&a4eY_aqC_ z`@ZO$XTqs^DE_m^20!+kd_EUth4|9Nj0&x-8_UR!mJlju{%`|1}#v{elfgCX2LjxYifud6)OLwoQc+t4|DCTdV^{RZj6hE zX(QeCz#%E)r@^TvnvCXtwFtCl@E?-f+InO6FUWcX_J1~KiY>ftm?iYWPmGy=lIUT! zxC|*l-FX@ZgkvWEE#3g}Gk_#fm_BF63%O*nbO|MPWiytwf{RMXv#=I$!DK8|)$&>M zbi6-vhaj7xHdU3Y6(UlBmJJ1qctvPKgG-ix7xT#DBM)RcK1o5%YdF_^XTE?xUNJTlL-XspctXr5D_hO_RQcKTl7ODwfk@>a<|J-g299@R^u>KfvBK=n< z>j+>o$jaV&#gTo8%9nJhA!J9OwKO?z3GWd0?R{+5H~NA6r__klUb=pIoS~cug{^|p zh$hh+q}eowch5*%HjkW{(Asve8{`)He-KH$l~+$8Gg46lw;cX*`wNZV`n--kNC@^? zl;K-RDr=c@UM9c8T2(!SXHGs`8McVF5fJ|ERshz>|_L9n01r*=7RhT_&oaG{Q2sB@p)oWfxp6Ju{4F~Vf`>g8xu=G zNu;3M+K-0CQ}z+LIiUz-aFRT>9sy>O_(K*w-0YTdU$k_NL~=RpG3^t) z1WviF@zqjZId=1l@{#VlaD(vIKPP-$W09vt%nJZ^84f7+5073Q4WIUgrKImxZL~RU zX))&y(^D2qIwndp3V_x%q<_MZ$|p*cGUCsjobWm}9U1xH`7s&loU3jo@*ZCB{ywwp z7Y&fUeo1JnvSYMDnI$tN^FowuYBK%UfL>`NZY$X&4r}|e!}eM3cMz;45&zJ>!qNE#D(BoR{DftpWy1Yl$YHSsSZ3Mk%>4S<@NQQuB6l7xW& z>(OezI`TSSt5(i{R7=$Az=i&X|a7kS;q~o*FQ=6N>x^- z^}QxT9fm)n6N_mRgoDjKfSHRmcgrJ8yhAS5x_x5h6P7E*ObWz(Ze@+`-Wc=(twc9Z zwYQgJ(aov6Mc%`kJF@L6(8rSpjXx87o09uKQ@P8W%~^e8EUx;Bm6cv^^m}fVuIjcY z-EyNt9}S!*g-Zu%us^s}Q~>9hPB{NDX7_21-|cEqJw1Q#F*R+j-k+1h@ou3dyIvqI zhYG}*?ktg_!O#e|I7|C}mZM_~wY7Mvcr%w35PmQGCro^Kqc>x^1fx<-=gS&;VGhnR^(!>fI3{ce!{l?Tg&fhfh-NZ18m_gytMv6$nZN`IFkD zp~>cUqGrva5XTsx9dWot*~nY((01Yb1EjPwaQPl;JHt=cA&(dm8Ut zR*%Z@W4^oj&5Om3yH}^YW{``Uk93uveWjhxYzKls(eJZh&>pAavXsw~+HS--c|fl> zj53L(;0YgQ{)`@(blx-*76F=)cNr|}YjPkukHRj4{xDZq>qm3{#+8ce$7NroQMZ}V zXGvV>-%aG9!41#5;twG(K!)$DLVy`*{p37+_mI!T%mAolX|Y?J?YOj@A8a?{-0v6F zS-++R;tpYuySZBnu!g&`N}tNIslZ0_s{W8@dK)kJk8JaIilaB+sZLb98mAI=-**w8 z(vX?I&Tam{%-Lkf4zy={Vv+-h9ym2YTo;a-OYGK zu8*g)?pXH-U5NkgctU+r^CuUrb<0C1L(99k+5eqWTxGVxLT|Ovet}=kFS)JvZP0ix}#_P0?WAOCqDXKAUJt-s~T&M5Fy7@Xvz2sBPr`Ihd!Zw(;qw+ngBC zop|2}05}Mu4eCA%JW??0vc*#lf7edDopCPJXdb{ZC-_g2UA$1-!Ew?%&`=tqW1drk zc?p!{`$9SR{YJ#NH;Ab96e~1gt{nc<`M~>LT*!vd4NZgQgu7nDfL}AxBuVcC17I@0 za_$Xi&*AhC-hxY&yN*i@8L*-M8F>pfy(x`hZA&94$?npGyEmozEGHHMwKIm^I8OW> zgASg$%>>9JX-P>hWe5)lm^~SR-}?#R76GSxzJ+VsdSBo?r2jT2MyF+rHE9Tmh!`dH z7eoz;#j_!E{MN=+vJIa+gvzzGq&1|c#AK&>jxS#fB5xm>FvX+fI?p8g z|NLHuC%O`hhIR0P7$4N4&hepS_!4ujFk8&5l4G73&jnXYoa5GFOckMp#l{}&gk1J_ zCloOt=C%HL^aAsOWq$4)rEgtW-HaOP(=Z63v6%lLTF$~SBC^aS*|`a>LL)_RqF*TT z!naX#^EK@mp(QKb^%|UkZi3@xv|83LAy{uYlWuFm!c~1S- z+O09YgBplmAmU>00!L8BnuayO{B^vkV2D(WJ~tKo4WyRzKQIWj*U^&`EUx#BNQxdk zT`k>9s}PRyKCjsO^19qwhccT1o%ToAXEUOEox!LZREo~T!*E{=D~#b_6A)v5@&9GK ze3|=eKjp?FV;nFL_+zz-`t_xTsYgxfItOCVFw*_<+RsWQk)3ZRgnP2)?OU+p5-igbI*n#;v4>Dt*C*v?RjPWF1Zey_*Z;}8B?=1 z42S_V_}!oZ48b-e=JV*?VLPD6imM`nRT^MfUc&+{fkx56I)*8M^d81tiO<7LG7q^^ z6UbWsEFW3Cps#>J6(s*MGiaklzQaJX5T(5`kb088FQ^97VictfGH#eA(|z4qigB7f zKq?+?-a2x2ElgAT5^$Ad9PsNmd|^9cfF9t!ZrdO4s^~mxk%(H+`&>?LAhQYoyiNVd<}7b@lQ~Fg%EX{FL#A{U4~!JtQRDCwHs?g zd!qj-FHS_6erbCNN56{;&Z|TIPPq?dZ13qb*52_{Rf*cl^RUo8#pvLIAHbUfge>rZ z9;>?o7XWA0_}kD5e@Hhy#g9J&1}t)4aRE*Z)-dA_$iTad4-j`Lis&4zV6K~4fdz5n z(yQ>&TrF}g1^AuSm-6;q(Lj61uc)5hNjtAX8CzhP$j_JB7~!^%q{Y&F5$>DSRm*OG zTDsgFfCkk60%fzSIXX)ng?u1g&x`(IsyaeWy3gqz=PZUp15v8f`Ei2=HcV&Kh8XT- z{zcjZ?~u7m%C@egI-10cj#?yv6}?iuds+O9(ChLK_KqVc9(d{QKRHB5ONYjXflv_D zeJ$s%hEW|$KT^Fg*-W;!OT=gVya6``@elPsm8aKiej%>MyL9?E?YV(sO;|WlI$!)l z1=^DX|8IBnlb=O0o4{mXH6dm{_vcC)K0LH=M1N651=W-4lzQ_HU5NjgU@&*b#Jeiy z488?U|LRQ-^K5E*gcI^#z>nV(cFRft4lwxN6MsYZJO;~4WDo50PUcEX$sWK@^OMIw!CKD$hez zvLw&bOz$RaIy#6ZCPj2jo;l;pm(jz$dcCRFLd!Z5YQOn<8qpwgRE;7K+sBuCPm^wT zsY!s;<@xD?d_VqV=H1)g-E%aEyAF$1F9ETU4M!@M%glSFkIy zfAy0>8^VsbCbItZSt=lh`|nBJww?=-7W?8$2T}{z4aGYr%?Ekgc(gwX{|g$>)Iv0k z9}T``eREc`$+Vj)F2sKLvOusJtl2;xO&nZ7`Z!Dn&7Q)?&hHm z(f1vZngHpXj%;Z-pqz;KyxdCVm?Z8~`s4X8Z?af4`a|de_0_^$&b&SU4s+#X|SNSSb=yRoC-k zNs(^n`fA_C6?mkyo^@TNzo!DrqH18Xz!L+{%mtrwpKDgUXn_iLMy+mLmz@g=*+aod z|EVBWhE|P@njGP+VUq0e-b7U3qFF<(gZwL}EU}lh-D`wLw@uy$hnhO)H@8!U{qiRBZ<0E zUn!v=o}HqP5lEm4MmuiJ*|g1yjHpQ zd!(y(@pWPWU~80>!8rvi(KijTctKXkBv242sAD3k)ckfn9**+qFdXadWsdD_;e7K3 zHzYP!xa_ovIHfl;B5|myG`pGTdy91CJ%(I6X&I_K?Wmw^C>R8aee~3~gL!04$lr+)52Nuo7;(! zvsK5#0o!YyR3){SSx9Y)r<1H3@@n;EUs}bLcBxVf(4s>4SP>u)s0MTXWi^@Om`t-7 z|4%~k*w0lh1;UdSAkf|HKe{yHf$#IA_XU*K3nD(A1=zLn`Ay^FIq*B@I(1z(Z08C z9;-_U8dzmTDGzrZ(lrzy)?a|DM5r5QK=Ib7_v3Zb1vgBLV{u;xiEC<I2;?~bpHxi81ElHs0n<0Z70UP>9y;;i?>)2io&z|59yO3$&j({ zrBk6FGEw)2QX;5z5W~tQ+v!@T`UTM+R%8y`YfDtJc>UezKoBqz2((JqHb|%Kc(tSqrR{Q@MPbHd_lvo-*F*c$kAVPgZR;^>oHFBl%O- zu1F?r{)mYe@%PriN6?u!gnQRGb5*%X;5rnGrkRjFNiC9%Hh*RPGZsU~s-yaC-P^d) zk555Tp%4&=J}q%nhtlMMKCh_jNK3pKogMv%^9hTspx;cr-5UAr;)uUNHOb!;rXL=e?`W3E!(*zWbkaxo##%Nho3N;}@a8y$&Z2(vpc^&vt2)W`DJ6jmy7|NYnyPv`k0q z?hV^pDAE?xKSO7&$p0yV!X4I`M+yzUoRn~_d#Y_{_|s3%L>y4McG(L>51VMka()owAfD@xJ@9&t>O?p%$ zJ(-+Srt~mF`wB-J)r2yZK49q~cgjxVt1=#K|H_z)^`(W#YloImJKa}`*$Cs}l2m?h z_WAv`|2Vt|U}^Juw*c-ENEyp4VYZnjv@|z6gI9(Hzd+lgPOQ#P3{D^{zzh6XoXopB z|M^$!19_Y?TGSDvt3LpqbW=OavOZ+YFD6e-rpfp#8_Vp$o+li7_TC8!rs0I$N%Gs`SgPCn#P0EO!An_#(m<`Ox6sCqt;?v) zdr#DCo+0y#2#`cep^H_ayvn)Uv~=b zo_miU?1nSrzy5GY_qiJ3p<}AJB@-KZ8pQD%@9V$~$!orR>@gV46XVcTK50ji^1l0q zD`jK{F@<~F?;(ny9L5{j9($$UPv}Z#V!_<>EH>Rr0v1&T4HB~+^o1@+G~gHaV;A+v z{$DMDLQbOEO3LWjmAEpPR@M?L$&h7%CwzqQI)Oe!k4Fda_VV}NAJ%_2gxir^i29M( zX6B5&9k=vkNa<+%D*Rkto ze!2TO;*IL;r8BBZ4vg*u9vd2r(WYjXs4Jf_!W2r{2`dzc-E;_u%ASne1=I|8WW;Qp=!~M0n)r@9&f*#TxflW zRPi9J#Wf#c!~Mf^B6rLqV(86(qXx+6QTPS|AHwc6pV-0h~!z<0!E!;?F&+xAb<@i9DbMpN8{_5U^y5Z?BBx ztXRJ=SlgQO3Zh#RK|zNAb^~G{(+DS`8ZOPe4ra(d;Y!&qnmx9j@|0hj9--qtKw~iC z;Gjil%tmr|6M%AERc=K9YST>^K6=pc8m|;fj?cfEEc8n}Trfh;Mg0_C%KfBmsUHMd zZeAx*+tO+cuQ+>4<38_DW#vFCI)#S&8_$I8mN3ujp(vfwrEKrALHr&-hbUE+cR$Bl z)#3lyK~UQ?HZ~d#{WRqOA?_EOa+t6-v&bwlv~6GKiz}1doW+!pdc&k?mEe0KBpTlP zby9>=&eDd~=0mjdUH6TuNaMCzkLBNHx60 zzim@?k+Ho;)i)D9`{RfG&Q2=s4IUiiz}&)+djEH6zHGfvEWn|)k%~=F3N0fw)S5m% zsh?c2O#B#god7ZEIB3j@DX5%k*)fM-vVV@vy1v9k5Bm^%jglm}!Qy|a$x>gihh0`F zO4wIfB%dkHTrf7Pg;X`jN$8i@&EIT8EQNe8$BJ5phVQp&J+uN_qKg_mmSalVi?NhS zc4b(*oQyT+U=Nqbk)-bUh}7G}6Jv)+>;^laH#X0?arM zs|GZ}2GCAGsb~s3z(rk=D|PZ3uaqQiCpdEQUf#Wb%_!iqhJm9*gp3L;$aD>x39$1x&oVr9v8t$rg$e|`&?9Tfr#miC z?IBY0_l$%hKQZZ&6*slE;)*WngRn)9aOe%Web11mw$A3;qR)e!R40=AndsM3xPGN$ zrDAX0=vT3kgNpyoB{4BE-w#|u5P$AhDJ=&dDtKAgo68F#47sQ6`99V)3>Ci*hU-NH z)}tERotEOckqbg;t|l=<1bB8BC6#C{F8`*WodW<8!5*N=8^)WN~Q zQ9<+|@ZXu$Pj<=SA2X}JYHL_E)c=YH7e5d#-b)QuLM+MiRL3$k{Nyd;F1BgPCg1r+ z=t=Pe_%(_9YAA>X`s<0+x~+Ztt_yC9(!j(?9r1IkbNqpcXz%bp>mkrhM2aW>OK0`i zo9h`U_?G;N;YlnkNu;%P`%Jm%&&XftDm~a6Rr8+2Zy;{X6J%S?iqD6cY~q&2-=f-n z-zZN;*BcR~aA$ylej>+;^(M6>Qk?}if)4=F zi(zA9L!xszBz8Wa?_l6%!g1J8wJ#Wju8Tc4r|`HF?kT;5T$&GoDv}6=kGN1&=a~cG z?N7!vEK>A6aey2(9&|rs9N>=juM7-Jt$(&*`1BUJ^L*TW6RLTFPCqpOMJ5cr-@KgM z+||vGFKv5zEE0wu>17$PA*!KF1+JpMJRft6YBEIGqMJ7h1UtTLRG-?>;=rjwU(ZbSJD7ZgVcbB0^CEo9hVqae$0x~Ri9DQxYKX+1~ z+ij8|9$hz87I(J)a+Fp&4Cj%=2Qnt)zxF$x{-K}?I~!X+b(-+aRn3Z#r&%1|8`0g1 zgX8EYu}TbWQ~0P0u~+Blx~_1YYLCd;gJUdUYF{_0_LYp^)Q^!JQ^$8>Nz0ecn&K zgXH+^x$S_H4~Jwa83mkYiFK4gKQZq$U?L3np@7qLJfFZ$7)I4Gxij?y>7c>k^Tq6X zIQOfAv3f)`BGx%ey3LfVc@r@P(7nJ8Gn$#x8R`Qv=Z{LuSjC3q&xHS-Oqs zfTxI{{r9z{vf|?A^I(4txV`Gf!+{ktyoP+6UdS;Dila-7&Y_IDV}iqkCi$+#u(UtU z?Asd>nQL)o`{}1cnL2igw6K)L#A?`Y9uH&n8GllAlhNT@SlZ}@!0fj{sydJEN4dV& zAP6opU^5hgN!WD7E_ds`GIZS@Ka*6Ru(U#dHRx2T>*fG8znW0pby z>nD`gVA>IIF{|nrC5QX+D1+(j$HDd@qpSF^%$_WBLH+YBoIoTcv%4o0m|%V9qE{WPDI=Zj#eI^6E~L!RmH_ZIo8v&4UTJDtnV|J za!tDG^fuAI!uzvT*$F!{pSJ{D9Lacs|7x2Oplws8{(G4r{^(gkKR-5c%!s=_Yfe^T zo5092vYeIbyv>7Yz5aBK6AI~Ed@C^@$?MfHzR&76-UUCTv>Y}IL>-IAp$Y4a` z{GhGa`xy)jA^h?7DfnA|g*p#E$cC^BnEuS;}zlyYeI%Ee8Ww+tUOC?e?%(6oD1MoL0LCF0TZGX2v;6X92G%Z@x0 z5Txg3!4$X?N?SW&yJlH`Y-FVR#pckrZ{MQ0K3IQ?rXW*o_mQ4Kf1WY*QdfyZ=2tiR zj9Y%)7qVO{e-<)-Ve&3KryEJ!oczSvKt=M28f%qH=Yl;Bc)=0b`RpaZnbmp~PiZWP zWq#sW@h&aJ9!kOu71vcBmawgJm3ZDsD4DVAS$hFA;+RwDd3P)orhf_&&3!OwBn}u9 zyXgm?n^(T3>lE&qD{+gySAFod)v^!b680CcVqwG>;aH^m=IeOq1c~S$yy+SZrHO)M za;0}Aui;8y8}A9tDi83A9lWx?FBkaxfoatdP78eGT~^$$X0c9iHV7!-5C1>viez(s) zv|pMkZ%HpzKtHunJ0SqJLYRVmiv|?WX)1WCItQ=w+625G)mrcPr6cXPwb=@Dzun@FG4MNaB!lYp z`|{!QvXot1`E~Z&48R+R9leDsunKRS5N(S4>x@p*Vz8FF82DfVM2iptmIg3ZDjkf7 zNMk@Wu4ze2cL6Yd^LwKfvq*(m;u@i7_VD)9aoG9cGfLj{y(rGtoypcF+wY7_(n1QZ0MNJNkhp?BD#2r6AEQX>k|iFA+>1f+MQ zg)W31dO`^yXGQ#-Idf+2%)K)=e~=-`-fQpmw{XRnnN-W2qx(2Opgo7!~pBy|3! zd2L=QSHOc3a_X{IpxOz6z*1D|>oav`o{(>A8Db-4327|4kiTBzJF%y+BvP@_3!+$B z%>-5N*#OZaz>zk*z5S+q_(Yzo|2-=!tH;1af~TalH6mRBD5?(K0O1krMYKS@@8H7$v5E{upNu`Hvv$9Oox zpO5&*#ZQU(2Dw|Y{We!*(>{JFNn0@Zk+vY;`6Gf;k!r&Q9g%9PS;fiR3Pc`Ni=Ybs zw!IMq+7G|j-{J-RQ+rumP3=9@ulnJ#{n&S1+SHPj;DGK0S5SMQa-`oRJ0NdbpZf5r zTSZMx&7%F|b<55qmkcCWoz{LagaLklW8%s8bWsWt=^O9-0d*Z9dQ+3M)iT=8D3oKU zLD5V!kT?BippKyRkQf~<=3a>n`s^dM{u*51du>ctsfchk*FmC^?(Oq-sH-+um{nN; zmW9RG^T*LwHAwzI(G%_O-o5kTDUa*F`%l`DztVek`%R5mQ&p`!HMsJXs?E*{mpKe< zWdcox`tULm4nsRrwmipq3#)e(-f)T;saey;J?eeH$b0vz;|_JIqV&HKS*yOBH<(NH zX-6!NsRfs=(zt;y#w>}kTXoC|_tIZ8_Yc#gzfb8|IU!Qz*l2G#%pfQz=)c+REt3hMB+4jB(Nw2!7OBlg~?^WiImXR3xvWX5~h-(*!49Bj_OUPZXKf2VvXd zMBp{DM-dmOj{G%OPiERE1uz!CN>_y_FFa4~xPG>w z;sge(lNQY~;axC*sWEkhEByq~E>;9?^6+6)od+G&J}rPfwEvvvKBBNi1Mb=VT9S-M zexEaVs#>2G;%(q|`n2IVHvWajZ{KNpJV?msAl}r1Mwga)?wlIYsqD5D%T;RXsoE)O zEmjG;t*wWO!Hhy5V}t^k;}xu?S~h_9ud47>GB7Y0R=#}v-+B1|7%sWiNV$GYKD+po z!sFgTs2H|*A1UuQ+a3=hS6*f&>-A?);6So%Cude>R<`s59jCjr1uoN;+O3#ub{S^w zTb|tlNuX)&znO7HfnJFFLLjU04XgQXQJ8oh(7w~c%xVH8wk{r8YNoy67)9Q@*4Eals;ZEa)B4BLjkJ*T=5byb z?xhznl6e!7K<$$u7|g7&EcGp;u+VwBG0boYY~cPT2W&g@&lXGgBT${DI&T<&udQtg z_|XODpfriP2^&?bCs8C>a+u zSvRDYjigbEblXU#5F)$j66mQ(#fZTxjwkJ!6$PhE+mBCpuOSK=6%H@S^~;SL!AZDw zSj&@5r?whh!^AA^2cq^~ek+E^%7Kyc418@uXq`aCmpLyEc|^`Z@VC*2?scI52VV27 zQHf&Cv5+%X(*K~a(%l7i|J9x1=cWC=qvgcsd}dDx%~u0k-)-FeJ5+C7Gn-Qd3iot# zJccy0(tX7mnX!;_R&Qx4>7l-r>0OuOlxd`*l71d%{LCx7lzYc0o2FMij|TQlmSOl3 zi%Q=|3Yw&%!iA1r4-c)2eTPo-KJNrsXL$}r8JN$6FBDulJOk!AgIr~ax8IBezlqLC zzu@cQnx6(1A#;X!YXfO#vBT>DHs8vb%_%h=G?vAE?_bZQHU|9~KA*=k7L;_A3UFm< zEe~!X{JgSNqC`{noK;rdMvZ)9`Xf!)dFX>d|y|ihiCV%-v^Hn+!#TY7~K{N7r z(3AW-eR3y9{*;BNs6g=VP0-9TLlqwjlSRABQJg|DS!sWKq0GhH1A&$a814=v%2 z#lM2OWQz%VinfR=vZSccfDGLl7ZcoU)A0=X%eq}9az!PEQZ5(DC}|VWEM|o(mi~p3 z+|k)3i*jvt)>+whh2~B&wB3!+M)ovV9j) zNS8dKjYkuvziY9KFxg1RO(Kj-_SDGJsBzZQ8szY#C=H^Xl7k|pq)SBw&R`>B9xntw zrl`U#XB7jB5ck2m4$2e*qk7?<7d(JH1L>&oDJ0J8N53s``g{-DEKpO9uf=dfM!=(h zUwumMH(am=n`Q2N2K5c$;Y;L2>!If*T=W0YO6d~L$2mz}!~97|N}*-o+h%&y@F^v) z$V07uawRK~kmr2nemj@Ak)UOE@M&u6a%Yt;r`ZU5OqrT0*H5-X#hh0&v}eGQ(dRBe zqhaBrkeM0Zag~+K{Q^lVA$EDlz|g)YrN8OR9}$^FoT>SW8h4#VMoXE0y&{MgU)?T! zWR3WOwf_|>+5hFVyW9h*jWn^rcpW?QINB^j#(h+Vf0_1;Jxxk20$9OI?cTxSj0)=r zR|ePFuntz)F-NQ_p9*{aBPI=6-r}w=kY7h^Mo-_4uF+32ZP7Tl%l%|ZnGVS86i#X} zYiuTKEP65EA~&VQ0Y22AxOeqHS2|QV%wvX zOPyzr=Lr=VBnl-%-ibm*!-MXRcM^1NJU(;^4L=Ku`7(y$JwA&eLZ<{pjk2#HJ`hSC zr+6dOV?-&x-;ki=m45k5)8~OJ!=p}46$0dl%orcpd0jT8UX-pT5MLa1sIs3Vi(RE$ zRAe?aU1yT7Tq_%h1nl;(Ox#NMdNs|Yo0v#>iB87=l(J2lB-T0f;x&Z5sG zOU{pU>hJvX#l%aQD>v5abPOn3OsC8ygvoD5jc8=lgTvp`VMKRg5jXI1;w2art9*KvCefb$i<-2|~Il-?ilM*v_icMZxe-uWuSL zs-7%eWX&ut-hyI{9Kg~k2eYt^hSOR%#l>}Xbzj?c34Wo-pj#|2J;%}JATW{3K#>FO zTb=$}B(^MdRoK#N(Ma&1cMD5)Ge<_krYz=a1q`>1)kmtlHUsHSb9>M85}Q=Gz07}Q zK1BL%sFo87)6y=c)`z#IseUMR7!wTa2G1QFPwiWP?&F!MCRu06WAfI$X~{AkU%f$H zv!Si9*tWLCK(TAU!bQEG9X^tJk*T(sJ4J4JsV-_vuX^0Y)pADH^2QCYd(=WYK#j9l ztVY7kg&+=xHSg*vcCp|;uA#2CH(qAXxjufx`)OF2la^ZJq-~bX=;n7Z#C>4F#z#Lu z3EOBPx1rEE_e#X~g|8E&6_2mhu+fT6=;#fdoDjA zq>Hk#FlR;et>i;Ts-SMUl4+2FiD;iC(JhE7u!k1jiEjUjk}ctx3s1Ua-fr7)cPfQ}o#vTSfY_ea*Z4Rzub#g3(nR(Yg%>pk<4*JhIds|#MY(_7}s z^Xu@@w_r@*?E6>j(34vWxeR#;#pDPTU7C^`)U!KoaB;MRcifLwv9LWhHhWtvIE9NO zV0ZryR`p|(`V#Hz#j(Bhkc>oluH3_Zt^2(|D1<&&O2}?|?GW!x&)E+pi<^Iq5^Ei- zl1w1{9i+AQg2&LHQMTUpg09U~37`<{k7UO>gZ;dPc<;9TC^4w78UIG~P$P_fG*YJc z=CrKPx)zMxM#-ae@AGfXC2;*UrJ(`*|G{79xvW!f1h?DC?U-iMy!V9iXa+6LbaX## zkaJ)=3J#A9zi}*i$~J4Ggln-c$0}}PT%spIx>@?xW7;0~pI)7D^7_yFdp}H`)u7%r zWHMaAgx<0Aw1K@FeNXApQN1Ys@?3c~vKL?vKcBOgs>(EOqQ%C+3FMz?aLxF;2W^+W z#q^gMv_Gj9E}FlV2NhnBJj56GWWtwCF*>WZIk>)@$6`SrC)g%P<-5u2<3yhpN6IX}9xA3}E6Uodg0=C`{k?`vE6PDxi&Gv`xw>MnOqd3Fg0}lTQ zWmq+5xbkFN*Q$3=5k9o+fA0<6hO+44Ms7C2rW(S_eFuJd!O>9yPpJ8d4-wZrkzyAJX+IwMhChZPy zV7EL@>Y4eu-GuER-;_U=bUy5!N-5S}4TB98QVHd;TT3>v3XQ)S*z7garCM3su_2*K z18Q$TW&kWpITsIet{7zWEx1aPVBXaxs6h_0QkalR!^fSvQ)o;FU<&_xy0bD0#e1$72;br&-+tZpEn-kn#R=*qQ0%&lKL#P|6>RI|~ zmiI-L3$fK)jEWWtZFbHUjEsXEIe#$hJ^pYz`=F1Cw=7q5?^t(B_z-e;^}94$n?G-m zJ~SRnzcW%-Fzqku;JZB?Tc#>{7!v}SgNn}2e7=#9;;mM$1A*%;+30}%^m-DfV}tB; zY2f$)Mlf12y5&9!#X{#?Bc=X8scuba7lmVWk=Q$EeG|XyolD%=UDiSfU;J1BSs z*s`d<{)?9Pn%IEY{l3A00rt7)G}xUDHO4`5-)T$OQDOb^jP}SAVT;{45tu_2g?isS zm$+&f-t~mVbrk1rX>J}Ui|x~bk$Ry0Tb)bt2Mv4*Z`$<9;+_8PCcf4dABmc6Hn!h+ z9(5XD-Iw6FCP)n?@O;=~iz4S4cUXf^2deWYf<8|VMFXVV9&p^c+@g_>_JkYzAMhCzSgl4I_- zb_?skvCL|bTgjcv%Xamm^z|R5@mr4SgIgyTnoFxFY$0G4wDzS}EQkDdPYLt!nXOa} z7g=@{LcVLMM0sNFz6yDLI`YKO)=})!n1|rkl$>zNR>sbpQMI!qNplV@w-E`07%-PL zlhzOsvNNvIAFlr^5SE)-Q@ZHbbqE8~PQyd6_M(Ns{8QSSs1zBe-+?Pl{F+Ik7>@iubT+En-s``h6+za)LH&nnNBfUaD|reABzf_BEy5zYUmRLxwI>JK z5gQiv+0?i(Y-tlx-)a_r`m*eL@3XYOjzY;N+z?}F&bZQ-6CJmDLjzuJ$tN3gMcE<> z>tfs0L;K&(ZFnn24Bd6r6RgK-U7i61J}{{7aW-^QV(Xhe@8QH_)+PM0?J`*?RH6L{ zA#y~$d~5{^`4*v2EA1Rh_WL&=XO2Hu;zhBU1WqUaA7zV&NE0kjiC7_{aSUb=edpIr zKZi1(;X*7HTe-K@8=iY%p>@0Dk&=VO%-r1e!Yu_*=#zGxk0d=-i{Jm}t_7Q<_VGM7fP>}mNc_U*zZKwJtDUAF&s#1EKPmB)A zX}guINzpGy>0~v${c)Gsh||hJ#O47j_P;71a7k(82UAgypT?US!{LSnR|`waF0}Vb z!`st9btsyklaaFGDovbsR%p#Noh#+qf1tGelG9I|k#gzt+wF}{yzgb%PPU|cG2NzL z7Ek}RpEK71(DwiE2Ne5?P4QAeXyoG4(gfuqmom2ev;0@&Lc zze8fVtR*ib%COgwBDeHQM@w}FOF#G`_jJv;_gekD*58n2TQgg|viGFoOa6PoA0Ez~ z$&xao-~wYOZ(oTKv;1Y}F=nY}`+UptF!6%YDr2+7W3ipW6&C~i1k=GCF|P~*L%QVd z7N2x7j#$MYq-*<3I^cs$*1Yr`mieG_)@1J!C(=T}l|({_T2rMDeEhs(qeG zoQzFr)b%R|l@uBB$%>hasNxjIkG%~Q&LhA7Z=asJ^{Gg1sFyHOq`DM+kQP; zuf^ZX_D$i*)W^=zbKdGMyoT(W!+Vzj>#9S*bMx}TiY!4oKN?ju!id`D9vdKP{^q2V zA*eVlt5nMN44LLat9mm@nR&BcJiiNyKofXyfp&F)>!~-HD-+&8y7~WT_?Yxr zm?c$TKa6$?>*C@o27)nH5$$Esd@}uCPAbr1+goH7MikgJd}13R zB_Rw{n}Ft9(kEcN9rMbjHZMl}Fc6jZnfH<}DzRQw%fY|UrX#M1KM#0dE0kVLzTeME zMdkN{%pni;Q~yJC-ZXcBIt*SldyN$-zHA%+s>?3Ra5@Ab9(RQ;UJ*d~Gs+fiKbSxY zOBec5frnq6{E`NPF!_({XI#20UUQ$^+ko7ufn_&m&w@W(uG zu=HPaTCcL00uNA;IB8SZu5<;Go|-D0HvkPa;+ojl*Z}`Hi<^atitchcfpa&5IG+)( zsJ7WOW>w04g9E*GbGcL&PqzRHvBta8oL**}28ts9dI&=gZL}uFbmI$evwCJ^lAT}` ze#L*zEEVAKZgy@?^5)Gn@4Hk~TXb1+D~b>zXMD0NXYAbE+{_H9 zxF4RIH%rb!v10gvgY`nQ0HqwEMHqD zt@@p^3(Y$DvRJ5HKb#XeY$xI0V~kH3HqJ^rr*M(~e9Qay@6(JkLr(H3&&W$Cg^lFXa5Bw$@7CW3-tx-d0 z7_#%?C?39c%|q>2V!|Opx>s=q@h2&wx_9|q?Kh)TpKmkEp?oXxh_VIf{uD!w% zyTvUEv;xn2^I78ul2O$tm6�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 delta 97356 zcmaI7bx<5pyY1Zs8xkCX2M+{y5AGg3I0SchXtKR7#qQYS)xzb>pzgl)qu5{*-uI;^fh^695m0xuJ zc{Yv4?=jl%wUWOvSu}drhK2-ZA%ztOheU}KWI<38(d?t;yua}XFQ?!7L8$JrwL>)9Mn%nYc35)_(nc_ zCw6hSjwgWIlgqh*llIGe*N?LE3j?j?OE%_!(6>uC5eQjO&o_*|5hd8btgNgx5`aMA zW$>r`P-cmgb_OXU8j;BtB4x#63VIQBH?uTmx@33dZkN^Juq@1C(2tJcv9nHs97qAo zLBX_%rFnUx1SfbEjGgU?wjc)xE)?j$bt6~`Oybbn+c2PC z&F&hxnVn!)4e!e$1O?fGddle(W#Ve0(^qbWs3tgE zW0Z=$2UoZxJPdkG$k;Ex920;dag->%As_4$f>82|@r{UAuPKh4`rE=CPeG2359Zr)oWn%$*&+Z=g6QCY8Y()@iYL{QPr(!}Ip&>E{! z2*Fy6Z@$fp1mzA%zjL_O;6{6F|9y9>6!LsFQ`86m96UVA4!^Yq!U78H5+30(f2-Z% zxA29Dm4%k4(9z}T_6P`p@E9Ut{8BczK-l17lG}`YAOW^y;P|e~s#-#S-GYE%cyy+~ zOJG&sE$@H^C(_q^zJk2b`XF`{foCMK?C`zArrQ;GsG6`k&bycVw2V&NO2s%Hxx65p zS}OJ8SGPO=H(PJz7Pn|QuiXUmt3%7Ncp#`F;$&))hNb#`1ofhlsr1yTTa=F$H=_iT z%e73x6Z?3jQVg}h?NHP!;&xt=kuWMz`6e+Uafi-qbDw9sXAuK#1XuiD?ezeDNl8gL zVB0YB5zZvV!Q*M3O=0MuU2{WI?%YLDGadU|$P35zWU3W*Hr2%B;u7ROGBw^zV1$qgM#*(I~>S7-QftArDUJMXIx(Nqoua zSclHSC8^mtXrhTRFobM<$xHHdZ&nryz|_=7(2M+}I`l066GH*oWUQLJ$Rwti*()Sz zAb=7@e70nkC)!Iv)m6I<{ce=`dy`p>rQNk$%vAZZ7t?G4&iS12X;@s>&7i)H+sSNg zDKYi*hhn=|Z`r9CP$4pEo)LAVFmM(;1kVMRqqM)fsxZ08)xjj>{x{i9VtpILsm9_W z=e_;Tr!|^oE0`>AIprhZ;VX5`Fn;1s#2ByeWU&1LxX#~HHq<}_$|DrhFt9Nx(CcW_ zBnd3rX_;XBX#6`Fc2pEOrbEx*MHubO`U^IOQGgEM(^(My7S9dK#;@f&gf5i{9Q{)3`JNsFHb;tyy5D z7A*pxPqo)Qgx@dVJFQ&(u_CT`dW5ac-+Dv^i(2s*fNS0LT=i@cFW6fSV-b>ti@jHj@?mH^@6aK$qKFOzxEvB(zuz()@?ee6k z(LIm+CzohtYLz|YOnUhfMVwQSmQ=yb`mBmrJOT?iYkhv(MewIqtQZQQNRK>Pl}t=` zgy1&>8Er&bSrecKt}DK6RMprP895V%7t5}^jg*S6;8tT#@hvZ%Al&$=bfQ7{ud00U z3;o8v<@`Nf8XUMj->FwKAsFr(HCCywcTP@({L#g&x77Vp@ao{th;uSF_s#3mk17w< zg|~=tRFFn+DcOnP1tv~pTkSP;u*Q1!*G3!Ei7sy2b)O-C9Zs`4tw#~FotEEmHvXhy z1OW%7hug&UNB>!@`Ce(#>{RY)=iWb5@)sr!dhbE4QuQaB&iqhiDqE%jt_+!z6R&rB zVIp}xW<4!xEJ)1*vKh$R-Aimbyc@r3v`Zqb5k$dKrS^<;2KBO|FvSI4kL}Yy!G0I5 zNqF@gVYGl00=)aBn{wA+Z)x`_GZUQlDkhX@&(opsxJp!*cp3wDpyQ20_#nB_cihd_ zZf^Ov*C+3X^!tC38M@S~sRzcIPci9oLytY%O>L9;{!C)Spyv+W`n|(-&5ynDsdGt{ zNfJ=di3nIp5ok~+UrBP~RR4YPY5U7$E){jQI%?+QT6r+;g4QALr57Z+{jHB>v$8{Z z$x6S9ju9hU&P+_9vDybxL?Ac!hPFVVWQ_mh>X#^Dy0#W}Z0r)uDh;Dw@+|4RPfjWj zcD@Dx(b84c@kdP7TdX?`g-Bd-NDo)~^&s%g!S#no!QG$7(gcIYCYsJyF3O^4?YIq3 zdP^rmaZ(z#e}pLxQwYuNiQ))|58-15H_ zJ5DGtWWwkm=alr6CGc)%H*E72n1R-Ft;HZvQX$iwoa{v%+om7mB`YTqRP?pHdD6Lh zdeRI&6ay}HabbcsSull_C1}tpZcxrlk)0#K*#+hk0>+fFG!Js!*BQUxO2TiWGRt&>fuGhB&w+upDKh>^#e%pZ|+ zCFRw>^Q5*S)qNz}>*gyb;Aqz$^Yxk-S3$iWbKMCDQlPMHRJr~oTg~*|wNbK^O;97p z)G>t-Z3fdt1%HCsqsc8I(~q5A zx6RZ+<>mir@B@=@QLmazz@v$oQvLVvCuV@OeVAE0?(euI@?EjHR2(S;wF?$#(X_61 z2q{&~V>!p|+rWT3*=cz@WqX4hOctV17jrH@k@3F6@uJ*mZ1Ki~TnE%?r8Fdi9te!TA) z%^fFULk+Rz!3(d(dLzw>L;zen{Q$-alv5d*TOy;bYq?)g?M)4De=Sg6+WNbml~%fs zSl&h0D+RdQ+}$9~L_T?3VHSwE-5WbeGzkJUd*d~Y=OZBMMM%9Fgj6~E^f1-}QRhpW zY)-W$62>=M0usEn!IKR(7@@pLSUfd2rH_M~#JP z`R|^SN16J==B1f?&(uIGVg0wt*6zLcbHP8(svh2i+#R{sUQVN7nK2&U80k0f&<74D zgz?@Tb|Zls1R|4R%pA`haZa_>N7&A_Z0@uS&I?C}L;IESmmDh;Fy6`&_eCS;_<~9+ z_61v0v6p9NIis1(HkbCP1bE)sa-FYmYX-YBSt~9BQ(qx_NR{c!$@gL=(x&us5g~r# z3At2H{Q~?rX&`y4wP(xZ`A?Uk4`*2Mbr0uszdgen+8o^#Lnc-AYGnUFmi??1q7oPST8F&EF zxYR^U1Hd`DD-Q%HR_ICAdcRsw`>YjyJ(7ob=dE}fPsT2(VWOrBu6m{^u>Pfd_~{kD z2ND_sV^fr7EIU8Rh?L^v;2?h*rDy!xls%;^aZk=N`iYmp+u zUPD?2Wluv7qGssz%gvmvms-&pvISMHtCABGk_(jT2TfF71j!M|+aSN$0hBAK+FRiv zl*00g_tayuy_{mn4Y8`by4dJqd|UX^i@f%I12q($cRlGdc1xJ}g(7?}6ihuw3{#E4wS5 z3&%mt4N_Y>b{+gFehJxqi)VPP9wfIyG9LSv&0pmkM|?89R(QaJxb6dqx_DWxc232? z2P*ipjB{a5m(tby{`(jJ7;E5N3Zh~U*xDF1x0t94SCzFxIzGSb6Es`-Dn)v}hUm_L zjcPdnzz7k%nz&Lx2B}MsM3+8cKMO*m{ysVUdhME}gE(rrk_twZg&|HN^@L;^JIkSm zUMl4cdJ40>=$@w6;|`J<h^Zz^wAvCzyt4$Qp=P2~hVCeyUS-Mgw+ z|Ab0lJJ+Qa`fb;-yObqFbdtAMIHvT^>uMHG?5t!rl4cyy%v$P=jpr5vh~W4DGEFv?G`tN|JgEua9V%9$ilyVd5`38_V1xm&j9s?ev}ZQgVJe594uY zdl^|NZH+qk6hG~LRTqPsBw=-7>>_!zAjrh|@R*tdpm$t-jN9a5>uD~Pf0PyG1NQqZ z+KfKiE9aZ(HrJFaE{&d^_>RNqKqrejuMs}&0%_W*rcSN1jW%EFZ$Ii>(1LDn*%Dvs z`b2&L|18!Iqin<3o#skk+^Er}b_ued_wU-hE#wH|w);<6U{{-sW^t{2Q_w`NH_P%c zJ=-3p_;FF}L`*y~^QBRN8?3&%4mVkRI!IbsS}!b~BP9RCnRV|pcgRid#njVHyaSkA13+0yL)-rm$d-Q<$CHpCW1Uiqa z4AaOj03df_J(>Tz=T$8qWrglkh2NLi6k;usIn^mxnF9XZ?y0>45~cq07ys^MMfk249M!T^2pV`oFPte`A^^%gEOAV1*G4fPT^o=hmn~a2lNe zrFh!2UaLrbkDa$wy=Znv`r+?=KWBzi9J}`s_1m|JNl8)X_Rqe=W=w6PQ&-?O_KB{> zmp9C*(kpF1N8zO1m#}`W5vDifd23i&no7JW=FC3_CHvN3gz%yTIheWa!d6)%k;frW z8&2qjG^Vi~ysHeJXt?3fiQ+HtdTt%dV}0hQO{U|tlFaK>n-z=C2+O^AXd8-5&*~;p zIL|hDd>kFC$qJdj9y(CZU-}r?{R=E+v51+rbJ5Nk9w%XF76}n2=bi#iO>6Fo;?fFx zLND9UQq(RWGWDLK-sZgG3lYLn!20H)sO{qKe0})0J!vqBp`?D4NZ`ar(@xbm;`XBF z6J+O%Z1Ov{BrmIon?|+ANG9ay^V~jq^39iINg}c==AZho*BLDO3qAis?(5FO1SyTq z`ZC@uLX6p4)ep~u)wQ|BK;Pcln&&)RY_Qv#sjz*6Dbklg!>)i2U&E!uoe~zrF30oM z8WoW0#B)oliRc1f%P%YyWxEyRD=+gg6Xs_cMKG8^%4MRVN6TR;1o1ni{OsWpF>d3m!Gz@XBV^jp&=n{ z_osul1ZX0CjC&}|2U!L0$r(mtUAqQ+S69g8TGi)0Kqh9Ye`erEjyb;%MU(uOb4HJk zk9b(*?AUTD5+y8af06qo{uCp0D5#oIw-xHh{-(-%mK6kL2!!aS#>PutN3Gr6-Lgsa z9*;MFmf1_og6tpHfAwY&A5Ts`yr@;L9M)=doxLw`WxD>f5=YpXhse^QcZS2*dR7^V zunM9jkMwCZs`ss-w$Vk{dfdASKHe@zx4RCKBJPx!HMHKH%rdn;`pe&yRiA|0w&4q3 zRvxi!U(p-Iww(rDQm|{}a(c;b-8#r=3E1OwG|~KcV^5;4hE-w2yNDOq;=`{4n4iv#i(mKI!g>By6x*1h)(QQIbFdsqJ%k|4!z5Ej1OTjQEQ`DY6Ee zZgnHKTOe1EWL0=AiN(FThAzzx@uu#a^@z)CmHX51cpKXo-KgNo{QTj4TEfS6v!iqj z+(WuUrR}6Jfk(!wHgR4*FATVw^}t%QqEMRYrtGK$@Uga$_CdRfKbuwH;XB_USnW9w zD|or;y_jj&y8XR9JZ8#AX6TInz!xQcGp4Y}J|{;v!6hh&Owimr8A7^$h!pX!P+y|Z zk`4_&|8Vdx{cyQhFXw%=v!~8~a|YZt9&OiML$bZ}-v2%7TE6Vd z_}ml~?}0Ls9hdFpdc$B9r$U{CtxNRx_`se>EhU$I(SBF~Fk>oox)$3-lI-PdMP{|E z^S(7l6=o3O&%F|KGBCdnJ0bm7n-I4dvIH5#xJZ0*oh-AH0+1+Cxl(yRTO39B=Nbh+ z`ET(au`0b)&u!Jkd3xnMVmS@BXxU86cVAw+w`#<=eQWC(<7RkweIq@oz&1cJg)GY}Iudj4Zq&C)b(X%wD(OB;&1LdFNB~v@D1JvLJ({t-;)mX$ z^CgR&`lU^oq#wH>9iSEX<2kQ=}#Y^O+N^I$_>6*K}u%IH8*-z5K5Q@ z`Pkowz8eB-CRz3?z*ziJz!vIa7?j5ZNoIwd^MLN zM$+!zM(Q?jv;8#U>oXhJP(adO@BSo4;o%WaC2whK>ndw!JMLcKspELtGt2}lqcj*BHU!2a4nTK=BVdI@!@WPS_4f@taW4 zuEi#!;mE`R7Z}@d4j|ohY}+^+lgr zJIPFz#Cwj%e{B4H7ajgjy1!fEF>yX8l|H>qpQ&%)d?RqoklvNaauuTaDk)pQ)gZrj zT9)B(X29g@B!+X7SC?vuLsHu@Rp?c`_mjoYa)U>rpUk9M4S6J`2M zo#cuF+}{J&-j5g05+1El9Tw2-X)N>vs3H*n0eV-T=wD;z>D6@;Dk_N&9d8ajtJws0 zP$-y=yxS?bLOn}QWo9KWGJ6HI-R@RFi-QEdza0Y7(F6dT_jcy!A)?swAIPIEB&@4XE&)PzR!$VnJh;k7-$e_AUlEm$)eVqDt~Zq zPmKD}QV>Kq_xv+DvFlRz6FxGNc6t%MQIeo)j(>4!iWC_{WnkKS_*LI$4A^)1w_;X= zc&6qxcI(o<9qsC}-yi6)cGd1Z)#atT<3?KuO=NJ z7UIrPe}VCr01h#fgX8>2?^3fUrEf(!2ri~@E6CtY{X8S7^Q0?NABNGVv2&Q`0yjq{ zm?99#`2hYf>W!K%(}3-0a@lh|T-w>&+iR;v$q-w5i{U2TO-bMy5*?-xBi&8G|L*up zRAloJMum?0_3f)}yVi*;r>0SJbb$8lI>0H}ag2BD1D4aQ#>CKX9s_=){qvn4cFkJL z^9^(++$TlD)t$=M1~x2GL*Pi0M^cFK_VdpuB0(3n;2aoeLsA}fkcXa~+gP&sz*YW; zoB5vgce3f$W%mY-Vss&f5c($89yMJ;S}v_q!AnE?xteraGzj+P{Ae_&tH(=+6b3&ZoLQu-yB$APGm`ajnz8TE>HCwfdLk8CEk|MG}=3(Rus50m(EZvx<=tMxs(d z6ciNYNjFR@`jR$_`JX$E|1kL6LZwEj(N2GUO?TM%C(CWc0}(jE>jXiV zw}TTVy1ywasl|C(?J=7pvehtK9ACYPI{zxPGL>?7PLVIM(OGXgt$b2>x^9Qdgv+eS zlrhM=pnBB%$u6Ds70~H^f3cyQ1WI<}IM*G#bHMw2ucJ~jy|RT z6f9pomNHhaAL#yx$~@vb;$ktPMHgEuSQ4n(#~pk(ux2eK_X3qpCT&J1H0G41gE#13 z6DAtQ?{(R7(nA=y(>XY}m*sVMvtK)^!^C$o#5QWZ(lY;z?Jn%-;?rQ4(eE8@+O_-c zl@017o2LeCPeNYVq~(2ZYwPSGi%G(h^wPoOUSo9$259_K(|&Ul1#?xqo>UK2idC)G zQw9iUQ?-jCUF6;ChsodH%h){KIaNJ;Kk{mr&LH&%0!Wbp^2enJBJ;|e+INc|*I_HwZbIjlqM=!_yt-UZx{UHCPf4zKv%#DZHYJ~o@lDE#Z zXTQvs|FLgOljGu;SSMx5JCcS8umc3Z8$Xy1(hKCwq{2x*30TW|y@Ht%4$nySqUpU0 zPh~JNIg|OpT2V%ZmVx2T&e}6`?<3=~rlr7%SoOKmbwfso{37T}D0OjZNRfQ;{_*(s z=T&@6ilhB1con$6SuvZ{u=u!LHi}wfb_bat=d2c!Mqb#2+}YYEYEMLKn4!i~`ms-w z>@S;On?*jCskwC{uN(fGxA`1uyor|ilK!4NpSL6!;?f)_hT)NDWKT1azBV}Z_=?{N z9NF=<@owT8Leme;U&w<(AQp32Nef~r4J;0;yX?tcHI2s$ zdSsG5Ld*YILCwGX^h3`X@6UY^RE=$DC*RqY<;Xyu;cZW0iQgv>67a8!L@)q_!p6)c z7VfR)f)ccHR@ShjcQ4Z)n)Bk<16@b(Lf4J$6g5gQlt1bIVX}qHBREBM@nQN=mY)UU zq5QiJa{s<16jODMLHzGjaUWLHXW<{odFb;mLIVF)s1Y-%n7JIOye9XcbOfV>UcO1l z_>RlAQSzs+Rwx!{pe<&8=E9ffw~83OKnN0*;szbojTEEL--W>bUukgZv4zNnYh0m| zUhjAi5ObVEs3>KAU8}vCJHB+Ym3fG3j(1aeBfC6T@v69hY6y$ThRdUxuena&%^`w8 zmb^&POXNyZB^Q4X>h)^{6_#X>)t(1Xp?SPQm=JJ!F zRFHB>F+Cl3_5-f)mwx?mVi^T2M-L{wKH?pJzxbc#=S{jM;`{{i+5GQ4Z{Gpl;Bw^m zqL1viIVKICH*4x8eF-0G*+QcAu#*4w*k)3IKR+B~ z)S-x&jzDx=WL3@aplITHG2QClu9#cn=IPArN`l21v9mC=JM z)jnpWzap0zaW;ucWkSbKG8n3QQ;D(u!YLj68g*I3bYADtD zPHUXwJ<9E${3@9b8v`E;hd43b$B{Yn3vX+zgk1s#{pS0}hAB3)MPl#cp|!5aXu(t> zygtqh&;9VADA%p+P$#r~E9f6^iZDjMioCLl_bZPaSxAXQc;DP~fTf*?>aUmDOFOVp z2(U>;BC|6GHfy2I_@TBm;IBRK{3x4SH}SFsdAB7;+jWrKxel5rH_B;wG&0*R1r5{$ z#J+jW#7gCPaXZ6Sv@l{COW=|{%Y+>H@pU}L+oA6?Z+%>)@FFAxS5%*Df5Jn1tBw(#2m%vjkdr#Bt0FE;f0&PM(lQfy zd%B{cqax#T^EMzs;r zA<$GSZ9SQOGuWLC?6cz6reI;GLUfu{d~JJEuyB0b#eq~sQp%Q(o*aFZjyHmKZakpc z^pu66YpeESD|0{o!@#6U5be^G~-m?RwV)%vwdG7i!orq4}2K4y0~-N_l0*ir0yJQMEShxGC| zk&g~azKN#fD`Ue}TbvC&4UT0~*%Uaq%%x7-Hj%1dRP`#5 zyp=v}l%AA(mS4-!!ybpAPLgVYCpm+Yisfx{ut$grjeze}_Pt8ZxNUa*@9%RCPpvxp z#>}Icg2M%Ds7&pV3w@@{lmr*DxC#-|yDlfv+SH>hC%+XPGiSylE=a>l{C|#Sj#_H; zB?n3RsGFX6-Ao)8Q;%jqO@DOe)E6O$z!FCC4|-NpFJV0gH_1{knq;)=K9PtBQ(Z%Q zYyE!$^8b~OlUoXzM2Z%H+*WJB-;j0rwoIfSBeHiThg#DW zWOL~A*@{EWiA-qRXs(xo?$gc`pXlTvA{KAv^`AwDHecd`VE$F_3CegaZw?u)riV^g zT2QC$Z9Qr0Nsb!qKbr{8-UT6uHC1(KnT5<~dp(rzclN^zL!j{pAf|Xa#DAIS&67ocK?WxVkYV#$sreJDCT-$G_fKrs zI{X#?vx?zYpa=!fk=?CudE&LEqn@rjUZ|Q;yT3GpZ1^s_-}`KxCyrF?<;`PLX#vJ~ z)C&<`=lvjts*fC;!~!20+@f0tQBLISZc!m;>a58x`M6fn-`k`;HP&Y0r?wdyw#?wX z1>8M6id8*PLz6iBn~#+nWJ+E^jFmhoq<~Iu124V+@b;@{A&>gFFd+P5%7wo<9_iO&n8^Fb3YtjLSsqp+(AnXQ|Ll35xwiHRo3Ej#@*Ij_DUry6fS+^%8+YNqL|be$VCasR(GoVC@67PYIZzwbel2qxZTcbiX+ zA#t5i68CCK)kM%fG_N*_^3f-Plm!D=h|V&<0gtYLG5R>Wr*GyLHsc`Z=&frr+L+;* zDhCVH5HqC99_^1U)pH^OoPt{n@jFCr`|nuyrwhL6VW;8j@-U51Pb7C4u>fD?reJ{= zsClxL9Ob!_uwk!J&pJk4b6ni(t+O!wygS7INgjSXsUly&kE&6y>&sVlebBOH^Qv*`J7NQ^3u69E=$c=bh)V66#h^>=8ZXToI;1qB1Ns&S}5|oVCrO?If>?7GE z{xvbXx|uL!fb;i;`^PiJu9G^RSvQyOk>_E4aL3ZpXW5*CW+F{3Z3@ooRZw33wF=71 z!Ga7ZFZYt`Jo}@V9KmOzbs$*_;_w~`mn*}cU59J{u19d4IH|~hE%!H#iR?@Rou`M( z!(UU}OxYS|j+T_m1aa@%K5<->kFdsz#B6@~icTD#TJKnqWAdFjfdGABr9pEB>nE-b zvqYz=eB?!E4D&3aQGsX)06y% zzf;e|u1x|enc@_vcbvb*!^Kc$aKGhsDUAdI5b7FM2Dp9YkbzHsmc>_liz2wAZ`m9){5u+8E1nDWQlw&B??^AUOaar8yIK zD1Gd zfvVrs5MSvomO1 zaDAH&a#qkV4rOy1W$gu4`$o!$OKbF2j3XUkZ$szP4WEY^?IAna0x_bFZ3rH5p%Ab3 zl)L`=^`a4GTNNWBKo*MIVT$YOGIyZ!f8n^RpwISw+}1X0E0$z`g7MJ=rnC@Xc5@2h zOn>~dW{UZ>w6y3)vDf&;Pkm4+J^>_$K#U(8#@@THj`;=cY%rPW?z*zPHVv0RcMf=m za}k!P#hEFEa*V6^m| z)^p;Q-*?Wfc{UqG!OWuZ^Pb2j&x*|vl<{m|j)EGU+fKG%-Asbqh6J+fV0csd^l|UT z5h_yWlG|*Zyt|W6gGu5nZ&)M6ax8GlTIP^}ze;-oydEYlA@;8^rpPAiWWBITUvO?b zrjh|-z^ajS-0BeCQ7PvQ69|9ssle9Gb}+D3R4adXkYT&{i#YXRCI-PfgBLNcjCoA^Pwf*#2_-Y!5q)EVt_UiZIh4xXM-fP;$aJ_-g4q2eRY1T4Om z!-;f5x!%)}%_wSH87^C41MMcC3}d5_&V$$s7&u`}IO)7t_9nxDchW`i$X(}31Y_nx zY(oTZJ)cb}5caIS$F4fH3|Cx{py3Y*2_Z3N5BLr-Xqv{7;$xEfH?Qi}(3#cWLDQ0a zkZ%XYqg;bO5u5$->q+4j<7-b7pB5V~tUNT(E)ou4(4Va;bY}n|23c8g*2+SQAx9}t zt3sp9#WGT%Vj8-wA~S1Bd$_T+Fva)#e}Q%IzsUNB_E(eoKkWSpP+kbx+8(B|nLS=M zv@bgjGT6Q$bVMVeV(VYT1?HS@BQaQR4rZ_pDg_c>7X*eQV6}J$5fKAHC)dz8(3wOp zpDC?~)TOPdh*su-io2ug$V%R<*kP%l$vQNO|HOI3EEYJ@47Kt;KJnc?{t5=4pYP3& z?Ocid!^8D2A+Zz_X|$OG)6(Xmp?`kfyI;BxJM#jY4fWnG^AT_;(e z<1*SzCs27hv5~d5I?6ThdB?mSn{frZSUm#G^xjGl5Dw8Hu@L=dr^)2eznjj+Hd#8( zX%hwrscXNjEsqf(2ci7x>{COY@@ake;h7pvhwp#znSz| zT$EjJEP|$CmrVbY8WC$}3vvw(4nA0@m*sdlGf3v_Qr(A0z?H~yNN2>PD8+j{Yw_d? zqE(V5nNZ&1S6=#JLUOqT-7mzOpWU#gv_@)DYjg9tTC-8UqZUyoty4m>DYS&XPCPg* z##D-q0wAjHmiwJ6h1A3fe5Et%Il}9#ixcCCV5{d_8YI!+FNa?+FgTbe(6UpQ?hA$U z!j~S?c*bu!o!dLmOqt;PEFG>wK%@3Wz2okdw_arfXfw0Oju}uikMb(|cDtPqVIB(S zxm)hP|Hr%t+#kr*CVracasz}88~1;rO^7SGU5 zBX_|px|h1`;n#5ebWs}_ATrtCH!#u?3$qjW*GYVNgbyk_w%Y)EA`wxE+}DC}spQj) z%{7}{57xUQt_~Kt-~ydP2G25hKuw_!c&jSkoiv_unOXBrP6PFxe)=D3 z3GlAorGIrE>S&c%06vemkENu7SvzFXaSf|c09seJyhmv}Ia39>xej4C?EHWND zx(8x}(qu3QOe51SNnMBokiGoe<;C;2d9izXAF|y(|64jmpox&QPlDR9v9WuzRr(FK znR-=jlO4A?r7iEM_m07|W=<8t$)X_?$jh6X#Y`ebaBX6-nOAGiiY^4S7TxV7;A+X$ zJj3D8DY3D7-Do7%Wwuzz!|;ZG)W_cYGCxd%Yq<3$JiDpjL9erE-OfwCSJ5^FlX%l2 z3?VZnta(u8)gPuN!_{an1omTpa;aVD48EP3p6?JXi#sSx>ISli`N5&X38TD1I!)7w z35Sk3r`qJ3iUi8;?(R&5_U!cZR?^C?IAgqeGVVA&vHAg0|4yS>v`iBp)bMz1f{UfX zCi$Lp^S@#HNy*=9OUoO|MQ|^nRvT2crWSrtc=giPccKm&PsH#RW=_6xIO&Fl%0fVu zvfK^3sBpA(d#3t^)~xKwO69aB8QE;_M{AsVr~l1tn*bClb?!u`x8Ajp&J5l)H0@>< zz=!PFMSgB}(s>yuaaZe`VtEw|?_o-X$OP_(UfOPrN)9HEMz%XBEOE8JM*AVkivp!u zx3kGSm7tD}va>@!3KyE0kW^afvQor^c2)z*{TBwGB=S1_jBom)wLIU!;6UR2k!okX z&tqFcgVW0bZ*RH*Ai>{o0K-N;{*}U+w`;Li5o#g0%&h;KLY8(b zssevYp}kC~$UU4OU%MBNU!BKy8|_-5u>fHoT}}oE#nCcv%Y&Jwu2 zEO_;l!rdK63K*!#b>0RgpuIZNcsQ|&RK4FmZ=BLmG5=_6718ZIh|5~o>vi|ujnQf& zybGF#D4cShEFnd`I@vdJBjIyaQPnApCIRG7kbRBs^ACbOu88>({%&xM;Z6x6#e!`w z3nVJ1+8*bY&VO};;5c{(jT-Rk2yp3Dg&O_QeQ7Q}jPeNM@67AN>_!AkklT{$E{Y|1 z-W)d$SdlKwi}bR7;!sB-`$kXpZ_?qvGKNSJGLB*aQ?zR4V#uL`Rb_2MTb|Ect|*3U z|Eb#WDVqLC=&66QOMQu;c@2C_J92f|&UBh(sPlYK%@;<|;+_*(uHL z?ngX=SO&}YGpc9+$?NTdjD}zR$JgW4AlCPmPt$Ym*FwuHk0y)Wt#dNp$kqujtx~FAn4atu#6eg9zZO8WuP1t9L z%dkLdG=l6VY<568-a$Gxc+hTg=YU&fR?9;vE%SCAX0=+sxPIp@)v~#8g9Fy>E%orL z7Zp_f0VaU?=a&v`|IvYAWo)FXWeG2Xheq}1s4M}1q+KZdhf_WxJf)waOxjbOrU2H& z)`d$h7FeGx2d0=4wijos(S<6$~b5HDrw z2zE`PwsG7_65dCzz-O$`C!NLqpc8d3(Cjp2?F`PkAg2Mug56EFxX#NEOQDg1OeR~) z9s3JKgwB|6GfCTqOM?BZm3tM8YwOdn%_J5dAzTyblPNF0Jyu%RiJ_0IR>L3ceahe-d^sgR|h1OZmeo9@XdV!nmu|Z?@J}J4bZ16+3+l7Ht`QjanYrnW2EI6%DKyo%(1vz@WPa7{G^Wyhm59b+Si_cTu#L3R|*;gi2yu!?A2o>VroAi2Cf~h zqN2WU-#bxH(QYj?lW6pL)kF~&S22+6#0IpKuw3m(O36R1H(8drLqnGh5y`Jo%5g_b z-q@608C5sPr@{kz2aSPP0(?i>Kf%p)M|Yk-f`-@c|jnYVPzq}V9B1z z?{nJMQX$)@lLhK9veo@hZFfjXI%M(MM^o#E&x{CvN&D2w_I>@|gwKcT0lux?l3DI| zeR)=FXisMHN+ydwOmD1@IFHf^FbRB@)krh_i;i5HnRpFp$*k-i*GlBmC7Wmp4Umq&!ux{z7Y%#5&zu1%w*${ zu;4p*um=;C-L}e+GIHk+*L5!%KnaPHpni@ALoJ~=;pdlsP#yn~`U?kIG2+xtM9_}l zWLF#NyEPO;7Lqt+n^AXzSbV3)m{K6ZJa_Cx%<4C)yr{Lw+^ zvDtSGpDDcL3yZnDN!5^m{m2u!yMYgRVj6+`caw@XX%&Iem|fDZl7hK(s$!pS1Q|Q6 z0rVpu#|e*Od%A-tg;5qm?BMKef`eVR1L7{LNQb7WCGjwUuwL>G$ z4BFq_-Q58pIk}-(eURT~p)LnsZ*`N^!o?%DT+(uSWoBaTgGP>$k*>RQJqtW}Ph!yQ z4D!f$r!Dvn^3nap^P_Gg_rw~6jIi-=wJPX&{#Qfa$Hemd{M>sZk}F7LZLKRb)Bu{f z!HOt7ZzZ`)4kj=TI4tcyLPJ8Bmc6kNqd zp`xY+&xW}~*_eZ3;JbJ^79IUv^HBacr0L;-aiRDT~1;JdAPrK=GC>b+WQcNNH&EV09Dk(R**Maknyo^9#)Z{iny2H zB^A=}UDSW#S9%W+2tM-vVe2iUs%pQm-vv?i~ASFn5cXx*%CEdA@6p)gZRJvOl zBm`;c2I+3;*k`HFe~k0K=X~JH9)rDC+%e~GUh}$dIM7E;n$n0!_{a81q(3U@byls3fg^$&iELOSr*LhV_MOpU5#y!>N(!F~?D* zpRc|}q5BCsi} z!^LKgwVtREVc1=4RKc=L>qGpdQKel)MOo#1^iKlIK?TD42|*0EWZm~N5|u3*nQ!$O6y5I!s=-eSD>D|dEW(g}YH?xYm(SE^`@7(T1 z7p(uo2{3puK!yHU8kZd^28N=tGA1hO&2bmzNS5&O=;+H=UE(OZl?xgZ`7*5=iSAU` z(oa8GG`k^o#$m39wmdThwVv{oip!|D6aTqAETTs@Bv?eRxVS(rF0LjYHfS8B_ABZ1 zgblA^c}S{j-HscK%aD6tCQ_huNn@8N{*_@c?JN_CK}vcPUH_k0ICE3MgffN^57Aw9 z<;af4(&xC+c%~;EOV;oTi75ZCB~xFfB=t+u_s64bUs`q$HgXm%LQo!gHFW&b5`dx_ zf9DGhQZPysVeaQ1veD*G!?gp2RS#rt&($L7W|{p>nt{>Tj}m)I`$o1t9?h5smN29w z9O7XGO3qyl{CsXdGxQjg&Q-lX5B~Eg#-q-cJ5>cnIZu$cip+5h{#kGdgaM^N69Xa599lD8) z&tkMAwx;=wa*T>3{hJ%K20)MR1yV!N;C9D`*Km3}6FL2dBZe7R7yeLGUFgM!9kfnL zv-`V{)x+qqPBa?CEh+EZM^ACM?V&6)Ou9#gX3>Hs1iU{f(V!$10fk=?9UNe`dmrSr z*Vjdanxq`Qg!JvH;p$osRSvQD`{^~?Dt<#y7&Xyj@pQCaiZ1x%x=wJchFQ@#0T-k6 zEbQZWu)$I!el;>jC;wW!eU$94F~Vz-GFHPMTDz`(LNt8#>1@>d?J!9F0<52I7y78H zAKn}kswsXHSxUeH+XP6d06B zgWk&QzA%M0yB9r~7gW1deiAMcfIsm1{HpN4 zvVUD~F*^N}Va5OCArttP{nR5@`c7kFrtBvHU*lEpY%VX(tZ#G%hE=Q&)`TP0rP<$k z4sLTpA&qltZBxtp;p0jhVV6~pE>SO8e^*~Q868*2oxF|(dI3uBoe0f1)hYv)iet4y zeE#LMmp&^A)-_8$E-%ijr6vk9x@!8Rm~`3Xt&MZH%jG1M?|ZafSR}9!_+Y(NeMbAyn6&s_Ap;V7jy4)_u~k_ zdY;wbyYcDQ&*QIJqa(t;hMKBKz@_lrv*g}K0p}jVrIXh4`jS5GerBHD24Z87Bo`kk z%-y{RWES>ppQ2@1nYbuhKgQ$3phe z?3kgz-6cN%L{Ok5rSz|0iVDNc$CeQ=F}3RccwG2u8A#P~DQZ1mP9A>o;ks5hxol3? z*;-X67deWwd!<~+*~HLbOak^zrtQ~7ic@6Q7r^9f=QU$1%MkZ3gOcs(CPsk%@Q~^7 zu$E-fFT7|vL{iZAbVR8x0+h|MlatLN!S4Ao8pA!=uJ0%+{t-=_3hG`!aB5KCTV(t3 zPrGIBdGr6HeY*HF$ca$RTM{XtZEsFP9Llz-& z87u)^quZ_(TUjMZ7jJ?ZK?5T(vxuD+9c)o&QD=?(6=^Vi$@`3=#|0I&cy;dM0kpfS zB=mMy?Xs#PWGqb#G!jLlB#bzzA2kiXJkd>l^+wHXr|(YGAG>H0t%&9hB@L}yOsgWk z)}|Ka(PMIh6qkP?sacP&$P8Uz_Vo=S-h^h8V;Ki`nI4^u%@w#gK;o>cY<7wO6f&{4 z?o9C)PD3pd1f(D4KK1Lm;4>RIuX!x{`saP!ZQ9dbfE}wlv|bPcJT}OHspEDt%v<$y z>@xHzcUjZxBiMt!rfQFQ^DF(h;kqD*`S!u$i2Hj8{{7vfFJ`NX z1+)t3cL&^AHWRxTm-bKyyYqS3pJ=_=lD$vZ(Zcmk-7-4a-3=;qJrF+uUj6VU_;KD*JHur=bUbWYV)f1c6Ygu)eW*T@!?b<+^>)iJN|EnUAC%o87Fb9Q`6MO zp%xAPG0zQ|HQZ)(siXJu26%)ut>hIA%~X@UFvL_+c{z3bHda>GRjRZgnL>)>2*2{Adu3p?{EtP5q9S-V=+tEa)$;?%B^2?% zr&jxMu!`E%@3VxYP+L)uWmMgGA6X>P8!4oPbZqa}WiyCV=WbuB=%6p@@5(W7_Sq?q>Va2o>iK19s<9e5czk^Pkpk6uFNsdVJG@VPR@d9QgpKHDZQ3sgoZYn zAr14_^A9eH7FzP^F;em4v^QW*8<*5CMZsG`3*BTr3;=r9bT3Y#xh7$^W7qWWrVCu~ zVGW+&4cF8PEy?5+vzXESw!5=JtyI1pr{EKv7>U};YD>4aY>kfv?ses4V4gx=AQk-) z&T|riu#qLNUTw`~80?;RD|#?Z(VkWo<(-IFrxBb4!ZXw_lrrs;#o(l#fpA@!=H61X zP2KRAmMsYruH$?XYk92+xnIFIIeI>5aN3PRHyp}P4P*t=f zcQ_X3?G#EL!F`j)Kjk}b0+S7n6JC^erCy-b&DB?SUoTdoJr4$2^64mdXD zy;Q<8;eW;I&}t-I1d5v~e_EU&-Z|3$IakDanw6mjJdze3C|`)h^C`~1H)|g2(8$nx zaqh0G{pMK_-ssOh6eg2lq=sKIhmz@@qv^>FsXu z<)mihV_hP`v+lube7-rQdag$S^*ZT9#6;^GoJ+>;Z8ao7r=K6(uPpfrT%kic>=(?8 z!>K67?N3^Vz1n)Sw*Ww-Hx>9MPmKiRjsAL(lv1Av%3N98<#kqvhpRoVy04Vlq4Z0@ z4iFy7%+y`3Ws_^q7)26_HiVH)J0gihq{g#B-Z!<=^g@ig&Gy6}^Dg-tz;KaUa zCD@nIXAl$I6*^p z8?NQL{2nS*$2e@<6O-e250~9T*}gccqTS_WAfch4?ni=1jzIs-fmS(5mIf4ZwYkrI zj5(Zf^G$h*uW5oI`=j1(^v4Ov$r+55N_u8&;p0K>k5Ch4Fo}CE=+;@{eqN7-*jHz{ zwZ5q&2zFG`Kf)|Qrv|$BNxMB&A(;Y*ASxyBn#4 z;R}G=)xf;7yJ+$d`ZPCp$Xs{IyUxwwd+ym;jSbEfZ|PT8Qp=&Uo<|F^El@=slEP zLvAtmq57j(iJ(-FYK|&wYrLIRzlzq$j2-$mcXCcYEi*Otc5)U|Gb^12H$UZ=PNK|y zm(?E+MMXO&I3KSD5F?W?ex=I``8FRfYKIu(8sE=%-AL$~e1J+n2_7Dk#oh#>uMBJS zHdy0+wA!71q>zwE*-y%M2Q#M9EbxEiEbQAzr%7d4k?A&3^4S|2e5sIm#uT^2ZmRa7 z0`&KJ0Y74JT45(exuHBC}f!ot*>(9TdDggWcaII!5)G}d zPb8L1r7Gm-_uRY=yF?wo8&sauID9bOv-4Pl&7H+?PE5W9udg!PxbO8y37HeUIVYz5 zt2Q3(^&9&yoa`+xx$I?JPEBjJU!TSUDw4aX^J$orLaU_h(S{u+7?IQ!XtL$r!5>)1-wqL&$b>@B#f<;HDD1l8rM8T-z^L- zfTdkivQ;xx;onux3h0aky!L2B!D--l9Ve1C9#QTfBx<0WzfSCYHpoFwb0L7l)m{zRu7WfW1|~{5 zs*BsmQ`K^2R6c)A_V2+-z4~H0`X)FwF6Z%p3I=5k`tJJT7n8V<@@7=;^qm94WZsnD zr))ncqj>NLCI4OrA<2gg#+)1!p(0Gto5u%1u)bDmVnys2KH0LTo9;Ql1ktU?;7U`@ zmhaO)m)&SaSfeTR)Vvg=z{1x^IglD`r7FePTeM@-z>Y8?b>pgjmhESh!?~gMGZt%u z9NJI=$#dYI1*5P>tRzy@S+f^VGDJVZ=buTGuOe&kHDa?aYZME4-LdvnkZE4+*3Y1% zPjoV6n7?sxJ|lQ9rnY80?9Z+oNKQrk=S%cHv;0o9E#s(82W?+JiIk7UGUX)vZ^!_s zVhDs$Jf27Nh=7@$y~$Ll65r1ZSY<_p#M>E?_SfR*2|<6q>jRz&RG~P{dqFFFwe6_? zvQ*`!`*)+Tp~u>ZTiTnj5d8xDzMQt!P3_JQ=_z}GHv4htb8~Fj<$C;Z3FY?RN;5py z*&vZ1)|ln+{k(A774)Z5xxG7ZA_TAIaHK7K|2uC)sOcKB-9?7H<=`6m3tg|_6Ar9* za$l$7tI|ZQ|E+*O-b`o{o}Zi>H@Ld#c-CgMznz|9jyl)8y9+GQQvAdx-W|a=r;mD8 z6FHnkXfKbPI;1|fF4Q)X&g;dHHVC4{cry77HwiAI(Fq&4D%!{p0Q9a+XC!u6&o&b; zT`}LnQcX|4KOOZTeaI6n!yeYYq<7aydTg0=cO11aZ#mz;cUuRmPPB!B706fMruu5_ z`v6!}wxH`(Wn8h%Z&$|5DtIQnw^3Sj>ZYxzkVVY$w8k>>(=zNv!LY^|0OzsAvaY+n zNRH>!d5=fm=jpp|s*AnDF4H;F6iyRsyNopkRw$_X5ghPZf<*s;f54X;n=nmRYe zC?|@YWR0Qqf}eJ;{p>S%EVOhyqtxP_VLjW}YR~!N>R@D655D3 zMTxvTobB9q9yhCJ$Zrgnx-a2VZzn|Fq4)PMRhf64=VBCWH=Lpp3E-gK*9UgUI z7;xLWG$^-smBoK1;DqW6rKtIw7cR)Suq8?ztELH~!3La!nv{w;7UQmy2_zm*~m zycyJm2fSO$*ToJU(;m$w<(GefzaHCgdTxL4LvS(4?aP^1=GM^7GM^+OTAp?5b#Td}IFaWbYqg?%<9>Wx4ch!dZc)_Sbn>`|yF^>A1lTS*n==CH8^ zH6^Y@0=$F#*Xfpt-%t!8q_Puj9bS2hm0>9H{-G(BXk}~sZde7?jpL3|B@j%^k2N*-~TltRdiF()XlU(@Wmj zZAid_N0sMVaGy)BB=OtAgWkplXYo&F%3GEc=g2Alw9`q2OvxV_-0wGw`@$dmsw&|Rbr0cALUgaz@n-=wu zEgrF2$~4bkOA3yqR*=9EnG z?+Y9}jQP^s&VqAe@K`Ug!`qlyuM2<1)5fvy2NjL02ZG{jcaL;J;eaZWGp(}xBRqeX zs;eW&ORSjr;x^dR=W^R^YJjDcOJ{duxA7g;;T{?QGw?2R98;#&BEkT&)fnpcdyKo|#bk{>T&45W)M4zBdn91v1 zUs1Sj&`7OJ4daK(TH)z?!};(B*tz)M>DD;-!AbN76}Eg&Ury*eYBnIMJ}$OpfuNXH zUS4L;SKWT#O6!;&CS9Bm!F@X1;vsaI9~^#}uOO^qY&f-Ou{iXOpSFM+38B@Mt3++o zBK!C8TvTT>vD*pdmXuqoSv7ZqVUBG5MLd}OYH*-gyx`z69{{qq?qk!3^4}z)0$TSC zil(o4Dxm72k?$nx%7-nSZK|Mc3Ustn|E-Z}--p*7!$FzO*8Q zgxE!5L$-fL{N$npKF6);*`^`j*b~5srr)!5%+hgFR(d@h(lmeHsCbW3i~A=;1+lu{ zRWYFW`Q8`g4lxLUQnTYESkFEsq#J1oeDiD)n9Op{4 zoojv*Z*@hCiFLB;6J0l3(BMl@I=x*8{#5Mj-*fi3)_Nkm`kT>^m9U?jq5c6|QEBn^ zQE&K@OYm~k_N#9)Y`n^Ot65#WpqEDB&TE=$cug4rFu8sBxW`WWc2S%93`}H6B|N*> znjLd{VBi(Y7NJ*>dtY}#j%cPD6nrGG zLV5ldeqotQu^*g!z+)^NJ7)m-VxLp2Gwk>`*#0vE95qO`<8b1-00 zLgjn^3aRUBgjxytE21b%7k0}bT@&2kOyyq#)nB;r4cz?hBmkW%+mgD4=toT#T82Kh z;7CVm)Qk9>E(_)5_>=6x2o;t#xtGEQzirajzk zmu>`ZRotUMO-~+K^fQUEeGT&U)!8p_)Tm9RFT~$r7g+boO26Boh;y82H22%gJt?J; ze0TJ=lHKC8t=1;_Xa0HnGm4U|hd+Sv}t>rKf^v`dt+h~V9R4zMw z5eWcjmW+g0ThAzf^{nC9n^C-^Y9VaFP+Z`7UN zq-=Wyw%%>Yc4%=uHqUS+;NSn{{H~;VD)QmpMf3o4YFX36pOaKmZ%&-xG6}$fX9Cd3 zL3qYho+J)-q(?6a3XMi~&S_ga%-Ni!a4f$hjKOtV#=I$oeWjzL!^g#i_NKpg-e57| zgA(_Guukr}Qymkt9v1+%oU4a7%+H;wVk(R!%zr1vEECQ&dmbfdm0X_*dax&$@+Kip zd7}Z4w-P@>N{3ar(8pHaE(|vw6R>9HYXh?f1@Ec5Qb zKt~i+&BT&ogJ;h~W97wXFfi$>dU%>}n5M?qeKW~uHs7|tn@DsrascJ|b0HeWgJUCr z+zQ#4L_c-Aw(dAhy~T9WRGRkne)NO3)+cywj2=-_>K*KTA>!Zkjqv)n(R*wNJBLSR z;*=kHr|+IEzIYraqcU9`J%dp;ECL^xJM@|B+26}q9}^XQPo9Ho^TKPj`uK6cu@Ni( z*Hi?MJy;PVhm3io0goOo6OAzz6`7s zlz@@B6V0%^Piy}BF372{p5YnHr%d7M@aeS=~+athIr(@7bqU5 zW(0RnMRYBslXCv|GepmV#liQ!I}v@DLVOEaGYvMgZtabJXTJ`;wsMPlr|tNloQ))L_CtB6mVxo5%lKO*_rYocV57mbH^{=M1 zXBTPByX-K%eQxizaP8DX-dnKq> z!hOJ_ax;?Q74!f`2z{Jis`l*VE-_o8xz-5Jnm+&?KPK=GLQsOeVN za_&5j0RWG2pmRuwaY**c)QBR{68InHC&qHO9B33zS~tqyJ2^7|zGovnuaWt#t~YGO z%C9w3CL$U7wI9whh;XxM`Xj_$2=*v)w**m z+)r!$KBW&;6ukF~rlZN03RGM%iZK4IIqpylju3D<7FfFG^y>p-$kLT-k{Vl**&wnYdQ}G_QmLQb|3gn2_9yl>a`hf44H_BAIwFu-Pqi zm&U8tx^vrQamOs_q3tw!oj0KE*M1KMJsADv6g}8EMp(s~g1C8zr84`zFBC{g(%2Zd zZ;$V2Na^gI$~#6V)`TH@zqrlOonv#9y>T$n*6ENI%CdLU@TA^mM&zOUhm;9 zubvKmgY`$aPiuLz2?@>UnmEJy0<;YIYUW}+j;;+dm>*jclOuR?Rv zM-?2K*Wuscuy?{D%i#k4ga_7_yn?O^ zp2D-C!Ll#DtO371c{^hpi_ zjvU>QI9OWd{!Z5-#`^nQY)!#4WY8WtU=@wABn~YZam(Tb>M$eRuL8Rv4*{&(gZAh2 zB=3X$Zu7&1*XxIgj#%HMkduvaG`}DS&}8@=-{~jrE2+46lZ6J(pY0|B{|!O=Nz|Btt=;yAS4#npp56rX7umCH5lFP5@2i z_mkx{=pNRuE+;X$@o@RDG8py6ioar}d! zGldG1m)p|nNW}0F)V{*P^-x@>GeX7%k(L8Q`DNB0_b!`p*QYSLa# zF13aA?^|l$O8Ki#lX-0YxNkkmNSi2nX+G%+dRAJRrNGX7B8vGq+cTfu@9n5M5VIf$ zJRhSh2)=D~&Q|EJzO?M#Q%wJrSAK7HzcFrSefLY@O>%WF0^k%bwDEm+Yblk0n6|v= z=iya#Rg2CeAg*c*8lW!82ny-@%}2Lf!XTGvn^H84=e^aXeXp#9 zasGuy`!C-huC#o>Wmc@isKb4X1FDD4<8jbNHQ7&JG#Sq4eO?o@9EmaV84sR6EWg`4 zi>{eHB)zV^5)i)n+~g~%U=Rofs9-@!a>}$uizRDkuZNN6`Wz&3{mlo=Xd0Rt_Ej@c zNR(-zao5{V=Bk3KT32J~=zC>?b(*M<5&)HNZuQRGH_$l7sJ*os9cTktSZ7~VB{Ndl z_RvA*26L*qNPy37v9?4nb7aJQam)G-@{TP5+ zD^C3gw5t>TYhG?zYViBbKtwYibTo>Ot*i$fkZy0?!pDdQh~*hUNHKF*XsLLz)`oMo zoXVd85j7Y-L^sY<2z#`*KpvQJuX_;jI$OPBDl45G6PXgSJ(A_NG$NaSHXn6ahI;Y z*fT~AiPwYtQ19+677a664+H+JW;9-8pWnh}xiXj4uHHOyHW(|tNRY+D%O*ja2>*@H=X~1{{$5O1*Z=gg{qPp_ z4pGAd*oFHXGG`Eh=UNJfs+SCh({K!3LMeQLG(4|{g##=I04)87CpyZL5=Fsm0M_oo zBOoJ5_(_P-mL1eEH2L8vEe?{8&$T?wynpKipXOpwb$R1`+S{OTy&K9Dd_m}eOC;H)LC4Ksmv@Z$|$^Hx>y<3;$w2bb>{OQLSR8SC?lJEYf z;iD^w_I3t4Q}01P)}ztq2hSRklezP1rAGw=1pig6oC!(-RSwtoJZ?AXN;%rW?duF< zaBS|?TN;rohyI}a{E*=RluulShWd-H=HUE}0;W+y;~FIwHMOAEjfAyFSijXB`Rmj! z`1t#pAtFwo`|4)0H~}1P=H!~_qxvGp+{OTS`t~f0l}CpulNPIA45G)kzXZdP*Z6Da zoV1n^^C;B#w^HKPh=c7)q*`mf{4TpA_IS>Segop-zx|X#ytC({I(nc(ga`n>I-@Q% z_$?V8n|U?52Yd&H@#<=U;)3ZS?b{V$Dxb$Z&aJRt2f9S+1E7hoxrlg4q|0IA{}-5% z;?>)70_2w`D~8!?Eq*@e-sEpWELRo2Du@Ac+2T262Wk)PS;`y<6yMlHP}o=!3CZ@h z%ZFuSrnad}udCW?lR+8*Pn3|Si7Yt^G}u~{rr5OJTeZ)hElQQ-z9LcpHen#|+^6$X zD+XaQlC8XH7rU}YajOEvmY1Kk^MWN1<%CCUY<8yzd2TK-HjB&T%KG%p%5B!@EDR6K z>to__D5qMM^Y^YUS*kE`ZDuzrnS*)&zkyel|>~a(QZmjl~N?wP` z((4P%XZV}Sa!P{URxxgZj~qYev?}Exh$Ts1ethCl+_;U8sb4d+-(sf z-w%g3UOEM<*<6P{+!jZI`kv<7s;o#ZP+W+kB%s+!W;7p;z5p zQB6(K9l~R!TG#T_&JJ0$QM|Q@|5JASC+zS(SAZ9RlpXXgIKSvb#%ENn4ojlrNtHeS zK{)U)h5HY}ebq6JlWB22$Jns={ypS6bNR)alwDFuYiM6!iiyB|nd$xRs|{yJ#sT+t zx>i3Sy0KnvPM-B#@;6sszVHvu>(k=BIHxtrGUu+nqvbr&mK|-DCj!VPdS6UPtIcha z8~7*#gGGCK>=ds`isLO(K6omhfM0;@MR$qz%MWE=XtT_JG}>WQz14hQoyH$OEBkKA zSvpwBwwQh#5b;+U*-h*0T>m&ldw*JIdcb^>?@a;_FD&{`ca4fttPZ=2_e_fRV!9Hb zf5l|G{^Z&}`Z4IyTR2KHnRu}g(55d_Slc=E-_G^-ewP4}z_@KLs ziLY!3YC+~0Hk@SaP2@~>8uCF?R)f}dTqz14dgEEIkL{$)FCD5y^PJm>4|TKJtfU6X zjP4|h+*i8NKYlb))A+T^`!_GcdJg4f*rAQL9hTQ8pVE#H0uGG*XO_JCGa`mU&Usv@oY7%i{GR-=hORZmr9Da-q)WT$(E5UMyOK5%IcMf z1sx|{rmwHAikaP{g&Q0X8+FktVw5!qF>qTsU+l4OlL@-5kLr5Lc;op+3Oo$*usv(0&mK$?Lo#Ws)~~--IuIonec!nNpUci zF(#h#`!RFz@%)+u64!D5LFrs1IpQL({34bj% zIO|)s@!ZlfZF3%2-g`JMIH?9Mt~!RZzSg549^}##Aw@0ak-vg{Kb<);bx^(S((ZlO z_@t8#`dgY zIMn8Ty+fH8U$2K;#=Iucyt&P}0Q4`^2XLv)?{>xPOux0Rh49ww*b-ZE`qqy4{^cUuR_#mCnm%?&#t8xMT#D zHTDbc<_G)t&{`7@ej(9NR!Lrz_20 z%Qa*({`j=WO?o?GSaZT=$@<&rHZuk5;`%b`(Vh6!FY1&3wh$K zm9Pn~w`uEw0q9ss5T`}LQpK@le<}6o<#rK-X8UtQ~$I|2Z#)m=Sag*8R8RDGCE$%s@ZM zFP#@(J2>nnIK2962iL+v#V}|Q5g2~o&_*%NO*43;SMu5?g*moA8KQo^iR;Q6Ak_YT1&TC7hYH379&2a)1ve!}9*IEvY|h62Zg`TEin=hnx`G*K5l|4Mae# zR97T#!LuH?se7{c{RKXaWsvR)S%BA8Nch26*EDH>g(TSf$%kjFv7+>`fxpO+kqck5 zv`U+16$$xN-RzTdr|*+ZlrOzF`haNT=7zdZl03ryHwQ-E5?qRk2Ca9XgyAS7{T zGye;QrO+}Ni6Q?p_K57STsvADPKXS#@*TRB7td{k-Y!9BH(+6Z&ib#yv;Hm+OH_(M zV|&v%PLe0L;&7RW@5flem??g`(7U0| zx)PAv?E{W~FJpCX}lQb@G9eqTo>Be4fxAPpO)k?BIZ zpN>Tr2#F=XVI^J=>_s9~+Wbe2Yi^}OoMY5XQF0E(I41I}hyy;<*=WB8T0>vm`~1LOg}7N1?Dc0hU> zYO(duF4LP$zP~)0J)cppAQ5g+{=Dtn@clBs0MFWdfRwt$NDS9`wvubigrJixxatXk z*#KS37e3`bDbpW)^m!l_&=1O^RYxDSZd`;BZ;qt%xn4|sHf6V&sJWY~n@yGGjec$~ zE`=PEDd1b(XqqW-3ZV|=p--?ab!lWLm;VEdc6!-Zdn%!*{PG!Bmyh(WafqEc59f}t z!@QV9TG0yJJm1W}c(QoFN|pdm(M9Wvn6V#SrRYd-$Dt$eH zCRSHm@TE2YH!4u;v~3M%m3wLKqgUzqgpYeFc_PXMBo zktN#9%XO3V?-PCemR2DuKO&DdF5bzdEGv(WQmo3jBnVy@_`GO0@w@AOj!pX~|68xC zYx|fsnLiHyEvZC{t4Om$jn%lSp|s?z&ZWRDJ>2+cZ7uB;uf_DRLutjasie>JLQ8WK zWzUGP%x+zC{_5G77!VuY?Lk{Gj2b`S=UeU)NluHU$ege;2UJI^my3ck#`$dkBb6hH{H zVXK|QT~Ems3ICN6-l!``fnH@T7W$f?(=nJzgvG(*uP#6|c8PF+H(0iBr@irZG|j<} z9O`&*oQDUp?V!_s7-Lxtg>DaGaE@BI9c}a~mY)m7^5ux;wOA~dLo%5D+q9_41 zNQj17qk#!ZZ^8OH-hW*0azbLI?5U`Y~Kolf)Vab z)~Y0<4`-NH>YH);nEOexxt9gG`rHZ9QaEBn&uvKdV8rV{9cbs1BrWIVLQE>3Wf5H7T)aEe!m6NU?K4g;iwcq`BCiR)w!$b4T zOkU8;%(9EQLvYN|Jp&ijVn)ifFM+#}=bsETEdCn0aG#h1Gg6?5~nby>F`E@)2lu}ST?7OuEeODHYL#6?V75&0&Ro=IZz3BD$z*x= zobZ&svA!a~g4OkF1!0zBex0?nMQW$jjJmep=bWhNw|lGD?QJ>~L*ka)J{q;qQ?G@XFrEJ9S7( zdX#9LDfvggH#NJr$Q=3HQ1aT?&@Eo--f-jl$pajzmXuNRn+`gd%N44OtV_MoARBfl z#>MG{neL+vPh{&dxgrk2_#m+{@y;g|i`zrhMHHW*MwNG1$#hgW;S~`PkVvVZvZht5 z?5>s`HkabL_X1qVnAt-s|5IsvSNHsj-~IBCF#k4P&ZHIaZDj4q8w!cRCww+r^tno? zBO&-sz>RDrbKUa~Hp(gS&S%t{#0m5?2q>==$;}CR^c*KTRnlVqF0W%AQhq-Q`5EQV zu0-uG;=X17OxQUqJAV^O;s>1tTm~N>URkrUOBLV*$f{>FDp zbGQJtS*k>D-udyoab4s-QHmDj{f>zphK|op4{%IfKtMzNkw>#DxS71m8z1a>6DQHd z+Dzm>yWz!6!I*QxnkqfjL-!!$^+~M)d;uHm2!-I`^b#K@&np$mA_$IP#wa{N@3Xaa z@?a-c0j{>jY(w~O!@K2jI=aFIy-$z(lB8Csf_&JGjFu9{NJGe5l6abL3iE!_A5qjQ zVQ*!t6f`Ie1aE*ihNMUwEv{G2XY_eV3Swr~%E|;TXOBa%LRZF7MkW8#*uEY_6{8^T zeK~l1E5;!5bE5XA7oq5Qeu-^KTJ*jHf5v0dlCK&JxDM+XUPr!%ijQ%Q6jS}P+n@tG zU$p1gyQ;CJQ~Z650~MthGwnFr`Z^|KUH{!23ruZzl1n zwz)T|- z)}84Jug9P93HPTp$3P3!&BJWilP47}0XI%ss{R#sQ|Za;BCNGoDJwVhxl|rccm);R z&HgD~Ukk#1{KU^9JYs*&95O|Cm!ow_j+gk4vrD|ZW4ER^kzAd*lI{4s@{C-8RM1pS zPI5M6g$wm=jgETBElahG4+i#+<1hJsX5I_7g!HzAD{*FGuIUT~b+abyFGYat+LA6~ zrc`{=xXFc?Lam|a_;J&tsKBzeVGARpyY~;Chgrz*ezeUWsBEqN{WX`t*})hfPhj~d ztqYr|2q!&)cAz|na+Ba~Q|631R+ZAvGVq+`2UBOi5@CWm$+~Po=9gU>m-KSY{1^!= z5aYPB@3j1%m|zy|h%1Uu6_4i^j;*j?G1OQ?(w308aX2*~u}b)P4an9kVc36LKfF~} zpN|w)j1kIFHUz1mAX!h#g_Z|h4ja*v$w`59F8NM2U(Sr{HOf-`M*f$U0_o^9x#|TO z#KdElIbg~^d~nFZ+54W)8zti-k|Dx-y~N!6+)7>w#9P_qX0IM=2Dc_xgRyD*;2;T5 zvh4q%?5(4!YP+xDO-YJ}?(UM76p-%jl#&uq0g>E*2Lz;~L%KU8Bn}`c-5?=|NOw1U z+xvcg-}jF9ecnI5!5Qa|1B`L@zOH?(Ip>;dEiVME;bdwn=Hw0|V>{0;7?-!)N4tN( zr95r!q6`!;_Rup|d!1Zb34nU=($c`rV3#iZ<}`c?{rrygv+l+z`m_tENsc4N-v6$54nl%U7PUJQ-2+74ey-ZMr@danDgURfYFt%Cxab3cTl;aJuYU49I74=vkx~b3w3XpbA90X1h4Yp1 zRhf{5|M+EMIR$FA)b43qBN5#`W9{*Z(Hzs)*L$b)>odLRl!+pef{y8tgsk~+eSWvnUz<>a%CI7K)@-6mA%~xNz!{Bf8?O4C6 z#JKz3D337L%Fn);ey63(Ni8k$D*ie7UmFexm1Gb>J{(02+eW4J950k09K1CbxUQl7 zq=y-q8yjJ>#Wl;iX?a5;PkyeLQN_J?wj;{r)fbRpjA&YZrOC6tUKANOhHD=&>;I9={P^u?Go4XR)Hqb#Gz zH)*^(u8%ZfTs`px_4S4xx2A+&CHEF7eAYp-jtxiq6*jydwnIum#0Tlw&SN&X+`N}U*88$>LB|LF4nBaVs)=6TA%nKDPiu?^@v zJT`kyJ&PBgc{+qLs64@9@5b1aLm1J^6^lg1a9=pG34rXc@bOiCZN&Hi|I%ZBo~?QH zi;F96(>?lMv0&!Vo{4CX`bL6cvGdqTpb8CuFn!qS6Uxp2)8q!1=f8N(1u(kM%e zP9#tPV>#(j?B>6u8O0LfeE=&r*LTs@^Tc@?eDxj{b+r_U`#;N>sasAtRs^cd69;6W zCkd-F6+^?~{jV2ZQSkL=)%V~&d20VyK$&%4h*9d<=*v;RQmJ)`V`-!xJ_g>8ZZUr@ z?wi@*A}~Di2SO==6?bkz>%W>>aqKvP#e)5?5d1}<@A!#KoCC?i(6^Fd%SS!^x8|vH zu!scisHY+4fW+};hf>&jFSg9u$FZ~@Dv0ovb^mrml?iJ*oK76HE-#GIdEd$%y^tti zn=S4b#0f>Gp9Ut4`G1gsi>e%ilgpx+8Q#h|4ddyYna-h?10BE_t8fe2UVY~0QhP&V zAzA%5*Zjpe^}=tuSEGf_(&}r2hPlZ$N28ImC>H>s1v4^&Bx1?}KJueEWAhQQ^6Kwv zLhD?`TBluCR|9$D_B3sfQuf7|+>D%`Tl{w)*>RM>WY1L}y|3^6>*WOq!TA&XAI>5W zvKBS+KLDT>%W=$wJ9C#qqm=hQLXhdC*wCcI8tcRKh>f4ZyUKl6>LSu*chbh)tRt$P z-Wr~<%vod3qeUU3!}+ffGt0!vo2P;E1sV&1*6w=+W7 z>u>DPa{7#*;lrqQi>lJc~2#M8=bZ#ZIQlVCzg@Bu5`SBAs+fUl!dP~l7+D?K?d-Oc3hSIzn*zj`3+K8sdpZU)qT&I9a}wY+O- zeCEJoQ}<-IxLi2~4a>qWFT0`&V#b8te(A=m-$)sHcZ)bt0{F|-TJe>>LWS3|7Z=0W z(Y{ZGnyX4>EJycCDp>b7&%oz6e@E18pEl76UvQv3`%0gm$etT?l&woTVxO|(F(83x zc!b?ku=9F)C`bZMDBMp%Zp&&J5KUq$hcm#(*~x?R-Wl^>Q>=ea!3WJ!EtK}l1=ZG= z!QhrM5$sAbm)w^d&CL;xM9Hdf+ovG+#e7~d_McB-HB!Zjr~n9=_@_H6 zLeLL|&@+iYyjC)G^bk)a%s~2L>Ei5!5@3QOqu^k3DhMayRmWSC5kOkx3Tw4{1mzu= z^N$kMh)oNWpe)Ip*o4@6RoBa6$}`KQwkujLH1Ie^!RyK57wF1M^a@kSpJ=F&5Fi5%-?9mAP!`BKtp&&*ClWCg z=AEwc;E7S%Qs%=`O9u=oL#D%7&W13}N@0Pbufh2jnxq)YX5t(Eoy3C3jZu&C z30cwOQFxGEwF@!YU~ljHcAf;IWC>vFbBSDohSQXhZ`H8q7M?+mhMXbhX7Cwixd z^^53&vEWup_A;oNrUwa!^xN-B^*h(G$VK)dFF#t}*x=C34n?x0ZY9WfqN6otavF{0 z>DM_4>OBpAUhLl9^Yu^VZ0~-0>e=a$;Ic&P!~P5fzDLdcJy(kVsW5-FAMGbj--T3~ z8*L2Q(rK#v#COV-UMGg#mJ4pxM8b8PQzb%@qC{9Vr7>4od8AZ?Kc7y|ez zMj?M|ANu*)4=hkgk>Sa4YM8tYJnlCM8gVFAh(91hN8o_c@2zoYbf*sTe!;fN`ssU| z*C$SM1AGbz%%;lDxZ2r;lb@p%Nu>>;pDuVPMktc(=dk4nu**Kn8>Mh2<-|L8@i|m& zE+5y|bvO&RmLvY3T61!|NbsK>|GKZ}97b;)alYjL`l}i#BALpMFf>0V!rF|?yxLIQ zd(WSg;X7*{HOX0LiHa4*ZP@$lHq%6Sc04k=6rd_a3Pb_DA7w-E6Rl9S|A`h426e2Gg^Ez8LwGo@se4Nb7yvQ){s ze7#ev14$6CL-RQX9gfV!o7~T#cqxWa`INn{TFCP#1v!-d#gqeRe?hCBUPTEz&51K4 zn)Y~Fh>XxUl}Iv!-+N^$R2K^IQmfO5pl6+b)ghx|m|qJg z(ltjRFJ6;@7uT>>zfiHz;gl_g3>mRuVikP|5idQS#q0Rw>&a*vzkg`v_a7)v;oo^W zlSsB0CJNLjludeoL;-2(B9V*H984}FNBv$ZVNu|xe5CP*$>HvGy5tk>w1McC4cU>4 z6#Y6`(EJMmP2_f%RZcrV2e%wjmrh(Zbo<3>%c_9MG+8|Q@ZU>{f%0!;{%?ZbU)8*P zp|CzW&v#Xwho_wtAHZZdNzAte6Li$`!qv)EPny(gDJu?gqWkvc0 zsK)c4svrOtOj{iT~vzNcf*>j3lJLOh~`#Pc>!>*wR#$k7rCT7nbi| z^r2Q_Cgr`0d-i*au}Cii>UeEr_!~kD0DTe_PS=jt!Hc6p_FOI^G`EFTK&$_7h()-6 zY|%9OUqJsJ8LNXMiNQ&z1_uTB*9Ot)JRHOC@OH4ybI|L25!}T+<^aX!xxf2diz%S5 za=GcNWz_jHfVix8sIMC^t4M>wF zW=|Gis!^^Ef?TXTul`Ag#td{rC{?2M4m+s=7d!gwIB9pTDZjcE3%Id;mbT|>__eIA z(Q@5@=3!WTPKk8c*0R0H<6^KYQnd?q;Y?Az_Q)uzx&+UtG6BZ8)oT!bkYl75)?}z>Cz9Q zWpkW<57N<+WZ1KEi`=HeE8?Ks({54+tk`+|U$NzK93)8d5v==m#R+ zVO**E=lgq45;Py;61~;RjYsC)mIA=_BCXPxO$!IIUX^BMf(m_{DsXxA6y4jAo0m0t zBm<=%DH(%DN*EcZ6V@LTitk7SZ=uekT)mU@aiwN4&|ABg9BI^>QV~tBi#v%8=47N} zM8(JNVCM@E4hqDhQlRo6R_H}qKc`9#ToMky@>r0kLOv5B&iA}%K5}%BHn)S!)E_zexdllvxLboNY9{Y`j>OZ#x&L=YM=p20N%P`3x_8LOQ zDc?f7v-MK)t$j4!M}>#U0=9GUHAi+dpuPP}0u2`Y@Lc6_V^d4Xcb@u;;_J;o&#fj= zq+fB^-2O{DjdJokHw_qMnj zGC^<1)W7ak)o8gMbD2g`pwAlbG6dw&k29}LS@LDO4 zQkpGHv-=kL6D2aDALPO5Jm9}P5* zZ{CZvjEHy-lwt49-Z;APi8MoP`1 zg2UzdmS8;=0UVt4Sv%ej@vn>f9Q_a*QUeZ_u018+OgQI<$?6i3A-(cjEz@Yb`>-{P z3%on(8WVeLn1$V;5KU>X&W!ZSM!_ef+Z5`AM#cSj`n;A#@@jbI&N*PQR8GTAo5;m$ zJrZ0Q9=7mZzU)WSSvoHklx#fT6qE2A+C+IcZy{V%gEdrpc~rTC9OStu-1@r*o1{Dg zaaoK2H2uE5-Y(9^=BS-AG6Q1_U_}{Q`uzO; zT&@~>(dp^ZX*PlN+u9;6J@F7t0(jmv94yMrOGv~_c;9H>UREdXK~tmAljR!z?HH3+ zn&50HZ$g8SKBi=WH3yIaWMyH`y8;wpfsC;>KY}#z0mYcls^97)VE1?BDpA9GK;sgCy;W?>2F<1d_?0`Sd3!pnmfJQUKpRbGpR5W zrI)&*1mwI%yI*g$L;7`;Mgo0|B!$`i>uxzD{{i09v#hh=>D=uIxrD^S1nP%z?~M{H znQw{pJOy^%O?r7T(+_EI2<3w7FYyC0;j+vCa!I=u9q>@kLYMqcQnAKdhXHZ?5cf(#6G-CrVqBul;ZnBw=FU<3of7g~E>Sh9774(KzsHQRl z0gQe;z#uDiA!Wy=T(_Dzn*ACvv#0>BWsIkv{pFNXlCjfQFJ5S5`&qM-C&K$rO6JQ4 z0Uf{Jwa_MRsiCxA^sT7Vywqh-VK#bf0UbS6!efgIQxhp$FZVN^_>32$JOp_1b87Rm zQGlGYN0Ki;j2zw6+DMC4kA7ks{yI9&XJpZ>^;&DuOtQ4!#>e%2j~CO9$ZsBB;;HlZ z0OKc2T37-nDq#puds37X5+R7g4@A6pW+>vccrhOK;cR!%a>qWaqSQ^rZ`Ur7^Zxf) zBwLOOv&ODsepG!!tD)a-88?!)^P9}jh{l7xTIO}@NnR}B%^nyV`dcKOq<)xdr$Fq zGX$lJU*7$$jkUWUAzm-y=?bUdUN{?;5B|v9r?JS^%Vd@zVMMBHuKhboc5_NEmDZ@TfSLF5?PZz{_>;QPbD7l@mc3c>BfAq_| zu-_i)Y`l=vS@di&@V+Wj^5_Leo*tDOOb(rGNAIei=IwhQL=8`8tb^4^jSbeU{#2>dHXb6cCygG?w>Qb575^G^&Z}qJ~nT8cfR+tX^N*Tw3i{x zkOyTL>Zrf;S)48D6UVS1w@LlW1A}-_!gHS_jhuq|t~>fl5-speQ494 z*7X|`9bqF^@4d|Pu}tEPj|>k#lA~3+yQ||k*c9y#%CX|UH6s&y{Nz|&cDL97Pn06x z_T^9kTDP&SZ@d%hvsC3PB_<>-TY{}rSY1+^ED|NSlTIywwn0WT6`BKH!oLX$>lyjR z;YhycWv?8W+b@wV?BT#O+QLOe&XOg}3y-=I$hOqzk)ZqMW}skUONWrH{s>Z*V_|>B z>MUoENl;iD!S{t{ka3c^Hq%?z#2&}t$3zUdU`lj<+JZRxrB&m){?GgC-8_X3VdXn;}c}d z9Ju+6rkF^xA!p0Cr`G&6fDKSWe#ux{a zib-*6bNioMe|!LjG(byB?kz!w46p_&LL(|M=pW+0R4Yotu=@8w!NrzlW_g^>xBJb> z1qiS%=K?Q#*N+gC1&@kK64~DnezV4L>>r)TmJo^?oye0AH{$tN;MO1B^aiiipwDvn z8xvcKBuQWd!RmCvCMRjDLCBAyo2$eHdI+K*%aOpPZP6Q2=3#+~rp{nC?v*3LQ% zj~nA-Z)Drnl_Xc1xgKBZ$!4#=xq+MXZl-9t)oQAzMw(WF>KV0Ui|2NTE2CEhfxQb;cOUc^sb z9&|Qv-hDJlBqZvp-z~mwplNy0@5}8TQ^kai)D)OYt0X8@RW5DjWIH%?Ec?MxjfL`< zhcR%}^9pEf%q9s(L3PA8tos0s5*+ViiI)nc4FGUp$Vd-4{4@bkXyog2dJI_yWmJch z*3a7DzZ*wAl(GlMGm3idcyLAXe7EK5XG1|OB3k0aq7D3=y-D=tv5B8qhJNp#%yaXn z=kJBM?v`DbnvOF(3LQ<_-Zq?eR#_dMw3++#wcWp*U}-(rIbmCoIRB(~X}(GO99vB7 zBG`9!_w@T+bJ&;OF`|l|QTGREPkeh%+(3j3!n^x^@QVeQ`fMHN>)khuPh<;Wi!7u~ zR13uhE@;h}s7mxoHpDa^_$e3+_0m|_RO5K{d$v{z2trHeqG{_*eE48#PyGNi~4 z1En40OnCYJITCEFy2RjS>AStSyS!Gfm+pSQUO8_?)HM{ALa*#rZ|}=NaW3%H#>MJs zgTRTqnZWC#k5eop8mWAZSqB+Il^Hws=mC#RtA3p|Vi%AQwfWT_I*B!8?Cutm8yr<8 znQ7riYbX-lY@|ve1tgVf-0eX<-M?nPnT7zeDPLn5f4cYe%TA%C#YN{-EpG4blcN!f zx7|*4g?0(?i6qh2%Zp}}lNq4?heQpw>p{7s!Azb_U4{AcMK31?9TSGM3^2h6}BArtZ2Cl-im9GYy5Jbk9=Uy? z1as=)?tbG|(DmI`_{8Zhfif0*f6t?hZCvh`B+4qZU9eJ3NrqCT4L9sgi6`_J)R?n{ z;Kr=P9eTE|@GUQDOC7NpCc1^x(3{-LdT7GHclg21I`ev^KGp-`p92am}9|Zq=zZ-h! z0UW%4DrVukl#b1!F7acIQm_vKS(81}Jy#^^nT7%m%4;NQDwkd0VJA?PTkUU3&x^S@|;fuf9$@6TU&>~;czOnl0H5=D2To@l$4&gin#6$+3 zZz)}z`)|-sU%&$b-6lGcotF!xXkPLoLiKYrAoA3sa~_VnxsBi&4bL+$(q_f zX46eY+g=VaB}n>XzhnVa(+zbeMn7F9y;g<5_@E$+(*FJUR{N||i*`L~P^;n_F>^pCIK&8{4=TMNZ3yN~l z;Q+~|ng_G_Nq%oPZHKFle!nI|U7q4+-~amjE+!&cYo#jrq$~{ zzm#1?x#4s1?M?l|r(>^6(5Y`;fSHd6zPM7Ro0&sX1{Mr?op0PIqNhJQxVmhk1q|=m zY<>-LeOkL~^2j;O%p42g+C?EQ6s4>dqbgDrw|%5ci{qfU@tu8qAad&|qqL~T#X#g$ zhlHP20i5n3riWZ%=AMyW{22wK+Qu2d$)0>ATevzp=CuQlqW}*tT6B&}38?&2FkyU4 z&QdR4%Mmtq1fXFBN+%~LBGX0MDDyF8qZTW~)NtDTjmh$M?pPh;m~qNI8t+_g?`!J> z>goh`XX{q`JrSOq7#*6!r)T~?=V{zCpRuTO+MO+{@vg^L4gA-4sVw}QoOE1AmN=U( ze)s95=Q==HwutGTy$TPo7uOH^pF5P$XezOjAJsA+nblkEX8YUP-d*~cECB)ax<@S6 zp7%CO^E3LoKO1~cukA*_lONxT`mVQN$nB57=Hm}-KQRGP$M7$5|FK6<*d>xMQ$9(#Sj`j>KUK+(_0~vI!)_xLb5Y^WohT*)Jl>dL@nvR!Oh)bzu#DJwWrS5)YRf=?H8%7Zr3E* z%Yx4z4u)?xH%~qfB$cTy&u%SlDE!V-@mXuOfXGv1eA-ywP?!8;L%vRm#YrE5LaWbI zvqiB8;!80Skf{23Ayrx5^X(va`j0gA%)Kq)xw$t@U;IoLN*=gFr<{Uu>il@IXDWGG z+*A5oPT{({u`7d&^Ib+Z{?E0(%e7|cBb+G)XW*t7x1a5N7(tygaIk@W-F7tVRG{|Q zMR>+z-s3pa_w*Its&c>6q6Yz<^Sj+gDNCE79Tvv&`;xpo%-L;4s-a37Gk)Ks`74AY zIJx+{m@QGC?T;Gp$~W9C$lUSq(=lh?PI}YEU`T17vM|yC0Wj+lIl64Br|j-Vp&ecB z#vm3!aC`x3e86}(?UbDGz&|G;*+j&6B|ZD!BB-fHgxQ||EM)ASm*%Mu147jl>|P?;*yN(kWAeZD@58gjfrTVe6F zUDYGN!q!7f6so^qN1pV!vN3pW_X6$Ur;iKkV`WP5*Jrac(Gpj`{RMsJGn&vr|CZ(L z%x3>L4&R`vp3BRthEs=%mbIUVr$2KQU^xYkbw6B%Rvz3`F_bYnG8U~r5`43s&| zV3Cz#l*O0!Q|bihzQY)yq^M>9yXIzmF=`cup8V4$jom1sGo!uSx8WSiV;Sv2(TH8V z>y*qFKf#Qd$GZGz`MS@eDN@U+=*PP=){FQv+$UhVAZDO_7LO(pv{hz zR*O^BNo7uPNKqfCWm7w~k7b);P*Rd*+-*aCr~DlkV|f3p`y^xn()CL>Z`&LzH#ES^9 zUaF2{N^vAfjnw!(C}1_L+7aDy1@$9t-J#CzeR-OgUL9|dM|k2St@1(zsJSM<&ykHs zekc`a56}m}9^fNm#Ulp?b`TcOC1}`Vq&yiTv@hwBRw_V!#+aWbt33U|MoCXU0%g_Wl^*sClNf972f}c06$o&Q%Wbx(rQjq zf-bcnA5#xjOvv58vWGD-kG7^mApv7jP5K}e{BRy#E@x6x4rfl$hQ5L}zEX@nf{Y#$ z^-l@UThG=&${L4=|Fr; zhEJhHgrsO_XVx8>7GZG3u1HzaE^B&f5?&cUO9<16`(tF=QN8GvfJLMEcWT-T-NCKRO=#TN`I#Cw-BEepkJSm! z$8DBVpKJQM71SGiSJu-Wftil_*OI;izuUgrDrr4?37x9o^*5)2!E@;kgyjoG`9MDE zNg{>E37I2qc4d>QyC$nqW$Z_#4U4oir6QGL)#-`RAKGN|IPzkC(>fYC&o^|l5m?S@ z8yvbTTi#A-G4ZYn0r;AVT&1I17OrxM#*yrbIkd0`p9l+-w3T&Y!P?Sj?@Ia9xAw)*#BNx|EP zLG7k##At*CB-2cjr{q_^4P;(cUMzxyT#9wC0Z zEjmje~=%Fj;9V#gr{Ai2=IoiI1ycyPpKo7uP#dr82YzGZ*CDCWBB=%{-wS!ciL zk-!fT{d$nuhvrAMgTe|Kz#7(l?=Ty_YCACy9fb(4!tA=wFr7>eT+cpR9h%FBs#b=p{H03DX*7y(?G7Vnb)PL0X{r1HIV)$~(p-ik=D zEQ%_jAuUCYTx|Y*Q$h5PCiZ?flmwm)QvwtVb%rwz^W%=1aHT3^=`PfVLv{elFYJy(}hLrvkjBE_MbY%lDA-h_qI z9+fGxbZll-%8hsY{|lwxdpal3;MhUakm)_5N5W|#d}}bWm#(R;sr96_Alq8X!dq7A zZ8pB^FV>uo z@A9g+OB~g*G_xTa{OQmCn|Kfsyd(G^8oRUe($(3)xc+wu7g#ANS&?@Vbonuu=Lk_m zhl~dv3=a#yfE`y6bUP!dvN;tL0*}6A?(c4jya9jh8j+YL@5?>J zb71rPmKcYHHNW$etC$gpCnA)?>d3JI?Dy(=8kl@O*1lRO$Z)CqM4tlFf2--k&Q_j| z3ItaRLw`wRA(H#1bMBGYdd424KC0O{g0JoO(bu_dAg-ML(zO{J*e(>ENBWih-Y4#O z=$hM1&q%vzRdshAY;fM-WpHJBBz`d@VHRh%BrMw8a`FvqthSoFSbsuYE;6wQjd2Ci zfA)>PMqBc>pKqX^d(zxO2pG?ybE19L}JA0%Vw2C*Ep{M9UR_oMzQ6_yL zQK!}s^Oo@2Fu~mmxX4CR0RN_9&bLsihx>%fG@s_xuVJyopzzkNA!#jTuCF3S@#vQC zled`|+Y>O1ey;epDP&C8c+XhdVDXd&)m_NnbOQCa<(^5rhP3@4)EHVOr1m4XBory~ z3EB7{Li$vCuKf6TVpeaP=y-ep4*TOln6PZ$_EcaL2oNs0cg6%_Y>dB^0R52yY>)73 zHAq9!4A__;#$cmNCrgQ)e#@pT8g7o@mX!{qC)P0-Cv(U_4agfq0US2u0uhd4G>e>n z!L2k|I@I(48liZ+&}31v%TeK{aopJBTWKE}6G+jqwwU1{*X`Jx^A!~sK5<8q8W&gz zvHeWUg6}A!)JoRf%_263^xSyt>zVFX_d!)_PjIHm`a>(?TJ0XGt2c_ud*??sba*X& zdAYh|(PGNaaOd;V6i<{%9kz| zBzuG5fk#Try|r|}jKAfF!QX=VhxTSzhjeW`j5^5UrS$dK`m6fIZ0eKrKv7Z4no%|* zxKX|{bg22@_a%1H)8mW# zq4V&g9!QXv5b#`fjiTOA%)fiN7gT;)S5h>%8FfZv%TF!xMvB(l{E3;!yU3^D&+F8* zyPY8Hw&US6qVAPM^^BTLRWnKR{~y{&4Gnji=&quQn~CVDx{kG5je<=}q{#n88~NX) z5w8EDjR+p?F^`b2yqb&@sC7Bi`^B0iTe=kyTJo463CRkH6x2!`nO5+2`hdhzi-LA> z@;p>x@@ne(Brh(IY>haiUwZ%fo3>oWaZa;%cu-l4R-iq$G)E9&d182I#gkePH?+N9 zueOUWmN8a3h><{%^;zfxfG`f zwQa{xq__(JkTwhfjDGytXH&zmNC#JBVT8)9s`(cm0BqT&y<_gD&}o-!N_H3o3%;0d zrqP^lSiCd<4lXMFCnpUJ1fA~CC9Y;OGWK+OA4yzpXw1*o=%4SE;709+OHgb8u9q zY8qky+y&#zvJ*1N`S zmLx1<@zc3anU$azn3QD=t%s4SbTdo#V{||AN8(>>l?8E_cI^LOnV=6M0j!f9?LRZ_)=F2$=Zz>(=85Q#^0@F4LR+=Bzn-L-_Gte)W?e1~lsNIcqi``#I7hh%%)kYqBDu zp!Jnu%poZBOpllq70a><3)16qvV>nZolkz;Hb-@xF=5N&CQ&E(U{^xXkp$8_lkt%8 zk_%=VS2x@Y#i3-<($Qg1oSdHO89z)-O(pGiblS#Yb98h>>xSO2@>a|6Khar33E&67 zYknkvHykM-ig zE>PhZvhb1?7=B46+KF*cl%+kJEWR-%8!}yh5_4>rwsMLxSfH~>NZ7tVb59Mt&{gx4 z{eDv70Pr9jo4(Za_bc1^yto`ReOxx6eEtTjD zyv){ub%M&Q%%u@}U;igfZj)0`zzqFDP%y|!u&(YkS!rqc!yf-FbNZ(HP_!H%z>xC+ z1S>#kK$DkYJiZ_$MEYJFqFjUaL1=Uu?K`PHCGbG5={5@jTfc+aT^=k~-q9#x)AoqdHiVBrBf{lK|VJpz#N(+JKcQm4jf@J3FNC_0)JVXn=}Z~>r|HSbRC+TV9c#_9`huPqW%-^Gr;Y*JdO7gsqz>2#6p0gz>eZhKl>Wk|GGOs-yZ=#YJu$HC5_ zLvN&|W&XrXl-|6_u{bsgc-6O+|I3Yv$$k25)Hc=m^x02zp}o?I3V*u^@Y#A*?cJa? zvQz_vfvCcWm1+d1E4nP%)0IgILaz9Dp-X-bV0XX_VSLtv`IwmLs?v)8E5L9k$PXUD(N&UecBohHu1wK zOvzLu?FU`iZ!KS{kurn0KVxK_Hf7(u_Fn9fdp}L5X`jHWV7~Y~=3CJbo1QOs3K0>} z3r>VpcX*f^v#!2=0k4^nk;viJ;q&Y8A&>I;24`@udcDDQUZT;H9f;3UM$O?_QKqEN zad1+mpM8&rEm|z%x2oPVqyPknGN`geK0{YzO@>QmOWK2tjF%McfJ6jRO3R6ov(LxW-)GXnJ=(mZvp|$`{7_7 z93;&cR!xx)v8)N|-PSiGdQkkudmsj3a)#SYCOZXUOKbvX`05Rrm{y&Gg ze8Lnpae$tDEI-S9$N4+~yt=NmiDF$hC2XLUaTrOee}imL=&wceGszB&4`-#f_;GI6 z`@$xithR+B(2S&~Nn}!a;Gz%*T&sLcP(xg(8)2&%JVL2oC19_zrkx;QFQ3uIyAh(j zCFUn6$KXxTBr5zKFOMuFMc;|cYx+wOy@1y5(KFPa&evkI+|;e?%$Yy%5RX%+x>M&; zWwsw7x95(CV*x}&6YLxuE*8!8H8nLASE_1iLm83HAR_L)ULi3WeOE*>9h?poFXhD? z&xQJXNM1JVY%3rO8IzjtKdR4)q20CC_9Fq{^o9uhr)I1<98o3r(#jE{{i9!&TZ0S; z)`(xu(c~16@91x&T>ms7A?8o8B#q{>UZSj)as@?X!!(c(vV78>5T%B;_IU^2oD;EtN zD;5aZn;Z+zE3K+>1tT1pphH6z&y@_l%W2AZ0t ze;gcqDtqB$c;z&}<9c}&P$Jm{EPu3*`1o=II`Vhm9UdNNk5yBDelf z7xy72QXhu;0r_=&$8QAr11hRGit*+fHD(UjIEc?i0b|@8i<5Y4v*>uO7cr?Fj~F<9 z;L->3^3AHPrj%bSJWEmdBRk2ZD~f?(p~dcwC=HrgDcU7A8!UZkNo<}>-8rH&FAgn@!I9M$Z2-$FLikoB!l@Ui#vIJ|!aLP|{h@|zxhGd3KDM*WT z-4)W-(TRI78yy*$D3mJim^>GVp%mGfGcN%a&Te1o5eDjH+Y7nuUt|msK|WX3eW=Tq zJ6;SVHY<^RF(`KI;oEKF02@u0iubG(dj* zT$@{4^Zl;|R!=8U>O55z6DW3hmHKws3)|>|wd?okD}#EOBJnUXTPsOXnNd(3tBl8^ z1`x$X1+(gxwJdR0eeEZ|DEIebsBMAU?QDxBtBLmZLYdbN^C0A1EdN}xkq4m=M|{{F z@Q3p5>Tu**Ik!1_)@}vH?-Zu}Go?&*nU7+GqivPDNoPt@%yosI!fqh#aEbLl4zeY! z*e)%cF6-T;aJ%0EURN78chMMX?%56w)h<^d_gyQ#SubCr--*jVE#R1bt!oD;wGpVO zyd>&9Dr>qU$17{|RG~3){Z^!u_byhfU{3}w4HAj2Nlsd3WMSflmuTdDlm7=I7`VN~ zF|SZ7`#aha2jbEzGQ*;^xHydlsU93wg_f?s?LKIOs!${v^o(mn8hT)VY%m}+>fXO9 zxElEM>KglM+be4u{;aHE>3~Rf*Mo_@Mfl!`*o_^Qh&b~LWz>%m$MGg|8SaCiKX`S&)HYxl~?bW!)A>tVQrmizgzCZweHBB-*&yq6_^ zXHy~ny;^w%(Y(4cpUAg1wRr)Kw*U3(^v2EswTD1(@$!ycbLTe4**%}3!og%suYXaF z8L6KWTKbca0j*jl8n}vW5$?e62d) zOs+u$|1y#|GHAi~&@EPyFBt}(Yp^b{xu$@89hZcR9a%vDNNe}DCf8$py6L?D6AuhX z+t6}hapHZ(SMdC3lE{>vf`P7>#LDf+%hdKxF$_gNKM4p01(n?C!4r(nzbbjcLc2gZ z`$GmN=i&bT|E^U>b%S%sw{%}e30>Km`lFa@VRqn#2!R|op9u?YzqR{(KC>SeMalbN zHFBa)fFZ$rL|&Nwg35&#R{HG^i5$CQwP~;LV4{~4abq|G%_QaC1N4BYu!)KFO9!M9 z2oQzAVWR@5rTIQ{OUq9$&nJAAI}xj|eh3qQ9)!wG^sqD8uN_ni`08}o)uWgS&E?Pc zANwMaHLH2*UorIGCl3kbFdo}R&m zdUAUPtmr5mQiEwU0s@x4k=-#V{I$So#H7NF|I2CG@P5ay+Y|OL9M-L|uwuMEbh`{~ z=YTVjUlhK4YDS9{Nqm1ZWRLodPw2LP)=T25`-_Tzut5^0(CI~O^_KXOv;#;yv7m1s zHCiHGn%b@2uubTeKZXhId+ahI4A(BT6{ymhN8D##-wws^n#K=~>EV{oZ`eG&=BTjI zmysKgNI8pm(@Svm0{b`8l}9xHdO z-_>mwp#~jMgH>-RV#p8qox$(P%|U8JSzExfX5J5tjX9j4QVlB;%hJB2x{y34hytp? z^DW1$hr#G>!47P%PQm(shUl|%@@OyAy~(ueN53z+)xZ@}pbo*7Q*Rf#n6+xl;O7&L zxJXd>G)bFET#l3VhsV4T`B~%1N7RScIhz3>|FFx6b#s@zS}bNQ`SafEjS<t#V0Qeq2 zp}-=(++Lfd%x30v?>`oV6abc0(i6mHG4)*AqmYXnz^EKYuB=nLoW|@sMkVTKhFi#RHh#AUGp?e*RLXCfRVt;81)#$axnWQ~dH)Fxrs~WNUof@KkmoD{FeKJkQ(~uB_V9 zpzJSgeCJ#`$xVPuOZYK{RRv|U*PKr^6>B|1ROugZtVSdX>-@b zF(-GAu*dj3^T9)PhNVl7%j;W-b0@fg+p@HTY9JGaR=9^!gDsM&8XOCz2-CLwFKje! z=@aaz#;i)+>#1L7hrd3PL3gMh;HHdvac`G%Hzp;qmFt%6kW5=0=@x-QURbZ#{X~{P0Wa+mOPkgwN0tEcLI~VdrUSYAt5wTxrNl3qkCUCNl(svp%0TA!y4&?7As8>^kUlE<_ zLd=%88`u4*oSD|Snye6}JZ)tq`*k)@wx@Cb?q2wpsc1+A*zBvzg{792IbE^NQSRg5 zK3{KTmH*LMPXiXR7c;yFSB$HMn*X_kuqV9mtKC;Y1HpsOWtbW2T`BUn5KWgJz$D|U{^wEinRBZU0>Cy}Q zZYSG5vww(#5{NbsOh3UvOYr`pL{{Oit1Opi2pl}!&{KR#uWUaMI?vb^cb6>Ro6m+B zSn*psluhRcB|#QITUj1KEN6VgFXW8B()Az4t@dunHv*^I9eP*)^D+a{4R#WI5;7(o zbVt`t5-fCPEm%XXW&ek&fQi4$#~+bDs#K~CN;+1QRlYJ4K|DmpuO&fYK7H=zrH$QV z0o?0wIS2@5UqYFn?=>N;ycve?on%O?aN|F8$90&VWB&^V_eV&&coh9GYgw>u)pBNO zk`ftWnyiG8?$d%v&&dQ{e&Edb-9yhU{Yq8xRXUNkZ_2ZYiPD#h+84xgawu|n#HxQllxn=nn-LM-gCccSj&@z< zvRG9)C?gLdCo>eR+PUs_l<^P@g%IhiyqB7w7IED($&+XsQTrorC&{MOT3ozYGr}?E zk5@(lCs77N(fGXp>1#F6SSBf{_o#eyIAuHMw~_9BX6|Qj4VL6}`n=Z4_keIVc5VC| zZ7dQm7p5|}zXs&ej$MSucHu;G0bPb^%Q5f?juzUoaQOYy*9l<3* zf>)88B40!Hi%W<2F!?%3&`1d0tAb^?{EnYuAY_HqY8a46-Rm043QzRUNo(4W+_XZ@ z1pO>}jL4Tjj9YmlHTVu_{uPVAh5y0`TfhB{pPHjrXLJ7Hnw>1BvA>NG^0Rj9s8gJh zin9NpYWciZJ(hOx>6>zQ4stTh%KJjR3UtiUgYys(To$h}64JL|ol`~F*-|n%iqh=$x5Oc7XJ;ULE0dX|Cm0 zMgX%pD)OcM?|Orv7FxqtdL7n!`@_#Oa?d$l7LEO9lav`RB@^d6=a5TCQ?I@MD)u2g zZ&mr)tbPT)@hNDoY_I3TbTbL*rJV9hd_qC6SvVQw=}ZtQsaU&srCw{qYcWW`HyL;% z@xKlJSIt@E@yCpBhwiKwFP2tkH~&WpfWeXmGr|1S>8?zfi*{CnVP8{b>r2u0LfBUW zuY|pA^4yFO%a;Cjf517JA$cx(^Dd9`$92*0qb^l?5|rRIcX>EWgDwDHWS)-D&%+({ zp!BBHk17VjW#m9W0NppaVgWzB>w19$mpT`K;L%UL{mdZX%THVvAxY2x##qN*+0x zLW{1;Atacx^HSCS?`j}7Ly|x;BHQp>I*#_2X5gfumH6|IzpLl!C%qz>-s|fbsfHDC zwwEw()@wYS?g}GN1DRJ+zx7NEVET3D66uTW;APh1xz?`i%;6~vZkq%!AMQNtF&FI0@JOj zs;0B1rvGbA-87D{sn6-Gz@;A9Lc!pv|GJeu+3r(yVHI4wfW8SYpm+tAv~8C(V;|dg z%%d7$a9UJ1&!ndM#{Fy3(b19o_#_y-aR1|$wVmZztot7vm;7}x0d?;@T+oTkUbqzT zL~?bX4MKuLVI^N$HTb&IC;#~lJ9%tek}J3L{wc0joiyDqa_pT8sTBUw27FrfM%67$ z;|~*#+mXhj*DBWi)zwUnv~M=OT3YU$nU+l4#Z+crdPS%@LeloFXo}KlvdlO&(aW@y zk>aOjoN8i>cnMqZIW~ylx;Z|CiD>T8?QW$EuSg+rkGetnzrPc_f6A?xcJ7qpcx zZZtg?V@c(3hr<{nYsa}|*UM$7(ErO$cTc6#_c894Df54=+)k4a+jv_uTSua+Xf$W7 zuUffxTE%6MQ;hj9M@2fH3_?Ny!oRRKfm@9Tx-Qg3!hiyDQh?y*1x;)-RB*TfgXPPS z77pi%It9~;tfIjiS_uV`)%T^o_Mv*@u6VTLY(X=f-Vi`7uf9dF>$(*6)?MZ)z3@Pe z&0Eb!8)mnLO*8gUqA-Yuv*XXC#&R1es@I5^yNB~dOpa94ANpTK4ftSec{43fmhZM`0HQKkG)x4y6r7Q~y zhNW&lV!p%U=_*2t3=UR!5r;92&tSM!LA)(arRGsH$K>d{Qqfg@sc%LyL<`L<7qj#) zjUu15W@_5a1PPHM5Njr;rU6yJNAU}8&>u*WSAPvMwFL+8HQcZgQ?yN`qThek=9)Rf zRq6lyVHsDy!B8eoP=$^e^UAqa2DaYz{+i;1zU&8bVv61~?Y6&cv`|?0L27aZPVfon zbNn>EJD{VE^nMkz^ zZ=$c(ABvXwUvQ`ly~WpK!Q^{u8jRknccAiG8B!hN=)N;RVlSv7q3lyEzarzA?@#jv zX_Xf7CGOkB;ktC3LMBH}^;#bfmf1I@L& z9*0sRbR03Hu*@6eF1Un&lJicyNg!#G<1o(5J&T5Nv(XGh2uw_XuscLBQyFtK>ATA5 zLSt~TyF;9Od5& zAbaQU8rHe5`V|AVm5g0ny=^&3Skallo@!{ZOyv#b$nD^D8`0XDj;gAj?q^o>7gwrb zHs7Y9vz?>E|M)u&acPdZN&^Yws!Yq=nP9Q7Hu@-E5}?h}HjOpxh0&E->RT#b)_4=G z^ip8tbaWrnn8=C7)maGB+|k$M<}u~Ae1W|DLQPXgRS@#_5^|F4_xk1Bp(UJzUU&rD zwO9r?$pW);F506&mVrR5ENaKj#2{?!7527X`P7{FBZpO~u@2H_G@f>EuV9}nW2D## zpY3ip0nUnZAgqNU^n`r;zk9{>-wjwV=|rqz7(3J8WO5j&^-h3z!5#wFCk#^OEcx+U z23iJ@F_Aj-Rlde;2#z@-fK6e(Q4~zeWYLC@l;<)hS54~;txE+>UO&`&U$tQr5K(dH zu#Tv9G0`53BccCXIvh|;8dt&70IQ}9T;NSTcR6?7k0oJp>MQ9~&TO?@`!r?|Gfg(%_M|wNO$Q@+==K(Q zXvdU@de|e&LY36n-1E!t&tEgfYnmTSTg5f2aJB`DaUUH&`V*%)$k)hWq7o zSJ~}5$&N=B>Z_t`bunR0um6#JsX&S0IWDOY6E3DBp(2J>?v6j|TU1PC!ej(;`h169 z^3{feiIWL4)r)`S_2sxhIJB_XxSX6I`@HZ|F?%-HI%Sk)ZbWB1%o?i{XG^6T=?4YbRdR zBV0k}eBCX1QTP-3Gke$+63yk4rJXIM3t#cheA8XY5JV}wmqMkTf2aJY+Mos(z5xeV zeoMVP!);$G4Zp+{TL-7%w5>OeI8$iSRKGItI^Imys1D5ON0p#N*~y0Nu=bsZm$)-vxv|0Nqw^{r$hAfaS-mv3rlFmjbUQIc6{&xAu%0iw40w+;M@yuB}-*nN4B9KN5X;q=n}R)g|I&HsPy47pgJv3|A?PGtQ}qhbmn9Fy~B~`i188<`2kZCx+#D)yQWGF4;>=1t`!yL(k1|f6V zg*cA80*?e0NwgBsAtaT@6linas?H7CMIeWFuS~nlmDqLe=O|-!A@8CZSm4l z*WJUPzRB>TBTErCbVcc+2^TZ)%mzsQkFP=N%88T8095!af z^Ao513^xiN?}C*;0x4@5gY(AZtp)Qvl#nUpIsPLt=S*7eit|SVW(=bEmJfe7j{R%g zPAyrWRurzI909+uZu1P>`^C_hFyER7n>NgG$3!{DRQ;A(L4AABnXf3_lw^&1gkU%&nTK-~kwKNvBeDv^IJ<`a`Zg3`=#)O~5vL|giqaBc&&aTJAIT)23-L^JNa+vRbDjHJPLl65-w zg)2n|>^J_jjvShSvr%Gq7z=#Yx5l$KcrEJ#|sYK5+Ht%oK?rAe@98ZLyD04l6V zM*1HlQrU7P;MN8=lWgk!+#grz@EY%RMSEh9q@narWe5&nbW+Cvl?Rc|hU8YARhaS0 zm`CV=pPXxHmFxOrxQWw^$UUD4+mJ84C+jg#*|K-X%JFXC>T$yGTk5~NfBwPruTrP6 z*F_@B9lSY(zJMT8ZkGgXGGlLot8t;OSK!#s&0K%$Dd|*iesy(^V~jApiEgG@cM&2G zLEo?kUjo77fD#hGR%; zUS?92SZEjU!DaB+w`>8DA_O0KH8x(zbqZxFK7L`%n-THz1h-_=B3m`$!{;9|VHh8< zDf2{`V`L)4v)|R6VThFoN;WW>a5Iz`Zg#)tG}L@yqq@uiU_zM4AcpzH5Qxr_07hg~ zMo`J|9axh_>n!=tVcU%6X)fH3{<&wsd0DTViD`b5=Kv_nIHg_8D80D8lOcalxH>x0 z=n(BbzqRtx*dB)M!#+d=cGe-lviKxgAr@wqWdJg-DNaUq?H`40@5rA{qP&5h_UNP9 zFTG#zC;%&ogxVbw`-35Va&z+OUze`cSwFK?v+DgBDGm{*#=*f>`(h-W%o>YGe~FYy z7VRgep%ls4y{D&PbFEd^1+;!#^?k|r|J7o{jk>Q6J>nTXck(deA4;~d6b!4P;(lw+ zZYYmxJVmS+h;SkAR?$e(qdYVofz_ohm6rpVM`pi}U-W zG2h7ux(b3Ly67AHi26qQ=fv5RuPF^QpFuPqZ=zvzrKznYyyJ$jS0okb%=3tl={%#d z=`xAI9U~{hOrDH`2fbPu4!ib)a@2Pd-d%G$Q*M4hq8MSVW+?tJg=T*vzGZtc$4xE{ zz%)y_Z3K6gb&mA(=5mMS7j+4sV}?2_Qdr*E!}x4u1j;DOB32szF)mjf8PpJ(;|68) zR5AHZis!$UIc-5*#uu&n;e` zuwQ66?JKyPRPL^AkY_Isn<}6Z>O=F89@jL_MTRZvR}9>Z6xYc+1%(xC`jDrp(Zsh( zZG5QEnV7?jH3@DMFBR(U?gnIL%+NkN{@Z4U)k48`jL>+Gc5I$A@lqIjeNbRcIlL-Q z@UiMt18yZbbBA@Remf~qcB(61%+zAav(UyV!ttnOf*P70o8?tE0rDxw3qQz}xJkjE zqG;h=g2MMf^gcn*mJwLYYUBYdSUa-Yapry+p;iQfe`peA@ z=nVjnzglNKFE_{I?s~}}{to}vUaVaaQ)1kp5s>b=Ht$fPLzzL+P^O&qBlO;(<82%F z@7P%f1;NaOYFx~v*T>Pvu=jd@&1cPSI*2}zA+1;QG-|K=_KvnWYL8KY9Mf}|i+1D#RM^Owmn zQ4AW(O9ImNZW#mzA5^j;OeJ{{p*w{nfns-QZ6-L>9O9B~r^Ch_&YiOlRC>f~rW}r{ zU4y2B*t3??1`7wQx_GnkCtt8dvau)JM;I+gBmS^M*Ixst4e=i{6k5vuUM#+ZDM6^; zz9spLVKf_UoZOH~5}4{5L(n)n@vxr(SWGXP|c6wMF^4@6goR+0>dmFS1yf zcJaMv_wrVR$YOYboByVlQ1DU#g=FEMO>1-ViB&Hxky2-r2*Ndi9k!W%ThhRpZJ>u4 zN&X+WW`CfKFUDAm!rVGl9L>sfdP7W9d4|{6B;BJIThv+-##}1hf9c*|*;MjK+s(38 zvwy(<2i}6Hs6HQb^{>9rzSRZUx{0rQ%2%yqjyLbfma#q^byvm}q6@nHO-kWGecsf}Q@c{zu1Q_hPaj zr-5Nc_*9~A$hw2*%>V}1mooBVNDh=3*Nu2tu-RWSuj#rZRNB}KU*~T6L;({*4YsBJ zj4=buM3Z??lh1k<}jkzP&zv2iP2k8Q8G6tkCHdyp3;{02ho8eHxE|d& zcHn!o|8|#_FViBO&MY)Gu6C@kB4s3%I8}dje^!kuggq>F11~;u5JIfW!CRL0C*$Ct zM_{JXb21?a%cEmDDeF+%~WydPn>n!?MZHi}-oetm4^P|rwykj`+ z7YXsI$FDCjA5{p@_jc#EWw{QEBi7Bp zj@x?{9#HV)ik%$hDc&!1CPH0?NGb11JjtZ#dwKmK{{HXH@?^2x-O2Vqxts|kR|PZ_ zMn8g>VrE?OEm}V>`M8!16Ab)xyP)$Zp+%T!M``-IM&(WE!%x}D$)h;c>F}v1OBQ^2 zH-BwXNfwZ^s#PBjc}edE0o}h{^1a#XTfc0A&!xK{QA1Vw;r2GP*Y3%6BANpo7IUOV z#RG->lH4;JWm`5Ltbz}47_aEC!h8-pO?}@1W^8Y?e^s5}x=UNXb3jwNZs>tz%cEKX z-zPOA@P;*Ca+;&xq`ZjbzZ67IlP(z#Ub(F8T21DO!z1LMGWabz1Im1r!1`2J@<=ef ztu^v77edkskY;;UcBUinP}PmvYei|O%6Er0Z>&K4H9>XEnA4^!BFY*_rM@)LxOd@& zKCpj)Q~PbMPHV}lYVoo8g0|=)Y$4$idl0J4+am0?aCIzSyj{WwMfzO%OHVttl067@UDQuB)nxSFGDJQ z)tG@LUIX5p;^6Ba2+v}gXy(;f7#v?K5R%4MLxuzT!R6UjUOd3`F$mmxR0 z@XSZqm#O(N<#S_V1ho_Nd(E=@Xkz^rzpU-DfvYS9&s(xExkQLR>uV~kjr5=KFvY|l z{EXy+3(kvldK! zs9FZQw-*6)KkIa4h@j}pBd?HXqPsJ@L;LA5Glc(_8(Y(cf7)a$;-O&OwEHVH*qKya z8E4~k|5)DYSd^S>$x@Q8EZdh}HO8u_Rv{g#gX2~Pe?1NQX*D4kn=_0RdZ!0D*2#vqpuS_9Vh359#p_9UV%2YJU2^A7-p zn%xI9ZfdegMrXGD-B$Pay|vxmvQ@!NwGSJ2>!?e6)MW{B@tPo1UXrLC(LV{8$L%x~hIwbiC3zJw)t zPs6L|#_}mOw7+zyd#)*5JyW55Ei?C2GK)&xPKdwmYf8QpiMvB9Lt-zv1rTc~2DXGE z(?`fizplSt2T;MNwe`EA^_!wW3p~hO8K^!p!Efv%^99WkjLoel;=4b3i46$8!*den z&a}f`Kz4QJ2RLKxZP+?zQ(YbO^Zoq9QqRB;mc~LIHx!?0EdNPGJE4g0M#q~dS8_qk z27dOY41eBw>7?k#hAaz^D)xL`+JfFLD4oFzYL4R6p-|)7(gO~v*KfX~Oi=~EPXFqw zQ;0ta`1Xr)9ZhSDjs^0~6R$$?4}LZ2<4;>nE1A+b8Eu+!Nm@QqS9nbCbN?;@E|Aak zTuE$>QN8AxiGbRUaqf?7cg&-btu89dSL3Y;h@K~R$aNGF9HJ0*+!=AuN%TAr(uCHX zg#PON8KLHZ$N2{s8TZ^+Bk?IoYk*F4ZEbXH9xUEPtSH4-5f+71yJI;#Xiz^#Y7U7r zG;B}okmDcZ`@hZ(e`wr8svVRl@ZUv;$s9iqCE4M7LB$s?JIu&2o;9XmBW5o8Y=0VY z7`e({-a79NQb{Aa4Sp6dXoS7Q;!{=CN!V_^G1fKv`FiFKc#V33TwO;_KAb2#3@hC1 z0ieVd-L?u4URCfJ*3$VZ=9l$PWWv8ZIqm2)Toqf76s_vQdj#4li?kHJ!$V&_lku-K zv`!1HTo_|RerZ(2OMjdLbP6RcY|a$%i6xiBI#OGJo7^u+UpAk@znX$)k3?++qo&vI zbAa>za&RFmoH%H*KC^f~L&FU8?#4x@_rtO_mja7I@kgsV4GW%M`B+NMnn~6ZA7DDc zGMf6|26(0+y``v;&tA-xjw+Wt*%OZ_sm~GMRYz?N9Zuin-1dd8+7DetCVmd#;31VL zmPG*jmd9705UU!YxN!;$asy8}9CzrJ!eSDh_5mJ#0@GC)O*qyu;dlLiH59Jzsh>*X zZ7hIN{g;5p#%cpaaOGFWd~m5f=#kWYJn4Kl{>t=Cshi8@Yt!6S8ZygL3F&vx{2gaj;z42|{)ag}g@SvNTIt{Vf zGKIFLdFTRrgvVWeZqlPii}YNvgTtBp9`?3n;4cJ6wGJ%fVo z83}bff+bE~7`ZvFGkN!A|E^lhEdK;wk^=Orn?;N_F{Lm|-y&iL(vOi|CPWf$c0o6Cahd!B#Tb7>pPj}}%RH(5Pe-97J~EU2YBRD%T zR_g??mwq=331>S~xbH?y_n!&e*P;H{-|sB$+6`;vZobiTl}8aDYdhkwX6EZ z0x8_2b-NftP88%2eT`{%^=3-7oh2AN;0RkD#+5yiQ#wMEUkJ*TDs3} z{wNj+6p0lCeTjGf2@f5bc87kw$Q3FeOsR^|tD4WwhQ1Fp@gcydCfY@^hRydJvaQZD z1=3oE20#4bsKOITpPEQ!>!sH*{yOZ0J)gm0l~dk|zneYi$VfS-RpiWd>YTP9*t{)f zdb#!`re3w8KH>8iS8KPGhXtC_=$Y>RGIOBuut zS@32zLg<@3@}awonseFw##SC>Elugr$!lXw>#Iw#Y*GDb57SFSpkdliI9=u@%exM+ zy2$m5f8ogW%XGK%)J`O3-F!#(5bL64WP9s!EUBjK`$>Rmx{jHDE*MUGk zGn6$NLi7%7RuN>5peku-)|CSg(mz8tYvOVf)oh`jxiIxCa`8cD3BfUQZ{TVK?mIhw zka4g|wwmnh8kCbD`>Q|zpPCoH;R)w0Mt4qKMx72XdP$1xO;6gEzx?gv{&zk#OVn5V zMCI@qvxT<%OCob0`?g!=C0YN4=>>12=`actKDMzjq+vG^nqmwn$kntSK8x66SZqzK zx|p%9itV86OxseR`n2>< z1R6qZCfRb_tcsu86mA-hc zrQ*k$?!W8}x08dogZRg1CDR4~5s6n@CPX-E`b4|N-IG1Qh*HFeTBOzruiS&z zbd+bHo_*|HhU<2qNpUhi6v0bd#Dzb!gfFAQu72>%E<|)%nx^<_ECh186!r0YYd5%y zA(pvtxd!XNoI*f6Z>cq)OJ?fqv*Eb<`M}kC?C#WUj`=o==2yse3bkfCky6IbU;atL zZ1xhravWcUE$b~EGmPD;leFud`JiKNE$H&+C)T-JnR|M0{M3Jun>Y}0nl&zXSWn8p zPm4IRS+XROZY_0hJ@+`a8&HYcE0Yj<=J#p!uR1Ss5P0DzI`udFQOTcK4;92N~ ztmSVtwm2Q|UR2FX$(K+`+HBbX)~a7kvvZGKxZhVTR7WTiU+?$-;^w&U>^GW?H#Xx_ zHnn}%F)vi0!uhL=yE)O{2sgQL4S9$}B2(p20|UJgkYZ8r=}Pv9wi}j@;}=}PHB0T~ zTA&C(G$V0li&HlR8%sf27MAOs)Xe&9 zaYCo^fV_wIHEN+gHijc9YNmQo|ENOwM zFSNcgj|EPr1*q$0ANi$`qc2c{rib3PJwO(c5x)))~; zquu*hk5bo_oU|2TD}9$41dPImEh&6fs(VX<=x{WsnkJ;Z53@DmO%8Of1Aa|Wr@C?s zuf5+e`4;;~3twV|ZB$ue&9;^EW4I+03M~

~fhp2@>n=>dMEPM04N)EsZ~PD${l` zq9Q#}%BYsZYzFAT#qRB@)FUeBb*s0PU-}wr9BxZ2erOtN_LFHGfc^|n+Jm#JD9nC| z6)HOZ*7d01fn#{*lVv!Jc~yFkPHQvNFFj`_Zkau9G;x5hM8_F-IjSCesPR)l-qM~$ z20t%;-I~HUYP5(lBydMhFE@xVc>*=IG}D}B7QKV(T$;~LBEFh{EHwPu9v?4S{R8%A zvknKff6%zTzM4(~pf5ZDcdhWLo5IhTfE;$SipmNyMBUn+Br_^yi zHMt#S!*yRmkJQYcRQV2svZyt1P;DniTRwm4XPED!KMm#s)=jH!-9%^0JGG3$>)Um< zmntfQ%dlL-deuWII8qVeB@eDu?+1*0D1`z)S0#CFV)z7_S=VwWA4(JVv~*t6A6VET zRiBWL0huv3(PN=QQx_hIscV(z_PRxA+mFAw_j=V3Jc#f*vq4>MahML8E_>GM`rKc_ z+lFfApIpU%xBk;j`cP?MZ#+xvC%VgH#QSi~tg^y4@81E;z{PrGY%$IPGE_4_fFNH@n#$EBsZ zx^D{3=jZnaZw$%#IDFJ;-1s%-A3#1eW!2Vsw|f|Mp*cz;Rxz@S}6D7zESwrmF+g2lXYqd)yNNSQquxnWcJ6b920AA##3d#QYP|;2MAgA9>k+R12#PliUed}YE+S*T#JHtrhCg5;r&$&Gr4-ho62s#ESH;|5>&=O4;7@C1^}({t2Fj!Djx3!y55h9 zS9s`jS6$WVeEhNk?@-NLOT86ybe8#1u_2VKl|-`WqQB%J+(j;{4TG4x2{=KTJ`Ozf zk8EqQcwYI;b;qvzG%jA#Y#KhV0N8Q33#>TeY@QInem8E-xXd@6oLr3qt$XEECSl>I z&`x}82>5N_)h=|@Q~ljQhhY6X={;Ya>1F+@VM>j;6mfi$e4lPc zgCBadI(dIecOGoNm`3E2rAo6MWZ_jd5dVFaJj)zs<27&jS0d~xZr^#MwYsWz0$BndSnr;;e$Q-FR&WosQ33*@eegMWCWa7FT z)z);gkD0+8>*61ZoEE$6LJQ+%-PecTo9X5F*p2gzrBZva6NU;9>OY>Gp$*$4jS0;l zr{ZQj^}QLK+*@8x@6Y|j4arpol~StK#d?a{sP;kd-@yOo@2$bEmEA?U*Cm%1@G7tY zvq=e1k!MB24V^4epiZBOcV({3nZI&<8AwM)YB6Z0O5sEp=VJLGu-6PQef2S?oYu6N z?yf)d`POz_f~|@PElCxN_4dbg3JK^7lOD6&PZcq5pSfBXSqYsfGq5ttzT5RJ{uYq=*vSKywTG+t z9&=Y>)cH-;!e>8k6-h4y9P6a$i|Pd6|Js zZ~d*c;rX7fCl`a!(OQ^{$)oABBZ6MKAEvS(iB+L|^Z%g%SicF?0|5ucU2H)<*@U;C zkz8%2(o!+s_=iC1MSOG<^1ds=jq4LizN)s?+v$>l;T`S9h50dX5+OM4(K&*KIfXB; z6*1n->1kBd8|~Ir1#1se?lo?X-FUjT3=j`@ei)R^q>C{plkh&Ut#6n)w1$X@gDQOM z8vnU|ONP9=nbn0`<)MT@X+e|N`Wi;?%nFNZ5*67 z8J_UOys5j-oGIuq*=2MCavQV}(mDLNx3lkd`=@*lrWi--J82VdB(pwd#BO%rp5l{Xl?W5}f#ylDJ!}dYO{8>Sk zcYI*WPNATU(?pupPTjM860AJ%RiIa7y+4`kC&MSpPt~@9{a9Pfq>RG}y+QWnBw8mk zg?yMpX+{s&SZvzhy7ng=5 zjSdxID>IlRo}0V?Usu)2Qd34|>g`vN+M93}@5IUZl%C~ucwhFX%;;~u0eeuv1Gl|+ zbrfCav)^IlbHD`ny1K$Dc>4fRRR8DWMrN;R#KR{GDI%ds%HiIViVD+r9n-NN+YT+K z+@i*qS@NRF2n0cMODhb6s;iy2OvV$V1(_crMqh9|VncfTXR(c8=fj1=#>LOMsY=Pi zgAvKo>-^_fbYaBwNa<}JQGFOn*CRg4b)ebJVW0@Xp!b>T;C3d|9gx&mtSN4H9EFYg zjEI(yM1+WKqgg&wNa=AZN!Lv`xB-}v# z7o}ID4g)SyBpWZY0elY;d5}0B1Ie+fFv*4sX=w@1c~$AZcN&k+YBw(ia%MCz?hcKU zjXDSA5vkqMS*Opv&+P}Z?u%9 zKVfaLq-5p{7&=}oL&>MOkh2Gu1C7TMmrITNO{I@$FRcFaaKWADA#ZIXI56qVQ@5Z# z<+sepGFLsL1)XJZ?pF9)w_85g8>y9Tu$n2e5OVevvE)tF1Eka@WE@%ShIN8GY&1 zS+4c*en&gB8u>FKwlWl9*q)p=mD}OcLgQiK`Dw7XAB2tG45jqcW7hn2_x1#N|;LzMKqz<7K0m_rcm`-4P|f@99RG?KP-{fXPV$N?SC< zyw=`2jtW85y4HZ)X^*^33fnK5HbfjVA|`D`SW=VIJ?K_;G}cjL&QTi$SqSV3&puW^ z%4??o0PMyCG~KcyB~-`EwC^+C)zKV4l3G4R9?8 zyS^0-2GAh>wE1>i48T#(C9LK$A0t_aGV%tFVfG)_&simcvVeX`G=IEp| z0|42RZUYJNfcG>S;)C$$5;(TLo}WNx)gwJew}F`q9YgxEv8PHt?ro*(t7>jZ22i%a z%Au%}bqC;7YvlSLJjN^e^?r34a`AKGvM^+FY=)<_u<OvWh`@o7eeN7)~ac>yRRbe=;|ct!rFQ!tZh zyPnQfAg!S%X0M-8hRc5$Rn979%a!X2 zS6W`@8&q@&j?6Pp`u51r{eCajKhs?hy0|~pV8*= ze}2;rVf)a)hOibXX;{frluHAerwjC-Z`ObGtQqYlbWc*MQsqyiD+jA%Wu2SXK4_KD zH9ryW^qEmF5Anh`Nq(K!;AiUVOes^Jv)Yqz`%es5Y6XD=TbP5?VEy#Io?9D@;wnl` zr1m6;&;MfkYjA{8N90$VcCw17te!`md|#Jzt1r;Poi`Te5+8@McDShnqeQZht3(A} z^M`|BbI8M=htn5m&@Mr*t~P&qItjdli7QEeVn0_r1>za>6mn7JrMK#%Vdd6k8|<7d zUZuCtV?kEy%f{6!zf!ltTL?voQ^_PtLC3I0Z(Wr+Pfl6hBbS1K%xYx#Q)nx@_V>4y zz)uVoi^1+YrQh^*0gM2pLKpN41)svLHDPMHZwqKn*b%nbQg z)=6!S(guVkWtTZ}=((#~=N}9BI+fRmESuqb*y7Ni)ORTi*w_G02aVJ*f^%G?y4ieB z_bZY2lmlf12=!VIw`@RR#%n#!j7}P`LW8y!X^WH|Q)RFMU6~#7V@Jz{ncQ3)$ z-!%{V8QOogyJu}pw>nMwDDtJci;NZ}BdSH~kb`0@&ja$7x zf5dEM!%$Y$J=fUbt;ubHH*EE(s+T^|3_Wsz)I#l!!MR24gr}8gpg_Bf6hBc4N&taG zc6MECi-KlagO#*@8D$F^8Xa3^mJSfsrR+|ve*Kx=QNTj%%o%1DaMmD z?q%yzqO7tEr8gJgyBVQNa;fI^mKLu~Rou%$aG*2;?O@DuC zUl;cQA%4|0P*x#-mWO}VPqw;uZc?D%iv zx-x3NArqnJz$)^aP`rz;HRUW{V!-P>_`Y*Wr1q=%mw-{ktX6p4G;H6}g1v&@q~Q({ z%iav*YUV=6qy3t(W1%Ps4u?-8Pw#piL+B{4VA=5&8iRUGxlp4N7!jO9c8^cnOudN)2Zj)6^KFt*#6Egv6D)^Abt}MrTxYAukN0h-87z)!MftU z)p8&Y$-Fi>QszDaI+DJHbU)^=3}}eT-=8TNbw_JIMcs|+O3By?e-XA6tK> zE>=6f;nL)UeBRXw#W2))@!NL@&I3>Eq9JswelH;q|H10&YTd%kkyTfTBsJ+~@#L3* z0l;uu>+*1>GVsST^Usc7bN}z2o5YoqzdCmP5dw|sFjDx%5@!JyUURk?fAu(*(4-nGMK_#`5gi=n@#z%D5I!{FbtvSD8d3f+!PCEEl;0M z0PGF-ADUYvR;sd%z9Pz|y&sbk2n!lJSHWmVezU>;(ju*X|E0)$X~_JUHGj*N3nhm? zkqmBStabTw%>KD=vQpwj{~CWX{)^rUx^jCd1MBq%Q(k3hl=nL0y&cE3dF96t80*-z#5dDS`~+$BeC?o3_7qLbfR)3{y#QDNtP>4>0NZf@fE19}7%sW~$}I~cmTOYMn3 zAv8WwXh_3HXnn1%F?3lB3|95;231)#F#briV_0etNE}SkbkYgWF<%0e?Ub#*v8bhE_OSvW;s)n;0e>Dfhzc)6e!f`}wE$wu3G(1S9&25IEUAwFyk zPuzC~Egn6s0;}VQa4-|Kie5dN2-zy>Al%jBv17fj3mu(M;}feZy|c0iq&mKWdn7m1 zGHp-!=vDpw4T@n}!QCJ8a#yU?^8=F|O+AwF={NOeLmongg5f=jJ2Nx8*>cAlY5Tvj z(!)-L)`1>08p|-Y?^e^sv6#B1nhdp8tg%vE2O)Z*G__B>RjE`r@Vp%!ulz9Fx>AEW z?zLD%QGB=X5Ej2QgB#!y4ddiW)vE_fD)pqL$DR1%f{k7S`~QrRARL&}Jk6xo2PlX^|FSmL4336-df^5|-U+-FY#4i?wRDDLninwq8Ai%+*K%lNe zv~dgL{tekNdl9{Iij&upCj96=xlc7F+0xgaVVw~73g6@FQ65NPAT`1; zX;PLg8!0a@owZoUK1c2vS6)cOo50$|H!#=5XQ0**4VoMAI+OM`nJ8q;wdNXArJI;?E`77<*9Do@}GrF}~mXJxSA zSAX_Y<{hO@p!@WGww#OjPtH34Bq98YPgB3>#sH$pjr{XB(f4@j5=eUZZmIB-SKK^} zR1VS?9^m;Ap>E>!hEe4j&j;N1yX&WpU3Fz?NDtqlFov1ceJIS+EE-NrX8X4w@_WnE z&(R|S!IVd`^|(>lIHt6RFvS`1jx+lm3QK1`y(TpNkV(VWYZ@RTJTyL6mbFk8w~UEz z8`l5%j{lngrRzB>GZ}jMkmU0ne0dxb2q(EtM|8O?dseJld?6o>2*gY_BS(1_;6#Is z5y90CI?8tCH<9Lx#1kHeOiOrMtvGwuSubCE6;mG~#^E3k&uy0cH$i|J_RJ|JPCDch zQlSbN56~m@WD~7dR-5y%H?*i@o_Aq`Url*YsRzRuqYPCa+d4esbx%OaIW<|VQgJ`a zxP#!J@jlU9ss!EPk#~-D?hRy~ijs#YpZa4BJTY;ca{gxR41LsoLmcMSo!X+@4X@`t zv~O>FvOz*dM~wH_-xueL@IEK4)t_nrxD9K2?2)>ii>k3!WyY-{%Fj8OzS|+3)m3?K zpvA4U#6-RjN{M9|xMS(M^P0Q1;#)Yhh+wOc%&EQ!!-jEz6a)IyHB+`y5LKE+PB0Xb zgxoj^dh$pmaS6V%+H?EFY${-v_lA4oi>fCLqC?V6v!>blAtZQRU%@FNkkl9;?6;yP z#z(fk&I{Sn5FHYy3lCF($Fd`^Z^_g{veM*bvc|!gzSfH-YzeFGWS_D^L&lV#H0w|D z>{UnV+IBMvZ{*xEOSrJlb#;IHt~M$;Bstdm4XuA$6pl;AE=aYdbH^8B0@zei?Jid% zm>x=~x&3WWd_^30N5!hb7!b#1LOl9#SDZvS;^pm~&@f#iq_mQO3Z~YR_aH@RN6Zs} z-b#2J(z=`_hp#q#c<}lljnb1(u?HB@kVSfv-ir*RgZ`bxLZ$OK;!on5`M>xDB;W3U z8CKkFbX9yRLRhD4xha^uV>1e8^6OvY<~``!rJr5t)^Y(J0Mh&f#&kHOOc^>}+#f-` zW&1(&>N52Y!}#eNePt%GeG-&j$BDu-7?;aBLmSBAsXGh zwhe`akL^@M&SDMtu>vg@*P5BO|0vO0j5Qi$3G-kosiya2wRH+@M)rTnUE8{bV@_V@ z!xjMXnl!CEmhH(};D^jK_*hX>`}!+UJ9x3;gV}V4Gd8!O(?A93Z*=qpfuGS?V*gi5ki}jw?ZoHHobL88E;^)U zvnMOIq=$@J{6F;=p)Hm*QJsJlAabQzdj+irpX@Yv1$zCr{}BSQ1J-HkOKW{0%&8?$ z5ai}gHL2?J5%Y+qHnDw7?{EwW$N8xiUr;4+Z)D)1Ny*%a*qmf04|Jv2q+3d}Aiv$)<+l^NJ0t82iLwO7 z6u3Q?a#Y7hL$#!W>OYFg+R-y;1fi2<*f4GxSiQfZVX|;Nepj`u?okEzXIzXLRKmQ` zJZb#WF5q+bv)`EeRU?y0R+Jwr8O?N_C(}V8rvDgH=7^?kfqx<*{h5^h#a_b0q(?0e zp^)8wALh@ELkF)xU3oE3Whmczyw$kvs)q8eCTYy~$VM;DaRKRaK4>#IZ&XYVjbjdV3#;6`pH0?AOd>6G908QNgBhxR1}f zXj}!M@K;Hi=~vrX_D8!Kj$Y{#a(qUHEG<|9R9f3m&xCYbRJOd*6v&0k)2O>tf_q`?nCig+y#mYGkx5@J(!9Te>puBSVI~gHgGk z_)o)7S@u!@5e%j(9{hfRdupId=E;z>%x?WFj1278d{+$C-X-yyOG(q{V(F>h%ajco znOU=A&C5Snto1e$3_ar()W}7l_>CUT(|e`CkNq1)`P3apEj*rxz6(Ib8`dmdSJK$A zs_1;L4N=AWM<7_9_WL-I8>`mLzG;-fz$|KfqC+zu8#96B-3TFQ7lB}4<;$sKGG!7L zD6*VesO|e2Qc7U9*qtd-yRLN1xNzV>eNbL%#dG~@tC$`nr0<`lWcwPMYVKk1JnDj6`9J%=x6}A7tUS)u~|2 zbV60g=#gHy(b?x1c!B3kX6|@>z2EUk_N1+AJ0zV1hf^wMoXoIx%&s*7NaXGP7+v#GAT`}bu)imt;q6pLO`Al(97|Xo zU**;daX&VhF6ZX*si~iLJw=v_1&QEGHY1qP=|OJ-+~)=V(IFKQ$WmoFayORCNR;X|5LIz<1J zVELg-av>2-;f*DujI*4A^OG$V2ViF`cqh;RbW2SSqa`H&gFvEstz_>;>Q((*4wWO_ zKpHussIKEd{9j!qL;l!ua(2XKBn44eeXl_&jyq|A4f{!PFXGQ>-mlmmumz$*V@VBl zd<`SkoYkrG%?T@(bbti62IEWH!OF--x<+-mp8_e!=WkWACvu?(%F=?r?JBC_iMir_ zJoVOuh4|ud{D@Ba^#EA)a(}JwWmxD|$oBhfwJ{{k<{?DsEg>H0Xr+kIzp=Ik`jgQ~ z;X^v}l>J*(ZU04lj(5`E=2vdhR<4|ub_w_d!tWW11qFSUzA+I;j;sG_+yHORL zP0joC2+|l8w;x(+Qy&Kz$*=*0hVh*kBx1b;6h zP^!=Wn~1IbPZK%xz~2r1KNFVeZ55YXLZahN%J60 zzK3hYRb@J#lJu=t;9KD9oa3yR%}(!~myq3~K2QMuxVVK$x!3AcbGuhj`?Cb%){iJ` zX&&%P*Nb4{i)+czBc+!UT8|FRy3w4kP!;3BV}nYSh#R^2yJ$y$;)FZ#1%dH@WZ<|T zi2qGfvoGSd$hXfXBGqAI7CG0Taua5x*kMN}D?Ab)phsJM7*COX zt^D|5D(}w#llqmw>SbH{LBEm=5km0^_p-8DYWIwg*V10Dc*fUonEOEV;&B6G=vckD zph(j-Xvs^6B2Jr>>b3)z>Zc|)ny}%a^`8h-o}|*-D4WjuirS326RSZB0!Stuw(UK5 zTv7snN0G)ZNBONA0u?MoxVZe?D7vQQ3^hb;F&PuyQ|rV zwDJh4VcmZ0f9GiO%9c=GIgJnSKG>n1_#Csx+p>J9br1Oee&|>8nucV$irIw3sz7jU zq`jEmwmM_K(WZvc?>0~oS9tnBRQm%jZry-DR9~vU>3K{@ql^_`j&55X6#c#Nb#;fH z^VfAp`+tnAy=vi2C0PIt>EzyjC)vArw4gu;D_8MdVwkf=Di#6eF-@LI(7{X~t8+Ly z>1X-_7Ltly->{9QZo3aw-{<8H+IP_jVX8!bLjQ3wdGS;M3-Mc>0XxM>L(cZC7mysV z3kn26gd@igUsuIyg{YX0dJF@`R2P$!V4<&^p7=hR34szRjfcr_{tY;NG-)`sarqiT zC-_fZZnBjflv!{Cf|43@{>jJi2dX_(ng0jSrcQSIwWL$E{)C6;swGp5D39~w8arJ) zx01Hv2NsdN4(*xE&`%+buB693tBraFMqG__5LNO=v>^U)mN?G|!a8Xk@V|vnpeffw zAOio6U^=J0$ziI$R^}Pbk;L0Ihn=XbT?7`7LPmvE-dN_Z&Ji#^gNQvpO9taEOS27A zRGA6$^6e8tR_GW?eF;`^`2Tjdq#kcZkA@NnpKyj+BaEeg|8_&Hxoq&Xe|gnoXCl>Z6L{>{&qZ1C@-oo5 z2Xrn%!H&D0vdS*!V@D?gMSG>8lv(HVc0Bq0H=n|M*>&!G{68V)GcnLhC* z%`s#VP8D`K*cng+UL)E3dH=D@R}*aabjonpT2Hr(Swloo=`_Dmjm%eATbG${i|GL; zGmIbe;n51HTk2ms5<|ecMhN7dbJ8Gw%3{k_`|W5C5?u2OP*6#x={;j>7P2NQ=<6lNx9_loiZG%eHy z`wd>%%^iWs81ceuKL&9z-yS8#2(0MP${Xpr^qmAN@=^^bOjC%4R1usv$Xapy*mon< z)qQSRYC?K*Zh1usHYwd&KBc_WcG7}g<&ZeMS#+%tU;|a|*c)k`=@OeFMy0!NcKSq> zIQc|-#fTxqq&V~p02RX_lS|i#c_;cMh9oqpcM`+5$uj9!k&k{!O*+y!UP}3c3FnV3 zeKW6RGA35!{ra{6Urg)uebT_~8^k{}aQAWBhnC6>Y>6R#hN;L+xrOQ>X%=1qin?ok zBOC5MP+ZuXmk$mMk+<>#fK85!Mn(wV5rhx|F@D-cAnYz-QO!;4%k{rRxZ{o0of0ns z;x>VX#^*6meyzE_z`uIuTWca{C;2MHb^^tuTjzDWqR)S~%nCi7LsHE*~(usiBRv;&^a z!K0jG?e}g)48t`s6tVw}nW1pKG|FBwwwJ3>&_5>{xDF+(IL8B!7F%A@OY%I`NsBoIBm-Jpx zpQaxZq`|u}$r7kVB}g0C`VFG(A5@(HQh{0%#yiING(2PqRqk`&Wb-y%KQr8fA^EOW z{x~G3N7(jpUPC#`Nd0E7OXWsWOb#RWPynO?$1+8=M7_dz|BE*S!192ur-EI2(w6+GIl*1!t+nn{AlI7 zd(c#d&IPLp19j5C7MbCdAv41-cLa>05&+Sq)J*zW;=kt!f=}JW82wpr@$WxdF1F=M z&zMOT4I8rVUn`>hM`$W@Q6~6o@lp{W5o73PNw!a@oKg+P$YvsryP9S#o7QSC29X1j zl>Bi;?Xiw|9~@EMMea&ZpPb1{yf!efs{@%6XO1HCAB~$Q-rPJC9oU0%jQe^q+$~)-Z|A3k6eFn?!^Rn*$Mk@SZ4b!JJ5HVq#aElFev@@>zl2H#MJk|)oe!mAeLR)7GdYc$FyIlLy zS3FdBS?yU0Q8Ed?(w(XHzOMHVzBNMuOjrA9E(VK-{Xlo0qu?DYWtbY_}tKa~b#mq!K zD0J*Q*Nfh-YUQ?~eRLW3@r8K24w2F>JTIE1ZOhIc)H~&046M*!D+0=i&Sh>xAau`Q zwWGx=`uvYJ`fhmEu^4hD$KpX~afu8`X1(P<8zh;cKZWCl%gsTg81R7GQuy?J+)C3kp830+AE4HTVpPnRJcBv*U` ziL?pU+IoKTJy?GX4xk1V<(GQyC#qYj4K{N6pP^N=N`_s_oyDMD;n z9!XZUr1SBv%6JnOZ{NS4QGaGT(Fsl*1L4Eb+Uk@%%&pJJzQqEAxz^${H?s!BHo5qW zE<0i9xJ)qcm!#zagJ|}Gy}_5R=Ka(0b|-H!;Z33M3%oi49wEf#xhBNS7x|Y{)ygTp zL`Urfy#0A90@25*o}74WK@KB>+XMUJRFx+Y;A0Upw4mLdHEfnd3>UJ_F1!3oSe|Rz zF0L}r^+ao1S=D`lTDnCUsC(01FCO&l0YoJnXHbo&6Pg?$XpOmFSX1z=>bM_QJkz`b z*O#OM&3J?DRnP@bjV+vNu8}&%Hu;`r2P*DVvIz)G7P`ZZ7Z#$-0)|`L@|3N*GV?TvvH_h7$bm)-TjZn4gF=Lg4?dXg%;2MYNN(aMV86L>Q7HkosIDQgFkul zgQt}qSn5OX=#t7T9b~SNYT8xPY#gU^v{=F8d#~r^+_iSkh(D{1ou~XxmKOSv6!Q?8 z51?E5dW*bbd6E)e2rbiSiEl#hxsO#E!SoYcM? zv-ItNTG_D9!zp&51d{&may6*pF)9L|lf|Df_rC!Y);~>?4rUiB+p_R>-3YEWU!C4C z?69bPBMSNFi>hl@uc>2`f&62!lmEJ>3anmXW1%N7R`7KNTml|DUf3;iJv=N_{+W2D zg9QprK<$b=`A<}%F~f$k9y#uFELh$#C^M8N|8u>BOIAkObZ~pB01BgyA+XzN8G5zM zuF-exnz7v33CP${+O15o(ZP0)ulf6Koq}gcjSWgl3>|x10*HRziYeh)aA^5Ps%iQp z2rUAGaiNaX2PW8UdU!@fU0Pe8F~9vbdw#wAJTwG(xnp{|^>e?CHwquZ%X%fr%xPv_ zf3)?B8vM>r5=ZdCDjZy5V+iI68`^xq*D8%owy|#O-xe1zSWx4=jqyrpyIq)7BLkDk zn*!hc0Zw#7(7D#w+hsg)_Ba1fHJOIA4&@vi7d4f8$%{2!90?QB`y1fG^>SttPCljq zk0P1Gl5aFiiEo@-Ts#IdO?>}8?G4foudsucKFj>M7`odjH!vbRd$g_15}iU41Hw5l!QAD*IhbF z#3oEtl^9dS-tfD!qf}%=j;jZ>TIzIo(wbUf{0<63_l%z2M}4Ue7?fc5)8h#y`B8AR z4-$qheXDwO>+!caF<9D|zYF_GCkqK3d$5>pI^iF6oOzv7YFG$>-VWEuL8j9k8Y*qf z*CsQI6wa<@S(T|0PMOJ#FJ9zMq)(d{map^pw|&CdSdmFwGanahhz(|*IqF~ zQgN2N5Gm0h57C5Y-29Pr^Yk-z1`W=t;E3#xnW%I5a*`OR7F1dpy2>RxvHR51&GZgj zllLA=Aq&7@NbO!|*zkFE;qX6y2^>s`5V@cFd<_!q_$xT>!dK%Q=+kIUK<{6VQ$ys% zUUL~J2}D8VUe+WEA)(oi9oy%4q3oS%t&c~wuhvA9d@fefQ9R^|qy}G@{zL!osLs;` zb;knD-^gwM(2$;rb)1WX_gb%pi+^eoD%yEaqt(*x3y*%$aVj7i9*c58ZInm9P1)JJ zblB{f&qQsWM*)p9yu7;1MAz`;o7qXIu9Nb7wXDa~yrF)V-}p(tTpRg%zs96+!md2O zvixU-AyTqXQGbEu&fETR!)P01A4DNW+@JI}l#J|mdRJGHvmcPkqx2a_YJb9;MA)-> zy!GJ=@64|F3=LnDXYZ0v<4m7!fBs~*tn*Pl-V2LsAbxLAQuwhw|3kN(V*$C5d_>KV z!^U*}fOTyDTC;yvY>svbp%>R6pQ=FmvUVk;56>ACj~C(c-(qRno@VABdk2v~KP^+R zD`$6UIumdW2)-(rXGZ`E1oW|d6Bc5c$p{|U^5!xu+B2vl)~A~I@$)k>kc|klI<4SM z?C%YF_I8cl@*_FTdq@Qx_nU+BO{c1l!#70xa;8-w77XlQ z?Des1?ASJX*`KJUHIlDJ7(!WecQn33W&N4QiAQaUe9H-ygv$@j9hVq20(JZNVWG(2 zK`zKOsXzdP^43VwdS3!%Mr(uXZxr~j-&6duV{M@XkKf}K?P7JZj_bc?D{q->PECI5 zlZidn`Ma*7rEqHywd1%>)Cd52^`R0BO$%o8wBr~ zKEIX%&ClyHjI(aF^WxVa7GnQ4T?f?AZPJ%nu+yvLKgV7kQLx1k7#8j}_G_`z6==O$>?>g_>CH2#Gm|=$Wp%|63^;~(Ms}(%TMG*b>*)IN+Wz)$ zW;ldFF7S$sA-1Q?BA;R6r}$FxEBf3Rx$=efgVjjcqHlq~^lG%NvK0Y6{CNb4^FzGH zw=MPxO+k|cU@o@u-AGx!3u|&TCqDQZeQ)bVf8RRt0xu*&;?SE00`W2Pgd2#&j{Vg3 zenuh!D!*sS^s0qK*hAVHq>o~_o?TuDYd$rTXwOGmeIvfV#%C79Hy)4VdLV zTk$EGpANv2u#~ZRZ>*{5taXAH{pa5;6?@Zauqn&0B+O@NG@$~6D2Bzv2l;@2pR7g? zR$1uB!O3mn6KOTmD+V_w%n8#^#wusN0>4Gefv-D1#mw?0*aNK+hXY}!w1j4-gHpY8 zu^LH;Z)b)nuqQ4Yl?6_ntp2QDugrwEPb4KJr=^6H_ZOe1BTPEIvY!9` zMadt*9}__ex%T1e!sPw@fCgrMjMZtwJ)-!+@nSJ#Ri+0lmy0#i=PL&e*UbG+>sy* z>vNb5*brYfB``@pp_=ism6t*dhDGAPh}sS$hd@FCiMXpCN9qvMrp`SOJrC5qZ9C!f zk&oc<+beh^A=2n5$uvt2pV0RE7C4>C^CuN*6h8EK#Z?ot!lWuHK;+hUSmk_w&!DnJ z(@b_OG>e?x2$X+#;EOA=(F+O+PD_OlH`a}~(mr?L-tTv%io+wJ#r-s+aEtS8D``If z;bg7Z;5gA)afeV!4bcZ*^Lb>xm2LFy$C)|1)o-`eSht2^&17g2Gzqnvj7FHSH(r;S z_%(b{O!2+laOPd%<{T3!w*)xE3cB-v3TQ(I3(u=`KvHB~A_Kp9Ybpd*f3gZWm65Wv zw!YQ)3<7`g_!jl%t&CF$^wl4@vL3EK+ zr^?IX+6Rh5%&-w=Sf%9fR1F)10G}QtT}-}y<*!QUsBVaY@elZLK#GBs>f^O-V5*cw zrRe)@|K-OxEUC8N#&j1a9uLdpE4@NKF;30BQaJ|MA3q*3&QJRUIK# zX6w?dr}4YI_9WX{(n0O|S({|0KsMiqs7T!xJRRtDf9|a?&|+_G1|Refx-DumoTs}@ zCr`X@TVnL|)hLrbo-|-^24sQ>G-i&H9F?eoD@`B3!~g3_-@M>l>hJlF8W(p+1^s4pGn^qJvlc(tDo?O5zd3pl5H%y<;rl!38g^Q zbNh#}-Py>QZA!sNf!;mixIRaTmuzgRm>Y4-yX;hZ zii`f=%A?>$C(B$1foKycd#|%gt!yoqrJ=8`(81+jD6S5Nb5$c>mGrsVq(Qz28PtJ4{tWXdtj+GrbwMm$nIq zVHE~Hf$LhDme7b~QH^&Y0|NtFH*Z7eag0&8s&?x2H%1OlLPX8&^XJ3OIl){tk@#yZ zz{LALGOy}nW3wNQ9RWdBO6flKCU^@kA?i|Ba#vp<-duj)65=DP7C%%tZ*)J54t(b*>))18_*6`7!pa3X%KtQJ; zy#jQf*!Xyfo!^Yv+1VBgcgL!nOrID8mhMVd*?1f*Pu|@wXPH|ehAWMvJ}4u;@> zX_%l*TKjvqN4AD1nXQi7`jV zYm5q-<8my(PDWAl2)J0uV<3(m!XSQ_>dft7jDo2}9P~k+h~O}emxG)N+{eA7{f>f!j6w|;3OmB$lm zX7zJtp|jSN0Rj)W5`dFy9OMo4i|cEo{}uY}?4UF1>ZaB8H*@a{H|*AAUZ6kUaKHe? z9XU$hLN#+DV=qDzKMq*<>Fq#H`on&4097*58WSTUK~T)*vSd~`TV2-G-xI8wj{9(BHb%B|TWHk+i zv5F_*BIWOtChW59xUzRB564ePhfNpI&rq5it@3R7>bg<`<2RUnMGcQ+DIL2IW$4)r3LD^undT$@UL@=|{$6_!@uWV%k{R!uFZ7LX) z)nL~n*1M1KKiNy4#EDr$$BB=hKYvcI=YuShQ8q)sHDADUNf@AJW@g~6_Wb^xC=8CY zS{amG2e6B?^u{Bhh2D5zYO(VsKYAs{c@) zUHGIugU zOKJSGpPh_qt=v|l7gdQQ?TU|4fm1~AWHkkOfGJL7|MeGzbUi4d^TjgIN=?AO;%>8y ze33hTp*AcAHM_+Iw=!s<&>*N>JYe7KZ~s{-R_oDxK3_*O-8~^-y>;nO{ z4mVdQsqSN2K^?W%q}zKZ-*e2L=t&9tmgeesI-Cqw7IX%h>eu`;PecHu{ZZkJP)xos(s=tfaWxHY}xkgJbKd zQx2&ioX@kf1~HLx}!&d!TDl-}cG#V&VqawLI-U;|n%+SNd_Xv5l2_ZVq$l zOM0%7(@UdRqzGn*G_zxq9p#z$&B&ooh*F-CjAwN_d^s76`tL?_#VwPGt`}Ck`KK@K z8eUlLk5w?$_rXatlAs}|pabm{#F)Oec7^vKHwTGzatXfS zXQV3)LB3E{o|j(uNWE*VN%tqID8^+O3}dmJ6cO0q$&{QC9rT?c>x zazy|CE=MXSEG!J_ncuxve}}YrU>kw!YK3pgVM1J-Z}G7rn_2P*TXsj^V0J89(BQ2P z3Rc>qt0V-0B*|sqZO~_1i`pwlDIjSCkXg*O3JR6)iRkZtUWJojkZm`K>BQE@*)%#h zHfsj>lvjiLGqbbNfKDMdD=RqhFJiv-8bsoM@I{DEfAVp1@(l-7Pln`-y%3yafDume z{q;i*QA6*)e{(W?haI#0+9Cnw6(lV?`~rNKZof+NaoMN1iw{MYeHRvYXr90S719)N z)1v1UB{bw6z0$0TQ$l=vgMLv>QBjd22l;ipJuYxH;0i6l<-DRUxiXvVAHfi0(0c<# zeq|EauEb}ipu+%O|5I=vp@40oRl1?`qO_H(=W#K1fE*g)tAD7-X48Srf8mk$y_tIr zN-*ZOn?nJ;-2+yB-%AuV-ugpNhY?w*W9zP1Y+q7#v$4N40d1W4xVZnPvM-N^vTgsK z>baw`mNg;m6k040*aij-rp34#AIzSH-PMjA3M zCd%?K#Fz4=f;C=lY-|h+46t->A0klcKE|t&=;OrLoII|-iB$XQnOU$;;`)64uY!UC zkYvSS%W#xmoMElp`X$1urB?4vV0RItF^KmDYIFo%u$w&?u?j?&>9E_7a#z?;o zyU8Q%uVDbL|_npehuUf8hRm)Z;=ZVZW3N~#1ej@Q;fr(YEvEFm#vFHKG?0^RF5+hEYO+G2hg*4x zu^I=)`F6zgF*?o{iW*YybDc)9($ZpMv{M<)$Ssc}{ld;&_dh~@cGfm)NrPUkTshWh z$w-z~vd|GB+v)6_p-5X8ZKKmY*6yrDzIWI^nCx&wQ`&@iQ&_I)d~FudMML7z|X* zqJhjP2Me3}-m{HaW7mGblO`3{cuncchnQ$($0;KqSNDY8C+I~rYvRx6m;4p?FEbaKnQZwyx-6Ue%{@O?5$1eG!1?b!2F{{$UgIvw!Fu>>9^ zPX{YE=FUt?n>5aHkhjxN7)*mbd0IH1;(aGGdVwB98L+IRkj#@6#TQF@ij19#RNQjL zEu<9VgJvP+Zx$#iWKREsI4wd4Tss4)y{CMdB@oH`LPG> z^tm8CJ<$VM!Pa?A@|sMPxvQJd=+!^h_?+73?Vcm;hVFm)%@FDvR{QAkF7CMVh^lYh zhq}*>QF1kxx6>CGY)1QYapeRvPUFE_TuZd)L#OLDIwIj0#_kgM=xm4>Eypr@`ob5M zXa<{)zbKvmja`0Q7{S(Zuy2imIjHaUZ4!B2l@l}cYGoqOgxk2p9jOnXqo~VL!elX@ z=|L1VyafeO_wD%F?mM@9MBc<7ev|eYujZ%Q`CT~fxRt{;CdvIbCIwsQFmFtF^nAc} z|M{lI1@dVCMg#IB;9nEAT>l#^g#H(xxg)>-3$hj!Y^-O8Atd6Abi}?)BOAx~N{sE? zq_9Q~8I6gjbP4V8y12Eaq{LI#Pzxnuf)q>{NAwPo@?PK|j5X({LtzE!VLeA;ecZkc zA?0u_LD*J;rOXoe!bQ~(jh9AOJNg9pL^q?zNFC8B58~6qmA|{748@qUCv6p6cW!7Y zP*QZcD13Rzpk&FQ`tc-Zt#tjCDN5!LhIg7TkCsaGC>S=#aLP~$eOs7NlPl1et9Zmy zk&hN~BXx2Xnu*!Y<6+NS41fL%czB8qzk$l=5_uh;S?XhT+J_R4oX|VzWAy6sa(;BA zoxXU2>itaVm0QH0R?<-~I^8whMrM%0!ooPB@A*HesI8=}DK}>X201Ub8}_m9zjIL- ztmDCc3&Z8VkTtm%ROxy*sE}8;6EVI?52e$^SSguk8J+D{n=L=)%lOij922WC)e>d+ zuN-AYQ(GH;u~mf$)+SjCRb6bp6cQ3LIy$-8F1WGP_vXAj_}bPWwV9rJJ{9<-jNrKNp`P7V0b za>T+;--B$&c3|fYrYJq6;%;Gj@e$G>@=R!xP({lqXDy0ExRK8Btv6gLIb*~Rxwpkz zCWf|5LNUp6{^>NvOet0D80W!lbUAtksiPyVgh1tffiL9pJVdh%BhM_$`Nt|Ri3r<6 zS@VydXDIGxt_B zB4V=esbT#ytFHiqi6UEhTL&P3cjEe+$ql|D?^KSTwGZO?b-k}7uG5)!xyJ{cMYM`n z_}kiOGMIun9`3HmDx$%jc}{Ppr*gz~yDwSc*6sybaW*7eSpMha9#?y4HMA?zMWu|M z#%`OOK6@o1y+dh(5uK^g_7jX*dA{0-0E2SA%%75d1d%t?P*u+T5)WH_Ti~4Lyidj| zh{xv4P%@|uSG!xw?%*i3**{#x*|^b6GC;;j)pF2-s70}OIjE=rX^(9BS`~)`o2GM= z-%R6}F@v~wNCS@syN!+;7d972Igj?hm_fTEvZN?;`1u|7A&-PdQk#WbyvxHcE9mckP_>>JbSnPK#q3*RG^o;vgtZo1+{( z9O?EQQ-w`-w#N`IUFpRPqZ+@9ko@@T*~FXMVtO}W7-X64^s~i|d5G-7?etW#*T_IO zAbPA5f93|pcCgtcVMm_t+Km?mQ@0Mqhi3C)c*%+Sk$>s=v6b#^d97v}2juSfo=tbQ zXZNL@N82a;w4t`ej>dsgno=W1x*WK7LiOv(PCxcN7ni{N^+MQtHiXcYq?0Z;>$#o) zCErp~<*dbZF{`9y6V8yLqb}8$-(C719mBO3A13FT$hamM@DLmZt~6A1dfR+&-U*WI z3_|C8LtEupr(xVJ^d?JoDP77&_hu0fYRH*7=?X6t0|H`HK&u$N^4~9zu!!(oTPx|3|w1a4ve?ih0Bdj$r9Bsf-z^gOJ z?`xDXSCpe&o^`GJnKtrpNXDMGub*qY?4ik&;63l~-_`btG?k-|J7=7?l-J(V>P18! zEeIy{H3l>n80)5sb^7nw6HFNp0?G%jm@`A@RT5W71wmv?T((-q1rrys! z!4Fa=|HSBLfwnrLf0xrLa^!J7{I+99H%Y_F;zYb!tDF6^VT07tBZ_LAC6QN?<5@*a zz{!vJ)(Pp?2;%(s+q@S3QL}4qn5AbaqHXlWh08ggv-;1lE7kewA?`%cshO07z5hNWTuEW?A&@GD@@rzm?)&aDQap0@HT3s+7%myWi^BCi z+u`Kd^^~+*H===62k7)6RK7SXQ6vt<<&>9XbZ+%m32}TUcwbj82#h|Qy-S1udONV2 zN6lSJCNl*viV87>c*7I!H6OyAYc&cfGu|`zojO19Xne3H_-W|0E-Q%cTUFh0irwKQ z#x(??!X^l*a{CdL`b$k#M??+5K7{_&b^%*d`&;go$d00TH2OYbD16gqSh7ng$q(+M zDh9f>YnsKPr+-W|V3k^ujo&M)?P|9ZaykC}fu=-YhN5KrrF-x{wtu}ZAt+s9&`4Wb zdr`1CLB%U{t^qq&Svr;Q&zA?)XKq0TQ571OYE zMKx%}n+zxOE=Np0{+I79?y~kT!rpX)1Anx1Vd<2emycDkXeib)H#If&S^9Ke;rI>s z#*;vzA0zg3AP+Hj-7#=;8oMwxa&#p@pvTxt9S|X{-_8p6j9Dc6%5K&H5*s?NDG3D7W!b%nf*AWd#FE3|G{24h2h_D zDI4;khJ)2kyV5&9)$aHAN>UqJ3YX>j>vn(@`Qoi@1w-$yaOg)Au$9?$El}c$adEIH zL#^*=i1NwNU$Xz4{2pprq{Qjv*KU7YoP}DjkCGfXZHKFh4s)EIST%Wh6M~!`0dpHH z!P_a1yWVfe$^FM{tGnW()Fvv?1~HM5a!}R4H@ES7aP^Yuq0RL-{!2CDY?j|Kif2Ti zthcN*3@Dx*MSCLs^o~=mT`7sV`O2apWPv-r$Lp!)~ z5LGyoK{O1m8#Fv1*dh*B&s&_IA6^uYi4zal)obX+xuT8q`A44B)&)*_Zniuiv^gK3 zP?~XY|0g_;zGk@Erjr*$uHxa`F^_|9(uWS*V0<`#SnI)buQmR9%#qCnRnBCA<0t=| z1GAoL<5N8H9Oo02lCr0KmUG$ZWqOLHPOCzN48iZ>b&(we3H+=mR${;8^A`&2*jJU< zU+id#LXg9idW@*G)-V3(sGjh+7r+yQLf8Sl?kbIW{LS(&2whs5=b|q@j9k6w{$FP^ z3H3L3^~|###mPIG=14t4BIn6RGilZ_O~no-R}DIzTjPqPPg*En1e_^3ew&XfhdwJP zEIfPmY)-vlV=wnnpr&7}qGzEQo>W*^n3a_^tR?{X&+d1IA26|9%p+dpEo245PL}(hSaBNy4u2U0)7=(wE=X?{Z4(SaAvFmq>a1 z{Rk8}Hv#YPyEu{fTn!UxUiN4USStEPc0H(tQW{IC7vAQgCZ}^#{l|rT-cWdE4`Oyw z*%L+4uR}7fRbr+)sF2OVh}$ONQychdtCGE8mu$KcBkd!-IQq4IHGI424m+BBZPcp~ z2IFtmzJAsCX?$qe6jy3U*;Od>4E3iH@Q?fY32rWtdy^q?`yhKK=dPQ}*LGvfA=( z>#z47MFYl?k?OB^gD3^M5Z8ASCw63c92AN)#a zyn?77b*YO!=)QBEqIm^TWJZ6a!r!^kaz_^^6pO-=v@}g3Zi~$WB9l5h7YIok=N7h# zM|L5PkCz%dFDQu5*l-IAcOWc_b^eo8`8pnG5F^M*Q?9|DU5ck;)l^il<>ks0+g-3v zzM!s9v!v{nchTID!^=4kH$%qeA(+iuo9iM$Lv$ZCv9??*to7PVmb|)2v?;5qabGHTy$5flY1wHSH5T-CXb#EF5-1FcJ*}YW3m%O>a?%&^NYUhIe5{~ zA){u?M2R6UfVZ3CgDEj~TIv#iJ1;aHJ8Z}XA*Q=64u@r5Fb|dF zFP^g=7GT#SL>ihyb&edcXOzKpPVu?tV75qJt0_N7mQr9Jsw3>G4QgR6qaqdIIb#P; zNk4t;&^oH2&W(d^A+^*v>)*nH1|=?E2vFta%OLK2#>6 zi>vxA=S`+#D38i$fsu`g63)oDd=O)K1dr^F)8D-F zKm9BL$^8#s@J0)8r_1j!=WRXne~#Z4(6}jS>si~bySU^yH)Bw{VD6VhcbOh2hAvU| zOllgP(towW$^;&39ai;z+?>l#v(Q>M7FggswfFPu(PD-=g_TEtlKon{@VDRjy+2%U z`u!fQ=bd9wEFQ0OQY<14+xL2>w)FpfN@3nKqUFz7mbI^VcW0VB5k0^9nnMy?9Tm-wJMcymEauUfs{9OSZ_NJM+Z>!AizdmMOxo z7=z5}KY#~A5Eb@Ge#@+7*XiA+5Uci*ot=GO`qHIKeo<|2WGlU^1NZd|BbW?g;lq~K zt6+Hr*oj;edRPR$_ETS39FhNbEtoS}r_)MZM;m|pf&nN}v180!{rz;d4ZfA{d$^lp zFP*;Ewm8;OsP0_3xlGbmqj!NV55!ZLW!@X}^$7p9(UFk{)NuZ@cXgpeRVDMymBCsD z^qOl~kW4zI7q`@SHg98N9M0@(^IrzPzdfQ1NPr`iZK2A_?Q8qiRd- z*GQ!(L5*oL)(dbQjh8c|QYHz%8854@*;M`FfN74oN4=;QdUYt+I?v0-cWA|Jh3o|w zq3Y^jKvRrtTLaWkwl)?YP~6r4%39`WznbKG|tg6GV4U#nleayVDjQ zqZXNbqP6&m-^e)DXw?c>7#OU|T{#x#sLtG2#6okGSPQkKS4x43RP^Ha=X;>}H;8-i z$_>yQ#c#Mid^naCV{L9`7MqlWe==OB7q38mQZITfh@-FEgNE{76v+}R^Pc|&;(mH^ z@{lQ>(LGDXMnpu6w+6I4T_HapFI6B{-eu}@ljmDspyB(EtK_y1H2VP&T%-6epGs z{&OG~x7-g3cYq8mwkT3TjZU`W_dh1F16Z%QAFmF9b~YIIXcpfXWHYsVqN%O@bAGr! zMi#NPwLZt1vpRkwbOTx<=!4%u-bk3N0JhQwXKuWH{Tk>oOhj?^+jt_4if4AF>C}gc z`Yw$81jBU@Fd+jU9iWufo1e8p%17SoWPdpimP`fpJyAny7*_tkFTb>~)+Sa}06j4|WZ3Bh^4h9!ccb{mN^`Cz; zH8qvzH{)1n-?qh4;1)fPNF?Hc1NMASLHDcrZ1>>1t{L8c6R@R?u+yhc%UV~g{&PU)OI{vx;&Yh##_t-g)1H++6J9EVh4u*^J-=$- zoYsp27fl8g&8W!8Rdr4H`gCDzY-}Zd0!hHM02fqL^djb3fu{Lfm^hpwvQLxUrmzo~ zX%3vZ)~3N;b6&x@e+e3i(D%#=RyU9s_-a!FyfhCPXEGmY2#9wLBgvjV)y>+Ix9rKV zfUNb#>Tnnw)P4!+`bl!g_dLJqL{R5sWLWbK`}gmUma*zj)(@_^;5yO(R#Eo>kpXnl zzben=cYMB4T2!=}UIjcu4a{!<>!1`NBSwJWVN%mPft%@hi4)Cfkqf$rFa>$ zf{_|-I2z0~D$9LUmztyE@ikY|x?b`g-|au!EjJT>L#z*IRBdGd7=+ka-hC3e6$_1^ zjy@NI-xvjhL0WGiAzml)e&#;p?R2-TjWuYKhL|g-<${5T+Bbq0_4RLsjjXM=fZ$Dy zjY0WDaWGv^;zzbwVO@yG3V2|(`5%WspGsl%vsEX9^m{e6Q2z|= z%>6c2eL!{zDp~Blh9~VxD(-V)$p|eR_oehW-o13z7z&+ z4EwE+P4C`a?zIgwtN$E-=bTJT)2)DLmLEq&c>ufNWp8S1lsbFXzWIaArt{{oIP+_0 zOiYX^Kb+cQb`fxjm} z#D76c9XG^HjE(sO1ORY)ftd$ja+e-9dk=>wPSI#90Em!;Q(3Vs51Seq&U4rTkJ5>e z>Gr^-qd?66ZrTXoxg5l2P}%AMo(_ypw1@dY*<%~=$gvP}krsmiKd|U@sl9ibWTrs=PaTnaVe`Yx{ zl24BiDyp&!Km_PuWz`uyhg)H+%z^*PQNsbWLtrAUa=uOkcv)?2EhzEOyQR)0jhp%wrR3z8J z;$qA>GuO$q7%Xstd#)m)&+CEG4HdGbL5Z|Hyg$HE z&`<)Slpx{0*=wCgq|wd8K*^Ep686BmJa>I%aNax7Z@DisQ;K#2OQvMy*Za(Xs-oKE zl>lya5YD-SxW)YeqQb%Nz!)BY&t&3y;-owB&H|rwk7%-8WoLt5114Id!{(9cg z58>fM)T4k3$jj4#oa&X9G#!u=H6Tnp7TFhi- zRu&tF&|`2ZmU5!cnHBi0FV~CtP6KlyE9d7y|EdlH+jhX2i*R5T$R>8f1+XMFI z3(zA+<-KhAM2fYjHHhB)rj|qN9fE&JvkVbTC-cb?ZI%ZQ$X1*OFBY)EBoNb(*L%P| z09o;&JJ9gNsI#V(0D?7MvOJr)wT`No4}ylpnuT(6a*9bav9VAr3*VW+J@X)RGFQWx zUn}qV{Cag7KvTA|6sTYR11d#}Il*)8$|@r`K!1-YyR&90t8OQ$K6N!PFeuIS2ClJd z&)!x4=GNAdyKxygIeviHstAg(BI14818dJdy8t$B>w*W`j*c`CK)jlyOaFy^^j$w* z<0XXHoHD(8&u1*w-oepv6Xiag3j{Pn#Y3|L-|ik!d%BQ{K~}b4=pN^%VNLavorx%`n|R>y&gop@RQ5HoJkgspM6A|Jmc0k%hOScvfI^!ZEN9MgPWlTrJd8rV3u?1R- zfu3AG(o;{YuGXNrApsA{#cwe{kZr&}8P5v#FWsZQ4$z=wY6In)8H)zQgmdKO{HJ>c3Ty|o@5n3reFo`cn51yk?@frPS@l)q>Ci}9}-nW8&Jg#0s+$9tD^$| zHQ+k4fGiYmg^@u_Z-chnXrM;CwOp!5b|-*hCCG+yWKqEDfKv@K8F@?}V2ezEgy?Y< z>d&?|Kq&FzjDsuy{pYU(*1ph8@o;?@id53V2;0J~P_O_S1kc@T@9ixE^qs5Q7$kv# z9;?5Hz(WkUwW$HuoU2&89sGA_E{%m+sPah+UL8i}Iz`R5y>U4Sx&(~$yvI}*@KnI=oyg_grnoN+ECF9Q-q?C!<^&#oMm261DS?xTVy zRSNP?&;9DNPhx!=Rk`-iifEdB&xU+;YMpO}$+f{C;#qlNFsDcfHPg5h+E3e#i*~Nh_LGDk{CLR=5+^`Sfop;aoUAN(ysa@s{40iZxTt3m zv^E+eC~J)du5B)2x15np5ga#@AIbOZw1&CL$A6D6C1O24-uI@b)uwCU4N3q%u?SdPS&{U*u@ZE%A Q)_JuxZ(q;Vxc|@p0gdwPWdHyG diff --git a/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-opening-window-1-Google-Chrome-linux.png b/e2e/playwright/snapshot-tests.spec.ts-snapshots/code-color-goober-code-color-goober-opening-window-1-Google-Chrome-linux.png index ae43715377aee94cf6769411416d6a5a4ac70d1a..b1204f3b5168daaa07e215f6ecb8cbdf3dd365cc 100644 GIT binary patch literal 121719 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 z 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 z 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

6_Uk8@aq zr6@+eP%9qfJG%R{TcN!z1jU(0L7~+TY}=c<0|++0L5;x}+Of`{?VgFQF@SWB{^#|DDu({xw%Lk0YwzuKFtQK%rB>xU;w&P_Eh4GIi6Eu7J+~?qfC=?Ao@le>{ z#7jDm;D?(r$M6Q@&C28n8&ciYJyz{&DHgYCkzr9w-SUP2kp22AlzxafCm1uHs|wP= zA#3?kItE97J+@;x?n8k)cp!p4v=H7yl$@|6_+>fH^z5FGqo(y^^JPc7aCkON?aA*FZE{Js{B7t z^thLDRvc|Wq5X{_LgAp{0NCXwC7`Fwg(h7-q=xb2c6pvT zHl`QuhIq7N14BYWxaVdYas6g)gj|0NXZ~O%o|Oh#k$ZI@Mbk-2)x{ z8-4UX8@V%k7Ju7JZB6pmSXbI@(Op9tvF^QMwfb-HDRm$r3%Ry2WeAV&fn^n(XB7Ec z(dfpNzOyRtW0N?Ess)#P4I4PfFdHGfS^}v@%unhXv~Ft?vy5iNnO`(}5N0XQG2M~AHTo`!`%;%OJ7Ou}NmT*`NAfcj`iyWjW~$v)i42*%iw&F*%QJ^8A|y9A_a6HzVS1dww2bLNRoV5kR(vP^4KdvY zhH}d(+SnJ>e|6ok6e}k8{`+i|V>F+4krzgw z@7ZlwMSrn|sjRQLtZ#Os?s0#f!yO~p>c4NPDLl4#_*c~P&qjVbOO0JMH&=GMRR}oo zm5q&!ZXpVPsUzWftX3M7iM<{Xw8u(W7tm9}A}!ACRf+U|1u3VdY^wDi)i1^u7EoQ# zy>iphdh<_ipGj79d6L8_2q&4S`j*&FG&Gu1@ej41)Qs#Mtr{u!JN9bK9g!w^PvH^- zb+j0m(U-$V1^KBrh_%Hf=6Uwb)}`Opws;vNF~Gq-x;snA(82|w^rj3o@-%fMEHy~i zOa^ydsVyFL_xL;k|k^C@rq=~>nv#3|OC-6C&%h%AIzPLw{hV>nBfbvba4qUI6$M7jT{! z@K+%V3k#%eIoa}ESKVU2&e@#SsPNEywi`o9Keg_qUMMl`R)-*UVwZLkg@*at88sK^ zN4pH4W$U!j=zP9MY-_g58glO=TX4rm* z_pD%v%Cj;f3O^e%75o7Z{TnMck8_;Hy1y(D(^cEi(en6LZ&LszZH0>ma5`kKy%~ll zW`wXkTOy+3~>G`X2gvaozgU4f{)wMUKPfMMXt7ex9HWZA*1WR~ze^<>_ee6)m0XHGfCZ z*`nxD%IKIcgZs^(TzJy|(V-R_E~9FJa?~><6nd}1cC(VY{>`gH?QM7D<%l7BEj4}`kT=uo>5g(8UKvsLI)8Wg(E8H& zJ6DxeRbe~Ba!Z4#%?$}V?=i-l9;>*$pQb&93&M z9eSd=Dz7&;G;Ya!s$l!lnc-3o^H(Dm!{4b2oKj3QT3FXlAS}p{o`|lpgZ(8k8d3ZO zljXJ6NLi_ByI%~BPzvDVv8hE^q+c{?GTe2CGfy~6&odl*DXrPMdJlMw7LQdRqk}&T z(W&l}*%P}Rt+X~C6;8?}=@ymdba~c3iWXb7cNw+<Z1>Vgy|=`vKuAsKVf?KH6b1k_Lgk=PU*aILmCd^#wlFDCrq6~JQDLCVXb?~H zWBy$g+6ljcLXDn>kZ0;AM|W4(xc6#3+-`oqYT|b7Ers6c)7aM*0`xSA9S-++!i#>;juzpt$wk#TY4!%HY!Vi1X z4|-FNN3&v1!?(+eX|{z0Tp4U%jg7vt5T#ov2S=!F6r;}bs@MA7hWt8;AHKZIz$WQq zH2n}mY#c~WgKw+%l-%j$8J2V{lGX@(VJ{-zuy5JC*Pmjbv8bG1uep&cM}5_DD~6hbw?@{TeTaFvsDUn;ZaF9=nD31 z@~@cr?aGmo^NVZu$`^jo%BVISfb>2gcC2bhMlK%wS@S zS~*f{`--yLwZi&5nNACX<2UM*rnkCPpttQcV=k&|#4cWpzGqdXEoK}s@leG%BWR3x zz~dQWsy1Rsj5M^GlY#W|9Vat~7eK@1cK!y?%I^H#&dsIun|}cMim9|8Lz7I(Mp?@I zW?yxWsbSfEcA>YCl`C}^DA#&?WnGYg2*m4fJGX#iU|<0B`=`E~yG2h)GHiWZ)n~R6 zeUQBBWwn0yt6+(>SRe@c#K!XG<;82=TuS})@|*Rw>fhGZzx{ZOahgFsW>2ri!HT|? zehYiaJmVCP@*%Y-630%B#4M%C!7%y74Wnq?6aK-6`tq(6=D{*@C9GbE@m{G80STIEhhWA3T*hp&k&?YD z${a>OR}$t75BA201G-T~(oQa@7^&hsN4$B1$g}c$>4=Ue{&BB#V>554Yxv6KJ5)#g zc$PdbuQ%J%+Gw_V~di&lG>zte4OW@z|*D`XF44k{gRu8)Bi{UFF=akv&FlpY*BF8?{9**@) zS&Bw@{u$U#>%?XxZ^KG)2O7sdu`8EG9E^q$x?5YLF0f@$LeP00wy{?rzt9!rbHArYwf)DFJ`U2xQ2tNVM_lfCR@ zKWB9DQ(9UBc)u)Rk`|Plu}@Fh8`}3HcYCoI?QWRg?02BfAM?^}&U>{QQz^HBQyxxd zmC&vSk7%wZAOGI+mBJTzW&fu`a;1JdlOgFIQ(;%6-NxM~eATp6QAAeKSTb=avesR0 z^AA(Q9VoQk%CR&l>XC_~n9-$jN!%yK=V}_|AN;$Mlinc=bsu&mzk8SDp=|SIx0M>B zK6F>9PJNr*)u7Y3sVa5hOLzW)s0C>Q7`XEWCHgv-cJ~UZ77x%l+MYq6Hu(a?D};;! z1w24I!R3u#sh^G4U8$OmVy|8ZS>6BZ%T8#ft^ba1Ew`iTCulv6_bWQn>Qt-}v;A6wR{)C3j zEFn;l1qDW2>$Y6;x3z*a9(~Yd%kDjZhwmcxw^#OCFmO(;>1rA-5xS`SJP!tq97n4u zCl8Pc#WyuoXLK+o7OwqUGTL(Lw&A;%k{K^?*}Xm*8J=`7OTy5f#c zhULI<2;fjBya@{)IH!pO9=rCzCSx%*A=|UOH%IF{H*_ZsOcF@HuQ`QXus@Hg2ckpO zj*Xp%)Ett60+ymj^5UQYQBh|E6mK)paL^;YI{w3?HR_7AUDe(mE84q0^s?t{TZ6AE z;cqgctE;PSt(!^1)%SLWHEYuo4drS=`hz@8v1gk-VS=Rg3n4)U51zZqX7RlV%{3R` z=PEVHc{uZDr%wQsQ44oBD9*DdO-!uROT;`YDOOUI+w6S+e7pJAll~Xq9!~KU&=mkc z{-H|B%FVAPi}Y&&U0Y5`s+rd3;&QrsuKO}{YrWmxcYmx@2vo*vUuA634aKX_OZXsF zPixASn_=TOD(&j$v#Bd>Mx2n#)8NaZ;HXzwX(;qyZ6yS7$WjaTptlfB#zV-ozVMo= zvq4bbq!|sWSFQR1hx>3QJK3&g3#seAJSqmgV9mMO|e?2_5vAf_Ek}5?Nt%p%;j0Noi?miHU$UrsMq( zX;2rMQ{VXxosR~0BCV2NY6JzfuYA7hM!0AQ*9)6@`j8;NH$_V&HOCu#y?qqsLA?w< zdz#e5M7kK`Itd`L4*p^?7Za$D)?_?!m-djAW@w(Ji+#=oIU7bXpmhv@1PG3iX)}n{ z+#t&o1Oi@=F$hrhujG*dG6wt)-P6F_Q$JtIJND<$H$fnI12N7>+j;@$tvKkG()NzK-uB1NZm$H^ z&1!l1!Txx(5w}H_gr0cAYzW{3f^0;c{8yYuT~q(w_oLhXseRRL=cO^~Vwpu>$@vp; z8-h$`Q3{FE)gvduLx_HxpT!)#?U|{JVj8gM(UBo&BtS)Fx3ww?o1G4@D9XB6girb^K?Ic2*f9~rF#1HQZBq5UpQ!N3m)7-?j7!dLm+qMuhvhlgO3Ab9}b(U zuBsNotB5Rfhkfu5eJt!|F!u-Dpf4y^VYQe#A%jCjr~9G~5=|!V;7}7%_~7VBTR*kA z-?0ktU6_1gY_i?nS89wxPmT3V0lz9?U^R4pWSAhW7@59@&gqdMRR`~5dSs+aaM?B} zF>)}E+=Ji!41H5Eeg@A2`h=Z*_WE=)n;&4{Ta(ih#OMLT-B;x??VUu|IwPBb$YSVr zv7z@;J*HtYGZUjHy%8tDPU>mxsh>2lj&$~(oT5`y9W;DErfm=i7gs#GceOFVI-HW! z6GTl-NfOkNx-5A4U3`=fo8L|7t&4K-ol%K;YEfP|QxCkxWyWz8Mc{{Ju$;_fWnEd; zw_Kpv8g}TsPHqew)0Q>Z-~BsKAA4mn)%_JAZpT>Rnb4PAq5LZ?;Y>pvt)1V*dq_tL z?;je9=zeWIZlNlnw>y=tB36z0+@b7OI1x{urQ~16s`q6io zpb3KI9~~x*yw;oUrGI(dAInsemH9tO;lecf@`1R~*s`L?QZo!v^D0=D=txt=T&y9F^OL11|jK&|ds9|Q^N zttFalB^-79E_&*9w5kp1^w8&?q&bjcQd6Zn_<~_Z))9k1S2t2Y$fSfLv3`pJ@NEjF<&<+?+s0D(Ns)s-qGk=D6b1xdSudqcNE zxyp%6Gzs;?-gh>}+4FR*w>6-$;G7gd5@h-M#uaIEB=n>zb~W$VE8Heo+f9B(bk~d* zxL4mxSDEtpoW&znFAMzvWlpCr4|+g)4?U<$6o;Sw2Nkcf`^MkwR-ce^Qt?_Z=~I?C z#U0C{Ltcg(c@x6!v47qFhaH>`kF@Z?yCZuI zzVQDGmjBNNKB3fg()+=xES{UtjK-?0;c&cQ3VyO_9p=0tm=YZy z_4Kyf`(N}&@S>2iksG$W&>lVzn{blbB8Zw&->yf2TF_gn(&1T?Cs?hFr-WWO-W=xh zS<)#gi}%I!*q5b+@g?eNQK4XJ%I-3IUS5uq;NAXi9#@_e!>>a<9j(`m9TOe4e@x#;C^5#G^>?pg=pkONWU&gPKO=J@8!H4|3*$IA6k=kPd_iW0uBt z;G=D7MkG?(#{lPPmEHa^!_7|GX|=Dzwdi2~sp+j%*O_rvalKvQV2wbjkl!l+!ul&p ztAd!49HwlN*GjV-05Xb}aWy0s?QUJfj; zJWclz8SXx_VF+y_#fFu$%Cafxu!Tv>h4Kb{DIF05wJ*nKp<0pYh@%D&ed!o$m3+_1NZZ@|}A>lGorj$r;<`)jX*hpT7%u}riFzINL` z@AjM*xSRrA3j#93Ry26d6y#$J4-~h=OzM<)Ho(KH&guJl%)zUmYSW^8z&}Nf%|@yk zl=16H`pnISJR}&=#wJ7GCwn{kjH%jGZKhQxxa~U>Av=_Kobf1kiBewjE+oiU3yQQg zfZ-74s=lySbH$WwG;^MC;SGrqHBudMD!u$ick1fl4i^N{af*RSMd@I(sS)0u>e;Y? z5?4XFtZXOC&;0IUXw6BVcc{$D-2bwayTydQC3m3JN9ato`DX{$`Z0QNyN$w)Vi^G9 ziw^mbY7+W>8$z}zHMu)&xCP#{G5o^0Urpl+78qw|hGK90R1CB_RxCMG{I@_Rxuf52 z`u4bDdukn5elkf#Q#_oBmzGVApqM_71HX*z_DnW40;O?5c}ip>s*9GDk5~)`0+|Zl zn>=SQdc{oDwE-Nkx4M1>KDbMKJ~s#ur*Mq$tHMs#Tbj(cfI)t! z=r21IQbO0-=G7d?B3mx?mea@P3O)+>5wrlWh$(#}j_U8vKN{XyG1f5=uO2MM&`-V& zyVApJZvDs?v7CR2zoK>D67ZN7af9I(0hf;2ePC;YO=dDDB7>;)Cw6x>88l)85i83s z=U!b;cQAw}AHs%;1zhLIt{b#KF{yB|4~QhJqgK9P zD?hkhcc0tkV5a5~v~hwS0;E6ZY+b>a*H}{qY!ZESyGdO-DZy5AS~45PlL$yTK8 z!E;Qqj?y8z8a<9o^G>D3d8SgZYDjQ=%s)=sJzqm}N<3H5w_Aa-QF!72a) zMg|c0J-(ITNY}J=XjDsyMVe~iKcqf+<&J_tXnfS!ZRV94XYU$V*-p|a6X5Mq|7$?e zYrS9gE9JxALP4%+XVPT)uqR9rGU;h`Wj)9L>6O_`LFfLnyVtq6;qZwNjTXh7-bezG zD0`VB1uE=>oONY9G6QCw#;T|k)*kq1h+>x9zTS7drMA+1LepQ|aDTdQ5iMm~cYOgj z=Bcp3>tg{6WMn)WW3(ibeuqbP5i#2j`)+t2V<#naj`|>Rsm&rCt9tu7*A#a;lrAEb zsT;1h<@rw^<<+JIC59_IPpPI+$yP~t{i<%fRx58hl}XCCPl&1>Pst|l)RE0HiznD1 z{T>9u5=O2O;3H{>9dVILRmlmTm~#U8qQkon19(;2uBFbE-5S(dc@HRuAdS~ZuD*xl9fR76_XzqGQr4qZN{bus=iJKAb~ zyZxOVUmE`i>AUSx3cJEkdsv*fMLJg)YeGu0QDwlhrHT*QY+=w*9=`eP%&kD zZK~N)G>vvBbx{;vF+rbbh?i5_<~YLj_c;q;dBQ-Lo@G{~NMBLa! z-=u7zQ?>TdB%G(CW2)GDCmazU&j>08w}e?bEzU2jnoEyk3Swe(RD(2FBli|j3MT*b zG?W@60HrfiiG!xKn?6!d$Zwe0pCA!={r2IYR}*_X3J+&MZ8MTv6@nH`jQYWXPhGj= zSFnChvDm%5)uvaSOrL+AcLei-)RHAO3$65+io`{SyxQCxn80@SC9VH-MhFIJd`QV~ zj%LqiJfF?8crx&4xp6kuA;WsOTS#vGTj;p!aFJ=6aBREG!6tqxM>CY<`S%pv?%!Fh zs~dreuXc8DCOEa(7Yy`*gQJm0cyivcywG z1?7qXI%ppaKcHpb#Uo@&Neu7qLFDDH>PWFf*sdVT`xiFt{WiIq zErs2NG_;6w3UVJ*a`qjM4;i82Ef*daVvd;4*;vcQ*`AZrV|xy{wJT^>aIdDUANYxO z#TNlf7n7YW;T^(Q3mnF(Ai{bjIq9r-u-hZt4O zm>V)D))j;WU8yFlrx||9h$$`Z>PEhP^z;bGt9F*2U^0zt)KrU0V5HJl%tKxkJ!&ZW zh*Zp%2t-;z=|30Pdm3Z#)PCNRVil;2Utvy~-`;|Op)WusXA71tzN;K$QY!4?R4SCk zE3~|&0sh}xqgByVBoSrkRW+=os%ijm^aqjUAAazrcsD=lIoHyIUC?MCv}GC+rdFDp zo2O{LBr5U5w)^11Yw@eFikt+MLTOb6ad~P=)|=P`PO@N)PQBPtRKORGt#dmI;l%amB)mx6oIRj8QGPv^^b9ahIUSjh<>-(5{^9r%0rcjRW z3$#XFDwU0$oeUyc`mVDYTKb;DsM?m+R&Qp;yrQu^Zp9GztL}QvBVqmGPw_?WTh62m zW%H47@<OgUngzWb^O_Q_3guWd0wy|Wg{wy*w8@HYWAKTsRi z7Ocs)Qj2R>Mvbq3Ds#px59@6_(1+^@J8jp1!;68Vo-@3EG@x$}H-s!y2Wbb-HjJ>FowH|>C&i{&VOrbp(L0mu5B7C zG=3?^zK{ev+1+MIC^6D;6kd}C1csy9%yvr|YcmWPiZzL9d zJQtN(X#!SBa|V8G0`k+t;q|im(>; zYg8R;8*!$TUHvt3&V4%mIr+ukc#@K#YdO~3u?d8TtQJaN7CI2mQ8Ms~wiI^%t12B$ z@o#0u6KA{3V3xX9r#qhg6x z+kYAWyLQ!`5UIfhH~)&B?U5PAh<-)X82fZ4XF52p%qomeaf&V@dyWRs>#r+wd%p=Y zV4?rR4jUb1TjMzScS0f6)!FKWaD|!A{@7J!T}eXZ(!zoM*;D@AT3gU@jx^0=h-@+oSwNRa0Qa zIQ|&{zD!J;iwL&Z4zbvlE(SpaZdSq6PhKIBDYGRxdUi-N3tvgBQ|a^V2wIHZcG))_ zuYhbMB{%C$Xm0Kk*2J<+3Pol4Ngv7mCPE{e8e^eUAG#@Zp$i@aQfV6WzWo*=P6-)! zEo2?Q1tFhl&#}uA2GvxTLG<3v&aT%2B$ck(sH-u=qd(`KW=%ZXADd)gPj2@DT|%ns zWC5c4;cloSdbVfB!9dTPBjn1_Isw8gNijeU6a1f0^#3!ua-;~tUtee$`fhzjkQEfd z4B496cl&`Ys#lR$FSpk!K7V>JmxY zD>C20_|HOi!cWuRqyNo%KIY85FB~xs@?0!)hAMPie}3i;p?Vob&wqi|RK4s>oY&;N z2bYS=UQk>;!S*cgnS8+CMu?MoRs_|f)7Jwt?>~M_@(@kDeNsu%m~UdW*lc5atdifc zAsWBEyt%+4osgXqVXYx>6&pd}mDTQSC07LsMv*Ve6CZd~vxCh1d1}7~C6LZFqK-cQ zn;P&CWW^m`MiFn1PT&N8wOqe`$REM4|M$m{f_xi(Mk0wN%V2ljeH7FSIJ}spm^sy1 z-`xE?u&{waun)P4K%r2z7cXR>P=(b)DgycITkf*ZuV3p{k2QeMaGs|U7Z-Pt@};`i z;VpLG5**Ncg?xd>NkFH}wEY7Eugaf4f6h|{=H=yq&7=z#FQVWun5k+YCEJKi zMP;S?qeqXdt@8*u>kmE#WcFD$G&E#qXB+?6Ss2L4QBC(d*emakSLbsDMz&K|R8%A& zARs0tMwOwKqoQBufdlM`+fn-YGDt7+)^RiCg&=9sU*Uhh0 z#1S~Si2lYR=jZeC<)`rQ&Rn$|knOWuRGS$X5~5&WV4$lz7Al`PumH-~^YHLcWnd8L z?2-pJS0miw`sV*kpZnkml|yActZ_rF$Tj-OGj+Plb>eQR9A!PxFapi#K^erQ3twzNz{BC>{o6s40y=& zj*WQ}3A;ciz*+bO1qD}Q+u7LIK$;dfzy0*-)8Nc=B_1^`E&OQt>z!4`Uvw8Pe0=}@ znV#OwF%yvRWn|>AIG78XY-?+K)uQ!2o_vX?P}S7b02O)u{5cARDmJK>a`@|?n|p)U z*4}P4+YtxSpo+eI`|BVnB_*X0&DP8vJ2W%|^fa7F$e_-{(ZyvGz%>gCOHy(&13i6_ zLH*+5qP3l!AE0kQS2+SVx3(l~M}Hd$8#MTU*|Ih>yU5BaZPkC3G2G0`YGib@W7diK z%$Y~?@rM$x!6Mad%C*|D=YDfL-{2SF08lA z&6)4|mzS5HI(6#YxpOcAF2u%ybkq0qjGn40qP4ZPu`#2xRFs#Ok}^>a)&LeBKYlm@ ztpESVU6D$jCTLae~ujf7@0@&>Cda`5kzHMJ(7`1(_Q%izcsL z{Q!lgs+}?M2?>f4Pm(X9ouWLsS`C*x})!p`gG(Q&ZFLFK-5Y znr@AjkdTND3u{Lp3~Sv4&dHiGGBVnu>tc#2EV`4*!A^Te$5XawUiz@Pu0+w4odD5W zx3ufMwgz+6hNSXxa&pSbT!6uW6HHA-w69;7ny?2u*K%_3va;KZ;X~u&b!MH6vgzz} zbbV+vSeAl)cU?Wbu1SY4nVA=li!ew0CSURj3JNTd!QrM{F;%Wuq@myL?0~9VbGM9) z44B8Jrlt?Eu}~SA$5#t?G7qEMKS_@r9E5vHBriuLCnq=MbS4NHRyj=Krdu<=d@)C) zpBBAPL3^_iJtz2o?e}C^O-GsHWtgI zZy*CYE^Y{2?+r3|p!R4PYHDgQ29P%ZmM$T|!E-Y+AejL5^QZsgs{oia)zt%ogEciZ zrS9Bm=lY9_-r3oqVHN+BoLu_y=DCpR+1ZC&F(1h~0D4eZSQrx%^Q)M`u_rqJUf1a8 z-tGp5Jne7Sz%L*tBPuFtXX1&tZ4v@Qee!t5vz__AOaSpuuYLd)y|=e#HIU62I5j;D zQi__5ars)s5fKpp5@$?4JpMZ2w_jLZE+!zL%ohiWT+-%*Ad$#*Lp}zESbz?oTfxB; zfxSRGfPV;KFnp79Ij|ROix(6Y;+ICa$1=ZERaJqvC?|`9kdL5@%y@6_dCtvt-t;w( zI-q#l+uIQlXMyPwI`=d^Jw1gC8*T!VDJn_>cPA>jxwzChOy2kQ_EuJ=iEjPX{rD<< z(ESB0)_Z4-GrXBTy!k;r_>L90Oz0Ao49YC~f~c7sSoGA@zxMv@?vCu7MGg;Bp9IsY zCo^*`S|x`+RcP;TV*r32(5a@T`(PS&qxJOlfiAMLu$(;J2>ckXr*bY5xH(s6=UQ)k z5kVzO+lw@lqQoQ0eD+)j_k}a*GM-Lg7WKSh9$)2)8%3c~74b@i*~smMhamX{xL^?|pMb}{ML;bJ-OZ6(Hx zni`#(jKfHzxP*k3hQ`*`)gQY+*7kL4_t~yzGii8?Zz%4JDVq0Jx`e8I_NO{X*6S) zJg}Bu3u!NJ#z&J~#oFI{Z|?fT2K)Lh4V6$D))p15oR6w^TL$i77-X<$7V2E2qx)fj zVB?Fc0X#(PHL`6~De3kTH*ZQ#`Y==0tMu)?z0YnkcBTbgq&it@-hH1+zsBXp?c29` zc(U{J^S^&zYl&oiFfUG?sh^*+-kXU@NFY+~s5Kmmdm5MCH3YMzXNk<-d~-v)gO5J! z!Uqd5NNp$nv1dsVT!B0)DWOck0s)Ay!ilh}SI?&-DI_Vw`Ij~_pB1oouM zAxuT0*`T9;{(MSJEp%yF>Rs~y=M76UhF^<&+S$ZFF)V=wKp&n zcXzz)Sj8labEInfx|OBnd)Q0O?Q4y5-N{-nUrN5sQScHvGi>Z&_Jpz%^2Fva%+F zd|o-PO{(Zjazqva(I_h~pL{NoVm8_Cc!s7Y<&J2tv2fMb$&KB`G?&pbD*lF-r70hoIZ6c1h0t^s5wOrA(20)n}|52Ug-ZL+ema+8t&`t`?!)RzL~x$bzb zU%d}3+j648*Vfkd_?yoa72KxrxXUqv!Q|`G zSa*JW?n9Xl^(OnaUCbs0Cu4Y+{8W|W^y91jVDc5V;{2&Hl9E^eCy`mo_ir>hPj!+o zd+8bt4ULtRm9<6yRR%Eop?t0VogL;&-iDs8WS2=RWJWjb~LXn0GKYxan*09p<%KdMdnGe9&e14ImxsacK zYieuRWjy>#3lc>w$Vqx^PM+%;50Bu>?-0&GG`i^f%O2sv zmp_a_N*KVH`uchxY;c*GnE{&f`-B{Do4|1oWGm+v6r{*_ilD0j!Z|xTYrN&B5qoA5 z^Z53Q{D_X7y}i7WA{*GK$o)`@NWX)vVenAiZNJ_1**JbJ04zvgx6>_=F$en37Xb|d ztPF5qxbJ?24Mu_8cLs~)_h#s{T-)5#D>YX(H_xsKkE$pyZ*FM`4hkyNDL=!huA$*N z(?%EA3kaGYao0jfNC+stYEZElAAo~03{U{z!om&!FH%!e0mV9#nM;;92h))x|~fau3iL$_`e_9L@N&l$52} z*|_)bjf{-eFzK-Pj~_#ur-0SlH|(0P&$I*o2I%afK^w;zYHF+7EFr&ud*J8e8rLi@dnfuCJ2P|W#Is^#K9!hxcaj*p&)Tt~I~wW+&t;RKUaiDc_%c~Q zJLylKJ{<-5XEkb%8t;Dj@};A*b5?78&>t*h@`un!NEGZfYAU@ z17%Zk)jKd7ot>Q;+EHeb!7}&19Rrt#d39uDH^3m^&Vbz%?M*&A+{6K;0m@(`A|O9n z>gvE9@9pl|g4D(4aHgas|C&>i4tMWS1^4{6N%Kk$%vVon@aG`J9p+jxtEa7 zLCj}^i;IiH!k%bp4FiI!;CAp>13c7n^1r3-ylU*JjEaJzz!7-l?yt`v4sv+;-#YWJ z9S{h}{2w1b%{(<}3D0;%_4P$=%fB`EVNMDJQsUq;yHAq;w>eE+3bDa*LB7^*IL&TtfVM~fkudigoK14BQ36igmkwQ3F*!{%58W> z-S<`vTa;%UNW)$Ma$;E$1zU zn+xJp3TIYnE%S?gb{S;pAH^eNb@1v7gEWG>6+6>h0uuk8FO5<4z6x9SY$i+hdhRs9 zKlrRaWvy}dyzx^}5rb7wXG$1yjhji~#Mm_dT_l|sFJH3o@YFPA!@VF)C%%6#>h10A zC3Wist%TJs64H8(J+a*`7X0pQ#O-GMTNW%)ST}bM*9+QvsO10iBa*Yq|IN#BN0|TX zEl7Nixm;XGQqu&zHm$bS*VhllQK)HXycOl;rBC8MeTs@syPBbRhq(E!o69#gno?@; z6Ia9bOih9^OO`>i`vGrU?+OJ%nkuHYwzl4rhrgkP0KN0yRx|d3Q42Y#G|H`;KjeFC z9DX0Y?W*k<LdwUm`mf+u{%@ImPG-aP;{r23{ zIJt-@%FW*oZCtGWLT_W$vcz(Bq@l^YQ&ZE+^W7E~*Qe3aZo79CQg{=4SE`kT$*B-X&dxeII{wHQAz@+iGBTFCTJR(& zf$!ekidZ5O_O;o4!AC(Do|lu8lacZ573(xV{?Ie{xVpN!=g*(pa5wa%UjLe?k$6~9 z&1F6De0R=3m?&p-BlIx~{^Q3lrKMk>Bqk*h5)kM$x|bCd6&<}H2)K8DeyZMfjiUIp z)t%S{*6u~1*_$_SUcYwQoom9SRn)6GVrOPHUSU4?MZdxK;)IQgii(Lzfgt+IquZoBHFb8X!km$jafbin zk%_taM1$Mz;5l`iCCHL%d{7sD@v_Q7$vI~w+}l=XYDuiGANPU1p10b3Rrw#JW9{S*G<2Gf)hj z(Xifm1EOil#`V>!SJubFTu7i;IhD%okb*2L~UYX|r38KSM-iXTRon$>{fRKuzpNH0!{4SuHvVqgDDG z(Y<>g;4>?G^{=s^94s#{i;Ig-^GBs?J<~8SFtD_wkL}^)-u>Z=X z88*EqQTsA+GVzs)AJZ=@yvO9u&!SS2&i`t7&~p~CycvltE<{jm6qMr4hPU1}h(c@T z@-#H2urOiq)?(3gMZH$JK74Dhi{JkDH;9hy?d?zUW|EQtB_$>K z`Q{1={ZIhzS=;}Jqc<}%J3roy3=M^{s8?a8pr$qk+h8`3a=JZLVMc>EJ3Et*DgSv zJecc*<_gz$|N9NKwa>K6O^&vwn5*`f_LH#Xo&zFJRwfm~5m zR=zFXEp@rv1yy-+vX(1YZ-?8~))p#ua45-bTx@KQv%|uyti|==Yz%aC*!-B-SYf}b zi?e@Qr+?R=6?b)XROMX?%k7*+88&+_IMzY#x39BUTW`I)bN?y;p(H2wpskeO?T@sq z?9s-kl)C!AKeG*KX=!2s=u?mgy$LLWf`T8|t#q`t6WzWWl#(R1^Z(p>I`veMeBrg1 z4U!az4R;v)M;w?) z;zsxo$#!99rsh5-vAvty?nv$fQ9353{?1M_D9hPWk@%lQV53W+dJheKHEgM`t1B^R zs{j1?85LCy)Cs5*)0LLEq83n9U_(9rZT{>CeGGYuB?_qwTb>263h{Vx`gh{1p)fQc zzO_S$M{R9w_|qS~y-*Fu4_12TTl@^Y?qgttOGT0@d}6&t&iUq7?Sse60#JFnqbWBx zHvx`lel>`Xjt&kF=i=a?JR1@a6odwNv@;`>^Ad&J!C~M3{=+N4Gmz1?YW&UcN$@Qi z8XAOzgf7)AdbO;Sl<+{LOtzyvJsS|sP!1p9KZ{C8XmMJL2o6R~?yrWzSXHI2qJr~m z4A3I{Eh#io35gGrSw%&j>qD78e#m~GBZcQ~a^Ap+#!yV=F43)d!|%GicYOR(L7@qr z_m#+jkyTQ%VR^h zS4~Y#C{$e5<70`3^M!i{V%*8IeGgLkm^b()v_geFSZxv9VDyoG||5$7;W8->hh;xhJQm zkfJ)GqN1g^<*TLD)yg z3_}^G$CGt;uPrIr33nor8_wQ2_ zzM)rD9sT|L6(TAmUO;y~5o&gXPS~l!SQ9(fv79qO{N`O(gzN#I4R&p79fPRB(NmCQ_m3G>E zr1U$0T%kfm$HrRQ+=n!SB(}7+{%e`DV_FZOQ1R;~@E@6OcNc}b}yR8>_aBxuS->eM@1%E$ymV@^+>FH$c? z#w3=uS<`2<8G%F!q9=73vZ#cH%j4b+!2wO_^!IoFkCHR;022Wj-vBT}zsr^1zgeN? zJz~@tt5ecVPDx3D&jw)F6-fpNN-B&%Bqy%%-JhLY^Ov)Y0yOC)e}2`)CM3YFmP5t( z3=a#<8iucSH;31bEvtuPKOenGVIp8Z6MAHA-(8TyJEC@Ry7rS+ONCn$r6jfWr^Z#? z3r$Ukk#LdN;*K+aw_sTAP=OjdF&QikTH8TweYrhaq zFDS?kh>R-iqh8iAzKs6B9}L~{5>f-&zLb9=Jv(f?WiLpXe7=J|j3XTpBp$3w&oIq8eKtOV#qoeB_eoGGK9rQX} zhkTs;Rp;d6?afO(@UvL+Au;b$Efs{(r=TF|9m052RMeZwwDPt9X40aQ`1}+S7KsD;A!#|l4+Qk|E#Y| zdka;P?wnyZzR>5JR6*vJH9 z^iBP$sO+1j**Al?pKli4OQSs9|`I9@Xi+QB+inl@a&ws2li7qUq`B+1c4y)pekyt1Ikv z^o*^nuIjyR6xN%%p%-oxVtA=~9SfHpyN_0}MMY5xd$W7)w3yp`$n8F5*yvA4PfydQ zQvS}f%o)hvhqSg%er;Zmfj3NNF;%-uDQeBTE{;XNE>R*zr6fYn&eJ)e0E|{&`2Gyb zhf^OtW##>o{nv})dxsmNK&CXf?hx|4(Ubdn%ZWDyDh&#C4$QADUdMm@uFuK#&0%N- zI?WUC{n^XOw{MZI$Zloa2?+{%I&cCQJTxRECMM?Y04j9)@vnv~6cp^P+mi~(+>h|^ z1iX&I+!!4UxNIg%VeB6nQDHyz^7C=JV#346zq&kzu)C}&ETrFmBogZPpGB zCkQ~L#w`#OQDy}$A~-0>!oD6ap*K7zh(OTO`7-OLH)I#^OE|&pD~^l|4B`?k4=*3% z;#QQGZvxPilX3YycgH0Snmi@)N1?gM z(!>H7xF=-yCJ&euSV$>NO&E>J02?(zp|C@Vl+FDZ7gtbF@EO{!sw!?{C79W|IXz@Ac9!90tGWt30=UMr$ILxQG z^-a?fZ@9#Kk(IfBt%jzW(y&Q*A~yzrb2&hQy3lQ$`1-bVo4uchcIcFwpzf~$2>?9W3BV8|f@;SVSvIyZK|r?(MC&)hc_Vua!Gsc6yRL4t^mOb00-I`PULZ&12yyJGaz)K6aH%UNnW4+@=`@5 z=6IL<`E!rCMvt2|g-KFgR>sE43h~kg>;cRG=L>E3=jh@fWe$Yi1DEKwGyM;yZ`f~} zUnfo^*t)v92KiY2-|d~9Z}I^mUNMzVLa+2LiK@6bqM@My=7usIc@>qB=_>2g)Krfp zv82}vtsmNzUgC$kKtRJyO+5bvB?D?`YpXH97$!n%Hmfl@2&~29?(S|FvGxO!5P^XJ z`X=V)(g?!zm6U!jEvb5;X?tI={OkXFa1dnls=b90c&F9C;b_3qup+>7=KfPiOibL@ zen2iDp!YU38(LC3RyIueN1H$8BqSu{<+q{H0UPm{S+5&Vwv&^!%kP#)u|0a#Hc!}! zvbc88iMY2REdZ)p_^ga@Kf=aVhOrPx-*cRoL_I%#pkZPPIW7lPRdLxVx#lvSbffh9l zqi#=UrzAw>{QUf7;HR65U@pDp&8&*1W=&byg5Ok4iJ_^Z67hsmG~OPEE=)n2p$~Xn z#gd)eXFfb8A!#z{!2vGrdy)OWjnVu8djg<58HyR~HSk9@H8r&C7=+;(T3WnN#i6$X6|xI^1_7hS5dVpj6JP=mgTT}|^(S$` zFDEY9zS#l28xavPQ*BEG5T4D@6H?cN-Q(h9A3idj?KN^)a%!qReElc3*RDVrLe&vU z-7_{e?kC#=5rT$+VRLtP-h{i>s4W2ckbb>$Avp~WP%6*03^%WE}06vony*h+A5_mKw>OxWefGbej4+NRI{DStEyb4JV#o6*m=b|(;U}CE63#6A z<|!+4#BE=bU_teJn2p+wj*cUvqfm|&8xt|fgaE@r%0u@p2jF7-w(I@92b~clTPrJE zaBFbENHk$-^8Nii*qetB9ymETK=FNAE}jOr4F%E#9uZO;cCqk!$8o7M9B%vm-MjLs zd{wSYlwMxvkiEbxKv6Yl@l74f2Auv4LZ1cpWU)QC+2IZR2*%nW?*%E}7Vg!xyL0Q>$mIIyD6zy`qjQc+W%|J&j* zA0W;`ri@sUr}+zo4JhIp(g)fC;QUS)xL$ojG7h?i4#g?vaxVt@+@# zp(ZD14HfdXvpIwc)}!0-`s}Y?z`Ad(t>qUNZ!Iif~8-a+0{_P5!rhb^-+cGm ziX$vU@H|vOC?_O%c*Op zN#?N|NEaR~rX(RE>NTqX91g1wQ*XzLBcNf$Or@Z$cq$xvUf$Zu%EO*mT6r1{0A;ka zYtRzgO}Rh;0Nnt%mI|%U<>l-Krf7zS^MIP)zI_YGNXX|*T1Ey+@y=`mj9tg@H;sv} zISCbXbn5f+Xaoej+k>#Z@rz0d3M>Xb?Mx@BlAc13xsm;VFmrS~0G^CiG38{pNjEk zs#m9?rA2^+6%`*3AeZ$WnVPZjZMz(G+Z(t7EEo_cKnH;q3duu)e{&t3{j)~)XESO= zz(i;_U0L{@v0IISi>>UBX*Sdekei4I35$x00W7xUUe>&itea*_=iieWPlyZWPN)4j zw%M&7b#*0YtdXrbjKi+%XN$m6`6$u8iHBGwRvVR0-&=czo;hEM^accs=zxAGU{Lj; z7`MAJCs@CE^JjIHhLJJ($A$vy|MmhTCdxPuyqT#k@h$vjIhqHg!49l!dx|n_)^rW> zy?fa4zaXJ}cjpA5mGV8l2f~%0)2ckoTDCLQz%F!jcHST^UN<{T*nM2wSkMzfYcp{0 z@ikg#YUAR@V5Nc33?BRgB;ZZqO6CqHU{N;QYRD1Unr-q*5Y0>x^6><8(oX2y)6)aA zvsTR;eGcK3C+M9pSpxTDX}JOQDoFFX^}_?`{NW)Xj-c}cLGX8NFj3wN=t=*_D5TJA zjN5~N7I1QMn$xtguqc4(AJkpIbs&$5iHb&$2^)BQ$_)(-jf{+hpbri0g%YMwq63@p z_3-czK=1-@T68ovF|qggk!_Yv5@@PWPe4@wW{)UkdrlI>tLxLXbQm#Hcpb8iR0bd> zZtyYe_DvHS;kHiaUtL+5ZS<%B6&zF*7^c#N{i;h#d11}uW-6+b_^xFZ6iDZ)5E1iT&7@&K^MZbs#_M1VT^KkKpgJ^ERdp*Z zhQGbLLys3yQeykJh2j({3dph2ii*Bh7cfFB`uqS$4=#aP2z75yh7*f}k%!9u&9l)$ z-su`$TssDT2hpFgMQ$G;?dG;maiFS~7G}>l<$U|BT@kchoO>UppS_riX_$OL&U4p{ zfc5jB{_J6?wc~f7$DD8?x#U>aj#*{5a>))T9p)ww@s?LtM=Ut!i0>O%8gnNrWDkQV z2f5&J470w(n8I_H%{VBl@r;^KX@UPb4ReQWOo)$HS5>8?Ned_BlGW3@fU(CrEkpyq z9Z(p^Jfxf!Q9xS)*Qq_u(ur{j^mBOn@h*x8FNNsCoi zGbDs)X+|~{S5{osmI1Et!}s&?@xcyUDQTg70KI_k)wj34muEjWrf3wUafG;7BQomi zb>6DR?HcUWl-t1)-8OX6yoG703e;7*c?|># z@Vz^p!R;+;kPgr{7RF0-VP=M=P{L7**~SVtI2~F9nR&D|5qV6z%TB(3Z|L{R1w0Z7 zzbg!1_RtoyCBwmbunbee12nWG+!m<15liCQn2QFRhHgMxn!kN}!4U6xcDMnf1s&KZrl)~~cD(_W(GR`tc~hXI z{Jic4Ib==Yd9iTwAGp^lO_FB}3`N4dDW9ynlHYW-$*pNU!~dGm3RCf>q39fx31CNq z=f(cJh-?Bs$&dV?Hws4uiVXwfhQ)=7&2}s1lidqF-LleBtckE=QJQ<$NhdIcrGy{iidlL27qsi{AF ze-+hZvKZ?Pz65cZNAI#P{o6Y`p^XYdGohwlfey6)-_>$$^^~o6YHBKxm*g5KM&NY; ztm*6P1G~GsxXA8v=A5bK7ake;Qc)4)?LCmoppS`!S@N*5fgelHdGQ_J ztVx;s+99Pv&*&qaFEQNSGmk`d1X^bG8OK~VxQ3a-Rspa`7W8s8GFkxmuArb`J@0w2 zEF;9R`TF&1nDBJGel>tBXKcJEe0?F7spM{517kOu>C;9&Y-Tk@_R`D#Xiu3=&#i5u8?uY==3V_owqio^A&< zo}*!j9YLRT3r5}hb=$}y**LDx$q|1-f<)i&GI6dSEukq88Ahn7sK6jb+k8iwN<~^) z`Vy@a_zLLrH>=HVdLw+~!N>{J!*s7ov@}(w9uH6p{|*l7feHeC7=enbuY|Ln>o_w*BV2Po!e z=jS&s>gp1;-4H4ePh947n*K2Q05JlSbaHI06HIF`HX0M_TrSt;9{l}FLQEVM78X>+ z=(;;M`(t+%Y6vutaNg@67?NT6-rl++8A1GnlvMGvDD$%tVuDkzX#uxCpgtr(=>Zs@ zm^cNG2H1OPaS=>TVPWX8J)iv+H0Y)mdn|L|K81ZRKGA(Pe)WnKh;)#YJUmWe!uEx2 zuZf?5QQXodT*1!nMl^Zgz=Xw}OhQU}1za%)2L}+=IKgT_nGq1s#l$^x}396y)XoL}1qO z_ta_D>CZHvxR1>Gp3B|X!on?J*~oG{hZ+TI`e(jncX_$es14b}!vk(K^U$+w$|j3* z;>PzNFGfdCkNV&NDN#|cfcIx&A|WH2|LxiF^XE^% zAV5-r2?)m2l9o0Qeu1bRN~*y`O!jVz2mCT3!kPqT2!{)Eh%BNz2%A9`x)o>?t6%J?gz z5{T0AVJF*!QG##9!bbRFuDJfSLW6Y1R9iFIL4Br2aH}XyERY!LN=h%(ZeJX%JSeMw z>aYbX5$w6o&dv_m8VN~%xE|fyd;#wPcz;$;P)V!+f71fH2$USXkSssY#2QUn44g9`YnQhQgxe^#AG zzbKdVGO<K#|m%J>%HJAubGGB?-M)7xHM?Gz@WfA*}hrsiu4J&POz36L@Ox)xo4B&c*+)jHbE$x*+QL%^4-HKQ2O^*{ zLLyf%ZI%=l>-rtCgmzHGc7qw`cHmgXM`}bHhC`tCe8qPL?z42-=h@K@*{-EWJ{u9^ z1dz5HZ}jbM$?qNh6mP)ywhL^NaLbZG$;@}q`pz>ZfkVBPQR?;yK~Q9zy-BtaS^jL= zwj=XeOLlhGken9b%$G{{Ln>1V!1-$n3ky5Dm)=ue?(TX(83VpsSXe+uehtt7oNG5` zInW*Z`ud=o-B7}?^c7RveCZoNGyw8|(U^n7sXK}sqTXUyGY^A5daVPs=C6S zfS@3z*GSLAqz+7?ni^HKG}wW``Ug%DUazCiF)=uHB$H6KVK;4N>%ou$_1_UV(|_hH z-f#~v#see(d_*Oy%~j$q|-V5^*w zj_&DrdI1wR_eag`N)GqE-``=GpyCIk;=#J?9UXxX?)XAk~BvD3&k3+r=DLWNw{P(m$e3zwo7GU zc*n_EwX3_b50f;?x%CqNV|y84oU(F;N=M_iipz+5F{)0{cD#8sfk*nZ^gUUlt|{dV zhnpN4dI6qAS>HW{S?=5w=yD9jihe?h@pLL|?TZ_&Q|nkdpQXSR+;Cy!g(mUqU+dpe-QjL$3d%C)$%+AgNXaGp=`TN^D_$J7Cu)ln;`2PL75fE)43quZqT5V&0vJM_5@auq< zBSSTE!?J(Y9?jbdyOsHxJ+b{z7`-hnK7NLu7@XbxDh=GXkW#e)5+-t(1DgsL^m-s{ zU~GnVHOnr6UQ+1?tA{g{ph*-6XN^-?su#3BH{MkOAj&gf(p@ zXps~YBViE7mrFK!`?yZyAhL0s<)o<)hJ6hx(g79d40-2l!n0OiWF0 zye411q$MXOr==<8szCNaZ3dDUCe*FC+l!8MiZiav)mH9;r5aWu56R=-2ie$fNyH=( zFUDfwq`HYqD9Ncdezz%o|DlmI=HjYjGcK^uB=btg-GAz719Gb0ivtY1wkiMCDxd{G zc(a=-rv_;T$aLVj+Yz^rUNo$qhVAs-YljdZ<62b^Q z1-E>NhcsYIwamUTyJNuz7DaMP31pz3;r2)Oaq zv~V+%2QX;Su|1$RGvY~)cI0nI6YO^Zbqj<7zpK+gx)U$R0~j_c-IO3ak&s&WX>EM< z1!-anGcxw_myufxEiDV}6QZ%QrYV;Q|B|`;B>!dI3i3R?-B#MOs`}>sy|E42i;Gi^ zYeIkrZqtWPBE`r$+8c2=muV_NsOy@z6&QAVh=73o<}?kK)x#&b!xlgrLJgLu!97F0 z#&hP=2lS?)aRk<`i^rQ6*@pA0!hOgXoTQbmJN0+Yj~#jY^{c~0Gi}b&mwJ|@W|)Z( z2&}iRcm6xX@}eLW3+K5%lx^4t|L+#NLoX^I+t?EOz{k6qBjfjHYbGmj>XR+M>xzl# zhYx~z!xrAIuPde~rNTcZXxd-ue%eCfLBSD4n!XRGG2qHn6h-;wH&ePmX*QUstE~(& z+26y;N)UC8nUFx~eic;gHcBAij-nvmKCvdNJBC;Cwd29)otwXf3#)H5XfGdo0SxDS ze1i80AC7EHsY>P3iqf&MkuRuU727`-^HT~@*H6;BxKg?~=F~_UgL*V(q6zyfV^@WQvdLrmO@osB;pA%hS}jiNmLT zvxBoRVC;ssYHL45oh6k_@!lT2Ga`ssf?C{O^Az4VlqkZD^1|yKc{Wld(aFKh zO8tI-{r2b{+(ISo3EEwF0SRdb<^MWL6Z`)EJWj+%|G$n0!R`P5_VPB6%sY-Y45){f6EPO3Y_tPoxgd}_bE9n+7L}p*?-5s*1Lbt5Z=5F*Z;Tc^&MA~?Y}D% z`F{ue?_+FMa-j5b0ByIlT!V@D1BnU|%;H%4$+XlB5R92_0F zIyk_oDy*_dSk3Hg%5-E?6B8hJz_@tr?&0yAm)98_dx_D&d>Pi-Xa0Qn-w7{xyt@;N z2qh7b1@MazaogAf!Q|jD1@<&(iqIjZX&RB&x3)$tDmA#Xa&jucc?t~_z}-^>@M9A# zets~i!oVOYCG}OOst87V1#Su&nriC_X0SB_SqaSh%Gw&RQ~KZ%i-(MQA@vj}wXa_d zy+Yx<1gIwG690wkg0+aKG(|LYW@q5ofe4V3179j!((nV=kIzp|w6wLOrER$=l|j3N zPi)`iFzYKQECddeDz@i+67A}~86{@va|E~oK=4L^2V#{-c0}*S-nBy0Ywr3&erB8 zsEEg)55O$hegtsj<;y{sdN;SWK(Fxm_V$+OLuCa8TL8>JKeS`@XJt_^C!9l$fLRGO z3OA-_8Ggvk&;KiF1NRTI0NCo@)z~?60$m;6yQ&40b;e#QYjEoF11V-5Qj*jc& zmTRz}DWnNZ!8}LKX*og#d>Z&dfYAoKE8_9sjlHwUvkC?vkg_3IfF-It6uE`;b_m$n zH*<|Qnij}DAoyGZD1-$7NpW<};U;%pd`e2js&8nh(0WGPMKtrScLn_0DuG9M%@R7#79`F9xaR|DY2OjD1d1gw=wgvl;(9mFEP=6ppu|$Dw zl&6WE>^_$OB(AA>-1!h(|L^bJL0T6G@)&FPD+C9FY)OT3ZLJ=2U>mk)#m#N5qtNyL ziu@$$2y-+XZvZPl$W^x2SC?QrotqPa84j8(Oh=8g2s$vi0x1iVE7XZr2jZ@M0Eq}C zsI8!x_yE;~pPC2kH|WUhiSj^=>gvuw7K3BIv!es-Zs4KYtH%IN3-qqZ<$_^Y0f@ST zvokDFn1{hx1zsH!cJ2Qxpa{A)5RwsC49v_Q6B7PAEJ@G6fD;JtjE0&Tu)ah_{(YpO zCr#d`F%#Nd=Q%}9%38=6gw8MzfQ#uBfh#ay;LBd8x~T|PuXXg0K?bx2c7&9a6jTau zojAL>L7Z|$V^l}OkO_L&CitD8VSp0VE(s@#KAQQrBLty@A%3}}7Gnd^TO zhA?MAk%s~x3=ZOdkzuf{r3oKM@&oZb`FasZ;(H`#3UjrZ4z6-vQN$_cZ{Q%(vx&sic;J|XK z`*m|ZuD%{8^&PCB+{b6&9)mNnJ-}RpTQUF(^aW7B1f18g;$`7n$Ot@aaFM``nFYi@ zC{j~4)gWNlanb|6$p*Ugi%u1TkWkvmU$_l$3Bb@~xm$Y^k5A<%VF!+PW@x`fgJn&; z?8&VN7iVWM3fsx$U&GU$RPchv#LHXhhIjLRi@3Lfh}-$^Z+^bH_=2i+WJ&+$XQUVR z@Bcp^r~bb=W&Qv5%MuHI9O_1mLE~09`q>iUj*KeWGH-s?9qT?O`d@eZmU~QGlHoDgI4uFGh8^O`Jzw=)K%oOBXxb&mk74$yAT6%i>(Pe;)~p@3Y4=f8V&(=J4hI!yD|1 z^ny+&3M+!6H9yH-)v4uL=CMe9(aDxcSet}lXsLfMFDHQ?+Kc;d_xl5M<^^abUpjFN zf4oHbIL$?%RGj|g<`douzjSh{b&xy>BmWg{-V?vQt1Iuk|B32zfIpUK4FwzF2WR)^ z=A+u|4S73R_mD0`rBMwoZA+|5)iEwSsSMVxF?Q#Mntt+U^`M5hq{$OF-vG3?0~y+a z2(a)!Z>u|6>t0b8=1JOIsMpelDEy!QE^XZkF@7bDQBHPJ^85_>%#i`odHVK` z4hS>t5)U$>M6AcUUJblrj-8?n8P?{Zp$DhL15r_gd{(lW_e{Bq8910WR$7jqbG2@( zaiy1W(l6}fKV%cNQGKPyyw+cwZ{w=Yab)X6!tlw=%9r6l&Umz2L?Pbhd(uQz;C>UX z(fJeSJ8qLE*W|6iceZxkk{hHi40@eR>CIlYv|#a$iQE8;Z+;3DIIS}*Y#Lk}>u3Xf z$GfSBriP^rkQ}a@(i6oTmePJjaF|r)C0#Oe$IwvlIX33n>;9P&dq^I4vhR|*({%n& z;rt-jk6Su->|Hc@y!wmv{kO2c)zf{-&bUR4xsdB5M&l}#cH~&G?Q?}F{G0zw!f)a1Izhxk zV>W~|>=}_jcf1X!)a0h;(@st0R55z(TI#+;3b_pKqtL5kBQsANhtY!IigjmH59*)R23@_qvO(eg0pSU% zN`+s{MlC3aG1oS--;UUIppdhFFcvUL@pL0Wi~pE(xbM*}$Q(F2nQBa6W?M6Ry}7a2 zDu5WG>ZP{q*>|vmLmZq{82`M8+@du_Q97Ev4}`d5Ub5bi@9L(f)2x_6N2O;@_{+&z zQ1CVw3n!aHGAxz(Yk|(EbX|4z?`G-}0%*VghH;%Z?irb|tB9$-l+Akpi?sdD&$aV$ zg~LbFTxvEJ(!WO=6#1MEXIZ_Z=RJ5oUW}GCny*422b)W#kXy2QXT2}ygTK1ccfM$# zGuGOEzj7@X;>SqN#7IMvcDOMcI1znO(T;EGAAU9KYp<4XSGk~uah}F=<;WQDbEaDk zyComte&@;409M3zbg`S%yWjzKW8GgXOq9lwF5?89Q=Dx6&!r$am63GagDc@d%s7nd z)Hky(?dxG@v;N3F3Xbfmr*01^5P0zoD<*lIuEh}s^HCYSr*%^lS;kpe&S)R_dK?{G zC4ZC@n^WbQ28O4p7#uM%Jx^P=4D-Dzpi7_9*PS;xX>a_Rm}n^@&Zq3xU0|^Lt|>e~ zz{`<`g{PusII3**@9i%hd(Sf;V?R>3ARyXjePJNuvKJKW6E4*l;@!R`5*#wzVwUf7 zhDG@`hudhgH96s$p5;6M%hP)o`Gc&k$(EM+HM65^ja>?3-{8)u-#WoxkD4!Ok|-Et z9139rC{1onN&W0kxQ&K}90uEV_x;$nC{^jiq;$mt?&Tx}>dsRz}b9 z&|F$Mi&Of>p3YaqjFgK>CTYecn0d=QA~C)h~XcBrwU;F);0TfOU%R=!$3*m%fH=Iv{HZ0fv3hpg*LfaC z2j?^9!jReavTKZhOL^fYKlS`Bd2uy)-LJdn6VVE!%rpZ9MMW0d<73Mw7r$%}Sj9!< zIkhho!~$g>dEmR&G=8R{Ljk{OSv;!JH9^;PC9BaTPd^-qNhk~XaN!7B2b9B_*eB*LXO-X6+l5gPYH@~+}B}_wl zhss|sbED*Ct3s9BpdcgkE*WqYY`Z0KukY9PA&qW9(Pykjxje3n!)2Xf=F&kS!wJ*2 zYqsPu_Yq3zS7JXoolP1TlnT@kN>E;e++_1P!UDs%NZCKu+|)`F5e${xIn|m8BzQtF zs3Vl{=R2`QpN$W)Gl7S55xs}z=xY&`?*edhYMP@@VocEPk#m|>E9}e`a7J5khx)0y zsA*P+`G2+C`p3ooq{mECLZ~h|iFm&6RV^_lb^t-@J1pbN?wP62vS=SVTW%KHl0G=8$7zSeX-X0yv=P}NLKAkd*EbfYIF97Ip$FiJc6*PHOfwBx zWVL&>S*;9W4rbk^VIeosR6p>ADmnRzDbet;*6-^Rowy@T{k2@vr0rIllL+589fW6w zmsc&G$7eq5Te5 zDXJywcHa9Ko!2#sdT(}w8Gp!zqWulRj;|^#IA&cpKUhvP6yj*8PZD%EGrn@uQC7x( zf}awDH<5xuua-3B-n+JNe1(BgM8^VaqV4tD)E~^D9)D}w+t=eCnJR3vFdSVr)2X4w z>nI!OsB1@H)o*$f6qOJE8J(`>9aypNUf$g`V2JCti{9K?S@4Ay}fE%4{0y z)Z@;rDlD`(0$rAk&7rSKP$%V^R#5lrTev>aU9nT{uPM0i%-9nL3j9xTd2+pilh8_? zpOKYQgnhg!k-FpAgsc&lz&#Z%>5fanJPbN6L>L<(BLFP2pTK7Y)A6gw~3{YAt<}RPP;7 zZ$uzT5naL2tQMD`LZ?>sMn^%24lTaOdWeji>T3=S6Jx^B3hwpgqxgm%XXO_tPY$1` zseRJa`=qI^9UXJ%FjR^vPDb)Uc1idTo>)Onj*@l>|9&M_33kPkc(n#xpOW_9y0_vI zd|vzZkL}uqVZ}tnX{c$ewFqA)WD8Aw34ywdk{OeAF=8h{aOCr$3ECJuv6(5Ac@7of zA&Fj8g1>$Hm(Q}-F|79Myl5Xn$iqY*DR1P3lRsl*3Pwb`cs+a?Val4bjHk|qU?mnq z`Nz2)xJ00U`0`~6Kr1dw#YSFM-&X4aQDB*vvg?*J~$wV)A6s~^@``+c(lP=j0 zB@=TmamaHoNjH@2ydvNY30lFD5q`{i(JXME#SroCKQi^ipKDmGyF{9LnCq@Zf^IZ} zg>>t%Ld6=Q@ImmrEl+J}5kr$=Lv`MF1Iav@^tqoKr0rLOb3R=XF1bEPe$1nR+=p}6 zB1La87#WTT!%)nuU|NHs; zi6Cy?N7-C~zg>f)W-OSIX+5j<9TY|?t%hSyKl!~nNeWC$kZEr{!ru{4k=2+EuQesQ zBbJ5qdqR+3O;*C!wMa5MShspO$y^FcT-}tu<@2{8g?Ka%$Hfn(*6CQ)HL}!MA6JpB z&~mYjl^co!U-qR?+cGI63=rqhG<%-iMaYM-QT8Fd`m^WvXe(^{^ zw=00}`v=t)<#4?Q`)8h;zqlSYy)v>aQDJamk74KyXIgPw+T8f`T+XNK9?$p$C(pQ5 zFD31utIj_ZBVp5+!;p3~GzS{5hr8>g=NSfF_^-b1Umv~eo z4UH+``fX5ES(*CSs*hFHy+6P)(&Y%3wEkR@7bCgYp^6=A&NROlSC<HP{|8}j8B|9Xbd4S)NN^I|gFC^U0Kwhe-Q7J{ z2=4Cg?he7-9RdV*ceoRt_p7h!y|?O~pHMS%&Yr!ydv&i~U8qT>@pg@#uPK+5+)tm= zVF3=pbS%hci3CKhSRm|u^@5l$&0QTk2S9t#hnnASX-Ha>^QW-1jz4;F`Ul{RL^@Y+ zo7);G1Rx8*WXt*fYw7^lQ1I!-?6igtd>b2*MbU91p`CK`FGfW@KsFi>d+?l~8_MGP z5ZzN-tyBF8W`;Ju=@M)-)nbhS{Nt5+4V+9 zUV_6%4qXnftTpF6IdjXo%8b|~%h|r*6CnS2op!inQG2}}=m=%7Hlrc^`dBWyIA7WU zTWloxAyvCp_$GaU$tA8unjAR>(h*)chD0m|don7$$inuq2n9%6d7jiS2)AIs5CtGJ z7Db{67_I3D+poR!uJ%w-zEhu`?0j69%I*{~ z`7&G39Wh7KTEKO?ER%g_ch<8Gy^L|EWlYqH&p-Pl5;wb+S$!wBcbDryJJnnUU*7?b z+$6{&06b8bOH;9*BnTgcW>Bp4$cw*synkG8{#j|(PI(!@50*;?{`($`o(N%{a^L~a zn{2D4NoKXIhV*Tbm(Bs&D-1;C&y3uF?|XxUQx0`eBwP!zQ$gRrVNkCK-*3(bA7Cm= zC4Tj!DI}~S|4e~tOE*42Gd_XaaoajiO!V`VYxm|Cz2U+={#5%nBveK59Y1=Pb%I>K zAn4uj?>!lU-fPgXPQj2)#&xli)fbTUCOnAnUw}7mO4I%A=cJa%Hx+Oa$B#qfG1jRM zPAh|c`(;_=(T-Y+#Heej2S&&Wock82!QMZOm;Oi1d)IX z-V)Ca%9=y=Z6^tGx`7ZGeb{>@p7)KM~A~1wVw_QZD5nY>a#hN^Y z7u2uv_w~}Mba8m-SY}wXS4n2Aj$PJM>oWZL?^a)7|9u^t`fsH5x};H%*`E$z(x-YW zzS7k=1juSsSQW!fwHC>EiS%`(61U(Xx?1$|7IK8kjL9{0WCy(IhK3jEpH?ujWi8Z@o98Rz%F|QRv?}!WQheBy4j# zp>dK;@))r3EJ_WghZ1nC-1k(iGB7uukRoegO(hgPfePTkPnfy7)kl!%9yd67 zH5wL`^MuLVAy|AW_}k74cTEc^ct|~2Tl#$=g3x_l{=a3w8GZEd3k>Yzd%cL<@P48N zSjJgde;PNuJ#OYynl(?)9c`+W(k+$A9N7TW)DR8X@#mf)0ql@i^a@p zL*qfuzBy`x7avd@D2tW{E0&=(%F0@45tImRaaqg*wLH_CFtr zg{_S^P3Lx#6p%k%4+gtee$BYM?i=mMF{|Xol8MCAI$8RcsmEb)AwZ_B+d)7;064vOcXu0r03EbcW%_?!!X|EgL z2@gopj=wotH<`IMDUR+b*%Q~@Mm zp!*l-&QzjO0&1n9^d0PgCV&jzizCpj*}J3{JGp-?HnR)fwV~q~N>#j-n8y2fC3*)( zMC@LnG5yeDkvuZ~Q#AdoK?ZWls(Jdf(A_ve8%Gkkg**%z_r$@;f4-9pewNkgWMch_ z{|RX!o*y_ild7|kLPkKDqsSja+qD~z?OR!C1*p>b`J_}-!1836TUm__HmTe?$(Aa5 zIJdJ*w|^T{%o{iVnm$wkIDmcaRR`GQ@c?5_C#-#{{dlC-Ab6?8kV(-P?8`bsnv*q% zZF_dkcY{}*wGlcD`QbygYMIN17aI{#_rwG}HT4M40o%I?FLQ^CedQkfOIu^-#+9{l zZ^s?ocFF_&nkUTU4`p{pqW8fKa#n`}8MnFVIf`I!( zMPPuAETB{fF!7kp6sWV=Oe+IpKOj1Gbz9STe~6? zb3zg>lWL&cb_z6ZX0lkIhxSoXQ0OvXY5-l=}3`7pV}%#Yh*J9Kg1FTtDymYV`7 z2!Q+P0{b86;*R9L{F$1%0_aNcaeE2wzfMOQ(R>Ykw-wphlaVGcfNTuVC<}bndE*hE>dhW!l{G-wWjhQmM58qqA zda0{pJAJc~Jlo&DKP;_8)KEcbvAM3-7pwF%cGqpinX*3qJ&^I_x4-|2hw=^nwpsR{ zrOuAlJ!A^_Pw%VKerFhXZ+GKdX8^%jb_b~T0cQrNVB7)KXrLaSnUTSp)-Gf)U&A6J z36r|IQA!pdrTsJ*D${oF{C9S7^FRgT2VsWmg;hp*FT;k(pz_{tNB!TR%aT`#e$n%P z#%uDWlwblmh6G^QP5~`)d{4)<0M`xZhT)4H@;vW`2FTYf?le%f(ljJ9l^`?+UGaHGC~8M}G4XWG4g7425K z;$w4JNe(;ZCVjm)i=tON`N~29{omF41PS zDSBcLNoE5oKf9u(jJ+{ixvSPGsnxVxfQX)Q5IZKp>-h&Li{VZ>^0KN33oZYle}>S% zTl4i#EV%bYH3a$SsHry?5#-caIv;XiZ++I3>D+Tn^y#4P!FL{1-~9`FNUk9G$wb(% z3kcEt28Xd*u`BTgN8GZU1D~mcWM@7Cmzy&N;x2Ps; z^v#kfvC(m<(chI2LsK>n@N^B%DA4N@(e~EGT0Vm06!tiq-7k-Ee-IZuKm~wzJ;XjK zQIUcqVKQ+sajmS)lvKuKnmon7pkp88Mfy~2+{>^QGUdnEiHlf_Dr+;0pi$0{&RiIcA^Y{xtjoJ%ExG;ooAT|DcR7%VbN%OAxUJp&j zQBOFDqlErPoP}`!B+09=v$xW#-87~yOneCXK7AmWtmwJBNbkPVP}7k9)#gKJpRq%e z1imXgXjsDDfyr9IWR2T%k5+A9H)+qLFmJt05)Jz?1wJGV`{)G6(8_>3QLOUyMnp>K zq3lB`fE4ReRX9td8Y1ZIELicD+e3v5MaGkkHjiWs7^p%&##Cy}7R`aWSQ^tlw{~@p zX%WTl6c(Zz=YfOL$5roE6Q);b;4%ScSd0)s6rV4jkC{JJ?58HmfPyWiJX{&r_06S}nlCo_LAK5}CB;-s zj;w?fTdPA};ZAcjtifZu(+6RsNZjgLYR<=9Z)L6xOnc=38Y(`BhKFK$*zHT`ch9u@ zR4}f-Dhremb@Znl*avn^LZ7P!fN-vP>rO_1@=jZ%By0jq62ybEMjI(YJ$g?Ats+^OKZLM*Xpr7 z=~D$KVUdh-!Q-BKU|Yb5?Q4zFiY-GuN z*fudA-cRQ9KDC?gTibgcdI9iPEe5x&lANZ>7~3Vw!Oqs{r_Y=RJ;e|RPII`3i3ZlN z-{$8O-JhTjlxtm_0ay&>djOYE-MqUXO`t&ecdB+zWGqao!#!HsU{t5IIzh+IctZxA zJJrlCH2;g9krjt;rM_@cUypb)kHJk*eCMrD%y z_B4`ChsW!zjhc(~E!LdmXU4B&KvrPjCsybf7RKjjr#<1!M2AsYL&lKo+8t6i;BA5k z6UA24Q@Pt9FyWQA=4SNeG^CW&0BhIO6%o!OZ=+RFx=a1J=0{px&@vT{h6phm0({80 zbf=P@#4Ho6E7(v3kUyT z7ZB*D(8aeT&@c3N5rmw{YG28U}v!UXY#0_kIjwOL7J>FJZ2c(P)T zu>(RnTIjNqjy)~S67K0I`nG&pGwZTk#GYKB;~RQ$nQICQ9#m98!(y*Mx1fJ{-83|_ zT}Qf$t}KiiT{v;yHE9Y>&W0X}00Peqhw#;;o57dJM|FUsHb33^iv@?9zUJ0|2nd*g zzB$doB!8F0qfq(?*HV8m>~7bbAf7%x$jK!*RWv6*q?^baVWf9M=@+b>EWmkBp5EIcHc!ckvR zTe(J)Y>qZ>2Fovd>LNYz1NOqS;@RIVy?vVEsr`<)p8>RE2m^@6r*dOsGxV-ov(zR& zzz$KSLJL*l`zS0%l7pi%5r?*yG%d*K&tb9&!B&|r)#NDu1zlJ=+{xCS$s0DbZ=Tlx zpvW#|hB^EnEb>=S_tb)GgKs3L*|njCw{*Z-w_vpn z7-aS*YcEYM7{Y)>rT+71hI@ZdnM@Ay%&zFtIp9GE_26tWIw@G?b%X=GE@^=*mD*h< zH5{PxCl?(@ZpCy>n>qAA~?WF&CeYS{)^A;_CWv_fW78FRW|( z8N}Y=dTxnV)MqeiTGudNP!NP2u71MCI~yi^)Z$A5T#()_kx6@}Vy4&NU(0plcOQu~ zXUZIp)(2rBPGfFTy|jz&g{1h;?N!&iG&EF0_|ES_>1l*ICoerN4|koL@(aOs))BIs zt1EaRh{f0!$LVMy^KeB77b+0cr#2FRV1|EF zYm=eCt!TJQ%8rV+qBL3>=!$*@J-3(yix&@0NCRtOH^QoZbqw>PsDx%G5e>7YSe{5m zx~D8`Hbxa?H|DEN9+NqgF#i(?5>}w%6k{44DEEiuoDIS^CPys@k zf4g1^frT8=%Veu?p>TdT2rxKfzci%E86Ovhyv%!#a&MOuh0Io=(5U8S!b)x!EfCABg?e}ri$=l% zKb)2I4cjzn)1DEC-;uFXe*$7rK;P~*-3GwCEeDuztc=nuHJI%g&f80im8x%_>%9xC zAMXDQP7Wp!dvvylYz&=WT_U70I&5z0@DdzEgo%G&nEb>aH7oJMcO0U|;tK`X+FPmD zRJ-r8^VZ*qjgWwHce;J=;;D$6w^7}a6k}vP$%%Zg`gymE$4<&0%S5Q6KS;8-6N5;^ zCPA>Xae&aSSceawjdfMOppA0?@RX4S1_^Pg8A5==2&@;+G~v$f9Mhc@_IJV1<7bSe zmmQD>wqhWW@5R4gB(T5E##$JL$RQXBBcGa0%nWJEyJhOXf%y+=^@IK=+gYq+IQi#V zdwC|HkJlqzr8o|{W0eE9o!@;EHTQj8PHcxM1ag%s2^oFKcmDa6fJrZef2lg-(Zc$# zZ&3ebC%E7PVAi-q;pK8+rAyxd(SEQWayE(~^UJ{y4un`}5(9MM-Ci*Ne<6VgANVGa ztiT7L(dIF{0L+@fKoAdyyRw_^juTRgnAR&}6p z22hWabwNcK9%f0kJi+yTyzN-z;S*Cr&+uGaVsaUWx9u4hUNv_hboMic|G|0SrnuuWU_^tqDZ9OET)DGk0 zyY&+;fD*{LqVF_gUbek8`I$Urdh~kBm^$|0b{9;%mgskHdB=O0)m&U%M7a02+Fw6< z@}5*fdnF?#F3I+!N9#bB;CA#Emx`KmS(z(CxTKT4o7Yxc{9eQny6_?gH$Em~cYlXA zm6&zWOFdzs8XeBJZRQ_M9p>8wa6ZaEm!Ve$O%U(W_meKTSA>%tWvu&2!8#`-7A?oy z0!KQZ|MDD?&Wu`~wUL@o4|~%NLV#GqJ8Zgh1Oo#_LPL@0w2y!99BMxaZ-uAU*Mn?t zj+1we*gP*@eV|qy46)(e-`{YpBtihtnAQl0Zd1hrQVrm~K#5xJD=Iq&nRK~4xUFyt zF~r@=sf@nzKu}tYquY#O1IWix6 z0nzsFmmXqY!KyZovCIvBfn0fMEF)Sylnn;%O^nqqW9lvZ1$wV)7*B_B-cyDG22y;i z1$;nXqwTHXK1YkI>l1YTdJ8V#3jb(aonNcfT=Lrx_#g(SCTCo3XH4iDkEe1w^_y_D zhEE*dU$@$HuB)lbvwNK8m@(;FS)PoDe?&Tcs;JLTF3D_=lrqd(BGr8l2s38#L@0l+rkT?A24`-p4vvegxo;q z#{uWIT+js6>rii5A5Pan=fmNpjP>R}!q>1je1RAXJzRTn`Ps}^yt#^)%Zt%UI&bY>TA`J2{&gDq@l=cb<15pTOGg++=5s>) zeflz)q}m;=4%3C4&24BbC+bf5g@N&K3(rT#T#2RB^=qL&)6zVt`5Swa$HFnFALxUH zUZWD*f3NHfh3 ziOIc|)FYul^2gxuVQ{uKP3_m!Oy{Uo!|l;(I=j9_0@3~zM!D81d{)?(S5QjGBTSklhM%AJS!%!Q)dTE(-gZa@p0=8J~#0V_cZY z={-0ZH|5(E)%)bbeluW$WbN)bw;bH@@cb6EMGOYgoieQyk$zz3d8o;f7mVp{a8`VH zvuC=N#;Vt6WJ)>g92u+9ug=IszIgmiIiY!WcqmW5p@LfZw}DyhYce-ksW^>0-Rl-n6RKhPLkoBMUH<%TpS6~RwN)6sT)0U&ghYk+G0;bV9Z=g#h_ zQ_HFCop!8_(b^J0<8^QGjL+y;MS{5F23oN23ai=lW=>970oj_Xl8yo%tJ&qZj^>WA z^3QChYkY{KKi;hsQ~z-eW30jM!rb|XXVgyLNg^{q{-uTkS3-iiS~Mv$6&B=F4<0Xn zaIiC?%b4lmcGTd*y}gYiE2k_FV>mk6yg-*eGA;?>yWM&AwqJY3!|g@&U=%bAMo9Zm zphyMg`}+uEf#*7a6`A*8wRD!>OKXgN!$%A+lXohb)cUthMB3-=t=;IozRaL|}<&f?@; zP`d*4)`hV}zgx#FM@rrH5_4qnNkz*Kx7xnf?1oP<&NllB!Mj}nb8kXD0?JY% zny|2%&uEb!ld&-e`37M7HRhv%7ONJg$BDQ=QAKgw=&78_X3QcIaA1VZ9YG_y><(iO zUxFcL=Bn6L|8am9*-uyu_$#p+5TT|t#QKvJN#btBk%`>%Iw_k_H=Q45wl+{ErF*2|* zJzbLB!Ae20Ie)wyCrgBX$VVck74dcKQNqg*@c}d{A`Ck6Q8%CNe3n)jyR=${Q=_uP(hf zDJ07jPbE9cxxUu05l9>r{ty^gSp?)W!M;r;Z&BRHhlJdXSy*|~-;l9jT#pr*`M|-f z$0mxUt8X2wkR%Fmu$w_-IP?400GyF`?Du9VJWAp^PK+Elp-RW^>DQ*dWxieB)DAbkVW`31_mqI|K;l(dz%e7W|Kw-Hq;sWcuRv9=bs zD1-1NYd&^Wn;O41^a?*RYv-qOVryh@R>1?78!y$MTlZ(2xOsOf)hE=HtY2rxTgp+1 z`3PF*j{O#&ay!SyI43IEksA%G3l})NKOpP&>9(VzwR15kWL2t>V=OF}Po>Ec?iS+d1sL8HYC8DuDLC!z3?m-I0E zGv}=7&*e0Duato4cjk0y6^g%sZc8QOls`y?9y(sPcRsp#TPK932It0F*y-_tNHkk9 z8(jm-(;--zu+dSZ!ppF!pnXH86gY6{_>pH!#wLbEzfON*VoFi`LPs?iFP1MoUSWNz z-D0w`tiHzG2CuUg+`q!+z_&5Aome&drvrtXjC!~`1bcPF>VTtUo+LJ+wqc4kJ2lye zjYauaz&B*OQ?i>{ZK`TR#&ixX4f?RXC0?x0hofKjCQadZ+DtfG52Tgii|3kYr9A8z z*VDPv2MocwE^2a?D)6Ikr4<8ZH9V}=XFzp>Mqq8$>Cd@krY)fwN$C(bvl;k4#<eX*%uik7O?TKJ=fW#m9QA9LgM--LYI$k;@$+*~##;bdu!mdfU zn5?E}lUEviR@c{;r)Oo?yuP0f_c6)v-W}E*IDmAIsAYx>c?cAlq}OK&ZOr!>IeI_I@F6=e^`3V^%j!R(X%2`CV!}fSJ%j>w{mk> zk{hZF))gJ|V}enElxpX*Na6s5V7$3gbJdBhSoda3hTf~J7=NAr6?Ci#VEwC$%5QEo z7Iff~_ie0t3uZ!B)YrwNXXl^k$hQIGv_dXLZ)xTIJj?+aw6=cU3%8&TlDux*`f6JD z64-D2w?yo+USmNUHuBYAYFN1VIyKGFTy?q$=OS^hAK+Duk)nPDjoLb=ZXVta1~Sbq z0q$eO(^DHU@}7aztt1o~X?|h1H3X2>NEK$c+45JE(d zbp8h|=T5i-9clz#*C?R2$HP*89Yy2+z%!XUEu!1q5?2eI#+B-Bda7Atg()1CaApk- z;+y-n|L>zjz?XK6+zAnzUR<&O!X1K7K9g8FUtnUet-rwRa}&0LiJUwg= zTrx7be?T|rRU<>Y^KvKjafN<{_MY^QdBkB@E*lp+d@F`Qg&~ABM|T*YM<^!Bz9N8N ziaK-nUwkD~OFAlpmj1`X-=&42mrNop#QPl%w{g+1i#$Ppt|JG%Zcm*Lb^pE@@4N;c z4gbU2rj9s(PrH_oTjyynW^36n?IkF#?d?WpwUEC!$An;#f{no@Ira>(d&jl8ntT~V zfN~swM*em*T=}yJx4`YM8wvzrpI}*hW_YF5rFt)=Qp`sx38M(~hW&PQsbs`_ILG-{ z5S}aw0wA*-^g!-^Fnh8KpbafD8HU&m=I+55sey}JzW?L82lzV-u}1+(jZb&+!i~Ww z&&w%;@w*F->;1+amS%tfY4v(1dZ$l<0P9;?~FICjRcIxiJNdfd$PRiNJ@4HZZb55uT8N@cmoV9Sl(A=8p8BA-O$$FxNSK zd;Jt$<@DWy`F93VgzauhXL=fYl5hcl1$ga-haCo-;9Mrs2#n8Q03Z4#xB9iUZFK7v z%-c~8alBTG2fx*`K>f=+Z6$I80WIw;ZL-r=7E`c?<5Y=vJ)h0yWlc;^%d)uw)mbu{ zOGVAGs+wJ=wO&g>f6(2!yHF#E`;V(m{M18B8*TZemXndv`f&YT6$p@}I-}n97OW=g zwzKjWmkudVx&mdsdW^@NSNv}Ez8X4wdWQGBu<=p<-y5)C{>DC=jtNj!Fc7kol)f+IDbFzr~w0#lQi8_*@ zjdL-z%Msb(v@H5kL|E8aiRg25bU%D}donTMYNzmb&qJa3qPv~k{uXyMuLQvo^4C~S z`_tid`+z+?*(HGv&hsnvSD8+?Dbbff!e9}Cr1NzZv3Qmqwv5c@n%g*G?70sbQwFO90N2V{Yx;t*D4z}PSOjQvYDfqz2AHLdM5 zjs~zOg{){n$d(3o`h(x`Lr=OkWlwxE;uAKOEhl!{*vwj3Li?C=%XxfiCS-hta@#+n za`g6vOXcdIoVyqmP%x)NAejhIh{fdhX?d|;!*X*Gaj%Yd5BzHE<}>wcWdpU@ZGn-I|SLJ_FSU-r)O@*M$t6IYeRrMB6qC3 ztf$$YW>~P-s0xfZV@M<}KMLgJIzeO~oNmtM(|^*Jem6*_ObHO1_pqP*d&x%fV*cV_ zjQnyCY2hL)t+b*abczVS(!LXwa2J0WyH7}i-{w>3{EV$OzkaKIIHnxv`O9EHv0VcE z70688#mS+E&lg15$cR}gP~c-@TxW{SBxdkZ9fa}dIU}l+Qo9t8fBJ_$mGq|^E-;EI zb0_+6FloLFHCJSy=GRCr7SL+^-F%ryRY~2kw~?TZ7v457ds)xJA}ClBwbj4;D_j%x=eH8B6F}Pxwr)Or--G z>Q2dg85{QbFfKJ%#Y-#P+DI_73jo)rJ#ka`{cg+33vm9P$M_mpk5e*@DeC$BybZ$O z*_q^LmnXl3m^^zRaFL#qM`{hZR#Fu{F>V{X(nj7`d>Z!QOz}D(+xSC^V8YBNbF}Pk z=i4|&TuScwXdv!TYS~s<{cZoq%!{_zyc@o<>f#pqjpmP9P5SYe#bFDMRK;gRzGe z@JhL}Vx)Y#CJFK?#cwQ^@jQvBp~Pd?1qPMfA!(iwz<{jmmm;{tTCRkU z(Dv9yc0jUpme9T*PPGrhZxSIrL5n(ZjqCKbzj8-*%wz2ZGF>I-aoHw1bvQ(v?w_8^ zw7ym^e;YJ*_{&&)km(z;ie7o{t!oh3vr7NA6602=bE2xjkZ&Jfn%fr^g1_;aL8nl3 z?5df2vm~EPHM^mw9o^NZ>wtp24%u-g>BG<09UFD+hs|)!|saF4z?r3H; z6gNCqA&ovm)^bjxY9F{9G4NG>WB3PYbg@AHl2nB4>!v6xh<(x4{ICzhM)9M$5X()@ z9NhDUyP0^aXhw|I#@?C{BUY-xv2(8fxQO(A+`kYMCfpq0cqV){l!G=CQ*mRx?M6`$ z;YK#6Tv>_Jj}|T_F=hV2aBJ}LRNRPv4Y$bT0Tv4IlI5$o$k#-TSi@iK_kSa6c-Tl- zq$Fdp=oj#4(4QEfplHo91-Q%1xlHIf<3@-UPj*-;4IXp!>&tYq+c$&G1&_b13BYj* z=E;NmijrLG);P*wy+KNnuzSecHk>t=d7+BMpGqer#!%6bo_qk&rB2Z?vdXB^D5<6Z zDydgiTZJp@74x9UWjY97hl~7gsE}PQ!L_UDGz)ati7`qRJuj`K!qMLkc1Js66x~RR zV?ckZ4mi`NVrfa`^Yb~bW-_P$ke}PvL;5Obqc?Q@A*)~!UBZ%$KC#M;(pR=SS5xkwn>kh| z070J`x^dRVHD8X9%wH|MUpKQqzJ{Oj^+Zj}Rt9jtbs)@rfkXO2D+ zKE36Z6+E#>$(uE`=QePNAU0O>4Jjnb=YoNl(!*rwqd{HMGa?!{Joc1DWl4CgvW>s* z$#rwGv57vr z%WKhR;O_|IX{cA>S~fqMXHPwTp=YB$T%3p{S1CHg_V6w@4-XP%I*5$V4Yklxngg}) zOuGm0@GK#1|Hm3{jgA!S^&8i9e}G!%YKZ~?WDxIdLGe&~fDo*Eu#ItkEkPB+e%0Gp zS}M|Hu_IEx2nkd%BO)bnHBI8eBDvNzRQ z0IDKUoF-Xvk3Z}ny|N@p*8rod7R)ygFsLzYawgMc$n7jcdFA$MQQ_$gc}hf`@_ieq z=tAvMbm6>fOHv*UO$>?My6)~zW)fjO;8KhS>=voKty8W~#;1E+?$4+Rw@*X828kcB z9Bb9&@ImLgn!5aM2J*@a7R>-0RqTNX&v%pDn(<>VN0=V15b;fs7=4yTC!Gh61c}U7JlSy zGDtK-lOrApY#7C$VG+daE1UMhvj-!E_rlXPRxNP=z^>wKbuXDa-0g44yT1~0>nGD# z$BQxNAMVUpp!iHSd%`d>x7|L(gvp#DP`<8_RQklex-?v~v+kX!QU>k2V58Nktx#Xd za95gq<(*VpB}GSXY7t%hs4Y}0x#-;9@@x6!OjNAfB)Ry-O99B8my0cIg#5}@#_}S) zsJTF(!Y3eLT$)-+>8mlSEuIr`S#8!LGKU5c{(Q?@UBtz{u^UY@$QL3oA%W-u5~~@> z$lkiIj3yP$lKGtS@=>ZQC<1ZfM(TK%EaLx%3vf8LKlJta614=_*H!-uXhM{R4X0xN zl|p!V!FB&6{#mBYVYd$<+J=|qMg8O31Jd|W#*JeG;)TOx2ML(9$%5rZ`uXNa?TK63 zr^HZi-VC7^ud!ZgGRTKzN~J@4{*_3PS{Y5MDKaFeP^?zd3l^p?d|V^5Cy-rGY)#rgmlotUhbCmlJyVIWsUj*Iplb*Kv9vfJtcQ%PJNfRw%U zKMDVffjwbl|F2PMZtWZcbXBmaNp}w-g45WCW2-%v1R5JpTd^)08jp?kqfwzia(ywD z9;|BLjW8Voom(qP3V<;gIaU$&l)$7!I+c8A8N$@Uz| zd@lrBtj=F!#+@%qd!VTJl*bj9jl+4@hw?^xTt40^9`Ydd30xC_ilZ_CuO>(kKR6gk z)Upn?yr94yALuV=S1;1+e24r?$IE~B`l89DcJekB~UG{H`e=;1RpVA0PS{dO--85AA!oBOyLaJw=dDp=e)xBx(ze8r{{;1B>K zEI55$xk3MCuL7FGko=zao58*FVgaYrWCdjza|~(kt~LAhP=^rEwO$3d>ed?_FTlmX z{3oz~ist~mAJFCoc;#%C>EHKx{U`GOyP`G62WN)wYLp33`2?mDl7N8uu)qhR3lJaw z0!WCs3BO?jY75K>n^iRbiqpciuO9@=BYB1H;+gX04`i)Y+4|WB=wOzg&%ku>&CUS8 ztFUz_<*`RMrLkGKC?vt-1wGY`SbdfFd=i2IwSkx@ETh>zl-!Hwsj!y9(g>7yI{+w* z6C<6n57YzCmrlLjmM)YcFY9sewOZ`gY*(kQQMx@WkI(Us#%&K?Sii!&LtvWyjkqa5 zlM0wp)-^H$%)pV+*grWL+q(jW2Qk5~;lu%KrtIjMvNB5&)TyOyk5p`Pkrt7c*m+g9 zmqow)j1HVd?Z*t4+@w zoRt-=zbl*jjVn}@MaYylvoA+}reu1W#U&d*(3c|>2}DELa(Npo(#&jZz)0@{C_qRD zqoEG|0cpU0hl`Gc#@u}?p3mZgCqOo;R|h(5u-!#Qf^=mn=*7zLVML^E;O&0JP{xFs3ITg+emN#F6$_{FFOZyu zp1s&yP;u<8H-XAu87TZjeo-y+9-sZ&c>q0Q*S;B$dFSwcW>*4ax9fqiT7aq^&GoA~je?e9khLAgrULiP5F*UOEY^ zQ{*|=xV)yOp-=S*XTu5Ig;CCwfxhH_X(P3xX81PCqUlJ4HyPf`i+o*iD?DU zaS|c$`b_XX-M}*an2j@CZ|~1&t<&Q5oex7&S;?=h)P-@;-#O7I@nszi?Su;)tm7VQ z#Iy&LH*DJ)_KZ-s+s`r|miW*N-#)h%iEu>r(P1>avGKUI)UMp_Ck3ec3FN9B;hdj0 z!4l+ej9XcIvg`JYo7EDudZPb~;A(C5NUz{3TNzxDo3T_owi3J0&%cbXDoPX}<{J{t zmgcZ)(mHn7r;T>Uf{2s%>@5A*=S52 zLw!ua0BsMmI3M*jg!uWBi0W+wVypqT3eW!A{!Bi!kC}8Uk7A?j|Eq$wX`X2Z9eRao z@d0%1bej%0vhZPfai@_L0+cRI4kJKyg3a*vtD3_q_nY?)uF~fJ0ZjKEW+=$tb0yU& z&F|{##x2d0&Q6_jm2LA|P(jXnd2cqi;KXaS=NE7rx89Kg-4A>tk=HhLWAiDr@uj02 zVP>1wVrt;Uk~{h~);&&8D0jw;t!y4FKVU$p zu|)4Cv)P+ZP_($B;&nTcFQ|n{P?#Z}0c(m`XvI5WE9DWj1`syxj!MLcA< zFtXqSQ-f@=Y%B?gf*BjATknH(2aG$Bu^$9X^BPi^f+co%;>Gi22i0gAZsUj(;Xr(j z1Rix+OnK&LK#hSbV@AP@nFc%jW0aCUk&-GUD)w1MQ5nfaak$_)Yu`t@V7U#NWBf z^@1Qad8D(WiWS9ku1wg%g}vy@o_d+&>T%+Qtyr4~ zCrM&YBxO2C{v7d87j1F1Hlh7BlA}K&MFpw4Kbl(H72=vfJx-QHrMg&i_83%$-5C}M z!#uE@Sdy)c%(djSAb{Gm%Ap&EDU8;BWc^J$To$elxk=YrJ32By?O_yxz>MzYZ)=4& z_;1BqtFd6fvU2JON%YO##PC6o!BXgo2@#HwUDE^fe-09{Z8ip<&uPuVyMCAcT3Ny6 z(8Q0OF#s3rUeHwRsA0um*j6+1*ShPf$W#0q5Nn9uFMO;p0=p<#39; zg9UyPoA<){N;JQ81!988xC^bv(bgdf3kTVQavP;Yp}p#Lb8P!MFfR4FRR$)6Vi4yZ zoV9?+k1*^zfg~DQ^o1R1^Q=w5=^PSco9(Ht z(Pt6!#${UR?HLXuv|gCohid!3m5rDPq8b+k8*V0|XCU7ik*Kw4^Xx3m+VsF3e!6eY>$PVm zzwe;{63~J6lTSXpv{G0Q0aO%WLw~;B_p(7xxiFX9g!wexK)#_LExt-8R989Wx&^v9$wCXLk+0ePfu$n~JoszStaigYd2U zo7(xhcsEZ*ywII((>|~^m6*cgvzyZ3ed${F1#)L1~u?y0dtNMRP~mdyri_JQfRB2B(Mb?={{rpMyxfP?sBAVE=v zd;e1+@%7OA@z`zv%q*#Fzg-r+1OFFtL4_{?`VlR)zzj1-jIijRLK+z!i`S1}e%(I! zTMvZI zpmXLkAb)YR!8TDlnz4?yV=;tG#f!~I}=^T_kCW3x582I?Yd9ILz*-Yf>% zKwKD7$~NY7gW2)g)a=pmuwKZFZ3VLuR_BuA-r;f@Lu5Ih)E&l&pkY77`s}H?Zy^`m zQs_L9-aa_v&}7YRik^_5!M8lby6Hms?wMcw5kY`JI`LXKk+GRk?ZH{)VFL54(wm*` z-QbPspZ{A7nZ^SnPM3>L(YdM>5;w}EZA-F+1$paK<=jyM5ry?Z3TLt5OQ3@P@gBfb z(rLC;FIPsY!P7DecbbXBQ$0Lr?dG$ENj;fyC0M~=6%M*zX$;xH`1G)WFTP+30=X)e z-RUHMU0-O(R=eD(bg^D9Zcc5VKGMYM%xkyG^8hRKQ8gOZlO3o>h(Sn|Q5g7=&A`V* zY~44k5bTXJh4?R^g;^8a2g$0auuZRF>i66x@U*T^cWAa>B**j|qnu1(7EYSp{xw3Z ziC&_!MqmsnZSG^Y(3aCU@?E*Oy|_ESez-k~gkH)-nX;IH8S~Ljlk2hZy04!BW>eX4 zbJdq9-|xlCgBD-yB?W5@pD@_;zpTAp*^jo2`7|_)1eanIaL6gMe#gTs^YM12C2j3c z`5NtdFnv{N(|W&0S*&VkZ;G7|M*PMbnlPl-XHtN zeR|?G6o$LY8?`sl-tvGT4OncU4ZhY1hbzq^oIj&1Cex;^Cgae)Kz-mq3ITN9=nFfO zzV=-1b|Zg4%HMbArUqh|8`>!^GFvF2=AkXqY}(Z^*=W|(f(60%9A~1$?l!qG59O&z zh07sITTB3|iT_`5AxL+ktjRoNFk{SaHwB}&Bq3+tg+WTe3f+c)wS@>dZMX6eW`?XDeYu6BqquXpOlpI?lkDMNj zK7G5@uwlYa;Q^v)qu=*JE&?(B%O*SiMBnPOq1gew+k+qXx;Wp4s0cJ!xbpP!t&lL3 z4h1+!1O4bmOpd>S)##+hxj9E`>Vk-m+uJiPHkV-HG4;C4!IM`>l=!DZsS3B-rhT9+ z45-z3OcYs>fR^%uZ}X`&^^51gMH$$i#MNg(p+5in-;deZ4a$r2*tjUsF-f*Ar|;Iw zF%sv=kHK-Pu4YR!Pynz&U}|1g9{d#!mT7k_BI?r$hc^9M%3di>g|YiR`($d$&qx$33!Une*E5y3nBv(?nMkimo9BrS9KxKn zC(huB!ktz6>DEM{!WIgHjfEr)l%J8p;T|XQ4kTm<;)|4m)@cAHa7pY@!^#Da=@URY zvvFt*XQR8h1d>$Z))GLOcgUay^e5YnU!vW!bF?LPZWY;huPfh$hi-rCP+Lx0U*AOF z1UKXV;q5J>x(d6#!2_t2AcAyvNOyO4N`unf-6)~bAl=;{An_+vy1To(yXS!Sz22F3 zo;7Rc%dq$W%X0uvT-V8h(r- zDdS1CgW0cg(*cFD^84A`Q5%f7S(1EqNpg^B8m42w{j|-zADhY8TKR|!KrOH{L!@cd znjU*X7YET*ClT*?OJTj@Kl04(e%=`zWr6dvpWp?48ZlQUC;1HYR~uENAtOJSuC>LN zx5NCtD2!>B9?$mGO<7yJlQz0q?+K4=DbM(*FSL9Bsgi@>hlqQ!(X90HBu>5<$3ca* zc858D5Hs*`4==>2^w{3+<^MwUsnskAb9NrEv8g9-`<-4l7LJ8n^KZZq#oPfy{H6PZ zkkI9#tr@gQ0Q|IQp70a_`vBv^Ek>>m$MG)@5&XIyNAVlKX78;n6l`8O+hsMn`3Kjg zqembF(1dN6nG*wKlaqGXuT9Ii^vP0IcaANE*5fzF(rn6EGN_ib%dXL?rN#)Mi;uO9*AOPLxNU4OWdxApC7v?cgzx`ViKbl@%B4Q@5 zpR`<|R}hrlL!>adp=4QbBKl2+&8!i`Oblb9dUOa6k8K;Lvwt3xw-iO-F*$WJNH~JK z7BSpPV%VqjMyA_g-!w}!7bMKyTxRxQmY-?K2>gJqvgY7f_MlG0Y5n=mM-{MQ$WYwZTQZ5Cf)vWw~7m^Z2Bai=Tt zv;9Q}0t{XTi`bgQ(Yx)r0$-7xF{E$whC3t0%?FPi84!CZKYzKic9Ykk2dKs@fS;c# zfed+)Y-rO`jh>usdKD{+SE$8fhjWrzYpds10fH6E=k2MXmgD0=G%`IshrHL|12C}6 zA~yC%y8+er)@nO?njf5*vVDv1HsP2UzbF=hfdireBBsZucgc(uch&z%o~!raMDj8V z2L2-&-T@X%FNIZBg1(;TzJW>)U1fPJqvvA|SNpK>7vCk^S~LW$;#fsAmJrXFt-28}|q$Aesr~#~#{|PCQ4io2qPll3pby;P``j%Q@5f{>6Lo^o2 zcc}CJt!IKZ#h0}7z2cX#^7Qi?FK`ZJ-}F0R1DuZno|pIpV$}~&cd2_Omh4Sd9*4w{ z!ZKUBku-8|8w{ZSq+>E*{Dg84Q&Od05ql^04hm$33!4%9M=p3CdTUpDZ(er(tt3m9 zn~k(`6Nul0G?v187zKr1){x9xaFq7TxcL;E?(65?2_acFHmlhlsCx>x6fAm+iros^USw^lip=RpML z%HpUmv%5y&z1yZ&SemrC;hxtRK=g5DKL7F9Xapo;Bny-BOUeA8iKRtg>l+|$ZVoQ0 z#~8&|L5q=&`sp``066OM6;NE>E9+4#z0}a`oS4(}HX@l!l+UESxsAXm6is!z6ji7- zW=uXzzb@QYHD7jMXxVih??X5Zl{v#~Lfo0n8@U<7#f|q7v7n82e7DQT3TCY&Cl~s% z;{N%DV#n--a)zPa`Vw)$d}R~4vjqJ83iD2MfQrgerq^17xp#9nUAgnc4A)HJ{joyk z28xQxOo;?$96CD2n$h;Q=9{8#QhG9$)dl!)20_Ik^%a^V-L}@cEBoGzl%4H;RwZBV z&y#GvfU!?PW8Y_5_xHZLdBIYQj?U@KTM1>mCne{DiKyS&Us_umLT(5=NlS|vu2&FC z`JsRuxq1c$zzw3sImP&XH-HUkUx6O^S7k;g`J#4zS9ouAWd&Vd|MtOA+MMs`lJ|ZB z!c*&G^h4Z%=rtZ&O(U5?iSzrJp`C(KsfD{DX^P$U=F60F8ttuRZ}(vu!0mS89K5z1 zJC-2N^MTv*Q?aV@EIrM(&*!X}KXbAnOi`wr3^DIxDSHtJ?N3!}eSbv%q&GVo){Jn_ zwE8A&-a(*6hC{RJFfK*&Ev<(DU7(=zaLR4IdWwjmy!EliU$#pX9ZN z%$)M7(He2tQ0)^ph+oUa$>L~=4vTiu7)ZcH#kFu(?zY0b)DLOUWj~cvN|Vi3{t)={f0p&BgLUb%)>a(yAr}7H-kELYOCmY+!t&?6 z>?#b6A#825Rr<*f-(q{z%R3vnxKF4bKgw`tYt9|3eXwxldr!Vnv-kSm^w7wwU^H_d zQ53&2d7EvwMz^F4v#@yjZhL$(E%a))As5nK%3vF2ZqvZAA0wVGmwXBLN%#y4t^tv0 z(Zr;M!)DJ*;SxD8ONVIaSBvlNMO@d>p=p0)vFf$8>xa+PpBNW#G2wv$lfBr7W=Fm` z2Q95P8z2D)(|p@DAS`iXM`x(#{rckWW@3ilM{QidELM_VVf(@X%1@c(?b;b}ONHi` z++Z-z)X#QQF(voeU{Bi*V{mNR*`|GcgI!x&tt^zk-fA&)$>TCUcWzyhZ^3wk`Rd}+ z$o7x3Ao2pb?BBZH&cS>HGZ`a&>P9y;0)y7~?<0gfSiZIsES%0aPUuEp?+Cw&FV`Qc zRI_|MJ)VU*-1*W~Aa393>o|g>_~8&m%aI43$dBwRPuL5n44-0nO06o)LwG#&`is~} zeqUcpOUG4j{9S(C%fPMol>!n-bS%i5=hlaZvyjxqiR(p0kME8<`>rk6(0)Yz0IFm^ zA$lRn^1&m}MIVzws0Aho`0SR}2Gu`n@SJ59=eSszHAc7pOw<6sGZZo0uX0>jlI_W; zY5MRban5RgZ7@#*OMlsumzI8Hxk_&?ksiv>*27GCAGb1al5LC6-J7HMOH$22uJv_C zpMm?KRx2_EYOk)e;k;d?N5(4KZ7nP2Jt#!Sh^ z!0?Si8e_=tPGyzpb;9J5Ol5$rzrAjiqHsB1)!E7Nz$m zMqGZoDU7GTtHUhApOJ)Q1&muC?CwqkAx_W3Cew@}akzssE`Qv|`NP&$Yy6dX{ z-_lL{CLyhFMmOo~PH_bNU1ihR9t$`1aNPvJW!`5SO^3pANq2sdZg#KtUZQ!ed$zX>f&l&Ko+&7;hj49V3?wJKEVkuZ0NbV5bH@-fqpym6rD3TwsrPQlRb_*_ zwWmizb9-FxR{5*juH4=&^Kvo0XUJ-%X>~qw=m=ebcXB&Y26KQ`_jv69|L|hfiEryL z%>0XY@p7x{`|JgU&`Z$48@w5uNK`0!IZq#E3m~jLfI^Plk%NsGcsF4f+>$lCHM+@% z!EPhnQ~F*+_lJKfEz55fItsaDT@|%qMSaV!--8l#GH(!qx7Yv61-LHXo2$h5)Zn!J z`jKHFsrs&8<$i0k-Pq7;z9enlWnkia^?fyUdu-{Xa?u%KbXro~Rz;_XaBCHdGi?Wt z)sk@btN-Y3JNhFBiQggIvf!{tPMK_g!+o+9mv41VnPuO1*VxCCuVyDyAqK)3-tz!mePPy1UA_yGo36lyqsadV4xrE~m7g zgYh>}QVWkfiF$gy4CU+TElQPUNwyLGk!0OjcXLc{S78}Y46JZH>RVv&6C;V>qT4c_ zn|xBnAy2sKQoW`bza}I_6N|=>WDb-U<3Bc*wzSlgc*oHFb1L){BYRW%J@?XJd>Be< zUlV}2q*%UGT|VRo%CQBG(6u=%J%OLkISek1@*45^{Y?x&xo6W|+8NSJd}{MuI*YOJ z!@)Ndpc+yvzp6+gJ>}F-)E-*rrY`$aES!jXMT;Vcz zGX0>21Wh=p=UsMFZvk88*dl!px`)T;^dR@Ak;$pP;Q|XB<$~|M)oT{v1Tdh9fIv@O z-86FHbyiJLp8%EBd|m{Q(MTr1Lhe)W9y+%!`{eAnXS8#>=E7w)Yc8(j$o(dFWD&VG zZ-IS``W?-9_lPhcX;EUBnB<_jCmm&1n15*7?tc6nI-DF$(O46l|xP&OtQKM4ynZDp4JBRB(x9)=mQ5ktoL|bqY(N z{qDK87v)p4^Lbem4u=n&ntOk3tW2M*wqWfb0Kez6H~5Pm>n7^10#Nx9Km)GXM+hnH*H-5aHY`6{;OTbKb`^qjLAF zF=bX|^c5x{$5?RK!(#ak=Jle_baZqIXJOQJP+a<8bi*>)PXawvdTx5NU+6a5qqUw6mCqi%di zk#U<(V}670yw>lZFHnc2;3bL!WDd*~0`t}o05IXr5ljZM-2G&anW*?14Z-ao?Sahi z8+`kGZ;Ngh;ZBy{>h}KS$SW}k&y9i7=>`D{`OrfqBxu13Kifeg%@L0-Esqo`I=2~t zgkGcKmP6`r`k8Hd0gh1tyB`~L3KUJsx)5qsVLqTMOELR=0TWYONf~PtqILbJRbL^fuKg^u#>C zTgd75)zfaFp-M3C-6J)kNYUDBJ+Xbjlhjv02!8O31ngv-0Yb5|dHd_Jg?3?*lC0?c+`R^nM#u z@Ngf5=6L_#YI;G>M|m5zvHOJdCJv8R@J8Z}F%N@TKfcaZvYZ{VpwOUSm*;od>IB$5W1*chj zgC@IG)Kg4TpYm(gpHba77U=urFtY^NuidCmzs-yc)CB#n;xz0v88A$q@<|I<+HLY5 zht&_Nl=(Xf4%s{W&vhblboD&Qe^B=l^3|=`nYjEX4wT{ZwUQ%a?sokEjZn^&~vZ zRHS;f$1*n|q zbgENcW7dIEHf?oj3yh!pe!?7$N{{3$c7JAZghe0HL`UsYfC$CcP9-_6a6L@|Y3wAJ zSp53Z56uz7dA=<}k%88&L};#pW}_Tx0%CL>qi!%j9oqwSkxf?(A-)+Kercmu><#^T z%KC82t+6c>zRVI67Q&@D#!>y~#>{hJl3PDNlG1!1X6DPVn>P_|>mw~AS&lno{(4zh z)A*a80380MP-MipuRv0vJFa84SEsLSv3^Lv-@Crh=@5)`u8Z9v^ye$d$|}AAM-0#C z_<&HTdUC6v->J)u#z`|mN#s-zg41n8Gw$Cg8|XexL|a{4|u z5u|-xc*JXVw58U2peT8U9`#qqi}shA{12J!*NGz9=>J=Z$#)hH&9QMjL=xDzL z@&dYBIzm%7_GU=lnpU$)OmWe+xV-|l-t`1U9!Z4{yhb>emRrY6>}HNd0FY%9b!Uky zjTs@dE^o`NC3Z?(0)-Wrcsk`OKQW3}?GZE_nKspl=r)pvJy;1!=HSQof>XU0!H6LG zrndXosFJF)x@+m(N0-mjfPUf5QN{+^hFp z1s^SE4SaC*DbRb?3G?U1R3I=h=NnsHOf|^DiDw#8e-6oC^7%lTG94S`=drL?h|J<2 z&P6E zXrj6%NB&0j^Q&mNa5DJTSDngo#4Bpgx^%{j_P{O69`fqRz2MzK#*hXa! z`p3LS76tzP0S!J@TDCPYX%0g_g;&>lT3WSzcf=gCHH@S4;kvMZPk#dpzI-L?VDG@h zg4Sik6Qit*n|$Maev?z!tk<>qG6Fm1oo{x&cem%`;`T1&QRw^y3KrorPJb8HCny@&|%h{0_T-%Q7b)&7sOmG*+ekxnyC}J$?1t^;| zekX75J&2o$x>%l;25|#Fp9^+{(U>gA0HLV(d_j3sp(?|Rz#9z>o4U6$(Q6IMXsoGL zAqi%3rj0RJll1W|Z*eLJ`1+#8xW%Tz4LgvTY+$w&IxI+o>|5H4CTFp%T!#l>5oNYn?-E&|%^i=*T zfWp2rc7}#8_$=P#1@W3g>;=0iEIV-Jp#hdL$Q53P1r$+c^M{7_+^NJ-Up+NtKgh(~h&ia-zc%Fn zei|}pMk5vXLK}5rGr~vq39d3tAlH0fu$KN@E$Qpw8)4_t}|?7VW1>N z@|_M(s%7rkj?EwOiYq70LXRvXV({fO?dcg$w&7scDJr?B{ss8iBkMqvovA2c;S78~ zOwhXaI|%J0jLpuXCQ`hMCfiReQU0DGM`IncgDY0+yY_aolVEpD<78Y<$RuvyK6#eR zvsnQWrL%ir(0shj#Pi5t(JG<-%Qf;l`D==*_*|FFSa>Fa=XR_h6nwjZwuk%Mt8T}1 z?G`nPSd5K4i0AbiXQj)omtO7-lH~Dd?+}E}Owl9q?>}eP$v0zsaH2s6qHz!V;@2a>zEzZm%s%r2H+*&o#s+&qN;N4?RVGE64Dzh?a>0lb&3V$ z5eSGCHRnqjin6j}txg^npzTf4%ovdhwakk~6Z=jp%!t-NuB6g1SJNyDJI%cbo4om& zTEuNu4~CGpbNiy1%ENM0z{l2)(7@qAAZm~C>+j8kXgsfaKM#D>z6r?7O<0_mANbel zO^znZ|9PA-StbMkBz42y@H;rc3D)l}1a;?ohS~fJoRGR`S5k=h5dBL)sUfsGhrRmy zCa)tZKq6ruh=1QwQKd<{J%+l!RoB(qI@t4FBpXUl%a9b%VA_(yHz0xo6r+ubb550- zoT{21;_p7^^6MRjN0hvS6R2};kS5!)+3Yyo#2rjO^xh1k!#6dMfy#(waCcSs%iu|H zd|F9E+jJ>6j1{^ObhF?*(a;y%{mj_w_-OP>7%;Ob;c-2YINya=*{H7O&q$6sBZ4aV zEHNt~SAl?JSx#Ht;!;R{jWIncouKQRi)VXSH$%BJKg)sOMz@d9-Ymu9Oi=JAUK;;^ zzR=e9Qp`{S7NF&Hjh+l?z&?LBnraFo+}Ka&nnMu>@5UUvGqW;2qrFZO>w?M-^>u^0 zN>*<5u%qayb@NvgbK!UNmS}jN9P@(P=Sz8Mp@Utc?Lqp30k?UqG~oBNEkA>877TIO ziqvukgGX}F;SNx~a(j?8diXQ%fTQq~L4FcHQ2Is03S+}`j1GQ+iKO;hFp7~^` zaobIg(FIjm1kC7C#Img33$ubKzCV6EC@JrlnpfEOC147FUT7KLUvk%%fIGa^0iRn% z*@Ihx{W|1CDJedJ;?oWxXuq~+w`1bfv0yNCI%#G;Z!}-Q7ZgprqUmO|+Q$cNZ)Ihv z^qT)PLuC)%AFnE^zra(lZHZ@RU6k*dgQ%5U*05UluY}vX=x_&;G~wdQ$;rNO(6mtD zLkVa|gp}txJE(j~BPbjD(C>K4tD+~2!nl7h3Ra}su{%9-nQzl`$faYYF#>T+Hc|8! zMbvadw!;g*N##mv{I&#HGi3y-F}D*{bZAG=B_)QI2PMqRQM>%-r=k+@#-==~F;A(2dX|-aKQy=c?Ip97M9d=0Gw>ync9dwyn z>m95=YKljrh49Tx(Cb-BTl}YU-%27%Rn$LK9@@g{wJS8>=W<24Shsmc!nZ;Y7C@)=?QK_N|TEt}RAO@95yAM6xE6T<_0V*-Im zB6xVZe>)-+Ac;d`qr4iavT&cJ6UaE&t0l=~zjwQpeNm)<@yiJcIyV$1-P==1!ZEF@ z(;C^nxh;JAZ7NSyKqf?(KtO9ZNW>Nq5u&U~jT(z6%C=8Jp|Q-wjQ$)kV=JG?` zsn%B`5xU1?>>iye~8Zg+XCUxKP2*^c3ADLhaKcQ4-L3`0BJ4Mi{Cb6Bel~ zd?snFzr4t(Qg6?55X2S&2^Qip!MR!OlZZ{-JGHg{q#}rgcg7ZPM+?rD}pQ-%nmb>ve5?Eji<< z72RRTD|SU)U5H3=a~>{YCKf0w6Zd4S68+7i6Y1?V0gcFQXlXFFK0{NXe7$p?z#$>Q zzfNc+Wy%`D(+s*Aq|5(6wbynDdZ@a51%K2xvSgnrkJP`fj#`}NyZKqQOjR9nJ!)Cb zhy5_=D&r8Mtv`)3Iz}-ZYHpvJn&0o4Q&N!O>#vxj=oKG(dj5<0e1D&}uq1^+vHW&~ zBBlw`_q3WRvpgxZ$kMjl)>d7D6r2V&*+&5ZRf*HmzKak78!oz1SVxCs@@VgEO+q<5 zeLB=!c2>(9Q)O!H&Io6ALl{A(h}!psv%PRYWgLd4jLc!krCp8N_OX)etLj+F0cs2H z!&A4w6TQzNX-w}0NVA)oX0eOvo%;R$1KxUl&6bEbm>GBP63!nRQ*|Z^{rXi>N^1C* zgs7;IiODNi*vYXmtHlL(?iBfdgAv0=n{-b=R!$CSEs+ytHxsAm*2;8N!J?%dz|Xv%2vJ}s%M8s*iutzW#Gp!51Ir#s-XAc z!n`-!{;JbC^J4}2pHIu_*51Kn=X5lq{XqmiS`CZ5yuN*hx1`GJcTM4luNyP}+7(mb^apw+Y225bkwrye?Q+u*nDbV)zVf1!zsC2=3 z;RnWogAyN`xjOslO5<0hNZ3JasRUNmh`?(E3M}G)I`TfcZB0Tlfb6zFhY_D*$y%9a%%@%`v z3%l2kZ@2R}&w#scp5bq_Is4~DDN;801fP*GGgqn@PJR-30sI{y`D8w9Id^RTEu z;fB|km6@5DghaTZy{}L9UYP0~P8nl>qB`fSW5V`b;77B6XyNvtBb+{D#q0LW+GE)S>2aJ!8Kf%XUrV-y3Bz(Xi&#=9lxGh}-(&axdYJx!riHj%H zE^>Hx@Q0FhVc{ho?^D)1D6zr$m`>UOq>EtL>>i!3B?5{)o25;6u9Nsa3H*nmQp=E@ z5vU0+?+Gt;j=^-~ecX>vz@f=-PbdAICc^>NNA*kRUiR7R=~^H%$;oj^>|z8&4>=p^ zPOlp;YfC0=^qX(YD>S?g&JN$?h1x8=?psDAlz)<}5wDKa3Ko3x1&xS!JTLaZFpbhN0uNW9xKciypASxKrYV*;3CEf>}9|h}GaB0KpXHNd-VU!`u5OuZ%Xvqso@XRf7KQqO+L}la< zg;+@MjvWxC ztlcIzO+V@G7Csw`yoEd8(*MvFV2+Xi{S2$My{>uH7n$?tK(R0nBW}V=ulGvI5n7n! z1vsDbJW#}Z`QMSnUWF&}RnyM}W-uYpH{>pp=r*=aMlEaLjnA+DcW9!2qpQjP1DYrv zgr86%cO0MIcvK8Woy!Ns!o5Ut#x?`a~_u7P%T}#Pe)(f+R#!W7iWV|NV}FoLd7_U47IS z8`e*gVI)_PW10OW!^%EDkUj=d=UFwC@_huFV$`Z2`0m}Q?LdUZorvI15d7*Zg-4ZcKqv#`x9A&tRd|%O9nRnqe zdwO`2rR}5l19}Vx>t3ezV8@bR-{)>!3d3dY8?`eoc8kY0#+2t8ygc+Q-x?Az06V2b zS!jTjdv%TB7K+GDHAj`^pxyq>*Z&11V!6B)qKc=MLIsS#7GQ{4735zs>fxe4Buxks z#&;`k@&yVL$4G5E1)0R~g}ek771HzPOR>jQOH={D94}{q7@|guNcnOzv|K$Q0 zIp3!G_mq*wrGD*^UeWiO0|={hI}DQ8Yg}Z#4=@2N+!eB|t>py)KIkSZXkM$Dy{3`g z`$Sm`sc2!SmPOOOmy;(^yH1HnR6UtZemE(cP z|A-hCj`{uod5zc_W>!&>F8P%06RJCNS}MBT&QA1Qy~-`tds~3t%T4){gO=W?5jiB@ z#2?lcMLyP2`Mc$9ilhOt&d{&Ib`Fe`lzL%-H+1Rhop zZ1%iad7a-dWuNaIsSF>K3X0{aP;Dumx4E}CiT)@+<*3ayY~Z>vB@33ULVCv4d(+^0 zk|j5f+ooTc*Dk^!KDbh!q(`7eyEMz98OO?9-m*LN4;$pnug=w*vw>#p9wu*Y7I(j7 z|9dwl`}kXFl3ri2WxYEGq_A@YihD)JQK`{rzOzV3{o+wyC||*bu1!iY!=f3s60WvT zPZ*I&{2!*Ep^AvUfRdi3jI_;sW#WVWofi-9(4X#b$2)^GlVZ>kvaPNlN87$hlRH)_ ze*kOq;n?-KNx)OFE8%nF1H(s_KHi^m!BA+=Pz@*Zji6+vvi{Uj^Ue8R^g*cK-TD_C z920pIda+XEmTA6K*}874C)3|Y?lQ~Xaa&kMbF>sipIbW^e)Ds!Bf8xxc?nu#PPEna zR;$&#-sm*UhWb4odYYp@lzpJ5S=#^DFLhWJtYX|Q9eqb@QB<4=fft&yDHug|`#&Rq zucQ741W$E06ZLn~!5S+LH_#ZM!v&a0tzH(N_XBQX5ioz)e#TsMdVKH4k5v3BB9fp1AeVe=Y45)?aR&m)`6xe-V&b$=g0Z2 z{Y9*mgM8xWV)jM!3+0z&Qbm$PY`&MTPU7v1rvA5TR$M^%>#Ku1eahha7v9`6V##{$ zm6x}-FJGkdozDWkZx@?ZbyN2#eRy~yZD0!`M7)d?j(_@+Z|%z128uHZPX{aUlU}ht zmu!4b2;R*5o*QnVcSt&}nl^1jP;jB7t3k z+CCPCii?T@g3{98Gr9N3YZBeZeqAGn+gPy-=y$#u{}5j|o2t|Fw^Od#(Jm`#pHpRY{YaHomuzdpO)@uBwf(Vz<}9hZ;HvV0}#~Kp4}eJ z&s8=zGFpp#Aq-H_^+50mt8NnIX2K94v@C4?;-<3c4SRp$LGY4!L&vzUn)K=K4de7q zW416cxoCYO(0G3_o0pddEUmAfpAHHrBrtxm>)F+8kW^HT9H&QhvG|w!qu6x}IoewG zca#W*l5Kdt8Z_Rx#5u}^o|gwrUe_nft-)+zc*v%cWx6`_mn-cdUlfUjCAH(E8BbQ_@}J-`eMSfmU%!1AgU_F} z5%*~xyN5?Y0YgH-lL&q`zx-?58&?XtbDpw;++c8afKmkhi=iDQw#&EA2}sW+3E7R^ zo6NAVFy%rkD=WM{4-{cO;)BrPPb-Yjq+SK@p4J%g@;CmG(z(%O4+x+_j(dr8`}xe! z8%E<_nVJ65x%Kt+AJo*4Or*R;o>n5eO{Oo1>b$T3rSJ6OoW}0Kx`6F*%+7_gtru#i5KKD2C4X*l)ZcN0) znPp`*9iiClVBp8YWlOn!3%{8dNkDzBV}iv|IGWp!O`!1gU2*VP9R?|q^l=2#$1yNHb2a`iVIW^eQN zk7>-J9{E^wOAh{>gY$&^^!LFkG)s#X1$;l!=UWE!kqBCiD{9Hx-{kzQ_7RG3zpg0E zqn0}-B%_r4(L?a&_yWn!!T$ERp?u616XMzQ4zGSE-4P#w94I-v@a&u1oDN}X$jVM8 zi{7ubEpDB9jTz6;+M3>sHA)ioHQ;Y!-x*g(eA>gl83*N`YQv{zB!GaM^i#mkUsRjr zXp62EtZcdS;VoyUuIXSjpKJ>EAcx%6}VNT63)pC6#8;RuwPkQX5TRaHeR{{nRIDAs?sk>`FJ;ox#k)66PKJJ}77z??1^=3`yi~2}%fLnd;enaC%}RncBUWF1Qqf{K-jD7af;4_G^PrEgrRYsbap{g$ zY-#GfW%5Fk&wBd%_=i^jVasnZ8N#Ouj%^~H`@zxv69Le8He*5o7Pkugr{8smZOtvN z){mghmzy7iBIq^SotgVVFI*e))a&kl7tr-*EZ~KYT5_IM68tH!A zQZ-fQU~z1gy%BN{RyJ%xoZXv0g2%(@|17>J;En-+yuq8M8~^}az(DafT$M9Qw{aq! zT*C-zyQ_%O-rrbQ2NsitIu&>{kncgV(HGM!lx@Ao+fS!{`(nWU81UmjEtCH7ol!fu zEvSBUy&Z@gr|Gw_KF}JM5z1sqnbQkt7$b=t`X5NFv}#q7|G(91tGj(7T3Z^ z4!>7!?W4gPLRgIV4Y}8nN_q||P4(WT`a=k|z7S;y1JAyLH3(cCpItX(v6e#K0>~St z-Yo7EUmUcvRGV>lDY|;ZOBAQ7G!SAfOf3w)Ee)74hO}QG!d>rD2hs?tW{SLBIK~uEjQ3*gmU3(oxmWyD4%I5gxI@n{>cW zpK9lIy2w-BHu37GGyk6w?-0gkI{3323ovhYs@$%VI&Nl21@>$);bA@tLuKSp`F5YM zy%36AOI>`Z3m>Ae8dT?d_a7r9S6 z%L}_Xz6f_T9-Tbio8HFNOvD{t?0-5ALkTA7XuHB?`Ns6&==;1 zHlw;qdHOoy?3bTJM=0BbSJrqsI;~YfWj`dxludIFj<4!-l-Ee-65u%oN}pTX1PxGU zcZWG2ipzR&nVkg|RXSv5SgPSl1V*^pd98cMCd(oKvm_K+qu7UJ9o4<-wgKW+Sm+P# z;tp1F##VB<;OUlLFqn0o-l?&1<1_Cp3_G)w$M*45lDNVy`qoe1H{CBHr`u&Wf5=n5 zNzm3Shs5j`&jvanj8FcRPF0eao+@o{VM?F8xhXh8BL0+&T2|od=;T5Umo?e~H&zqk z(=#~FMEqSmlNa4l2u&FLHhp{JBFFc)g}@`n>Wb>6@5n~btFkJVrMu^FT;dmu!g--P z9G`l0?1RmgE>S=e$5%1k%Ly=oJ~k8p>)0gKngfR`1NcS{ws6Vjv+y?E(ey}5Mu#Tx zu4?TC?)9l=Djscq(+5p=z_kV{qrnA`l&h!4aE&Cx_Ptk@G~)z*Rafub8o;9b^w>w_ z5fC_9t12Jbel5obIw2$3+BDeHiKo7T`e<-=mi0NMt{8Jx>@V0PtsA#5N1>g2Wff4f zu#Ci@+Uj9`dx5@A4)$h4Ry~q(wA4N2MYLdihy4=w_O{WTdT`d`W${J2lC5uvsV_yK zbaW0(j99j!c5bw=Uh+e)Pf-bHS+h7<{GwICeSXngjA3TexrV(@u_^+vF6^Jia}3Uy z_N8TA?e3&CKl@LRj)vwcJ*?7<$NI-9Pgy6*@cp^xtchHsHKlS6TIpQ z_hR&?Cp;+ zAs;N+X3+6PSABz6#K~I7b2A-fMU^Gs zJw*8yuoHLT@^;f^uaJtN@aj_w7+8j;P@a6>wNmA~kjR0>L|>Fw|96&yapNzxa|oD2 z2DY&bmxRMk3v*)`n`oLET431C?pzMFIDLHb2)9D#c-+;EBcCqhcCMiKA(O}xTpA@- zDPj??z&AzhtJCXgb6FQB&5dm|GvnUO;W0z+8Esthrqo^>72UTgx$Ph*S9vZx@E-!U_ijm&lAIWVyKAbW=H7?IUzQDu^eP}1Q}PD_ zkfBll5Gi*hy4o5TB_|cRsx{grNcb;ZIm4^sD__91C}CTluw zY^p%D5OrrK1Cjg7^jJoAlLTkR6t>>m=Pm*c)Jp~hNi=xErrfQ!pxR4JmcFL&>?vuF zf8fs>_`bZFU(G%lAHU{0sjX{0UO@`0aQ|?+w(W>PuNfQXRSaHlFo>hSwRd9TVGvE? zF9`)_Lw!2WJr4l)q7kj-J|W4gN`-R18pbaXTjKt6Kl|t!Q`pMi#*{wR{Xg}+Or{L_ zytUU&sg9Vm_nULn0LsxU>I(g%&za)n02snPDb8QsKae&%zqy}#tdF0yAh1G4MK^F` zWLXP~(gu>pTEI9c4J}&&zKhtUVQtjIxxooz;I+oPonXW43nQ{aNja;yulfiGNHvwi z3qs@PSWO_mP+%Or*c*nA6JtjZoQ>!;V^sC^Uba>Y59;s_#z^7va04IzKw@}xu@yG2 zcX(!Wr&GuZ4&{)l_elmDvVG~TkO9@5r1qlHydtnd=i+J@AD>HRyKxfy`7*V6`DT5* z8A_X^lMh_Nrdvgz;DMj3+(u;N7j@d{wdcY0bIVvoH!g38C`6vFKX%ny9%ELozfOz4 zhg#(CGFXtH{Y2*$CPp~fEiiy7E>6$uSMl)}TibSH36eCiG%-?$r&-)6ICtcfw2vV zT)+>6E46)Lw9;v(uoYzFunyx&Ryv9oLgcbG91|QeZL$c)SznsFi*e{sE5I{cdhswL z$O-tZXvTvE+~z2M_xJIh9vCo^!8<5Bm*ix8ovbmOBO{VZll920cTh2Vkt(bdJYrT> zl~-(HAN)R9Bwz8@t$>&fG%AK*Vw&m*7Hx^*&`rI|BsOY`SKaQL*L?cT;h>tYAi+_Z0NIU@fzH^ z#sPQ-$ZNnxCq#(`ouTadQkercZb+qXcZG#QkC z_6BdIMxpA&>sN3UPGc||M1hZpo(^)ub=VdB}76RP)K zX6Yt_r@pCPcZKn3UKg=RJKsS}=cV6B^xwk^?;5k|)o}STRho0@K8TNwuaA#>`h}@d z;cTaz1Jf!XNL+qSTKZ>%nfTGe`n=m+23T^F`V*f>O%mv(?=s`6vN={AqLmxX47C{a zXK0oW_{|{Z-asj@ySI%9R1MxOWU79R{qFoHn(ayd=FDa_g<06{V}bsJ zN9CifLkAWCX(wR<8*!8vKvE|aHLswp|9*qdppFUe()t$y|u}bFN!gmAb`kCC&E8ym3-}xHc-}!Yc77B}wUc!_ zy87`MBnW-wEE%*dD=Qn+dXzB(5NbpW{XDiat!n=B`*{rVg48Qki8QOZ@J*)At^!8e z9Vh3n4p{qw=YGF+-Y&8J8_Et^6Bmp~*OxpNO~W~HuyGwa0$KLNq~d@5R`fX}TxLJ% zU#i>gQaA8lUCo?gGxa`ACANtD!D9kmBcqW&_luy6As|#W{!q`NyLrE>$D{2qMIx#Qk( z&iDrVKNy22_HV5<=Ui(pF_2P)<$m-jDkYGC?*toRM+K`Hz}d~s!>05rum_7~hhcK{ z;&x-^Og87U;cWsUIzN3a8ek_ICL~1P$#x7_ zyg2$($J|~(3Xuww*A>1zznE$j{{XN0pC=PIQOP#=KlE2NHy@BCgn9i!4YjT=pOxkf zD>J=U5k2Qm&EP(;9}jeogxfO<3f^2Y-o!V&QEhR0+S1OgzXB){2iVeypHfn^8P*|{ zPsseoYBY0}Oi%ht6BR24uU}>|Fitz9Ip157grB`jRp_V z)XfVABko)yR&A{vZaoj$kRGBjob=d6Jmdo5vLxgO%GW#?@~aibV;$t>)*n)66j3~0 z$-V+DjY#<1cGJ>uzT7++c-fqp+A@@t0mr)RmxIs_{BrO6p;%##{@s1}6zZAsA-67s ze@j2iUP}BzHnvtCHKb`jnVz3k@_8J~!8%&9R+D`vQCF6P5ru}hWlL>+GIXu98D z48{a#q3@?;SVAgu@Kd7C+-khtmzwOKqIFsMjch_nS68Hgez~R*vkZjLnBz6V=Q9~H z-rfCI5_w5HC_adx#Cq2&Ox$a4A0NkwAK>9@NqK38A^z$5=l>()$}MJmfMqB*L`TP{ zuiqZGnzNx>Yx0A82I7p@=bP2@9H{2tTLL~(aKCBGABdL-;G&?Kj2SYo8bk;JyDjGq zN@gAew(&`(CE^B@|n`C6s(Kjn;Upd^sV@6wu=9Tg{spvv{q(5CPfPI<|O@xw` zg8Kti{hM{LBL4%~M@ccoZt%6?k@T8ZML=7}*y1B^?7>YQ<~2f8!||h_CC1Fd$%qU{ zUoEnwlE+5Zf19$VPTa;HyYxi(--ZSDM|(hvuy`};v$ph>7FcGaXfk`#U2BJ?MVgN> zkw`%6*N^Jo)h^G_4l^RThd3&+9@4yw4&ErZThz&aZ@;?er#gAck^?7HQ|8Xc*4}CJ zjO^;jB#jDknyOJrCvR$5nxN>5axF)8iJ8F zZTm)%!tYn#H&|!CHxSLex#-MxIo7_!Lf0zS`NXqLtw>Gkcv9pLRbC8!4*ARz|JSbc zO@~92x~di(-8z23FQB_wZG{7V8;FDj%`cN09S|3!oWl}y!}ScPw`>=8n!N81c4jn+ zr-Mx^l!^s-@yKJdYS|$gHmcpe9+iU1QyP8uGZji(wRNpH9@d{S=A0dcj~+ALZh#0| z-pSR=PtDVjX|ewEms!_d{x42P&QOprBbEpa$ab>4s;nvXG5wHrHM*kz$qR0BZit-*w~2XU6@V&?rlDH zSGC3VAQ>Ff=y+sfH&08+A?_2%nJZbimDK*q$7e;v)?aY)RciMB z50r!fhMk-g9iLwTe4t^(xrP@KD8aYtmHHr;Rx(&$T8}!688&@mx&h%MzVa03r?@U7 znYSCOhMx?a{ms7iRrm38?)X1g>sshM35Axz?S`703PFW($+_1SwAf(2ePD=1-_Xfm z$C)fGA11uTY|QxZ1BW$X;ILY|4zg zpoX@V@yzwc@H-8*HqK|$yb~gDhA~`aQW@BW4}Fh)>yNdX?Q9#`u=c6g1w02JKDcw4 zgd7fkQvxRs@J#Fvx~jgVrWQ#KbLbNHkhWExYB@b>YB%?(5uc11amf`(F-^5@4^Y+1 zX`Cqj$oW5Fwv`0uE7~o90tZFk+Vx2Owo-(7CR13|Wz{G^J@aU!-OK0L5#RYq`rSd# zaTbag8^FSySMGI(4wPl$QdphLn3)m<)8at9yy@8B%jG_AhJZl|o9IfylR_;|N&bi= z>~R2|Dp38@>aK`ZBiHySX&W-fR7bT&S%0#GM2 z`a6GLX7)AC(cJWe{G~=}p`+bV*Z-w!M=T!;{dX_GKaG2pge~nLb6$%^nNB60XiFyF zUCRc~BdTU|lJ@1^ij=jDi3%+a-l-0ZQAH`z%#Yo-X5bqnA&MR{o4Mxh0j*6um$}Es zCQIVxxaLMwMdML0+Psm)G#PPN73olFtDC$Ukp3Gu{HC$~qLLpko*TBn`+IJ!$+ai6 zsi1&^8|!579GrT7q#vhzai^mN(UQ10${Y~o$vR+Q=xZJ`6zgIr%Gs9dC+Lf zO2x6P`s(>+AW(3UJP zoL}3<&l@)IFddzh?)l7HHU4i>IU0g}%;@op&B9`}r?FMPK1ua_KOo@vGL0%>6%9pN z>dot1+-5anWhaEBx{eA4JUsoLYIl9KB6_;g3R~T|2;`u5QsE&~KN2Lo9TT|P#+I*R z`PtK`*b}7L2F!k4%wR1qJ0A~_UM7%_HSPWlZPU*W)fV?696hG(U(&hA_Ef6WSaPc9 zs*XF=++jAJ+_T9#E-i7snET^zTe0?%&~GP97iN9$5DkA(_fb>*v1?L2r$UQHrI=3K zPv+>f#%fkp41ZClXyyrXTBF_PZNQH;wKlO!wb4-gogb<-Q9|in64va0mWjDt{6*qu zGLE|cDAmNaD|RrlYv*RO!HhHa&IA$gW{3ME)gO(bzWWO)NpXq1(_aUL7^7s0n9e$1NT*a4;%B)nm zf)9%*I!&|uZ_7>AGBB+%Fu;w$XAOl0UMEK>p?+^Nczge->@qa&K1u@X;f_Kru4ltP zcZF}aWc9O1pYArgm6sz?Lr5^MApwuXK*Tw70A#=)2m*hAc+W#eWu z2yh#SGyp?IU>g<|F~iR+?8v#D>tt#`@SE~qF{}rg<~mW?mXS{Y%C6CILqA%cZUaV- zd&DyK=@r+5aGyh-vory6-`5`%Ix3n+hX&t@`)u4PVLm_R;VHU6mbc$&b^o)@g#`%w zDP_Q;@g}^B_&KI90iZC?WG4`*SHIZ1q0<2~_KRZxy;l_c6><|IsPD^Tm=0RanRR9a z_Wze@a{?&{7W7sddzx(7X!r(y9)LP2_}B8V-~}j;57was_)RXf{cUiDgtZ*|^jF!h z=EP+-dFk%#*vF2g@6IQG#jy5=ADpx z-{EFEd@Ya|f4`NvkUU0BEpB|8ymY+kxv63K9}i-t&TUIVH<#VQ%6V)8l0Q4gPM4jQ z_Kc7nNo&{J*%o(ao@Hhs-w`jr%$GbQ$0cqVs{wbf`nc|LBI2La5(T&|zh>>$>|KJ( zLMqWPc5CMI+g3WbxihUCzF{(=qx5i66a_esT`%>3*Lyq5mn4FKhGvH*>e8*>%_T7Dc`|9A{ zCOvEK^_lQk8rkvN0IW}(L`8Qa1{zQpwPj*IN+aS;!|^J!?qaCBDruEF8+O0_X! zO7}4Hp6_f?&F&a_4C;l$-b->p&5NTm=c(L;zF2{W z`|Kze8u9P#U-tiv%<07sA-xBRN|{7#Ng-9>kqhCKyOc4RFtOQq;3;q@9!KhKSuTEI4VR(pSE8^P5oC}HOX}}rlx&_Iu;hP zh(h3lSY)Z--fuv{u}WR}0zbWFa6XMWE11~t5LEH1YgeRGwQpv+jiyOihR!cH&X(&l1t@2%cwBowu&d%Dg`N{cWsY9O z4n{6*v+dtcFI>3Pun!X}US2(HUJ|-Iz%95+B>lY3qW8kUVO2M_O^|)yS*FO=t^0XG zj*Dbk@s(IyVgs3d-|*DJCzlWO6*SE!;;C#MDO@;O84B!prW=Q04zge zPapl{B_!zqGxu5*%dn=VC%>!rSa?GTJ&zyvYyh66+4~RnpxBKXt%XmPwuAp}rl|7L zwM{uSk420KO>sSD{Eh=};>dQc`vK*{hL%`6*2r zMMy}dd^EOiW)I?Xj=KMr5-`H4%_^?Z2nltgf4SY(hF4jq7Dqy@r;?(^eW}iUsr*W_ zEgKzc!^iul7!Kqp;B!md)cMp&9iXJOYTmqmyRA&vRK6fi3Y>O)*j7AFeX6XCy!5^! zyB3jjyy@OG-=^>GCV+p@xw!(llSUL>enHO7PeBpbXN@Dlrx6!A4mm0Mao89t_vrCOXQuhR|6EJq%W@^ zMpdH?T!JpV-7<3$n1|*@nyI;~9;k+H3KjHL$oEPwN$JK&<~$}bt%aQ(W> z(G_FeCN+PRjSZU2HAg($Ya4EEq3i_c<+H{CG(liS&MmeaMEnKaD+L!)>SWmDSyJ)0 zFeCDXw(jl1$qSPk-67nJDaJNh%MPz#P5WJ&J9e4drugbPc*-8_hNaj2`8wgtd?9k< zH=<6bs+`njl)d!*+c>fRL$PE&eBc|5x&n4WbVN~X)X-n8PO7S;s8G$B?Mg;18$Q?X zO`>HQa3b1x$dwgPCi^w}--8Fm$ah|KwtDR=4`i z&8fLYKX9VMQM>xm$gfl|$;EJ$rxGaa@8I*F}G|$6EQU zEDugPI7oi#DW5?$U<37X(=rIQx_9;HY|eIEz|FA0U$uVW79AP;4xhJAJA3Su0ymnW zZGh6`l(_wto0}d!5e)E1;t(IZc9FskkJ=>idW`k%l2Pa7%U|Z>YqZ02aIcl##mvrB zWZ)U2hIFjBChQG&WD2RieF?4$QpBoLrob*kM$3y~Lc`!y(g$N940gD!Ew|W0MEgX5 z-!!||X@Gg?5;=uiy~$RDy|9?#g-#ZkfyT^-qq7Yc4JPz}J7K7Lv|qq#`u%b@TEo$; zdg&YJv0bQ2!pj4GVa~r(aOS}JF8i&>jjEe`jtmAMk3$R4D!prO){!Q?olA-*{$3dF z)u@RUD*GWgpsb?&#TS_M-NojEyn^UscM_tN;GPY3?e}$bk}Si04eM=V1j{g+OFeF! zZ!3kl5B0%3>R%}Z&063O0lviz!E~+!GauIIZT=foO0WJjF3jR8VX}B_c1 zp9@e|e^gg*qKWj|jryIko9}oFiCexc8qM!A=9cWC^1So=p(-rLi?^|TRPM?@Ld4coT0~<4|ik;WKAlC3lI8ByBo=sSoE1dTE0{1jlq!r!8BY zU5N&OPOS7#8m`+P1 znU0kPC!Kd4_0m+DRszdfPxr0ZLd;RfX8@4v$)T7{sf2lh6(VnWD5W5C3Hfq*%HmH_ z`&9^r*nqLW-Q4@IZ)mQ1?~>exUYMZBa5y|EL!gLA zi5LA{{<$32=P$6JxV*wxKVLpxIE%6#yOK2IyZ9ofg96u=Og5hUdGl1}-%QzDGi!7Hg%{*Cs*k_~<+1{=Q)0%XAsyZHpr8-* zBdhOy>FoWZwHoO!6@L#M7dO>I% zs`O4d;>X}$mXn|e1>iGS@V=6ga9Z=(w3N7LdsL27WyULk++J|6T5N6^B;f!-o&qKC z`+YkybwpFj(5P$!2$p5a)(0(_KLLpDyZzUlYsb<4n@FxJ%zz&W1Z#uDZ=*RJl za0cq&ZWAiGYrM<;yWcWXtkD`+fVUtDU=OP;_HONCB{Fl8&eDS5Z3x%jvEi&UC*|yW zL1?JFNtI6J(@_C&(Zh~nr%NLZ0O$w~u=HA2EGQiz7JE86t={E}gI`$z9`++wThpZR z{o0(oBJ5QcQ|H^V@s@1CMH;euZc)+K#zCX*StERm|5)~E^bqy!Q1CPDei^luU&h1|U%&@{)5mjlrGKTz=cjDc|1(J%_^V83 zf)vA0CpEFE(S8!$#cwb4C%BNV(h$dQ-7GW($z$R0XG6y@E2#;a_5qheMQJeuGpPlv z9Ch?8RgxO24~&t%=MP$OEh?q{A@3H)G_q?ACkNy)`{bN}f(3ypa0@z+vfE?!B}%0T8P>Ic3@+`$6B%ehHiRNKY0m>sxsa*KkgBeGaC379X!w zp+R9yve;9jP`%<0zMLsJ*rtmLwR{;}qE(QwdYP&k*yCOgONL^D(hM^5&q|GIKyK=1cE zRts1W?^E)>4%lUOm>wLywKiTdgv!&+p$n$-u-8?8cb(6E20?#`cF#Y>jT$XK^`lK+ z6);}Ibaqt=AL8+NIUz)D*_V4M3KVfa9txF3#mr*7P+qH8m@ZYRANWz{UPg0uJw%8# zBKP1hQXrD8+alLYe-X7eo*!vhp`58!x&< zbkRxZvK;Vj>htangR?1{Pf|pDc10GU<#aEU^5E@vGr@wUxpv)%iG;if9>YhvnoF17!`pK$SLXnlZ#BfQ0+1)#_o03|0JFg_OK&I z4B8x~2#M_HMQ%Du&asj!Ze4r$zRIZ6?yF*Q|LJ4r#WzfC`MZqK@XWR?>5lXf%zY6z z)JXPkvk0cixOlIyvoMR7uW;QDWsfZweN^>r#m|^3SGqqKd^H8#Il=bVcY;ivpTG8C zzxm#J|5dx@vBvuqpoSI-0v|5#A}a?X9%ql#`~`^jdFAyF!KeQBU*yy^RxWOc@eu@_ z0iILceEgh;v5w01mYRxLNPFW+yn-UEh(Yl>BtYN)tTNKKji)2C_-_AWlh?&XGLt&p z%RJ1GHBI%7HoJkxq@f-l-WTb_1?j@#3+L`98C_&}oEcdLD;n&`}osV4u)2B zC>ty0vM+U3rnI$z)1H}#!rf7*4P=q->rZLQ*HH)Z3@Dg>)&_hD3YrJ5hU!VGC!clR zH0xLdjPcs_ws98#ooR}XVn+k?V7ml4O_9B#;z{CklVjV};a@Ve=QvhDDwgU*^yN#f z}B#euIAO;=e6gwPJ7f3XYc zdC5KeSrtj2Eq>Et-tMaA{YzO_<4LyW8j!HCM1pJ{Yrh!a{ zeIzT^b!Z_Dyg6%Orap|B{a?7e>NQ76teEZdrbkipHht7A2X(6u{sgaAg-jf{ zIjQkkUJe42MwuzGQu+Hz{lAu%@e#w6LT6F7ZrlzS8I5=b`Fp9TP#2dZGZ6d8VMJhI z;CcNcr*zLYJq#62NuQONt?w+@F>ka@+aBP=XgVM-l<$)DkN}zToupQVT++%5eSS=T zVFTd+#p_dF_iaj>yNrG3Az6HMtqlLhPV<$&m9FvC-+xtqe{Xr!34Z51eM1DrrJjp{ z*EFE_bPSc-OnkGA<@GOPgOM?BPT`@2w#J?NS-mG+mxu8O_i*kz1=n(lzm)$G|E9HbNz*FWmB)cwTl!rT{fsN5pXY&?25q*w8F(fb1e}IH{bL|8!0DfK83|%U z>CFzS;m@K@aV!rpv@f1%#sth~&XCOd>fmRg_TymJN|Qx``4ijM9eN2O4|z|I=W7fJ zd$s}O@Sd|fuR;1G{*Qu`_x^uKMS`|F4}s+NOTNB(sFBLP?L`Vt{YY_FZ$i^{eGB($ z5n};N1 zYs)G(-fTIA>?r&8{jS>-M69njJVf00@x;&6dTZ0%HimnSyrj}euY)>o zcx0(48Z(Wfp>#8^+GHt`V-jWKmwbaGKU6kP%}()-CYIdm7Ai=%s}LdPr=dVtUH?1q z6_%cZpQxrdqnIKAnV={RRh)vOd|UiWJo?lmy2o}xc0;I$;!f_OAGB$Sck z)+?Rm>{U8vKR7B-IJK9#@?!4PY!*5kGmG%4i$B3qnA>AwjVa5;Xp_>|P#l_+WXnbJ zcxHR?u+<5{2rH8p7Ujj>EI@!qmka4#fftP@_%{N?@ukt1B2l`hE(!Eq8d@MF%wDS9 zQ*KyYNXnW>%F1of7G?W#eGYYbFB2b|gB0o3UbmMvL}=`A{G?mwG%^84q~geDKlaNU zq)ea6=@c)}JXvTt(@$ooUY*d>zB|NIqOpsPX`!W~jvJysKK5>7DU>Y+0>?Bf98;wI z=1Dy8N+qa#^G>T(3iC&I&z3EIj|q7H^_c><7WNJh*FP?5;qUAmkL=tps$H*@I0L8u zI~Nrooyj>gCmeC&rYrYr@uw8vc{#~j;zuOfD&Tnby)%xw_@*u>Q>W?;eS__W;i#z>^D`xC% zYA#Q`+TFfTxE)+e-**%`yYK)}v|gh?+z?!#ZoydN8!o2+>j_4hm}yxtAACk6(`d@c z?u)as3y>8BHTv7t=YK4Wqp(|9 zZRK6QSEQFKBH*iL(7L%%>|J%*k{&^duXxnxIhdHWg9LAA=h$>{$(pNEH+5KG+E*}@ zlijusatV+=%!-HYzUp=|;NAXF1mu!SQ4%az(TS92m+X%Q1cWV>Io2-HG9#D9p2&t> ze5kzY_jGI(qkiSG;~^qyqWahgr1jN|3MV=d0S2REi%w^Wv>1#2Y@|nw?f#GGz27>z zUNhP)$dQ_ACBZJlf~#SEP!qi^@<3+&_Ky%&0m1Cgg7d)v(>2nY{fG2HdfUg3x>8z+ zH9qkF;X`_u1=TM%9K3X8f6MFc94(x%`?N>P^0+qhC+rQFz=_0s%UaZ4oJ!g{lBM|! zGQ&(5m}nc#P6SbttH;EYc`gV?!ZVs^GbNiN82N(wY8Fc*ukQ5a#VsUlb9CxDYFU=E z$WM-BIo+!Bl}l#gfbjj&6vWW9%?Hda@^_#neWnA?)S=FGg;H{_x_FT7U|)I(d-{8JB-h0)-Z49_vj-FRLJk?Kz z7qVf9qG&_P&%P|kys<-Agmne=)gg=T`gwP^k5Uqw$2r!brmTNcM$47VSt0YSTq%ZE z?pQj0$v!(fue0NO2wxn;8j1jy>lWH3R|cdT8iniCQ&6PJ=V@L-_N69MMzl#tEYjCQ z=x9KSIs8KD{4jiYP)}5ERo$2wK%SAYQOwcV?*0Qvs~i+b=i}f-3f2n0Pa3R!akBkk z=C?a_;mGA#j^=7fa=73D$Lr=7u-jwR>1p zKl(Y++r(4GYB}LVL^UnJ*oPH9MG0=CK?h6NmdPpeqk+Gl-~$ykE4UpOvbqv&IJvUt z6SQ~P`E*8@oemTJID1h^%lxMF$qt4R^uCBC?dd9rG4@Ww1s$$n!vEQfTg5-qDwzhA zmXn!=Xm4R!6D$yZFkdK0CvbAQW(virt2GW1X3;Trr3poC)Y%DyO zO}&A#?Sa(kb?;m2%Vzo&SP)FnV$EruFbCWhBCCPdC z?_L1B67>T0I^7Inh_|1VmDo~eY3ux$Qs=Pc-@Dn)X!$Rxku?S0toqXv|<9!#_+|;2P-$BPg zIXbo5eNJhs*c;h{7#Q7$sgp@Ny@*RZ*qcDuQ%m_Dpqt@xk1pd}-yycycZ&C?)7l&v zN6I()Ut42B+=c0+rxAG1wf>tl3kn4i3KSFH=g!9>x`1)vkxZ{0NT ztHAuVdxHcUDDs;5X(rKq>e|W`ME4UM{6ai5QV~nqvPSG8y`3E zuQfiX=k>F#G-T7IGgpSy3{>|?P}x*4eiYu7lw=a^O2Z~X+>713F^WM>T_1-;qKyG; z{1D3W`|~Hwnl*cs1Tjxy`uaUM5kyi_Iq`K%cWA#X&N zu#i0Pd5f^qFgnW9V6#H5ki%osuKIlM73V%PL0x>$ePlJ1wJ+;}7;JXcjVrk` z9!%}|f$1;e-tlUCu3)Aff~M5djNXD55#;G0Q+_34pD(CrhrOh@lTf{3xy#_~w7NlO z4DK+AU3x4K5NuOb*=>g`)_lNPpu5-BzH?ZAn@rScvr!ZWgyc(FzC*{<@`e3)gz~SR z#1YfdN+m7iod+%1-H(V`?bf%t%-BdL6+jt$mDc*z-KwjUE#@_J5E6c1>+kSW=cCU} zm1PZ6_P|)1nU1^3!HJ}f`Q(?Q9V)g%TwI6a6wN#m!2 z6+TWN!A&BDF_z(*=W*xpt?*ADNd|}xBsoN0zLu;K#Bse*&bw-`StG4{v9rc9L0*dS zI*ujm-^fMo036&Op7?2X+5M8N6|~YYKev%gy~5|(F6(!iy7m@o>< zOKJXqyqup083*3!D2nJ`A#BFQX-O#lmq5t=$JzdJ?@U%{B2!jLD_@(_Y z8F2VYzh|B&tzUCk8&il`*;HqJmm)UItzz-f9{0_~vU!btfr~;P>GLnA$y1?+Y`(MF zUJU6F+B-C8O#LtL0U{{3uNEDc56&F+3oT1u8&dTo;+7bqi4aU*QlY<&>!kbFwLy)Q zl4CwSl9khL^1&w_L z1-`WxEK9c$ciJyr7U`ZG4vzjE933xJztVG_i~0>lEl_}i4c&0H-3*`u{Wm2oGh2-h zDx=*%^ss6-S}E@aA_k;D^Dbk>f{`&?S9oVHGKQ?cDC?KDHY@QwHGz?=lP(kS#tXy#k>MA$x`)HR zI@duKiEnL|k4^T5$W=hdMKnG4e9oRQ4 z$pkMSZUi2SN9-oNOlPd;?>QE?_l_Jdh|H1^qWRI8(Qwq*s8Fhf@iv0~3AoOD;KRXV zC6F_GqF^R}vVXefrjA^h)JkxB)NGR5UpAmcAl(=||CVG+34$ukM4JBQc})$wyFyE* zV5qUSGRT?Jxi03>y2$vn$P>oO7oIeJoQxcS`flH9q+Pn&;sTykyyAjEA0V6qLjE8L z;ITAd2#*S7oU&Ygk#S=&v3=E;6`*=IB1 zNnOLN8PaP#MLr^+yE@lxS=Fj#N1SzL;zC5VAt>Gy8T{TbGb4LqqGa}ela8qYE%5Qc zhlk<9PdE%GSk(^ydJVAFZ|{-5IIS3n@VPYSOcZ=oV*vWl4ln3OFMi2~e|t-bDnu z1RBIebA2M6hi<*aY-YZOEfQ6YOIU*TqTALSHf6~?pW%`VB~4jbaB$$UL!8v#2c>KF zUOK;4;C@~n{dzYo{nh& z0ODx==HN>fsibjjwD}g&o8nhXQel@d~kqDaY&EJ(i6c~UddL8znLmz z5Sm%(ul;JE1BYraufBYqL^K9&$k`Hy94&jJ)aRLhya?|Qs5jWusg%y7J|Y@a&dG;0 z5ttIV0r3jdKQb$~mWz8IavL}PnM+o3;$!b4QSNp(kB#dVI+jD{L5SIt z;bYu~RjS_$=Fe|ni$T?;{~f?Ft3E2HFIC9?*HuDg@P2lO&+;1iKa$C34W^d!MVEXZ z!{gC`+OLQ(fzo+jIQN4pFw->nN3zIm8Q{PH?+Ao=uRPr6LzCK6pj<8IE*z?p3-OE6iDqG+5)5 z_d;{Rf6u19KQ3syXoV&m_Kz4A6&Ox9YF*zEs|Dl$JKqoHNov>Y$gJR9S(w1YfRq zkQJ{{bs`^LYw@0uzY22wrW|fpULTL7p5A zEE_RObwAL|Ii5w{$vS=T$5ZvEXs!D}ne&>~rO8#}?|GyH&iB7|Pd^Q}_j7GA{8GYz zFS&z{gO`Sl6N&$k4L=D;O{HE9ur#hzU4i>pe6Ah-tJ_ec$u|^Ro|U}yqNJu}y_umy z!s?yM*SwNFUbn%N;?DP9<2W7^U;!r4e??Z|Gu>(y4Y|U?7VpnRG#B2~`|ze6JNnaE zaYC;LGD^*WxfB3`!nxw-ay?Gfn1VzSq-Le{>$)?N4r(K@{McQeLa&n1juMd_XrfoAa4_5d*)z}d@NuW%L$1Yu$AR(}!iw{p=0 zXzGIuk--7SFumzb-$#J{Uye+tNcD}oSa~YGj-d$?wpTbgwblP7D))g^lAGE^CTh#I zM3g*mq4L30tQf@tIsPxXKt$fZ*(VOskNxl7tB!P{CM6mFu=+JW=x%{FWqSEM+7`!d z6neS{IaH8CH>PC-88#9s*J3d}SofwXi)CP1#R|zOyEj%UjZ83cr`W2rn z=6T~BsW`X$q+>ZR8z<{1kFI#R*;u9Et1|ChH~0Fwdep?&u~UIQUzj*yJZgJ(P9uL} zaG6a+>m5#dM5su-MV%-E&hv@10 zA7bw>s((mYFA_Gq?k3tSQszJnX3vF;b^1ChPgREo zru{?LxINE2b8W-4da{8*)g#vwS*V`#VP{_fGk)db@~VpEHfVJN4fR1L5(n1t|2Q2V zOtku@Hd7DMOmFtLG&vY#ZU@NVxc3vuw%8pa0ToCYqu($Xfo307Fr^+R4t#GQ~$QT%}`7tx<_ ztALoOtfTGH$%8QuH{T@{N1e(0jvD-cC6$h8<~Ym{;f#yZB$6e0-md}h9c(Qt{PX&> zQ}6PLY-mKWhn^B&Ca;$!7G3z4+cU7j^Tr_Ac7Lex>lV0OG{Bx)lk;FrI>VCEg-1ikK7zxzUe0c z`k_rW_Yt2ghFw;)Y(p>!Irk};GBg=Sncx68#JFF9XWzB{RZrtLU@^~ARy4mAGwU5K zv3(dL7t&{f0|sLSH|=nlrt!HP**v&TqNjCp|4%0~8ka>gOTQ>R#A(_!)J^if9(`r! zalKW|hmxW1dN^3AJjL=ZKaY?q#n}GnHd>+hF)Wk8 z3Y*kNSlB_?>i&D2>B(+}M|+F5Sl$aj$-hdQNhS6mn8=utBxQWNQKF9)H$8j2k+53A z?}-vJo&(6!nEdl|9EVTc0EeN>LPPrWMsG$INYjvE>_+VzJCIPBQ0j;Pp0`$oSIiI$ zo;Ow>A-zpsUlZ9;||>sI@@RtKvQApFY;q|gYhifJmMm4?VM#X@ck&L6{TmULf(cc$?6oCGRd}?d$kN_UTw{t+CL^;|Q z2%h_(4xM-7F$1vf^^@V4JTx26S~2n^5aI9mbMx{Aad*+gfa5)%(6Ol`_!arEvgo`1 zPWr#@Ukto|76CSe+_)=b9WbDLS?@D}1CkI&yx6pz+j5QGPTBySDFgL*$bxAMe9_bs z1gIJ+S+ln5AD12K^y_AKxU)%Txc?C3o(UaswgK2LkFtEqdTR~Kr_=l^GzK{Ju(}%x z5(&xD4J1om5;5hxJx+!LGKTJrs1aZVybEYVx}H-VB%$(xGg7<1?~ z?pP%GY`J>`7XMClbOJ3Iav`|6x}x%mT`N=zvr6>X3ApJVMA725wd=DmbxHnUmej7qO_IhXVuX=4k7s zO{GJ-)d3?HLUcU+(peZFWz3VFn_*bdeKD964{3Uftq=9j2k2%+SAR>=ph2e3hrp=||eMj=FXT6r-} zyZ904xTgCsOc3PRTcniFxAU&IDrDFxeLJu!O1dS2gm3qHKL(U;%2xn%h&GP}Y6 z6Bsd^oXXp!$*wyuU?CPCFgi9fJurL4uQVL>dwu-#@I}V~BRrt@U42g9FHCG=;EvH)|FmXMQ~TYWDrP+EI>T1uYcjon{+Tv+<^tnWsx2 zUuj{W9T-{;VoVy)Ft6piS+@-bC>W3A4@6w2A&j@CnTkJsJR-NYEPJM7mqYsw>gZNx zE%E8|(+|7V3uvXwk36;-uyJ$Zxr8t7PfQ&K&QT$G#GLz|b>9HCaFQczuK{Tsc+nth zxc_?BC@=8vxXwI4yYjJTXZf@1I^5tt=e!G{B*OmpkBV&`0<8CGF5Y*um4?DE{G99g zk9`^&S`Oykti`q!!_?@+7m!$yA*1{xT46XOlkTtat;jRo@cgY1{+6i};|0t51TNf_ zYUK+RuW{eJr_=+pU-~WXN2_g13vJIMym9KOzT-bw3OzV%`xK=~n8xOq*T=C8`F?Qr z#SoDWjZ6S|NHOVMeE;E)KqtU0Gq4WBT8ejxPJBGfRqMY#@>+E|!r-@YHB%jm65MKf zFXuX+9#T(TR0U;w{hyO4kDgAtOTp2ugURsG9lzog0R{Ez$;+w|Q@p;sWQy+@z z(0q#6k^D5g@jVIhRK2krEg%gm9p7shO&kU_k7C?FR(YnKqG2__9)iW;NO_G2B?|<) z1N_|{%pXn}@DyFCt0+M%k2cGHbHwWd+E5t?{#9sZ;JvtF z5XK`*^KUNmTwB>$@(dK!q|~8B^Ny#YbjeV|U&u+J4~J~3G5n(&6GLmFC|icF(0l{- z=zt0+*G=u;i> zy|LY%aIk??QNb=qa?&L@>m5oPXDo$3j<)M|NrPWC@#FZLkb(!Ze(NO(aTew z(@5Sj;47ay$Xr>Fwlp?6ow7!A5b*b$XGd%1$0xtF0LO~Ju1uOAwwU#%wu}1+%Kod% z`vvWSIhLB7S1NZ6_EO94emJq+!?e~u4o_a?$2w5fbe;1+_#lFx@I9TITuh|3L+^2~ zn6>}JHF8_C=b3ZGQ%S3o$|!A0qWmIw0=1X#PqI^$R1?DLan`h`u>UzHhwQJyqGr`o zNFUCoMEO(n8l+2=1D>{hI__`0l>XM%LWeS^`L}$DQzX`!na+Yw&g%vIi<^2kJjm>!%KUr%A0Z>OT+(qjxW} z_VT^9CgDeg7ad3b_5wcIf<%GeqeI$LVtA=qkz?j9IjUuUeWeWFxDS zP}5XiAJ{o!qJH_PfHd|TY!fZgJsug}jm&mTcyKUfSM_@C4w*rD?zP|HS9krX;I^bz{L*1*XCYUo+12(KQ!7>J!mz@VSr=w z9o*sz3n;>kix-B;#Awu%AYFc5_HfWvT-nBKO%u4xa8xrzF`$}}cedk4v+dOR{Dqf% zS|}rM3LVqTUTfc4sboHY#55oMFlk?Hf)*)%h#rR#e}C5-AJZJSYw}8jADw-Pl)jk;>2H;P0mUu@_0{{xikD_#;$m>3EU9Ik>!&-tM3&c9 zlzMx6{&^I;;1EcF!GQ4EtnUXibYPjyua~sy%bjeb1FzE$P?v16;*B$llxqg{e=Hd^ zahsW#$U=8L0r7lMV7*35lGuhjho`mh9rr-r$?A>S5;x=@;TX=Y(Bbm-X>S2dn}Z1W z?FDU3Xg_Z#xXnkpbAG$1}^c?fwIog-?#krWyT1!MKOJ$DMZy zIv=?3ZU?w&8dS^t@}=4l>SEO@y0oZa!+XKyF7Wx7v!{>3MQFZ~jg z`(ON``Pw$K{FizFpfl=D-0?vK7Ug;aqfRbSG?0XXdL@dPxJ{^m?a!o9KVP!{TZCi) z9RhXcMsv%S`V*i9RV#@yP1xzEX1Wlv9f+T?TxVM}eSkUxee<#GS9+fj{Mlk^PVE1| z48V4rZ3osG#1um)+X@^1=5k2KzTZ5z*bUc9sG8M)-(<(L;_pi8vQCsO^7pDcNv^n% z$=sY06<~SVLYa`I=BO|6+No&Wn8>XIFDmt@Hyr@xs3Bt>l_b+4AaZe3mGi3yKt*ps-~3z_coNK}_+#Nf zwR)(az_kA}1&}^N5eM^8(qnKZAs0|wy^Qu8QAT%~ov+!d??C_xv(V6KbVv_veLH4) z{Qhw3eeRWg5%x(d-|xQj!GKirKaZ#xT7-uu&)O!|pMo0HbKpQJkYQKD_PcM~o+vTo z8K5y*mpNW&(id)lkPot&={8dnxj$}VT;hNCI$ER@#)Ds@+r)&h5OemVYn)d55qL zz#;&k|3<54MlzSJ)I>?X12c@Tbm@IT%WZbmZ)0);;Ob5)Mu)Do>ZM%56Nu!X!&b&Pw^rw`K^tZQn|1HvhI_#fg&xg1XUfCODO^;2WK=a1%KPg~LPW}Fw z0!OyH(_G1ZNtf7(!0X>7Z;JTlp#tAA9cdjwG*8Yr!Vy%gB0RYRe8l<(H<2V zqB?p(5QTI(N(6Y(X2#uJHTnjp``;aCm1kTcpaS$Tm9Bs3@$=_X9(=R%nOM8iV ze#Z(R>Fcutl@HoR6B>%PwFlDm>nEtaEr;?CsLtCg;fLvkZ7&+Z--6%%=jO@ z`cgK2xa>Rg6XNFfyu;Buk`BFIsdT=cU+leCLkB&cK1{2V>f!7j%*<0Z+e;jd?i4}y zpQRfgo38lNnKvF~7FG&B;q%vqPhZhWYElu|i%8D=sD`)V||^zHThgd*w_(%<`$i4-a^asR;f8WtQ|m4KFdc1xNDQ$FROX^nK=-%ml6{ zaW8Po8+TX~9UEGfN&d`lyh~qF$>&qm&!!xxpGXR7zA%TgZ>&yt&qM?5|No$$iBwc- zzpf=E{_Z2}*g3NCPTNuemWQT`F!=`m(;Baw-**iAX^L7R}C zWO|0m#Pzxqe));c+D;EJfxBPb)w4a!s8yw07_C_Pk=OTX&gd#wC}en|U_3<8ERGK| z5(Yd)@k5n{3LudJr>s1_7&b~oE~MHv9Wf}7n-%B3u#Jv_kmIk5R{K<2K!(6<%T;>rz?oGg;30D6pw{&|F<%tGKA<^Vqmx<4K+{HMl?BtP@uc2(&Tc9)EH1l3s$Am#~ zj(^w$xR%+^>baZRx5WL&X&hj@Ra39tkk^s(V1BMCIf+Fin^pg9VnV zgbN6W>bK%UWYx|Z(?Ed}8#+;pH!&aM44vXMiYH?I;$(I+WI2e30-PnQ@b!&?S&HT` ze-lcKclE3~Z^k+?u&#p|25@c|v3E-{`4bB`*9T=T)ZYg6Lb{r;Kvbf5xMi#(Dzc?Q zGOeLz(jj?j;EjCK5BOhs|2xt9*FjuD2}l?%|Lsh+H@Tf`nTm+)55uevH!0g`*hpU`qwH-``bU>6O!4h)YoNn8a*W`R{HHuS);E?Y1gL0JAC)^RL`xM!v(e$+ zz(xE@QOo~T2PQ-Kg|A*j)=`rfV2>=$u!1q}0|wlTKMhY(Ia*WW#iY6w!uv=&#~WVv z)#|!LcZ>EY{jttmOV}S>P^NVdYo~xrf!RDgMq<`(! zV(WDWac)E=3Nj0h52KdOaopVD@2V&8x!mkFZIMwp?3_w2zW;+Rruk!c*r(Y{3D4*; zQpp*MPrm0gQH&%ja3C|s)3Epl-$fen-G||0GAebQGT$pP$2NJe>HPsDf|SqWlqV{< z!lDZ&LH4f8XQkb3Um9}0n0$-1)SnUE{Aj_!s;2(z{p)t>rHuL`7L$MZo@^$N+EfD;`OzQC!U-Xn{ga4`y z(e8Se1sf)sDw;~Bb2Z=)nTJigYxz_FN_bd~IRWo2g9bNT0?+%)Avi$vRiURFJOe({ zU<26}Yck_SIthuMaNC=9(mP2S?7^J%)W5OG4e_bP>OW_P!LgegH-BQGCpbGxc-UPA ztoN!#LChI2z8)JUHlg9$Y{_@J#O1i#(p&_fTetaC6{d)H`$eEH9uQfqm5aikVZcz~ zb_*+y&_G|g;dlf!y=Y5;g21DLc22Ha9}*1f3T1}wo?yj=UoZ)L5aAA81VU4327)e(IMYT!s# z%o$1B!UdYgT)`3o911rD@saL~NU>s7q1vO{+;2Jr^mT=w2I@97USjvlOdVkBKqIFA7WkG+e&5y_Uo7pZn?n2?L=1?Sd_O8;DXqFu9K1aVHkf|xFQi`T2%~9<$GU^YEV%N7 zJQYdvug%t3&1*ED-z!v($UA99&vO2&D+LZ%~ac75%(1!fsApM@p}gimtHJ==3uy&l9n#|-ve1u%( z%8GJ$G4gegZpSE9kdc8LtYddST zUaj%9_TT!}|1;LSXT>9OFJ=u*)0v@3dXk|EKR?a+H?@BS;Eq9L>SH5@>_6OWaW>>N<~W@JTb9MDe7@1t0Lt)kq8j*N4hC zVI~3IPQTDVFrJHLwI6xyp1@sc{!i~7F4o4V>8!-Lg7SIQpX|RKN_5858@{bw{k3+% zsokH!x+&gSLlLl7E7s*sWwNx(LUIeX-Wfeq3> zpRa=6ewtmnId!y1C@N~P17cNER|~(_xzry_t@A`N_Ndq$Fua16-^Y@=-h#5u3dFOw z#~xmyFX^zS0=3EwC-?Fkov6Sdi&hd4kkxP9ja_ zk;EA+F}kT^6(9O$b?`5{bNF$}JQ8G4u!>(Rv-M|IP3$q~*Lo|D)TNwv<7W=0d3~Myh{KCB2bpL?5|C zXJr&Ydi1}Q{)rS=jx1QcI!@AAAUl~C@tpGf2I*=IH@7>zb({F0eoRc7KHTl|7x^}NRuZ_iz z3``(u$XY;a&aWc1`{tv(I*c!lDqO^8rG@TVu4`hzUuXb~K>#iJT^qh@|5b;}ti3Y3 zuysfxkM0OV5AB z^qggG+hYBLQW3HL*)?Luh^!RdF@i|-LJXZa7~uU3rV0Y=Yqzz3kfa-c3fFjIIiEz? zyjYy}SrW{?6a|i(sUiW>jbBM5Y&m+zqzOP{1%c8214%JS>;z=XavK) z!1!i>Kw~jltls%kHzp)$$kbYXzt*XV5dxHD^2aZoeogLacmN*PDCz?t!V`?&gL|_X z=l$he&fKkLpZ9&|ypTiciZ+2wl+0~YlTOk2qrJP8f)pWFp6uL)SF&N)h-}p5v+1!(e-TMOX2VN^5*EXmsmmm2Di^922{CZk z{^!t_pppokizT%m*0;Hzw3RND3BCA@ z3RN%m$(*>a$E-X@o;+{<$!~K4-Uglh>G6zIY>Jv8?A%l4IP-hAqYyJHllS>@FHXDb zmi9COSLb%_%&>1pjg;4Yb9X`-Rof1=7APBqyA`qN3nfRp!{|>pHx#f&Ben&+z2RzmFp3#(N>$#|0XC6jbni5w>?>df$-E;zSxxyJsxu*QiqRZ zd;>hB!}+B!$Zz~z#$MipV9n<7f8+9~s(9~;-P_!Ieo%F~Rq3pB2~smA?no_x(MU+B zt*zxKRq0K>{`q#brF*gz6EqXyNX#>_1Wd9_#HZl;i{d?BYOie7`K$)L(1J*x<5mP5 z+`gTyUi@84Con#8yTTO7JoR;+n@w(@f}cGbYMs`%L7a`$yT`lD_`)*30F* z>&u~QM!UzLuFuOU>GIX|d<2w`nJ;c^D;b}&SJQGXBp_P*2{vy`83p&T=8O zJF2u=@b+kWtFw8d*qJb>;VMxZMC5*-QnOX9ND6;?_{X%Ec7|^BFB~OyUx+Ki-xHaM zkFkp1n>h^7iY&fBK&8K?Eo#w?i1S^|dk4hZGmuVSpHXL+tuwMdZ1TZir&(Upb=z;X{Zw@V__v7{(K?PillXzZr>BoLeRaoONq))E# z2%WLCS^0+w)lM~QY^_miO)IatLgD_!xlZvkKjF`}c2>`HzRoHnjtYRWF=V|!A;;%uS@1eOo1QjRQ#e_v zdz!{Qb{rv@hnteXNKE`?rj}S?`D4vADMew!b{9#?ky7BEM89=JW(#~3>Eepg+KPyT zeK0ZM`B)YO+hFz*P>9fI_d)`~J#J?`s%U6Pw$X37Szpfc785KTp~^e;Si$bODsN(5 zj$9Yog+rlP_~g5ulDh*TWM*RF%i=ZNNlZ+9{euY~IVmwon_IA^MMvjh&m&|)=~S{C zgwTc70cikrl;T&$MEvH)Io|*pOY_p7(P9OYPUfyYtvFXNJWoos+25>*ExAV{Lo}Pl zJ&W)}n&qIgSw=~PyE9#8tv}uPjm1SQA&x5v&toO)VwCoD&z{p3|8^)vE@nT@Pz?S2 zB(d4~giDnlhjg9JlGkzuFZsRo;kr{?&G~M%`r+n8YWfUo1s2yBIivn%~lIaVzf9w|- z)wk#CJ=)hF8X+Wh^uO|uas@BzAoz!+?=(Q?MW@aFXN7BAg^#v9U7%4Z@1+lgYLUQ< zyfR$J#JO_QPRDs1?2xOPJZmPzcNc1H`nN9HHmIyyX- z57$SntLsP-n@xn}_7mtG0N;-9)pe8XiJ25wGMDR`jy~OZA7zbtZLI$Jq5twIw&zOa zeU`1(-2iDTRbxQ-!8PgfCiLLQSy&V}darN$2$-DMVNWuS0_NMfDtoY@P zwt}$RHdO}bbk4_nQAQqJDdPHQ0XN`Cz3n`qnPs82pH5Iua^VfY zjN8_m#fN&*`)=U3$MOChsIJ_Whhia{7*v-&PfvkMld3$OA=GLC%><*oHE6&9KL4>Z z20vnr%0GJe{abSKoK&lH_gk*FvF$;si50X*+!pe?1?R%FooMk(tM-8@_){TWRn<{B zGDud*9SISR~)0_3PT*}1_sFu{W?Gwju*_^V?|~4v)bg< zRp^lZa8Xfdgn?i4|Iliw=^U(6%{w1gu!rMxfAn2n9Z0IFZxV)oS9d@uIy|=&c$X?C zN~9KUMgJ8csHdQhly<3H9F#WQVJwn0l8+?V$VuYb?I)4MYy0yQVg^(gA0OFLh7J4Wq$Kz3j@S5T@1a_ zI0(4Dzeie#dc(`@iq+w6=d#-TT3lECjD`U@pE6DgnU?cjGqe3|iSWn0Ri@{=BCnC5 zo%Eh$P&JuT{|I@CusGEVM*fVFj+UPLZCMcLv1jG+t*_U^H6!zJ^VYDfo{o;7)9E~* zSnq^yY7bX!xEe$8&;cikhl!V6q%?&BBWw;xo@$r=q<=I;MAe|GhSxAoq=K_cie^q` zd`_;|m(%YKU6DqWyC&k+J?SOE^Bi26R1vB*g~FT`lUk9@GcGU{RhS+BHr&?FwrK6f zdfqWJGwVI1s)KI-;%SSFX9UN>y6niP}Z>3bv=3#W{>AR&i?Js_mO@(ZDa8)YHiy_X?^yv{WkuoOiN$i zXO%(!cHb*A{Zj5>^F;WpQrr8M_PMM4WgYN&+&n@oMArNJT%6!yk0{5rT~>VEnENbk zFW6op`05vt)DNPy^d6>n%}ZbFM&}H%ii>E}jNyGlZ^NWjT5;T-vn)Sg6znI~J!EKo zj3g2i%wM}0l)_=H-&ywpWqh;1??|m7Pp-cJZO@D-3UwvzCb(-w)u5D@mZtyv2GbD} z&{fDW@IDvVL+@>}Os+Fmb(Ds>__712a^_ugl&&5{~gWZbM^Pz~> zx$Vn&>Vcl)K$sr?Udr`=dYjYDjP*kM(L#CVrFegy*kDB49Es|{NjY)Ry^74}c~&4r zX5L>~qA-5qwrN^y{f(yI!=C~~l3$7l$?dTs1~`jRKU`XOO(arO)zoYbb>-$#vsL*3 z90+?*Ss1$^F&t%mUuU)SH9UlZ{v!k-g_YxF{rW)vzGcDfzJn4~$nGU!c5zj>?Qs9# zLfrP-y{VBT1L$!zbRH z@NDNRVo5x?26NBOiR#?`A)qj4r2)7bN@Nh%v?R1pc3tFi}CRc!B*Q zsgdl`B8op*xneQnpS#o-9}z)2`ku#9C-(&&X`HxBpoTA36gT-=9`}bIK#FOwj*gBa zOghGD%D`eBN)8qTFXjfbv)vd|kiUWD?6G4MsmF8P?DOPCUxtYN;qE6rm*E`KS&>m9 zezzrL9z}N?Bga@~#J9aob~W`fO#@d`2JTLSZd_SD|KbbJ3iWs3oLMPa8#$Y(i~X; z9CLVT1SNvLQ_pl*Qp;@@si%l9lXg9;LA%Z> z+ZR;Ft0)N@K&AB84?gCx`gp`M5f~31vTEYc2w|rGaGd+tH&!$-K!7!a=)E9@3mLf4CrCDtM~hl3>I%1E{Cu| z%tDSSwbzYzJO7TZF9c9wdFT0KW>hy7F@R(HAyXi*v|WbIdX1ubo^SYkJMTsU&CHCz zB&X@$o@PFh_!gHn8aO)}PdFZC-UTq_E2RGf4!)iHbu&3RS~o~IDxPCh>qgd?&faQJ6_V#2({j5x68IWlhB;o?Hk$-@TgNRu-cHdief=daG{@QgL zd~WE2Ze7y!6nt8bSa(nBucleH8kcbTJ9Zb;##?jt&$pjYWD+^p@I7TYa?Kx$P6;Ad(Lt@A&Y@qd#yvab23 z$5(y+cozh{x?>v6JVY-jH2h|k3s?`!P704w!^L253KDK zTM{hazNLDYY@@{_>0Vi{xUDk8WgyH?84Y4^5A$kirBn!Rm>HK%=y60|Kbnb9%Ub=V zQjRHF{LKjE#Xs+P_l{X&H*UY<>-GeVsrj-bGzpcd{pIQ8MSuBpM&P)?5U>X)k2fc` z4~kyc zEb3oYz1m?`Ke_q<+kg(EUW#8fhW6qzpQcub+#a>#GR!k|Jf0%Z3__LI?FmeXhTmc) z-usJbQfLVwcy*p_9A~-{K0iOE^(hHBO!nrK)#soX{849gMeo`CDTW@miF?(j7+8yV zqLae5!L0`MsvjHGY%(<-y*E5q@jM*2eIEDWy;*m(ZM{lVf4aT0^H<*Ph>eJw2%IkRy4nXjaA zwEk$ye}|Adkw-nekJ95ZV941J6aI#0_t0ZCn*1;#Vp>rz=A)CQ2{Wbrgj@JgQap~X zc}il)>qqEF*6>q$6bI+tc)@0^q+qJ_Ar4Jh;a)?)*Ed!n!2U4XHOrOz-lUhoSzKIP zpUWeW%TOMlg=XRFFjw!*5!B~Ck+-K4aV+Z7pA_2Zs$9(b-ZZ^RAsLpxe>90%h250x z%wXqu6aUrl_T=QBs+rczOits|4sPY1&)qI7b=qt~=IW$X+d6I9bQFVwgCZ{@uFT7A zw@suT!%X$d=Pd0nJ`D#W?RQ}}j|m7rp>z~8GtgOJaCHJ35dx7`-yF!`OKFckt-G-_bq$S`eG*sL;mdSEb0+I z!s^^(%*0UHG2>+7S|S=G@6GFRY_V`6o1*qQ$7A3zuZ8E^dhJjP;scCk@LA1RkCs(d zx;ciXI2a?zD8`zwd+_VW5PUt38*lQx_w(y?xLpUC>W{S+?%Eb?aoI+gex{|tR@Aix z-szRcqCvO?UJ05pU5p`$;e&{9VlC`*cUMF z**4PF^fzexYVeC@Sk}S-&R0W(w6MsfH-_0JtLRNdbt|l|Fp(Efg>_%1#%x1Iks zAGrYR!X3Fv2bJ+VM-&O$W@_8^*{sRB(eN+;!Kwru0+{@Xwew4--pHb{ZQPIQ(eND_ zYRq3EI~7rnA1k#B2I?x0ZzRe$@@=y4zK3e*>S;9{jO3;#9W`vtXp=lYb}5QHIUVA_ z=LO*Sx=d|zppg4>es5<4K9$Xl)!?dP>rVi7e%XouUNr@EF^x=CLso&^DLwI=N#s|< z9o8dSwetwCQP#+ri;I}1>lwr^J(~^@P2+MH>B)aP9qK=$7oz|1TY~v=RXIH>e67h~ zW}wFfWA|sD1nMzTd7*lBy2wFsemfFWd<^t(qMKf#023sXnm{-Zv`MbC7X55a>T|Cy$x&Kp0vV3o%gQ&ZU>-1KIf~Hlt!VQYR>D=(n3U)SVrxS`GPD?% z<|WTq;K5^X%D14?(BiVz^}m)khplda1>1-cbX&m{p4QWctvFd9EN?%%!qsVDu^N67 zIq{m!$(QNx&9PWBV@_sG`jQtFkll3(ei+5#I3wct@!3bckL`PCpX&sJg~wwglrOY) z#Guwd;}q00Q*v=BB&Mz0idK0-i!fDGbb{$Z7sdp~I1wic0ueYz_J*laf^bWjVdiS< z7K(&xpX@3b4N#q zSv+S&nw=*csf=J%+U#o3QjC5wD}Pl}b5i*5Uic@|ey;PVL*)QIp(*|m7adzt z$kaCvuF3$e?*aQTNY$<#Ctt(Sp==J@m-viM=>+8dR{Vge^nUu3=}M?b>b9Bn?zsIt zm2k1IYm^AiZa%C$b@vcq{&utYbFi!oD>(s8^1%B=q2vk+*@Br^*gJnhMXyA?al3$k ztX(2t847!tL!~kWw+o7Z(hp68YQI1^C(~=c31FAXA_*6zf6Lvm0L@ryP}Y#{tfY_{aa) z@a9YB`o?~RAGleuamA(ytiyHI22T_uhsGA`jcnS{EBZqy0GB(8sf2&?q&%FJQ&PNJ z8V}AZ-U!H(k%xu^{6DZXt?&1I(tBJ(ZS$GHBsb!iC}lS=o){kiQ6kWkOjE()dlODD zG3MSG=iTI-mb7Lq3o1lgl-E+wjOh;_4diT(7_^jd91zWvP+kd%5tgIVxjrube6okd zgQjg`VasfPn0dfw-}96cv@%sB`(30KfdHd^!J1<4>HKv>zxng@vDHacQIxe;KVDY> z1dsr-m&~@?2?o6zA(7L8sF$q)OcptJX8-6Z>`O05{JsBj_E+->C2NxbXkEb(fApsc znZ?d+X&1vdgl$bDjS&Me!U|k{HcRYlVX>Vzc}t)2$-jzs2g4auR8>t(-U5n1K97L1 z7VyCQZHaLC_AJVCwSR3(W;7sr_!Dz-MYI#=bGE_6_)y1udTWzoTBC{3JdtWQoQ29x zg)q7N;e*Wbq+>xyM8`Q_&$w3|T7X&0&#Yrd!M0#9$Qg=MOo>ta8!I?dxt;%Xh%eE zK+{g8DJz9CtOj0o2Geaceem3O@iycs_Pu*J+$5}|Pz`J$jb))LaP9;xCk-09;d@_~ zZmj^I@-YZ}D$nBM(t_*Z{aR+ruvhrMBN4Zia!|wNdD4@s?LD~uLjUEYy~*8W>*c9+ zC3#m4Jdd>*7fC}pIrhgUfUd|7oObK)Z1Cd}Jg}X;pKjZTs;1oXroWZ_OsZyNOXWa< zP;H88%1VUnT#_rLy%>0TeqDl!rc^#Pjk7S)OgVE*zE?JSP?%trUL1}Mx8xW)oqj~D zWR$u54b)M2myLY`JYL651Eek|kJT$IOFlq0;QdnnGFqt^gce(@h6>FGJAzHv*DEyr zQt&kd{>l6jxz+HO^P>rq4zf!`+|!t0*RQN7qA@To?fh3AjE9bAxEN3I-{t#;kRXu$ z%NXYu`nX66)AufgYAc+7%+hNP^1wkfTf2O*g}E9cV{1}l3H_a+L^<9WqYbu64%akE zY+R5{;^GpG-7T`=2Y=rWrDD6+aO;8tWa&^M-4qkjw{?;N(4#>`&$J@phVza@Chd%+ zzr0wGeiMUjL%{E-$OykmPE8B10U(;T`ohU}b7z1b@BKiuC&M(T|W*O#P#Usp&{QmdFK!&GwfR#9;qje7IH z*7ayFH`be7giI-}>O6+0%&~mM16;Z6xs`60vz2OP6qFX&$frT9v6~FobD;&0*=5awC^4F=+&R?4F!#&CH5qCshug1a%s5 zbMdi?i%68ayC^>Cff9}eD6d=EPsO<)C|*7u*Vc}fmX@BDRvQrDNl>xUAauE;kpn^( zfl3UJ9pS^hf5_8XI4=}^JQj{aH#V{eCiWuB{R-SX>NSb)L1~bE@0OiCE5I!%RheC@ z6Q4dDsbh-mjvm+>Mtix`S=7Q(V6C!`ndhB{t-iwfH^Q*ROspNnKnH!i2xNaf?zRc~ z`0JwRe%hn$KHK)bG6+?~=?1smZRw0q^{R3y3ZwxZol?v|gP36P1C$?+^#G~LSa%ey z``?jZiy`l0a@!qAu47IxQE?38m2{ejZ6RTElMdVJGpaVU)OgP7y1uy`Uhy2IPSX1d z(?y*P+za{jUIhaS-{|R6nH2CI{9CDrnY@esP5TJ0MXN+b8tOm-rS?0wb}^v4JCq5r z!JU4{$)f@mx^o$`JZIp^4I3g%P|=J8_#TSL(aQcHAi)TO4y`4SjZK@<-SbOVpOzAS z=qDAq{;uEfgnQifkRjlGb4^zT_`-tyfx8XeW56d35jX(?w(+Zz_VPDkt~p?s)KnDh zWG^Ctn^X__s;&7VwK?qwq2xCobM_6oNuSunz-OY`XvKU$jOZa zjlwWpI*|m%f6!Cxd;F01?DUNPnk9M!*cVm@k@AyqbB^mCGJG~3RBu6YhXi<)Zt0}M z>!YoVc`>#LbrvE?^I%$Lrm@~#Mz!B2?+UmJu1r`qm4{IxrbDj5(9>S-DD;FUr z?k65A4-vGaK!|842z)W6Xizj7JGVn^E5FH?aoQm#2I9dLtNR)6kC}Eg+aKc)#F#AA zn&P6*Sc4UL#f$BDg$>9v#;h0Z`-nxJmP8yk?NLbyzGr4>zLwl*6ZN%UO_E!(Fpy2p37 zDJh&OqD^JQM-#2u5}`EI3>cZL@_Z`GxhCx%m41qyO$G&m&(zAoAm?3`|H(d_ZX3lWnlo8R`@atb&CLqRfb;6+$ry$%sY>Jz#fzS z&KTxmS^+&$tD31^iRLa7+)U1?pOHZuTLet-_SXlPP2(*DKZd;^JPflcAhPJX9ZY&q zHuH%Y2;_p&!Sk}arvFlY;=S--BXB!4F*C{pax=TBcW;3LG-6^cd{1ulbyMX}u!Yn* zb)hj;TvUyReJ6x_G8P^=iqp7GotgdVeF}XZ-$_Bc>9@PF(U*lxpM?eQ>)0?B_%WOM zv?1ULkvz0lqamX#{dS`WeY*&YUR*T|m)0q@!XPr`j~Jrq1pQED%ug|PD?vruQ&OaI zc7qmb?j0Pp1UjND#bk0gv|uQdFfB1}1GCfYd=MdO-K&1-Id!&8xWYBE8d2Hf{R~99D}Hb_I@Oqb3H1t6j<3PtL@e|jwJk|%_TQ&jVSruo5aN~H_AZ@cweeyHN`Pdxd|4dHLall!IC@hx>X^Vifnjx%6H^j>Q`PdJOxm9{6iGPNl(qbKxKZtb$^KbAvI0#R9&O;kw5`kX$Cy@C8w4_xMOPQc5z3|5hNDa83Z1;-SMu z&(UJRS{Lt^T{ApxV4u{K+Z2=M^|vs4BZ|VijAk_; zh&;p=&Q;6k_=v|3$q%WQIe{NX|M-XSXl%$deSysO;;A$)Cjbfr`>H^Dx!tsKj~(5# z;fbVTB;-F_| zsF?2c4Cx-}j0dez@_Qi3iW>)F*r(&K-FVe)ZNl9lK-&%NKcR6!6gJTMJ$C0WtrC?- zN*@nW|_Hg#Wa7h@lUogP6FNN_N4PPT*kT=zY0t(%s;FlVI0@wOd zmFI>Rg_@bN+aFRmXv$=}b$+g8LRP)%toER^9L?Y-4qS@~p!~4}AcpbTU&W2Xm*RyA zh#P)4Vg!UN<)NAN(U;tS2gMNIWjK-wnPFqF({*uyIV2D`pzkcdB1~SV=VVi01R5Aw z$Dsp-yPvO-;Si#xEsHbC+oAxB0O^?smy*u##w60>pN{jU8+)e+juD5rZyN!FS~5mwle* z68z$~y7_2NlSb|@2PQn?5hgbh%WjN@$Sa5A$YQxTMDrI{Om;2oYvoqVR9oJ&&d!RF zW@3T&GS?ERt?=ZMKd2_3VMGWRiHmo`y=fH%I$HlZdqdScl7J!{z{O;Y(FtRJJ{+?{4WE!*vv# zdD)_~F>e$QK)F7vr=WcV6%X9Qh4BR=b0YdODCpvAKAiHQ!T^C^_@*9EEn)eOUL;$E zQfm-IrC9f=1iE;g%KM4RdugG6KcEdMOAz_wOL2sO)inRw;U-l^M(+M2nIB+S9Kb-x zVgAQ4nQ!|_2;HsmxFT0{vC$A$st;O9D!(hblZu`1-22g+%$Fd{aSLCDysZi{S90U* zRl8lLQVBqkR>$s+!dW~D(I!Olk*T~k9EEaoRgOjOJt4)aSKlw%1@8x`{G*xwJ0U%A z!t~p?{b~ro@%kS0H3b;Ou_GsHsmE3P#dad3py2`&AGvsRtI+sIAHT)| zCaIyE9O+xxT5X=3=9tufU+Q(7&r_2~Jnqn#0Ud_-ef0qsQ-N4& zsvm~TJ_bygbqZHSMatt;xs%Uhh4+yF9G~+dnv@9c70yC83@?`BMSi9wH=69k1N@QX z$E<=PWdwE>31o$u+ z*|-@=xFV%W_N-vHE5d0~K54(S$-n;0JbNRxOCS`|6*dtOAEUMY{<3&9$UXq7@VCN~ zrJwDiSK`P1;HyeRgZ+WunC^buUu=ML(lqFtO_>hGG?vY11wWs3Yh=1lLcZEuO>43< z#oL0*{PW}zLP=56HPA(SPXn+V?bVG+QZPX@<|ql0C>aNY=~E{B=l@~pR!7bJ?aWAT z|6ba;_+`q!%M>=}(~&z^49l?5F+yQG!9=K3*@pW0%i^+I0+^buRs8k%WeV;x=g ziKjx(uKN4xxr(}$Wjoi4GceJUPY^DTK;HH0W2?sLN~PCIAPG))bZ8=32~4C%OZ10o z?QN!-yn^z{>=*1N!B!w89_7ae4jnL0Q;d{o5p7s!Rk4f)2LXr;e#YfoJ4Ad2J}`wC zfgJOdV^wcH1Y)`1#D~(0V+m;nz*=?+XCtnS8h++>{z;DgWkq$V>Ce`pQ)m}Ra$0M^ z?K{`xg(U{R2&*hgE|QddYPBqSRLQZ9TAaRgQf5=96fr2x*U3n(i>UXz8&I4fj9yz_E_~vi9x93gn=;^}D)cI$ z8x8@v)ITn<55S6h;{Pa}SL5cD|2b(6`8Js#Ss|sHQIPaEms`lCcJDYu9Y@+CdJ``A-hv)2)`DUHp-v%y*6~B8( z3JJ+&aL`pB0E&?CL}Jrj0gmGGRbjXVmr5WqH}5CuON3_fNeJr#4V^vM>GQ->P>rcA z_MkZL@n>SKmG`-Nm^+eVZM?g!F&@Pu=(}N+EQzvBOl>lDJUb=p7!u9hCjBsq)VI~s1GeIuxFsZ%S)A49KjD+&Lk*}T48Z9!9S8cOnw)+R8i!QPxMu8^2(Sh z`|!`oL5r7dJdp3x0%e9jmX~^lL?fiOrA2)a|AK{9B2xA2(|*UmV3>2tpOPUODtX&7KA0R)K3s!~2^1*Bu=q?V9PhhpdKxlB~@6x)e!A<`brjME-Q z?49kVvYO~u4ulYJm-eHQzzkvL``{>q4(ZNx+z6{Kts&uce)_ z*f|rmItB(vOSwzZ#dC@g?A2|<6E#t|gZYx5+5@2jV?AD5zuP5;--mR#_tKy@qa0Vc z)65Hd9O>yPvAWhc`BzDI4iWLUPHkFXY&)dn#rS_u{XG2ivQ>;r+8&N11t!l91T-CD zQ38>Va<8i3d}p4iwzdm{L`$GOCo+k%z)d!ZU%{g+>7JrH+>w=O-@q9~g%z{4mFwEF zv9j!bP%3|q0g+yL)d^`i&8ieD6lGiyx^L@5)K^dFefAM$HL>dP9Hu>t?z?iAf@E6jghVn)05 z#U`9=%J1h6%>CCUjM(iztx$2otagz;_oF_qmQtnx1(5&F45n5y5XISsLGp+VsNEr{ zWF)HA)}YDE8+yV-8W_!)Ix7y2j~14knol<(flMzIN)e7|G?@X*(`sBv`$&f-3fNcY`!!c2GEw_T_n1q;c))V!YG$ z21pHMUoAnjgRFY=Z_bJe)B1{LiUS-CUQC-cD-Bc5Cz`=iqqUDV21%mbn=p^=Pf7z+ zSi>Xvma3cjPt*FX_tWJzZWIuNz1MyqLSZ(4#aLXxt~`!Q;GWOhJ=Ud8c?g@{xL1$K z7HD4fohwYbnZ15)Ww4hgGG|sL2i6BY4nGc%r6;7__%mB%@CWa5$Mp(KOpSiB)IDex z_(>YFBUAUg@hzk0;fmLzl>R--z9|40efraR3G^U|%T2uY6e1XA1>_4T_DJHVsuVM6 z-!2^txH9mF_&Z$A-&xUBMO{r&d#Cj!AiH|jPCAo1aF)pGi$KivWnOeqSmU~B8TF5d zRvgn#5=gAwE+piXhlP)+DL#D~9Hv!7ARqpZIC*qf{e`wr1&9$E zd&a{(WB-%WdsIzvwlR^oC>WSXr}>kVV2yZTKVkf@llbYxqZ*KDvyEc8z3m?x zvYb1rgjJcnFWN^e()#ohAhep%sMm(ZRrj$ghvOluPQy?jbi)Ksfe=7Y=L^mXL?C_S zvcPKM`sZ?4i0fjrKn%Y&9zZFygbYwS=v8OjDQcgqJT9uxD1N6SULWJDI%13;vGjM! zDoJYYa#+WBCqypJnNBbaX!VU`m^-2u%e9xaTKMZL8lt$u@RhR@FO~|(*C9{cTdD(9 zPtkHmGXLnZ|Adm%DIq}G@BJXMSiO>t6#bs`9H`0;;Wxz%nXog(n9!N&^kaCe{N$eT z#}pL%xq5?Leu4 zV>Qm=$z7KEe5Bp8RplfHp5)F{+7QT8Stpv&_Sw>v!<}Acb*VJN?wz-&F$yWWxS2>x z{P}z19gZQvM&?~7XSg&RSFeTuagP=-n~Cr$v-qzpU0Ol^PLHp-TTWTZ`krAnhI`C& z$;go9l9tWd;p%ISLHs{|EOm+0Xp(gdk57w24CZb5Gkk~gI5_KC>;9CCM0xt?L5QPSD`>G@u@_V1@l#}t?{ zV23+xjfM523ekf<_XrRDZ-S6ur2si>j@|#k0t6@g!aP8rjNSICMf)CDgad=UR9$E5 z<@GeLJNo|Q86CpS^(q7Go<&9m^Zd#PZ~+Kihsw$;pT(b)C$x-tA)5b-sqc=b`v2oS zls&=;2MLD`*?W_5oa}wV*;v14KDNDTx31>DVsTeb_{$p)>&cF8`3l~^Nh^sml z2=Oltv$orJtx;wZ7SFaX`impV=lF)jC|6DhLo+&lyS`G72yV^7PBIYm0YG)$Vb1xM zP9?TLgh9b@`bh>MP!43pALk0v;(!8^Y3uAQ>jkp+h~KWajseLVIq9X;(0T6Bwy<8o z3UULzxkBM;aq@ROWKHBB{SNv1u*YTBguhMDGr`gv+||BIK73o;7G>GtZ{_lFZ^iUY z{-+mMY;f6|iFB3zKX#?lC}j3JU}WGcHp3dfa-k@ZTyK4}OxuNbRO=@s-;z2?J~ho^ zlCG`Id?542=nTRmCu4bs-(rutJx+dSTIvCeGVm4M@vYWu!-%imxPWq}^C~r__duye zrz5?5qo}*12?O&nRhHTAPRqpkl2c*Lmcq#476iSb(n9-Sd?S3MuP+M ze$mY`Gu@Eb8?hX=(hI_$&_CdXW}ih$-4o2#mu`gE!+VXYmdQ!jN(nD5J)3-*I$A5k z_I$Q-QGBdNTvMO-n|z7gQqgRZK{~mIw8l4SZH@i)+Qeh-IKAozxxaT_y#W+GJt@8t zH8xU$@_$j_G!1T;`2J05Eu*X5O>?hfR;UYBnGzKoHO#SE`TM1_MyErt9nFm~9SFPH zjPA`~@@tVG=qYJWLVZj3VuFOUeDMb_6hZ2F_blD6QOkNw9w+oZT@v}zKw`FB`YRd* z#Wd79dESZ&X)P?gqzE)I$O-(yXD%gS_%K;k;<<4?B=jIRnW@~xcKjn2`&we{FzKV< z4yRFlgR@BvyxB0}TjR5t0@2s+Voi|jGM5o|d9+qW`nH*`?{WZ*%G;Xfvk8H7eZIpBL@7y@HP|u{ zmKpB3oA-Dy3<<*3)`~ebT(iygc|lWuegpS3B3}!$g&wUNA}vqGxq|5(y2LjO+0$`q zpI`s%`4y=Eg2yU>cVq(R-p@7R*p60x0jWq`so%q?>kQvYi+*b8h_u>j--2rE7~G5r z9=26v$>im)8H-s=anG`y4QB$blKh|znoKhsKrXng$WurVxaEX-Pra}IC|cT{lytGs zel&%Yw;dnwsRg<)H-!!l4}*q*n{xFpajb(nhC&#wNb1yVXLYN5NG+vOv8MUF`TJc? z>MEA7ghT_)`@LdMBI)#|6|O6knx!+e$85Z@d=qafnko_DAKHDhdVY1#qH+Ghj+t!H z*xAsajgNyT&HuPSxXm<^xOq7$3B9zX!f^KLw?wXlOuv7mV#Ma>}_I~4_AeEMOr4#m3 z8kN$0;+8l0%CFJOl1-^6_YZ!X(CVAa_X`+8$S&slRPFjq;GwY%DPnjZ<7t%6F7tLJ zr`Yp=@iTG96)NU8F};fxOe6bT26104h)kq*meMAOa` zV$bG`*uH+u_jDyS({lppZ!hbz}N_7sk_&xwlyZTWk=CiwR>!V`tFL~084Yspl zM3`d&rU#e`Gc3tupcPtMlvLrxENAngB<#;)rXKv*B8&vYH8sev4@+|Wd7UM-%6Lg< zw@_Z7BJrHVB`O)zoahnfrHuhzDBLGv+Q@Ggl{(zd2etI!PMnF(%=hEH{TYH=xmg5O zRUWO#NsWzRYm1WV|JtXy)Zq8ELf03IS^jfc=SIF96?Bsgm<7`h=Bz5uUsztb*jq9^ z#rDTabq2S-CIKrEU%K33=`w6xx9K}s-fC5zj99am_=f7A`YQsTu9sjs9j9u%b2UD7 z{#m*8tnbbTwWz^n9-YrJj?xZUZo9%{e^K}AhMY)P>)ArbaCk0rz}_!@XaXHs&EMA^ zxx8e!`IyC@d!bX?mEj_r-BBs05e7jOuL4p(=P6gTbOc1VexWNjx34tROMkO>(JA%y z1)et~3YHRiVd*<5E?#TC@semlJwkk)u(MAj?%i#ZX@v({U_$(=4jJjkoja1D?@&&_ zjUC7U~L{jXNOqeQG=C$klhxu6c&JAgJeDa1VByjVn<+E*KP* zz|9dV6+QELx&HeYq+5yp4Q}EO7j+fvl-<}t#w~|X#=C0S_Pa{;ARD$>I*9!;9ceFQ za$@lM9SIZ{p`PnIsK^a`xU=cWm*DblzTWNEjT1mm9cvJN74YS`0g(Z zfHYxO^hNiNa+vW@exR=|wmHp6iQ}8X6?zdbhgm*5miR?IexLC9UHCjm(0QGXjt-Y0 z2Ypn#M_7Mnp48@as~z(k@=^d>9$tbDif>+sRs+pMh40j*cqmT-6 zr^;d{i@EQ447AEGH*SD(NuwhyXI2QAX=BCXbdeKKu1jI$I>orlc)dZ@#N1q_C0HFf zZsfK*v#|q=P_)kZK?qCgana_F>QU#x3%%8&(glpsU+?CgG1hq6YlPg^#1Z+$A!@Ky zYLfTvExFg-kY-XE{1$O(jpA&MB)kEe^2(&1XBhpU#bC~B(l`@y-cY|bLYq5J345qz zw@+JUT6;ZhZI@RzR1_gQCQBq=&NJjdW>)0Raw_W|>N3_lVZf&LR(faTvC|;Kz-DVyW6s z2xmi1QqwqfZqEfu$^iEU_=H^&IQWGoMU#F2vd&UqA?3>6+0okSyWM(R`I$TM#jUIX zm8s6S2Dk~ zl>R>Mz3Q93-&_7U2LbAn$Bf%esgzt~2|omk-5Nd)i*_$<*b$d;$m>p2`AM1Omq1*K zFj$VFmL6>3e#{ zU(`p2KD3g~r}_8>48kiNoA)N@N15i?p3Hx+#}8T;^d%$9sek3+!Ph8C9~1ZN`SCAO z^A+KE6z30J&A7h>7&)$$Uy=Fj_}8I0-<#k<<7q}QI>z}itQBLIq}j_+ce&XwW+ZIa zFXJyTlEOg6A}8l{rYxWTXz4!y9Z74krm_kXQo?1LES?Rl~09g0VK^$C0k zU$}FWV=oT0T{98Wj47(N@Nhx&%nV_n2%E#9!X3$2;k{k3*K3SnLZ zZF%7%zH71Avn1;WZSkd_5EP)?H37b#ks#Lku-Gb3$bG?hy_T?8WS7hF3oxhlW%ohU zS)a!UAc0EQQqu9!`A=YB+bVW`R~|7I3FG^nWB&~vfgS_fm2zLyzw}~UV?6#e)jZ13 z4jtINnWDkpB_IO>65%++agH7^MB+7hx!$pY6xJ&(8~ADZ%~f3JUkX zKFm!WCl3WZc`3Mv^&|_@ERQZ;fA-`c(zL2xm(|ve zKUVwmT_XX(88d2`r%QuaY4A`FZ|QIqV?W>CmAtobji2#Oq-ZqI2?PYAPW<-!+E5y& zcAm@qhf67Ldl_Pn$pU@PUkL}}S%`qxtoBy~!S8%r{y^ zcK=8RTOIfE`nuby;7_EiHnvM@ZCIy#DBpS%mV*XoZSxO}$Ac?{@Bufvo)C{m)mIXS zjAFdjC*{z#Ji_Co2U1Uc zKBbKA{hX?xlWzc=LWKDZcq|kidfZ)v74PKHM^>SxNvnI}6R9u=tk;reNQ{Zf8sl8* zSdaFN4DI$_l+c`OVeTg?G9+aG!@atwmim>HZ7wJtN9bDMHT<@j{FV|_S&0&b4H}wk z0w&xeE7of|aXE7Pd+0&Fe+E zW~<7m>qB$vfb&my z!*fy~h4j`NV<}w0Xp7Vs5s=La_hCyz6v}Wq0E+zyGw(Y1bF1`i`;TCuMa?FoQa(QE z{r4lC{e{^bhbRk#5$9PoR)l0aVN?{wmbw^3-Bi-$t+O58-`^iWbi;2?fGslp&C(5k zhs2vPfSJJcIz`j9$sCdb+-51xh_<+@YS^Dp7 zme7an2bc6jcIhh(HeV%zk;(ET5rU}uZrg6&HB!iFE@4I8=~;##sg!afjYCf}fiHrI zMFz;D##=s&Gf9+WDb4Q*(bRu0O5Jo5Rc{LPWhlo`G6&k}r`?Ghrn&NU#G7fYuGfCf zdZ|UTTTt)03{Bl7|Vf9L|-Z~z0f!|Wg9_mo+>jQd{JXH7m^7USW z)nG_dM+b_%sumad)~rRmRz}afWz;n4nBu9x&B@horu^Q29b$0^jT{!d z@;y|-RQ%62>}9%1Y(`#9L7Gm7gQ>mR)sTs?AUf3Nzzt$VU!SSkok9W;Fmj`RFs|3k z7iXfB+~H9ECG(DaG3Gl-{@ctD5&12NujR=)(?QrI&YkACpx(B!%{9A3^ER|d3WS6e z8?boxtHOBn(nzN+$2tIME8F|}PMd9O_WC#rJ##@ZmCG2k7+E)rWhY(Kvv;P?A>f)+ z)pd0`0Z?G7Cgz`~iXM2wOf%W}+2RiZNp_EFFf~blO8WGARUHcpfq2>XG zz(w?;24cPGSBGdS*Q= zI%#fwpX!I&GpY%Ki<~Q2Buh2_E^3*{FnR5=3kC5tPnd<@VeaE7H>UCC0@;Xet+CfU z<2JOPB+rX7QCzYdK8yTg2)hNR=x74k!C64UCX>>Wz~<9db##~%ucyUL)e#@%9;gvm zT&9>h*|L8ZtRyb^AD!|8S$>_&*A=JSiEJS;1Ov2(Qxb1p`KG!)IfHw(i?==~a}_J` zB)jiS!e|dN`E-Y@N+NBzQJ;Fq(UX>%6{BflNe675-1_e{5~9bl4ILfxIk{w-p13n9 zsNFP(*zR=n>t8e|t_W%;-9q{>RM1K+2TqGXJ!&CcosV|kb+K)CH7@iF?yGC?!hVEc7TORTkbGIs$r1M=J@TmJlS@=h zv345J2EMH20x^{O(U*n$H7!fQKM1MkUVH*Y;zqn19wI=Hs88&1C-Gy1RDB+`mb=}= zAW;xiTUn_U#al@l9b2?QqW3aQgpk zu=JnZ*SWDBOWiKMzQ-8mXU}#6h}oJ5{<$r5o}Wy7b&L4Kt+^NB?eS4&s%emdWj7cS~|q{Af+BhI^?wFxRhdU6@r8<<6mqX9HeHis;bgUCj^@@skj~$c}zOC z*1)1jMLGsmXv-U-R04jGRE%->WZiCY!RWZ4v**cx=Ki(+{KTXAH_~)Rm<r#E{)m=Bi?Osq*cpG6R1zn;juI-&!gt+Shr;&^*sLJ9 z%!jCy1{5LDiV*njAPG~|%=FkKhjKZ#SE(3EW6H$gxUOyf+ecM_Kg+SLt3Di1t1vv%ewo zTdl9nUx|mG(E!w39hM{Njp~4i)!ItR_p1|UUk$kdQ&rW?y<@S!7Llc+(&_yiw<(6u z84Wp9Bc3mRbDik1i#xkFpaGe}K53rAz_Ljg{nJ4-Fbsa{KW#FaKXlvf=xBT-J=W6$ z$*QrtZig4fWjNIeFOh5&#E~&p#>di<^_Z|DR(^m5p|EYR-&A4TDv90^2{=vAe27Xv z&8wND#2jWeESh#qBO_mIttO=KAy!&q`t(}ObLR}8N4@NUcg5peLG*TiXK9IeyoGGB zakk(-cpyebC?* z4g5~B`aZG%*PM;Lk@0-au->t&D|+{w7~x!`-d&bxsaS%tm!Q?{X?<8V-I(n?PRkk@ z`kD;T3o2oTUZYAQr2YD+S=Eem;TSEqPp1mnZFxcVQv;RQI=I8I%)MlhbLYlu{_~Aw zUgXGv@Z7u?`sK)!P-L?Dudmg8v`F=6~^Ra)n-)zl(&f_C$CFu@eD zF)mRUzEXaysc^q-N0Jx>B|&v^P=m_#rDi4FaKVrKYe=6!J=*`l`t zKC3O#;KCLtX90hW9>OSG9~aigMM)O4b;3?8yUb@xzxMVjSvRpqK6v^c`S>Oc#Ga@< zj!^H9IC}OlLeNaTlMQREp^`lwuMM7p`9~E^5Yt_JSC!DVfC$F^W5P6lr5=s}$b%j5 zz;C(2F|#P4m1*u_W0q7Jg%|Q5>6zB9ZLZY+#iZT1nH85MC$ezm|Gi(wP1?pvc2R`%Oe!qd$I*Qo` z$E&&q0T}jQ3Nh&5Y33HRJ&*ZPO3UQx(2t1at&VEJ*3w0_&>=p}`~CjJsG=K{C>n0! zd;>q!B!Nr61)sLcE=a4gfxO&_((DrE*Yl%|dx_>Gbef5~O2 zb%wlk=V3XPuUYA9haix0{fpk&kT9WkrSQ8(mJf;$zyPF|YB65|C)$m6o<`5uFd%0- zQci_jTUqO#5Y(wdRt>mBrT4MQWeCoOObDAy6Q@us6l3`%1zLZy8jZE?_CUxe(A2&O zB9^|2aMFAGm9Z_ME;ew{TI4L9eUa6X4JQj`;C7A)DExi0w3qNK#kmw4MJIJXaQvkRCi%FXlG)n(-Tx#ec z*~BUMhN-}=^A;Eu7UlK1m-`c7FchC(*N#;0YH1y(M;OX(<@)X}I@|*G4gd2cFf~Z@ zt|xQP)8;W`2fQ}5P=lXauwH=}NsK0*x~gtKfkw)lpN-}%3NAW@(gBVNukiqcm=K8u zuE3CWXGdtj#EtqLm$?5+_bH|AE=7s7#t(IjOOl0SpVO2AbLa3|hfXp!9-Lm*6!EYBV5fB#jnbKA4yuZQ7zMAG-(!fyI<}tClv`?vsKh~ z*TBr#2tm#IlE3-oeDvkjK_RA>5XYf6_UMrAX9kp{j(^K&Z*CO@lnMRq^_s z+;8CoQeRgP*S&!0k9D#$r|T(!j2nZA%ZD zq(VlOkH=KgtZb#XfkE&q>*W720{a9N#Pt}o-Q%ebU0ZZZpsw^4ii8e438F^FUY}@H z2<^##$BjnVeSwl_?SOj^$u&k}+X`&Yq_V>_w9TG=;D4c(W!sH!3l6MD3^MF{kd;#8 zcZ;DWX9xXHCR!)<0uX?rM*c?}y2Y=JA87yZm5GpeJK4B$6dOON7nXB{p>=8c1YVhp$1-R z1A3?03y!y-9^|Krct&h5vVS>3iq4 zad#}EF|0aC`@!wD+4^W(<*nT}#S4**;gL_**dx>b%P7HbF^yDwNHIYKTC{SDb47~c z^O*ntW&!;9DFrW*F}Mm8n{CAzz99!rK4<23WQ&oKK2Dz7>IT0USY9OSEl$= z*?VEpeNk%T70my!5(VIwimyj=Gbok_Aor4eYI%88bTWy3$0Xj&Ix@s#=ncf!CCq~0=-#5yRP1R=m>`2LtMR7xVPgivHDpUYNP8$Qa;Hkiu;y&R^iuKXfsK_jP0`H&?3|<(PuF3GolS)8eCu-|r67 z_!^rHQ!#kx20nRQNZ(vrK^T_!qU5CAsA}4u3$UrnT?;_`#D7qu8@#dK(E2KuGakV$I~Vg?e&^JdykFlOuM!) z&im^mQ5?7OAh+V3!V3+;m7S4dHR%;OeGKiX-K%~$DK#lP0GxJFiccPvA?EeMxJ|2CxM49vcfZKfwQI@D3`!u7uJZuHs%A1$!-63|O)N#wfEhPV zQ0Mg77?U&1@J$VK=TYdJIR%l0w6P~Rr>+kjZ9-dl4R_th#B;G&rvWs=U?Rd4rkUWM zPvQ3g_2{XtmEknUlJ?%MrC5>Fx5oLB)Yg5j1%Y^?(%t;{AkgvJ@8DgQ99d}-Cwx!; zCD+Bnm?*M%%KH&RJY|jqhl8)hK@>^kY#>mj47*)k{7A6TD91G{JaP@4VlHeUC&Ez%b%7UPgy59d>1p|X#G@(kEEu&An+yYKQ1X)$mm4J;kvKY?zxAiv%mu35n@!-{ED(d6c0^*{Zc{&XrVh|*{U*fl7@*Qa*V^Y z)Ql3)@<+Hh!iwt=t%n8P+8larQ&RL(>%0{;og!O^87-|qnV~|tq1zPS{{AWLMv2ME zqfrhzOYTxW%~eE#k*z*5X>64l33n1os7%a2i8bwqHH?QnJ}ABd1z*9<6<3bJ%uY=8cyc!GNXou8 zW7reOk~iP0n!8WQXJyzgdGM&2hxe|HIDZO0^IlBxua`ymEAG~jN`iwu)sZ9II{me(%L5$Y0shY6lev%za_B{ zI7Z3BUj3zf#=^kS=*`fr?Da00+^>%-vAFhF`b7V6Jw7@Gr8Z|+&+ML2JF%y1j#q9)LMdjz(7FqS0=Ye{Ri5u#0|NPAJg>59EXyhb@TPt`zpQp zv#P^Q6{nZAqqDzSMF$J6Aku4x4C0y%e;;)flwT|9X6}i+f29-#^`9H^vYf*iEJX(e zsCqV%*#P=|?ekocQn`KC^J@Gfet)USNv{+z-hZQj%5q-#ZddK}s|+*F+Ce!{W2Az7 z-2eD~Z;E<15eQ87&*toZxmc%Q^@f_xOAEbm=)X&Rp;)LgF$lCZIHQQ?^#ZS-l>xjZ?hki;43Hz_IrzO87B1NNuXr zGSsP`kmR1&#o$iz{G<~!raE{j`T%YdMxPZ1J?--Mnh!t8;zJ%^{c{Hs4xIGZ2%flA z8St^9j3}Y4`1^rIRi<1C=m#q+@R-MI)%hT2VmJ0(dfEq#E&SF;n_^b@bP8(3#CRZu z&wW9!#mx~&kzA@7?U`8P!-CtqPBgv;G;n}kleh@{}m8COn%dBeZjv9a;k|e5sZ8F12VS1ah(W;)I^`%t&8Ucb|bshIG zJ7b_B^!d}(`^?P5csCU;1!J?obrlM`9xK_E%W&5`W;#H|eK7yjRK)1R${|5q1aY`}_(%?m{X6Nr#_1W`9mZVT8Xhpc zfq8w3oQ;C8t|9MeQ1Z0@A2Ui2NE3uh%B?{=8LHSJw2(YPB!x$ye@`%_)#QfLXYt+< za{t+9eF5Rox%s?=$yPl`&p7+1R-*JayoPI25k&C4iyB~FZX2J(E#5<3>lWI{RCyhd zGvO!EIsqV3)+@yskhCAz`Z%dLYlQ0_8OD|nyrY-n*4Pqwi0Nt!VVyF6e~2ggLgoZS1dloa&2HHxz;$v>|l7-WEdn91&Jj(fh9;mat zHuUnsq7Z$6vQ+1MNw+y0hB6#NyclKgn6yd{HO)2I5cMvfTJ>(e>3xSEk(Bg%_|3KD zix(9HV@3Zo&8xN<%enf3+ZDs+Zf2JHEewQ;`zNzeMx8`ydv%$I#!rk?R9>;()`*if zc-xdJt+S?|!dH&XaTchGhj4bv{xeUDG=?+L7mh@NxcMKPcX#8s{Wg9Bt*z^l(9^74yMhCZvA#i6fj>^F$_U;{ z*-eWgrGI@Jlo(f+1OkELg}2bwwI;Oz%)}~vWKohy#6_(Cv;l1*VrV>&uIt*w$TP$# zLNDRd)hx#OPG%jEug#lU*KHh?2?4<%7n&eY=vjShGfj#8{S0A`_HwP}YOaIgJhtn) zwK8H4jD1|^BEuFc10vsdwMZkk^ONPwyR$Q+*vfJ_(WV== z%TF5Ldu@$6ELm@9em6^EF5O(!LcB!e9#k>ryvIt@MEnm1gpHr)f6_>v+qC6na#yqd zQvp&?ys~*q$n@C*Hy>QtO|pyzI{7kwm zX&wIgtp?M}RUS9eqNFQBkk)mcg1LF*G^bm3nd%LNpgsG7jh!7Fs9b35e|$X?ewWUm ziA7Nn?M(*BEiXd%Kp=boriDHjaC+IZwyf;z{SBmc1E1^mmCPcFx?R36&FaM^3uv?& zOvk1T#|xLq;VM-H6I}$=l6pLhpZ>O){Gywo2Q)zjV_pMp1SD1FTc%S*X*O39(e9*M zVp^4&b8D47MKzlTZ%pzZi3aq|TUAp&M(`co=dW+RWoT-XL{g-t;o9x&q}=k2-_vjY z`UbqtJnMKI_HM4fdXfRzfPhz18c)t)WO}u1yHAO9$uIN)syi6K6+hz5BQQ$qJ$AR{ z;*+8VrYZ`FLJwlEOh2M+|6?Et``WXS_-BO3{MZkN`JIefaylk9t*Ir7JW!)|Mk7Wb zdxoo^$$}c*5Vl#>XjD|WAg z!<-PKwt457CFM7|QvP!UZ}VbR7iLX(os`A@CW4at=v4uBIARc~-c#NKfBefn;@d#k zFQcCCmv`@G7<%6e5!|z8pw^kjw5b!NcF!v^)qF1n!9*_wqHFNxMAgF%*~|NAe>?J? zAc@Vw^3^llUC)d4=U=N9vGX}{Z5(cTVg%0{2_Y5?l<4Is$=LvBHSn{);7_?GdRMW? zE3QG>r%mveet-&tb2u%8qFlY(A^ZuAv3eX+Of(}kgJ{riXlGg1&rSe9UwIA6JYN+w zqcYa;Z+YV+7R5n>`4S0&$^QGlUK&dMDEn*-yg765H?5q3)F<_z)f@9+dP|f=cqvz? z#pdCwBstD_+vt};<$rbehLMtLSr#?pB)*bhg_eIGp-PfqP>bY8AQMxBe?;Nh$5q@g zpNS`(>Twj##QD_YHbtlvh)u1O$PFskg)7ZEt=MXQ(%z9x=1X>?SR%ai@JlxIY$P7Y za)Q?WAt=ScC^U2DP_>=T4Qckb>{_*H;qBoA&D*~wBM^zPCeDXwsiL4i#c#r^2tzrp z)V(o1o#U1YV!ZT$+z1QZK+x-{Av{sZE5;KQP&_H&3$a7$kABWjMj{Op2{|EPWx zao^OGmm;RC(n!vgXx!@czf6%2*;3%0Z<{G2@3J>l5G6X@`)ohukVtYPOD<^n55bZc zh{Nj=N)*M%F9?`X^Y2FkuV{f^p}sKcl3F`!O>^352i%xsuH>9EcodsoEGUr8qATqC{KPZJgZRq=%Hf&WE4qs3gXVNHs;yQBr-Amdg@{@u{`x z_(k2enpWItI4C00ngkMJ))yv6`YU4=#H8$43} zOkhx(U3|;lQ|L*g@Gi&}g|2uaQpx{SzAAY5v>&~%%A~M+P(uSCnHI0d(e<}7xWWw5 z{a=LzSAn?yLBYGLnzJ0-wmCvia9a5s8sSdCkKG^9lkpXd7eBDY9obxX>_!;J9ENot z5UoTw){!Z^WxEPb?6Xp)W%HcwXl8?IKO!X%g!#%KW>&;a$-H@e?hCGnn$HOQ2|RSb zK-Mi@NLnFrNu_K)xvVGdf@055BEgo561}k!{;aKakrEUj z=syqRU!E1ucbvZd#oEkqd}>?yp5c!}Ss$#Q>;G(+2A_+^Qw8 z`F)uyNzrIOF;K<#Jt&m=Dz2f_`&~8(tixsEf5T*gPN4e~+##^vRIpJzES8g--}&?S z7ZRAcY&jz4TLbjP)*T%P)(gt-E6IMX9gmj9L9qs2Sq^4j;*jndU9>!FCr#*naO9#WhTuH zO+rajo~X8MnZo#?tUH}kF6;Gcm90Tbr_+n_KT$I`K$`;tEOvlTMjK98&1A7ueKP}T zngA>Ufx!ACO94d3Du-mi5!YQ+hW9ncrUe~;;6J7{)j%L8Pu}f`bOz)~DH9htTuKY1 zo;Dxsc~i{w#}2(#ApDIO$MNxLMh7|Q3M`}exI*j}JWF015_DH-`v_|8{(S!OgN@)~ zcJ(Tam|32h59FqvNZzCd+~Q3Y!+5sW+mHJ3-C6KwZ*DDHtnfL%f=scB-R-ykaZZWQ ztYoBT*FM?g7wB7;2Hm-WrYOGHPR1B-cb^fy_zEduAl9&i$N=ot`gP!sQjWzU)W1G1 z&|Qt5NOjaq-BGKwBkTICAHud(P0e&eZCEo>oasN1G-Z~}pyW)33}v_$9uYoJdjB!T z(f$!LEAKDUQX)JwU5NbUsisSe&Is|ZOsEB8tJeCgb8~)}x%ca4WEsD}u_dwri!_QHk`Bk<3&Vrq88%$!;$=*g&>MKvb5WjhHuPSaT7dymq@pb;ItI8BafY?2OM+msY zj5Lwu308MHKGr*Dn1zs&q$b|~7Cye9`uQ(F-NBjO_Cf@vbHIj?F6G5-JWyzkzB3xa zKHyNggYBE+wY5zS`S5@-r798rtyUX}T&3B(Pa-5ZLlK0p$BA&@`t}~_ zB^sEhRi%%)9gUiZf9Fuk;iZC98TM>oaHgq~YT(8)=8=oyD$%ldCQ2*gacve$^A+Mu zN7K??L^&rcfKk~rUwH(QvMIl(bBy;46Poy+gx2ei9@{s>4__-1y22LVf+1cZ>8EHx zkDT$gUgq@#54C&goWt^q(XnFN(O&^ z%_^;YRMKx4jwyB>qu!4(YezyLFxEgF>~z7VpNgH9@P?S8!YAST5uFUx;lv?wxKbT2!oHRAEj}<2T$lb`Afy^1HXi)R`uqVXIqp&g zH5K|RpiL*SEb@3+yI-seBu5}x%r?#6@p`KbeJfM7aL!WeC&znyu4W+Bw^!fJ&OOj3 z9n8R-x6}lEp`Q&e6B(e$XCrs{k?asaYrqb*n@U6<wR=vm> z{_MDksKlIUyGxS-?7 z8lP^0rD>~H%Bneyzh<2$QblkSufySlN`J1gol)U)UDYH*c^@Gukkh1eH~H?1GS-~Z zfY5`n%2+?|7&lD(#>ilpKK|vr6t>UT*Z|Mm-%E`5 z^`f5J+}(J%H_|Q-;==zY%V1fnb#CE)j4D%4^W&V8(VfI^8qFSmyMJ)vjeWTyUV6}1 zpI_r$Pdr1;Cx-E(fMN{Zr$PRhx9oCyUeFvD6^QOgDwC+TekTd#vzuvIUJg$se;nB~ z?03IzA3gl}h(*ElCp$h6Y)Vhe5gO`!$TbHWKBjB`k2#FveG=ne4Ucb;Rae43l)3YfezCA#E9h_R{0a9YuGSie=Jxg&5H!N^pwB^zy=R z%_;hk&aA1)2-A;r7MkBkN(NXUkox77MLy6P;?hJl9cVG@*@g}){2~ci+XHr-x7v?^ z(tkpKd^!V`VSAjFA-bMqj>R-wcD4CNy5Gw!ybBYRZWA` z<<%&dWM@7l)Az%~b*?-+bPd>l!^_gl?JHSdSN9rv2y*fKC)dbTEfks)d)F(EF^$LE z1sU!gfNQs~HGHJ`T_A;e=`m4VX6i?#J?SjTJCaBH4zJ%#v3gX76sbi&fmO<5SE|Ww zKS20#Or^YBzb99T%4>ps?IKX?t&BUnZH~Y*1pO2JhfKaIz;R}yG7o%a%G@=XRg83} zuTx{bxmYw*Jl1*Qb{)ianQ@CXKA02MkxLuzt{ZsNZ_M6iCw&JtP^rhW5)GBFf+Cu3 z8w|71B`uWZeBE@~xJMhuLqv>cNO)BQiPGS2U(0{EKlOFIoix!%OfAcoq5qcFFq$xd z)DF+a@E?FyL@Luz&e6yRma6EsJb&6jTk@g+%Sg+Kg?XLmOcF71zR^M?N~fWvv~V8F z-Y2&;8=>wS=I39WtBgiG$MrxEv2IU5#ailpHYcRz7 z5*6rX)D;p_a&~s^dalcI_rPjd*5RT}bm;Uh_q8J7D^!v=EN54XG{3mel$lDen?1;J zQO%0+T8VSodpm4-rqVRvfvcRR_Ei^=@WX;v`y|s$y{Ao`^-1GlGvYs-X*bDOcF0(G zzh{Dqh_6Qi`7VO;-uZWF`L03mW2|Wo!XY~9m$S&gP1AnS(cp2}v$L~!7IM&&f6m?$ zHzNPYZwk&MTfdhD0Lu86 zH>}wkTg+M~q_x{+t4&d)Pgg_J+dXg3uVGtYvQSQV^0E#adK;pm(xk;pfL=}F=2 z;wee|uPg$9o1LYEh>P&AWW(q4`0?oO&iR_-^XWh~S_6mC9%xlAoySSFDPU=ar2mw( zwzl@~?_G}(S-X>lb$;2g#{2LGC#rXiiMq*Aj$9f>!z4Wx_WEwYu%zw8K{_W4joC0K zSBZ2wlW0Le+#SxU45vc2zkw1^r?G_F!p^8S71tC}{;9@;*?L8I_i>E}!C&5TE$bkP z-7VgFoSrcY^XK64Y!PQ1@Ou*|9{`hx08`j=#UIYs+bVB|XR56856W>j-FChsvvcS4 zNhV_wc6|7}xB`o5?*p8@)gnYl%sBhbjg9cX)n4L<4)zv7OFuuo^bl}8040-MJr?!) zLWl3Rep=+Jc0nFsPxhLNrPipM(p#u9&ipoipa1){G61JdUc3I;dFyO_QTDgNdm>5S zeI%RHr!^AG2P?a97QR=ZoSG|@-_(x#^;Nd6az@%ZU(Y!&HZ5-*B&V0wy|$boDROT8 zXk_T%T5+(HR_nu0M(5^)p|V#@*ac)zXVql}=kGe25HjaBm@X~bpYRK%^L7!e>4M)G zh2k=u3xirKQ$V`JSCnHC0qt05Yk2skROjzLPsyUq6gi!@@vjjkG*}?$c{y#viu$%U zWNlkNP#fZm7Rg@!qrW+5Otwd_C3~j@9}CtQ*8A`*eQ08O8hIX$$9m(6yTIEd>&)HT zRp3Uo7QcRthI9ufyyuj=V`A~)jl#tvvG$43{!*fvCeD1HmFN~Ag)=0-BBrDH+{)Pa z>S!8Es#QaR77#Kx0w@m$C~kokbUt>FYO`A&p$U3p8N&rl3$TWv^`T}-sCj0 zfRp;WUfa3lo8>v>EAPh301iGODy{(+j{TTV3!duF z)LMSPQv%V#FAD-&B~?}1nda`BTU*lA-X{h+a!8zEzfS>IYxH{Mo)($FWR8g;+;j2K z?tDu|4%NSWOwRZ5W9#5wU(Njj3aegdChwA$tINq{shUZvT|9TazkLFh_uDDG5gBs4RW~a@TGV)@GjhJZzLvnr ziUr??I18)y?bNX_v)<UfK1XxGXc5_{af(Dym#TbgXe?>oUEXm8AS>fG5%u?Xy zUN`vkou;VM3ygiWnR&KBWNMuV{Kc8ez|Rz^u44C{ z2up?axrnn8#mevNszPkrBuGhQF_T-LZLaSzn(a9VEgpIGiB9I#rTM1Z+pV5#hyWLuOHO^Y5f#?af<1FT0He%m47}aYLuao_)o4VAm}k z09Y^d=IWWgv~5$ghAV7$AYk~ZfbGIEnbJSK4eF&Lfp$uc(aF3;EwOs62{P#xDLG8h zs%<?F ze}$~48X~YsZXH7<_A)XuNc@N{W`Ee()6cFVS=!YW3!t*-g30p~QmP-2mgO zT)9v4xj<4khq53)^)I>`=oee5|B%{ij6)Fgq5{^dQSx5>-;%3%mfPI)B1aQLKfTU5 zvEXOrd9>~9aF~O7O3uO?)1cqj%fTHyhIENioA5qdHTNh7vGoaFBvf1lElXBQy$k78 zra-8n0L%qQ`Abn|RK#l~0#UUd$_od7{Y>kqc z-}S00MH-fb@z4YBg2ENv-~DY+GOjaW5U@|mL=a$MBreSY{HT{B`MQcc0fPRr7xH%He3uYTl<`MqsZ5aPI#v4k-Il;byAp0HH(qSdK- zy`jTGMv(MZ1rsncZ{J_wyP$%0_wZ2X_>!%hI3-YL`%~2J%^wSW#fY37Cc5uZY0CB2 z;Q3q)OqVW+O^Uv_pl-}zn3)58{^y|;@$sUl0MFT$_;X+6#r77ipaA*ORYl6FE2c7! zmcN`5C>y!pK(9Wmej3ty|6mn9fq{SzFahwF4NP&yuFX`jNgh*Jr~MIYC#c($ktS(v z-h&p|T3s&{*H$s3K*|gX3zA;k5Qks4n>8r5PR6CssuRM`(XH37E-X~y!zGGUF5WRY zAUQ9&n+OImpm`4RZleNeJqjSv8I1SR&8MuSx(YqNwNKcQb&?(&Pt1r&gx8X7>1-p^ z8KT8ey1MmDk4ub#!%=96m6%p-e>LmCkO2DChA+a-GZ9QghX|nbb*n$+a@t zw`?a0wVbZr?2wrnO3z`Au>mWE!QgSU3i~d-uxAi02*tWwZhW(HF;@?{vb3~6f|Zx> zS{aE#?hZ8S`Lz)%9EP@*R5i)9RaJzUZNU?7gBNQr7GBd1KA9`DV0p2f`jb^h5F7=hNeEfz$E^i(X{1 z`)*_-`C! zN6gBB##i<>?ER6}$OZW3O@0(?ttxIN=J2MmRZKB4*1$Zui$2 z6q}v%l@5c4gKO~$*S_HY<_#8~OOzutUE8z*nr~+EDP1%J9q(ht<%I>P_i`l-ATk4g z?%su195A5E5+AKkb;H=D8m`)-^GvEd!82S%mdzhU(6VmzVV6wUOoGYH6Wt@9(~we6 z6cr1`hD&@2J7BVwFGVXjKy`I-4j2J0_!lp)rBkZcnOP z)Pm(vPZXEJf??k2)q+eNJ!o9w$>!^9g-qqQ_dOJgy*AGX2XlSopSutk{58t+MJma? zb8xJqJ1SyZk|h^csi@c!sP0{4n{WYM{new-ps?2Kq^GQbo&E!g#(+SW)ZALzaKXGB zY=gu^l4FzWXQ6pn#gtiQcW=DIEIi_(6t(q1zsPlb75Mzz2bxwO`)<9h|G?uX-6o*m9VC)aaBt9UJ=rE!*R(+4O1oO9So;0ZRg#&R53H3)=@Yohs# z1(kTe@1;xha^IzTU^*nBElTDF0->WrzEHNrH6+O0>JhHlOts!2?c5Aba#yv)ZTbcf zX0kKKx`a20(KUig(Ai3FOU%|a%nz7Z_h*ZQ41TbqEHZTN3a?*Xpdk*mpa0f*M9+mZ zP}iT3ArLytcApYKfj|@$)yf6rzZb`9>L3TBmgb>LZM#3Kg8kc7>bsf3>q*{Pl0##JwtHlHE_N*AkIAT)3y?1#uETjcp^4@a zC)q43bAn(V27@9puGg`_$W`lga>r!gr^`G}B5A8}?~7rUm{u4@=B-S>j5VQ@n3#hV z)4VBJR$NQ1*`e@GAdS*VPA)E3oYWjskDIL;_R0^T0Pmg~s9C9ng~G^K|r1WiYeXLM4VE1O*`4iNn9yHWzBb!l=F4ir-dkL_KT0PPsiKL=lG?>hpQl&W@#Bfi0TR zuUnIM$SW8UrVdRoGho~QP8byAp>igpqj&>gggShE8;6}ts@JduzVRU0LRn3jUHCTP zzN1PHaCXnzA*_io#=+!(%m46pwz{m=aRreD^=Y_h_Bf-bE+&c!}tpv=uw)T3(La`5j@QBLtb8EyIu ztG>K_sL^_;Ltf*cevKaQUHQ&HY0(jOr^Lk)&#(lN7a8nAOk?q5_n;OMEbkc$(Xpy@ zq*u5&8}o{Or>uWye@}{OB2<0bG$AA;T*agst?ZjB=S=HKG~Pc}m!O&ucsLy!FT4D^ zu_05Djg~!n*X=1{J$E|$r?LD8Tu>gKlYo38Hp}c)FltI zdIN{l%GGP0(mOF?^Dx+b(gZnT+W;jfU#>do?_t1yxXz#J4H@kcSym+ZMuaf-36nVI zvO-hF)v~T*g{0+4oB;~m09CTQuH~S5JWM?}!Nn-cLqitI*|%x6G;RbVds_Uky7>>U zT`ofxofL#eUg~5`T`#0VS-1YIA}`~-!iy`MLREI^xe0%fIn*T`jtOATkO{^xYJ!}z zif`#|jZv>sE|KA%Wl+pWe=*C{9tBVm&^0EitOcRvon%v!`2BQnL<(>0;}{EZYVqZ3dGx)6Kemas@7*ipont@2RNd z6WJm!7o1y-GjXv_VnrAEqGi%PAw$qZ$$A5959Qg&=Jm}K-=bIRx;LMRW!5}gs356K zb#2Y$>fMCSZw7MC#4OYz#&OAfo83B%Y7gjRTz&ve3A?z@y4b{hP0xb0!CzQJ0Bn7- zzHAI?zlI)mM){9b`=AJ;tF95&hXOopk#8?OUH-6mY<0i3wu~c^wpOoLrIE@D=ji{( zKDk?(kTg5L$})mibH{LO=p={MKi4z!-^PJ+Wr6FKot8E=U=c;!%2Z$ruXm03H~&dV z?}nqQo6eNcRufwF(Xo|zSH@5^)~!*$*fx3F<*RI43jJ626-_!W3tk8{_TTQsjd~$g z37}yQxXp({2)q8(@@Pn zOrEwS9VGQ3ulUtk+ji3AFO8BP1>jKqa?ENj1tYoSkTURVTIp3Nbo^kxtk7G zmv%&LIg@>W5t>1Z=esrcRH!OiI^&9cE8zlerFABWlU>B+&0F(}P}#AvlBDcIWS9r8 zrSNJd_*h{|gNY=s)+9Sa?8hKgB%-h4s?Q6}{$iwaWmVhv+n(bkwffG(bQ~N56<10H zt?9bn3<#g5$j9$r!EjOAhWQ#Jm<~+zI+wNa2C>KH_9;4a`7~h$y@YdK^w2h6y^r$D45e;Mtwr+urd7?PPl@tE1ZfM^C4nC#B->QbKu(Ryg9jxDKQ zVyvc&FqrKYcl?DC=n!tP0v8=C=(!g0Pz1d-G+R$7We|ZM4)bl1#*j6l8%0#e-TN$O zf?k=2dJc_TyX&XlYaRN49GM9QhaG3ZF$u_iIW)-3I-5P8k}xc*7*n8kKVqtS>!}iH ze%~uG65pq?XPK2!y857EsC; zfHUafZYV$RXP+Vua``U&7zaCe8Cte871~F=RPT+b=aT6!Ytvt7`?ml45YeJZT8j>h za_2clw0koLM6C7#O0RELlC8s^lSNv$Pj66pR_JTm{B8T6``4yV6v8EPiJu1$f*so* zO@z}HG*^8@MqXNyg#L|Hqny|@_gW%{_<35RD^IY3PsO6^t#jbeKbjaM&X&^w~ zD!lYiJ6AfuZ(MGw#HKsNr-9=1g4y7oh)lEpz!Gu5$U*ob0iG z{f^DJamL=|m6l>cZPg&&U`SOGBku3zM#C_UbFfV)x{W@lb%j78{@C|sWCK1W=B=|! zK>D(HrPl{Kb>jL^j3m;cnEstSuUv8UOGvSP2y-_mGJ)7|nzo*092B@^n%EeGDl_o2 zk83;i>z>!`p)F#+Jv~iWNO^hq%C@1^A3~{>fAS$48>kz~~%i7+3Hri4ohD{@E23KK1FXae^pGpP7kZ4*$8j zl1rh~H*G!&Axz5W_D=lneZB&l+U`Z7V#RoV6q?fW90(=l?cp@laXxaa=g7UwW$bQk zlRe>gT_iJ}|KhPA`3y3tW<=Wfa2yXdu(-E~duNn^O^Dz-Ae_v=nBxsP&YKoZ(%W{K zo8vdaL4i;z&&``HW~?=w0?cQPQRWj^hFdMwP8K!44pDiYPEhum{o{Cg4N3Wafz~*) z{ifgKr?YN}zZND7xOJRPdCqPn&DSn6^6x7onyFVc9X|G;)5WOo)opv|?Rms1u~8U7 z7<*m%x?K)u>hdgp^K(lB^biAg6czK#7T9VzI9OS)Zx(hBO|m6do!b{ToR!s1NN}y0 zwiXawDAMDg`G+dbzEzQlQg6$Eq3s7(|Bj3#fdj=&eP%k4B=vYSaYN4uZ2UypRA@=U z(lQzke6+yKzmuyH5lnEYY9F= z1LB_jTUhMXOy}jj(ZQp?w2a`dK2Rz&Ag`1san|{j_&M&V(59A{n@=_aqaRGC$C;ip zW#(QP+{g&=bDBu)k)8Ouio_Jlc;7I|Qr{;T7yna`oZ?=+?VM|bKfLnr>WwCDvUo;n z-JSEhCcay5CT=>{M$0kt|9J8F9})`-<>@<$UWl%Nx9N%<6>S*EOE-Juj*gXZQ+hS8 zdA4M5t}Y1~i@Hb|&Sl_7RSupP0d)x1;@Dh+^D)Omn`vGfk z92m8)g@2%94h#BPe|{G68|!bYTP)tSlRDSx$rvQnHW7+kP}iB)FsTTYcn*QW0=!DbR)h_ zfVZ9VVl`RLtls+DYA~#-$Q50p04pETr1jzt*{+TWILOXGUcH;bIf zhdXS^XY5B?-rf7Zz&i-D5-UU1KAW@ci70$TmECz7Xuez9xA6 zF{CA!*DyZu$qy#3gJ4ANz<+!EqFGI2jP>@}cRk`=B$s^PSf2@(fiDZn&wvMCZy&kj zU-%#U_xUl?$okf|!GNo&x==+)RwqYC6Q98_i%0{%!)2ZXu%izCtqV=c(nuh_u4B_o zoE$r^^nwCY(OW32n1q`_cS@rYZf1!|(yrl4OkBQx?f&F+%s4if1Ge=V94+QJA&{JI zCqI3Bk#<+EKKAxCN<}Z^YYNShcaF!76pw7hqzJO94s!?oHo* zcQ6gCyRVo1(-byV>1ntXF!jaERkA)pi>)4|;QCvGa6(O*IS_U*NH=Mi1f zzG>@^9d5m|OU4|l81YJ`!vUG=J7B_(RUzyZ7K&VaPwYg(mOGrQ*M6NjcI;U6gR2)p z&z?O?`Ds?Q3D`EP9iksL%}eFw7_#j9a_iG)6v(ebAYUFlCz!scU9yvzoEn2;PXcGD zLnl!JwbO1^@D&ui(qkyK0L~*N-s`CrktY0HNYXPmrO0!oZTfwp+dX6Xi%a9aGi`^K z5;6}W0CLWx@BU-;884IraOnE_@bVj(6v@(|X3|A&uSI>yxDPEGS>1;VTU#7@M3(fc z%Yz%Q5;7w32+@>2C=whS9ylx=X?ks8+sWta{(l^lC!shee^KaKd*lg(6WlYwhIsV4 zm_WDYs{Y!1)9ZdH2Bw%~7Hu$iNcp9h(z-?y0ksCCvCL;E8w7j8*!*f5>`!SL^hhr* zl`C{sZPUrD6$lw-#~)IpuMn9vCv+k%IFmm?ln`Z@ffz#(|@l&9p7I99(jpP?JeD*0=^W#^W>TN?OWJ_r(~5;D{hJUp|A zA$7?t+`h2f1wM8fN`xfm1qg-9crIn(_&_!NZC%Du!f;cqo}tyP#OgJ^fN?n#wtcQn z!eQ%<(yWBKb^?#!S&uea^#rkUTzzdjIqOzVOw@6D3J`Qb4GC}U?&KU{`Y7afY<9Tv z7@>E(BLZ-_1Rjo2p{cW29H8Qgw6%1r0eXL8q|JaI@4e9l{$H$zdC^Cv2vY=o&BFdoooie5Go&7K%IpdByjHahuj@ht{c7p!5nb{7Pz?0|_{7za;JD6HiJf*Z8gT+-3mJu0YW@V3g zxq8o?pm$CwE-vPwWu6d0;M=-XI7|rGqYyju#z;0nFrardEKpzH#To`s71kkYpVc17 z3;q%H@SZqFQ3Zh+uPvAqF0pFc={YY%)a4>(C#0_5Y8% z1Vzg23_y{TfHg#mYT-}s(lg#HAA^MGsO+H<7MlUs)BvKS9IMs z9`b@eg#r&;jss~2-D2xrXzSdUu%M6O*>yQ~_`Jd>GYZST%@AmZ|1Na-WRL4Zi?!u` zIus4K`gP?xAB6@({_oh3m;j%MP@ZvxFn;qst(;DO3FUT5`7D2Y4tv15l1 zQ_sN{I7|SU;-%N9fLqK{_kL2zucZt6XOHFHiO5<2M;&|ZuQx_<-HX>^`o$e7IaxaF zRJB|>?72E-5`o9yYH`URd=8Q|QsB^Co$VMs(~9*57KG1iJQnU-P(*wBLKF_^Pz9}W zrlJ%`y?SQqHLjx`{cMshoXa~bPUR_?nOG`?-Mb6*Qf{+;%l2kfdkeY69n~%qzmNeS z+=B)up!;t$^K$qu3DMoK_0jF^>Dd}Y!*<$4(EB@ODB|=d%|2f#gFOAhNfc=jwX=#b ziyn+rAnl?9NSkihj!V%XqXN>@o6BXGTcjQ8m@6Pvf)#|Vhx-$DbS*aO!x=Gto9$=? za&^c)35N;*j74!8k42DMQTweHQF5h4Xu}HE8L({b?PC41q}{1?Z@-xb^=Po~Sbr@@ z{+aFmVg!`|ay}c=H<8uC{Y_w}VagPpgPB&k&%Zfw<_&@aEV0CxciNH!2ob;f#kbpK z4+2esHCs>Wo}ozF$bij6%x7sIXJ_ZNiY>VB3VxhQ!JCA~MtR2TuJrmn$mAfpxSn=jsU(!ng z8E`o{Ir17Ud2ORruX2Do0$E7#Y6X0=W(P=eb4ST;fZ>8_n~0DfB_$>xZkCzsITXnz0}mkKmBJbPiHl|m zTb=ivLGnN74C4wYtQxKK(3D+Q41!$)V5T?TNYnH6CFtszY}evyoC!P2f~bAh*(OT4 z<5DpiF6*;_gl*??kk*0=_4&7Z!K!N}OK)%Yn`u_%mXvI7BFOvMnQ%~W(pR-ox%l(- zG1XXpDVOm(=cQpApAfP@3M~o;G{N_20b2x%*YZ$|^aKmYRR5vZOoHvrE0FQ%PmCf8 z>DWD&v7sR-z$F}9uBoX3g5-U>nHuN}a1E4~WrDgM1Zf^2j8VF)Ko~^B{Wh9W_(W8* z-~8SpQepW=x8n4CCgR*istW7NKbi8|*+3RyAT>xUyLRWpcDzCW31p5L`1RMSFvMHz zQC=P%`9@`+&jl>3tg@hL0A$cPyvL8|)=Ym?O-M}a&o{yqBZ&NqItG|sFAyOGvawZA zwF2GhQX$WP`m!FcIG&5AM?qOl-O;>~#eO7t5y<98tIPCEzsyJ*abP79us(Miv~|tA zCr;2wEo7yE!YHq9bqN8(A9G9-hA%r`!d?6>79e@?+ zsb~EKCP0Fxc9w@xYe9mnvfeHL`(EJad0^^RfHVOuEa3R7TSI1uj0&GCfo%$F-2vt>}!SrWs z4Z7&uf=WB$-gdu<*C-g5{9ad7EUERA@vtIVcC!sg%_tDQGGHAF8`)(7NPg(e+TD6V zc>v{pvj8FmRjmSL?(Xj1aIejF3DoXnIOTe)AgUUa?M|P)OPX>f?>Ot_?~#YAaQZnI z1;{vUNBmR)x9g2~>F8McXj|L9KC>7#9Rgp=HPt+!UmQ%O!eLIiP18jl@!#(kwq28X zeyjUKYg31-jO2=I*p!-8kdtk0tIcdUv?N(e?NN!g2-C;@LAgW@Z4{ z#pPx7v@T2WYn#8`zIl_8k-^2q)rX*&{K8@V_6rc!&dv|_1RO#GU2JS@+}(S+y6DL8 ztY_VR@@Aap+uGVdc_Vorug%Y}>0J%Zist6#4%BjW-5}srso#A0^2J;@J|Q9DqvKzj zA6~0t>gwt2;oY~2G&f47k4(IucjEqyiPz@39-o2w#^F%~^3=&S;nyHg| zTlc-J4Bg(I93PKgpHk7*rq`&k5lw)@$M*OA9zX5^yVv)736g1(HTpX{wY0Ta*x4h) z!Y0?ff&TyW>65Om?!A=n1qB+M=f4j+0Ob??K*!j4AByTyFf&7(cFJZHo>C6{P+BT(`rgIXHajCj z*|mD^(c`_1abr!*s5ba+*oxS~_gQtzn z^@ksU);n?Hgc?ux(2$`kuat?2iMo1wXef1#qU&dV4{DtdjdWh&#G$o3%S&~2b(mWJ z@W@D0+e^(c4l#k>D=YWv-cs>1s9wLg;a!dD!_@ee1qZ8GT3#j5JSGk$S^}`R7V&R? zFsGtrpLVTa@s`XUe4Cw}-O7@V z6XELWdiCa%vBs6|?(W@(@c8%?k~C*vLt`WTg$rP3HgRzvamyc*rFjz47*4qG)32q4e2#$ChC z=fB}RB_<{YK+YU7ySP}DZFH0?5R?qfxl6C?#5{L)My95|;ee|P-@g4JE-q6`Jmma^ z(?M7?0tMaX`_ybH91nxRydOFF_*8%jEBJBmy)E17q&9>?fQ=~gN~f8={s-&x^FYu5 z0FX!|P)q0t&5+j(+UxTlM<&kz2B^(;;BvXxWHX2fOqZu4tRIr%dU)ySq)r1xv0* z>A~ltm}_26DT8NZV^oxtQOmu8)jGrMK zjhza>zmJO2)6+xw;e|y+HaD?oKrb{jG|HSYro{8MwzhCM+`zy9fC^}S@2k+qk00N; z^9uMiKy?Pwa(shoAGo4F&4B*I?*>*Gz$pi&&}DmxoyVAGGt$mZnpx; zoDcfv@82gTCZpilzw=uoBgSTCn3&0i-WwOw!A2$CzP<`R8;U9_Sdh%1p`kf`w;DJy zfIgi(c`_|6jfsgV%(RIQ=);&8UBIvpnlkb5DADKFP*dC5*{OA%343srkDvcfq5Y#r zEx;E7pl4=b86Fy%woT#;nNiR0x&H-$2mnFOzP`R6KYq|uh~B^ddu?s)-Mf?Lg45=# zbsucunk`s@9B-xtFDqECj@4Yba^>nnV0M5|gP91ep9FAq-u>{PxvsJ2-1d>SgHo1vkhz$V5RH)~S^ zCpBHm-^ghA+qZAP(3F=;Dn*^3PI<1Qqch-88XwQ}@S~qRs-#30KBM1f(JmMGXnb`w zN+ou9VBq-4ldh6U8yl{8g>%%DqykW_Z!TQ85EdQ|Mr&+rTmT9NL0#U&#IqOhSEqNfgTY|>`eHdlii(7*D>C;v4=br4Mjt5bJ1QzZK3?m(AK*z11speMADpTy zh5TzD(t1PW$_QWXK}?_WLM`D32ZdhXt9jy^z=Lur@V)fL|GNCd?q2zzjA-7GhaVrw z+;-J95JyWuCovtX>Nt6RX{Fjl#tKcA9kH2i9v8D$uwySv-d)052r3mzrwO<`dn z!-EIaE^H`PxqFGFC@6MB5_oI|w~;@r3CNT}(Zxg!hJPThVQC3*jQ@EFANzlJyC#q2 ze|-eSF5*jcbhgQ#!SpC>Y#baM5&Gb`ID+{2I08a3Mg|5;3(Ko7DdPX!)dfBo+8ml)^A z#$y1ld7}aHsO)=qZca5kBItOF42PmZ{`}c zSha*psFI_I>t%oXG&!nqx*PORN1VkUq3d~^a*K+)P)c_r%M-8K;*#~>$@Yx*q;p8!@Zbf5lTnh!DpRx5+OnTgX?=EGQ_buC7ijMXu*QCm$aJ z#!^SrP933n-m|LnjUj-a0mz_b(vl|nF*(tW@p177+F}( z^rX6mSZJtl<7HxFd*Z&MPfniP*(n(u^X3gQR9aj8U0wOEEy+UWT6~=^ zLk66;EW?)tQ6VnGi!JT!wtxL{faQko&lGWIXJRVIvl$ODCbP7$>0fjxHELD*bp0}& zi6}fH<6dZotg)5d6?yshn4=v|umCQmg@&B;-|f6MEen>0_ni0G;v7TXgN5)w-X@1mx+ zN9!y7aG>;$8CP}98e9ML=@SD3gQKIP-9_#RdTe5%rkWZLA79kFcck}N_gh=uzklCa z5p6oW*RfJ-vH2xk2sd~qK?e$?03fBfXh`QL33ucNg*`J|%a;%}Xu<&-?45?_b2pTZ-n>grOE zlM7k&5#72KWYQ5*p+DY;A3=c*cCIRYy@#QC9XX3^OfFA6~?;d6wBLDh}9}WO?vj zaC)NMy%&zB^5g(&Z2tQ|L ztH!%IT*Q^EfE)VMjRih^^_K9VHml~dXV297T%4UZr^+(J!~6aWWtJH8q zc=}Yz<_!-&KRYX{IVYLT3T8sJ9Fo7S6p1&`w5(@)-TfpcCg#J34~(Li z@4gZuxCI1Awaye1($e4#76)H4GUnf4kqS}`uJp!37>W5^kP#8NTwh)OE)9x}9m#$g z3e)T1;o<691K9E9%a@Rl?q=^3rF3D9=g)_K65}OZTwHiUKqqtGrd!$AnE5)^w-CfL zAK4(5R^=y{{UD0CR$((LB}ErPJ>u~ZjReFNKp6s&lgDy!E57&p&=3a;iy0@GrKRQi z`Z|LD>TXjDj*!B=)P2I}OYaYIpXqSXxgR)_;W0{tn|x~JG=5px#ZTv$tby%)tZ zLki;e*?JrmHbeXEWyhk438)ko0$h9c2&16qD&nmC4KxwAWflwTqlAS~t~?sucOg1p zIthc?diwgDTwIQhk1eWx01Oa({_42gt)ru}JyXLXDmp(o>Gq@2g2Slg;&gu*W;9dO zcjjxraA#-d&!76Vh~bfuvp<>sK0ZD>KkIpnzXrT#(Hi`~MbF7u{+bwIFypajWlX@{ zNu9%DU{21`C&knZG5CS7s!3_wGC7T&D}ys90=lYP9q$Kdk@3X)@5V#~X_lphg^-8{>=yl}Pw53}M~srZyu2WAGXUMm4Jjxo z7wVn!eb4_!M@Pf66J>`W#&P|;AZTIepHQ7HEQE!HH8nJ1Nkt?X>FD-P_sv{gk0CSw zJAVK9lMkuq;lozHORwMGlL6!R_xBYaT@STq(j34p)@PsU=m^@nw6M2dDAp=lz{A_v z+%zL|gJA&HmKrp^w6+Fh?4O#d^}oInao_RTUwTtkR;KNx2wCs7dz)c3j^A7NqA9r? ziNJ8e4iV>1t`Co9&H77?FI{Zd2fKn6RM=a)4*LC_EzB(}uIn;_Th(kL(0c9V0lq3} z+BiaQ^Isfq4`&DEaG3SO?^pL5ToJBUW4i&^!dZ6C^(zKCz4ndIMq(SO zPjV<!v;vXkQNW^vxfX zBJfQBUn51r9(%taoZxdWU%rf!hcpB!LQg}3VP@9s>f-FhU>aR++Z{s2i{mMyRDL^5 zTwEn(<&%>W($8^-4~OKUKBv9$4|~N+?H5`US)JF0vy+pNGmysfLWz(iITm?2!ag0z zm4Po6^E{B$(fKhprlzQ92YdKt(A6xFp-+!#1%(G);rgrjrh4<3Qxx@Bb*TuF__qFgH$)I#$*O^xT>l&LW0EiGA%5J?D02i2C zfsbF|xqsF>fBW`L=F}4S6VNObO-;tKMZgEY&M^GriK2Bt3la*789)gho+?O$0+;7a zQe+fve&;)izBWQsN(cl3aJ`o{=CK+Dr*Xj7_4oi-b8-s)wfA;)(x|}*#&^~aWwvy_ z#{Ls+HFd>7V8{*+FEXS_Sh@-@`>{*jT`(o08u5=#p8MpOuSdWuN8PAiHT*tb@P{9h zA>^otb4Yx)3oX7l7Z?+tii-a2Ep{LiTb?Os6<`{^5KPCLQ?Q}(^72wub;ZTM0&L+U zU~Em^C$DT8n@~3hsi~V^4Bexlq2Xp!P*yeqBy4cqM8lzYfUsU%T)c&bO$I4y!T&l6 z&+B+Y!_Dn)fl4kW7S^Bd$yN3Xq6`dqfR6_CP8M6!73AdP{Ye}T-Ff->krNqk9hkJVt0J4gy{AXupIONc~f6sPfkYm6L#I?XFVWH=TCBtOk2-a6LY1bmTp^Xb?se0ECl;Ot>pHSM*qRvl}#2+b?AJdjh}hwO7J#LC40%hIr1; z$x&TEgG~)vn2VDWPxaYhb6-NPa`{R9&oke;D)0NjVWR$yNk=l=E*IlitU|4?-&7w6 zASKS(^6}s8S+#s6R|vQ~n+H8WeTIh0D!d0W#agSY$45r?VP@nLS=T3uN$b5*4EXHqhlz`^_E}%`GZL;lg>OSRlpt+AO}!=fDBj=z+YHc z_A@>G%qEWd^r*;Ay&-8Aa^KA8i60i~hG^@B*LB`k_=yMPbis-5mML6LD=sv+6MMx4 zqrE8bDpjqvAIW+0In^#(au2^9ws$O4q%rk4p}8CTAu3MHjCf+r-k|*%r5)y1HRlmY zEK~KnJ4?Al`?#h<-@pHCbmxd(4hac?WyHq7I9<5DBE=tByVn4;?a`x0Iy$CS-P@C& zQ)_G80kR>rA0HooizFX|dC;k{jKw#A1P&0wsM`xH3{tqcF#VoPSa^7jYN4p8C@|Nq zt}gfqum(}Ti&OX{U?GLxc#%eNBCF2Q(vqsa{?_uc^W{I+E1d9%h~C=d=;%S9-5%Le zrlv~(YQYKLjX8f0rZ)nPLP!oyC$Yn5NvokXXB!AaNf^3QZu=V!z2s$nWg9h>) zQbukvdHdl!f#9YG=igcHKYmkXf@)#IbX6J6ONQXxOx^2=r3dN&e1O2tT}rA8o*FcK ziC!(cnApPL;NaBM)Xa=-@ci-TaA1l66hT2x4GrfZf|!|^Tl_A=@$QSv#pLc7wfb%U z{vCq1F_u5H^`j~%F!1W6^;-7XGY@ZXtZN;u=g+l4f5V1BO&m($lSd!|n}VmP64~^? zU=V>3JB>d(*b@l=fpK_Yf%P6raMzAUQ zS-H6@2NzZK*#)?{oq%W6#A{-;tvda%<&R$0XRocSR8>9DoAL(~5)o;<_rwcmI<=_J zhsP6EjOK#>`d_)?NOlK9;3>Yn;|beF_squ%VlXZ-@t&C9<2MMT!F1MC|GGPha;nBg z3oJxnx&Q=czXwuVv%PpJK37+(tEoA!kLH1_Aq#1SBm@##1SVYAbt4R)9=`HHB3JOr zl!}VV$Y;IUlFy$bA|f2A1h}~B9hcF5U_8<_o%rPM&3jTD>HE36v}L&tN5-i5ELQ^2 z`h>aU!Xi4^^7A~9Wu=VANMs4&{V?^#VG+R?FJwRe_+SSf45TxXg4j&4-@g3@zz&y2 zv?(j=7vv%UEsSiKe3)G_GO{)BxE_1pb(F(KmzR|V9NYq+qZW3-z`~k^{U&yOakw)l zqO7c}r8Ncm&F^&21X2q&+EZEC-hlx-SSwg_bX+RhvdJf2M?FJBLqM*2de(r&nxm(I z9I*RYH`3R~{N%~ykE$2u$Gm)eCtE+pVBXMz7MGXl&3XO4MN`A@Js&xEw*KaMF^G+c zIn(6Hb1iEI5s{cU+4+_bHXc)xS`Hq#ZJ_u8@?U+*pkG13v9Ym%MZ8)SjE)!jyJ2o= z>2`7Ic+gw{as-){1rqjq>wR49$aS9 zU=9I}K^6jWqxo4EWJ_5>0#T)g&PoRt@7DK4hmACcKqFYu4s_Yc@o@|naz!Pj46tNM zbgFYellLJT_0XxnpVe8jB*jIP~fo*~ip(_D$*=O*OsTq~S${Vc7I_(-E^F~B;3 z`P}bbgb?3?P0C@|ROffu06u_cxI*s87rR+E;L~6M-9|%$55E5?2wn|<@Jgct@Qb## zHuwcW@P9WZialx80f``jz>(X7*n|nDP5ojMpOo~+_nxYn+KcZWVj)4f?;4_`qeIfE ztE($i%XizHWMgNKp2D&?S{rF9GX~>>P45fb;TNoSvDWnmna+`s*eRw5EG(N~27rcw zxqx6#XfnQ|n-7>_Z*LDw+Ud&&uv39AHa0dM{tM;p1WfKN%}`*3Uq}UpM>stPZ~))h z-E9fD6SZN(W!{4amg#|;y81Y*i>HC&{rmUbwx$=iwiMjDf#m~_TcJTD#_Xy29bR1c zR8o?i332oC+IsNm@;rJ}`1LE&7U64VVqsySbEcD&lnirlD1-Vf)-R^+;+24OG>SeT+rbcYyuKC-SMOEc>~OVGfhoR zb#))E36yzydwc6)UtL|EZ*OmVrZ=QEdI32GvlBEh(AV1B+-0ErfcMSK&A^fy;ilYD zztWq5+0B9Rtf5f@cWAPD9z47QMjenGh*em)`Gqd9Y&tvlb_|=nG$8A=wMm>> zEd2I+|7dEt-g4u#hGyiZMDF87qOTaRTAT+@IeqaxgylXCAfKXpw-#R=v7|eLm zXwjbtP&a19>ohzJ0XSP@BLMawyvwFvH@xPJ-r5#~-q_IaYP#G6V0Xo1Jzd0Il_?>X zUS0bRQsOH z10uA+`44U~OSFECc`pG)6l0TpRS%#tWG#FmqH)M0keLq;>}zeN24`kcZ0ifvKq>_V zbpQnM@$uE`?_8dr^eVBVp`pQE2lxQ~VjdI~7dHyue(Tn)^ON1ol$1UjcP>7@W|#H2 zw{PDD2Y2o-f1?rgv9hpm1)Boc9_IS`oFuRc(2U7kW+BDJn-Hr4_VZgC8^UJYk)po; zcsC?|*!~6oNZ4&l5N1Wl`8TY=)@*H=3V!3-4Z7PhvwxhTYFg)f5AV#91st*`AM-zG z;gG2)boH^fB+mMI#&f+5E zR$1w{k0C9C^L9~fJw`xCSZg<{c|NrY+7O_>2~Y!k!ZT-baOW}~dvb$=2;T_vgori; zY=nA}2&hd6fkxL&OIurgZ%P4yT3BgnpL7OGQHrozT)^*tw{Q#Ua9Tu|`rOAnC6 za&1-(jS0Z1Nu6g<(b=}7!tR(XH4w3z;RUk}7`1XLf7JK3XLzVVZFPY9Kt8~@VrO7* zg&2n7#PQaT_^l=X)jneE4p_Z47hxS+aNogE>h*{_Nxk&OLp3oqRb9}<_u?TyZL?7* z0PhF99AHHN=`zuh_hn)PitHcC>gvu64k{TLW!46}ud5pw`FBT>-{*ZHB`qCCezUKy z4`4tkP0$f6Y-N&S6&(NsdCV`Dr50w=IAV2mxT#zsd)SyX5P z{psuN^*lRZ0FC0YfB(H4Lz&i+pdWBJD4fc?yT?Tqd31F2^XE@6++vd^nwp!z{>@BI z?ltG`@9+0aeiRrO2(CG7kH5e{;4fw-CT*~(A(}Zjc7Yi*#hSSY8>pzn4p_=aN`kb- zOfL8W_onmxa>n=I$pMf^X{auMLWfEbq#Jns5A3v+B5)s!z+dT&V^CDERY`@N35B$t zel8j@zv?evz)>!R3upv*mp562158%1JfejRICJhSdbjq;RFa7(99{@QdFfs}XOno9BKma5? zq@v=to&NRvHwh)BHS%8d0~^}~e7e28X~-~f4Dwf3=eys(e-A>xOMn{t{=F*8OD`M_YK5BJZ zm4lkxyLUqXwNR#kP>QAzo1f+eUhrZd#r0sN7mTXd!bK(`%qVGR7nd|Bvy_!_oYC1O zzz@>J{6%?rc^^J}C@6Re;0hUVbZSZrG7PyPkQ4qd-^D1-+QH}AhQtPN{G-m%3@Sbz z9)kWc3vLC)#bZ|0!i~|_UtV9&d+l_^t;5u(q5f?$3`6q^^a?%_PB#b z_fEoE`2=UXv*bwZtmOX^ec-mhB=_ZW`!+hNY8W%546=8?^01W3;>C+YRqexe&Z~Ei zllmF_N9y$1>u+4^&PM@Be>M9Bmk3`Vj0oO-&L4g8Lu8d4oy^c=+;#Uue&^Cx#Ac#z1264%B(M=q9&kYvtwSz}{V6 zTl4t!_4OyBE_-k&SF{PhVTDD3aq^3aU4u?C|1$)!flTlmi%8>OXKrkK9OejQ0QF-J z&L1w)rJqYn8E^5x4Bx$bmxZM`GBOgnP3Gl0W>q0I{rs7B{e&^*ca}87R4{JtnJZvxa5BrL3I+xUkM-qLKY$$(u%-~OntR))x~R)erU z(cj;D%%5GdSo!$}vDU`A1%K)dtZh6*Nv4?=zMHis(gAX>g;Ga-y^w#45lDhk*?P2$Csaf3NIM5FR)RKn-hJxuLJY^XcHr zld?vyW9I9UAh7OgWRl~}wmmwwJv~4EmJB-e zv^`LyBGAl)vT=ENImiZ(B=NUsd-u^+YKTD<;H!T2`FCUu-USyIS6o~iEG8HOTTm-R z>YbP4OjO?huq1nCh87(L(}bMClLlKAHX86y6EZi5i_=qNWhR3Esk@(F3qWISZEbwK znzVHHRGATYN64K3Vz8mUzPGP0T);rj_txu_QAx(X+@x%}2{AEyu&eL?>pID)53ZoHSOKI%JTBaJ_{&%014V{rFa(o(#_rdq4GB%1v$C7_HzxZ z>+3>JE6<>&3Pqc6hI1SEB$(3h0G5MkXBTJAmCB8Uh1Q@QK&;%lc{8|rnins*F;l^9 zRPNLL5*+#7ZyYU)(cFlJzE1Hc2?l}atu}4{kUb!<1;C|Bu1kk*P_9dMaaqU*<=XlDvGFXZx=(u z;iDs$%FsbjGfJ7F)P#g;3%3`5-+{Txu3v|2)B&|^UZ(3r9N!BDxU7N#^c#WlviT>m z?@<2}6b`kZ1MU6$h-$j@o8XA>nss9%)g95)!ooGsYUe+L452j(pocs%h?(CvfKCB1 z^ark$6)GVo^S*>f$Ez~wqP`8l=Ap3!_B6n8@6q`MvJ2tww%+SkzW3!7E()@mj z%bP%yLkGigjc4VLEqHV`w$H+Z#V=o4KlD>5un`-1OMo{>F1PmykM%TM(@U*olEU&k zlf=q2qT`?Qe2TAF_g0{NV~lVSJ#*ep`S4NMu9j8GnbSwGwxgqQ&nN?yJ*=#(wz12h z%>>jQ*xgisM4)Z}UId^`=E}Ozfr_->b*!?ITTD#M-~W1VZx8k@-$r}u-s15}7r|@0 z;CDU@sUIQSl+i-*aK0o!l3Nzs+1h&iavWG*5g<5FCQV>^VyO&x$U1d2wFqn~;0!j# z#sMbNkloYM(kMpX7b}5ioSd8lkQ*8pc;c~V48HP@yPw_merkhZ$-xio%PnTcNnrPR`Dakm_O6gU4@w^c(tCV58Op`ztA7r8~m~ zgLiBm9S@w6G8=#)YM&V3njo*>xKSrhg6e zD0qNSCW7&KdwYXrZ?Ljy1mrY=RAd4d4*@bG`5m zTmRf-D@GJIJ&J7b5^qvy7cTOrBrnJf=e9AhTmK}phlbOl(20i_k)58NM@2we0nV<{ zPfv#Fsp@p96yd#D_OeZiBqnwuOr#$GMILj;ukh`$RakL0-p3nKzaz9%RpXM9kOfbO zF$Dz$cEhHE{QPf?x(axmpcY`Do+2r!sRGQRO}^(ys|T!#o<=})7vW~ND()Y}p8+~n zQbSI5u8-CULrkFfO8ao=IXDzkQ~sC#_^y!`h?~JND5zqq)7}?t7xFpG*L`gs}nvl~&V@+qhl)}W%?*d2cL6MD#%-hna;1G#6WWazuput-D1fC6WH_ zTy7KD&zWw%=&|KL2UU0D#tlR_&VjR&ld!`tl(QKNb91O11GOs~Wb3^X40G-5>L9-N=pMk1<{jm`61rm7+=mFokXd+_bsL05d zCs!8S$wX;!@$qaENl0vuw<7r9sUc(n%**N1uL6Nd~WRBx2Yd)l~MI7s@!(MKnR;~Zl6 z&f?Ids>rySt6B)wFs!Gun;WD5mamTwL~I=tdc(pnpfv*oCGZSeU>)FrwNxS!rp-sfL(NsX?Q<1Mc0pg?6+(s|9V2qoV{j5&H!F$!+$u^VU+mLMNTt zzx<^kn?Sbke~LRKhJgN1b#-;K{N^)4KACUE+={%R9o9G%M;s&F|EgVxhrt9+(MCY$ zTsom(5>UZ=4i#WK&D&kg2Q^80HJLv!Cr~>03l?b)WlazlcNfzxe_3y7d3j8lf1r`A zEi1wT~V>3t0;-V#cQYr`K&Z>OtJ zxzK}w=|hTUOg)BP$nC8yk9Z-=7cZc5&1d$DT|A>Aw4efntZ?Q7HvkLT+skXzs`~qP z1$TG%*M5Is?>@w6pPWpj3h+a=KsHZ{zkdB1%n~e8_B2itgqPPp=$=V}IvtuT5DPLO zWyl;&CA0)qGBmjrpnUd#dXr^P3@T+=!*4J$$@4V=!7QY z5DE~Z5Nek2HJ}i826Ywmu&KT+o;B;e7~SV4uYnu5^{yZ)&-WH@C4Y4W&6u<5Xh#pW z)q@8QD9RV@yCB+1-?#dlL4z$w8jv~@6BFPsm?x%BmQ?JH1~^O1{uIDkS%0pn36;R6 z=x8O_j+T~;QPLn9)m2nv6%}#r+`)f#yK~iPj^8%JM(f1KSaCdz1VKR@JMzoRUtjO` zojVx4-6Gud1)p!Lyx`UDmGnE=?^ou0eZ;AuF#a^NfQQ1oVx-X97YlF%WjM(W@eT_ z+AA`J@}Mm4E)bY23-+CVh6~`K!}Yu5(=@am-lh`rafm#w8=e(gU5EOtu!7(w!0Dk0^W2R*Eq+=nW~m|$vhfEcZA&u5FGb5&gr=-uG{LP zj45WzHR}RU%6%MDryi5@nF>!LL+@q@3XLoP!l)c+=ud}m>pr)^N zIE+2_vk}V{H>S96RzDNmU3_VmTP}YLYVbl696Nfq`+uitB%lgFLtj zh>0YJeU_Dzb1-XJkE*C{XgFxhDe8aqGlui6k1u=)m|p(!+nt|OLUl56QopSHUI`8r z`#1(o$YvGVL7~|2k;9+tgPsAKs5j_P*lyiKp7jWL0AH}T!0!;VI&M8y%#3V9PfU)5 z+Oovp?SSPvNY#Tz4Unet<)5M6&ajD2%cGW9}EC-Tbiq$1xJ`Aq5g6j~ftljSH&BKHv)<-

Avv4J61n@zDMY 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�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%0Dkt&C)nrEm;HtpR<8i0@0QBlm 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%0D`R>46X-#8CL+GQ)oj8~W-Z{YRZ zr^nzk*^|b)#@-kBBmOxs&%&(dgMfZEpu?>LIF@L~z|;V#Ur&Vc5Oclan?*H3?`R8y z_8iF#4RvPZ-h`ZV_5C%u8PXFfYoI8gXEnXTFmfJ1OK(`O?nLzsr*w8}spd;BO$H6U zc=7D`S4^^uF&5;Ja?C4PJwepHPz7`+GLu|#GdgeA58``L9awsjY(B_5&cm+`5qd>#mI zNTR-$l^5+oPm533CRwmtkuT8)eeF|T9BS0HX}xgN6rz z+s>cQLSNjro@+Df^dv4u8E9P)U;iH$;C3s}&Ckz|OZi_qldVaH6j2OlxA-fJlb89t zcYNdQ&>6hnhI=jYlvKRJGO6XaXm=jvEG86FlzpmvV*yMT(zo=B;#SGLj2_o>;wgv);P!^0Wj2iw1QP>axxWm;eu zZK(*?CWp}1rURriV?MXBrvvS(vykAkFIRUB{_;2f<_Yi}TLNvV|GH3!2KYc?2W8~0|4#S$Mz7ALZ0i+OK5p64oGo}!(D-Z@&X`w_u99v=xG%ni(0tvX zq_;-zv$eVj!Lbsr6_mAggFAhwlN^~q@SFESrI4W&jxzP{GNTIwoD z?kbijWk!p{OitXJ9AjB@jJa82SqxGJ#4DtiJzbO5vf!6^eNT)aW$v=+IXv`XAxD8S z_<9xkXQ&;LfMG%tefzIDrL!-B2l-#qOsu~^DR;!g-rE2qd6{4D+JqNMn6aW0A8xuA zq93976By5hnTAEck{Q#SuH%J+`yQQr4ZoftX=-^-5e_3Vu_xEN1_s*Pb zf||}=sGrso%wL{lit9uSjsGjf1L3HA-yTs05)6DMKiJEG&>jg{8A6w`P>iS8#^imJ zw61Pr;03Nnr4>;{8N0{5YA!9p?k-U9?$qo_x3oT(t0{ug+1scD*?#-+tJ?&N?}=>M zNB&wI;4|GmUj`SyJZr7nJv;5d%5^64n-;gZ5c?Ma%S z&il82YRvp)+}g6K zd%M5qNJf>%M-c6CNfcme74?$p{4CaUB ze`|e?-rqs>CG|2Vr06;IHt44+?yFvO#O|ocS@)tsbg$q{%h_T)5J2i$sWz-icEruAd+Q?gizr9f z{@*zXrN(f_zU@tA+Rw!OHCu=YZdDwKp z?*&5hhpCB`PhT2x;64ZMSfp|GQfMf*o44}TG%-dh`QqaOv&_>JArN=3Q zz?;-qj^Mw?SRJTHhLL|ZU!9cD#N%1!%IcF?F0*)$dQ-DG+nKNQ@dPtA*Qn5p4I@!% z6>C5qpt0{amg{wOb;nsU(sXG61A*SaJI*u7(^o47(+UH62O)HQURF$?3U+bF%E#C~ zN;G(0*{M~@to>-T>34qbjRpqCCA#ZuVxJ*v9%Jr`S8N|}9-Zaf-V*{dQ?{Rd-HTG_ zz6#7XorL#cA^zlL9ylh);9Vq&;_#720V$kN+0=<)fN1gK6mp?j3n{OZs!wYG=~f_x zScfsvOCf-wn!g+@b`r2Ml?~TVOnN_9tZjvVr3S1;Z*#4 z7lrm6<m~PZ2KC1$_xKg-wHN4CZ@*5w zC$&ZH>jiXxOmJUdG4Z)8S3i*C3r@Qv!9 zhPF$`x;8nPuM>#QFSb~}kUm@BESs4h1iD(Wh70~_H(-9Q_(>>{-N+I5WD;KLck{{w zo1NDIjN$j>%<)=t2h|anUSuR*r6Vd)I^f5oS(5VSOKiJ38c<~cmGFxrfJi!kX^5!I zC!*W8Gk_5ob;ki(rw7sX--}G4S1uH592!QkqJO&J>xV;qztJAlM*cay^1c8RtU+-S-w?N=Oyq@OhFl3gj?!b~GLONt71Jkm@QD&(-@f zM4Rh#Mq9#Z0{w0ojPo`Fg6rEDF0FNaboG0?HkN!hqN%?n=A@>io=Ao{F;bw%1%8o^ zY~;ySK%@JMGK%z_{+!w4XFsA`EG9o9l73Cpx7Ba{PrRF_haIp}n6}ShL3-}zm0!Qs zxMxB>Qk|vdZqF3djwgQqY$acC=>6$V{K$}07L4{|pjE`u=!~tb2p($8vnx`XQ(Ij^ zE2-Sp_XZQItr*Xj9JAZ}&yj-IgnTzJqs`uT)}CFsgUf4he*9)_SLkZ`-A#HuC4bnY zde*=)pKl4aiJIQMLcu4r0u1!Jt=_nTrc=S=?Yb0QX!p%aV9m7NbNBJ{(12{4bLbK@ zs=7c!7h{f{MJL@rerRu{I62ll2+pbdJmCj-F0RG}$;(Qk{kTY6gwp?_eoubA(ROHB z6z5-4tFi>uJ<)GmbaumcQTmc&!rS%vV-q_s#o()f+$q~UMi)&oOLA?X4WNV90m=|JE{f zbQYHR*c$oK<6^ltgPGo)O7>_k^}@ePikx1eh81eyA%3wBP$Ok0cU?C;AYL+Vb-u4z zZDNLbfmOTvo%xc=*u-r@?rY@SjE3%BRUGg$7+T((*@&g$oV^Kbct~73af$9weMe$R zJG~p$oyH|%Oh~G>*|QG)b_^^G*U(1+#r(VD2p_M3MVx)QswMJIqZ?3IUeo$gX%a@h z?SM0$YzK3O8g$iFTy#lJ*gzt$jY!T;EdHQJPKY1Zm9OOeUr!gm;vN-9%v>+R>V}F- zmLI`*37@;tx<~6;96!BQd=A0zl{$L%LkBcg7UD?Wz{PxMF1Tr`IB^)kG|*TU8(SRk zd_DhsoiL+Uw-h5pb9$=;tSi<8zTBTZl_W%|je1TN7GNG3%%!UWZjHy#1s|P9u3^l> z5-Ic|pZheJjW8b9O8yMbG~v4OvKP2f6~qy8YwLs>dM5oMs-YBQoK#;e6s^(DKd>D! zhU$xy9y+$Mw}cEtnzMk8qa*P8WJ>5$+uh=7P%*k$ju6vtQvxJ7 zzLYLbz579hs=S}NadaOve>Sxq6?%aemyTuT)#ywLR)5TXV^Lm9+thnB<`?(ZE`;JA zkZ2QA=-8=BS~jNhu<0-ipi)d4kPDZy1)9j-W#-2QT@H89|5AgG#{XKdo2h+;V1kAL z2H`?<36%ueCBTc~dBl16_ZV9E#Ody;XP3>0OpRF8g85?@!<|&}ffMq9k4;yB7&g|* z^T)2~k5ksSE=B!Ojl3}tdhU~FFUd9iIMCnA4Yxgj+nL{4;Rm#R2*_AL z1hq>80$DoeOew1y@ueE!+(px%I)a_uQMcA+{=`XpE;cpK-C6i&G*fwi(&|TSmOwQ5 zH(fiyk#m1=aVwA$)cg@m;@>eAh&vAs4g9no*a|&7P|)S%I8h&b!2_8f|GQ=lZ9=6A zQx%;$7hCXr%+*qHN)wOf9FKDTTur=vi`x(P6Z;-?RX1TvxBGo}wu7chjSrfoSaPfC z*flf(!|P2w6(FcuC=kLh;i>KaEcM)*dLonN5|lP2hMInnNU&4@x$F6`Ey?yU)iO# zfEAc}{h`O`Tn(!)_uL7sFLG(kmU;7!nGm7lraEcfZd7iCBZtl~|3-eLnK1iXE$pNY zqNEcpZ8Bd9-#4vu)B|JR1|BjnCkB}8kc#5#cSUQAT8e96kc|1WO3FVmYg`peN#zH3 zvCOh6+MY^^h0&#svi^|oLli&HCyL=-um`&{_}I@PevtFWe>#<=-q3jYRU;cF&azHi zv8Kky{=W3y7vIM%8LO`Uv#NYx>W{0mIcFl-#&`Ml90j#M+c_~em}TN+-g#HYp}rO* zbd^YUxI50OaNsSi&8?qkeqfSo#r>i3@8*Ki(~sKB$kq*|VW~=e{8h7g>4`~9$6Kph zG?`-$JlhUc^@K50kyan0C($s^pYa3DhwKB|@9(BJyXh}}@3~0^-W(6+<0jvzAXwl4&Ou&!Bb-Pp+rexK z(WxUhj+qZjxp>a0BG|T7pADP7KNs6pP7Hk{J5dd*jMRa{z#YAHm8 z%`}Y%B^xJ6*$&OQP1CPp06jT#Wv9kJxH~#Jy8aOS{mrW|2cU0_I`u*O&i*#m1KlU{ z6OnTlMqTqPC&i-x2QV!c%hjp$f)jSLm!#*NGl zjk&fXxj!c#1bHUC{+rV+52$CQs~vv(rZ4(q6oaOvSK#xXs-gA-g}QF>C5b_KjYTS5 z_yc7-RBS6Zxm3)GM=o@+cfuRVGUT-Y;jJzH7g*M5)Y?83!jGDNZwxM_D`nR_ksvRM z*3vPas_?1s$;loE>k?{y{D3r{xV+H=At4p~jd3*Z!OQOKR4;8Pj8BZ?)bj3gLEzS= zOh;Y7d%S3G^T?gOHMqoxJj$1r+HBVs&r^Vv3+5Ow6*K%XxwFHEu1#&QEa^y+WW=|^ zQz7bAF>+CZy7)Ao;1*yAU(<)z94H@Ovm*AT{xu{DlUHJZA+mu7nM^j9OqEyWmy|h` zIVYavJoNp}YhL&v9jAAVMBDVPlp0C(-fOoRj*^_^*hi!NcJ!%&L*hB;3gR#>RRK^|x~m$k9hj2Dg|PX4@`r~WbXVZ#sz{sH_xAhf z6C+PETaj}Jmif~rL2nPQ%%;oxAq9O4!F2aS3B7HWXn8$8^g2s|+Vojjm~)dFO8uG# z|FheUVSv|fx2Kjfcp=Txk4KuVC*fx|7McJ6kbwcnsJXz*o@l9K;CP^`W{}n8>gwUK z!rS^0qnwkfPHu=}&6t4r#;tK?KA=u$^a@8d1h+1Q!@GdYVv!;Be zO!21bwD~+|tH0_Y5=d38gg&o?-q>x69bY5$y#vg&dYIDJAb#Bs4nFp4rqb(+F%4!_ zR{SP|M-feIFYAQy&L#pzGsUsTP7X=Q{T-XPVXAbZt%Lc)~r+a;Wb@|lz-@uSA zy)8BZsb0u0QGGQ#6fD~+{geg=K1o*cOb+Dz)>d2nZ{&~@*`+8oj>wTjPeF4C7Q5sJ zU+IP8!mnTc`m5uBqW_5_Hv3y*VkJ|A8>fM09X~eHcZ+qr&8nFBjyz6!lx!#)@S^?f1}}W^{XLA-Ck-G@|M$_FrE)#J z_C{>$N1UG$21PkloK#UYEfZy_gQ>roG z>y;RinVjduuc{&-w}sJXEqRM}A=KjBygo^8YV07Nx@Dl+@NUf$D^}P{0)Bno7xyKDx!79ujus@}?!;-c@@s?p6A48( zU&@my;#NF-PNuw>UFEmBikF&aFXzvpSALw;8 zzaTio!$q|*P(z0{w!l6sK}hpChwPO6gsx`NqU}vB-EArYgjUvxmNQjYJT$%1M*fc3 z>2sVOzf3&FkT~D{uwPk~7~i#e#rG=43Y}0p_~rTbC4Ku@J@nEXJ{4)k3`#7aMgH5W z`$pmDL|ouRXhEg!OgGwT#pjTdBYz9*@@=id=BJMS&nAgago(9k18|J_TIrjX9h0ks zF~b-x%;1oUjl1Axv#(90&*?NR>SyMMkB2^?R2xX_hff7 z-1`d4st{V}WPe7?{Qe$Z+0&zvuQovMOnh_l@{8vA`=z`@fZDmK>{nvl&YLaK$8^3&&@iS9V zx) zdtPcv6%NWmo9$E47I`C9Or>Vici&5n(Z2##ENPA^B%@jPOWv_`{6H!rrF6f+AGnjKeJG{hThS~_B|D5^nr6uy>Km&;zCj$?bAa~|m9%o)N z`Sdx3Bg^rnWUpz*J2+`NRQVuNNH<>%^OCQE;V7tS3SD;yqB?J=BRib;5-m30BT9kb zwD)c*c(Hk8wzZ5luTguxX3Z`8dSqwCZR@h}Q|R4_B)dz`-UJFrh7k(l;fe}mTW})B zJd(aCEVNZJwF|cdrlXvQYJbT5(WwmJ9=}2|2M*_pfu}UVD-t<7&)~hAPL@1eo}dV{ z=jkJNo1bP5KcmxYuF0R;pVcc{N^7nqgL8UU&Yri>vh^&QrQqScZWh@n4^`+*-g^5HUr3w1smKCOK51E!NxsWz7RjO8pMO>roD2nVv z9M=P#u+3(7MVl{gHJ!~1cdH0LQT4Q{^^QSK|L8Z@JI+~sr5lf`jMXmP{uVez6k=R> z+4OpLf;~Tdg^#Z+o__F>OIDXNQS}T&NsU4Wa&Byx&GYl|5ve9$dhMcPfD*mS#zLh3 zHgi^if&v!rP+_6bX1u%TW7p;4Whm^M;QOY}(r2X+tAiEu@d$iWSvFV8cRLrz5aJ6y9R{5MOF6IIfVX9w`j!h(|$v zEDUs`-|A7~+!oa;5B(>1MD+1G<-rU^IN*15vxXRI>uXIRTLJytq`wbx0;a2#zE$x~ z@AFeQ9|$_~|6FP8N|-u(elax^-d{L^W4F$D`WsE8foUjbPYC$&KO1!H;c60V;<`Pc z>%-`q)m9d+@baoIjSKByb@2-Lb!dL6nQIhBLJYs`ib7r5jCx*{Z*KywK_x(T1B9yC z25&=RuZaJ~ucIBzT3S|{J1eU@2{E0laAZrY`mDj(h}DwE!>yK=yP_H(*cIE_V(neU zLFvSOjFn4TPZ78?r*dTBzs|RZFyw^$i+<)5xWgSAON`rA*CkWWb!*3&`GZr)1d@yZ z#T4#_GWoGYUa`r7+3>IH6)mFS4^z+&AXFLPATc^qoEd`LSeZH)j?kJs`%SrhE+gU? z%c?_NHGB4kG6%!j%0dOPF-vxw$6^S+88nQ=~6^HMauSguL zg(r8P9ol;m9D5HbxDiJp`tPaa+q7xhJCuEmCsi7@KdS#X!JX8ee8AT6+0YE*0W$9G zpp_b$HR-;wH87Xqw(Dkcq$(N6w_``GIW=(E>TXSB`5ZeJRPSTDK7p=V*W<2-a<&bk z#Ol=m{V*tFYdl0LJQ3BZRT}t!Uwde8$O>C}&}!SNh*$FiTV8OAt}R8ZB|NeJ+m*Znr`{{e_Q}|a+}5AaTvMf%r8SS_^^7f$tOLU|D@H>EX)CK zNKW^&5jT~}MjYID`DCXP=ZUie?Q{q+7U6$%Mht_$#s zzVJC|kAU^?i&#>k9P^}By;*L&!1ycl^z#Max~!N+`X_*E5)$es4@R>H{dZ;W3!fFV z7fkbXQnS*OTHk=R(=A~j&dC<(8z1K!b{VQT?4xF$M%;y$iF}l{daQDNRvdB^9}Pk^ zS9U%l7Am%{V&(Osv$pRt;C+!_R-1Vw{ky$CKPK)9(Nb|19liQ(8|)dnFt?SvGzknx z(8p}V1N}duzB;bS?+tsxS1E~!lpqKw-7Tpwq(NdJqeSUex)DK85Jc&e*no}hZd6)g zbSpU;M#uXwfA9N>fAL{^&NUHG(l$3?sLFgb z`H8Lg7N(ZQ&_A(`6!ZCRW%`Rm@jF(X=8aEns~&4OQz!=NCaq@->P648DPl`U`I79v z#m|1EPTa)aThmUJt~&BRO-WKEQ>uh^jNC{OLWYu8prMX%q(~V?dZ&AK*0sRQ9ZTu2 zE}%=jOeuu9uQZ&?DeIHaA1LU4E76%Y8(WkqbUaYQrYzY0{Y;lyP-fuLm=NJ)UK#a^hwJVE*zA9M-{9eVwYtJyX z9N&Os6tl(g&=z#dF%{iMYX*!z3*`c$;e)ZEeY1jS-vKMski+bSgP*|>*E-@$F)DNc=GcDAFCo0J%J%=P;X|l3x%EI(BZhCt}RtytX`u{$V%2a-wsm!dS zT3fbg4UFkQjTP(4Cmvz&THapc&UT%xy)Kty;C43A0W#`IVeYsms&yd)Dch^sddUW# z=@nSNQ>scj^|o}(Rf1ztOr51dp(8k&hp6C(X1H-bLTJr3?9tk=dG$+2k9lbi%bHEG zoJJ|Odbn$!g4R+dNZsIlzMDu))bYPF+Se=x`1_#hggmc)CXM!L!_8 zN`un8h6#53UbWVIqp$tCWOIdMZ@&0fT35D~6Kbdh{w%hB9Z*vvaj=0pEOmHwvShBo zOHgP=+GASUdRv7`+tIW-9LYM`o;;)UvyM{6clEh2n8b6qAM<_kZ%DkX8>e132dYs; zan$_IZtY&-P>=Oe3d>ug2I*CM{P}#q2MAvaLTN z>s-SoFT2cTf9%B8f8DY=K9WG|Ncbf9JvWE$3^+yRAeMDLLrcRa}yn4N_}5?!(505|!T8xsWbK)a~I?bi=oOTK0aq z3bgCMa)_@YpuDYgKcHBOg!w=1}XAuH#5&`;DPC)6Te0Nol^D zKbTlppc*7VX^wZ=_ePg6=8$&byr|}{x(O!DZS7OySAB?RnEEF60yD!$3%Y)GW&{t4 zj+bnzt%Pqqr=C~CSt^OmfWc5|l1JUqh&ZJ(t#40T%`>L@?=t_~$v)dmnKEX&D5XcE z+Fn(9J+{DrE4E5@K0;JKjNxseiS@$V#)P#;`Q4Z{1D3KqdvNU@J=icbTzQ?^$on#| zX?U+KVChSS+{Kd>Ox{zWq)T0{a#hRIxb9^YCsi`khjERhO!A?&WfY}4k~Y3|4XZUa zg1NO(`Xx__Xx~88q{>^gT0qV;CrMnR&kL6hyflXB zuqKDbnwn0f^r3B)A;we&VC_gzhIq@`QLO%j_QHZ`l-2W2yN#>$&X|;9HV;w_%O{CZ z4oQCkbf?3AY3%BoFMp*b{*+{*XxsUV#QjUi4o_CS_wrkIZW8V(iw{Ui_Xf?|#!24b zk%E)6LOBN&QR@ok%+1+ilKGF<;UXpO50nqGm>8>;Qmx$6a!R!Kl1qy4l*Hp~b=wYV zGGqF$(gv7T$4;w_s;Ct4|rdANeq_07l z_UWV$8z5wPI2?dBXFZ}nJ7G)dZre>$hMPtjX&g!+gp9C81GK3;A4 zr~2P+L6Ll|lC~l$qL~rOHkA?i-q>O5rOI%>g>ruCP=BxeKdjQeplG`5^CcRLBrmvx zDux+4j5qN1q3Wwt9kyru?r%m3rTrYTA)q!*Bq_L+Yd4ZKS;>K9Spc%;ofi?|U)*cX zQkF2{vtECA&5HFq1+&WAqZm>pulQ`u#jR!fZnrzUI&ZS3Zz##Wl6k>Tph^GP2a>FE zyfIOZJq?&c-Pk#}R@syz2hOB{EHiQNlc|~6Gq=9FTl+yJPIsjG;c~LNP%{r-F8oOg zheAFU3_2~m0e0~mA{)!JbmV@7La#3`FRyf)@#uF>9c_pIN-*<>LW;^5`@P%$a%aRP zd|QC*LF=UL{;?T<~2?2qf60?cPH-Rwz)`1g^Gg- z3+x-EesnI1a7@|%0~-rGcFl|O>R?z)?))^mp8WGCZaNwDuWh=wnKeDNn19D8!*zwS%9G))V%UA>#5(9c zCbiplWnh?_r~E?GH_Xs^1?swMml!$Q@J2Y04kQ2p^gk^+C3o~B=FqNb5VCW(ot3d9 zU|rmLJ+Jn&#g-#4%XTw%W;tFi*17)7_tX_IgUq;_*;s&C3o=lXlbv%hn5Mc1@#us> zimm>Qa!0?YeSn1xsmXepXA3$VJrP~|KSmVtSTEj9N@FUN>{ahZaAa{Vm(4&>@?v*{~S|BZI0FCo4c?1a(dnFMnOmb(>Apt)7nc?Se&P&7nbm!{pngX^v`4v0r zk1}ZJy6{l`{HV{i!wk|?G4gIMZt=v(pD!}Zk7}cj{`>KgbZ?v^X7|j=6Ee29Skk{+ z_jqoeTSMy8vnlU9u`((R>%;GM@sw3^+A;E?@F+XB|1rjvD}b&`wCrvRSd>-}fm@5x)pd zn`_T#B0T3Vr>D%WHfTl;P{mDRK4t?#EgKHde5(aR*-;gesYaFdC__$qv#0`1nQoqkL zZZ9HdwR~*)1!cGP40>_me0hGEKs>+p0J!WkuVSww3%xi#r39b+{VWHL5kFtv-)=fn z%Lq_|&NW`Vy)vB`6MHL086$scYmP-jV2S1ZKt_kD=ai^kd*Lr*9)0@NEBYyt{h6or zChrPI-03)pMm&lQ`+yrR6fr{GgO%CZOlEoUEDNSsN+2~YXV7%9gf<9O%mz`j0t*1K z0u?j483CtV>=^|;?&-gH2fE{PL#NmRCK8*zJqz8unYcws&$kAzIQ@(4%eLjG6+v5h zCb6-fFOUcBa5wL9*PGA=v4@9HfIyMQ2kW8X=Yt7XG4+8L>y0TXDQ2g~8G>kQOQ{QK zDzVqLnbC;QHBA5R2}84kkNKD}OrrG0+8}(!SVtpKF1sSdZjxj~Qsw3L7VOGx@kX0^ zr>(w!; z`4mMDr0D<)81%B7eC~KxYwmRC%Il2jvOVSMyD6i4Mlk*$N#xulZXgEHTk#IHJe7McDb#lY27qCn~Ejpow z>s;z{Q6JuA>loH-wr_r+HuY+$nHm~RN-Y^fC-q-lXFka<=L4^Ph&PoEi{g2~RwPzGk++l@y}M~&N+#r&Yig(G|rXuK1U7M*y^pne_g>bZy-NrFYBlnAwHfTjeG zVT%5flo@@ut}eyDQ*)PMK&I@G^7Vd4WdjaN!_QkUuJ!;;*Sx=IFmkY2?^y;WOq&Q< zGeg2QA0%(qKd@a?*&S%j(r$?<4Wi=pESN}B` zncF^sa+X>5SDNyrVqrv+6^;e$x0+oYtXy_FzX(r#%ze{k4R_X2`khGQ1kWSSF@rHM z*wR)}(A|aj)JGBK6}i>EX4q~%{FDY<*7x?e+6yTk4rE^}so?NA)^_xJvYjDs2O7w9 z6EIz&Yx$^K6yyQ@1M;Y-stiA0kh(HhyR6o~YCr~TE*YRJZd1nGrG>@&!}&Ti*)x^B zVp;59Oly6;je7X-MRtCY1UD+N#|!;NwG7?Lu;eb+wk;XI9sfZFtK~n|!ldLR5#gBT zfIk@iz)Jv`zBRdc^I*vuzDJMcgW-$gx)Z~uuX1PO9M`3Un%esfj|ccM7Df*I69-NJU%TktyJ-m zG=)CJ&N1MXIr07dVaCmTX$Pd8;u}D{ZIRq?S;K*&)o*)qyI>5nXIKj>3|L+g*TZr} zFUcp9Lg=}yv_IJ>r}%h>=hwmFsXgk5`$XUo=>B9%d(P+?t-QJ!YfOGXVOdkF&}0=b zK)o*Bf5}l(LL!h^5t7pj3xEV2pKoYGbm^bPPuxPvzkLgEz zXA~3`%B&t%7e-%*R2AY^%U!wTCT(t|+~uBKyD=VQMhSejC17XkXjt|*G00!l zqGZEhR?p`sh2pxE=ZX-XZV$PklcF{OXODS?1LEbiSK{o`mO=}%=$AetKpiW6A5l4h zPL~hiw*#JieA6{Z9qk=B=384MZfBaw~wjiJz-bae?C z>N}u2KpY(8a(B-6tk}ufxwxp91ek1abrXse0BHAsfAh-llMQDka9IQi? z+{W~A6MhQ`K=t*JoovK9P!^M4Po zHcf!n`_jqGWCk~W3>6%Afgik;z1V;HNrH*WbpByGpm^BWH|C1!V1v&HUy>0qgFq5| z!e>9X0h8=}FQOTqHSm{|ikoNizTG`E8Hc;Q$>5CHi0;#Gh`Y#-YPLGDV8tq38*5eb zSSx5ABE|>Ym_XSd$d=CZCK;QRX8svEYRx!{q3^9DCb0hHDj!o(ZUgaaI+riCLURPE z07+5M{OSnMEUStq#Y+CD%%P58Ke1@PQb{JSM3)9$)P|^bu|cKo;3>3qR23*HxylRI zkFyib-}wUASV7rFG)HeK=XjfS3qEDkU)CECO7;_Eyo&iK-zq%zYeEre9eh zovfcbJ^D=GFZw}OaL>m8ot>6HJ{oc&mV-nQ z8dMTi7r=^6iBQ(;$kT!bPSa+I)g^o{JscNv7U-j1L1QsORAP+jR;!AQ3RaMCHRU|J zHPaD)H*D~bh)XeLvNt4Ca$Fj5nXkkzyuUg(L^~R?Ac#(>em}be9q?>h)!P3dUp!WZ zNG@?T8=eI^0y-Tw`hcQo081Gp5kun~u(w!Fvpwy<+g+4(Tetozx5~tKSUwzC-#ZqT^6Ldvb=27*ko2bc48q9COWdYMMZXL z$V8cK6fJh~F8gzE&l!;ts}z&;^jmuF0sQ32^Jh>xMZ%Z2aKHf@RL5N$r!f_cVayt? za!D%hp2H;yzR0&}lqH2Qv%F=}NfeDqO8$_bf44oLO_H4_nXeU4hz;cXr28ycci?qDiXBGTp|4%BR$o!M^|d8mmAq*p@&wM+R5 zIod}wwLSne#GzXbaaSHsv*3^{|Fe4MrxBavv@Ig#QPpE}S(VZ++{4PYcIgB@RRdf> zxsh{t0M1ABQFf+&lWrqDLRd|Ac;vKdB<_xlE#0NfUG{Jjxrc* z>Uof#5B2@>DLe=JRYNXQ8H$f6YU6#|W+!B>Z|!5f-u`#k7*^t5-Wd9G>3$^V6ZB<_ zDLj~Z0h-Kpho$Kdh2q|prp^a}7CZqsNJOL2T+%GazXLPvGD{)0&&}%$(L-R)zI`$I zNK?(kDlQGP-j$I0u9Y^XXb+A1@$p^#=|9VgCnRsRJiK$w+ivYMJUtlf%!Q-3QL-w8 zj=30HnJ+^kSXmiCrC+BK%U!Nx0f&8{0j>_P@WJ!rIoS*9mszB-q=-}j8U6JC><$P< zt(g}P)-i{Ww33a7n^6d$mx0Xs>R^66J>Rjq%1ie40!^AePj^ilmOc3K*Xb^;4F86C z;v3SuIChaPDlXc0W^L=?V(-;$t;n>oAToDW7~I+E7t2X;ZF>Y>v_0L5@9^BWUHHlh z$e%}@Bq*8*hbnx71bI{AKrR-uhO@F{YVGh}Y12uGd9j(?uHf1jAZGTn5lOXZshnv5 z4@Y>v*Vf;^g$a-cquvYda-!go(WoK+dR|=)Kw%X@iNaJV%lA z2Gmt-@RR}F3b1yK!!}^B?ax6y#sKpR^gkPfmgU+?w*HPpp^@cpY`&e2eSf#pauIS;>FCyAOIhFLDi6J%2Hf<)SqIWOh3;3&GZBlr2K?D>SRGXw&o|M^ zL=6Q_Xsh zB`^+R@0N>zjD>Ir)wEK)+_bqIjbti#)v{wMFEPv^fmR=9+>jEZb6Qev2Z=umU3>Fc z0^IT+?(fBpJXXdm=`11B5&8PQpO@uP`alDKlJ7}19|5-CVh#-tOQdGeQMEW+y5a zWX&lkixED+Y48<`QEzdf;mnnZsth26Do(BMN|O7kJ(iMB{Ys2+xyeMd63v*CoFwP) zXC@()poJ1=y7t>v!U_$JSoR7UCSKIV+I}^gG}i0vP}IM}%!S}uK)^mE+R>RK;l(87 zNc!g{kZu7K6Pr865OV)cl(dh`yOPGv-f0sgW9Q9`LZg}vKe5Cji;Xp{v^gEkMAL7r zyR#>%e|ayaQG3{BwVOK!IBgt;>?87jNPnQWChAHiE=qaWKVAQb>06D0vX}IKL7>Cy zvH(#3FUW?I`&pgWrerP%7Ew&;;fSrPfh)Hd*y3C%qwUd0qwr!~{|IhyJUdgn2q8qF73J zHNl;{e}Hz{9B<+4@z!(7n_Jy@t>?B)hvppwGi#zk`~9ADX3tb~ayE54P~$(Zaj4g@ycOXZ3+Ijzqe zo%tBEDQm}Kr?d6O9mFVyLx|Ox(hG2=U5XMJLgG!;MX`9i%kh(mm@~ddGJ0YX@QGk- zUNqkPQ(Sn%THhG6xoL9hgIN@S2O=3wZI~An6JerJ{5g8VLiz|KIz4r0LkOltqi!t_ z!=W>2u>Bx8EJWrk5Ygl)n%FFaHIU^vRIj`@Hhv!7MG3OPy$azeuC`>PW7`yGXbjv> zF#cGvydG#oIuI6;E3P}}cn(HC2=d0!ql3;$%9t7I6CA|<@WM4X!e-mmQ8aD`h#cB+ zVz@i?Dt}i-+||kXxl0kDqoKo|34NStk+iVNswz5Aa?;ckT=95qN7nMu%<&{Uwa*N&^%xjq5(4?`*WQ?8(+(HSt*0%kAuZF z!k*b8?p=HgWD%RROZ24Lir?GRCnhWA-xR&44S3PkrxO^|)O}5|`N2Pbu1V3#^e`+p z1v&YvK6db{t*q;mBk|lw#mCGD$AKO*RQSt#%t6|?CHEHng~=0ZlhPd$Z_!o)=^MHt zJ8HPzlt0owW}D|8*bY7NG)C+-_e^I+q_W}P-Y0EtqZETT)55}%A##uHh-hjO`Ga6ux#(Nx~^m{lds@>z_@NaaTMe9Xh zybA#@$jUkIG#qN3jA8;3*gy~ecLoJE z?nK#UzMLvhV&*4a(RI_tZk2}@cR?@_?`lU%%=5Zv?BGLgtpKmW+E zRY2Y0pS~J~w3=ru#B6*aMZ$d6l4%4~x^gG@dJJz!-~4wx`lYZg=sIlyD(S#opWy?_ z&Y4@Q5~<{b8mM7qd58h&8KARVt!M^MQ}b0*x$=J4E0YRto)^r;Nx*jdt=>1PIv?CC zdpp_f04^|)%Ef!~&n_xA&v#88^!B!%als4@PDMK=k|I`}>+Uf~seB?XY*aJ<|KgGq zYWPAGjWk+k%GZCFWS24s&xk5Q={X9uCn*DA^*w%M+FGP6QI! zo;)ZLL7=2Lj`C_Bwlj2$(wd4u!uH(|!cCgd7QXh%;RTBF)>|a=`Tt}_6N5cHAfK!t z+oA(iVKlAJ$i+Z_+Iij zdU_nUM0X1z9yhy_L4R~lrWxq zv}rat=5S@&y1+N_ndjWd?67SUpGCvH)Ik5ejJiWiyHw*vmo-y2jmNd;IiqlTej5am zmd&MmEMd1moz2duSd$yjnh(1RSfgw}Ei5RgytITvH^AziPR_@5B%ke1ZIiM}D}6k} zL+fAg@`>ELNH(2kUM5&?(Xs(WlZxa=XF>j$d^@l zEWbS%KlJlIy}2`j`)*e*hYW0@k&&sHH}!4(r7WfG!wY`4Hr5|KoeGw@Rt*zWduxHUI1~A-!|{!$ z(e$QUDJcCvSwTDyXvMAN{!@3|yBR=*VPPtYkJH+JgbK$pA zkMDKx4;}EOsIw92=w2uE1O5j=GdLkGFQrHu*IC+NIiJVh8rH2WSWiioN&IV>uIMXR z#LAzXj98cKEG)`G0u6X(O=lSQ9)rA$abK5Y^45M%{^xj?>(y_5mW_qxDp1rX9L{1? z?)$l`CFllP-DiZhS+Qh6qu4pox(1XV<@F%)9l6E)%`#MVV#jroLNdEfgcD-a$%i^m z>87i{-9d^Ub&KD>=)W*Co-uYj0;(NU|E=9|`rg6rnghG5g~y~|G>DM_$I2d#n#aFu z!;{xF%Q3#Y^TARMPR(xaqmg)t|I9niX{M*-3$_QQc@@7#Ul*P7q?>|BUUK7*>d=in z6;XQz4O1Z0vaVP}Piz6jcG+nBj zUN8lv-^D#%tci?7?abRwH2$|9S%#fr2*W~!0^8Sngw? z)V~DA5|LhS2E-UyxZWG?#qgT(1_L?Hw@Y!at*VRTgBZgTR}a(-$Co0X|3Vemaruuw z2q{3^v~#{^F8a>JrT;GZ2P}eSIjcNW{j4is{o#Sb+~Clb>9jw~EASfnW)K)hv<@4` z?~kJ%S{)ruul`3#*mdg$4^D&hTRk#ZX$mRSfEwyn)1)BFE(Jcy6!9KSZUyYE=W1jy zgCc$Mn0ju2f|MSdxAIt4q=|i;NJ26$K5Q7qFS+q=rPjL+7JBDyX8>x5xZN9DW`LMuL(bU$Cv7+K9y=Y6QwQ0JesQ0Vxr}2r%^kVMZ!#;3B3L6kKs z>;djc4LkENiZqR4edMg0Tlh@h;pF=P#s6KLl3{#k0Wt62)$)hPq+l>J>r@gVgSyeE z@W>ggZ2`Y4Nu1-jAxI0$HXxm=-*DA+7-?VEXsN81AX@d+>V_ISv*>Z;4*EyW|{EP2o$oH%+2mfQFGy^#=( zrvPb2;!*`OB`F#*Sv=5)oA+ZW%aD z{3s15%9`~3y};1cw?Zd6h_(KMQEML>VAKC{7+u|3@r$3RnzhFaMyY)GFn|4_XoAE zfZv-mnd51umOJN&YoFW|Y~tNh)EXu5*riKhTcGs! zhV;HPNE(7Wp4)&jm`?aDXqLiTd<&}Z&`Q?TV7MW}rG28R=#~k@nBRUtAC!R0|D}c{ zZ^j47@bm?JIw9V9Zf*;?`-5H@q=tJL!aMFS#_19wpLOU>WjS%>Nh%Pon zbl`~_j%K}2&B6jdxwvR7_PdM%{hr5v2q>3E2G+mRC#g$y(g&5G|E03&3VM3hnWY(~ zjxW0*#OUWA6==TNW5)tK=fB~3jc^bG*?5fGe_VWU4>t_=?v5Wf+n#p;k~C(7>PV#1cCZ5b3#^^O`{3KORhlUv{Bpo}kS z5lKUy#K8CUsvUI2N5hiC8>$9m>n@(lR-ey;(j{>k@76-;d>+Z$oC{|%Ul_Epu~BB8 z=!Ue!znW#hiETS6(SUgapd$u8s!d{RRiVq)cB%fE> z;ipQjl)NiB9YqEx-j^PpsUuKIkE(f2jyH}A`?qZINw56(zj(rJ{ZgUkX#soNqnC*l zN|SoI^Lm5h_5QMqBBJ2kout?47;AomVsTSZkjV9cf)2}|$~6jEHWNd`CuJqZ#nm#8 zgV=G|!_=n>s8?f~TE>sI>!-qy$h>3(*$=y{m-=P4zaCVV57udlLbA4gs$8jCPO0YH z^Bhlkl6e0yBYAR^=TYLMjmGhGz}^JC6W-P^rpXu$V5TA)ml@WFk$K^Zv^q-TLg$cs4Z5b^MvFWyz-fGL=YMm8q{IbIe^ek|%+y!uXU2X%)tqQP7F=uR;+g2VXDYQ9S`zX-? z%=u!J`iBK1H}qSWZn=n5Ow{8Y_6{RQebM( z{W|XY3y5=Rd;!nRAUYgoMp)Y9)gkQ;Wu-;0U(Zm2XKn=Zv6SU$3@Sq5%DMz-9*DGm z^GBaNWH<_`!q|l#zF9t1&`&%3S%bu~_??nm@_PF!`xsJq#3Oh2WXRg znHt76e}-2isfyiuM2$!gSt!mljSV$1tfWMkSY)Jp5HSiSlas1m>yu9qE*x&_@^ZP< zJv$f{BR8Hpg`W6qWAJwV;%wx7Wp4K9iX#={7b%OS>=bw{PX9I*H@gw)O*9Nvm;b5L ze7UmRr!NTBc4VjQi&b(DlU2M1D%lrS2~Eav2v-T*;I5svQz(n_9%~pG8-B z4S^m2gKPpeva>FQEM)?kCfJug49eSIu zej=RFel-g8e|OWpN^Nv*f!uJKQ&Y9m?TplHNG9I@>x|r4+ZiHFF6D8E2Ge&Wb=IA4 zXHf{Hl2RXa4a|N`cpkMzSSBnS5+J(?LCBU%id_6^hddlneCWp8X}Ot=KmQbm8Hu9% zI;}knzi!O$;=C8FNhf=W+%5D5$1uY@3!?FW-`06el!6S^>Q-!KESKTu@qfV~R} zx_&{@jEz2PL(jllY;z-ScJFn;oMV__Q<@;9|7~A!(rkop$v?aaT!&EbGp|E@&CM$fPpg2gvmvK7ezVe^Wu zIv$bQ!5}&qTFcm^h8Zn*4`0p&z0jj&|+4UPLN%K3OC-WWZ zEuh(y>G)x9<9E1M?#Pc1`iBJgrWViS)4*EN45$I+?fs8|<+`_qcg?eZLVYVjpp>^1 zM<&&aku^hF1n4A1U!$tE2&nKa_U_tsPV#`n!v~cP`-w?o-(BU=I_mPWL*$>RwlP3g z7aU??$ollC@NvhQ&bN{=B6uy*0iJ-u_y$X`l%-hAiyON9#y$cJZ8(xp5&rhPQ(R`o z(TsvreE036qeI#s4j>6Zob_bq%NDYb;t^B}%Gdr~U^cTf^+R2h!s+4#V6J;~7Lx<0X2fAKoP~+-%wVi{l?d<`7A`m0jG8*_DrAmfEaksVN-L$Fb zG9~rOC99eh-=f>OV3;gTNxEd-j6ZB|TPMmOT-A+@_?ez7VP(;sVd?gD?KX>7cnjZs zeW(4p7n@F`MShw2AM!>16=eZ-@aK4b60?mjivJ-vMDXUh{bpWzD~ZOd=XFt zJwVv)FU^f`Y0+qxvrtv{RMAp_KWqH-tS5$=Kv*ie$aUE>QOZv#DT40rVt{fnX&5+x z_9-M$3rE|~f6`R%jUt7v;O5JU-&7@(^)IZ127Om?+EAtkWRGd)-kK12v z{{~b3ObieGa6~h5$j*Ye?1|oNrx{}!kR}H80@pG?phUNL!S_avt*570%xhB;pnL|G zrqD51f@(M84^mL(+ZW~ESNeH0?iQ!eC!mLMWE5`rx=szHD)lH&Dp|K?2EqmT!oS<} z>h1>_{TI!AM>k_~rTx~}I`i)N>7SK{As`Q+6CU6P$2tDo{Y)Al5x-+|kB}T&gE>2U z4Q?RjJIx=z@k~0ob!iF^xP2k;*`-4R@eZ7UHq6~kC) z0Wb9sSH-9Kh^KPFq(I)??(a)2)6QDe7uIq^`E_IRpB%fJPk=z~mg#BFk~Mx1^R>Y5 z5b{Q|C|P$@-w%5IIZ)U=Icb?7(aGt-`PEeY{&C*A@715V?W11x_%6J6psyvwA&O7` zyUhV}uH+lLX^1Ia)Gvf`={Gu!V?2x;F^-O_ys%ZYgxI}_?X{=PUM|FU44c zIv}Bd-s_06O->%E;|O0en7st2obhUSNG`U_ua&du6x64`LQ zSx0DK!fk!x?4|;KulFDcs`?mj(@o@5&V87>tNI9U`^9Qt$wkOB+f*c_4_qMhcbt=* z*^;9)r~^cGy%i~cP)7Zm|uOG=-Ai--(qrd3aYoHU%yk^=HA21l0Qc+FC4q4RL0Y9}b5Z z+(@|dxo#C<#`!3P0xz5a_e^2cRG6j6E&4mjh>6Y)*||KQODgYr%DAs>6-dAPQX+7H zoZsg^C>@p(f73I=6y^Kw%7;@Mxkh~UC%gd(xn9~6P^&&^oX)d1PY0E2X12V@Z?w=w z|66l$(NAB(%_P-uT~y?$oUEeiqu?>jxwA-|>MeWQLJro#lW#+wPKoqt{~d3cs+cF5 zGDG6@2NOqV-TXilx41%pblfwyV)1^|uMl>wDUgR3{C>dghCx5^v;rAAZ+6g~e|sQk zwd%e(E+}B9iFM>+mMWrIXBwZ}e(O~SXUh=?{o-f@hUMITPOpd9nbX*DQ_Gz6amXN_ z8eqJAgcfHPwY_%@20|PdB0DbQ2c4)EvxI~N;_30rfYjeF?dwAnWSMIE7-az+XlkL* zIgMAtYCC$DUDRcR9c&gdjwBx%>E4qk%v5LXU{C@Pw$oi;fB;#liUTa;jIB-qDv&zy zUWVi0t%j!}ZobGs(5vi$3t&bj$jp$@Jb}#8qZDm=J0!};(Oq5l*Dxmd)IZFLYwk|A zK0P;!Dn_v@s{Fy!C=Kaj+N+88H-1{(KR^@Bs5;x)3T`Yk!a#&k*N1(~718aJE^AJ` zC20VDpGNBxw&^S*sxka$H^h|%6!Hv*=J37>mCW0mA$Q-To{eUAzMd?WzUPXteX%y! zU5)75LCRL;vjz!MUIW7gA@rG}qnoT#9A&X$RzngfnXyrG^fHJXHkiyXJ~F}(7XW%F z@$VIFn1<=8QtF&8N#yI5*kv+@ifRpr^t}}99{X{s67DhQX*A%GTjc38)>>s4oEvbs zDZa|Ir@6_L=O?ITh>BJHNA#6FC$E>J`X1WXQr-g_g5a&?< z83o#|fr02F3QgU{+Q?kn#7l9+;dd?$c-fu&+huPQHC}62y#5dL^jcL4e$B`zR?%>u zY~ueByoB=Tb@5PjuxE`E2@%kGB&$H2Y0+Z)Df6}YS&AOMu}Rvg67fQu`h)){?*Df! zh9vvTecX>>cM{YHjBF|lB0_G2f%``~`fUXYC`dpuZ8+K?(NRq)nTmAsJ6!$p{ndb{ zy8;Ji4jWugCsAG%Eq0{k;ZUG%o|cpI6|rZjNp)a!{N0!QlvX}5x2dz5k$&jQ`axDU z==W>C1z@?a7J^Cm!vCNZ2y%~qXa<^7<4=iYJRrpjrvXh7r72p1AOyH?R_@b+C|fyKKfsu=V3 z51qT~=KVF_gjx{bwAbdVv#~nnMX&BH1`JXpCnvW#-v%*L0B-#go55Oy;70ATSTaEpuB=q$=+W1IWz=8ijk}%|&LW+$1++BIBn%uRyb#=G^ z5p$OVFH5(B)Zsa!)SJD-SOs0;eLd$7b8qd=Us-m6llc#51?|CyUzaHxLXd$fRtHsonAD(g$hNT+P`4p9TZ7 zUE|}K(qw&oJnaniO?Xc$i~GeRP7O$=CY5#(DFHKn?75Oz(7+>H8{gtTP6arI;qQ3Rwkw~i6bJcF$ z%BOIZLdRcCXjS|piqlGNW9IPTaCz#Bb6uNg1MW0GC)0ud_h1iTo#Ku&A{OIcQW&q~pqx}Qk40_L zev8zV+C}UcT>)3}zU3Y}EsJQdj!QRx-=~6`C)SC?iNtY+a0d6|kA&#m5A*YRh>*O9 zcJ6ID@T7z%;d*rKgLc{h=_1R~VAt#h`fl>`?B%GtbXgS@BIh^ofj0I4 zMg7J|jx;fP{{=I5w1tu|dCk8&CgqBadepj8#ZVDqTEzB(P9SyfyZOCu>={Nco_JF{ z8Nmr$G3NOkH!rXM>R{My+uj<-)89P=^g{v`K_~AnMXR@L@^Vn z4M)LmN_?>EG-iH+?4GNEmmAi*$?D^O++|<)CJ=4=@6?aVRPQo^gNmbs{~SF4wAUv= zjq>l`U;e53Ji&TP_N-O7la4^Lde>|~80HHYT7^cE_;WYc#WPCwiw;`xEWS^?|6uEL zfr^T8l*r5(iP9>#J9qcy&70RGu80#GCO8}(Exo4G0>MkiG#z7py2wh1>Gc8;b1E)=&OI>0+K z`K0YATTh4R>f&}NMcd?8+3`<8`jx}$-GPTMjRuGAHU&zelzHV=>WDbYHv{LcJhy0W zQkdXYqXn!+e8%k?l>HpICqzBh>SixG=;TH(?eXE8@_@`rDhXqv9hF|Tj0oss)HSm$ z_I8I{FXNe2V;KgHaJ84|-qd!w68j($x!TKeH`C*Tjgfza?%APeV^B`M#dlXrqctsC zdCZoCkwYPG)uxUU}G}xK>dkDpaGn z*)9meTYgpb+}(cLwNmWr>CX*erG6)SPHBXo1swEcTf0M?i@l|MJ6cc~4d?6Z{KcLl zqf&P7E4LfA@~)6Mtw!zzdz`v9izBu}c1&AEVcmL2UFdVwe8@aqH0-Q~PCyV=+{P+X zHxwo-{oI&$TI}eEu~|G7n0e`GOGign+HB|H;bCbB$4Y!cIV(mW+|Q!OKtXaCPha5o zzzpt&pTWW^{{9zD{%7~@-79K1M*{PYOa-ysyrD+Ym5dlePB_JVIk8{5N}37Bcy127 zORsndvJKz$9p$pc#_Ck@5@l=h(hYkU*&3oL^_xN7me4k&b|3QO-TJ58)5EFK=c?$Ucv|Hz`5#pY zE#2LbrnZ!Aqld=zaf)#is$>7BviFQ?s_VLj1qegHA(?sjFs~khRiA)KMMXrc+Tx_l zcM2a#rL;hEZES4lpZeiQ)u2n(^oY7;5+BA<_s)nuPoZ6)<5k(r9HQRlnkJ_M_(FQc zi%_jNZSS(vUVJ%OTTc5pPerrW<~}|QA^U)SrPZkFhx{1`8m#*S0c5W9O5s)0FCsD5 z2>(D`YCm}<3GjykoJXlv`S^L6E`?I=?*O0O5!{-qfPtm+}83Y2L7$ zDA#`Rut-jxlYSq`yzn&ki{Hg?Ep_dt;@{SW_*lENAZxx<>BBYHo(wX_RDh6XOO@Tb zfyD%$zImVBmrg(FA&>4{Joy}i!l_Hlmka@h<^wzl3=HHKEO(y#8G|=Q8KKb)i<;#= z3}81GUFZXt6_081u}CxTOrA+##3XB9EKE3eXp+JGB!LUwc=KNxSyMWfx&$e67u?u!g&Z_ zj!Q}xmFltr^d9)#`;wb0bmPViUf!77&qkNyPHk^*<4wTDt289EdU*?!8}Wqa!{Z++ zoueOUWjU*-BwJZEozC`}@bCfY=B(~;Y}I;pX2Pz@?7Q&GjbRm(ojDpRa__kw{+;>X z2m5DUmaMcS zi-*zb>Ie;31A_w`pNx&A;CX^ zfZf-p$d;TIXTd`L{^kM(~Ip2q|Ld=Ff#g1x1 zVmuff9CI>Xks{v=*G$>oYK!%-&x>E53Jb|m)q4}=OI7T-n`a>Om_vZhE}lNDNKR;b z(edHq$B(hGyI>V8==JN?lJU5evhGEypofT-Ng_3p@A`MgBHk z%a7^?#9x?e5%YI0a){Y{~WFE(SrwV zfLd19XfL0mnW1`)LuHPn$$cPU5e^hB^_WRF^>h)kE3f67kwV2!T3D71>BEXVm}`!} z6!+5mLu0$%Y1sv8@}(b({m_*?sQ4;yT$)G8ZFc3m|4~@E`KYnjTY`t4GyMgvmkO_{E=o!g-vq2pwd2_tc`#&p9?Xq%jm@D%E~)Jq>qK#m zbkf(cL^ZTs(D5YdprWnZ;#vA^vsAx}^Uy-7!QH^OaktEte}9j0(F$O`WI(T7qCE%* zeCb@4;LV#i2b-1dKzvU8&(Vg*{90`C22>-`G0cHtS=`xS(xO&Bqs8qB!1Nj#8bJ)~ zR@gLRoYW&jxQTC885zTDMk4HMHDg!p_?fvfzvP`LXI3m8+T#si_IClZrAHJslfv1a zJ9jS7SUg;T{!?yVy%)%GAS0`}M|YqbOukk9Po~6dSQfL;@yI)@{O1@srFD2ME$idr zIOa4$lI{k%Qzpx@vhLH5w0MCNRSn}BDt0u&o2a5L&?yLAq6uisWbi8r?%<&Yk z#4u>T;D1FEI}pgRH~-srP<8^_U%X<3OCjBkbt%bD%rX59Ux1vEgnJD zMxn=|aJv>v(zGN3l&GF`bwVwhi1Tg6s0CkCt9vcn-s8gk+A~Yfj)9nRw`_kHdf%%d zy5~EqCsy5%k3txFe2-R0fINSoqqX|!!~&ajc?Q&8zKkHY?!olsa`&o{cX`o@v6$JELr(@8_1UEZe0_l(^Kn;W}!h z0uBZ#Ep^hwvIJJlv1>$2JOx;|*%x#~0s%3j&Xwix z0Jfjx!F1)gteZ0Sa&4samH+y`oOxDS&W+)eR~Jz5_X3VO(-QNvz8?q#l)|op0mIkL zI~R|?C?z_{ue4k5X!_RaR_@n96Wg#mI$%)Y*WEct-eE*H=ihG=FQ7kOcB!~5x>PsS zew=4Fe(h6!Dq+z#iPEuDHc!&_`*!O|po|4OO??6LW0;#4$;CSLt8cV4y5Qoe_ST+8 zq492g<>HC^pUD2fpPfI4mDbz6lYNSwXfWcF9LBm0pHbUy7ufwhid}$NYWk>Wyt!2s_QRm6`(KBAo=GZ+E~t-jhHm`6r3J!1Fo;<=7> z<1c;T#W;AKw-Lq(2ZYCmp)Ohy*P;Iz?it$;#X8+^qGgMa{$yaEbwzPJ?Ub-dl5U;X z^!#al|6IP6EMc!kHzxPy%Of?qV}C}2`CMh`V1oQ5njyS)=u_4`rX@htjCLA|^dmV# zOFt{6t)jY(GOPFe9JdQf_xxg8s6@1JxpnFKC-gu{Rl~$w&ZeCFUfcB39lTVKBo~~$ zjDc1J{Bs>CMO_`Sj%_0=T=&lQcB!047tCZZ4!!;BN``!rQZ7|Isppb4!4kKw_-BRp zEL|pz`CzHk!eZ|gBCCvEzREPAt0`Q@0a(y-;i5S_=gdc z;z5u>!aoc*jN%&1W~Pxa?vG+m11IlAVgEpp=6^%c2%(F53LP&#>E!nJmk;l6s-apX zP_4xvuy&#kLgs&ufCq!}|Ga(kxh0whLB8p~n(X;-l+O#BFBKr5+ZWfo7;c!6pLVQU zjC@TSDZihV_M;=VBD*mF&nxJE^DC`3iGJWL)YSel~w&LQTf?F^;c{Q#`dsG{haiSTl~C-4xf=-=;bkosl3d9{5gi8A%=SN*eTmGuidM( zJRRg;u{zGHpJG5jcN+1n2ae)qvrUMv6E>|bptWBQ>s$);$+~LU*R6V;DcY{3vdhg` zU&As<4BpA%>1C**qO!Ekb^mX+`MA0F*WKFBwuTi!pchTzztYWrAPQnJHId;yclz_} zPr`hH1s*!*nYSSVs6C^Wu?2JNjQips zFGg6ifJu*j!QJc6#R!v@HjbUSHa~zD8mB!XNr3W8Lf*ScNKG`KZb{s`|Wdqaub)6^Qplc!w;h~8^?|jqNNVdCY*P{_Hyp8 zd0T--36BeJ#zc-FT|Dou3~Z1)dG89kTYv}VdLpoQL=##j%Jw$~{5H!;GiAQJ3;3XW z{LMgU_J(6m$YQ@-tEJy-uL}<5*j7vGSk6$a#Hm?w(`l3=Ywojm&H>D7@d50YaUOh%XEy}x-wQ*rDk-vh)iEfhL0Yg z{_WObKWFs~a>FS8GR$A`Rm_^n8q8l$DNbsssL6{E+rnOL9P>eL2y7K5^H-X%M>y*> ze>%a=#Og6r^nUZ)rLB-w#A#2eiN535$S+=hK`q|9UIe-WjeucR?CpxH&9Ue6B+W^) zMNp)Bj_ij7t6V&*=mEcuRj1Aa1(BD!{@e90t7!LktNeUM^v;lsP)e<3wiW()#I%c@ zsoY*(gI!*=$tm~L-9K>lZu(@cD`Pofz;MWL-=J`3-nlQjDT;mFHk;D(H1U3GX>$4X z(|^Y3N?AA$E5DJmOCMDUKR{<>a(qMQZ1<+yXN`H%F@!kl=1JZfquu?yFrTu7XB^GlkPoKGx(@k**Rd$we&*iD){R}s?xPnVT6+~y+X*+NHi&H=Lmy|D#^lAk~FG?frHFHhsqowXq zH%i(X*O6gsgKWP&&dvxlYQp>lEFVr=9faet#)Ml9-OI{IMEzQP#S<8tXuj9}ECZsq zTQ$(>uX{Y5x4jJb553D*C8JCyZ@J-o!G*}3pL$^GZ(*+FDD|~sy?WI7hVd+u1=4_4 zdZES4G0xMmlYIW90`i8tMJPijtr`Si;Jr2bg8tnD&9`qa``FfcuO{< z>(7iT1cG@ek(Ms`uNT1yKd|6V3gZfE99vQHedO49?3VPZ(*u_q5uYExAg*kI1N6cM zkLXQjHJc|-5||FI`JYGbX(P7uTRK`=U3>q!Otr<2$*eAxFJ+_CF7m|)ztIXWL(P|5 zHGhzMZmlcHzlDj5KKd8~EG7TUpIB6&w{$@p^2u<6V^b-0`72{ZY+6^xEYU zEt_pz-8>A2k#E^{_rH!wb4$vGygWeuie&%DPIp^$ ztE|024d{5}26BM&MV&c zoUByqiw7tfG$t6u&&$jEn-{E7w%y6($1&oT=sS6gr>%=M`4PS4&}>Q;6#hzt%Oy ze-X4f`{ERlj0E<-2EX+(x6Jn6YIdiRVU$HH7P_7;X7lwWX~;TE%4as>p5lh<_v4j!{bJxRApdTNx{8pGP>yuJ6fDguHh8=pXmdyH#+ zw6F`FyywlCZ6mJ zJV1_->5!lWwn~%l0|nNwyfpWP{$B(7D2veb9@JNTo&y8btcY+nHt6VqjsBD}9SBPs;2*QIvmRmp zLY_lDpT*f;TZcBn@zwf5I)&74!+PT%muDI+<38V8va+<4Z7`6@%A)vr(s&|g z$iC3^KR&9IgI(bBe0Wmg%1u7$!3l4V#o1zqob)qL+R>l{ z(DA|ex_e-E^uZY4;pH{tmsewRe$8B2l>hpVC&Ei?C|fI@V~tY+#$tZ6J!|vsUPAB( z_hLjW-0kbH^Hs1~%w<2Ld4ob?nk0wt(FvIy7_eKJ^^-8()N_JZC~A>|bZTw|R5;#TmZ+W%fcK@G3^>$uj^G%OU_@<_aaGcP zl#uk*)`r@p^v^GT^lf*}y3F_9Iwe7m00MM;6 zjQZJp^cy{)oHEJI#{_s=Vs>*iRY{U^ZgRKd4-Vs4p{Z(^A(0vqoq3hvRRw;NkmYD= z+v%1|y#wDYE-c(5Uxx-)_z8F_^f!U~vtlb+RlR!es;H1z^%u1MlR6Fe|C8S+rWw4+ z4Eg=jYTv27tt}@fCv@{M1TxJ9$_B!fZG)L_2^VVN?50Ss&BZw)w7`!_2{iSnGzn`g zuqWo|`|jFlYHDKS2D(%}Gb9e6y$hzsa}rReM=sLb;WvMSi*p(t6u`FD4O`Q)e_oG0m@jY#(gBO98P9-^wpo*nU?e4tvMhrT74Ga&YO9P2nD z;)aYjpf%*cXIc-zs3sR--i8~_=K1M{`i9gaW6*aom9!<1!0VqC35m10;mz;mcVe3( zFD!L}N?5*3cRMBWouT1oD#=+SPnGO$+5aIPN0dvF&=E4oXXM>qpIHk9bX% zfcm4?dSt_8`?rzi>dFh{#FBp%yTww&35hEg=pdgYw|r|Gy)Hr^N+F%jStG&t`Is@S zK;sXf%H^_s1Zk03ic!Kx|TX4zXBuvko)1kD%voN!|MRuSTe`NwpjLsoXZgt`u1xv zxwAO@d-ipA36@GeP1MqmE*oB9+Ar3QMJ(0WisYa?dbDL@TW82Uxq08$G$rY8i}=A4mXXRiv! zmE%9E#qnc)UOD_c_w?LmY3)c;Q`1xFcuV`%L&V3=NFG?BZXxdOi-2Sk{1@Gc~bMO?-^kyn;ves+G^;Bx`HyXM4CRbi@nN* z50NVw!E1Y*$L!2I3nwS1`+_}fd8V~pU0r5=aEQXm!s22Akw_#E(3PhaMovJ!v8i2E zi`DKE{oI<)F@u!@m8Eb2xKvjFb71-R4)*)76uiJK3AO~ZHu5x>BNp{>98QyDChQrktiv zIDD;m%>DMzR}L+1@9k%G<+N|>ID?zP8${tHt=#{Adw(;NEP`M-!750WGbysuHE#T) zT;x;(@&-PKf4rtCJr(DIc8mWB@_x{!U=(~#V75{N?CJO0wV@?n)NqC83fI3o=XfXT zUZ1(HiS6;ntVSHi)CMsjzM9p4dqL-wPPOgEfk`)?rL9u%1Y#U4k!$@#wqcRoNKHU) z)z0iMeMGixf5t}5(sd!Br9SIKpRo{06QA{8ps;d@pP&D6%g>+p5ff{p!9oebrZ3mG zzyg@-Sq24{eD8qMcs<8X+G>FLu6}H5)X#c+3r(K(-QUSJE*04u25n0~P)zLJ>YX_R zt(RN=M&~m5^B7^R!gDPP7K^Oj-_VB1xly*Kf~KK@Tz-2iQ3zitDXBh`Mg1F=kJn+L zdQ>@&uav}O|9$1nVzrOgDp#BNq15emzm0-K+ULuvq4R_pM7qLbUELyZSn!(-l_^kJ zVv-|wY%B}}FawAkDzFY?HroY@7;Ye`lfkgg{HG%|x|w=I&l)+oeYcW`bMRi1t^Glt z%^{%vnB=#9uTHdph61Om?a3zs;6qN?EZ^M9zpTc>RzJ_rtpsuVdQ5jDy+QzJR2b#s z<1?)G_0cJ722s`AEbX!UBuc<*gLko@UEZkV=}0zyc!#pPBm^&W?aeclewXHui|^zHRk(KmjirRBW0 zwKCBXRZXSrg6^o5ruUbj`{Zu$@e%!qt2E6`*4m-f$;mVujx~gMEtXF0Y%W#1&UAe> zZ%mN&bOzmU+CO~>{hUHRX38~Kg7@!lFWRoRCCHW6PMMI>N;*?i{pO5F7bKkqffq$c!x^xW z$l-ccMBMxLE1O__J0`y^e~{G5O}LjscjpUyb~jq1Z<*HyGE|Mx<~hN}VE;^<(&S*o zUUFI4jy+vot@$E_;u0>@J(d-LNRLC(|V>WwK0sl8h~4KOAEL6GPoaTC*TCD{Cbae zKtKRkaA1+74DnW41XVK=5z!hCmT(ljD( zZZFp|aeI!xXJp6lT6+4BR~(e5pC@{WYkG~pR|RRxvv#>n;0%rGN{X-eb1POs zWqfx+$gdPM^qjh^a@Yu8cEyqpmIBNy8(*!D&ypN&~bTi828X zJhIOzU9LH?pSa+?-m&EV&Dv37fHp$O$;lv{@M^`1Z<73~P0s@l()0Zq=SDElh!Wf% z+%KsUp{|U!O_};z9$z1Pvq@=A(=p=Vja-uI!`on!=bz zM}oMypuT$_Ve&IFr*Yii48Xx?I|G=s@r{m&JV%7ludL_#`2ff)M=j<2X(c)@>0~@b z53!Da^C8wy>eP`#@w``(dC65r`QXtA5`wM^ASrzn&h=`o5?FFIKm8#(e zUz!;JOt>833^3UV5HhG)fd~hFXBD&##XX2ekJi0rV3!aR7k3=4D9y;QYYyk-L^rjx z0O)9!<_Ooy0d)C$YB*gxt+=?j3g93}0008Wpvhm5S2Fc;<(FWLh-k^_oNTzi? z0V9L9+DVzNo*r_qd6>`MN+V-X3J%wRn(G6oC=Wa&BO~MG%YW=Q48Or*-OJ^!URCZc zG;a)*1KV2&Sf#1C9%OURj{$a%;n0FhFhk4e|3oBwL!rKP3C z)VBZIpGM#QBeg*Y0Hd_ez!73%Vx&MB43w9?6LBEds=`Yi2E{?ICk1_=u`6v3?dX{8 zmIwA$*0LAow>S3Tszw5cW*iO|!Yu5M|5yf?#er0{|Fw||5V8{f!94$q<*_g*rJcIh4!lP~Ts&Yc;0|aX14@m{cgu7x zbUawF?2CSoK49y57X2+>vhp3;92>2PxW2_LT5hZ6gwRi{_#7a{yI_#E;(^u}pPI@w zsqEiba+_$50J!^sd6X8?falqf6(gjQqoRTK_V!?I&dSP)hUwHKw+g_OP|6rIODHnI zWAt@$@}?}8VWyK&5; z`qeuTERhMGlQI4MhE#UWa(fbJs@+^lltJaNsKOFt(`~U!E;HcwGB-tM*3mM?l_0v- z$`>@M4^ahinz55qtI6?k*XYJ+m(jXo)DWg4j2yi~?+A2S%^>i}zZHGJbl4mm1oU)> z(;|~{7VhaWq;xji0Kc#ssQPipV$PXVr0D4O^vhCoT zYX^;dld;G)0Ito=I~(|FM}d1qPD5n|1y%+hA=N7($j4_)jSLMPBx2nLvRfvOPhIOG z5D0Wf83)mG*;pI{n@C;R7}2n83#dcTF_)Bd2i#fWLtD;a`PbS?BR9geQ<*?6jdd#f zp?@=fzW3{80fAON#kX8?XrRUkvb>3FZ8FHE;mV=1QJMxHAGgSC?<=sL8Xte$NK+($ zaSf9!0T?h6oKBDNK^d>y*2My2fU zLzQ>4fQ|*IML>{&qh4TVFW+S)(%}c4gQ>n(M&|fg6z6g}0e#wo3m6g0`SRs)x%+~U z@5%{KY4P1hQ!U@4e*_Cvl>p);0>A)RvBFs~{z1d3bRu#p!7FDor`)D9832bVpu{1# zE689sfU+qE;vk!94mf;mEs;7{*1k(yc0p5eNDPqs>Z2I2`d-+QWU>L+l|`|;AW2n7Uegm+qJ>6SjRW$OZj zHb7y(VK~$Cv69G8ZyvyaJAm=0=y0)x(exe0&s;_<#5|l@sjet zyX77mebzMP6^pDgAg;6U>pe!j+mTn^t)>InV=hh9gPWoj21`Yc#GbLTwuS=O23?fE zn>A7G5x8me>f^%uF&v+2+>fx`GOGjGkv(=2#H5&JOG^v5xa#dzWU{Y@MbOX`!gqTD zNKumKR6Ic?#>Z}sB@vix1W;?Sh;_6)Y190{{jv7L7A7F#+C}7*xQaaRqJ6^Y(?z zVo7b8syEKJ zsUCM2+yn(P?A=$Q4?I1$0ch5GfTtvZe3EHBLRW=WIDp(zxkxKIJU^`b|9fZYR_Gm& z5hFjh#ol7qy_x%Kb48E#gJ-OB$4wL89IE