From f2a31f71ec9bbf8059a19324fa022434a3ad10e7 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Tue, 30 Jun 2026 22:30:38 -0500 Subject: [PATCH 01/25] some motor control stuff --- .../src/main/java/first/robot/Robot.java | 2 + .../src/main/java/first/robot/Robot.java | 2 + src/content/docs/stage1/kitbot-drivetrain.mdx | 39 +++++++++++++++++++ src/content/docs/stage1/stage1-overview.mdx | 6 +++ 4 files changed, 49 insertions(+) create mode 100644 src/content/docs/stage1/kitbot-drivetrain.mdx create mode 100644 src/content/docs/stage1/stage1-overview.mdx diff --git a/examples/stage1/ctre/solution/src/main/java/first/robot/Robot.java b/examples/stage1/ctre/solution/src/main/java/first/robot/Robot.java index 73934251..dae84695 100644 --- a/examples/stage1/ctre/solution/src/main/java/first/robot/Robot.java +++ b/examples/stage1/ctre/solution/src/main/java/first/robot/Robot.java @@ -26,6 +26,7 @@ */ public class Robot extends OpModeRobot { + // [DriveMotors] private final int leftLeaderID = 0; public TalonFX leftLeader = new TalonFX(leftLeaderID, CANBus.systemcore(0)); private TalonFX leftFollower = new TalonFX(1, CANBus.systemcore(0)); @@ -33,6 +34,7 @@ public class Robot extends OpModeRobot { private final int rightLeaderID = 2; public TalonFX rightLeader = new TalonFX(rightLeaderID, CANBus.systemcore(0)); private TalonFX rightFollower = new TalonFX(3, CANBus.systemcore(0)); + // [/DriveMotors] public TalonFX intakeLauncher = new TalonFX(4, CANBus.systemcore(0)); public TalonFX feeder = new TalonFX(5, CANBus.systemcore(0)); diff --git a/examples/stage1/rev/solution/src/main/java/first/robot/Robot.java b/examples/stage1/rev/solution/src/main/java/first/robot/Robot.java index 545865d2..17f777f6 100644 --- a/examples/stage1/rev/solution/src/main/java/first/robot/Robot.java +++ b/examples/stage1/rev/solution/src/main/java/first/robot/Robot.java @@ -18,10 +18,12 @@ public class Robot extends OpModeRobot { + // [DriveMotors] private SparkMax leftLeader = new SparkMax(0, 0, MotorType.kBrushless); private SparkMax leftFollower = new SparkMax(0, 1, MotorType.kBrushless); private SparkMax rightLeader = new SparkMax(0, 2, MotorType.kBrushless); private SparkMax rightFollower = new SparkMax(0, 3, MotorType.kBrushless); + // [/DriveMotors] private OnboardIMU imu = new OnboardIMU(MountOrientation.FLAT); diff --git a/src/content/docs/stage1/kitbot-drivetrain.mdx b/src/content/docs/stage1/kitbot-drivetrain.mdx new file mode 100644 index 00000000..6b9748d7 --- /dev/null +++ b/src/content/docs/stage1/kitbot-drivetrain.mdx @@ -0,0 +1,39 @@ +--- +title: Kitbot Drivetrain +description: Programing the kitbot drivetrain +--- + +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +# Motor Controllers + +The core of frc programing is telling motors what to do by giving commands to their motor controllers. +Vendors provide classes that can be used to both control and get sensor data from their motor controllers. +While each individual type of motor controller has its own class, motor controllers from the same vendor are +largely the same so this stage will only use the SparkMax for REV code and the TalonFX for CTRE code. + +When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID so the code can +comunicate with the proper controller. For this exercise the motor controllers will have the Ids: +- LeftLeader: CAN Bus 0, CAN ID 0 +- LeftFollower: CAN Bus 0, CAN ID 1 +- RightLeader: CAN Bus 0, CAN ID 2 +- Right Follower: CAN Bus 0, CAN ID 3 + + + + The spark max constructor takes the form of + ```java + SparkMax(int busId, int deviceId, MotorType type) + ``` + Since the Spark Max can control both brushed and brushless motors it's neccesary to specify the type as + MotorType.Brushless for motors like a NEO and MotorType.brushed for motors like a CIM. This results in + the motor construction looking like this. + + ```java stage1/rev/solution/src/main/java/first/robot/Robot.java#DriveMotors + ``` + + + ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#DriveMotors + ``` + + \ No newline at end of file diff --git a/src/content/docs/stage1/stage1-overview.mdx b/src/content/docs/stage1/stage1-overview.mdx new file mode 100644 index 00000000..a629083b --- /dev/null +++ b/src/content/docs/stage1/stage1-overview.mdx @@ -0,0 +1,6 @@ +--- +title: Stage 1 Overview +description: An intro to the 2026 kitbot and the topics covered in this stage +next: stage1/kitbot-drivetrain +--- + From 477fa0123ca36fd2e6457bce54b824a56e67b580 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Fri, 3 Jul 2026 23:16:07 -0500 Subject: [PATCH 02/25] some intro on the drivetrain --- src/content/docs/stage1/kitbot-drivetrain.mdx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/content/docs/stage1/kitbot-drivetrain.mdx b/src/content/docs/stage1/kitbot-drivetrain.mdx index 6b9748d7..ad78b7bc 100644 --- a/src/content/docs/stage1/kitbot-drivetrain.mdx +++ b/src/content/docs/stage1/kitbot-drivetrain.mdx @@ -5,6 +5,14 @@ description: Programing the kitbot drivetrain import { Tabs, TabItem } from '@astrojs/starlight/components'; +# Drivetrain + +The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows +the robot to move similar to a tank by driving the left and right sides at different speeds. For this stage the four drivetrain +motors will be refered to as LeftLeader, LeftFollower, RightLeader, RightFollower. "Becasue the motion of the robot is dependent +on the diference in the velocity of the left and the right side, we can call this a differential drivetrain." <- SUSPECT SENTANCE IMPROVE PLS + + # Motor Controllers The core of frc programing is telling motors what to do by giving commands to their motor controllers. @@ -12,8 +20,8 @@ Vendors provide classes that can be used to both control and get sensor data fro While each individual type of motor controller has its own class, motor controllers from the same vendor are largely the same so this stage will only use the SparkMax for REV code and the TalonFX for CTRE code. -When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID so the code can -comunicate with the proper controller. For this exercise the motor controllers will have the Ids: +When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID are given +in the constructor so the code can comunicate with the proper controller. For this exercise the motor controllers will have the Ids: - LeftLeader: CAN Bus 0, CAN ID 0 - LeftFollower: CAN Bus 0, CAN ID 1 - RightLeader: CAN Bus 0, CAN ID 2 @@ -35,5 +43,8 @@ comunicate with the proper controller. For this exercise the motor controllers w ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#DriveMotors ``` + For the CTRE code the CAN ID of the leader motors are stored as a variable since they will be used latter on. + This helps prevent errors from occuring by ensuring that there is a single source of truth for the corrrect CAN ID. - \ No newline at end of file + + From fe69253986908efecec2dc8cfd88d4ec5be4c5e3 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Sun, 5 Jul 2026 15:36:06 -0500 Subject: [PATCH 03/25] motor config --- .../src/main/java/first/robot/Robot.java | 2 ++ .../src/main/java/first/robot/Robot.java | 3 +- src/content/docs/stage1/kitbot-drivetrain.mdx | 30 +++++++++++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/examples/stage1/ctre/solution/src/main/java/first/robot/Robot.java b/examples/stage1/ctre/solution/src/main/java/first/robot/Robot.java index dae84695..c8c6c180 100644 --- a/examples/stage1/ctre/solution/src/main/java/first/robot/Robot.java +++ b/examples/stage1/ctre/solution/src/main/java/first/robot/Robot.java @@ -53,6 +53,7 @@ public class Robot extends OpModeRobot { * initialization code. */ public Robot() { + // [MotorConfig] var leftConfig = new TalonFXConfiguration(); leftConfig.MotorOutput.withInverted(InvertedValue.Clockwise_Positive); leftLeader.getConfigurator().apply(leftConfig); @@ -63,6 +64,7 @@ public Robot() { leftFollower.setControl(new Follower(leftLeaderID, MotorAlignmentValue.Aligned)); rightFollower.setControl(new Follower(rightLeaderID, MotorAlignmentValue.Aligned)); + // [/MotorConfig] } @Override diff --git a/examples/stage1/rev/solution/src/main/java/first/robot/Robot.java b/examples/stage1/rev/solution/src/main/java/first/robot/Robot.java index 17f777f6..08ce3020 100644 --- a/examples/stage1/rev/solution/src/main/java/first/robot/Robot.java +++ b/examples/stage1/rev/solution/src/main/java/first/robot/Robot.java @@ -38,7 +38,7 @@ public class Robot extends OpModeRobot { new DifferentialDrive(leftLeader::setThrottle, rightLeader::setThrottle); public Robot() { - + // [MotorConfig] var leftConfig = new SparkMaxConfig().inverted(true); leftLeader.configure(leftConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); leftFollower.configure( @@ -48,6 +48,7 @@ public Robot() { rightLeader.configure(rightConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); rightFollower.configure( rightConfig.follow(rightLeader), ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); + // [/MotorConfig] } @Override diff --git a/src/content/docs/stage1/kitbot-drivetrain.mdx b/src/content/docs/stage1/kitbot-drivetrain.mdx index ad78b7bc..41fa515c 100644 --- a/src/content/docs/stage1/kitbot-drivetrain.mdx +++ b/src/content/docs/stage1/kitbot-drivetrain.mdx @@ -8,9 +8,9 @@ import { Tabs, TabItem } from '@astrojs/starlight/components'; # Drivetrain The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows -the robot to move similar to a tank by driving the left and right sides at different speeds. For this stage the four drivetrain -motors will be refered to as LeftLeader, LeftFollower, RightLeader, RightFollower. "Becasue the motion of the robot is dependent -on the diference in the velocity of the left and the right side, we can call this a differential drivetrain." <- SUSPECT SENTANCE IMPROVE PLS +the robot to move similar to a tank by driving the left and right sides at different speeds. "Becasue the motion of the robot is dependent +on the diference in the velocity of the left and the right side, we can call this a differential drivetrain." < SUSPECT SENTANCE IMPROVE PLS +For this stage the four drivetrain motors will be refered to as LeftLeader, LeftFollower, RightLeader, RightFollower. # Motor Controllers @@ -48,3 +48,27 @@ in the constructor so the code can comunicate with the proper controller. For th +Motor Controllers have many settings that can be changed to ensure the motors are driven correctly < BAD +Vendors provide software like REV Client and Pheonix Tuner X to run and configure their devices from a computer; +however, it is recomended to configure devices through code to ensure that all motor controllers are properly configured. +This is especially useful when a motor controler needs to be swaped since the new motor controller may have configurations +that need to be removed and the proper configurations need to be added. Under time pressure it can be easy to forget all +of the configurations that need to be added and their proper values. + +For this section only the motor controller's invert setting will be configured. This setting controls what direction +the motor spins when the motor control is given a command with a positive sign. + +Since there are 2 motors on each side of the drivetrain, its important to ensure that the each of the motors on a side +move in sync with eachother. This can be accomplished by telling one of the motor controllers to follow the other. This +tells the Follower to listen to the commands given to the Leader and is why we gave one motor the name Leader and the other Follower. + + + + ```java stage1/rev/solution/src/main/java/first/robot/Robot.java#MotorConfig + ``` + + + ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#MotorConfig + ``` + + \ No newline at end of file From 9fa7204690cfd52460f28b12efd5fffecb75a029 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Tue, 30 Jun 2026 22:30:38 -0500 Subject: [PATCH 04/25] some motor control stuff --- .../ctre/src/main/java/first/robot/Robot.java | 2 + .../rev/src/main/java/first/robot/Robot.java | 2 + src/content/docs/stage1/kitbot-drivetrain.mdx | 39 +++++++++++++++++++ src/content/docs/stage1/stage1-overview.mdx | 6 +++ 4 files changed, 49 insertions(+) create mode 100644 src/content/docs/stage1/kitbot-drivetrain.mdx create mode 100644 src/content/docs/stage1/stage1-overview.mdx diff --git a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java index 8625e5c8..32576216 100644 --- a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java @@ -27,6 +27,7 @@ */ public class Robot extends OpModeRobot { + // [DriveMotors] private final int leftLeaderID = 0; public TalonFX leftLeader = new TalonFX(leftLeaderID, CANBus.systemcore(0)); private TalonFX leftFollower = new TalonFX(1, CANBus.systemcore(0)); @@ -34,6 +35,7 @@ public class Robot extends OpModeRobot { private final int rightLeaderID = 2; public TalonFX rightLeader = new TalonFX(rightLeaderID, CANBus.systemcore(0)); private TalonFX rightFollower = new TalonFX(3, CANBus.systemcore(0)); + // [/DriveMotors] public TalonFX intakeLauncher = new TalonFX(4, CANBus.systemcore(0)); public TalonFX feeder = new TalonFX(5, CANBus.systemcore(0)); diff --git a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java index 65dcdd60..8fd94d16 100644 --- a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java @@ -19,10 +19,12 @@ public class Robot extends OpModeRobot { + // [DriveMotors] private SparkMax leftLeader = new SparkMax(0, 0, MotorType.kBrushless); private SparkMax leftFollower = new SparkMax(0, 1, MotorType.kBrushless); private SparkMax rightLeader = new SparkMax(0, 2, MotorType.kBrushless); private SparkMax rightFollower = new SparkMax(0, 3, MotorType.kBrushless); + // [/DriveMotors] private OnboardIMU imu = new OnboardIMU(MountOrientation.FLAT); diff --git a/src/content/docs/stage1/kitbot-drivetrain.mdx b/src/content/docs/stage1/kitbot-drivetrain.mdx new file mode 100644 index 00000000..6b9748d7 --- /dev/null +++ b/src/content/docs/stage1/kitbot-drivetrain.mdx @@ -0,0 +1,39 @@ +--- +title: Kitbot Drivetrain +description: Programing the kitbot drivetrain +--- + +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +# Motor Controllers + +The core of frc programing is telling motors what to do by giving commands to their motor controllers. +Vendors provide classes that can be used to both control and get sensor data from their motor controllers. +While each individual type of motor controller has its own class, motor controllers from the same vendor are +largely the same so this stage will only use the SparkMax for REV code and the TalonFX for CTRE code. + +When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID so the code can +comunicate with the proper controller. For this exercise the motor controllers will have the Ids: +- LeftLeader: CAN Bus 0, CAN ID 0 +- LeftFollower: CAN Bus 0, CAN ID 1 +- RightLeader: CAN Bus 0, CAN ID 2 +- Right Follower: CAN Bus 0, CAN ID 3 + + + + The spark max constructor takes the form of + ```java + SparkMax(int busId, int deviceId, MotorType type) + ``` + Since the Spark Max can control both brushed and brushless motors it's neccesary to specify the type as + MotorType.Brushless for motors like a NEO and MotorType.brushed for motors like a CIM. This results in + the motor construction looking like this. + + ```java stage1/rev/solution/src/main/java/first/robot/Robot.java#DriveMotors + ``` + + + ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#DriveMotors + ``` + + \ No newline at end of file diff --git a/src/content/docs/stage1/stage1-overview.mdx b/src/content/docs/stage1/stage1-overview.mdx new file mode 100644 index 00000000..a629083b --- /dev/null +++ b/src/content/docs/stage1/stage1-overview.mdx @@ -0,0 +1,6 @@ +--- +title: Stage 1 Overview +description: An intro to the 2026 kitbot and the topics covered in this stage +next: stage1/kitbot-drivetrain +--- + From 8fed7ed121fa4a18bfae77706740bae9e7be7325 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Fri, 3 Jul 2026 23:16:07 -0500 Subject: [PATCH 05/25] some intro on the drivetrain --- src/content/docs/stage1/kitbot-drivetrain.mdx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/content/docs/stage1/kitbot-drivetrain.mdx b/src/content/docs/stage1/kitbot-drivetrain.mdx index 6b9748d7..ad78b7bc 100644 --- a/src/content/docs/stage1/kitbot-drivetrain.mdx +++ b/src/content/docs/stage1/kitbot-drivetrain.mdx @@ -5,6 +5,14 @@ description: Programing the kitbot drivetrain import { Tabs, TabItem } from '@astrojs/starlight/components'; +# Drivetrain + +The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows +the robot to move similar to a tank by driving the left and right sides at different speeds. For this stage the four drivetrain +motors will be refered to as LeftLeader, LeftFollower, RightLeader, RightFollower. "Becasue the motion of the robot is dependent +on the diference in the velocity of the left and the right side, we can call this a differential drivetrain." <- SUSPECT SENTANCE IMPROVE PLS + + # Motor Controllers The core of frc programing is telling motors what to do by giving commands to their motor controllers. @@ -12,8 +20,8 @@ Vendors provide classes that can be used to both control and get sensor data fro While each individual type of motor controller has its own class, motor controllers from the same vendor are largely the same so this stage will only use the SparkMax for REV code and the TalonFX for CTRE code. -When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID so the code can -comunicate with the proper controller. For this exercise the motor controllers will have the Ids: +When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID are given +in the constructor so the code can comunicate with the proper controller. For this exercise the motor controllers will have the Ids: - LeftLeader: CAN Bus 0, CAN ID 0 - LeftFollower: CAN Bus 0, CAN ID 1 - RightLeader: CAN Bus 0, CAN ID 2 @@ -35,5 +43,8 @@ comunicate with the proper controller. For this exercise the motor controllers w ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#DriveMotors ``` + For the CTRE code the CAN ID of the leader motors are stored as a variable since they will be used latter on. + This helps prevent errors from occuring by ensuring that there is a single source of truth for the corrrect CAN ID. - \ No newline at end of file + + From 00743e34befc37902dbcda17be0b355e8c55114f Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Sun, 5 Jul 2026 15:36:06 -0500 Subject: [PATCH 06/25] motor config --- .../ctre/src/main/java/first/robot/Robot.java | 2 ++ .../rev/src/main/java/first/robot/Robot.java | 3 +- src/content/docs/stage1/kitbot-drivetrain.mdx | 30 +++++++++++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java index 32576216..72aa7100 100644 --- a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java @@ -55,6 +55,7 @@ public class Robot extends OpModeRobot { * initialization code. */ public Robot() { + // [MotorConfig] var leftConfig = new TalonFXConfiguration(); leftConfig.MotorOutput.withInverted(InvertedValue.Clockwise_Positive); leftLeader.getConfigurator().apply(leftConfig); @@ -65,6 +66,7 @@ public Robot() { leftFollower.setControl(new Follower(leftLeaderID, MotorAlignmentValue.Aligned)); rightFollower.setControl(new Follower(rightLeaderID, MotorAlignmentValue.Aligned)); + // [/MotorConfig] } @Override diff --git a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java index 8fd94d16..a0e0069c 100644 --- a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java @@ -40,7 +40,7 @@ public class Robot extends OpModeRobot { new DifferentialDrive(leftLeader::setThrottle, rightLeader::setThrottle); public Robot() { - + // [MotorConfig] var leftConfig = new SparkMaxConfig().inverted(true); leftLeader.configure( leftConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); @@ -56,6 +56,7 @@ public Robot() { rightConfig.follow(rightLeader), ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); + // [/MotorConfig] } @Override diff --git a/src/content/docs/stage1/kitbot-drivetrain.mdx b/src/content/docs/stage1/kitbot-drivetrain.mdx index ad78b7bc..41fa515c 100644 --- a/src/content/docs/stage1/kitbot-drivetrain.mdx +++ b/src/content/docs/stage1/kitbot-drivetrain.mdx @@ -8,9 +8,9 @@ import { Tabs, TabItem } from '@astrojs/starlight/components'; # Drivetrain The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows -the robot to move similar to a tank by driving the left and right sides at different speeds. For this stage the four drivetrain -motors will be refered to as LeftLeader, LeftFollower, RightLeader, RightFollower. "Becasue the motion of the robot is dependent -on the diference in the velocity of the left and the right side, we can call this a differential drivetrain." <- SUSPECT SENTANCE IMPROVE PLS +the robot to move similar to a tank by driving the left and right sides at different speeds. "Becasue the motion of the robot is dependent +on the diference in the velocity of the left and the right side, we can call this a differential drivetrain." < SUSPECT SENTANCE IMPROVE PLS +For this stage the four drivetrain motors will be refered to as LeftLeader, LeftFollower, RightLeader, RightFollower. # Motor Controllers @@ -48,3 +48,27 @@ in the constructor so the code can comunicate with the proper controller. For th +Motor Controllers have many settings that can be changed to ensure the motors are driven correctly < BAD +Vendors provide software like REV Client and Pheonix Tuner X to run and configure their devices from a computer; +however, it is recomended to configure devices through code to ensure that all motor controllers are properly configured. +This is especially useful when a motor controler needs to be swaped since the new motor controller may have configurations +that need to be removed and the proper configurations need to be added. Under time pressure it can be easy to forget all +of the configurations that need to be added and their proper values. + +For this section only the motor controller's invert setting will be configured. This setting controls what direction +the motor spins when the motor control is given a command with a positive sign. + +Since there are 2 motors on each side of the drivetrain, its important to ensure that the each of the motors on a side +move in sync with eachother. This can be accomplished by telling one of the motor controllers to follow the other. This +tells the Follower to listen to the commands given to the Leader and is why we gave one motor the name Leader and the other Follower. + + + + ```java stage1/rev/solution/src/main/java/first/robot/Robot.java#MotorConfig + ``` + + + ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#MotorConfig + ``` + + \ No newline at end of file From 643d5f0469078341f70975915ed52199afea0d8a Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Thu, 30 Jul 2026 10:38:16 -0500 Subject: [PATCH 07/25] reorg --- src/content/docs/stage1/stage1-overview.mdx | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 src/content/docs/stage1/stage1-overview.mdx diff --git a/src/content/docs/stage1/stage1-overview.mdx b/src/content/docs/stage1/stage1-overview.mdx deleted file mode 100644 index a629083b..00000000 --- a/src/content/docs/stage1/stage1-overview.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Stage 1 Overview -description: An intro to the 2026 kitbot and the topics covered in this stage -next: stage1/kitbot-drivetrain ---- - From f9035cc7042af4b835a2460451f2204abc0e51e7 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Thu, 30 Jul 2026 10:41:26 -0500 Subject: [PATCH 08/25] reorg part 2 --- src/content/docs/stage1/kitbot-drivetrain.mdx | 74 ------------------- 1 file changed, 74 deletions(-) delete mode 100644 src/content/docs/stage1/kitbot-drivetrain.mdx diff --git a/src/content/docs/stage1/kitbot-drivetrain.mdx b/src/content/docs/stage1/kitbot-drivetrain.mdx deleted file mode 100644 index 41fa515c..00000000 --- a/src/content/docs/stage1/kitbot-drivetrain.mdx +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Kitbot Drivetrain -description: Programing the kitbot drivetrain ---- - -import { Tabs, TabItem } from '@astrojs/starlight/components'; - -# Drivetrain - -The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows -the robot to move similar to a tank by driving the left and right sides at different speeds. "Becasue the motion of the robot is dependent -on the diference in the velocity of the left and the right side, we can call this a differential drivetrain." < SUSPECT SENTANCE IMPROVE PLS -For this stage the four drivetrain motors will be refered to as LeftLeader, LeftFollower, RightLeader, RightFollower. - - -# Motor Controllers - -The core of frc programing is telling motors what to do by giving commands to their motor controllers. -Vendors provide classes that can be used to both control and get sensor data from their motor controllers. -While each individual type of motor controller has its own class, motor controllers from the same vendor are -largely the same so this stage will only use the SparkMax for REV code and the TalonFX for CTRE code. - -When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID are given -in the constructor so the code can comunicate with the proper controller. For this exercise the motor controllers will have the Ids: -- LeftLeader: CAN Bus 0, CAN ID 0 -- LeftFollower: CAN Bus 0, CAN ID 1 -- RightLeader: CAN Bus 0, CAN ID 2 -- Right Follower: CAN Bus 0, CAN ID 3 - - - - The spark max constructor takes the form of - ```java - SparkMax(int busId, int deviceId, MotorType type) - ``` - Since the Spark Max can control both brushed and brushless motors it's neccesary to specify the type as - MotorType.Brushless for motors like a NEO and MotorType.brushed for motors like a CIM. This results in - the motor construction looking like this. - - ```java stage1/rev/solution/src/main/java/first/robot/Robot.java#DriveMotors - ``` - - - ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#DriveMotors - ``` - For the CTRE code the CAN ID of the leader motors are stored as a variable since they will be used latter on. - This helps prevent errors from occuring by ensuring that there is a single source of truth for the corrrect CAN ID. - - - -Motor Controllers have many settings that can be changed to ensure the motors are driven correctly < BAD -Vendors provide software like REV Client and Pheonix Tuner X to run and configure their devices from a computer; -however, it is recomended to configure devices through code to ensure that all motor controllers are properly configured. -This is especially useful when a motor controler needs to be swaped since the new motor controller may have configurations -that need to be removed and the proper configurations need to be added. Under time pressure it can be easy to forget all -of the configurations that need to be added and their proper values. - -For this section only the motor controller's invert setting will be configured. This setting controls what direction -the motor spins when the motor control is given a command with a positive sign. - -Since there are 2 motors on each side of the drivetrain, its important to ensure that the each of the motors on a side -move in sync with eachother. This can be accomplished by telling one of the motor controllers to follow the other. This -tells the Follower to listen to the commands given to the Leader and is why we gave one motor the name Leader and the other Follower. - - - - ```java stage1/rev/solution/src/main/java/first/robot/Robot.java#MotorConfig - ``` - - - ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#MotorConfig - ``` - - \ No newline at end of file From cd29d7a4af82e91eb9460c73617bf63a83f510ed Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Thu, 30 Jul 2026 10:47:36 -0500 Subject: [PATCH 09/25] reorg part 3 --- .../stage1/stage1a/kitbot-drivetrain | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain new file mode 100644 index 00000000..41fa515c --- /dev/null +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain @@ -0,0 +1,74 @@ +--- +title: Kitbot Drivetrain +description: Programing the kitbot drivetrain +--- + +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +# Drivetrain + +The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows +the robot to move similar to a tank by driving the left and right sides at different speeds. "Becasue the motion of the robot is dependent +on the diference in the velocity of the left and the right side, we can call this a differential drivetrain." < SUSPECT SENTANCE IMPROVE PLS +For this stage the four drivetrain motors will be refered to as LeftLeader, LeftFollower, RightLeader, RightFollower. + + +# Motor Controllers + +The core of frc programing is telling motors what to do by giving commands to their motor controllers. +Vendors provide classes that can be used to both control and get sensor data from their motor controllers. +While each individual type of motor controller has its own class, motor controllers from the same vendor are +largely the same so this stage will only use the SparkMax for REV code and the TalonFX for CTRE code. + +When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID are given +in the constructor so the code can comunicate with the proper controller. For this exercise the motor controllers will have the Ids: +- LeftLeader: CAN Bus 0, CAN ID 0 +- LeftFollower: CAN Bus 0, CAN ID 1 +- RightLeader: CAN Bus 0, CAN ID 2 +- Right Follower: CAN Bus 0, CAN ID 3 + + + + The spark max constructor takes the form of + ```java + SparkMax(int busId, int deviceId, MotorType type) + ``` + Since the Spark Max can control both brushed and brushless motors it's neccesary to specify the type as + MotorType.Brushless for motors like a NEO and MotorType.brushed for motors like a CIM. This results in + the motor construction looking like this. + + ```java stage1/rev/solution/src/main/java/first/robot/Robot.java#DriveMotors + ``` + + + ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#DriveMotors + ``` + For the CTRE code the CAN ID of the leader motors are stored as a variable since they will be used latter on. + This helps prevent errors from occuring by ensuring that there is a single source of truth for the corrrect CAN ID. + + + +Motor Controllers have many settings that can be changed to ensure the motors are driven correctly < BAD +Vendors provide software like REV Client and Pheonix Tuner X to run and configure their devices from a computer; +however, it is recomended to configure devices through code to ensure that all motor controllers are properly configured. +This is especially useful when a motor controler needs to be swaped since the new motor controller may have configurations +that need to be removed and the proper configurations need to be added. Under time pressure it can be easy to forget all +of the configurations that need to be added and their proper values. + +For this section only the motor controller's invert setting will be configured. This setting controls what direction +the motor spins when the motor control is given a command with a positive sign. + +Since there are 2 motors on each side of the drivetrain, its important to ensure that the each of the motors on a side +move in sync with eachother. This can be accomplished by telling one of the motor controllers to follow the other. This +tells the Follower to listen to the commands given to the Leader and is why we gave one motor the name Leader and the other Follower. + + + + ```java stage1/rev/solution/src/main/java/first/robot/Robot.java#MotorConfig + ``` + + + ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#MotorConfig + ``` + + \ No newline at end of file From 13caf1472a8250d726b2f6925054f49668f9d027 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Thu, 30 Jul 2026 12:29:37 -0500 Subject: [PATCH 10/25] improve writing --- .../ctre/src/main/java/first/robot/Robot.java | 19 ++- .../rev/src/main/java/first/robot/Robot.java | 20 ++- src/config/sidebarConfig.ts | 4 + .../stage1/stage1a/kitbot-drivetrain | 74 ---------- .../stage1/stage1a/kitbot-drivetrain.mdx | 136 ++++++++++++++++++ .../stage1/stage1a/stage-overview.mdx | 2 +- 6 files changed, 171 insertions(+), 84 deletions(-) delete mode 100644 src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain create mode 100644 src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx diff --git a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java index 72aa7100..a3002cac 100644 --- a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java @@ -27,15 +27,17 @@ */ public class Robot extends OpModeRobot { - // [DriveMotors] + // [DriveMotorsLeft] private final int leftLeaderID = 0; public TalonFX leftLeader = new TalonFX(leftLeaderID, CANBus.systemcore(0)); private TalonFX leftFollower = new TalonFX(1, CANBus.systemcore(0)); + // [/DriveMotorsLeft] + // [DriveMotorsRight] private final int rightLeaderID = 2; public TalonFX rightLeader = new TalonFX(rightLeaderID, CANBus.systemcore(0)); private TalonFX rightFollower = new TalonFX(3, CANBus.systemcore(0)); - // [/DriveMotors] + // [/DriveMotorsRight] public TalonFX intakeLauncher = new TalonFX(4, CANBus.systemcore(0)); public TalonFX feeder = new TalonFX(5, CANBus.systemcore(0)); @@ -55,16 +57,25 @@ public class Robot extends OpModeRobot { * initialization code. */ public Robot() { - // [MotorConfig] + // [MotorConfigCreationLeft] var leftConfig = new TalonFXConfiguration(); + // [/MotorConfigCreationLeft] + // [MotorConfigSetLeft] leftConfig.MotorOutput.withInverted(InvertedValue.Clockwise_Positive); + // [/MotorConfigSetLeft] + // [MotorConfigLeft] leftLeader.getConfigurator().apply(leftConfig); + leftFollower.getConfigurator().apply(leftConfig); + + leftFollower.setControl(new Follower(leftLeaderID, MotorAlignmentValue.Aligned)); + // [/MotorConfigLeft] + // [MotorConfig] var rightConfig = new TalonFXConfiguration(); rightConfig.MotorOutput.withInverted(InvertedValue.CounterClockwise_Positive); rightLeader.getConfigurator().apply(rightConfig); + rightFollower.getConfigurator().apply(leftConfig); - leftFollower.setControl(new Follower(leftLeaderID, MotorAlignmentValue.Aligned)); rightFollower.setControl(new Follower(rightLeaderID, MotorAlignmentValue.Aligned)); // [/MotorConfig] } diff --git a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java index a0e0069c..96514e2e 100644 --- a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java @@ -19,12 +19,14 @@ public class Robot extends OpModeRobot { - // [DriveMotors] + // [DriveMotorsLeft] private SparkMax leftLeader = new SparkMax(0, 0, MotorType.kBrushless); private SparkMax leftFollower = new SparkMax(0, 1, MotorType.kBrushless); + // [/DriveMotorsLeft] + // [DriveMotorsRight] private SparkMax rightLeader = new SparkMax(0, 2, MotorType.kBrushless); private SparkMax rightFollower = new SparkMax(0, 3, MotorType.kBrushless); - // [/DriveMotors] + // [/DriveMotorsRight] private OnboardIMU imu = new OnboardIMU(MountOrientation.FLAT); @@ -40,16 +42,24 @@ public class Robot extends OpModeRobot { new DifferentialDrive(leftLeader::setThrottle, rightLeader::setThrottle); public Robot() { - // [MotorConfig] - var leftConfig = new SparkMaxConfig().inverted(true); + // [MotorConfigCreationLeft] + var leftConfig = new SparkMaxConfig(); + // [/MotorConfigCreationLeft] + // [MotorConfigSetLeft] + leftConfig.inverted(true); + // [/MotorConfigSetLeft] + // [MotorConfigLeft] leftLeader.configure( leftConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); leftFollower.configure( leftConfig.follow(leftLeader), ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); + // [/MotorConfigLeft] - var rightConfig = new SparkMaxConfig().inverted(false); + // [MotorConfig] + var rightConfig = new SparkMaxConfig(); + rightConfig.inverted(false); rightLeader.configure( rightConfig, ResetMode.kResetSafeParameters, PersistMode.kPersistParameters); rightFollower.configure( diff --git a/src/config/sidebarConfig.ts b/src/config/sidebarConfig.ts index bc56f1ed..e46dc166 100644 --- a/src/config/sidebarConfig.ts +++ b/src/config/sidebarConfig.ts @@ -110,6 +110,10 @@ export const sidebarSections: Record = { label: 'Stage 1A Introduction', slug: 'learning-course/stage1/stage1a/stage-overview', }, + { + label: 'Kitbot Drivetrain', + slug:'learning-course/stage1/stage1a/kitbot-drivetrain' + }, // { // label: 'TBD', // slug: 'stage-1a-commands/the-command-body', diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain deleted file mode 100644 index 41fa515c..00000000 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Kitbot Drivetrain -description: Programing the kitbot drivetrain ---- - -import { Tabs, TabItem } from '@astrojs/starlight/components'; - -# Drivetrain - -The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows -the robot to move similar to a tank by driving the left and right sides at different speeds. "Becasue the motion of the robot is dependent -on the diference in the velocity of the left and the right side, we can call this a differential drivetrain." < SUSPECT SENTANCE IMPROVE PLS -For this stage the four drivetrain motors will be refered to as LeftLeader, LeftFollower, RightLeader, RightFollower. - - -# Motor Controllers - -The core of frc programing is telling motors what to do by giving commands to their motor controllers. -Vendors provide classes that can be used to both control and get sensor data from their motor controllers. -While each individual type of motor controller has its own class, motor controllers from the same vendor are -largely the same so this stage will only use the SparkMax for REV code and the TalonFX for CTRE code. - -When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID are given -in the constructor so the code can comunicate with the proper controller. For this exercise the motor controllers will have the Ids: -- LeftLeader: CAN Bus 0, CAN ID 0 -- LeftFollower: CAN Bus 0, CAN ID 1 -- RightLeader: CAN Bus 0, CAN ID 2 -- Right Follower: CAN Bus 0, CAN ID 3 - - - - The spark max constructor takes the form of - ```java - SparkMax(int busId, int deviceId, MotorType type) - ``` - Since the Spark Max can control both brushed and brushless motors it's neccesary to specify the type as - MotorType.Brushless for motors like a NEO and MotorType.brushed for motors like a CIM. This results in - the motor construction looking like this. - - ```java stage1/rev/solution/src/main/java/first/robot/Robot.java#DriveMotors - ``` - - - ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#DriveMotors - ``` - For the CTRE code the CAN ID of the leader motors are stored as a variable since they will be used latter on. - This helps prevent errors from occuring by ensuring that there is a single source of truth for the corrrect CAN ID. - - - -Motor Controllers have many settings that can be changed to ensure the motors are driven correctly < BAD -Vendors provide software like REV Client and Pheonix Tuner X to run and configure their devices from a computer; -however, it is recomended to configure devices through code to ensure that all motor controllers are properly configured. -This is especially useful when a motor controler needs to be swaped since the new motor controller may have configurations -that need to be removed and the proper configurations need to be added. Under time pressure it can be easy to forget all -of the configurations that need to be added and their proper values. - -For this section only the motor controller's invert setting will be configured. This setting controls what direction -the motor spins when the motor control is given a command with a positive sign. - -Since there are 2 motors on each side of the drivetrain, its important to ensure that the each of the motors on a side -move in sync with eachother. This can be accomplished by telling one of the motor controllers to follow the other. This -tells the Follower to listen to the commands given to the Leader and is why we gave one motor the name Leader and the other Follower. - - - - ```java stage1/rev/solution/src/main/java/first/robot/Robot.java#MotorConfig - ``` - - - ```java stage1/ctre/solution/src/main/java/first/robot/Robot.java#MotorConfig - ``` - - \ No newline at end of file diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx new file mode 100644 index 00000000..fd3d3cf7 --- /dev/null +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -0,0 +1,136 @@ +--- +title: Kitbot Drivetrain +description: Programing the kitbot drivetrain +prev: stage-overview +next: false +--- + +import { Tabs, TabItem } from '@astrojs/starlight/components'; + +# Drivetrain + +The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows +the robot to move similar to a tank by driving the left and right sides at different speeds. +For this stage the four drivetrain motors will be refered to as `leftLeader`, `leftFollower`, `rightLeader`, `rightFollower`. + +# Motor Controllers +The core of frc programing is controlling motors. This can be done by giving commands to their motor controllers. +Vendors provide classes that can be used to both control and get sensor data from their motor controllers. +While each individual type of motor controller has its own class, motor controllers from the same vendor are +mostly interacted with in the same way so this stage will only use the `SparkMax` for REV code and the `TalonFX` for CTRE code. + +When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID are given +in the constructor so the code can comunicate with the proper controller. For this exercise the motor controllers will have the Ids: +- `leftLeader`: CAN Bus 0, CAN ID 0 +- `leftFollower`: CAN Bus 0, CAN ID 1 +- `rightLeader`: CAN Bus 0, CAN ID 2 +- `rightFollower`: CAN Bus 0, CAN ID 3 + +This is how the motor controller objects for the left motors will look. + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DriveMotorsLeft + ``` + For the CTRE code the CAN ID of the leader motors are stored as a variable since they will be used latter on to tell the follower what motor controller to follow. + This helps prevent errors from occuring by ensuring that there is a single source of truth for the corrrect CAN ID. + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DriveMotorsLeft + ``` + Since the Spark Max can control both brushed and brushless motors it's neccesary to specify the type as `MotorType.kBrushless` for motors like a NEO and `MotorType.kBrushed` for motors like a CIM. + + + +Now try creating the right motor controllers on your own. +
+ Solution + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DriveMotorsRight + ``` + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DriveMotorsRight + ``` + + +
+ +# Configuration +Motor Controllers have many settings that can be changed. +Vendors provide software like REV Hardware Client and Pheonix Tuner X to run and configure their devices from a computer; +however, it is recomended to configure devices through code to ensure that all motor controllers are properly configured. +This is especially useful because it can be easy to forget all of the configurations that need to be added and their proper values. + +For this section only the motor controller's invert setting will be configured. This setting controls what direction +the motor spins when the motor control is given a command with a positive speed. + +Since there are 2 motors on each side of the drivetrain, its important to ensure that the each of the motors on a side +move in sync with eachother. This can be accomplished by telling one of the motor controllers to follow the other. This +tells the Follower to listen to the commands given to the Leader and is why one of the motors is named Leader and the other Follower. + +Motor Controllers are configured by first creating a motor controller configuration object. +This object stores the configuration so it can be changed and shared across different Motor Controllers. + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#MotorConfigCreationLeft + ``` + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#MotorConfigCreationLeft + ``` + + + +Next, settings can be changed from their default by calling various functions on the configuration object with their new values. +For the left motors, the invert setting will be true for REV code and Clockwise_Positive for CTRE code. +For the right motors the value will be the opposite. + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#MotorConfigSetLeft + ``` + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#MotorConfigSetLeft + ``` + + + +Finally, the configuration object gets given to the motor controller object. +It's important to remember that settings only get changed when the configuration gets given to the motor controller. + + + + For CTRE Motor Controllers, becoming a follower is a `ControlRequest` instead of a configuration. + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#MotorConfigLeft + ``` + + + For REV Motor Controllers, becoming a follower is a configuration so the follower setting gets changed before being applied to the follower motor using the leader motor as the function parameter. + This must happen after the configuration is applied to the Leader so the motor controller doesn't want to follow itself. + `ResetMode.kResetSafeParameters` gets to tell the motor controller to reset all unchanged configurations to their default value. + This prevents old configurations from being left on the controller. + `PersistMode.kPersistParameters` is used so the configuration gets saved on the motor control so it persists even after power is removed. + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#MotorConfigLeft + ``` + + + +Now try configuring the right motor controllers on your own. Remember that some of the configurations may be different. +
+ Solution + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#MotorConfig + ``` + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#MotorConfig + ``` + + +
\ No newline at end of file diff --git a/src/content/docs/learning-course/stage1/stage1a/stage-overview.mdx b/src/content/docs/learning-course/stage1/stage1a/stage-overview.mdx index 80c5a487..5c41d044 100644 --- a/src/content/docs/learning-course/stage1/stage1a/stage-overview.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/stage-overview.mdx @@ -2,7 +2,7 @@ title: Stage 1A Overview description: An overview of Stage 1A prev: ../stage-overview -next: false +next: kitbot-drivetrain --- import YouTube from '../../../../../components/YouTube.astro'; From 416682c4c0a72f8f42d7f2cdd6cf20462a58f8e0 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Thu, 30 Jul 2026 14:59:21 -0500 Subject: [PATCH 11/25] apply suggestions --- .../stage1/stage1a/kitbot-drivetrain.mdx | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index fd3d3cf7..57352071 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -11,16 +11,16 @@ import { Tabs, TabItem } from '@astrojs/starlight/components'; The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows the robot to move similar to a tank by driving the left and right sides at different speeds. -For this stage the four drivetrain motors will be refered to as `leftLeader`, `leftFollower`, `rightLeader`, `rightFollower`. +For this stage, the four drivetrain motors will be referred to as `leftLeader`, `leftFollower`, `rightLeader`, `rightFollower`. # Motor Controllers The core of frc programing is controlling motors. This can be done by giving commands to their motor controllers. -Vendors provide classes that can be used to both control and get sensor data from their motor controllers. +Vendors, such as REV or CTRE, provide classes that can be used to both control and get sensor data from their motor controllers. While each individual type of motor controller has its own class, motor controllers from the same vendor are mostly interacted with in the same way so this stage will only use the `SparkMax` for REV code and the `TalonFX` for CTRE code. When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID are given -in the constructor so the code can comunicate with the proper controller. For this exercise the motor controllers will have the Ids: +in the constructor so the code can communicate with the proper controller. For this exercise the motor controllers will have the IDs: - `leftLeader`: CAN Bus 0, CAN ID 0 - `leftFollower`: CAN Bus 0, CAN ID 1 - `rightLeader`: CAN Bus 0, CAN ID 2 @@ -32,13 +32,15 @@ This is how the motor controller objects for the left motors will look. ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DriveMotorsLeft ``` - For the CTRE code the CAN ID of the leader motors are stored as a variable since they will be used latter on to tell the follower what motor controller to follow. +For the CTRE code, the CAN ID of the leader motors are stored as a variable since they will be used later on to tell the follower what motor controller to follow. This helps prevent errors from occuring by ensuring that there is a single source of truth for the corrrect CAN ID. ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DriveMotorsLeft ``` - Since the Spark Max can control both brushed and brushless motors it's neccesary to specify the type as `MotorType.kBrushless` for motors like a NEO and `MotorType.kBrushed` for motors like a CIM. + Since the Spark Max can control both brushed and brushless motors it's necessary to specify the type as `MotorType.kBrushless` for motors like a NEO and `MotorType.kBrushed` for motors like a CIM. + +When writing code for a real robot, make sure your motor type is set correctly! Setting a NEO to `MotorType.kBrushed` may cause unintended or unwanted effects. @@ -56,19 +58,17 @@ Now try creating the right motor controllers on your own. - -# Configuration +Motor Controllers have many settings that can be changed such as IDs, motor types, and limits. +Vendors provide software, such as REV's REV Hardware Client 2 and CTRE's Phoenix Tuner X, to run and configure their devices from a computer. Motor Controllers have many settings that can be changed. -Vendors provide software like REV Hardware Client and Pheonix Tuner X to run and configure their devices from a computer; -however, it is recomended to configure devices through code to ensure that all motor controllers are properly configured. +Vendors provide software, such as REV's REV Hardware Client 2 and CTRE's Phoenix Tuner X, to run and configure their devices from a computer. +However, it is recommended to configure devices through code to ensure that all motor controllers are properly configured. This is especially useful because it can be easy to forget all of the configurations that need to be added and their proper values. For this section only the motor controller's invert setting will be configured. This setting controls what direction -the motor spins when the motor control is given a command with a positive speed. - Since there are 2 motors on each side of the drivetrain, its important to ensure that the each of the motors on a side move in sync with eachother. This can be accomplished by telling one of the motor controllers to follow the other. This -tells the Follower to listen to the commands given to the Leader and is why one of the motors is named Leader and the other Follower. +This is why one motor is named Leader and the other is Follower. The code tells the Follower to listen to the commands given to the Leader. Motor Controllers are configured by first creating a motor controller configuration object. This object stores the configuration so it can be changed and shared across different Motor Controllers. @@ -85,7 +85,7 @@ This object stores the configuration so it can be changed and shared across diff Next, settings can be changed from their default by calling various functions on the configuration object with their new values. -For the left motors, the invert setting will be true for REV code and Clockwise_Positive for CTRE code. +For the left motors, the invert setting will be `true` for REV code and `Clockwise_Positive` for CTRE code. For the right motors the value will be the opposite. From c424bb3926bc00e634bd78bab8221484c99262c0 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Thu, 30 Jul 2026 15:37:46 -0500 Subject: [PATCH 12/25] formating --- src/config/sidebarConfig.ts | 2 +- .../stage1/stage1a/kitbot-drivetrain.mdx | 96 +++++++++++++------ 2 files changed, 69 insertions(+), 29 deletions(-) diff --git a/src/config/sidebarConfig.ts b/src/config/sidebarConfig.ts index e46dc166..d4bf8b5b 100644 --- a/src/config/sidebarConfig.ts +++ b/src/config/sidebarConfig.ts @@ -112,7 +112,7 @@ export const sidebarSections: Record = { }, { label: 'Kitbot Drivetrain', - slug:'learning-course/stage1/stage1a/kitbot-drivetrain' + slug: 'learning-course/stage1/stage1a/kitbot-drivetrain', }, // { // label: 'TBD', diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index 57352071..c6520a8d 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -1,6 +1,6 @@ --- title: Kitbot Drivetrain -description: Programing the kitbot drivetrain +description: Programming the kitbot drivetrain prev: stage-overview next: false --- @@ -9,18 +9,23 @@ import { Tabs, TabItem } from '@astrojs/starlight/components'; # Drivetrain -The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows +The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. +This allows the robot to move similar to a tank by driving the left and right sides at different speeds. For this stage, the four drivetrain motors will be referred to as `leftLeader`, `leftFollower`, `rightLeader`, `rightFollower`. # Motor Controllers -The core of frc programing is controlling motors. This can be done by giving commands to their motor controllers. + +The core of frc programming is controlling motors. +This can be done by giving commands to their motor controllers. Vendors, such as REV or CTRE, provide classes that can be used to both control and get sensor data from their motor controllers. While each individual type of motor controller has its own class, motor controllers from the same vendor are mostly interacted with in the same way so this stage will only use the `SparkMax` for REV code and the `TalonFX` for CTRE code. When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID are given -in the constructor so the code can communicate with the proper controller. For this exercise the motor controllers will have the IDs: +in the constructor so the code can communicate with the proper controller. +For this exercise the motor controllers will have the IDs: + - `leftLeader`: CAN Bus 0, CAN ID 0 - `leftFollower`: CAN Bus 0, CAN ID 1 - `rightLeader`: CAN Bus 0, CAN ID 2 @@ -33,55 +38,74 @@ This is how the motor controller objects for the left motors will look. ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DriveMotorsLeft ``` For the CTRE code, the CAN ID of the leader motors are stored as a variable since they will be used later on to tell the follower what motor controller to follow. - This helps prevent errors from occuring by ensuring that there is a single source of truth for the corrrect CAN ID. + This helps prevent errors from occurring by ensuring that there is a single source of truth for the correct CAN ID. ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DriveMotorsLeft ``` Since the Spark Max can control both brushed and brushless motors it's necessary to specify the type as `MotorType.kBrushless` for motors like a NEO and `MotorType.kBrushed` for motors like a CIM. -When writing code for a real robot, make sure your motor type is set correctly! Setting a NEO to `MotorType.kBrushed` may cause unintended or unwanted effects. - +When writing code for a real robot, make sure your motor type is set correctly! Setting a NEO to `MotorType.kBrushed` may cause unintended or unwanted effects. + + + Now try creating the right motor controllers on your own. +
Solution - + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DriveMotorsRight ``` + - + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DriveMotorsRight ``` + +
-Motor Controllers have many settings that can be changed such as IDs, motor types, and limits. -Vendors provide software, such as REV's REV Hardware Client 2 and CTRE's Phoenix Tuner X, to run and configure their devices from a computer. -Motor Controllers have many settings that can be changed. -Vendors provide software, such as REV's REV Hardware Client 2 and CTRE's Phoenix Tuner X, to run and configure their devices from a computer. -However, it is recommended to configure devices through code to ensure that all motor controllers are properly configured. -This is especially useful because it can be easy to forget all of the configurations that need to be added and their proper values. - -For this section only the motor controller's invert setting will be configured. This setting controls what direction -Since there are 2 motors on each side of the drivetrain, its important to ensure that the each of the motors on a side -move in sync with eachother. This can be accomplished by telling one of the motor controllers to follow the other. This -This is why one motor is named Leader and the other is Follower. The code tells the Follower to listen to the commands given to the Leader. +Motor Controllers have many settings that can be changed such as IDs, motor +types, and limits. Vendors provide software, such as REV's REV Hardware Client 2 +and CTRE's Phoenix Tuner X, to run and configure their devices from a computer. +Motor Controllers have many settings that can be changed. Vendors provide +software, such as REV's REV Hardware Client 2 and CTRE's Phoenix Tuner X, to run +and configure their devices from a computer. However, it is recommended to +configure devices through code to ensure that all motor controllers are properly +configured. This is especially useful because it can be easy to forget all of +the configurations that need to be added and their proper values. + +For this section only the motor controller's invert setting will be configured. +This setting controls what direction +Since there are 2 motors on each side of the drivetrain, its important to ensure that the each of the motors on a side +move in sync with eachother. +This can be accomplished by telling one of the motor controllers to follow the other. +This is why one motor is named Leader and the other is Follower. +The code tells the Follower to listen to the commands given to the Leader. Motor Controllers are configured by first creating a motor controller configuration object. This object stores the configuration so it can be changed and shared across different Motor Controllers. - + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#MotorConfigCreationLeft ``` + - + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#MotorConfigCreationLeft ``` + + Next, settings can be changed from their default by calling various functions on the configuration object with their new values. @@ -89,14 +113,19 @@ For the left motors, the invert setting will be `true` for REV code and `Clockwi For the right motors the value will be the opposite. - + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#MotorConfigSetLeft ``` + - + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#MotorConfigSetLeft ``` + + Finally, the configuration object gets given to the motor controller object. @@ -108,6 +137,7 @@ It's important to remember that settings only get changed when the configuration ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#MotorConfigLeft ``` + For REV Motor Controllers, becoming a follower is a configuration so the follower setting gets changed before being applied to the follower motor using the leader motor as the function parameter. @@ -115,22 +145,32 @@ It's important to remember that settings only get changed when the configuration `ResetMode.kResetSafeParameters` gets to tell the motor controller to reset all unchanged configurations to their default value. This prevents old configurations from being left on the controller. `PersistMode.kPersistParameters` is used so the configuration gets saved on the motor control so it persists even after power is removed. + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#MotorConfigLeft ``` + + -Now try configuring the right motor controllers on your own. Remember that some of the configurations may be different. +Now try configuring the right motor controllers on your own. +Remember that some of the configurations may be different. +
Solution - + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#MotorConfig ``` + - + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#MotorConfig ``` + -
\ No newline at end of file + + From cd6cd01be06d3802d130533381fdc59e90d8acc8 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Thu, 30 Jul 2026 20:30:40 -0500 Subject: [PATCH 13/25] Clear up some stuff --- .../stage1/stage1a/kitbotDrivetrain.webp | Bin 0 -> 29556 bytes .../stage1/stage1a/kitbot-drivetrain.mdx | 29 ++++++++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 public/learning-course/stage1/stage1a/kitbotDrivetrain.webp diff --git a/public/learning-course/stage1/stage1a/kitbotDrivetrain.webp b/public/learning-course/stage1/stage1a/kitbotDrivetrain.webp new file mode 100644 index 0000000000000000000000000000000000000000..951a28af951cb960e5e7f7709028bc8e8f696325 GIT binary patch literal 29556 zcmZs?Q?O`VvaLI9+qSW$ZLVqCwr$(CZQHhO+s65;>fXI?owyO>VLbJW(KEC4FI)7X zAR#JhesUKy}*@x2S-Gg5IZh^1dOZ)|2 zzwgyw$Q$aso=Ion5A=P$Q(vE#@Nd;0*~cBNuc{BvHN}nGo8E3uB%e@Mo$p`zIkBzY z$v2|Q;M>$|o^igs)&x z3J4#;LKF}_Liq?FG$3c_Rw&3AGct|lzg@=9MztMbzbO6Dru*(Pel-~0>eM#{e8UWe z>Tf#ol-duXPSO}FjN!ud#C+DA?O>K~>oWMQlMfjWe_GbTZ=sb`%FB(@u*1#$Vs%g1 z2~%ju2iDkEs0*vtyxxb7R~sdKYZcEw)wwcx`XAl|9$3Ij!ND+w#Hwp!+}krJF%k14 zOvs2cL8sbBk9n~+^-f~RNgpBR1PPB5oUosFtiwsiUc+w!RXs%xr}!7^N^&6HYI4MC zI0et~xsTiRusgRn7jM?d^s(b33(BUydy&a{n)KE&X}vc?n}didqZ^ze)y1xwE|+8N zNk~ykw??Z^Q1BeaM+HLk(`~Z`+^o~Bh;!y?Q&-+Ss4=&36@P%p9H~=cGuDH<=^VHu z*j*ssIPhR>h7(XuCnkAB01vdBme^GvyW_RM#EliVgPp0oL(L?TB;|We;Ldi$7j@NEWFY$YSmo=+!@P@E~iBP5u5>RcTH5gTYk8woIXf>5spsiooKEXfAMZZQ+9N7^nD#s@y) zUXGkCwCc{0YKHFfW)MH$9{#wl1MON8f$S_SIAqx=V9j&4IN}{KFOuGI;@01j75Qr7 z2FV%hVQGslEXowW*v{Z`Cb@GLlLBN1G=b{OK3q02qL_yw)wRXC+mS5N1%e`c87{Hs z;i`^4=l%vGzc_PJc$4>n&}dIQZ;brmOgc~~PjMd1aGf$e_l4`yiCll^3z@AOPW-U} zDsJR=h`&0L%rYg++hD+KJg0(5<8>QvXvH*Mwp`=_1E;+7q1%bc=HNsnIe90>TH=7M zVPVuk1%O0ONPnGOs-axD{fUz^l!U?R*SMtb+imH-g)cxUxSrPc;dV{{?95dWEA`yryYxh#u};rh~nVM_`tF%duZKF!R5eGz>6cr^lSbrLWBBaE4g@X40Pwns>wbUkew{U_VNV%)D!q=U+gy?ISdO`<*)(4hJ` z^18XJWT0-FR}czau!+GZ+)N22FbGLXF2ik0oyeGn=Af7N8#8*T_XRR0{Z5s1Y1jRL znz2$*6)b|q1fB9Q`ofD`lP?%i!zAowa&uwELfik3Ltky^gaVD#Occ3*)e+Udln#N_ zijJl-uE|mGu%@YJ*qa7}x;!25YZ)fqVFYbQ=lB~6;Bpy(+t{9I=Hg+(c}cU_)U>cg z^UG|?W&vU{(#R<_+N54#Cz9ir)CTEqj05Cy{@PcQsco~}xQzRtmfun$zb#IsMaPw{ zbu*Ma{vOcwS&6zTc8szq5cAgs4k51zD=06@N{rfL*B_TF@Q(K&w~uURDXx4CdOm0b zG|V$enA9^wncEnv-z38pbH4{>0_qG9Cq58!VKNU9-5lzj_Uz{%<;y45{AJx9H_Pi? z1A)~zW^pfG=L>|}5q?Gf8+bx}%LbT!P^NJFGwXju96zqC;jOuqeGZxrGg++ep>u)T zS5DSO4Ym!?>;Pilj&FkyLF!$bO2G$26>%O{&P4|SJ+|GADBHoTrDvz~8ynJA;w(Jb zpMx7VR=wK(rfOXT0#@`8Ex0Ao&L%Yor3?qv_E; z!+8JMUm<2=0)`3&I)(?0(%J7|JBlJ|u8|yp{gxVKTYs>x&3}&Y#U+B5bni7vHgCTkoO(ZvF^B#c%s$kgM&VyM(RNCIH>Qkb8o|G7 zU%%}0_AIw$AA;88Qm~DAEFq=#L;$C7b}+7p&MwEDT8QkUC0bHVg@ng$_^`a%(JRRC!jQxYa#@E9Ic3sfhsmS&uzbP; ziQ#mF!xxQ!(jNC}9PDaV8+Md8g$jDTY&nj)5^iB}>N~@LPM>!`sub?d1++)cg9d!y zUNG(dK1n=s^or7n{;@5;0zeR}?^;FN7Dfw6y=Gu)D-bJp~IhF{sCdDm1ag_*g=h282Y&G+T1hdpY^E7nA!!B8}14Z zCWl_!Hr=0^wjvB&%=~@bQdu+nvZ=hvPnnvbx_c0IK|?!!9n$(lg7?xyBuF2XVSg}( zvl!_zJt`D&O4LjsX>JC%vWK};JVxR&LXLD+lF2H9fpPD6jJ^GSqq_Bbvku0FgEghV^zNaVSG4Ik=g#xL)NE}@On2eCaeWJns5$x7Z>?fklo&-*fd2+3#XRZ|d=<&h zve;vs0A0~DtH&9*k zaY7$g#M}A%MPz(VEp9!Doi7UX0*Yp;+}FVy@!lA$`t7-ZDKw@|0z#49zCO3Fa<{-N zFT^y_R@v1yWmZI6<_icX+F^2K-%MZ~&v5F5uTZ5Xjk#}xlCVu9yF z*9BYqnHo>T!OR&N`FVojE!!IhoSPM5fAzYX6j?i>{?hlj9+iV{(M63)^OqOum;ZR9 zb02JIwz%Za@$VlKrV6*gg4-;r@HiyWxqo0*L`3HPAdPMuAB^p(h9CffK(;q4pSp1~ z0fOO19f=6s3*UJ>xb;kJU*E&fiF=%ThceT^3>m_PfPDg0~8 zMok{-*<9)*b`?5g)MbH(8q{%wDryOA&t4r855d&xv-r77C9wQwbxv8oteZ-BDU=;ryf-uZF{!q;ivqd)9}p_i{=+rVPwz&irm_IcVnshOtc08DoZPIfxEcZxJz%uuSvA9JQ z7m?##2inkh%7@VafeOX2@<2wGTjhv(NoqNF@vH~OU_|Q*eaq6_M?^}8Z7uYlMd^&( z=A(4Wh&uGZq?P#Vx87uIuTKMF=Ut(pOvmwhvDP)x8ii(@7LS>(tR`y<#@9)N{^W`L zIm)ikQtmw2^Ew8V_YDi4hX&YzKu#&?wRHe*VR?Z-Z~=~1)OM?X>A7R(U*$~IhL_BIWrxH~CR{1OO z{el)r)kv1+_vSiljyGr_ZIEYO_lTPKE0#a?XSuXtQE+@DaMKzNxU57M$1vUS%lHn` zRBQamrU54ise1^9_D4}nbs;EI9XYj%a}#*EO*%IpKj=gS9|oIC*omu!md)us6fvYE zdbP{G78rwuSIkt_ByiPt51WfLj*GzTgjZq#<#>wdd@jZSK=pteK$G3W0YqP;m*Sc>!|3^ z2@0TP>4e5#^W(O-N{HDSgq}{1$*&?me2*4&%IAPAOAksE^fwCjg%)AB9Fd<7qa#)58qXt}e9-G8%(lm_D?R%uREuR+6&aQ8K3tgyg6}EVXDGttGW`nD+{b>+bg`RXrCB^&RRk0o0CWKh?$ zrg1SW@ao+zxQf-F3AF!y{Z`YQt(NB@VSK!~xGEuU z=SkY?)tn)_uR;o;bKb>)z$tAXM@Wz)fS7*rmdJdnhNfVHkTq{WxM1ZkCF1L$tUS;& z3_PP3J=%y@j-bc|xOSmY5`vCv451;P#g2mu5K)JEB}j z0_Br};jK!3l`At=UDUeh-oBg+BCBkwJTdp!v(TDV?#844^UL(J5NNIDT2SG(nV~K@ zfQoj(54p9~i;j#x$cG1^NNHMI$+@2aF?)(Ia-O+t9^%f)*>i3QPZ{<%*Z-Iks7?Q$ z`94KsCnFdqn(B0RSQ7GFMA~Y3j}~QIoc{QA^Hp=ym-rL8U#Esl(;Y|BM_<}&#+#YM zDW(>;SCTOET`UpYt)F$H=ASD47w-MT1#Q)tf3O-JN~i!78W zmR*r*F(AGsPMja(_eecSV~`%R|8(;|$NvAbfLyTQD^W(m6$%&8bMS^)1ADR>=#_9{ zI{Bd^8DWEh3?eO-b)ZxlrgOP=`kHWKUcv6a^zPr>{hw8m)vLkik&%%?m|}EenE+IM zX3KgbpaP+=euhi0ErW}C;77lcNttp$%~l-|{krd>R)v7Ev6`HgJTuuF7fgWvFH^+p zS(jtFJE#fvi7UjMU>*Yy`hZ2INq%+ysKh#-|0Hgl|I_V5biHcgMV10oa9P)np|t*l z0Su-@N^H&UR?bG3sGR1gG%q!J{D$&>zfwCgBD%##3TZS>)wmtGKBkf#(y#doaj5G< zpe0U?Qu`<2IDS4)-uVL>M|Bczk)PsLBQV&M82$Hwf<4dxQ}G32Uz((cs&J_MqUe9X z=|4Njg#}$?FF1?CT^MIdB4;`@i@r#W+R29lQQY>)R0|-t)(Ujz*Srs@s;x>Se7#)E z@Y3T`j;ABOtR{#vOv0qJM;bCHOP+pZFp($wyH zkJf=sGPA}kb*?Bj6F{`{*BVuAkDb>#<*)rA5#+o2-spC$zZ&a_jTaFJO%`)bv!D&P ztC-$sWOW@l&x`r^H$DC@tHBFd$FeGP0RpVh-X*WD`@^*?zUzk>cz0zp_;UKQnwV4S z`;3{#)!Qh7v^6=_Uz9XT+6t{Uj6Wge>n5MYEW~~*M)qW z*DxCN&EyUmM)ZDJnYqM_~ z)S1n(iok?+e71IyDrd#o$)sS^CcxCh-uk}L3;5AZmzIgV zzyEgr9`H&2SnN$?d+mJ457GJP{^hI8AqtQUB97Onl1N_tudG{CZM+7%uf9i`8XtC=p{WP1l-x=VyBGCyum5?4K^ z<@{KP?_WD!AXM%IJ=kDR&peDZ68R*5+5&i@i%QgFx@#tGHalp&tS1N=`_TG>arTSQ z(R?`E>fl%2LnQiii!9)x@;?IkZ-p&ZvT6k;#-B}3q*V#4QYj-RZM&Y&nL&tPgc zpooJ)4Dd=T|JU4V;1~KI*W@367#fKc&M;)f!=I)25}GW-+>#^12blNGnX_-7SVpX0 zy!gLMzh+R4Lzgo<(>5&T-}C7IdnEj4RQ#W;r~m-`{FM0t002(%%zq@Jo?o)S=gG|J zbzyMj08<#vqsVG)Qa7GXqxqvRd}{@==<5 zCdJkNMb1l2%81IB)yrN?zKdRq^X~ecTw}Gi<9EZXlr7C&?Q|!w!nqSEi__`=*?iEE ze)q&!@(_LG9=R{TZU7pSS2}kIGscCM?Kym=MnqZk{z3PDhd(3XnhoE!D#l#Q-6dYn zHI4rmAG)V%rqTbh-^Q;c>+cYkDQs#4zp5oPavcvy2zH4s>?S z2i^8h(wtko$_eR4uUyj7inLWGjGn3se@`4O$~l1?CjH4A_c3oeAaj{CPQg#|XRJx2 zE~y@Z2Z|+3*jde3)1j%#NCB}|@A|hG-SsTnN=D(Qd46_iP#HlCOny$d3IkfF`m zfLo+bCNUuTz?<_~0w$~{Pt6Lur8~_+$tPc;HNtbv;50$>xd&dLJo57c=mJA#&!=i& zITBsA_8xU#Rf40NLVqA=EgLeZ3?6`X+wUws3Kt5{HLr@iPU z`~A${)>GgE_Q6^lVe`&FoieICr<%jhO|f2m-N$VBl3;ZWjos-#hvf&OOHf#o=I7J` zQ@U3I;=;}9T%Lw7#>x`uO=K!ZeewuyW~bgJqrzv@eU07z&06#Ut?B{A^OKIkuaJ{K0TPvVuk-i>BYa@zH%hNDR@ePN7d#o++v zjs5D_nQZEXJ5QP$^=}_q_7!otkX_EXvWkfNR}(s=&ERu&?1Aq*yr#(>gniO8HI2ik zB2T~|detP0uk z%A-{e4G`4a4~bltQdL}%@a%J(Dy253Mn{M`Fv(@TmhsQ0OyWFR*DEa@3ey7KDR9Lh zX)CYYH>@d!xQHE|)L*U~Awft+hT%z($kx1UiCD}JT1S}W#_Qd+dY0s{V}8is2z(~j z?h%f?30j?tHXGt@G3!tlX#ML;E+4*mk^B{MDe_~gtGAC%hcd8U9@5b^_FPf46mZGX zL`<%%9^N`F2_@MBP+0{%J7*34MkD0aL&EtNUwA(I`A;2a(UiAR48OT${99b9hHX>h6bTUqmfO6_9g6uy|vq<3@EL!~iR& z9G^S5>JJMN*Q;z&wipA2os_(^D7n&@FN=*we7tvc608f1y2w^iYV%c9zHP$9fS(JX z&#uXVJ#btf*aS%ABYR3e}(;QoL+K!#z9%ws6Ue~c^yuv z7p$uQ%3xh%%Kl*1%l21-;mEa}+;3kjc4Q35p?OtWn;XEIRH68k&>6%R+fi^$hhNC- zFmm>*@66frY`+7haMpq>ZW*>hO69g9Z*f5)47Q&NvRkZWW*Fr;)NDu6-|%PIg=EM( z0B(%PzjkXdrEPErCniNG*J|T?{`_^$y;IIF>KP>;(*Hc(cRWX}h-n9EyKT|b-eIA8 z_*S(}-Vg1$@HNY;DJCQX4J3VrediWWqYVI=WLb5_4}xvbm^s;Wr?~8V(B1`Tfxp~t zCno!_+4YXW_Z2l+ZN{jJs>e=4{9VK1$UJ#dv|dAb-f1U5GsVV4{zd~A$#EW0 zCB^;<*MlmHE$Cb*@~QqS58O#fxBjP)ERUtrfMZEG`zh{%=EDJg1oQIdD8=Jybyg%@ zhpz#taGQzqypZ2GGlW4GnYv%E>k`W_FyhvJ6$USLtf;Xk5-{{VJaLRPZFdvsD4*4~ zX{OspJ?J$NB6h1oc|=Q{fMAr(dA>LvYj&P`w=ZR6)k@?qw4e==>?W}UciORDY$R~} zwY$2I-%WBd&x4W9CkDBe`1o8dvMGF$&-r`GKt zix!zyAmtm)^w=93)gdMV%2|POha)~LEjT@-vnUmaXV<8?L2Owhep+xB7F7lTYShr> zgl0W%DRoLN5C5ajl45q&p){`#h?oSolXtN$vpN#-a7X7k-5n3(%Tc%Hg{~bDZ2KQo zd5&8MS!|^GKMDt($CP1H=Rtrx>X#uvz9yXF?)vqaOEtG=GREN6aptJ36un$9EENVI zX^vrYC%nb&qe_TLwk?CGEdkPrz(|L~3t&wBY%DT<6_x~w$Ng-zi95%%Z?*{!?vNp7 zl)ht7a{BWCtUg|vH=VvW2^`sHxH7>JbvO!B#|Ek)NH6A)^K7F#=JCu{qt~4ff)I&}R?eK$Ws|%Zt=-SO9d_gce!7sXnMM+cBB657*hYlN*@gO=`Vi zf6!WT+AkN2uS^5k8hN+mp7jcZ@hc~UW0*HD#*R$%A|U(JN*F?^&u@nmWjSErLBKD%P_Ak zEwD4Hk|}88P}^xq;Q>o6(YiWR0{}tb{B^W$->lbLM;e86&JRCw9N{K))RS zg*QSX2&q;Q8E|ljE$8hKOnG<2*Q&vF&5ql&ZT2l%8HO}B<3Ok%_yDvN&A4F6tkqRr zJkuqxLPWZFCxQoytF6JELVcNWrfdDZa&lh?L?7l5H1nQG@x#%?zQEI#e=T)A&3+kf zlUu~2&hY73>Z0id@9L8utT#b0>9A|MISqT2wC?Ge%H}96U_Yw%Asi~(2a^ZcAFmCK zBnu&0C*0Puet9ZQ9!{~4Wv2Qfyw)AC2eh7yfWkybh+cR19v$*>AyTbciq~WUXh4W> zc1zFC#8p)$6qyYWa`{1>fbCEhdJsvC8D^k743@0Sc{B@t!v9<+hmIIh76x=+@&5P% z#kgMF>A`O297>MV&1)adHjR{tuk!$za7;r#s!&~T;B^Og*yQ<4yhd8n6a?@ z*sL|@CbYfYPp9-c=RFnPxVb+`-Hfuf&4tG>7j3SzsC-CgRlzh$ds!D5ij7$3ebQb5 zN-mi+FZ_KeI7S1K>gRMSMY zxy^HbDIhOIzZFI^($*~zpq{Jk{jn$_!P5ZEs~i{byud23s1s}KX}ub|c#W$j+35Tc zVLmjnhVvycY|?kvM?|p}-}Pa;q^sPLT!ZWhZ=b88yIhuVo+*-6E{~;{ zCgQX!W~iZ$B->5}M)Y@M(l7AnH%Y-{O5#2*`24KO$kofb@ndW;`>|j}dGdkLUWBzJ zd6y!*P!Nu3p7gbha_4!i$#-EfE4@JN5Ga4NTLi^;C{NepxBP3+{JW6|(|5GXgDWuo z2_wD~llD4vQ#k#|`HJP#tMYJfF>S=}es~d?<1LMtwEu-Gy9bUDc zM`=`!G!m$ zK_M@btZun>25bo0Gg_shf>T<>713F$qTh+8IJ`=l)h9>gX1$Xa5X<^RrM2cdZ)TzH zEs>IF)MxgdPrF(Ist&G&yC1V`O^gE`1q)G?yV$ankKkq_?kcx2yJ;3O=7H~k3=AHS z&gBk@#Wc|?d5|~8#UND>i;t_`g;b!o-Gs*Xh^X3lu^yc!6(W}s4X^z%hzNou{|9Kw zj!I6<=159~Fb_EiKPlEt7e3XHU?Ht0W(WaWvGVxZ)TTbH%6?S{Vzc37Ly@LmyEJ7m4yahOKu z)7*l`tNKrfg9$aO13{xRO`6kJE}L=`iQ#oj;+!tF+j;S**tlE4Rr|`BN>e)^ zMZ)T}o>+o}9E6O<-D1S#@qz8f6S_|qvX}KG6nNOjHxc@AuNeWn=scoqAG6(xZAwmT zys%wJz0PiYmdk=&8}z$(HWc^{w4xaeM}Er-*(~w?TY|z zSoZ7VAyS*{7Reug0rX1~fe1u~As8lFSp(uBGZ%=aed<1=R|gL&xa6=`0;)hu($84+ z9)Hsu$0FW<3070$&`0|zA4nE%Q?|xDy0=Gh)6!XPnA<{u{RXIdA9wm zHiZ(IKkI1NhI@B%pn0JxQCxgL`$56ilP*~(^A`&nbb7lj=Z?=tOz39ix#u2(lZq;B zsLdLEezc|l>h8FiCw_8dhOM5NcesH2)=zp3lKfiHc1!$rQ-%gNCNoe9k|>I79)8ig zmRWzC-2}RIb7+L|(UEuX#aG%cpU22k);EpaA5$h?#&BVY5?(l^Y6gvFRmL;lNIJbt zD-gFRX;KJeKNCLy32xp|fK$Zja`MTB1K?8Yo3sxf_L>p;;d>>ei69PNMmEavr@5ng zs`cOUPxwQQcRm2Ks`Lapge>~GG=1BP4DQckZ9BxL#(XGnnw zvH@9B&Z3ts6kVflt4-Lvq*5-6EgkIlS`PuYtrCg$`ql^_c**YTy1D}|>55d74MXgg z=>~YB#vY5d3XepPvZ@^?B&=EtxM_N>l%1Ek`un#sN|3ki&rgb-cD-!iG`5@rpLoDz z{$ro<9ZtA8eE1iF_?EZ(L`xe5l$lkQ4e$rX%-f*S>@RDhcxR6$?}*w>*|`4NV$6^X znAK)RZU)P4+Jc{NtkC+ZN8ysViLeeIG<9JoJ|J-XXpz+j-cb(?Rl`nd=g;Np&#aUj zbIvi@b@DYS3^)AC=F;spdQ6|7AhpimdATxuaEVGTT9@Z;KP?8y(T7@`O2Kq6T$tEq zv1g23){gE;3U{W9xoB@~UBVO{CX=eHzq_aH2y-K4h*y!_hw+${*BB- zGfr_m0Jpry37>B-60d6+6zhIpR@GUFZ^-k$>Ff1X<`H}PeKw93-qH)K3u05U+kqDLr`fvS;`*#W*v1SG|V(w;D z(o+Dp;WK_mX{@_07&AjQp#fKE)5jafbb-ATdZaBEW zZXhVL*8&a+`upD`k9OcYnFaOerVr)ZZ07;3k6KUTrHA9pcArSl9-Kqsa(kv3zI=$k zUb)BS{_5p~o+`I$+}-HdxXv-h79~b5gg1bt&IXqCozekR0;Fuy3o$^fV6fEKT~%H| zK^}1?4nP#MF2K}s+)Yk5<4@+Cnx*(&NKLcYn6+m!TzE)Bg7d(B=1O7M*FoW)5YXG% z=)JCo@0uk5gx!Py-aEJT@TwJgnRGfeQ=E=%piGip1;3w2tHbMxFCpa$UG@LOex1bF zj%oP#II?AV@gjKJZ8|>I1TjY5u>jGKlGmq^BWiNekkOdSpRfA|h}yhc;WbCL%Y3(I zeW`ui7E&ah?|l~koGR}Z?h>O2 zxLi#Y#+Z>;PutFjOHhz8UhRb8;PR3-;Xpt=3921YTk}`zR$WEW$$G5?X(f}j3x{x< z%y9^`=^ECXR^1#SomoSaQ+0XM5h`M^B3u^YFsh3)dQILub_g`-dtWnC)Dmm698M< z76^}nI9-tom4RNEBNwAMD4fK~C>}b3oElO@d z3g0;^eqJ2yp`lmVfnHpgx5Q$aOaPhcGLiz})z7w2&7%IKWIakn$#Z{vb_D6qU~4QeW$et6@}a<2 zbw`(Hb0t|VdRmnG!tdD9;lo>da{9Z6;oqNp?=6uL(f@5^Yj$5Zft|DEd2^4&ctUZrWC-42?_jm3O16;4s zRzK1EL{I0(Bx?K8i&$ z`bpOBiKSov)2h1(4&+ZMjON1#y$vbq_EFAe2YMC+FJAE5FFj~iwhd?&%7^IIc{Nq^ zxjI#B@%wbr3{M{r0f0qeZ*4l*y+q~PH&fwuVJK2L;>lzOb(j73(}Falz{KY` zzLHh)7Yk6Lr|5pcbqvqrL~EW#fAGLuu%V8MMZH)ZMr(tDfwEv)^Rj`)6q{y)YU=3V zK0z5(@Cjc0xL5^0nK4X)|@GAG3FXK9h@7Wn>Nys0>t-# z+}wxZpr5za>5TYHEt3_l<>V*QTeo^>HJWdF-#`G})At{E%@ho@q&a|rY_=1Nv_gmb z9*%*UBmiD7=oVfmGfSIKfrp5Su=TQDk zmK@#fD# zJFG|`b~L&izSU*^6#?xg&?8q!s-d_YuaawJMN(Pp^0RT1Ag__2Kl0rcNUzNdBpnx@ zqt?p6Ef<|aw3pB=)%ZnvcsWg^#vVB3H=xvQ{6QCoe!ulQ;na0%0h77J!hghUg4b7$ zlv2iCiU%dLn5uJNOmyZpt-(I*!G%Iv>k$q%EDyqC_?3z%-i@DU8zn64GQ(bLaL{*+ za6Gh2PR-mmt6zd5aL0F1Dmk4$7SF}sx$M&oBw@3HMJl-Y0diu7AaA;es$rc4)|U&8 ze(N{w+KGreJxYtzZzLH@q3ATtW>3{~!nqJ1k&#RVB zdbyG^2M`nkD_ZNO!yIeXs8Ng*tDtEP99c9eB? zK+~<%bJRGY0n;Y>{Qd1S5DEgEb9Hl-^)khj_2GjOawBBP3WKwuwkYK5X=wy%_c~%h z`TaPWSTJtretw(dM)B!B-_6AV#2iHPsmNmaguiLPs;bPT73blX?KY%a{BN<@n{CzP zCP?w9U9Km|;-=F_^9PGe{!WSo#_>v@TzOzSv(UgGl2@pfkYa@PmEY>OeS8gA48}Ro zGkiC=Rf;4#4u2BwN1s?9CdqBv+2C*$Awk2AYmrVIrq3c4$W1|sZ<3#$MSsH%8>K#&4bvmB_sJR|-6}pekT^k`VK96SXJ*{@9Xe;2^#JCl;$v=u z&g+92-C7Hp7c>_EvsD0z>;CJeBJwM#8ZOBr-#%|U-^7@=Y8r}s>;n?%k@q>If+YM3 zv5&s6Ij|XLR_urlNoiAhxKO-uA11^zo65CC0zPrD;L8@q1`cV;Dt`1**V0+nq~D77 z(Dcx?kcZdhks&n=1vP`%$aEeGytfn(sA^Lt@SY5OnCtl5-Q6|4F01)n@U=&*0TW3T z*eW&8i9KuZ$M>Y>h)h=|(x8!k5g47nicafJSbr(xYR)~!*tV=G4X7w#<=_HTu|^>uRCw6% z4b~RMcf(~>h#(LF!~H<5O9uK}8AEn$M@t31{oE)WZP%}vDXT7uTBK%^6uLT*KM3~+ zEkt4ZS~JO35s8$^7gq&z#Bj3?Pd+D$)3$Uq;9*?K*qJ;3vL128R!E7lNKi#~>kf6~ z2meq_fUjnB1l)DKLNBM9PBHph0_&>&8fs2D(ZSKaReI2d86i?oJAm=0`1WLr4)HdP z80Pqm7^D&skyOJ=NLr-ZBdwHcCr3^o?*ut#c>P#kN~!BxrV*4V1S=^9DXpCtrWdaP zt@L=?Xyhpv5d2b+FCja7RD$^20R{Cmf7Sk!9zK zu5X820R7=!hD=n)?#O%(sf!1(AUTrYf%p@x|B((=dSLYB<9;yNVUM3a!H3VVJ$*C? zo;EP2Har?Bm#;|ZH+=OSt2>9_O3$S(q{u>bCmKwR-vg$`n?f>~jO-i)3% z5aYL^IQUQQz*zu0$0=f57Xe|^)R9|;3@SsXb(B};y%Z&44QGbj*!Si;A#`k!+c-e- z3C8u?vwM5du*Er3E$f4x-Im248;XcF8W z^achmj(^!v|r0xnv)Xzi&*tmf(b?M!RTY zgm}o|krO11R5xe@`FOa`64y(nA1jCbYW>O4`*I%|QlKcEo=UboCXZsJEd0IAix=xd z^2>G3@m_(4rBO2f+wRPN{S=vu9Y#^E#72eCsc_vXS2ThkxS>())F`V_yR zt~Rfl$(5Y9fp7z4D801vwLTs4m|L!I@lImGoUB?O<-8fbF|&VcKh&$J4FzoJLqQ>~ zPRLh$g6FBk75k>%HHc54Aj?CWcF}`&31o5YN#j|nf-r&v`~%F?g589MVOWFocnqhk zasD!mYI;^m!*KPS75i-Cv;bS%#_}YmeguP$79QoHGBelbo%&TW6AmaU4IDx)v`UHRMdWGT*zxH#*D`bS6izf%~Z3V zQXxDg4ciP-nxG#Zewx*0_p9=4k77i2A;=sEhQkMXXSf7aK(_LxKRVv+3pN;+s&eCF zhjir-G{_Yxk*@;Ik~|(Ar9*2a1mUlz*L?nr?7Ps=dvfUD&)nv>^_2k4ia_>Ut=Gi1 z4DCPEDk`y+MVbEY5U?4$s2@K-dvEu#-VS|H|6Bq5^P6YKjkIYl(VQ`G#6#RxuXaAR z%-;`&QN0?5gM0uGkSuAF8C@?<=T17x0^F3>=2kPYPNd49N0WPM5%z6qF#4HkDR``&H(X6Kh5Af2yO$l1P!BT>`}bS1?Su_HDr9KiDe?l*EB#@!O%gUkKRa!V)dcjm4JWp&bOVpqMY6`^nhk-qSag%%z?N zi%-yvk3*$(`lN)XQd&OSmv8}}puo7&!k}Ha1rUOYAi!a0M1i^D(6E8(OiqdZ2}dl! zt?eP%P3v!rg>^^ZZ^-*XW-zmJ=ESle0|1QLfE*-tMZCHg-~%0MO{@vebe_ob6Y%A~ zoa^Mq^duaVd;Bd*E5*7a+UU$=DYkxx(RTRpF6bVuT3olyERNypeY}qvne<+Szac{k z-@iC^S^CUhULQE&!lNyd6K7h(v%ZH+@!3C-g-qrBz{vH+t85z@B09eablo3$b1P=r z54Oi1K?@GCI$Q1#NW{xN1Hy?BbK%B*oVf~?~|%`EO_`>vRA zKGf_B#t~>*g{ZQIUwK^?&%WBkbf-F7w%^aS+8qOc-r_AW)g`|~{Q1Ha z)y!snh@<3<&5g;j19DwIG6n_#4F2+Hs)=zJuKQawxYa;f7KmvvED!*Nn|MKbYqa&@ zB}7V@2VM0Cpukoro5Ur4ZY^XK;|88>Tu_;Hl<*uzy+IJXW9;4BO3&n}^fFD$Dgxz% zoe|gWAc#s@<9X)WdiEt;GP6-UJ;V(h*^01g^Didd@xj)$w|!8zq|xuP5d8VadxNgp zMXawpGb80}k}vbskV3tK+-5h>-`BOCZ1=J_@8{XfP4J#54p)J#pU=KnB{5PuSr=Lk zG4SSnoA1d`Paa>qz9Zm70=YZv3yN6seGLyPG1okrX%r2K) zB1wZd+o#cT5qpsh+Fh(wyRxH8ibxR~!$Ybt=lcRzQ`teLDcy%yD8tUK9am3p3uOIw z(v4UNfZBn543Z~VmLkfakdm&pE~Q4uQ)R%@a1qT0<&~Rn+IG@(bJ_w}EbEKYC7hhb z2C>J^?elE5auLq&{6;-+?dk)jtDfBKIf0AT4oi!IRNk4EY)s%zq0FvOKTN~7_32CX zI9 z6N*5_m(6z%DSt~BG7)QOJT7kp00D1{nxI#en2#;>YZirh=u^CRBEXD*EIN?-N9II`w`I36mTVmHb|d%q~H?i)p0jw z&Z|mrx&EHV!h#RppUYlOv$3n9e~UQq=!@SngR--P_+;(I6=I{jWlZmZC}@X4bLr{| z!pgWGVeHqlfX!|;>d*IR;=^W38MSH?Z(wc2*Aw2wG0Bk?lw;qFu5_!lRi4R0%ca@C z@bzyhrpJr==9EFb(^Bm4vzl6Gwpy@t7MiblTo{6Zz3|vMU7WXMxv{uIwpI&sMe%%% zfVs(s(jvg=_@ob|RVA9XN^M1$i=Q12WY~F4Kyt$aC?>vk1wmJQwRV_Tt zWt}n?dB|{97rXMktxvybf^Z#^a1mI%ZnkOK|yGqWgD4x~Rw(AX6n!HO z?xwX3sB_YcJJ%oF9)Ak`%Fl~r!NE%Jd#&hWoLE46_4odkJ6Iz@Zh1@H*KXttAt7S; z^=TR0P0=LY=}V`!zgkEbPg2IebDlu9#R$rh?s_t(TFYHC=4cF*u>vy>!O* z;Tv@H1niUN0MW(NlUNt@Z4kp!!!8sD_wLA*uk!#q!%b0@U2piE$R zwxGO!Yor5SDmkyRVMvyVYE%0S52 z<3LK-eMKuu~rL9H`p;nu^@Nd zSGu^vCN60Hj*R&_lxn=PgF4Nyns&mrZJJ139N7*QNfHaGP6peyeH&@qP3!7R?VyRe;@hD`v3g>YbH})B%`rybkWCo&pO62BXV*eY{`0k=+|2m-zW6uI|nN8oT}^ zm&yaGUS|D`HZgOUDS}S-fQJ+Ykpz}B%sbCmldA|q7cKk^>NBRCKoOQ?7O(~{GGj(KJouRVxeLa17)Lz86jio?m1&kb=m{qV&j`FNS3{51Lnw{)WQGa?x9h%H z&>KEcZfNOs+6~P)V#7(#t<{eiWV6_cr;!l82k(ONtRbS_*I={!6)E(0^25IDRgFD*W>B$JH=6|s` zRbwY)O}JSzN+_}-<3S}AWJw@X)nd8mtl0L15rC1qvyO>C=%#!U6;hmf!ownNslfE0 z%AyrCF5;d7rM#|<-FY;#u-JW+6=M^RQI>6j0|W4LZ~XKE>EFL)Q~XKt146W|DTa7> z!SBQY65D}lwLR*nQ&i)O3@IuyYiDp7<@bV_N0B^I3*>{1v6YOyL-G5_!bxz!RZziX z(0)Uh>PgaPV(bl!X@lDAWL?QQbb2wOdFMkk_*3NUhf;il?I80-n8FJUKZvj&)O_H~ z&=~m7kct+vSB^i-f`NVQ7)nEcryJ657EoAC{Nt_E*YIcw5S(3mz zc}q{1R&!7@_`;Rk*c@2_guwTFpu|OPAOFe^1y3<}|9hEbc(f(s6es+&Qf8 z2vmmlLEIn|%J2|IHV1zQwqZFkO)zqREO+P-Fw)6hs}N=BR@PNyvKh++NM&Oe!miX=DZI-rxbjyNjjCuDFt zw|zLH-g#vJ)O?+DMF5W`?$(s^B<^4ev`#^0Ku63wlW4cQrup#ty0J4e|4>4G#PP$` za7@e2(gRtuW)w%BQG-$XLlE=~e*O@;Y)Kvkw&PJZ&#v9}F7gE3rqqZO->2}u4n29q z67Up#7YlO2rT7YSY$H*;${J;ib@*66zc~zhSw!NBgKtOHq$EX~3}!ysUpG0*Y1zy0 zCg2+8Z(AAWj8>N;4A&HzU6yNqZN`P0Q*pPX(NdY(iWd=@C9fEju1;6tT|Yve+7ACu z#r_B4Gk73SnulmHZS+s=3YwgyB0&;Lru(fb)^-`vfGMTczRHYuwhF3Pjo7IpGSlRK z1v542#m>hS;o$Md)Rp9cv!s8t-s0^Os`ZB#FTjT$a|BQjU(jSOP)FH_dy3ITCJ!Db zW*S9k%|b}x z#R4YaDo!4h<3bQUIEbdvE}_dsZrA^!rMbry{i8mIt=UorA0$J1vU{frj&?X$h4H!- z_tBDE54sES@*=1)ZkP>Vqf`XsorUsaw|SHG+fj#ehI;pJqJaIXm+_DYE;wRY1J$V- z7@JOCS|hV1fs@}4`Jj3uOqLGl*UaBffq2h^dat`#m9e2hWv!Zj-gtlWQXd0T5WXbb zZ={K%g;smWe=`GVS>&g0Jruy6TTFN9q?bU2IhH(_*1njBz#;2kHWMC~kBnW^sf~JK z9D)X4#cwj9=3B9((_IzMBV;;M_%pUM=IiGJ6>_>>xkrhr>@}Mw%>pAMw0TxvMHS(^ zQru7xP%dB{LhQZ{@q0J`qa6#bc^DAVAlB#-PA~r@m7Z(Ha&zQ7uJNRQDd$tsx$z3O}UXuJ2?QALYb#>F9C#OW?mmX$ve{5(Kv3C zBok*T+zO_Z+ZK|YwcE#lAPfXy=2p`Gu!zzdYk)?1cWR0FkZ#P#%JW0s{6lX}fCehO ze+@QCw~XewU&^+!g=@gt&EvP-jvbO&i)&`|ru?kp%Jbsx@z1gz9u30~6immR(GSe9 zXr^!11(P0s@cuqb4wiLhi*+67S8LX?rlrNA(_ndU2c~Cz&4fYmBVCatU7)ld1nkT( zCJI#$KL?r`SYkSco4pfsXl?45Du6G)mwa8P0m(yDJeQ;>U)$01=EFbA39Q&GVEj!R z5O$D(N@AYy#Jz!eD-Rx$I0tdjnea!1|C$VuPG$+y&YQ*(&Zk(z3a0Gpr!~s7UZ~-SKDuVy0M^Hmt|40O0DZz0>Jm|JXNO zO6$W_jskY`O1zY$NtY!>b4d3Ga0dyM>_bHi3U8gQt$^Nw0GyTFC>A`mzhaV+PD>@j z#Kh*P2dVMINM)wx0w$}$qi^4=XsiFgu{X(=z1 zPI`vbVnDQ7E@k%h4u!6bw6hzoqG%h01L9j?Eb?Ndr5Xx18$P~r6f0iG81dU#pi@6w zfOX~W@iOf3SA<^6{L3%|_9y1rff^H!PuD!4U~=Q!jK?4V9vx*fkdQQsdA}J^k3DwmgqUr8$8Gxfe{ihc`fKE#vO_D;>VnDounLc@lwEq1?>| z9&-Xf!vmZ}%?{xyMivfrSC~W1RajIk*tltk9!G6;r8vzAgjxQg3y%G^b}Pb)ZG(K5 z)*E}~12m?{gK7`9OkW1I^ikVca^RSeY9q=T4z1esy=R0g*+#2JUO!ZYzT%7w&APcRJ1`< zs|-slI5<>$F2vUq>Zjh5)E~o+y(xP8uaWOT&LoOFE$Fd*mZEAw0Dc?E&Y|umSqMSB z%rhs#e3m+9o$!bK@lU7{N9)<$`LMC@^4>W-ofYL>cr z`C5A~73J)FusgRWvkZXuO|ar6{+nw)1}JqWT;KR@3TRMYfHg%Ib|huNe#(o7_`nTZ z5`A4`Fg_UCJHk(@SQ$~LE`&`Z)fk;O?1PeN*Alv?tvqcsdN7P3aN0`6Y!HIpjj@4h z@G&7vKzJoW^~Y10DOo74i+;x1m0FwPt)5pjz(9V~aSnKYTu{LriI+egm4o0cq80WA zWcr1aJnpzmTH;i#ZQkcIZQUt5$#UGQ_r1{tURTS5+={|dpxg?g^!RslLCl(lBvb96 z`#(26GALtL_m{)o6g?F3OSOIdrbE|W<7=~=YTWGO(!}?}95F%3y!Q7$j!~>52J_*C z`i1E-m0c&(EEz|EG+vI|R)WkwN5}&04&K!%Ut~+KRgXUMLkGjBC^uLfo%H8eG-*kV z*y1WDKq$2&KX$C)GNy^jQFwagu*@MQVumji`!it*LIPWVxyUHza?q<~yziEm-*q{U zDJ349{59;Bh_f==p)>3T4uQcvHAK*k^JPL;{HktrBNEm2kh7z zLI?FIo4D$TOW@W6@jNqslVgab(7m`HYd52g<3E6!FETlnmfifDIVIEmr9F{|oa6pR zLJiSjX%~7KEjGQvV_7;yC?{zL9%G!F|84hB-y_d$3qwGn-Xf^LIvPMu1Sc~uc;z-S zT{*v6baju~X#MhrX`EJT@umV$J~OG0SNlkc+ZC}c`h)THM#36mNdG%@H_ zX1ZnTS{%6SpDL8_?t1V-R$_X4iQ!`LoDg7l&XcLsjRLMix~VnK`tDNHoG9<%EE3$8hmpN@I!-(*qQhJ+EprECxhpC zX%}%C=uU_<6j9QXy*ZnjxvSsCiKCut!RR-(UW79uX;|4_oEl+^DK$C&s{S>}x!&&v z*5z>Dr%q6V7FXb`%t4f*U+hY}hYm`Cj^hX~p>qjaNS=j%B9Sca{&RK@=mF#A)8KO- z0;cuSo0X3AR50Lisr02N6hGYnj2r#fq>%$ATo-QiAD3d%^WM&3LQ<8sbbZ#SC=}VI zq`X^OhzbZw%QbB3#qsA_QXBjT@x|fNs3YvG#z>}8*vJy7sz+?nTmT^Nd9O&;+6@QL z{1G*mQbT-Fx=rD~O-B{ixM+Wrti~2_m3vo_r}Y@O1mmG`8KXusliXJSmq1duN5)gN zcZh`JX$0S8Yd;_4*d;`#7P5Kl1Vq1OFXKre(*$4vWkEq3SGv?r(;1G1rT`iQzAIz` z|1oafIA05uJK(`Sb_^013BUhv0Q2d(!-mU}0Rga)S;{TFP^795czkWU+q*ci9cjrc z-INZ1N|rQ_;u5HzUmYcrUJ#ZSsvoh3DZ`kO&fl&KRHc&~;7LF~5hoyo6Zd%^Sq{?| z(yrdrjoF+nJXu~{O`b3b?)Z~p;=-+G381;4zTYC!b4Ox;`Ro)y|JH!HBvxCSzK3k= zx&bf~yZOVnbHKTS;2Fo@*@0}%Si#yySs@;ACFRiRL2uaKX0b?@7u#3neTRknfbl$B zE_U8Wfys?%f4R(>#!mVZh7|Nbns8ZBA%hd|yfreI4=UGp#kYGpXzYhz^-e{+J5Bp; zH;CJg6-9po!%Ei&@i;p+RsYo#CEP-8ljz7#P3k}RQRAN|(1VqF z>hwRD!PR1hMDGX0je*jr*be2_;p1FgTDMk70m!S*Q}3u{M1~`KMs1FSvVfd^^zu5 zU}ZY3YT1M|N!$oaJo?GE5c>{EwyB4GU_OsbsCFBr2>EzbpQ-+lVOPre7ldx$JDn=f zf^AZIUQ80xyZdqsq-_xS6HB$2nTC`=TP&(r73MG=Me~-~d^hNi#!Y43IBleCxdP}B zV`h?#SVXHeNgi-B-@WmE#1Ke8RNlPlh^AFFI(F!62B-UGqHrR5EXp18eC{XpEBFwg z`If~tKY(*5Tq$t9u`n03br{Q9&c^9fQK>v0cvtwVJn1DDovGjLSz&sIpNjuUXoljtqhhX}Q?qOUwq%IN2-IMXK=fO?5G^fF4JX2s zF`y6OBEPBFYBJbhe!vLsj;Pa#x z5+cF-l6nt#YLU!^sDQe_Ylb8~0IZ^J3DrP6H*_+h)Ng(J{tABqr;sI4;QkYg?hre%6O zu8;MaA|F@WK0~y8Lu_3q6Mo)ES0nyo7-!0z@ z_Oh5+vHN=YTmC>3y99=^&j0s=A=i=*6NqO%Hje1ksp|(KL!W4iE@~}a5bMpdH}HlV zLrY3v4czava2vV|%H2ERV>I?B0Gm} z;b>RjSkSB=sxht31`tTqlCbIULy)|gTM$_O1rG8TZ7c@Ppd{{X z)MvWBOD!d#ncqTDmJ!cJu#NP?z#YvM$ba>bnxkNzC`W6JBF!al%e{CWS!z!TpfgkX z*E^-8Wfwlk!Ci{zoeiNPl6*+)9;ea7te(-dB}0|y(%Ar%8M#jwR!iYe^Bmn?t0E3x z&i9FeYM6Gwqt`o)Xk@D>2c~0TyWApUVl=7wJuca=UiSf zeV?=}J9ZOI!3@I$zqSpieCPun+Oqk*Yf#*mY?2Reg`PaS&Cr@>iLIM~PdeJY;&qqn z)KnG)g49QFrk(Gp*$vqM?PC|f(!dM=iEl5U(Y0Qc-mAs_!0irjnkPo?uI(nfAOKZ` zaYzwLpK<}bOy5X6^Up2}za)GXrGQ0kU$7#`&1->4eR4=M;x^y7Bokb0f7?4r}d^=9RpXC zE^!<}lYrn17OHKw@K%LdSj#HxZ1fR`=u>n7a)2o_c`hTT?D#OXiYqx;4zGZDdm6&8 z*nw5=UX5@n-qM6%^D&aIlWt-e*EH2H+y_C}MV&(}UXE;yFt`0humD`|&@_LtPsrz3 zmNT}h6abCYe(2g1O&Bu!1mP`pF1hZF>9#JlcHvxrtmotqdS$Ubo+;-g|iFy0naw^IDIs^kS0rT9jr$1S9bss&uI1YQF*!FQv_fEPLh} z^+jEi1g#Xxhn@~|JR=iZLv6ekE`HE!$4tWowAQ{JUm3Q&g)&3EZK^tOlGrg0oZ9bL ziNy7nodoHJ6>|30UK$&rRzMf z<-6{7l9nNMqftw02%*eod@O5Kz}Kd_QhJVECYSMEXdoN+BB^|}cNRJVwJIQ(UKZd@EtcK7MzePSLp9LoaZKL|SE=wtnp< zkrem5u=wIGHNhh}xK&)K=2p(z<)!f7@5%8d>Lh@*(t}C*yj4JdbB>kSKK0M8{mwPz zgxWV@SdzEH%!IHh3Ik#(8tqnHoDpG7QUmpnS4;6Ut)F}Ih+d~lK_K^|xv&lhXoVHU ziy~5YwJFpNr(u%WJsk?!2^b`mn~$fm#^ss`r17eIwne3d$(g%~3Hf7?RTBPM;+q#2 zuFUjGX=*w}xGM2ZMYPu-pv(YiBG4{DKrn-Q%-tNYnbuLM93WAtTqZq-l+W=lTbw?2J`;w{;-F$oZ z+XBrTxi@?YIA-oD@JwG)Z;w*0qEX5wAIDrS2n=<0q6^fS9$F6K*)53R*{OQ#l^EGP zMjP4$jxh7`q1d^_S~~`|F$krJ?p-Y;QF&mD8bOd_Se#8(@n1Mm_-(Uz4K>iD5Pxj@Mnbz+1ed8b7ZksD(;&C0#NABIQWNTNT%P>|G*z zr+%;2f{UiuGWoDsN1L1oIJD)y>a>TGuMGdv631{dL(KwU3FnW#7Iub_Up=osPepC6 zWsL|6{?|}Q<97kO5JEh%Mh}-VYlg!Rk_OTs?3%gf>}qc1^2Fb}%?p{G829@IQugC? zYXXh-*leEzo*pJ6!u5f<;qN@#qGJsQ!E&7B0VGrxhM(HYI%-Ppi0+r?3tf}BySN}P z9U$+9gyKi_WE)lGmd3Bq1D4t}P2S_vMM46cyVKFex_m z)9InI0lQH~12B!+D|6Qm?#49G#@nRD>{3d|uF*+ctc*tW<#{8ESNO$&XJzF2Nx$Ye zj_2p+`o3x3q5uclL!n}gwS#Nt#oCy<5$tb(!iq%nt?rHr6Cl3I-eaW+C5B3C{M}K! z0tax>z{rRR4e3|p)5vS$=W(UhR?S%VCivZ<%3I^28G4V!HNUQD+#_az@x1B2x zL2EaYG2Dm=){YQoFDsk?Kf4PboUv6lOa6h$AFLL5&)!oIs^iX?! zJtqL?0qNEP3qUPc*`zrpk9i5sw)*Z#0or>K;!EfitMYR^Lp=cazgg*Gy*mZZiGr zaiaJmjQ1PE=dn_2d_*cuUTQo1ljJb3Qb?kkADdAc`eyzGloU$1UQ{coq&9MUVHgJc zs?Rj2GX_?tEXzjF>um3HPL8GZ#W}f~+|&Oe+!^{MEKh_5{d>s}MH)ZjNUUp#=gc^r{?mEj+VxFnK0D`u@m8E~ z-VeRgXC9>XIpOG;-iJM6+VyFdNt2%-*=1%gac(4+ehUIKmxi z?MFla4za&Aw!%b|W>a09k~LvdStZ!E@D5+@Uo^`!*GB1M*NpXipeN{Iydik6@s02| zCv7OKs)Bi*$K01}7Ol-Oz&lEJ?K(aKdb9FnniBq=43$;O4jv@3=|hTalc}&^<30Zw z4@4$L)o?pVy+f144XKYC_mINfbh0^|R=1D^^*dnqNRmkDf%1)G{ID65M#ci2HL z59mhq#RGSPUc?(?$Wh_zg=5Rff){1#A|pp-h+)nr34hSd+fS&pM#XT z)>T|#Z_cb~gL{hkPj~dJk05k;p(C!w6_PZ7*mifI%ZQ)ZqOfo*pEDkhXnU_@nb@sL z_lJgj%W`xFRu5ORJGa#K1B_D>r=h3!KL8q+@kALCdoSTSscqC)i&btK4n?(%%&WSg zvFq9V6~TpEd#5T>UEh@CU<>#B$UjReAWtVt>?JOjTc6rv}q5I zBpo6m8!@ryZz`K^&tpv9JfGp$s zhmCVnDg|0ALEIW+(i5Vljr`|i&rhmNjS{rvAA+( zVuBG{*TV`?ylu@W;A$_M|`EO%-#-4 z`+CG1(r9VQ7-f3kh^=8_FzddopnA zH{7K~N9^8|o}3Dg#Akw+D>|!Wa+1=<)~tJtCXMVyhGT8x97+HaYnv$dz<`bg^FA85{F#NS0)>Dl4Rp+iQg~3W+V} zS#w5&^GCyhmrtKu%{>i$H!Q%Jzkel?aV~f6No1}@Z7pU52)-mNmRx8#mnS8UtUP%& zP?$6=kai6-E=m1!7`lk;#3W^f*{{WFQG}&}5IyUVg~H_)?h3=1Oe^}hbH#DHd;l(m z0Va3-Ms$Y&az`#i{)9#b$1!_{_Toru=|I;W=;|AuDuxG@af@rD{Y10&Qcv{0j!yx* z%}&h)2+dPJ0Uv2^(^8Il%9a>QU=#UgMy|62;7nyVC-WXDRL|}em|@?@Xj#L8X@4zL zc8A?qqkjCUKwmkmLrar5I=DG;kHj(?z%TcegV_%UOMx+4&(#PJ^T*~2AWIQd6)8P3 zJJv+nUTX$R+|6UX=I~nR?xMZ29gUuQ^U^h$fuVA~SE86prrpnibeO8-z~e2Y#AwtfgySUeg8< z9;Fu+`7bnc4?V*~HBB0m`QF;K9}kN53&?(ZQR15>0C|6cAK21gu_8H-5udL5IaJ(z zjUtmm!%|4qC>1#(I9z9Xs}lq%Lnasm#%hNwqX5k z4Hnmw>Bwmruu~w;Cmab7ROX(+ytb6(FX@XXzaLFKg()rzezXHpKuY*QJ{^|N%rPR7>w_jL3A|(v>DF|BUY4aPp+LjZR3PDvL%z$SIOFIrsIoX*tT0|okA#a zZ}c`-3AMRvg&Qo}iG_Ls#w=S$*qm*#D|zu(ztuIwz&W?8&Hx$zfHdIwsDM>cIKY85 z)_t@mJ4WiF;4^#js9}_cZ{rcF*4&CtdFwMb)#h@F)+M90q zNao9Jw27A??>rRB<`hScn95k5;)oQ`jHCJSW%Frb7M;D}o^BT5{h>KYdBw0$_Kp6W zVA^?{1(H!P(gVg!PVYn?IAVqjkr0R5{Mna-RbqC)!5(WP$K7$FfBL#VY?pzWlKpXk zP{9Ufb-qUAse*fR!ivj+`(*?*u+?a;Rc4@AU>vI_a1v6aCrkwfGudFfzwDQ%a->zI z)AdOX=)ZRKD{@!5HlalRn^m1GgZal+C#Pw1F{F@s@e6?AcAzF?qAj|K$m1}UqKOl3 zJvM~%dxcQLhZC7xpL+iv)2tJakiM4k2g=D9Cx6qTM%QU|%%I++m^rG0)RX zP|Ao8VltQ+HHJ%p$$VOIS0+4nIc{pnh!+NAvfgMgdG0#RoM930@yhRu_5#kkx1^5 zIvSD8kc4HTpk(nA>`S^~QJiBrn}T*(I{?Mj6e`}N7~?;^vm$gW)LXvf%MY>gPT~b) zGlMUg=X0>(^@@{7h4@H8L(L$m-m24mkXC2|c+ZS?f~{`YeN)aZ^zom+)yM zzmcT5TrrZiV=`UAR8q_+kyN0RzRFBnJtwOZCN;74s{02ZUE1n%X0x2qT8bHacJV3Q z3m#_oX?J@MWl1Eu--|JpH8?TteS4<4X{juIfA$1`_~z7>5U`RH4@xEH}p`t8PZR-b3EGSq2b{5Jr`{8Q~^@ zV8?i17*U|l46V3rg`=tf9B~LCgpsQ_rvivh&RT8^e{G-_d7kN$m1Y3d8P+OjWEB0? z5&`S)NU(2aMyNb4J~msgKZ)Bz2Zwi}`is+^on!)>6n?aO)e5p=JBy>wqEc4G9Cu?P z<-33D_Z$5Sx7B$DVNtlY z+gKAmx7vlto{M}7hL_R7gKMUwnhH$ZC3dEMdm>u{suBF z&CRY~Bpl@aB4|V8Z+Q&ZEfpG&qFA+7Avo;DjjI$KC_7;yjV2F-xlt;s-NEPFZ)6o1);{bL? s7iQOVcP6G&&@@*A*A)JjiOg4>))D-<{2u8GJ9Yp700000000000Fz_L8vp + The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows the robot to move similar to a tank by driving the left and right sides at different speeds. @@ -16,14 +19,18 @@ For this stage, the four drivetrain motors will be referred to as `leftLeader`, # Motor Controllers -The core of frc programming is controlling motors. -This can be done by giving commands to their motor controllers. +Motors can not be controlled directly. +Instead SystemCore talks to a motor controller and the motor controller then drives the motors. Vendors, such as REV or CTRE, provide classes that can be used to both control and get sensor data from their motor controllers. While each individual type of motor controller has its own class, motor controllers from the same vendor are mostly interacted with in the same way so this stage will only use the `SparkMax` for REV code and the `TalonFX` for CTRE code. -When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID are given -in the constructor so the code can communicate with the proper controller. +When creating a motor controller object, the physical motor controller's CAN ID and the CAN Bus ID are given. +CAN Bus refers to which of the 5 SystemCore CAN ports, or which CANivore, the device is plugged into. +CAN ID is an integer that each CAN device is configured to have. +All devices on a given CAN Bus must have a unique ID. +Using the combination of CAN Bus and CAN ID SystemCore can give commands to the correct motor controller. + For this exercise the motor controllers will have the IDs: - `leftLeader`: CAN Bus 0, CAN ID 0 @@ -37,15 +44,19 @@ This is how the motor controller objects for the left motors will look. ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DriveMotorsLeft ``` + For the CTRE code, the CAN ID of the leader motors are stored as a variable since they will be used later on to tell the follower what motor controller to follow. - This helps prevent errors from occurring by ensuring that there is a single source of truth for the correct CAN ID. +This helps prevent errors from occurring by ensuring that there is a single source of truth for the correct CAN ID. +Additionally, CTRE uses a CANBus object to store the CANBus instead of just an integer. + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DriveMotorsLeft ``` - Since the Spark Max can control both brushed and brushless motors it's necessary to specify the type as `MotorType.kBrushless` for motors like a NEO and `MotorType.kBrushed` for motors like a CIM. -When writing code for a real robot, make sure your motor type is set correctly! Setting a NEO to `MotorType.kBrushed` may cause unintended or unwanted effects. +Since the Spark Max can control both brushed and brushless motors it's necessary to specify the type as `MotorType.kBrushless` for motors like a NEO and `MotorType.kBrushed` for motors like a CIM. + +When writing code for a real robot, make sure your motor type is set correctly! Setting a NEO to `MotorType.kBrushed` will break the NEO. From 2880d96fada0d532d62e908c58f47072a6d4516d Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Fri, 31 Jul 2026 16:19:17 -0500 Subject: [PATCH 14/25] clear up things + danger message --- .../stage1/stage1a/kitbot-drivetrain.mdx | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index 45361426..bd6dcf36 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -10,7 +10,12 @@ import ContentImage from '@components/ContentImage.astro'; # Drivetrain - + The kitbot uses a 4 motor tank drive meaning the left and right sides are driven independently by 2 motors each. This allows @@ -21,6 +26,7 @@ For this stage, the four drivetrain motors will be referred to as `leftLeader`, Motors can not be controlled directly. Instead SystemCore talks to a motor controller and the motor controller then drives the motors. +Motor controllers can also provide sensor data from the motor such as its velocity or temperature. Vendors, such as REV or CTRE, provide classes that can be used to both control and get sensor data from their motor controllers. While each individual type of motor controller has its own class, motor controllers from the same vendor are mostly interacted with in the same way so this stage will only use the `SparkMax` for REV code and the `TalonFX` for CTRE code. @@ -38,6 +44,7 @@ For this exercise the motor controllers will have the IDs: - `rightLeader`: CAN Bus 0, CAN ID 2 - `rightFollower`: CAN Bus 0, CAN ID 3 +The motor controller objects should be created inside the `Robot.java` at the top of the class. This is how the motor controller objects for the left motors will look. @@ -92,6 +99,16 @@ configure devices through code to ensure that all motor controllers are properly configured. This is especially useful because it can be easy to forget all of the configurations that need to be added and their proper values. + + For this section only the motor controller's invert setting will be configured. This setting controls what direction Since there are 2 motors on each side of the drivetrain, its important to ensure that the each of the motors on a side @@ -100,6 +117,7 @@ This can be accomplished by telling one of the motor controllers to follow the o This is why one motor is named Leader and the other is Follower. The code tells the Follower to listen to the commands given to the Leader. +The motor controller configuration will be done inside of the constructor for the robot class Motor Controllers are configured by first creating a motor controller configuration object. This object stores the configuration so it can be changed and shared across different Motor Controllers. @@ -121,7 +139,9 @@ This object stores the configuration so it can be changed and shared across diff Next, settings can be changed from their default by calling various functions on the configuration object with their new values. For the left motors, the invert setting will be `true` for REV code and `Clockwise_Positive` for CTRE code. -For the right motors the value will be the opposite. +This will cause the motors to spin in a direction that would drive the robot forward when a positive input is given. +Since the motors on the right side of the drivetrain are facing the opposite direction they would cause the wheels try and drive the robot backwards when given a positive input if they were configured the same way. +Instead they should be configured with an invert setting of `false` or `Counter_Clockwise_Positive` so they also drive the robot forward when given a positive input. From c7fc87c3cc7aa85df1aa3a28ac07193fb3f86ef7 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Sat, 1 Aug 2026 13:15:07 -0500 Subject: [PATCH 15/25] DifferentialDrive creation --- .../ctre/src/main/java/first/robot/Robot.java | 2 + .../stage1/stage1a/kitbot-drivetrain.mdx | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java index a3002cac..f20877a0 100644 --- a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java @@ -44,8 +44,10 @@ public class Robot extends OpModeRobot { private OnboardIMU imu = new OnboardIMU(MountOrientation.FLAT); + // [DrivetrainInstance] public final DifferentialDrive drivetrain = new DifferentialDrive(leftLeader::setThrottle, rightLeader::setThrottle); + // [/DrivetrainInstance] private DrivetrainSim drivetrainSim = new DrivetrainSim(leftLeader, rightLeader); private SingleFlywheelSim intakeLauncherSim = diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index bd6dcf36..e5ee451d 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -205,3 +205,45 @@ Remember that some of the configurations may be different. + +#Arcade Drive + +ADD IMAGE OF LABELED JOYSTICK FOR ARCADE DRIVE PLS + +There are several ways to control a tank drive, but this stage will be using arcade drive. +Arcade drive uses a single joystick to control the direction of travel and rotation. +The y-axis of the joystick is used to control how fast the robot drives forward or backward while the x-axis controls how fast the robot rotates clockwise or counter clockwise. +WPIlib provides a class to convert joystick inputs into commands for the motors to follow called `DifferentialDrive`. + +An instance of `DifferentialDrive` should be created under where the motor controllers were declared. + +
+ Solution + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DrivetrainInstance + ``` + + + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DrivetrainInstance + ``` + + + + +
+ +Notice how the `DifferentialDrive` constructor takes the form `DifferentialDrive(DoubleConsumer leftMotor, DoubleConsumer rightMotor)`. +When created the `DifferentialDrive` is asking for a `DoubleConsumer` for the left and right motors. +A `Consumer` is simply a function that takes something as an input so a `DoubleConsumer` is a function that takes a double as an input when called. +When given a joystick input, the `DifferentialDrive` instance will call the functions provided to it automatically commanding the motors to move to produce the desired motion. +The `motorController:setThrottle` syntax is used to proved the `DifferentialDrive` instance with the motor controllers `setThrottle()` function. +This function commands the motor to run a percentage of their maximum speed, also known as duty cycle, with an input from -1.0 to 1.0. +Therefore, when provided with input from the joysticks, the `DifferentialDrive` instance will call the provided motors controller's `setThrottle()` functions with the correct duty cycle to produce the commanded motion. + + \ No newline at end of file From 4d2fb27dd61c0376d858a03159610f4305cf868a Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Sat, 1 Aug 2026 13:15:07 -0500 Subject: [PATCH 16/25] grammerFix --- .../ctre/src/main/java/first/robot/Robot.java | 2 + .../stage1/stage1a/kitbot-drivetrain.mdx | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java index a3002cac..f20877a0 100644 --- a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java @@ -44,8 +44,10 @@ public class Robot extends OpModeRobot { private OnboardIMU imu = new OnboardIMU(MountOrientation.FLAT); + // [DrivetrainInstance] public final DifferentialDrive drivetrain = new DifferentialDrive(leftLeader::setThrottle, rightLeader::setThrottle); + // [/DrivetrainInstance] private DrivetrainSim drivetrainSim = new DrivetrainSim(leftLeader, rightLeader); private SingleFlywheelSim intakeLauncherSim = diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index bd6dcf36..e5ee451d 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -205,3 +205,45 @@ Remember that some of the configurations may be different.
+ +#Arcade Drive + +ADD IMAGE OF LABELED JOYSTICK FOR ARCADE DRIVE PLS + +There are several ways to control a tank drive, but this stage will be using arcade drive. +Arcade drive uses a single joystick to control the direction of travel and rotation. +The y-axis of the joystick is used to control how fast the robot drives forward or backward while the x-axis controls how fast the robot rotates clockwise or counter clockwise. +WPIlib provides a class to convert joystick inputs into commands for the motors to follow called `DifferentialDrive`. + +An instance of `DifferentialDrive` should be created under where the motor controllers were declared. + +
+ Solution + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DrivetrainInstance + ``` + + + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DrivetrainInstance + ``` + + + + +
+ +Notice how the `DifferentialDrive` constructor takes the form `DifferentialDrive(DoubleConsumer leftMotor, DoubleConsumer rightMotor)`. +When created the `DifferentialDrive` is asking for a `DoubleConsumer` for the left and right motors. +A `Consumer` is simply a function that takes something as an input so a `DoubleConsumer` is a function that takes a double as an input when called. +When given a joystick input, the `DifferentialDrive` instance will call the functions provided to it automatically commanding the motors to move to produce the desired motion. +The `motorController:setThrottle` syntax is used to proved the `DifferentialDrive` instance with the motor controllers `setThrottle()` function. +This function commands the motor to run a percentage of their maximum speed, also known as duty cycle, with an input from -1.0 to 1.0. +Therefore, when provided with input from the joysticks, the `DifferentialDrive` instance will call the provided motors controller's `setThrottle()` functions with the correct duty cycle to produce the commanded motion. + + \ No newline at end of file From 4cd30c4a4224ce270ec6dfdfd4ad2c0e8eb09265 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Sat, 1 Aug 2026 13:22:59 -0500 Subject: [PATCH 17/25] tryingToCommitChanges --- .../rev/src/main/java/first/robot/Robot.java | 2 ++ .../stage1/stage1a/kitbot-drivetrain.mdx | 19 ++++++++----------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java index 96514e2e..940e2b34 100644 --- a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java @@ -38,8 +38,10 @@ public class Robot extends OpModeRobot { new SingleFlywheelSim(intakeLauncher, "IntakeLauncher"); private SingleFlywheelSim feederSim = new SingleFlywheelSim(feeder, "Feeder"); + // [DrivetrainInstance] public final DifferentialDrive drivetrain = new DifferentialDrive(leftLeader::setThrottle, rightLeader::setThrottle); + // [/DrivetrainInstance] public Robot() { // [MotorConfigCreationLeft] diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index e5ee451d..d8843472 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -206,19 +206,17 @@ Remember that some of the configurations may be different. -#Arcade Drive +# Arcade Drive ADD IMAGE OF LABELED JOYSTICK FOR ARCADE DRIVE PLS There are several ways to control a tank drive, but this stage will be using arcade drive. -Arcade drive uses a single joystick to control the direction of travel and rotation. +Arcade drive uses a single joystick to control both the direction of travel and the rotation of the robot. The y-axis of the joystick is used to control how fast the robot drives forward or backward while the x-axis controls how fast the robot rotates clockwise or counter clockwise. WPIlib provides a class to convert joystick inputs into commands for the motors to follow called `DifferentialDrive`. An instance of `DifferentialDrive` should be created under where the motor controllers were declared. -
- Solution @@ -234,16 +232,15 @@ An instance of `DifferentialDrive` should be created under where the motor contr -
- Notice how the `DifferentialDrive` constructor takes the form `DifferentialDrive(DoubleConsumer leftMotor, DoubleConsumer rightMotor)`. -When created the `DifferentialDrive` is asking for a `DoubleConsumer` for the left and right motors. +When created the `DifferentialDrive` is asking for a `DoubleConsumer` that it can use to drive the left and right motors. A `Consumer` is simply a function that takes something as an input so a `DoubleConsumer` is a function that takes a double as an input when called. -When given a joystick input, the `DifferentialDrive` instance will call the functions provided to it automatically commanding the motors to move to produce the desired motion. The `motorController:setThrottle` syntax is used to proved the `DifferentialDrive` instance with the motor controllers `setThrottle()` function. This function commands the motor to run a percentage of their maximum speed, also known as duty cycle, with an input from -1.0 to 1.0. -Therefore, when provided with input from the joysticks, the `DifferentialDrive` instance will call the provided motors controller's `setThrottle()` functions with the correct duty cycle to produce the commanded motion. +This allows the `DifferentialDrive` instance to call the provided motors controller's `setThrottle()` functions with the correct duty cycle when provided with input from the joysticks. \ No newline at end of file + The `DifferentialDrive` instance only needs to be provided with the Lead + motor controller's `setThrottle()` functions since the Follower motors will + automatically follow. + From 3cdcb0636c9567963cce8f394966306c4488380e Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Sat, 1 Aug 2026 21:00:09 -0500 Subject: [PATCH 18/25] IMU and CheckUp --- .../ctre/src/main/java/first/robot/Robot.java | 17 ++- .../rev/src/main/java/first/robot/Robot.java | 27 ++++- .../stage1/stage1a/kitbot-drivetrain.mdx | 107 +++++++++++++++--- 3 files changed, 127 insertions(+), 24 deletions(-) diff --git a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java index f20877a0..75bbf5b4 100644 --- a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java @@ -18,6 +18,7 @@ import org.wpilib.hardware.imu.OnboardIMU; import org.wpilib.hardware.imu.OnboardIMU.MountOrientation; +// [RobotTop] /** * The methods in this class are called automatically as described in the OpModeRobot documentation. * OpMode classes anywhere in the package (or sub-packages) where this class is located are @@ -39,21 +40,26 @@ public class Robot extends OpModeRobot { private TalonFX rightFollower = new TalonFX(3, CANBus.systemcore(0)); // [/DriveMotorsRight] - public TalonFX intakeLauncher = new TalonFX(4, CANBus.systemcore(0)); - public TalonFX feeder = new TalonFX(5, CANBus.systemcore(0)); - - private OnboardIMU imu = new OnboardIMU(MountOrientation.FLAT); - // [DrivetrainInstance] public final DifferentialDrive drivetrain = new DifferentialDrive(leftLeader::setThrottle, rightLeader::setThrottle); // [/DrivetrainInstance] + + // [IMU] + private OnboardIMU imu = new OnboardIMU(MountOrientation.FLAT); + // [/IMU] + // [/RobotTop] private DrivetrainSim drivetrainSim = new DrivetrainSim(leftLeader, rightLeader); + + public TalonFX intakeLauncher = new TalonFX(4, CANBus.systemcore(0)); + public TalonFX feeder = new TalonFX(5, CANBus.systemcore(0)); + private SingleFlywheelSim intakeLauncherSim = new SingleFlywheelSim(intakeLauncher, "intakeLauncher"); private SingleFlywheelSim feederSim = new SingleFlywheelSim(feeder, "feeder"); + // [AllConfigs] /** * This function is run when the robot is first started up and should be used for any * initialization code. @@ -81,6 +87,7 @@ public Robot() { rightFollower.setControl(new Follower(rightLeaderID, MotorAlignmentValue.Aligned)); // [/MotorConfig] } + // [/AllConfigs] @Override public void simulationPeriodic() { diff --git a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java index 940e2b34..6bd7175f 100644 --- a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java @@ -17,6 +17,14 @@ import org.wpilib.hardware.imu.OnboardIMU; import org.wpilib.hardware.imu.OnboardIMU.MountOrientation; +// [RobotTop] +/** + * The methods in this class are called automatically as described in the OpModeRobot documentation. + * OpMode classes anywhere in the package (or sub-packages) where this class is located are + * automatically registered to display in the Driver Station. If you change the name of this class + * or the package after creating this project, you must also update the Main.java file in the + * project. + */ public class Robot extends OpModeRobot { // [DriveMotorsLeft] @@ -28,9 +36,18 @@ public class Robot extends OpModeRobot { private SparkMax rightFollower = new SparkMax(0, 3, MotorType.kBrushless); // [/DriveMotorsRight] + // [DrivetrainInstance] + public final DifferentialDrive drivetrain = + new DifferentialDrive(leftLeader::setThrottle, rightLeader::setThrottle); + // [/DrivetrainInstance] + + // [IMU] private OnboardIMU imu = new OnboardIMU(MountOrientation.FLAT); + // [/IMU] + // [/RobotTop] private DrivetrainSim drivetrainSim = new DrivetrainSim(leftLeader, rightLeader); + public SparkMax intakeLauncher = new SparkMax(0, 4, MotorType.kBrushless); public SparkMax feeder = new SparkMax(0, 5, MotorType.kBrushless); @@ -38,11 +55,12 @@ public class Robot extends OpModeRobot { new SingleFlywheelSim(intakeLauncher, "IntakeLauncher"); private SingleFlywheelSim feederSim = new SingleFlywheelSim(feeder, "Feeder"); - // [DrivetrainInstance] - public final DifferentialDrive drivetrain = - new DifferentialDrive(leftLeader::setThrottle, rightLeader::setThrottle); - // [/DrivetrainInstance] + // [AllConfigs] + /** + * This function is run when the robot is first started up and should be used for any + * initialization code. + */ public Robot() { // [MotorConfigCreationLeft] var leftConfig = new SparkMaxConfig(); @@ -70,6 +88,7 @@ public Robot() { PersistMode.kPersistParameters); // [/MotorConfig] } + // [/AllConfigs] @Override public void simulationPeriodic() { diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index d8843472..8df4bcfc 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -1,6 +1,6 @@ --- -title: Drivetrain Motors -description: Adding motors for the kitbot drivetrain +title: Kitbot Drivetrain +description: Programming the kitbot drivetrain prev: stage-overview next: false --- @@ -90,9 +90,7 @@ Now try creating the right motor controllers on your own. Motor Controllers have many settings that can be changed such as IDs, motor -types, and limits. Vendors provide software, such as REV's REV Hardware Client 2 -and CTRE's Phoenix Tuner X, to run and configure their devices from a computer. -Motor Controllers have many settings that can be changed. Vendors provide +types, and limits. Vendors provide software, such as REV's REV Hardware Client 2 and CTRE's Phoenix Tuner X, to run and configure their devices from a computer. However, it is recommended to configure devices through code to ensure that all motor controllers are properly @@ -217,20 +215,21 @@ WPIlib provides a class to convert joystick inputs into commands for the motors An instance of `DifferentialDrive` should be created under where the motor controllers were declared. - - + + - ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DrivetrainInstance - ``` + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DrivetrainInstance + ``` - - + + - ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DrivetrainInstance - ``` + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DrivetrainInstance + ``` - - + + + Notice how the `DifferentialDrive` constructor takes the form `DifferentialDrive(DoubleConsumer leftMotor, DoubleConsumer rightMotor)`. When created the `DifferentialDrive` is asking for a `DoubleConsumer` that it can use to drive the left and right motors. @@ -244,3 +243,81 @@ This allows the `DifferentialDrive` instance to call the provided motors control motor controller's `setThrottle()` functions since the Follower motors will automatically follow. + +# IMU + +An IMU, Inertial Measurement Unit, is a sensor that allows the robot to accurately track its 3d rotation (roll, pitch, and yaw) as it moves around the field. +While there are several vendors that sell very accurate IMUs, this stage will make use of Systemcore's built in IMU. +An instance of Systemcore's IMU should be created beneath the `differentialDrive`. + + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#IMU + ``` + + + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#IMU + ``` + + + + + + + +# Check Up + +By now the top of your `Robot` class in `Robot.java` should look like this: + +
+ Solution + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#RobotTop + ``` + + + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#RobotTop + ``` + + + + +
+ +The constructor for your `Robot` class should look like this: + +
+ Solution + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#AllConfigs + ``` + + + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#AllConfigs + ``` + + + + +
+ +And VS code should not be giving you any errors. + +And with that you've written all the code necessary to make a tank drive work on a real robot! +In the next section, simulation will be added so the code can be ran and tested on a computer. From 5a451606edef4e913652592aaefeb0d9558b2a99 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Sun, 2 Aug 2026 20:39:04 -0500 Subject: [PATCH 19/25] Drivetrain Sim Code --- .../ctre/src/main/java/first/robot/Robot.java | 2 + .../rev/src/main/java/first/robot/Robot.java | 2 + .../stage1/stage1a/drivetrain-sim.mdx | 72 +++++++++++++++++++ .../stage1/stage1a/kitbot-drivetrain.mdx | 4 +- 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx diff --git a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java index 75bbf5b4..84953cae 100644 --- a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java @@ -50,7 +50,9 @@ public class Robot extends OpModeRobot { // [/IMU] // [/RobotTop] + // [DrivetrainSim] private DrivetrainSim drivetrainSim = new DrivetrainSim(leftLeader, rightLeader); + // [/DrivetrainSim] public TalonFX intakeLauncher = new TalonFX(4, CANBus.systemcore(0)); public TalonFX feeder = new TalonFX(5, CANBus.systemcore(0)); diff --git a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java index 6bd7175f..ce01b6af 100644 --- a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java @@ -46,7 +46,9 @@ public class Robot extends OpModeRobot { // [/IMU] // [/RobotTop] + // [DrivetrainSim] private DrivetrainSim drivetrainSim = new DrivetrainSim(leftLeader, rightLeader); + // [/DrivetrainSim] public SparkMax intakeLauncher = new SparkMax(0, 4, MotorType.kBrushless); public SparkMax feeder = new SparkMax(0, 5, MotorType.kBrushless); diff --git a/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx b/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx new file mode 100644 index 00000000..d646f489 --- /dev/null +++ b/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx @@ -0,0 +1,72 @@ +--- +title: Kitbot Drivetrain Simulation +description: Writing the code to simulate the kitbot drivetrain +prev: kitbot-drivetrain +next: false +--- + +# Simulation + +Its common to be write code without immediate access to a physical robot to test changes. +Luckily, your computer can also run robot code allowing it to be tested without a robot. +While there is some things that can be tested by simulating pure robot code, there are no physical motors to move and respond with new positions. +Instead we use simulation classes that use physics to take the desired input voltage to the motors and estimate how the physical mechanism would respond and update our motor controller instances to match. +For this stage custom classes have been provided that abstract away much of this logic. +You can find these files under the `simulation` folder if you would would like to read the implementation. +You can also read the WPIlib docs on simulation at if you would like to learn more about simulation. + +# Drivetrain Sim + +To simulate the drivetrain simply create an instance of the `DrivetrainSim` class underneath the `DifferentialDrive` instance using the left and right Leader motors as an input. +This class will read the voltage commanded to the motors and, using its physics sim, update the motor controllers with new positions. +The class will then publish the new drivetrain position so it can be viewed in AdvantageScope. + + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DrivetrainSim + ``` + + + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DrivetrainSim + ``` + + + + + +# Periodic Methods + +Robot code needs to be run in a loop so that it can continually make new commands to motor controllers based on new controller and sensor input. +To accomplish this Periodic Methods are provided in the `Robot` class and `OpMode` classes. +Periodic methods get called every 20ms by default causing any code placed inside of them to be ran 50 times per second. +There are also periodic methods for specific robot states. +For example, the `teleopPeriodic()` function will only be called when teleop mode is selected on the driverstation. + +At the moment the `DrivetrainSim` will not actually do anything because it is not being told to update periodically. +To fix this, the `DrivetrainSim`'s `periodic()` function should be called inside of the `Robot` class' `simulationPeriodic()` function. + + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DrivetrainInstance + ``` + + + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DrivetrainInstance + ``` + + + + + + diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index 8df4bcfc..be8c1f2e 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -2,7 +2,7 @@ title: Kitbot Drivetrain description: Programming the kitbot drivetrain prev: stage-overview -next: false +next: drivetrain-sim --- import { Tabs, TabItem } from '@astrojs/starlight/components'; @@ -319,5 +319,5 @@ The constructor for your `Robot` class should look like this: And VS code should not be giving you any errors. -And with that you've written all the code necessary to make a tank drive work on a real robot! +And with that you've written all the code necessary in a the `Robot` class for a physical robot! In the next section, simulation will be added so the code can be ran and tested on a computer. From 50e78e8c10e7eebbffc0b56b52ff6e9b7ed62836 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Sun, 2 Aug 2026 21:39:39 -0500 Subject: [PATCH 20/25] fix drivetrain sim page --- .../ctre/src/main/java/first/robot/Robot.java | 7 +++++-- .../rev/src/main/java/first/robot/Robot.java | 4 +++- src/config/sidebarConfig.ts | 4 ++++ .../stage1/stage1a/drivetrain-sim.mdx | 14 ++++++++------ .../stage1/stage1a/kitbot-drivetrain.mdx | 2 +- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java index 84953cae..a62663a2 100644 --- a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java @@ -44,7 +44,7 @@ public class Robot extends OpModeRobot { public final DifferentialDrive drivetrain = new DifferentialDrive(leftLeader::setThrottle, rightLeader::setThrottle); // [/DrivetrainInstance] - + // [IMU] private OnboardIMU imu = new OnboardIMU(MountOrientation.FLAT); // [/IMU] @@ -53,7 +53,7 @@ public class Robot extends OpModeRobot { // [DrivetrainSim] private DrivetrainSim drivetrainSim = new DrivetrainSim(leftLeader, rightLeader); // [/DrivetrainSim] - + public TalonFX intakeLauncher = new TalonFX(4, CANBus.systemcore(0)); public TalonFX feeder = new TalonFX(5, CANBus.systemcore(0)); @@ -89,11 +89,14 @@ public Robot() { rightFollower.setControl(new Follower(rightLeaderID, MotorAlignmentValue.Aligned)); // [/MotorConfig] } + // [/AllConfigs] + // [DriveSimPeriodic] @Override public void simulationPeriodic() { drivetrainSim.periodic(); + // [/DriveSimPeriodic] intakeLauncherSim.periodic(); feederSim.periodic(); } diff --git a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java index ce01b6af..76608356 100644 --- a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java @@ -57,7 +57,6 @@ public class Robot extends OpModeRobot { new SingleFlywheelSim(intakeLauncher, "IntakeLauncher"); private SingleFlywheelSim feederSim = new SingleFlywheelSim(feeder, "Feeder"); - // [AllConfigs] /** * This function is run when the robot is first started up and should be used for any @@ -90,11 +89,14 @@ public Robot() { PersistMode.kPersistParameters); // [/MotorConfig] } + // [/AllConfigs] + // [DriveSimPeriodic] @Override public void simulationPeriodic() { drivetrainSim.periodic(); + // [/DriveSimPeriodic] intakeLauncherSim.periodic(); feederSim.periodic(); } diff --git a/src/config/sidebarConfig.ts b/src/config/sidebarConfig.ts index 3aaf9a22..7c3399d5 100644 --- a/src/config/sidebarConfig.ts +++ b/src/config/sidebarConfig.ts @@ -114,6 +114,10 @@ export const sidebarSections: Record = { label: 'Kitbot Drivetrain', slug: 'learning-course/stage1/stage1a/kitbot-drivetrain', }, + { + label: 'Stage 1A Drivetrain Simulation', + slug: 'learning-course/stage1/stage1a/drivetrain-sim', + }, // { // label: 'TBD', // slug: 'stage-1a-commands/the-command-body', diff --git a/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx b/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx index d646f489..adcf3a0d 100644 --- a/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx @@ -5,15 +5,17 @@ prev: kitbot-drivetrain next: false --- +import { Tabs, TabItem } from '@astrojs/starlight/components'; + # Simulation -Its common to be write code without immediate access to a physical robot to test changes. +It's common to be write code without immediate access to a physical robot to test changes. Luckily, your computer can also run robot code allowing it to be tested without a robot. While there is some things that can be tested by simulating pure robot code, there are no physical motors to move and respond with new positions. Instead we use simulation classes that use physics to take the desired input voltage to the motors and estimate how the physical mechanism would respond and update our motor controller instances to match. For this stage custom classes have been provided that abstract away much of this logic. -You can find these files under the `simulation` folder if you would would like to read the implementation. -You can also read the WPIlib docs on simulation at if you would like to learn more about simulation. +You can find these files under the `simulation` folder if you would like to read the implementation. +You can also read the [WPILib docs on simulation](https://docs.wpilib.org/en/stable/docs/software/wpilib-tools/robot-simulation/index.html) if you would like to learn more about simulation. # Drivetrain Sim @@ -42,7 +44,7 @@ The class will then publish the new drivetrain position so it can be viewed in A Robot code needs to be run in a loop so that it can continually make new commands to motor controllers based on new controller and sensor input. To accomplish this Periodic Methods are provided in the `Robot` class and `OpMode` classes. Periodic methods get called every 20ms by default causing any code placed inside of them to be ran 50 times per second. -There are also periodic methods for specific robot states. +Additional periodic methods exist that only run during specific robot states. For example, the `teleopPeriodic()` function will only be called when teleop mode is selected on the driverstation. At the moment the `DrivetrainSim` will not actually do anything because it is not being told to update periodically. @@ -51,13 +53,13 @@ To fix this, the `DrivetrainSim`'s `periodic()` function should be called inside - ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DrivetrainInstance + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DriveSimPeriodic ``` - ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DrivetrainInstance + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/Robot.java#DriveSimPeriodic ``` diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index be8c1f2e..913c7234 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -208,7 +208,7 @@ Remember that some of the configurations may be different. ADD IMAGE OF LABELED JOYSTICK FOR ARCADE DRIVE PLS -There are several ways to control a tank drive, but this stage will be using arcade drive. +While there are several ways to control a tank drive, this stage will be using arcade drive. Arcade drive uses a single joystick to control both the direction of travel and the rotation of the robot. The y-axis of the joystick is used to control how fast the robot drives forward or backward while the x-axis controls how fast the robot rotates clockwise or counter clockwise. WPIlib provides a class to convert joystick inputs into commands for the motors to follow called `DifferentialDrive`. From 92fd0ddd83c16c4d3af0634545df24170c13d862 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Mon, 3 Aug 2026 13:47:32 -0500 Subject: [PATCH 21/25] Teleop Opmode --- .../java/first/robot/opmode/MyTeleop.java | 5 ++ .../java/first/robot/opmode/MyTeleop.java | 5 ++ .../stage1/stage1a/kitbot-drivetrain.mdx | 64 ++++++++++++++++++- 3 files changed, 72 insertions(+), 2 deletions(-) diff --git a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java index 316f7dce..abedfdb6 100644 --- a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java +++ b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java @@ -13,17 +13,22 @@ @Teleop public class MyTeleop extends PeriodicOpMode { private final Robot robot; + // [Controller] private final NiDsXboxController xboxController = new NiDsXboxController(0); + // [/Controller] + /** The Robot instance is passed into the opmode via the constructor. */ public MyTeleop(Robot robot) { this.robot = robot; } + // [DrivetrainPeriodic] @Override public void periodic() { /* Called periodically (set time interval) while the robot is enabled. */ robot.drivetrain.arcadeDrive(-xboxController.getLeftY(), xboxController.getRightX()); + // [/DrivetrainPeriodic] if (xboxController.getRightBumperButton()) { // shoot diff --git a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/opmode/MyTeleop.java b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/opmode/MyTeleop.java index 09fd6ab1..38d257df 100644 --- a/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/opmode/MyTeleop.java +++ b/examples/stage1/stage1a/solutions/rev/src/main/java/first/robot/opmode/MyTeleop.java @@ -13,15 +13,20 @@ @Teleop public class MyTeleop extends PeriodicOpMode { private final Robot robot; + // [Controller] private final NiDsXboxController xboxController = new NiDsXboxController(0); + // [/Controller] + public MyTeleop(Robot robot) { this.robot = robot; } + // [DriveSimPeriodic] @Override public void periodic() { robot.drivetrain.arcadeDrive(-xboxController.getLeftY(), xboxController.getRightX()); + // [/DriveSimPeriodic] if (xboxController.getRightBumperButton()) { // shoot diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index 913c7234..8f344cb2 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -319,5 +319,65 @@ The constructor for your `Robot` class should look like this: And VS code should not be giving you any errors. -And with that you've written all the code necessary in a the `Robot` class for a physical robot! -In the next section, simulation will be added so the code can be ran and tested on a computer. +# OpModes + +`OpMode`s are a class that registers itself with the driverstation providing a name and robot mode (autonomous, teleop, or utility). +This allows the robot to run different code based on what is selected on the driverstation. +This stage will use classes that extend `PeriodicOpMode.` +By extending `PeriodicOpMode` these classes gain a few useful functions that are only called when the OpMode is selected on the driverstation. + +- `start()` is called once when the robot transitions from disabled to enabled. +- `periodic()` is called repeatedly when the robot is enabled. +- `end()` is called once when the robot transitions from enabled to disabled. +- `disabledPeriodic()` is called repeatedly when the robot is disabled. + Further information about OpModes can be found in [this blog post](https://zharel.me/blog/opmodes/) if you would like to learn more. + +Two blank `PeriodicOpMode`s, `MyTeleop.java` and `MyAuto.java` are provided under the `opmode` folder. + +To control the robot with joysticks a Teleop OpMode needs to be created that periodically gives the `DifferentialDrive` instance new values from the controller. +First a instance of `NiDsXboxController` needs to be created. +This class has functions that provide the state of different buttons on the controller. +Multiple controllers can be used at once so the driverstation gives each a slot. +The index provided in the constructor tells the `NiDsXboxController`which slot to listen too. + + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java#Controller + ``` + + + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/opmode/MyTeleop.java#Controller + ``` + + + + + + + +Next, the `periodic()` method inside of `MyTeleop.java' will be used to continually update the `DifferentialDrive`index through the`arcadeDrive`function. +The`MyTeleop`class has the`Robot`class as a parameter in its constructor. +This allows the Opmode to access the methods and fields of the`Robot` class. + + + + + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java#DrivetrainPeriodic + ``` + + + + + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/opmode/MyTeleop.java#DrivetrainPeriodic + ``` + + + + From 04dfc33b6643dfea20f5668588d0f06de228c5ad Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Mon, 3 Aug 2026 14:09:56 -0500 Subject: [PATCH 22/25] Fix my silly mistakes --- .../ctre/src/main/java/first/robot/opmode/MyTeleop.java | 4 ++-- pnpm-lock.yaml | 8 ++++---- .../learning-course/stage1/stage1a/kitbot-drivetrain.mdx | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java index abedfdb6..7c849cfa 100644 --- a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java +++ b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java @@ -23,12 +23,12 @@ public MyTeleop(Robot robot) { this.robot = robot; } - // [DrivetrainPeriodic] + // [DriveSimPeriodic] @Override public void periodic() { /* Called periodically (set time interval) while the robot is enabled. */ robot.drivetrain.arcadeDrive(-xboxController.getLeftY(), xboxController.getRightX()); - // [/DrivetrainPeriodic] + // [/DriveSimPeriodic] if (xboxController.getRightBumperButton()) { // shoot diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2256b1f2..c34ead41 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,7 +47,7 @@ importers: version: 4.0.4 '@vvago/vale': specifier: ^3.16.0 - version: 3.16.0 + version: 3.17.0 astro-eslint-parser: specifier: ^1.4.0 version: 1.4.0 @@ -1278,8 +1278,8 @@ packages: '@vscode/l10n@0.0.18': resolution: {integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==} - '@vvago/vale@3.16.0': - resolution: {integrity: sha512-Cm5cW8bEsnXQHqJDcwWtrONtbpNxA41gpp/YNRLmax8Wn+lWg0YROmk4zs3VAldQ813QOARqoUfZIbUVp2LOzw==} + '@vvago/vale@3.17.0': + resolution: {integrity: sha512-vzVFOzr0y9dbXfHqnpgfs8juCflYZpqDmbNyUqdjuTzfNuATtzthTRrqE67RZt5N51FBkJiv58vFjc6ySVgjjg==} hasBin: true abbrev@2.0.0: @@ -5204,7 +5204,7 @@ snapshots: '@vscode/l10n@0.0.18': {} - '@vvago/vale@3.16.0': + '@vvago/vale@3.17.0': dependencies: rimraf: 6.1.3 tar: 7.5.22 diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index 8f344cb2..7faefdb2 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -369,13 +369,13 @@ This allows the Opmode to access the methods and fields of the`Robot` class. - ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java#DrivetrainPeriodic + ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/opmode/MyTeleop.java#DriveSimPeriodic ``` - ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/opmode/MyTeleop.java#DrivetrainPeriodic + ```java stage1/stage1a/solutions/rev/src/main/java/first/robot/opmode/MyTeleop.java#DriveSimPeriodic ``` From 786020dd634074a7e93d945de44eaf778d749b94 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Mon, 3 Aug 2026 21:38:36 -0500 Subject: [PATCH 23/25] Tutorial to Sim GUI and Ascope --- .../stage1/stage1a/importLayout.webp | Bin 0 -> 44482 bytes .../stage1/stage1a/robotMode.webp | Bin 0 -> 7288 bytes .../stage1/stage1a/simGUIscreen.webp | Bin 0 -> 46350 bytes .../stage1/stage1a/simulateSelection.webp | Bin 0 -> 89710 bytes .../stage1/stage1a/wpilibIcon.webp | Bin 0 -> 88150 bytes .../stage1/stage1a/drivetrain-sim.mdx | 66 ++++++++++++++++++ 6 files changed, 66 insertions(+) create mode 100644 public/learning-course/stage1/stage1a/importLayout.webp create mode 100644 public/learning-course/stage1/stage1a/robotMode.webp create mode 100644 public/learning-course/stage1/stage1a/simGUIscreen.webp create mode 100644 public/learning-course/stage1/stage1a/simulateSelection.webp create mode 100644 public/learning-course/stage1/stage1a/wpilibIcon.webp diff --git a/public/learning-course/stage1/stage1a/importLayout.webp b/public/learning-course/stage1/stage1a/importLayout.webp new file mode 100644 index 0000000000000000000000000000000000000000..fcf3320da1ca3b05334ad7d38e310aeca7b2afae GIT binary patch literal 44482 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 z z6I6y*T~34)&wy>hdru0HM052B6`MvXBNHM1Vh3M}X7TJhIkN5VFxJ**uXVX&vXw{k z<=t28$|ce1;bx*v>gePvvaiFqIS0n>vQL1oR#_D~|HMkX(&pQl-$su{(i#gzM4El9sYYICYNn z2SHoD^Qg;B6GUD4LOt{XoDqL)h9uQV!-gs!sSrEMJFhtD4~Drw@bPR6v9bQk?U82Yvd-(T4l{AKRnkp4SM*47l=YbSh9F=wm66EYkL(daN7 zX7dSWobw>ptkBeaXWQPWCC_K3DKG2azD)LT=dv{|NwPV9hw*{YiDERS?v(%BMfhhE@9h-oG$Fgl-Vqvv8!7ntWM;G!fXt_fB*jz#!0>HqVr zj^>HPUZ*wt2Z=cw1D4~tExar`h}htNW8szVuddLAeEpxb{I8+J@mF|QR1b3-@fwY1 zD%+e9Mi?$c3ra!0FNz`yJS(CPO&oq2OH3muJ**fMv(R}YGW5>=l(^!hkwcI(PX4?B znC^OQStiS*iN0|EG~tuKLYN}?f6t$q4l`aJ>_e%1b3fGDqO0!D1D)%BgHJUW&$v&j zSy|vgBg(ufF&i!c{ct@rGw(;r%S^KH`DsK6q$o%J+Q573W8TQ^ARN8^BI*8i91_{o)B-u<4^RiLoG6pr(jKE@en@jw&QYl6o39C~*kXgOF z=6{jEn~z<8^(YFTr~cu#KgVU4VTKaHrJemX)u4m*b&?2-#wKRoLJ`?HVfSU&ufmVcrCpHCz>^^blVv|F<=w5a{5Y5(h- zzpDT5Jz-}cpx4(Q-9&B=RP%Kzi69T&p9S*^<5`h%doY!f65IE+Kzz*L)usU8WNKbD z;IA-}#SiacpV4B~E=Mu%sYyz9zA~OGi)oB78La1qRU{gAbV;Eb&~^Fv$I-NF`TzfR znW-hldv}wWsHoKjhc8&P;M>{|8diGPz|9jgLi1<5;FS0fSQ(ta`>190ZB%%#)BS9L z3A$``%SXP#+=y@i^_vG@We6IO!MqOcd6x0*(~NXlMyB?>;_c6Z`<=Jgyypu9v*0xQ z7T`-vWa>1!_;*YP3P-M>)(z+;H1BODcr_E#ZFcNr5|jwmWkS70J*eobHof^*dB{JU zK#0kOkE)AiSEfrs<_H5Av9@sz4^{cP2^s<*Gd|!y@s6nC+g`L5_u6$_FK@e*h z9S@}5+BH^IQS2rp8H;H~O(ywdDN63i`%tFXMd6 z&r-fEL4AcnF)3CNsN9w2v(--Rv+lx6KJEN8mH*r(y#58j#gomM&Sn6$I+idLOznpE zQEtK3@X{Ah>1o9?f0xGS%P@k%Q?KIKNqylf`cMph!Hu?na|IGWq6Rf>oe=t^boGKK zJ&>DdOd!pucQ9p~XxF{DQ#Lpp9D5r1Vv_jR z2|3Rv@}Hg3!hDSuS_&lScy`RTZD2=N#Cdt+%31>~KDzOPcZ7=#u0E*?SyEqZFx!NJ zZdc9F_*J&QECR!Lg%LH7riIE@wM4HB#NM&Ne!N=Vtm1W+~a{X z@tB6PW&7!|1ALkgN>?3Ef2>lOn_FRTJf8^soQ-+a&N-Qy4dwBo*$ z7GioY^WEu{@)g^gM^jBE8(7=gtFYM&$B&Yi>cAOc!<9I2e)J#?v5TK0t#!YjW&wQl z*6M%`f-fV6?0zYe%_oji-NgOm-Kp|~sSz!~m?*xhh@~SEG#EdnZo-jLJOD4#)0&^k zY?oSYGJ{B6#%bJNO*y6CQGqAhQSxIF()>PTCdQJk?^r^4rKeBzc_#;$hvFhQ9nTgghSPxg{L3*F3B0C- zB1fydJxc0y79p{0lMkH=hRJdmhi~{KwW{t#8Y-Lwne#P~>4zkUt13xV z?Y&Bh6n?6WXc+?m6=oFPRl%l`GSh<*g^+kx zm#z7+)LZ3@FVs37b1xAPAtk`*j4wnrh26E|7sbBmkR>vm$+1@WQoZ4gYmY>&Dx6Jr zZzXl+0*T}+^9WRsr-;8#$qd{r7d@(6px+Umpc_q4b}LOjt7-3%vM45LiFs;}koaAJ zaol@7U8KF?$MdlA+6pd}@jH(67-m%eF%7}d&~QF`kc6-mQKv6C+)7O_%Yg^QnEW&` zr4y%sl zNt-MkE6yNLPh_o>q=%aVA76{Q+eJ788rK_D*zq8XULC@eix0R`S^GirI#X?LSf71z zCY4nTk$t3!oszip@CYB%_+l#_*I%3}t&DCKGnw_;78ToY3*$W1GWxC{*4vrTaS@i8 z)}`C^alt?LRIs{1%5?9DxBZQ&X?IdBLpX0HfoffaM z2h1mL+2K&D`x<&CA)XhC50f2SI@E2Y%7c&QpOd_fNC+rL3RQ&V7C&2KnU=3wwbh|a zEy(R&Bb6$>8V{UZ2H!!L4aJubZFSLV-%}p337E@}<`qb0ieXQmAH6k#RGtsx52Ur1 zVw&tjM@kG5k@gya>?_|xTWO{qc1s&M&_9MzQSMu4^{sEZ$*)WRR!>K*^C42v1FeAs z4Wu?VSr3TQ7A(@Sni%&FuvBs%Cgg2Q(^6`KTZE71`zMJQkgRPh3w6wRiYq zG#vW+JEnTYa_cALJPXWdB{^xQx$H;ffig!sxhA@9h#^s7L}Xn@F3`YHdZ1Qfux@f4 z92F;iRz!&AbcUo=%p)lg2p-T~o#0ge_+g4o?04(qs#L3e*x$d+_r(&;wCmM0linli ztxZs{eT{zU@v0GWTEjPv1TAkD0{2}@ymtBg3L_|K(VBQwMapSd#&Zmyz`LxF8)LGWQyJr0U$YBcY1pqn z98JHtr0LY+maZn9^JMBgV#MnWJsx}_cMHcW=j;j022C*Q-8<$MY_kgW3bUWcnKcJb z!0oybeBac(H{ESef-bkC)kd|n2&|(l6C5Nzma@kR0!ra}LeU?JD%!pbc4mm2P_qEP z55@u(d$E{j)|JKb>;d&iIeHbp0u*Jh4#CDrTT3XhTpSD?YkWJJDw~i$dkio_S9(CPZ8&DafDfBt6Su& z1C%+M47}(Ta)(WqH=l~Cjd|8XhRx&~C7AZGB2Sh0pz4C%*$&wb}{dp@$mFts`0CYWEd$EmFX-mevv zZ#CNG-@y5!=?$D%4cp#!%Xn+dP8oc(?EKVio%eBT*S^h)Me;Bp8VKnjx_QX`r61nr(eP!7bsVbQ2JjSW!{j6Z4xGEvsCed%m)N{* zoj~9j+6NC9*!V+`aQT!nvd>_n=f!s7TM)dF67a>&=8Qhh`rtj}jpVi8va}&DL?i&M z%t_E21hzE}>Wgffv|RS3L=%K}J6wH01tX-Wo4uuFOGPzDt(%6Oo)U0~u?a zMKed-+~3K(6C@KpSFMbL!J6)&w!gohLe(fed$=n$SN2;Wxgl@Vq{`atgL7Xs~z(WnU_jpGque+Vj1Vr_QF#dINLG+GzW$aNa{TgpWvvqp6|5o$$}$~AEy=v@Va;d;kk{NVME0= zwvQ_auvuQ=<@*c?s)Nd2Wl%F^H2BvoTs{WDWoVK#RoR1WYa~yu7IVl_9o!@nQ0zco zPlSsiWNvWa2q!Lr*Fr3Hw7)06lAUamCiNp^{q~}*{EZ7N{~B&+LC({ioUI%Mdp*jH zKY*GcY9$DVR6!-KHZiYn*eC1sQ??mT#k@6Tf`;UjzAF~iq#5(remSgM9! zdZ+wTa@fes;O3>2Q3m9Mtlq<}fyj44*FHm@GaI_$bVzyUp62sScsy+&%F1Q5nrC6m zvQdu4`-p2tOBDmOa-zfGNI6>^3X9Z&bMcjkVu={VX|ul|H|QxJ)GxJ5vf4U-1!#h^ zH-!wEJAJ`DIB~KQni=@uF4%)RJwmP5QT2WU2>2UgjRk;PwNo=ilm5qp+N{Zd%YCTo zHzEnXg-7r>O}CO(pN+3D?1bh+ZdxgGQ>;F-#E@TbygS~le0X_PEiGBZy%;Z=$a&;Q zA~=eu80yzZe<^?U__CD0c@943s}LIGt#dGlriH2&55yKThDdIAidk5XlZ*iUMLr}eDIWU>EG&VY`u`wf+uPW{bF42*Tk~=w-dIz4O^ zHnZNtfet{;%~gg;M|$wG%tm-38iuzF@{s=Yl@(WmlbiiBZb?2GD4THs$tfP%qGudu zT2U*I%H!14EY)EMXKh54YUZ=%HR=>vTIP;Nm(hvaN$enV>U$~2tcm;wcNj=jr}&tg9cPt3F2^UZT{1kyT-Lnrpbe2Cj3TBrzJG(g4>FuiIh8;EM% z|0bUaA_{W@yg5XHrEvxM46?6Ru)Ws^sr@kUg|3JZoVw7~)+(?tR+DZ&`L#ICyMZ_`^y@X>uhaz|-J z=zNxSFW<>qHgThe{-k>+Tx_lo&wy%gi1soywX$ino|NUc=yzLZFx16v@5GX_(fs@* zw`F{mv~T|&e1r%7{@Xe`rj6JO2gXe^0$vO~zk}6oa&Fi&V=V@!8qD_q3~7FKu*u9P zPGktPH33wN{pUsBZ_-iGb)7ei{h#l8#&V$W)>12zRC1ADl2y1+?BTvSW+gDO@~>rs zMJG_rTI4U5ZV_(YQgs-5R#37Te2Cdjw>tulZ0@$gWPPRs@*^GM>Jx&%WIy`o{Y9gT zx}0b0OKZx?7ge0OFCBY+;b00{h#x^;eWUmWksSI)8SYiB*C4QwpT{!ZW@qp%;K4P4 zPQ7{g$NQ=`<4yg|mqbVB@QxYmKaY6s(n#0HPcr`=I|W(HI#c!JYN6P6&uhMXY4 z0%+Vl8azBV$_wvp+Cb)W?I{hjvOO?9 z4ic3LixM+|dL`aguS5Kk?&v4oET*@5oT#)*)rwU^ccF7$F5?}m5;j$=`}6HeTTP7+ zM5^O$=H4S&JEk;F;TM8cG-3l%GFxc?K}q)VN;47&;}T;Vo@*?$+2MYJ_pw>7@;A)U zi3;1>TDshq>EH1tYR-Cc&$wmoi|==uh&Nx1K+T}GU0rRAMdH4B(v4?cO}$7V$!FQr zti$brZ%bVJcDhv2t*nXNAF4DVNzu$3KqJ`BE^%Agq7y-p%i9{nmYvVNqX-*`QAA}i za_UKPBSP`rZ2y|7#SpZvf*Z8G_;foW#A)rhqRCnB2@JBDNalK^Zw@`y1kc8!eqIr8 znO78%kTcZXnByO>a-Z7j$WVbEzOV%Wr~1k6(=wq^L{s^b1(82k&%9bXGUU6rU78=p zyNOWn2Ja8yTAfr*uUd(Bhg2_3mCX0!eG^QWKUpSnJafNu&RnEe=~2~{FZ69Ia}p(m zod5QiVrQ=TY~@%9{ffzujR?FabG-<(%@HOH6f?+ZTFf<3N>;S11(OrP*;d=Xz{UiC z%uodI&jG(DKW5irZegzA7E0hs;kk89=;H$Vrl79c9{$ya*T}CyLh!KxQ>>IW8+K!) z7kms4gOj+lyeb7)>igla0x8BaCX#mUD0!5x#}T!drgD~0?0)X~tA8|6BM_4Go*(*a z=^?$4;54waI+|w;wG$29Ian4A;%1umow$G()2S&)hK&jl8vToiA;}d7_d&+}G-?dZaZhuX43VoWt^ROCxsX6m&GI9&#!$_> zBf6bRO#bLVe|+A1F-~!@{#nXd&t5R+ItJlP4D-8tEP`0 ziE^En%CVby2@+Y?ier2_odta!6|&2^Sn*t}MOwReVO517UP zg>xD_Z4_b9F&S_{iSQIO=c3g%b8Pk+_u~hc1+R;DEs`-ol@<#Dm9r3xh!R*4M2bMb zD!26NR9nLlU{0;acY0ZZe7*Bj<|>p(3$gpzPJXGSLdjPoXz`|&e zNpze#H5i0lIPIrn?Sx=B7Molxego~9qsA#OQZMS#Z^^5+e>v_fFI7{r^~L8Vw(ZKHvnm0u3%nM zsIJ&vs)l1MEEojAkSMB*^kpFb5-!t4&aS89q<0Rz`Wc6#Ar-Uok}$AswxV@b-N-V` zU4@G!v4wfr95~uh7jDEJP1D@*C7e{Y(lQFJofU?`@qBt<9CJ-j1;UNH{}OV5Xkn>< z{!BN5v`F*{r2`CDbE-`Zt_~Y!1jt|(RQf?$kM<&7-B!?~DT>~aQON$j`K5)JLIfk5 zob=nyO>Fk7OUb8(uUaY+SjE1;rPRfKofBS+#XagDQRy$j;{&^@FR3}eeT@R*=UBB} ztl5AU&r7LddNyFAEs&mr&jj0v(`^fM81No!+ih?kXm``ZRn(;z0S* zOpN#hCAWw30}c>hC%#;(D+^_ye|0AQURY7Dl@mIffMoBux2(6DYfsPhazb6S`xfTv z{TV5qJLEZhl;OtZaM1!x&D$%?d&XA#7E4a@BB;hI4rc@1O-YIAcNwJ|_?YvVZtU=b zg9^q+0nw^RQZuY^LzV@|P&OHhcS;szG{Mn{f^lkS>HgeeNnu z(;1Sz?_6AW#%Zs0I}$=b0OdW}4uUKSS9!zLBGZ{6HTab^Ru%(+lmTR{F~V!Z{hK(t z9WO{*={t*_nhcIWFcXf^+nHyNYYwwiGQ4ZOVuPHjPtW}!w+ruPq>4P8%XZ8Y57&tm zTyS3DrV9;U;rrHkNm4Kvb65LY71XZdt7YSiS1Uu7AjD6lk-yM!%YwEc7qLz z@fs)#<*j7Sj;l_onn85~f?*G|`W&CGEWOct$?=U*!N(B$JIo+p5>PrzPcR>5T4%Lo zpR762GB3d;MDhX)#sMQ&)Y0i?VH(SEmQ4Db1Vs{KY|J-bru-pK%3s8dBN&r#JZbgT zU~h>l=}9rc5`0biT??0$$Wn*TbD`gS5-ZjkS|Ax)JH8!bz^s4=s|F(On61NXEM71=QK`Q^LDU$(|gx)9{gx z6W-gGeb=QRsVQ*%QbX{NxhI?-KeTvio1*86i%ts>b}zNY`yU?QMjQ5u=-yzrMBd2H zQ{FM7>rhA_f7DyKL`-;BvUuiD`iXVSVR^%6SB8{fbC2&Dp23OxI-WAnOZ{q{ff@cq zI6)1!=>Ys5`O2CELGy*6t)kKb9C7}OC?2E=m*6;}+{9T+RHlCyNLv#Phgzv4Wg17b68ZqKXE7)XLIMK#XM2;T6F z54;cwW3jsd69f?hx5Qe?uO3XvQg;oVtqi)AeC1;K9gc9Ea7mpi3++)v;^kx*_9{@B zxR&V4fc-Fq3wF+y@I5&K_#n4l|OEJ;eA>mAKEi06_bBppbj z#AHs9F)pAHvmPHhPfSXlxWok4g!Pq+UCXu8+7|CE9k(W+j)I~4#`O{}Ffm?&qa@(a zPUfXfX4IqBBbRYINPEPau0PIvICp-J#%XnlV8c`^G_k)(M6isfX~rhe=p#i_r(z1? z8X&v|adp_e@HM%vx)>hVq^=7+7Sa5^Li+oar=Y|pc?(&j2@=68@lc}((XzWGoEM4y z;jo%c7nc0yIh4`0yk)q9^oG}E-^S;tZW*PbfFuI!ZSaJ!xXl_NR9z(fU37q=Y9tu& za?kKk$w)1~gCuYxM=4J=e;11aAd{zr0K2ZpYAmq6vUr=Nw8)w6@#CZNXhMZ8o|dz2 zW1JbXA$>#d$rgcsJZK$*B^z+ro-lW~xy(V>J_1tD+1eoFktVFWZHtn|rwyB2NzuA+ zcKv>SB{|1{T*|v49JxwE<8#rRZ6B+FU1d~~)qNRzo=ra=|2w==z_GO=rx3BWm2542> z{HSIU#L7CL^V4=eV)FO)_8Y>g%w_+^ELZ9=!{|Cx{Yr5IWO(rHy~iw%X|vF>nh;o+ zFMzLxO59oM5`Iw9e?uYM)a2Qh2xx_)s$^PxzV zm*zQ7$0Wp0{6isilg&h01-2?C!@Ioug4-rbut*5P4hy&a(u{DtDWi?%Ok*@GLwW50 zKOJ(4-8u^0=6vC5w8YU>g*7Pc?It~F5$>j-_x zD!Q&f0Ngs@^N)sDUm#aah zD$IEBfU+IVFC~7r!joVWPr!Nd0!dGkZeO)%a@cDFguk9J6ILNwY8bkoa-7L*u)r0( z*yrN|ObF_U`Vp^N4X`1(eT&(8c2(0HgiqSuE?(pq6wagL^z<13gpgeQw)S)_xyU{V zzo@y49E8;EaK-GN`(sw_M{@W3IoSzMYKq5DunD5(MPgC^^W%7p6mZX6K9t-Y{Gym| z??%Aw^>;sC9(cD-Z$F2eN@ni!AkqfWNCq=6E4fK01fhc^3j3N_YmhH1s>x7|tSGJH zS{SEQV74N_iPVQzhe&_RUsKDly}LJYTd!b>P?e|RMcowozU2NkiR3=u1e#l#-6WIH zVre&7a>xRq063>hkttRb&87nTL#Ql7y z!h`9sfRChVD@^p21KyVk>-*2?<~j(I-jf$AQ)Id)Fn!wyXFX_ddd`A5%>YX6W_azo z3Zc$9uTbtC$#zI?8q9}#BCgjm%q|Bl;mvY2neTWhsy#U57JUY^X%h}Jz>q3+D~hfm z`fB(zIv2g7n{WRfKqVbL1wzDoCc4nlH`5(>g~W0g5{# z_hM9+XMv12-#13P^X9``V{tW))VDm?B0b0JX!)6FdB~w=pF>%U8*}^*?(@)>!-WK; zQir_V>rUKQ^2QN64hI{@KzAV&jp&nx`2FA?$#Th&AS`l#nlCV$8QvLD$`>0_%Ed(a zrb6BgtmR@X37_wDeGe(NJWzzgj2I4tF4YO%s4c{&5D5q0 zw^J#mPm}KAwL0!phMeC+?r;1wmpM>?ez>-OjXs&_q3S`jGPJ+89V6KU`<`a7>FFvb z>KH(UAPkg)%@GUKl7B47k(0b$jf5z}_#hS5-Xy>M#WyRuY_6FH&GCoHD6MyDXwOT= zy*SsqeRbi**tDLK^(a*eAvj;lIy@n>KhQM13N~ydyFRE0N)+x8!d+lbU~wh$7u)Ikk(7TG-N|?z zV1QFuuT;7v1Dmu~0J}?gqCk!^7(o_^4Dnc#=0J|LgH)3+2T*(g0?$UvVaTIn!(FtO zLxUHT!AimKV}w{lfVXQ^V$(_**=3SOA`>Phe??i z>jE6bG-Ik-K~#h8?mMYDczvM#9K>1@qW#l&ZnK zqzw|5+BtWLvx9T8c`I?JPmCBL)57l~2VJCNc_*pPT%c4PT4ZQ;YZ3rrYfBNuByA_? zR){h$YX(Zr(@~7@qpESCAgUW}wdwMe(>D_;^h|VV+CM-UTDFTklKYmEDZKup=|L!0 zvyV#c(N{yAi?v|eXz6h4in-$|G|uu@%WJNe7d9GfGGmL#!X_J@jyjzy7ag(_ z3FV0}2e12EC63C;GeTV>!+c zI36J|F{|L2R+gFT=_eH(=~P)AZ_6L zYjcdLio}vRTxG1}rtP&MM$&Y9bh8pJSMZtuB_^;XCG3T`zpnXi; z2v^dKI?IKbMCUR$>b8(69bIUVda6BcVRQFggNyg0XvAHHqzx7dUbWTF0~_fd`8fq`6Pt#jxBl| z(ln_?FX>!@sP;vp731}D3~8L${{cThz`vJcf=wp~^<(d^G71&kI(Q6HW(I>hQbO8{ zW1r^7^&+gDza_ZGh?ij0aguii6L*VL(Tj`)CNfJy+aCScPUI6yHMADJq%-rS11S8; zX*TN*%5Kj{c{CE!xlP{q&}uCt-buJp4vxfY&72~d{m z6ci&{j2?$z6Kcy1`dVNCJUSAMIR$gRv+Nnj+Q~HlZ*7Geyx%yMm@t)#3CyGe*Mxph zh&e}ltaDbsMP_WMQAba$xh?^=p0Tx|{j(2m^=yXFcISFK6FonNOqFla7!(dlfReq? z*oc=*(`8|k$Mn@#;F8HI%l1-rk&H`k2wd*;<9f=Db^qSWMDMeLxrfguTjAfqsFKil z#c6SqXSc1wsbqLNHamoBNXP8WyM3h-89y&m`|A`9#DjPz-#S0WF;@8>O_gjI02iZy9 z5{?jq5meo)#_t#h(JUWhjMeJX4D0Fpf*l>?TySB8!4aEUU>kItVx#dQeA@HDbKrs4 zBlLk38o=^U^BN1hta$bNdC_{uA`h&s^`1^)>kou-&x7c{?DF!Pk zeHVZoIti8lJVy{dWn?`nQ-}Hj-1aBOF=QuEg$;b)t$Z1cjt zpD`jw?XK&p}TXVkQNS*}7j3 zC6d9S8W{y;!FrMhQo`4%aZ>wA6K^ZpB+~btrcVDoCdH`Endd@fKJZI$E(jN>96=|! zelf`k^T^YU4PIJV!I>JFpJ_{vCuI$uzsu=*?XK45O5Y1BG6qVo4aw!Yi;Meyat_${ z^>~+dgTLRc`b9c+EM%cC&z~_s+A|3XRTcB6Zq=L4!XR@cGMN3?~P35ynocD7{XLFR>hH7qn#PNqL2j9U6jfjUQZ2 z<-2riZgf)IN^{szru}9W4j>M^E#uD-fXdw90ItS7EL@wZxh1-pTd>*VhE;BMRTSTlE#Y5E3E)N`&%zX^7LvQqy-V58c|J@d_!{GwK~>$U)Ibw_ge?!yoN+B)2q2 zu5{L+s9zOr-ggZIVu-Uk0~eQoH8Fj{O9KL~iJSmz!zg9vkmEP+QR2&xnOh+Me+fH9 ztJYO>doa+Z^;S$EQUXm+ggxj7)Dzkd0b@4i3GkPYuLgwMqb}OQtDo}jn2-lm#;jJH#(a(Ub~C-;V?6b+xfU@O6AsgD`(l8s(Gbe3F&ggIHh~l zXP3qWOwS87W7I-Q1BX%>G_}VHj3#6iOAT%xE3ua8zozV$0Kgq;W-imu;IFAYh8gv@8tLc(u(x$3d)*(Zk#=(e7m2Hs=L z`Zx^zt8n*(79JuuEi&{9>ql}x5T+oxxZu;t`1Dts_9@<>kJG zYYJ~RBETqO_T5j?8+|$Sm{<~M&*J0f28Fqv-#S~Pv5#SNwjL!5ROh+0zg-+SlywrS z@KHoEKA>q=Y(YSH9z*3}kSIJ3VU&;7_2hc8BNV0Q&gDtqbF(Q7ie-k=DehC1@@y6n zsm76_?JzXS`-IFb4C+F|AA6I;t3|G178Fu&QZWpmrVL!{Ofco2xm#!JjM}I<-$Q|a z`K%N8LKya9s1!RBTo9XkzZ})xnGHg;_`k-8mtJFPxcg||rC*W3!(0(W-+Xv%VRZ^1 zr9HI6nH7?sr#_DM%GgmSl|%tgQpqhYK(L;X=~*-7V>zsG#dCz;8x8ScX~BNyiC}b8 zwCZ_kuam3D)-gL-^S(3Pel!49o-hl!LM*yl^Abf>Ufx0+o1GiiXkT$a?CMW6m2NM3 za)9k0GOnd^GHQ|9N2t?h;lFbHQ9*2z%Ai)@A!f5SO0@m>)ALY(di5 z6@ww%o}(9E?pnovYGsYgx;6OH!?>HX6sG;_5xE>je4PeM4$i1*zi$y&A;?;ulMjnL zYn;QBrg&3H*F$0tRfp>5)1`|?o3fF%LIEz1Fy^**z{}EBr6y@C({OZGxPR7nsU)mVofkNKkc&iC9l%uTNk;nIp>sdsh@te&=SGC9v% zrD`}CpVWQ!ZBshnNcaQD*F_c8(58JhknR=GjOAd z#S2hEIaA_HS1Nz`9|UTWpx2zjo91pDSf&D%*9I)rui zb5;CAld&$Y{WZUof9=3kX5t!Pq+8)Zx*N>Bcd#1)Vi9bgSI6+U7kdM; zwt>Qr<+vA}aIQZgY1kon(yq$|GaxFlfoOn})$7mFc2HTh2RK|grpULH0Ps#G!(~R| z$v-j+%w>mq1j8VGwCr`%45PWNOfvfO&U_#6>V?3J@^_s;Gqc86*criXtN;K2005z| zt%FyHbi`VpZ=j;>BMl!Hk8tOJFRH}*nb7|__X+~dUx9*or(({gyvLN%{ITLSr@>d( zIA;g8M{TimD*d0N_&=Uk!;Zb0Fl!W7g&n8slWr^{&1>e6?eNDftbO5!n&vEx|n z>Tm!mDK5$W{3TO?{HF-)`PlAHw>6ge99CHT($3iLCIHXk#!meedZqgf4q;Kt^Z$lm zDA;|SN(xoBpCsk5Ks@?q%erp-#LQ1}WVuoKoy%V8Ps$>oAd7UI#>PE{`Fu$vBS2Vz zXQJNw$0*glzehq`LrNHN=CrofUBwEUd8|9D`zPf88c>zI9=5|0X9u1pM536=PISbm zN-}(HLQitM?!3IJI`5zcB(hnrq{s6nv!TU}`@kl}%qtgU(E7)ugH<87-a_0USvPaw zcysG{8q$e=JNA=XK z_j}0~*XvK3Y65gbfpB`)7M3lV_~IS@Fn0(Rgp`@xTB&{!k22A<-Rb<<82>+rp%N!4 zXJ5?(ARS;K$=$paJ=3_RS6q%9H%{dHp+(k4(fSk#)C%)0U(FjPs(ei*w@$ z1PK^R{HGh!l_ePG(p`Br{2ADKL{w@>w#3qBdkCOcOX@(kE#2Cq5y0>d;jRxJ;27O_ z4UW)c!;6^LEnw7r(4bV%MFL|kf0T?&bEpNBhdSt0=aM+*`QG;}10>lmw%yPGH*J}N zZpO<*uhEF_RG#1dI?lVWT}(YlB8o@=!Td$exDrBhW2wjyCbO{!G{j|Q?8wp$=U zWoK^e{Fe(7BfvEO6xWbcdD@-^1S)+wj&~RBsXf3PC*W&nE~=(_5M%(9J}p$6n$>kX zQYc^g!!#J^%sasr9gW6V@IB`aXdPsAY5TC97dW~@7-=$CYlgd@eB3e^YrmMX;?~sy3T9#L;KDYF}c)v%DTvdR-+CI@Hr~)Lc z?HbFzt-}T%tu^Rz(!(f*l6vb9BplTP!qW%o01l)VK6(fmaEWwgO@_w~X7{XyLBllR ziN4P1v1X&tMFL&+mf;m{wSQ+05)FSkp1K^KeMJMcbZKQR$^zVgXrkJ-Az>j`4@hA^B$=Y~%QB zh+^&l5DkKu9l$OF!Tu%YBsG5;Ry2OnreA!}9fvy4yg^RyD%eof7JGMu=aQ4|^R|d7 z9W1_!)iRmQic@ni5}qtadt*A8kXIFkx|z^ek6Ju6IB_OSabFT0Qv-70i3Vq@xk_az zl~J&OqwzxVoB#zLeyAF%;eXpXQxcbcO%^jQG^N`j@#1k$(eEG45w|DXn#)`&6+>H9aG z54{&A(uc=FDPjrrBZZ83u66bP-Yg+wT_Sj!Ds59=6pZG)1h`XKnk*whZ-MkL1VA5o zu;?`&PQGNEecZRee1fBuDTK>ay3t()Co*)sJQZ(VI;aTxT^^N_K2u398EX(bns|&V zc>%MtJrP+shdSf?=n8~d0&G~ThqVybt3Hd2Wik=DwU?=q2-a2;HEDv3%69FKn)WcZ zrjQl&dMgDHyo$bjT@7)ZA=_~XFuI#!dq?;4g@mL1Q^mv=4~O#64L6hLAK*gwx|Gkz z)W*n{-<#jJSv!dem9Arw&q&wJNiX08I);9z3sSj zUQx>|_pIWw%YA7acc@+qwc%!3S7?BV$(Maeowr`nxw?lvJF^kpOMNcb_Uz*-wQ$Kc zK^C3{P7gP8Ur!@Cq!pnHvvB<8k=C8MatOvaajw^*xpH?!owr1TBjaqkCYO}>fxsgBmS$?S^OR_@iL_#QxI?Aq9! zY+Ydi@e2IM+n7OFXE#S(Ky4U4An*h$Ui1PL?ZRf7wH?UMnq2B~3kF)^O$NPz^9Xp! z&z!FsHjEo;Q9#EQLvN)x4I{YVTV3==!Za*>m_hag%sxwebVhu2(XME2C~w=oWH&F7 z7Ce;5Usk2@lTSCoe%siD=1hEr_9xfLU#2b_aN)h(@HMe(dtTcS*{A|{&%;`uojlTS9A$4?RyX?YHy4mD^o4lZW zXUaR+MAcfhTnYUq@laM^V4P55xENFdQy=G;0K3{tZM4ST)mzP=K`C6CnX>nMrIZ`4 zXoHTAxlkc_HY(6t=Quz@f|w2@`W!!zIl7aD+8ThTdPQDkX-NKSl#emIkArtE9wwbC z|J(nV?I=aY8s4327}0%E!nmZ7Sgy0gU_KRRnN+_+-c>XMZCkbt{|=6dL|`0%C+@7a zMQ%vGI?rDX{qZx~=)cW>BLD{w8m)BeoPcm4?+uIu9)rU^+Zz|yF2ldKIo1GHW9YP4dqg(V=ULy3N^a-c-*$fuc2y?g zryUnbD9Arng+wJo4(q#xg{KZ*Mo_k*vi?k_^Tjyfj%AW(=lwI*jYQB`reWeDX zL51!0Si`%Mq>>U&-0uFxC-T)RcX-PQtT+&0I34)?=`V+@Qt)@2(Xxs*P|hkl zq40$9t8*0TtR+=Z;7_$&>jEj$q0vDh_D8y=x9P%&DWNL%aV=YuEP}*lo4xwk6mx;3 z{(@CmVTFzAP|bE0267F-s{mxLcMYA)VhLEb#>JFc@lR+&pV=dW_b}jU2A~AWJ9@dK zxU{{)8lFh!;V4H5?i!X@;v&zo${Lwse9t}B4B2}^ciNjJ9lTrGK^WVaXD5?or!IV_ z30?BhwIOD$!L$G*@&LcF+H-}jZjJ@D+ocVqd$n23#(&?Gt2G~bYjAYF?sI^N!d9kN z8cL$QJw{3zgyrOKq3+wec-Qwj8wJ@jJzH)8cEpGPh9Cd{1OMHy;9@@f)OXUktn|os z9)?#-teDkJ_ru1_VLg&wwYZGB4zCvq1b(mZeW!^hSDb2>duP0Ge3_P8L48})$J<>3 zDWA1yRaFwd2>~yUa(?mFDcRP>Xw>WQ7e#QZo#IsKPxE|8_QrN>+#_~#mSjEq#z+9# zJnZ@^e+%=Kj~9hNeIfzE{rWqCx*j~93nK2=-U~yVXJo~e4aNmJ#W&3|HCU*Y9Tj!b zSTWV@Hn~5o=%z`mSqO`DubgD9=kix^LzcYu}Zw6PArrs5b#8SU??>8ILN4#EI}U$I=Yoq%pS)cVa|9FVWB z@+sk)2$@Mz3AZJ&MJ)SG-;O>>%DcJm3@a(N7i40J?Ai~$QT1=U1UK9E?8FcvnGmGi z^bPLRCXj#viV&9BJ>l8-N~Z(`7N;>F5Tc=<4aje+Qp^3O+j92tL%0np=}-H?)R(Pn;Pw8oJJhtk8J!l>*ZoaX^2&f$d7&KK}FX|Ct+sOf>DX_95g{~4cagiD+;>ZFl3ee@j{Z9z)7!(Qv$ z4*u0dS?L!Zje!T2LzSec4{!{a4Khkze#gC`zWZ)R_=WG`k|S-a-MLY@eb=O1oE5p`k z9RN4?F`sncuZjQCc&W${+L9!{x=)ToF8R!6PjIRtTwG4fwZjwB7lBmN(#n@jpdBWT>ijun}l%!KvlCvV! z3UOO>*@MRF6op;eFXRJeO;p6N4jH;4?1R?ripez#C|bT#uxrkp22V`h<1+#ic~AkH zygzqx?E{EVyFBt)jT}9KiI%O&aFsWbFEEe( zwg2|DpEJJvA1+c77TwM<*`1`enHG>yG&~Jt`P~yx&C8v(Rlv(x0q(6R(0to( zL%F#oH_~G3yx_$A0oh6w;>TzX!9uN_p}7hvE5_B?CL<#ONha5(C)pR0B=}$L4DrwI zvQCG;XgpgU7LjJuLAeq^yBG)f4j3{F&lZHiSvog#Rbn3uEkC*8%-p@-xFmcO)6otj z8ZW%Un3zN5!^{hc(DZ>jpz}gE2;zlyeBB&d#|RC3A&< z8nxMjLH+wsWRCwRSMj(Rq$F!|^hn{@atAUyjRL#D;j7vG8?%Y=ew7gC72|ZR+vAAf zM!c1$hm$^!;ta-mo2luSr!(0rkaf?{BQsaVV+!k1=#oC74F09q6P zyh~UhhydY8h7GIZu550WB{I)*+%^+}LQ6OSh~{QgsGlA*8o(ULIZa0=V4Xt&nL~+ z#4e?W!8;N?0b5eOcq#py2)gw?7c23xMCW}m^6Yx(^w7@k!hRMkJZM#?t)%URDvf5| zx3t_eqmj-7Oei3;H0eA?cx68M|@03%05hAuP^A-Wc-)HQ$u3uo9FMcBX$gH4r+P( z&Acm>{4rJreAZ|^SS@qN&7BkWJPs@{acf(%5Qv`7@6H-*eB@|p9e$)cw-bzQhS)N< zK@NG6G(e*ABkmxY3vQwkUomrm|KNG;!mQRs0)~GFJExD3WF{L)fR~bt zs8Ml4y!uhar6Ymwcq1E|)-<_)=Ce4sfOcf%>#FzY-E4Z{*Xn{Fsbcv^f&3@E-e_cH-%1X>epI5WhYjmI*0#I z^ssbxJfSJz2F|t)7_6W+kYfasVqskRxz_ugH14EV+H_f;Yssu(=Z@l5-05g0j(y&r z71vh$g>>wF4&SUb3$i->l|J**cMG)DJ#2h6SBm*|?$GjJQ+f3_vviolX6ODL2!${= zW*@5l4y|De0;zi-QOnhb8w0PHvf;h;rN%&3!6oC?Z5-~r_4vC)6{*Pnjn>a4q?Y|j zP<|&iQ&2rpxm#00!%@fD0N%u7yYf3BdGyFTj)0m+p>l`@E*>GPD69F=nKG$1%0&Fx zV$n%vHh$M|(}c**tQR2|-0wzetclM+8IM=1-+d$)WSoYmx4p>HCJNG~U+L&*em?V{ zYC=E&Rz@D!YzR7Orre8s%~ed?m%~HO%e7X6LO=2ItUh(pOf!XT0wp;}X?Blz;uL!N zOrzsMb`Jl2eD*n$*PDrMwHEvh%<{QkkbuYlNp068En=l9Dze4xi#H#PT}Tv zQK$E>M&O6gW3`#dd8Z@D$@EBqMGYK+y%Ujv=M8*mv z(P9ZVtaY@qtf#FyJY75cghSZDb|>j@^!=O8hu({mX+z_o6tM*Qk;2A2S33ItZx#@- zu8}-Vl{Trbibiu@0$eGq%@z@$x4`-rf*=pP*mN3?Ctos7KJHuKK0#5+l)`1I-Ds|Y zlbJeRo(i|G9aIE;E{{sdpDP?UrA&Y_b@Pw&wb;G~fZ>$tMT!)VK_vgMa0}cayYLvg7*0tp&=80D`{rWeE+xLdo~K; zvOc133T~h__;3;n$HJN?qw}uVuq+8y^~&ry?4v4*x=5@;2b$```F;O70$MVx3LbZ3 zOqFYvCYzW1h6qf>q70zlxm|(96Ft{McA&@hw=XeaYNc>Ux_`01m&KjE05S7*#@N>G z$mTEM1~bJA&V>r;O6|6u6QES4q8#))G7Qkr5MZ?^eT*|zZD}I^#^(@9oZd%kaafTZ z>oeo&UZm5I9`rCkA@#v^jc zVovm{EtJ#*ZIZ?nlaXLKm^j$aYb$ucEg4LJ=m0bf+K8nG!%X7ROB3`|++PJ;>Y{E` zJbF2B;DD+iKNLfQ8YbBYrL->)>w;z(TxGOANO2OrVSqa0;>|`@JsKU&wLk@53!41% zIpWWKuL|?q>@gJ`+zm=g@o9&%Ap8pISdUHFb{S%g)Oeud4_*RanyZw6-Hu-1WtC$@ zBM@WE(4x7*>+olo+))%Uc^PQhp}H0&L7rsBxhcl9M+13d9&n6zUlKE1Nf-c2hg zCxU5=5NlA;&aeWrA4Q_W+99@|I?nuJQ+Gbr`?L6KvZ*%}IOw`bMnU?tDj_NucU{~p zEjV)eGKIAk@M5X28QgdJAq?%UX4p2bt zy1S7A(_Vn_R;^2E$F(N?^jgxbQFuFCs8OaN~(;_u;B+DyRnzPdjDS}&0ngoctd{J??-S>LT7j#QmpHL zVR{}PIZ?Cw{6mqO1gQP4O;}pw+nyVPE>Tkk3~zhMz;m(aETMqI(EXk#uS)6_45?0v z6+ETn31h(Y5bYQ{198+mj^wKvY0BCaQLakIWbHEMfBo@betU7{{Ib{~^^RgE?~hzp zC!lH4!%P`q5;~eDf3&Uu!zT<6lz7?6$x*&v^3-S_(Kd!Gj}g;uKrSOs*x}sN|Ly3V zfBM9#@h4gelanRm%HuXaU^qad{UucfCW6hUj62VzH`(Xtun%uW;ZK!;C)z(~iX*brwEt{W$g7|k{%-Dl)=A`F^1^<}rKuQ1|o@RTwBC@6`)+SQT%Fa`A$A1FoV4pN?jd}J=z)wCdw%e;hG0;#*O zW@>yO6S)Dk8J^CcV_NLd8!8`Idjs|>j}X?&WQ*9%&)JGrVr9f1-(1L7fC`GC*9)pr z_N1Db3Ho3MX%2@Wly|p+uJbsbftpPakGm+UfI)i3cYY{KhI0YTf$&N#LLs|N@89_~ zs?Ywe@rxL-PJ{96MF#9EZA#~t3`krFZoB=kS0t;7MCkkm0vYSzYx;dCHoyve>i}yM zb;wx90@ItOfuG)6sxBuf=`G(+iW%Z`Izi}{7as1?qtfX6taiU_mBMdvV_ciHAnp(V zdG#KhQ-vJENSp*bKzns*ZTHm>_0ld7ihG`1y1wGTbMDq4CmEtc#Rpx3I`T$5&k{?Z zj+e)xk(X)rcV-f3HXf*C#_rO#6PL)N!+scBS0Cp-nHf0`J`LZ6`AN zvHuGP8&DLSzbU%$;eJid!@v27Xxcbdr>hed;XvxXhE4wZj;scoAy^?FS%2WL zP%18xo9SbJP4e4&N-|DT8AA)`aND-PNtL{HLqb9 zP?7`r$WOD>J`gFW-Dna1u-w!D!B*$lG$_rs8Lt}{0y zBuKC8esnXHOhjBV{>mT^^m_}b-*9IHIhDN&dGa5PZRU4Id#C^-uK?+`)gVjg5%hxx zE^MHNp!ApDJI`;1-CsVyMd#Z$G?hQrxF?Jh9+A_L=(zQ;##Y6e&TRSr{NboFL zDo}I(>$QuxkN@J84*h*SuREK6!G&VHX8;0*84+ws%%9&oM0^kZQCYq<29oZS>7?O| znuHkDwe`PsrPwj^K?^?>kXsFG@`tM^DG?X*oWm!Ko3nd7#yKX*8d%5zUs-k5=pV^$ zW&07DioWQVKUrG)N(ur|U=g%6&Bc1{vsx%qH)ROxjrqk?nPI>}vfxITOdbh|$tL?YNCpK1Op z2=l4-8Si^_hjZY5w-c}*!KA01|J{+oG`}d7Y3NQ{AnzYT8}mu4WRG8f8#*cZ^BWxT z?H^7ozgBCrFCw69#NfiFevD2({jds&yMBqYF5kU!p^+ga^Om%>+c(HI5UjATu-6aO zjt{f0P<3cem~(cQQdTN>&J&5a$9V*^tH2jNogATSgY5j{`w3g=6t^1I&8J_i!|O(m z)=ti^V77{Uj`ULRL!mUZrimy|wF7l_2}Fl6@4ANuSRFLyLeP5y^n8_|3~5s3HR^l< z4D>~%loL6YBpl;KM3wT7>MoC$@(|l#c(e_QOG9<^J9(KppGWYg?CvoJdNIH;vU0~_ zG^!pOBd0ey1;kn=I{Ss)W15*naNM%$)5D0p0ON(MKu$9U4-tu&OHV5N&%yd!o%|U7 z@7SUXYyM!1mV4Vc84-8O@A-~tB zUrcJxFmxaQ6i%==O*i09dg#0slc+BG3fQYbAlzXANvn7#8qcL@kGY9yJi=NF2iRssa23b4+0MhG{h_N#*%uq~s z4>FBbL#VmeRW|IS@T>K2aVPoS;G-(OX0M9_T_hxERhgPnMK!eD!2IdZDk0#VLkVQM zb~I`Rxmv^nnu={GAz8GsY22NeVS1NyW$hd}ltu#B35mf<2L{&4uj|gVYpw_SKTu+6Dy&FriT}XuO^X<`%P+`c-9KY!mR_;$bU>JwZMv_AhlL;d%UF#+bY#~ z)p)crjzqBY2lX?FIqAlMh+jYt_Ev)nAtt8rSbyz$?>0wngGZ6TsP?A2>t*nP5NuQ3 z?+q}n!WucotmC_=%_!{u`JU>kY%q7vrb$|I!yWJZKo}lkJ%c}nZ`V)k__h6r1ftUk zkcB5mJQaA)aXz8k&*Q1#aKb!~Wsza?gp7b^m#?2DXrubPVDu zbh_zcpf>A+>4kO;UR`V4qprW8(!P%;6sGw5%XxV1BO@}r zc7vYJ*oqN=Z6H?anm{AcWTo2e!4PRly{wIyXnREgM2aKyZiMB2trtAAL{4tsa_Vn2 ztd@op(Xm|${Q6|Ox{eBo^yG>IdA6y%nav;&x7<#Z`o)sR+EDnC(>-h`*kL#;gPZxL^hrQ1msnDs31*548UVH>fi>RCt{$( zADHfJ=YcP%8PgbAHmQCzETivtSp;^JH#ik8%@`l`YsGNRO%qSrD}-3#X}M<(!gSjI zp<;M}#Rg|PY&!MP!u#r1Ax>KcIT2|iQr|}F$tA*6QbBloLzVzdT7TP<*RA_r{TqGw z?}DAKKuX*6@zcWBx2y3%=^eBt18!Dt&JB;sDR(BDX_^{&4$78X@*~T@y35_O|>@zVek$f>FAN(_4JMqM>#mnDl&c0mwF%?l6DfxFJvoO(e zOv6RSake<$lD;5vFM(*T?3O}$-IVi^MetcXenR2%`)-ZU?=!R^T9LM3B)f_1a{h0lVJipk#mmhI@6#WC7B-cQg)G085q@40|zZWD%O-hW%5hV#eLG-u2;6ObCsg z@PHdY!zejyS+S9 zd5jGBJ@VA!Qyt)RZwDmQ2K;!bV=UqKfbGG3XvF*D!{JQp1uq4+g)1>Kse_W47i1x)rL< zlA)EFwvXmIpo@hc>xb}iMrjwgeBA<7;_y-QA|o)7cgS76;)so;eh-%q7zRc^vmIK) zI@L^U6U-h{AqaZd-=P09D@ZX#c(Iq65Wg3_K5R?qZ>XGLY%0-hdR9#@26NgD%SC=f>;w}M`UFBp!7vk5GgeT_A+u})Z zP?4Z7^<<^z?KDxv?Y1~xk(|QQpglC!pxOz5DhNJg4s;Bj|CPDC$E9bKd*R=%bWsSJ z%jqDB1?QY59q+@IrC7*Q)mgt6W3XY)O;42L+>Xsg$s=uU^Xq}euxJt&be1^r`Yknk zGJYBYnhpQ+_-6KghvNgCH9YgRhP+TFTbc4uoNZOhy1HLUHP_lUjHVyd9O>d;mKViA=@TNns2MSG56 zL+jrXDIAQthb(=D?``}YcD80^z!&IU%O{~@WLS&G=%1SB{xkf7n21pZ)3|+S{)P2m z%P#XH!}v6YUz`<;6z&3))ZI4kgmKgkvKBD@BJL?8DSS1MorpA+>;}BOWn^;bUTJ?H z1LqH;3oAO^j$*LM8arv9RnW01zI$!|aN6Vm_xIa%1VV)gmvy2D<_7_W?5 zLcie{a#V4!- z*>->@L1VCe&U*;S{WOKwCFM=Qxmrg`tWD`RtEY{>{ab?*#375F#=+?g-efaoq3a<% z*SmiZPcn$9a`Toa`3u8$h7KX~Zb9>Y)8yQ3TA2+o+3K`Wm)lwQ@tBznloG&5-+5_wao^z;e6~EaJt@KdV8L2`Pe}0fPK+y?seG?VNIqikXZ(QM?I}$(_(JvKVd!Sj*q0v;kP~q1iz(MnQX|a{((s_Q&nCD%XkT9F`AJS690ngg>-N{Z zPYiluw4*$xC1P+z3*7(<@c;)K=u?4j$5e$ylkAigt2-6?r=7XmGZ6A9>k8+vnPnR` z?fya_JA<}oiHA#Fn`g)Q6i~cN-N>DQ1tLots4^SMD=PUbOZm7i5*!jug}H>sB?rX~ zsN-K`G{bJb(ZL+=e5~I1JEDR7i$b$%d62%~C2zoKi`7V;EY)_)vYQLrf(L*F$N?w8T zCBPBrnSP4@>!Xh+RZCru4OJ9ZcbMqe(YDBEtW_k+{{Bo6{*t63d>uZ%*IIXA1ENcT z)x!*(NaMlZ(VNA;88JI@xl^nuDMwD5TKkiBXE)N%$lCiT*_~COU0F`?zZX!xlzud- zznC(gfUm%sW+@3m6LuQ!U^jzJ6;Cl|5Gy5C&!)?jk0Zp%5ISz&k8N=l2wL$$PDL>N z9`jBOdP|KU1blX=nR}~3;23b$OK9Gfb+w5C+3+JRls<|YzujQ+ z#ltV7YfePxt_fcaNFBo$t;>^L&0%n~xWGM<4QTgtwAf}-&=j%FLIQ1}RcipcBvqrf zg${Ey_)K;LzX&P&Hq1oG1bWqj8RZAtLf2UK$su@ohSf`|WM|rG-PVq>p5X#a()0ipg3TSBtTaNNZ>kaA>%oGmzq@H^E8=dGKV~T@}b-+e> z>C?w9s7)T7VtSxHL8BYq^d>EwMlKV{t$)|)v1)Bh2+2y}_E+wXtf zqfEIY1&oXicWf=5dC#?!&~{7KcWpDCq@Hi#qdOq3%vN3J508W z3vahnbIF^f_I;LYslp_Z>3G;_%C(6HfwfgQ{rhVy_7sVM@B*x|e~LoTLlk|JGc$2> z_+#w0G-|~i%%+2yg)_96Cn>-QPgl}26a!am4+1z*c{ePmxxd$vvpg?uMhpUGP?!;X zkbLXV0$MO(%P{g!KUICwfe)%+#T#;`&}dpaE7a6>YJ25N%cCY} z!x1JG#9DQ!%`os#6^Yni2V$vYB<)cwI7@yvhV2abyO6fwif_AVH@7Nyf^=^g3y$$s zKOA%EQ`ig#Or9Y$v+oq7Od{GT6#M3J365$Bw^Ttqu=na=0bgTt6Xx`w4xa&*{Tp4w zpV6v4`Isl5Kj?cwNJ2D;n2|*{iM!j?$+&(tst6V+Jp}ZZaN^C2!D=*aC~7i5=s^18 zzS7zds>q}&3W|yiDheR);S@bo^zk_km%_`64-0&<@fD(pVs5xqmQ}rFR9#Q(E_`qf z?(XjH?ykih4qjXjR@~j)-AjwRYjG=3+^xmkF2DQ!*M0B(Hajyb$vjDBWzF6@spma^ zoJ27Qu=RxMi^uCjMbF+N=lW(Ut8n{ACib88ZZhCx+a3an?=v?c-7M)VSuTWUmHor| znMByNI7~eUBM^*yKb2d0I@%RaP$36C?OP6?Cq65jOU&;?F<{nfl{!5$87ew3D@F56 z#T{1JyqMP>^EB+TK&zcg(?VugiFmh+O5wMCCsQTQw6B_!3$0^vOmb?$e;48XIeWhr zzGD{%SldSpv*C8-*vNd{E``ABWwES+h}iGeFD9(vQhIS#+s90 zw)Bz!iJ4Uh^3=cIcnD66f^ZZ~r1azsoj}*#0OxdVRz|ObA^21}?=3nrsjsPR^UwMm z81S!+G0@3Z-E&l}`w*Ft_m75-d{;?zMNfFZE=f;p)~FUFR+h0MW~cC%5ngD5xO3MZ3Y0EvUqtIh;)xD z&;oDm&RPzO=wdldK?Gt^Of|^bhQai3kVYv--XTVRZOf^Eyh{7Wj)hN)gG8${;y*IJ5Bk_}C9#TvDIjtV<1#H!ydvF(SMh6VWQGdd0TM3HtRC8O6{!d9B#VN?oaR7m?+G)7{XZ)yu&AaGX6ge#{_H8V z;zJnnP#9rtjG7TNABsqNj<;({S6vSDmSmBzpg#;bwe38EF8Zr}3_ zSA~R1Yrwwk@*LrJ@UWAC>|E!Vg$sCS>PJIZ6=*5j$w zJrm_|0Nbj|C@XlS)rSY5L4htLTmDo2AwDv0kUq$nej?y)_dPlC-W}_MWA9#)xbTPD z=@0;WX42yi#6JfLuHEDLAid2}VJi8ip(5(K;xq`t*h5Rl+FM9G&d(TOa4l8XRNsZ@ zruQs>BTrQ5!}w*+zuY! ztN?bs$08K5{PW0+G5p%)4$QJ#mla*fM*y5Rbu|bHOB6PMpQ|{AZJa`v4uoH>+u4xf zs8*+e^>N!+T%KRG^Q`09% z#`oNt7!n+;X-RKD$~eMzEYesV|J5M67}GAYd>$-L%q4bA*pF2@ z>JVPlKf|HQj_Y;pFnBVSI4Q~RHkcFIXPu`SFpK;>pGEy8EpGZ1=y)SlcaNjr6w~@z z1oIuiYotfRCY#64&6Szfm7ZcAOo{R7j{r#jebz%5;dXAmINJ8s*4F55W?99hm@inD zl#Kf&4P3A&kGHfrQNK1$s)p7f1w}5zMW^vQks7**6`+iyq4Fi}!|}1}tKVVI4ig(r z!ihkc5EyR*wEHIbhg{}cInGwF(UF%q5g2%F^Nm(HFB&r^4&FG2g!VUaFM1PB8T#Lm zfv>d1>Uthhd$r=LM##Z;KdcC}FA-rv^B`dw^;}omKe7>^&jrV@V1oD#G(0-Vm;gBX zt&d{<=;X6!V~%!*zk44l7@`1A&_wc!#3?BV!g7#HhrK7LNhBTSS+`vb^>J^`-mIr# zQoNnURfg$jr`aw!zTtj)<{d>$!qGF2kWje$FDudI=y*r_{Zl(I<#P9nAYwN?Io_Og z;ik0wXwQb|kCxC2>R*cq-!K_`N^b5bWP1W3GLj)RR@&@U}%yeQW*XPDc>3q zqkUS!in|`uYxj~bBSJG;LYyfx9~J_B-u`?NB?NGr#d{iCuXDc6pQnEzS+l(f{o7Yk z$76u_IzlDq5vWMNXg3Q?^}MV1x>EOq3Lyk$UbUo#dM#uK7Uacubm894=or2G4KLI= zvDh=J2JS!OxQU?@nDvkm#>`Xbq3-TZs14^=(%GwZfjIhUe^p-~#ksW6%y5Nuncx{%xNz22d*TQO)CkHkgldTMnx^M1C25U2-qhjTadS zXGu2j^pEw!5>TY+266uFCd|hN^FefrVH}6=?}oj4ft8I*(|i_N`m)VF*W*60#_jF&r*G^3#m5|Mv`% zz?cUCdN%e-T{5uGUmq0T&x$rO<@VJI{utMeNhDa zU&2Q|eJy->1bbMZSUO~xdi2wUb>v!zr$!HAiI~cDcOTpjk1@(4U$a@RRl&>s?h~uI zWeY{2V&n(z4Updte+|QI%J#}9Zp&SiN`g&hHn@XIx)>xAppPnEr6a&}yp35)<6)e# zG}-B6E%9r0m|9FGvymF<$7L!PBJ^n6?yO4HikFkN31_{3+8TjL#n)}ph;igbb!UYq zqDDqnYH#}VLaCb2NP2|_QsSe#U@;Y3_!-tJnBHD5Pz8}(m15m`Le2cSI`n=DvI{{< z#?3d;-SrVlfMmuGXnpU!zpsG_&~S=zh&@`M!o5}_S8H6dln}@5RV-7(qdout*0Puj z*Y%c_HbJCH;)E_Geg>07PscjzVO9!76R~t9FYp-8S=$`^-d8G?bRF1)qY|9eCEI+m;lP)FFFA7d z@7cU7HyNBG+avO7MgtGE$vhRAsc`@so4tj4g!)%bUWStZ-L9F+{Uc=^+3mW#&Bu(-jG3&79zkRph078CnN57fv)9)2u9OBuuR7($D zE_|}aExDWT&$nHApa+fH-+3=dZo3Jhz!Sb@%dY7@j_X}u0aUGRLT~o1%)$?FhdbmY zbKCcsz0pzpdbR)|iR8v?=9;{4-)+E&j$8#yq2|FOM+i5oxxV5}D(`M%LiZf_3EW@2 z8k%)9~L(Z@2jObM>(f>6{Ql zBk#{tQSLpc`4WX!+iMkDyc2v!GL(p2(!&2r;6Y`Eo@AWgmahu;cEXRgQh$r~c2k5h zYwj(8wd5Mn@EPy`sExQG3i~}ZuF*4!&$^^=BYh|v@?liPGW{^VE41IxYjmQ9=Dt?L zQj&Oxu8r*E^pn|T5B33|N*D+COtPJ3x|mcYD_I9met`Vy{esfi7JBUm|H#YbaKe>a zg|exqio@*@xrfXtm0T@jWi|DT+4;i05#Q^x zRxl^#uT|znSUecPi?|cC&mU1=m<^%zL(aV-Ya^ytH@!Y0@aEm2Pm^;{Qb$>6UxxfQ z&}~;{9aR3r(lQJgUYN_3ijp33YVOu1ONV@gMRQ4J0@|XjFz>5F z5!d~G6V7@&R8NzUgrF>ytlwwW^BcsuE(6PH-xoT3k%Q$vi}hp1O49< zRg$9*VAM@gTy9Kt6MvI5g1wv5>}bF^bqJ zSoq7TZmK9_gHTT7CsxEdM!~Kp{1YW->_927->W){-J)`k?yuGZm>uWY>L3Qo<0nV;jC(F147P0!;y?t z;O2&L?-5IsJy=NqPPz~VQU!I^9?AJG^!j#h_JVKG9G~9*bW>{*K7kFC{EAk+tLOP1 zpKYm)$6yN*vRr(h^lMR?^SZeIAsV4h3B!f#PHu-{3lD>{YL5g(AN7Fz?xo&7a~eGt zYEf9eFx&i>1b}Emn|XewTPpaAjt7soI4P*g)JYvXl`W8~r6vf~G@vhD>DRxAfKm~W z)B%}H6&3@t^qebVsflTWXq>Db6MK;Jj@**65q0e7i4tW|wYEP6-~Jz0)` zWM)&Csp#qYVCZ~KmccH>+h@@J_IH82S7A$=nNqxsSs>GhSiIaSi*1fL2rh(~b8H|K zzPjHcO3urK8=A(m84ZC`wka`a?H<}0b!V4U$5`!l~6385pCHm9ixU^e1>sE zz#j;z^7uA^k0Ad}i>Y2|M5pz^qWcy~ia<#E5c7|QJatZ@6AAyHyN^0)0$LXPvBGqb zw*ua3h^%C}?yvdEognG3GY{?n?m>i99rSyU`P0M^P~IXqH>3B47KUV5fxz6Y1q)E^ zSM!&V7mnx;HzNIb=6Wla;yr{6ho5A01B{*e2~Zf%&OU9QqyZ zr}HkYNloguZ_|ow%C5K!a$SR#dTw^zPC#0mK>34uvd;zth^3p(D+m&M^|czUDl-VT zwy(($tCT$~gY0oyVVsIc6XO0+;vwWX?MJYrhskX<$x`R$`hnm;FmRNQ%)NG!-(;r* zYZrC$(Q!8&-H5UaKP>ejP0~39Jpps)9C_tZX3?ks2PyVj+2eA}yXI`SkTK6&(2HQ5 z+;EOfWYzJgjXKBlo->le^-~ybsAjayA~Igh&+IYnvon20upnCyVHsV;D-=|F{8yD% z3DMz2Q93ADvTwe+p`zjc(mMV|Azh6oN;}F9BGyml5W-(X?a;{Q5*;W*=VpBvxVGb7 z3Tr0|Fiqr|Zh6Gj#B9lHjS6+@9=M4NF9|f*_QS^tV328=-jCzpN)m7PQ`sCBp0SxL zfx#msYGN<0`Jy8L!T(H8>2ut}@TsG>#!6rd(=$O2-gV+ypGKN%<&dh~+mncaCr z1V@dUF#kO5Ia(3jw^})W$-Nlf;Q5E-QHNBL_`}}};ZRzak#VMMI-0eq(5yoxC!DeT zm!1`=uL*L3RQBi^D6L|gt)rpZzJKJp1T(@OEo;5TKD$4?CFaOfLL(dejuc_;)agMH zVBF04_q3z}O7T&fQxmJ(l{=cWk@drehaV53Bb@W0CCgQye}ty}PFf#~bQDgFweI5{ zsFrO!En6h)oF^tb)Hjv1pwktr57!S`THwWawK7N~9gEA8DFsA^Y!xPDq*N)ZobT?l z!f^}|q1vy_Hxxa2S|!{nuCHAG+>5AcOmyF%i`?~lpxN#QsD^IoLe(IIO{l{Y(zO*i?TbHSc z&PWAQ&Jfm$3+S9$HFbN{$kFAp!67zOkLsxat^DJCe;FcN2Z=}@p~l2`SaUwyF7YoK z*s(e9&jzaQMGKxt{A{xD%id@^eZKdFfzr#C)AIytF~{5e-usU)lOVPt&O@v-w(}H%T~#@qy$MV3;v;sbYPV` z@8^Y|P>@-$6N)3ra(Y6(%xM+DQm6?X{=%+@?O}G$&V8n9K{CN7{yD?C&MSOusd7ChbECgn{7_$LN|Z z-t64W+SDbMi}uNgxB(jJ0Zg!#T028kin?=XhG-tjI={c-!W~$Qlk|6tNQdeMSdgCl zitsmpN9gcjtlhYerypl|x_vKFoK`QpgKC&PPPaU zMbADhrr<(yVoL+N!!lqGK#?0{PAevPqmTdAILuO8hU^;@Zq5RBKYjHUq?{svIl1kH}w7y+d zVW`6`>arzb;<3>D8|SMBRq*gz*`1j9Q)VzB`37A%2y|Mic9-yD5m**4ub;*8AWH`V z4w2R_^v(w%ZOU%A$7zMDBw%?gy4qV;*ic}ia##EPs$3%RpwIN-riSx{D7rUJNnOHe z@YOw908lhst0{6wo$Q?u82ojuul?ETUQ2$L-H@7YQ<_*kKCx+;M{w9XDJC;vpFh;q zghv7(AnDFFSfh0zvInwZ(6POzy=Yr*f=r#l+mtzUH~sUutrfnW}_Kg1<|u|D}O} z?vNNz$fs+*v5KNz45h1z2=X5j!yqNZ%bKdRY&vfC;$xMdWa|1k?leue=2c(yhb$nl zG2;|PyT6UOoh=f0W}! zuqhKJfrTY`#U0X;y{rQft zS7dC@AAAX!Gas_5xtP)$p%SB=>>_+({sS}pUyW3_R9MoC_cMKn!Jgx>a!|X1UrJsE zAq-93sse$I5_YFUAq2b|rd6%9ZSkYLah549H)|G!edS1}CN-R^jgO>O%nPwX8I?Kw zz@!W(A3*t(tr*MunN@$D)i+KV7PBVoCCGl&>f4wGb5|43?D&|;s| zM2@a5)!;^EF}h$Vh$Nnq@T4Nyly$=2VrXEpfEHqEBaq}L$k0dXHzwj(AvHV44olQZ z#d4om`44F&>8@?mmRIpEtft0j7OR&$XS67msYx~&L7>V=<_1a1@TdoCtHocs0j9TD zf1!#X9(CszA!S*kH$bi8gG?m9hW@{K8e-!zn3-Fp!zH_D%}+muq4M2+#;f11?Xn*l z3`v6Lq)zM9Z4OeG>{w|V<|Q2sGc+Q69CoqR%Tz*V;_uRNY8y4f-iGd`LY+RH#zuL` zqM%f02+n_$>gT>$LX`DUL3@R?4WTo_>NMmTj`oK6L(I@kj+$qFxznj3N(*2MfPLRfwwf1}t@**d}h8fZ`>Aj zG4+u1!^vCnRk&Of=5pq)i0Q}Enbg5OMQ&d6?8wu!f)my{im900Vy%^GtnLClu_0|? ztH(EHStqTO>v|=0p0?7|IU;h4cJM`a9Oi;3{R1=`+dx@PqRP}J#AUc1l-*jmx|wUpHiptncwIH zF;PD}%(qILgUfofaJ8w+V`h}1F6SO?g#?Z_$bJOW0#108Qljm+R1nL@MD_49Lq zfwZgK1^>!Ir3R_b6+PWh;HN`=#M_F5|5meU9i2#_N(1JlmwJhF9mmtVADOO_fR#+& z-)$^6@P7$$8H~a)&-O5!0OfrpnLt+$;38+<+xF#AfZ229haTzn!MrU7alMxW{4TZQ zh0aLt(NL~?yQEBV60aejY*wdLSMz?XUyb-M8DgFOGtn7+p<=i;C0sMC+jr^YJQaE; zg(X65ml+<$;d&*-8LJ>e^1<*r>rEj%@m!U@A}(To3ZEJ3Vd zeN27{Xxs{{3T1&$5Hwe;uu{ zdbQl=i6cn5(da`8{z5ax)r^C0&BQ^mv`PN^JvHD;RF<7#l$MvJ@6!envU+G7L6y`w zvQ#uGCMmHX5eKMfp`s~2>hHnlbvYJOj@sKgXVs=l%;_n58%L@iwyS&aroH{nuawx7 zE7=#$3k6;3S%*GmMGTErvpBDbs^7S7cQC9;`X5xcIej3s1kGYH3_#ZWus_wRO-2kx z9lGDyhR5rGoU({?F{zqhk3_irOr(wQ`4NF*C8szb=S0+YpsZ6lP0YzHfj&-5F88Ck zO0ADBm3HGE%Z)!EjiQ!6;0O_;CBOpMLHAt5A3r0I>45TvVa^+hkDh1PEI%AJdBmr+ zfGDt<-LbsVm3XpH_CC~YU}2*{WJ^RgS(tBzz*LP@(%sFl+T^CP_7IklK>iLfP9m4r z0K0I13nHBpPeRii-V~pkr_Uj4flqJyhZnpUul<VRGHd>B739Zr0C?86F#)AY04V*FyO7O1z;OGkwsiMAyB)Qip0j(K3_PO7}^%RNAr5WNB^dC`^0N*-J}iYavXl z!>!Dw>?~<%V=L$5YN_F)qG|49XU=ayD=LDFAmk2gK>25~mzP`;Va+$jQT9n8L%u)YwkWM{VE?tgpv$NQ)GZ_2MY{zCs5>I?ao^S|`XBuN>pla2n*VJ7vHl;lPw#KDukFC(uvdO{H;=F%+(R@@fPd32 z9RG9qANl-}RjM<*X)6bDXV|}!XJ6q2k0oI4Ec*(aI#)ES(Z#=MwC%?R4Ul^?f~z** z!rAm1jhyJFHTzX0FSoZ@vS)+PTwyam!S8sjU1}#={fR4Y#Y05FM-PjI*;DF*)eH^% zzJ#^ha_xz1OJZ9R*p|e$C9y4uYpcO7w_48jNtD)y82qYfA5co?_~z{S8`1}*~d6`40vUHoCllKqI;>5?k7rP&R*BY+}2 zuG1nOpRvYW4zpti&C=(n@TA0cnQ_i$?Dw+Q?k9vA?F`DdGHmPoAd%#(9mStw{!N{K zU4>%tp2Y=;6-_Vgu4EiM4m>vO?St^=#4*#ux24lfcwG4+Jr6-g@UO$_(3DdSUZb8#r&H({|F>@Zwvt)Dr*cEJh)F+tp%w$M4BHJfti`Oz5L=& zrEb6}V9%Rp-Ojk1Z!XSFd}`R0aO&aJ!>fl^4y*1f_BfeZZ}3r4u2A&#XLIN1T`eaG zmu9J%yv!Ytl(?!rY_d&KSmXxy-jjv#_$ord8yK%dmGmKlPv7aKW`4bn#bb9)p{#lO z`e(2a7v*$o$jaxGhy(8H8Plu!)PR@Pq+OK*lU1hb&1Ef@e7Y)7*7qez_legY{BhEt zAkGYc83!jE>QS48S)j@@*sJ}1o*eBI`2A5rsVWyzPyB`#Zl^@>cFwl)0m1yNL2j}#dBBZqPZe!zQ=Mwlv`Qd z)T4L0hPoBf=_BP-+|5wQzAUCfb?nL{eR(W`;`C?N7o$G7y&3hz=+CGeY>DPa1$QW( zFFhFrs>Y?zJJZYY6HJWz7xHZD{2-C!tR2OlV*X8?e}ob|le`PP8cHD(+F>QhFM5|6 zRUKjhx*nC?h%42)C$In0PlcD5@>UMw&#`|d&cDJ59!kO7S@tjF+16A24u0xJzN+9)TYvQ(wf-RM%#dIC!-_d!Oo@g*}M?d)@M{)sU&lNQ;C`N72dr@!WsdldwK-}#N$ubj+!s;rwxhW_fk z8yg#>nuMQryBn*W9Ng9YcOl~JW%SI#uT_-CCi~zoWy`1DRqJ6tQv_!#oJW_{Zk#Qx z@aF_5DGtO%NG^#Tif>C};WK!rPbs`Cb}NiB zM@6`DS+P53$H32(KZB9^!4X)zbwGxWj}k=rxq1AGik? zgDF)FxdAQ-4&GCV3h2UOx0~GQtnSr<$;L^YyD{kO8f z0hYayNw;Hfd9Wfe!b{Bk+z2XC#++vd0g!PW+y%8g7vBW1K9Cb;dqx%h?IqG|X2tDq z^ZL9S*f$R+W{#9AB^5_H*dictvDm@fCNM?W)ov;grY8eWi@>tw+u9@*=oADFc$J<} zR=3pyY=otz*C4u(2ShV=^TV`wA(+<`TakY+1RkYggkr20`MW0&ioF;(&i)Y>H#XBd zYs#xpZ!qQ8dMRbs2{oKlf3ix}#E`LGD|1JS)6_*8eF{B7Ng@Zs9&cpi;-~rxGY11F zBV*%LSt&Ntyyn8WaKD&9KUX-8+C->hg58yExwp(PwbcH6nIeL!h3wMz6v#t1>}k(` z(NNm}E|ybx>HRBQor$Hl+}1@03T4nIz^*cjmt6(ecL>)diePov>Vg{z~3QnaqjgP~-Y7r#Y3xD^ME)1RBGoZJ< zRPK`;Afk}9${(0JZ@$%xd|7TQWY4B>zSj<1Y+ShERf}wIcg|z-R(&K&&JvHZMIV1^ z{=Z+w5urJkG%TG>aw9lFH@)p#pF2=uhT4xp)fZKf_^qb3eZJl%yK!c7MTG!8WlL%t z_wjhzUihRvjbnQaLP+X^h&S$YQWFf1r2bscAgixThi@p*pL+CeMepsiZkawN&5B}N zV+n%T44^sh;_nQNlz3$!x%9wtiTH;U48p` z_6b}g!mP~vy~AMK^Jk~_Zkj*>#?(@AqAYYm0qmP$x*);3?J(@v3L4wnTP^tHg|g9L zvTqV%=1{!#Myd9vJcLqz@o6h6GM?yLJTr>~DBDr>YDf!5VxhLtwEEJl2eyxXtz#8g zRfO$$X7#a8iNl4^#jE00Vw?L8Bn3P68ljaM^~hm*Om9g}_%9*tn?(n`#sq1q5v8 zY?UL!r8dU_r9Ck)$k6xC=WqjZQ_dwxf%y>FT0-%b=bv8914pystx7OACE%c(DTv(- ze6$fW0Io^m09IuH000su^Y#Z-A4s*J{Y_zf{74pkZba6eJR2Vc)nRL4Xo@^jlJ zp_1vP>kmA5`^?G;^LFbKLtS^66#fE2rXr|0L?5_^qO{cJ$#cwncl|ZqI(;<-Dy}PT zN8ocHWXi5sBa-JLc50J_Ao$i&IHVlJQpYG}tR*@kgN6YCJzqXpj@dhz1+hMqA`JnM3{KO5=-TqqXDH4PqCkzhlZF zsF5C?{DKF?y)(!wbJ+W@kcHJ(n77{k&Lf2qp6<1T#Wmdo zdDw>yycokhxB*a&Y6SyL3Cx|`%GjscK;1={-7WB2d#brpM~^uJvS!)N26P4hrZzMXNNO4w{gsf7}{`br%_qypfigX{^z`zww2DfLlj>YUTUTp4gx2R>;w zTHdiPC2}^|LhD6g86HRY7>`)uv94gi3JVM~7Dor^c2fYml`%2g{x!iY;aTF80Uz{ux>D zgd3+4QW+a(`>TZFDLmA$i}zDhK6f{{g^%ih0004bMN`$yBQ#7+SAqXoBCJx_9j?Y_W{`Pm~&jNwM%-y@@&4$z9R(JB_|wB+tg+6m4;9b z$<S+;7_`h1snW|6uDkxuV~ z@UX!6{`XJe>eTqQhh?FQO9ByNen{@Z^QNy8r zb;v1Mp=}}+XJPmq)$S^&eDkf=U4B@}aUb9xlGTF22^|;|5qaOUx#>}7?lZ7NbK8a`Pk}CRx*6x@v^yi${P_*eq0)wL?_`3@7G#fL)cI8ZmYGhB4;rMjfAAqFr z#I{vTj$sq3KNDCNUu}~(pGzlG;Z&i{;+)n9T4ob5oGf{wQby|*N?X<}5$XXH?64pj zMjuZm)NCFzO=*WvtNU|II)z``nqkx`{@l|Jp;z|im~{%jw=~13RsFf99YWt9&TzbE zl0AIJ;FoTe^ddNTt=-nwi8*YVx9RZ^4)BR<Gk}5qGsF-X5oUm;X;{xNIuZT#=Q6_dpx3BRnHCSZ5Di^XP@HS%m&FKHJ;|A!vSxKRyuQz;N|xTsnSx+R({);TBpl=LsIPo zq=b7)#yeguHixr=A3|J;p$k5U2@@@(lw&+7SN|v`>p`u_DW-Oz0Wn)Y4T?-PNVt21 zb|>Qp_%;C3^KmUJ4iZ;k=?t%FLa_f0O;(_egbL_^)WQhwe3~Y^a6g15YY9sB36S)+ zg@c+aEcS3%QyDc>uTs?_5wfd?4vZGlt}__2_}W<^S`qCg`1UfQZ;I;<~E>NY% zw{=IWIM56LS3e7kEE7HTFq4*8nT{U~h&cScE7ZY~VOjl0stF)QxU%KVI|mEc#mXj* zBu8Q(v?n>MG#1IP7};@{y}9XnibFCQM&V;!8abqvWiJatj(ec;?l#&%??7WqN7A#7 z11}r-abA~MonO*G#N69VZ>q4AW+Xauw%A7CEnRrPo3`kHF>TeA*ynXlbBln$n^NZ|DF9|0|$Eo{j1JDO0 zlNm_^>!JCD3h;uS^2|Q~zm@dUx@TUxi)7@IjF5_luBeOhwJ#+m?W{(z;2i>7)~M!Y z>v-|%fB-C|9l1Du8L8IJ2O+P^5VLerQxN5|Tkl_Q`hRJXeG{&N&! z5H?xy_E?Hf_`?V4h2yk#4og{vwvyG;zREyRA@hM=ySY%10I|S-gI?3_Z!y}tu+hf8 z+?7fQchI+UzpD^;t9DL1`K^LBRzn05ek!YaRRISM6tXYy_kGrCfDn=a^xY$XmkBEM z**mK`tPL)7YbNn|9MCp}j&M^KV^d}tlUl`)!Dc`35~gqusosuNYEkC|T}2=67Ulw@Xn6%lOGBDaTSP0Ack9% zHn-#4aJ72^nV4-x)pZ&i93SFg3J8Kev)(1>XMwBH(QyE8Sz3N8|a zF$d;Gx83bbe72oUZ6Up<*$GrJ<|Y2<04yfdJeh=qr9!m>U%ih)LKTKz zgTHHosj!_sp_8%hX_BoV1!@L0J5aq;7I}OPPJ>0f#nu z60_AmrO(yHP)udw`JiyQ%dW#KI$f%ON_`}8FJ(-;^xkb%yXY7NRcU@X9gjP~6IUVt z;a^tf7%B2{{TqR~N6u%wKog(Fh~%{dx$s?wN2YH)h<;CrSoUqi35bLM10kU`AE(N7 zK5ip|vHm7J%xQ~fXlP~YllP4h%Bt;AxwPVDd|WfLla%J1=XUl~pp0SD3Xp`F^ppN_tn?JGJeO3O z4v9i#8e|sQB;F4dDjpPRCd9t6kiQr+CnF-4jr>n-{U97P(7qimaz&^ zEc|uPoD6C(P5M|hP5hPpX7Gef-;m;9ikA{?w3((?M zQ-uy2wN<~CqNTX%4juWuJuvRp?u!x1k3L@&_-2E@uwRU^Xp5<> z12Ue}oY-Y28SHX|PPy!waiwxG!zVmjkFksS!$>63`|=c~6z|?6QlapdOJO|AH~b%6 zIzbU4o9qsGOQSQNiffylh+aWr#a;27Qx-JA{jPItiEF>40Y~5ycoRE7ua1E?Yb}W5y?7v`~ z;YMCF4yo2rd}Sf*4eMW0|)j630msd|*k0rD`WIZA56YIEm^_%(npp~1)+x}o;DYEQ?ZYNQyuQJyj z7y7X2a`5cM&;xL2hDZKsZid|`QFsRH#nR?&4m`QlFRjnc-IM_WAZe)&| zAYb%m*CdJu5|0crAr=!nH?_^s85;wVpU%Y#MT?dJ=$GfR++fgt293(t<1i4!;|N)^tksq%_G!2(9o3{pyqly_q98OU%|8|KIEe*&4VG*)6A8^MHtU! zSD=;1@a-4D8FA>JEPM#MG}c{C7j9mp3L;=1Je914B{;lW{Am3WX)JZ;rYv0PWzFq9 z=@}7W)@LET5!Ve^Pn8`0ddCt7FK+{9xc^kb7qV{NdUx$6M%F|` z^0O(v65-uY3ARI*2co;vFV3Pi;@%gxCzxcTrT$&PxqrHJ-%`4*A6hw!SKhsc4g2b1 zf_X8>pcn2a@w7$t&CwH`jrv(3OWqaqiM4Iiv5v~W%Q#C60Lw=uFokL3N}noRQx&@e2pFWq*4yECzgHPJm;p# zk@l~tkL_(ub-FIGcD>2Gl|~fCW;@1&fJ;}GmF)C}bq{xJn8V7WB(Ph8_#31f)5M@L zw{5btlQ{>CE#18?7rG;UUOF7)8tj8AG3k+ylSKH=#<6a6Xg@}uNa9I_X9UDY#Fp!9 zB#qYjTF9gFYpF(j`b6eIR2UETw8G1qxF6>&^-8Sq_K!-SAjFUmVo=&7jK&2*Fi`Gm S-mbAt-(u?tr!f-BLx2F2x>`>F literal 0 HcmV?d00001 diff --git a/public/learning-course/stage1/stage1a/simGUIscreen.webp b/public/learning-course/stage1/stage1a/simGUIscreen.webp new file mode 100644 index 0000000000000000000000000000000000000000..55ed78bac098763d5d05d80bbf2b3e3d3da9274a GIT binary patch literal 46350 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


(0 zt)4H2_;HX%1>g4we*pJ2nZ^VJ*kwbU%D)l`{POPf>DA91$ZBM7vo)7u%ytGC~ z5Tlhpn=PCk!fFG%^zN@F54NDs)6B{kJI*bC(5r!-wv0^xzKTxo1c^WWqiQ&`4YyxI zjL}Kll!5S{4X@Nj3OIkddslodX>f#-%-b1{so&k`C1)?RgBMS@-W)*o`bQ+kKP4mI z2Rlt$K+L}dB&60O;0t^_Jh;4iKBvTlm;pz%cysa?})XFKI6aX9r6+6wu4zxudJJmn;_webC!lcJUu`j=fx#~VsLZ@9zz59}8H4*&oF literal 0 HcmV?d00001 diff --git a/public/learning-course/stage1/stage1a/wpilibIcon.webp b/public/learning-course/stage1/stage1a/wpilibIcon.webp new file mode 100644 index 0000000000000000000000000000000000000000..af0457ddf61ecbe0d11468a9f650f4450eca98b6 GIT binary patch literal 88150 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 For this section only the motor controller's invert setting will be configured. -This setting controls what direction +This setting controls what direction a motor spins when the motor controller is given a command with a positive sign. Since there are 2 motors on each side of the drivetrain, its important to ensure that the each of the motors on a side move in sync with eachother. This can be accomplished by telling one of the motor controllers to follow the other. @@ -206,11 +206,15 @@ Remember that some of the configurations may be different. # Arcade Drive -ADD IMAGE OF LABELED JOYSTICK FOR ARCADE DRIVE PLS + While there are several ways to control a tank drive, this stage will be using arcade drive. -Arcade drive uses a single joystick to control both the direction of travel and the rotation of the robot. -The y-axis of the joystick is used to control how fast the robot drives forward or backward while the x-axis controls how fast the robot rotates clockwise or counter clockwise. +Arcade drive uses the y-axis of a joystick to control how fast the robot drives forward or backward while the x-axis controls how fast the robot rotates clockwise or counter clockwise. WPIlib provides a class to convert joystick inputs into commands for the motors to follow called `DifferentialDrive`. An instance of `DifferentialDrive` should be created under where the motor controllers were declared. From 4af7813aba27af1e0e24c4b711c08fcc321ad5c6 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Tue, 4 Aug 2026 20:47:07 -0500 Subject: [PATCH 25/25] more fixes --- .../ctre/src/main/java/first/robot/Robot.java | 2 +- .../stage1/stage1a/kitbot-drivetrain.mdx | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java index a62663a2..6dcede69 100644 --- a/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java +++ b/examples/stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java @@ -84,7 +84,7 @@ public Robot() { var rightConfig = new TalonFXConfiguration(); rightConfig.MotorOutput.withInverted(InvertedValue.CounterClockwise_Positive); rightLeader.getConfigurator().apply(rightConfig); - rightFollower.getConfigurator().apply(leftConfig); + rightFollower.getConfigurator().apply(rightConfig); rightFollower.setControl(new Follower(rightLeaderID, MotorAlignmentValue.Aligned)); // [/MotorConfig] diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index 8d6cc80d..562cec02 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -89,12 +89,18 @@ Now try creating the right motor controllers on your own.

qz*A9a}$e)wi8aEOr=RGYpUrqpz!G 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 S%#lq0s_TQNOBznsj^R(k-=>HF literal 0 HcmV?d00001 diff --git a/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx b/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx index adcf3a0d..e5eab108 100644 --- a/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx @@ -72,3 +72,69 @@ To fix this, the `DrivetrainSim`'s `periodic()` function should be called inside interfere with the motor controllers when the code is being ran on a real robot. + +# Simulating code + +To actually run the code use the WPILib Icon in the top left to open the command palette. + + + +Then search for Simulate and select `WPILib: Simulate Robot Code`. + + + +After your code builds, a new tab will pop-up. +Ensure that only `SIM GUI` is selected and click ok. +This will start simulating your ode and open the Sim GUI in a new tab pictured below. +Your code will continue running until the Sim GUI is closed. + + + +The most important boxes in the Sim GUI are as follows... + +- `Robot State` is the most important box because it allows you to select robot mode, Opmode, and enabled state. +- `FMS` allows you to select alliance side and station while the robot is in the Disconnected mode. +- `Other Devices` shows information about created sim devices and allows you to change some of their values. + +To view the robot, First open AdvantageScope. +It should come installed with your WPILib install. +Then, open the File menu and select Import Layout and select the `AdvantageScopeLayout.json` file in your robot project. + + + +After importing the layout, open the File menu and select Connect To Simulator then NetworkTables4 (AdvantageScope). +AdvantageScope should now be connected to the robot simulation. +If AdvantageScope still says Searching, ensure that the robot code is still being simulated and that you selected the correct button. + + + +Now go back to the Sim GUI. +In the `Robot State` box select Teleop. +Then pick `MyTeleop` from the dropdown and enable the robot. +You should now be able to control the robot with WASD on the keyboard while the Sim GUI is in focus. +In the Field 2d tab of AdvantageScope you should be able to see the robot move. From 5824d074082083f13fde0a6f0d3ffce862790809 Mon Sep 17 00:00:00 2001 From: Spaceman 11 <135277197+Spaceman113138@users.noreply.github.com> Date: Tue, 4 Aug 2026 18:55:49 -0500 Subject: [PATCH 24/25] Things I missed --- .../stage1/stage1a/arcadeDriveJoystick.webp | Bin 0 -> 27920 bytes src/config/sidebarConfig.ts | 2 +- .../stage1/stage1a/drivetrain-sim.mdx | 12 ++++----- .../stage1/stage1a/kitbot-drivetrain.mdx | 24 ++++++++++-------- 4 files changed, 21 insertions(+), 17 deletions(-) create mode 100644 public/learning-course/stage1/stage1a/arcadeDriveJoystick.webp diff --git a/public/learning-course/stage1/stage1a/arcadeDriveJoystick.webp b/public/learning-course/stage1/stage1a/arcadeDriveJoystick.webp new file mode 100644 index 0000000000000000000000000000000000000000..77655e6bd4546520b980992db66df6ef852c0e29 GIT binary patch literal 27920 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 y;0kg!XWq@I!lDvUj#h&76H = { slug: 'learning-course/stage1/stage1a/stage-overview', }, { - label: 'Kitbot Drivetrain', + label: 'Stage 1A Kitbot Drivetrain', slug: 'learning-course/stage1/stage1a/kitbot-drivetrain', }, { diff --git a/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx b/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx index e5eab108..890ac607 100644 --- a/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/drivetrain-sim.mdx @@ -80,7 +80,7 @@ To actually run the code use the WPILib Icon in the top left to open the command @@ -89,7 +89,7 @@ Then search for Simulate and select `WPILib: Simulate Robot Code`. @@ -101,7 +101,7 @@ Your code will continue running until the Sim GUI is closed. @@ -118,8 +118,8 @@ Then, open the File menu and select Import Layout and select the `AdvantageScope After importing the layout, open the File menu and select Connect To Simulator then NetworkTables4 (AdvantageScope). @@ -129,7 +129,7 @@ If AdvantageScope still says Searching, ensure that the robot code is still bein diff --git a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx index 7faefdb2..8d6cc80d 100644 --- a/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx +++ b/src/content/docs/learning-course/stage1/stage1a/kitbot-drivetrain.mdx @@ -52,7 +52,7 @@ This is how the motor controller objects for the left motors will look. ```java stage1/stage1a/solutions/ctre/src/main/java/first/robot/Robot.java#DriveMotorsLeft ``` -For the CTRE code, the CAN ID of the leader motors are stored as a variable since they will be used later on to tell the follower what motor controller to follow. +For the CTRE code, the CAN ID of the leader motors are stored as a variable since they will be used later on to tell the follower which motor controller to follow. This helps prevent errors from occurring by ensuring that there is a single source of truth for the correct CAN ID. Additionally, CTRE uses a CANBus object to store the CANBus instead of just an integer. @@ -100,15 +100,15 @@ the configurations that need to be added and their proper values.

+ +# Motor Controller Configuration + Motor Controllers have many settings that can be changed such as IDs, motor -types, and limits. Vendors provide +types, and limits. +Vendors provide software, such as REV's REV Hardware Client 2 and CTRE's Phoenix Tuner X, to run -and configure their devices from a computer. However, it is recommended to +and configure their devices from a computer. +However, it is recommended to configure devices through code to ensure that all motor controllers are properly -configured. This is especially useful because it can be easy to forget all of +configured. +This is especially useful because it can be easy to forget all of the configurations that need to be added and their proper values.