From 4b07edddf38ceee40bc009a1cd238e253949e1dd Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Tue, 3 Jun 2025 22:18:18 -0700 Subject: [PATCH 001/135] Update lincheck user-agent to latest chrome (#3046) Fixes NI forums linkcheck failure --- source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/conf.py b/source/conf.py index dadb52302b..8bc1805fb8 100644 --- a/source/conf.py +++ b/source/conf.py @@ -174,7 +174,7 @@ linkcheck_report_timeouts_as_broken = False # Specify a standard user agent, as Sphinx default is blocked on some sites -user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" +user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36" # Autosection labels prefix document path and filename autosectionlabel_prefix_document = True From 93aea7046175f2b88336b4e4001efa274685f5f9 Mon Sep 17 00:00:00 2001 From: Gold856 <117957790+Gold856@users.noreply.github.com> Date: Fri, 13 Jun 2025 01:39:26 +0000 Subject: [PATCH 002/135] Fix blockquote on Furo (#3050) --- .../introduction/tuning-elevator.rst | 6 +- .../can-devices/third-party-devices.rst | 1 - .../docs/software/commandbased/commands.rst | 80 +- .../scheduling-functions.rst | 104 +- .../software/dashboards/glass/widgets.rst | 2 +- .../software/driverstation/driver-station.rst | 34 +- .../motors/wpi-drive-classes.rst | 48 +- .../sensors/ultrasonics-software.rst | 18 +- .../tank-drive-tutorial.rst | 6 +- .../networktables/client-side-program.rst | 32 +- .../networktables/listening-for-change.rst | 611 +++--- .../networktables/multiple-instances.rst | 10 +- .../networktables-networking.rst | 20 +- .../networktables/publish-and-subscribe.rst | 1789 ++++++++--------- .../networktables/tables-and-topics.rst | 8 +- .../trajectory-tutorial-overview.rst | 10 +- .../telemetry/3rd-party-libraries.rst | 6 +- source/docs/software/what-is-wpilib.rst | 12 +- .../diffdrive-sim-overview.rst | 10 +- .../drivesim-tutorial/drivetrain-model.rst | 36 +- .../drivesim-tutorial/index.rst | 4 +- .../updating-drivetrain-model.rst | 6 +- .../robot-simulation/introduction.rst | 2 +- .../robot-simulation/physics-sim.rst | 8 +- .../robotbuilder-writing-subsystem-code.rst | 10 +- source/docs/yearly-overview/known-issues.rst | 18 +- .../step-1/basic-robot-wiring.rst | 84 +- .../step-1/intro-to-frc-robot-wiring.rst | 16 +- 28 files changed, 1492 insertions(+), 1499 deletions(-) diff --git a/source/docs/software/advanced-controls/introduction/tuning-elevator.rst b/source/docs/software/advanced-controls/introduction/tuning-elevator.rst index 99b8653011..b49a587d25 100644 --- a/source/docs/software/advanced-controls/introduction/tuning-elevator.rst +++ b/source/docs/software/advanced-controls/introduction/tuning-elevator.rst @@ -22,10 +22,10 @@ Vertical elevators are commonly used to lift gamepieces from the ground up to a Our "vertical elevator" consists of: - * A mass on a carriage, under the force of gravity, traveling up and down in a constrained vertical path - * A motor and gearbox driving a linear chain, to which the mass-on-a-carriage is attached +* A mass on a carriage, under the force of gravity, traveling up and down in a constrained vertical path +* A motor and gearbox driving a linear chain, to which the mass-on-a-carriage is attached - The simulation assumes the plant (the elevator itself) is controlled by motion profiling, feedforward and feedback controllers, composed in this fashion: +The simulation assumes the plant (the elevator itself) is controlled by motion profiling, feedforward and feedback controllers, composed in this fashion: .. image:: images/control-system-basics-ctrl-plus-plant-plus-profiler.drawio.svg :alt: Tuning Exercise Block Diagrams showing feedforward and feedback block, a profiler, controlling a plant. diff --git a/source/docs/software/can-devices/third-party-devices.rst b/source/docs/software/can-devices/third-party-devices.rst index 56a9630fbd..616df485f0 100644 --- a/source/docs/software/can-devices/third-party-devices.rst +++ b/source/docs/software/can-devices/third-party-devices.rst @@ -20,7 +20,6 @@ CTR Electronics (CTRE) offers several CAN peripherals with external libraries. G ### CTRE Motor Controllers - **Talon FX (with Falcon 500 Motor, Kraken x60 motor, and Kraken x44)** - - API Documentation (v6: [Java](https://api.ctr-electronics.com/phoenix6/release/java/com/ctre/phoenix6/hardware/TalonFX.html), [C++](https://api.ctr-electronics.com/phoenix6/release/cpp/classctre_1_1phoenix6_1_1hardware_1_1_talon_f_x.html)) - Hardware User's Manual ([Falcon 500](https://ctre.download/files/user-manual/Falcon%20500%20v3%20User's%20Guide.pdf), [Kraken x60](https://docs.wcproducts.com/kraken-x60), [Kraken x44](https://docs.wcproducts.com/kraken-x44)) - [Software Documentation](https://v6.docs.ctr-electronics.com/en/stable/docs/hardware-reference/talonfx/index.html) diff --git a/source/docs/software/commandbased/commands.rst b/source/docs/software/commandbased/commands.rst index 25b5c12011..3e79f92b63 100644 --- a/source/docs/software/commandbased/commands.rst +++ b/source/docs/software/commandbased/commands.rst @@ -341,36 +341,36 @@ What might a functional command look like in practice? As before, below is a sim .. tab-set:: .. tab-item:: Java - :sync: tabcode-java + :sync: tabcode-java - .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/hatchbottraditional/commands/GrabHatch.java - :language: java - :lines: 5- - :lineno-match: + .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/hatchbottraditional/commands/GrabHatch.java + :language: java + :lines: 5- + :lineno-match: .. tab-item:: C++ (Header) - :sync: tabcode-c++ + :sync: tabcode-c++ - .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/HatchbotTraditional/include/commands/GrabHatch.h - :language: c++ - :lines: 5- - :lineno-match: + .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/HatchbotTraditional/include/commands/GrabHatch.h + :language: c++ + :lines: 5- + :lineno-match: .. tab-item:: C++ (Source) - :sync: tabcode-c++-source + :sync: tabcode-c++-source - .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/HatchbotTraditional/cpp/commands/GrabHatch.cpp - :language: c++ - :lines: 5- - :lineno-match: + .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/HatchbotTraditional/cpp/commands/GrabHatch.cpp + :language: c++ + :lines: 5- + :lineno-match: .. tab-item:: Python - :sync: tabcode-python + :sync: tabcode-python - .. remoteliteralinclude:: https://raw.githubusercontent.com/robotpy/examples/main/HatchbotTraditional/commands/grabhatch.py - :language: python - :lines: 7- - :lineno-match: + .. remoteliteralinclude:: https://raw.githubusercontent.com/robotpy/examples/main/HatchbotTraditional/commands/grabhatch.py + :language: python + :lines: 7- + :lineno-match: Notice that the hatch subsystem used by the command is passed into the command through the command’s constructor. This is a pattern called :term:`dependency injection`, and allows users to avoid declaring their subsystems as global variables. This is widely accepted as a best-practice - the reasoning behind this is discussed in a :doc:`later section `. @@ -381,36 +381,36 @@ What about a more complicated case? Below is a drive command, from the same exam .. tab-set:: .. tab-item:: Java - :sync: tabcode-java + :sync: tabcode-java - .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/hatchbottraditional/commands/DefaultDrive.java - :language: java - :lines: 5- - :lineno-match: + .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/hatchbottraditional/commands/DefaultDrive.java + :language: java + :lines: 5- + :lineno-match: .. tab-item:: C++ (Header) - :sync: tabcode-c++ + :sync: tabcode-c++ - .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/HatchbotTraditional/include/commands/DefaultDrive.h - :language: c++ - :lines: 5- - :lineno-match: + .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/HatchbotTraditional/include/commands/DefaultDrive.h + :language: c++ + :lines: 5- + :lineno-match: .. tab-item:: C++ (Source) - :sync: tabcode-c++-source + :sync: tabcode-c++-source - .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/HatchbotTraditional/cpp/commands/DefaultDrive.cpp - :language: c++ - :lines: 5- - :lineno-match: + .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/HatchbotTraditional/cpp/commands/DefaultDrive.cpp + :language: c++ + :lines: 5- + :lineno-match: .. tab-item:: Python - :sync: tabcode-python + :sync: tabcode-python - .. remoteliteralinclude:: https://raw.githubusercontent.com/robotpy/examples/main/HatchbotTraditional/commands/defaultdrive.py - :language: python - :lines: 7- - :lineno-match: + .. remoteliteralinclude:: https://raw.githubusercontent.com/robotpy/examples/main/HatchbotTraditional/commands/defaultdrive.py + :language: python + :lines: 7- + :lineno-match: And then usage: diff --git a/source/docs/software/convenience-features/scheduling-functions.rst b/source/docs/software/convenience-features/scheduling-functions.rst index 3fbfd53644..55eefcb80e 100644 --- a/source/docs/software/convenience-features/scheduling-functions.rst +++ b/source/docs/software/convenience-features/scheduling-functions.rst @@ -7,66 +7,66 @@ The ``addPeriodic()`` (Java) / ``AddPeriodic()`` (C++) method takes in a lambda .. tab-set:: - .. tab-item:: Java - :sync: Java + .. tab-item:: Java + :sync: Java - ```java - public class Robot extends TimedRobot { - private Joystick m_joystick = new Joystick(0); - private Encoder m_encoder = new Encoder(1, 2); - private Spark m_motor = new Spark(1); - private PIDController m_controller = new PIDController(1.0, 0.0, 0.5, 0.01); - public Robot() { - addPeriodic(() -> { - m_motor.set(m_controller.calculate(m_encoder.getRate())); - }, 0.01, 0.005); - } - @Override - public teleopPeriodic() { - if (m_joystick.getRawButtonPressed(1)) { - if (m_controller.getSetpoint() == 0.0) { - m_controller.setSetpoint(30.0); - } else { - m_controller.setSetpoint(0.0); - } + ```java + public class Robot extends TimedRobot { + private Joystick m_joystick = new Joystick(0); + private Encoder m_encoder = new Encoder(1, 2); + private Spark m_motor = new Spark(1); + private PIDController m_controller = new PIDController(1.0, 0.0, 0.5, 0.01); + public Robot() { + addPeriodic(() -> { + m_motor.set(m_controller.calculate(m_encoder.getRate())); + }, 0.01, 0.005); + } + @Override + public teleopPeriodic() { + if (m_joystick.getRawButtonPressed(1)) { + if (m_controller.getSetpoint() == 0.0) { + m_controller.setSetpoint(30.0); + } else { + m_controller.setSetpoint(0.0); } } } - ``` + } + ``` - .. tab-item:: C++ (Header) - :sync: C++ (Header) + .. tab-item:: C++ (Header) + :sync: C++ (Header) - ```c++ - class Robot : public frc::TimedRobot { - private: - frc::Joystick m_joystick{0}; - frc::Encoder m_encoder{1, 2}; - frc::Spark m_motor{1}; - frc::PIDController m_controller{1.0, 0.0, 0.5, 10_ms}; - Robot(); - void TeleopPeriodic() override; - }; - ``` + ```c++ + class Robot : public frc::TimedRobot { + private: + frc::Joystick m_joystick{0}; + frc::Encoder m_encoder{1, 2}; + frc::Spark m_motor{1}; + frc::PIDController m_controller{1.0, 0.0, 0.5, 10_ms}; + Robot(); + void TeleopPeriodic() override; + }; + ``` - .. tab-item:: C++ (Source) - :sync: C++ (Source) + .. tab-item:: C++ (Source) + :sync: C++ (Source) - ```c++ - void Robot::Robot() { - AddPeriodic([&] { - m_motor.Set(m_controller.Calculate(m_encoder.GetRate())); - }, 10_ms, 5_ms); - } - void Robot::TeleopPeriodic() { - if (m_joystick.GetRawButtonPressed(1)) { - if (m_controller.GetSetpoint() == 0.0) { - m_controller.SetSetpoint(30.0); - } else { - m_controller.SetSetpoint(0.0); - } - } + ```c++ + void Robot::Robot() { + AddPeriodic([&] { + m_motor.Set(m_controller.Calculate(m_encoder.GetRate())); + }, 10_ms, 5_ms); + } + void Robot::TeleopPeriodic() { + if (m_joystick.GetRawButtonPressed(1)) { + if (m_controller.GetSetpoint() == 0.0) { + m_controller.SetSetpoint(30.0); + } else { + m_controller.SetSetpoint(0.0); } - ``` + } + } + ``` The ``teleopPeriodic()`` method in this example runs every 20 ms, and the controller update is run every 10 ms with an offset of 5 ms from when ``teleopPeriodic()`` runs so that their timeslots don't conflict (e.g., ``teleopPeriodic()`` runs at 0 ms, 20 ms, 40 ms, etc.; the controller runs at 5 ms, 15 ms, 25 ms, etc.). diff --git a/source/docs/software/dashboards/glass/widgets.rst b/source/docs/software/dashboards/glass/widgets.rst index 79bf02e9e7..47a7fe8270 100644 --- a/source/docs/software/dashboards/glass/widgets.rst +++ b/source/docs/software/dashboards/glass/widgets.rst @@ -46,7 +46,7 @@ The :guilabel:`Sendable Chooser` widget represents a ``SendableChooser`` instanc The :guilabel:`Sendable Chooser` widget will appear in the :guilabel:`NetworkTables` menu and underneath the main table name that the instance was sent over. From the example above, the main table name would be :guilabel:`SmartDashboard`. - .. image:: images/sendable-chooser.png +.. image:: images/sendable-chooser.png ## PID Controller Widget diff --git a/source/docs/software/driverstation/driver-station.rst b/source/docs/software/driverstation/driver-station.rst index 31197f3839..32f00760d4 100644 --- a/source/docs/software/driverstation/driver-station.rst +++ b/source/docs/software/driverstation/driver-station.rst @@ -17,11 +17,11 @@ The FRC Driver Station can be launched by double-clicking the icon on the Deskto ## Driver Station Key Shortcuts - * :kbd:`F1` - Force a Joystick refresh. - * :kbd:`[` + :kbd:`]` + :kbd:`\\` - Enable the robot (the 3 keys above Enter on most keyboards) - * :kbd:`Enter` - Disable the Robot - * :kbd:`Space` - Emergency Stop the robot. After an emergency stop is triggered the roboRIO will need to be rebooted before the robot can be enabled again. - * :kbd:`Backspace` - "A-Stop" the robot when in Practice Mode - Autonomous Enabled. The robot will be disabled until the Practice Mode reaches Teleop then will be automatically re-enabled. While disabled, the application background will flash orange indicating the robot will re-enable automatically. +* :kbd:`F1` - Force a Joystick refresh. +* :kbd:`[` + :kbd:`]` + :kbd:`\\` - Enable the robot (the 3 keys above Enter on most keyboards) +* :kbd:`Enter` - Disable the Robot +* :kbd:`Space` - Emergency Stop the robot. After an emergency stop is triggered the roboRIO will need to be rebooted before the robot can be enabled again. +* :kbd:`Backspace` - "A-Stop" the robot when in Practice Mode - Autonomous Enabled. The robot will be disabled until the Practice Mode reaches Teleop then will be automatically re-enabled. While disabled, the application background will flash orange indicating the robot will re-enable automatically. .. only:: html @@ -73,10 +73,10 @@ The Operations Tab is used to control the mode of the robot and provide addition 1. Robot Mode - This section controls the Robot Mode. - - Teleoperated Mode causes the robot to run the code in the Teleoperated portion of the match. - - Autonomous Mode causes the robot to run the code in the Autonomous portion of the match. - - Practice Mode causes the robot to cycle through the same transitions as an FRC match after the Enable button is pressed (timing for practice mode can be found on the setup tab). When Practice Mode is in use, the DS will flash the background orange to indicate a pending enable (either the start of Autonomous or the start of Teleop after an A-Stop). - - :doc:`Test Mode ` is an additional mode where test code that doesn't run in a regular match can be tested. + - Teleoperated Mode causes the robot to run the code in the Teleoperated portion of the match. + - Autonomous Mode causes the robot to run the code in the Autonomous portion of the match. + - Practice Mode causes the robot to cycle through the same transitions as an FRC match after the Enable button is pressed (timing for practice mode can be found on the setup tab). When Practice Mode is in use, the DS will flash the background orange to indicate a pending enable (either the start of Autonomous or the start of Teleop after an A-Stop). + - :doc:`Test Mode ` is an additional mode where test code that doesn't run in a regular match can be tested. 2. Enable/Disable - These controls enable and disable the robot. See also `Driver Station Key Shortcuts`_. 3. Elapsed Time - Indicates the amount of time the robot has been enabled. @@ -101,17 +101,17 @@ The Diagnostics Tab contains additional status indicators that teams can use to 5. Memory Stats - This section shows stats about the roboRIO memory. 6. Connection Indicators - The top half of these indicators show connection status to various components. - - "Enet Link" indicates the computer has something connected to the ethernet port. - - "Robot Radio" indicates the ping status to the robot wireless bridge at 10.XX.YY.1. - - "Robot" indicates the ping status to the roboRIO using mDNS (with a fallback of a static 10.TE.AM.2 address). - - "FMS" indicates if the DS is receiving packets from FMS (this is NOT a ping indicator). + - "Enet Link" indicates the computer has something connected to the ethernet port. + - "Robot Radio" indicates the ping status to the robot wireless bridge at 10.XX.YY.1. + - "Robot" indicates the ping status to the roboRIO using mDNS (with a fallback of a static 10.TE.AM.2 address). + - "FMS" indicates if the DS is receiving packets from FMS (this is NOT a ping indicator). 7. Network Indicators - The second section of indicators indicates status of network adapters and firewalls. These are provided for informational purposes; communication may be established even with one or more unlit indicators in this section. - - "Enet" indicates the IP address of the detected Ethernet adapter - - "WiFi" indicates if a wireless adapter has been detected as enabled - - "USB" indicates if a roboRIO USB connection has been detected - - "Firewall" indicates if any firewalls are detected as enabled. Enabled firewalls will show in orange (Dom = Domain, Pub = Public, Prv = Private) + - "Enet" indicates the IP address of the detected Ethernet adapter + - "WiFi" indicates if a wireless adapter has been detected as enabled + - "USB" indicates if a roboRIO USB connection has been detected + - "Firewall" indicates if any firewalls are detected as enabled. Enabled firewalls will show in orange (Dom = Domain, Pub = Public, Prv = Private) 8. :guilabel:`Reboot roboRIO` - This button attempts to perform a remote reboot of the roboRIO (after clicking through a confirmation dialog). 9. :guilabel:`Restart Robot Code` - This button attempts to restart the code running on the robot (but not restart the OS). diff --git a/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst b/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst index b36555cf6e..6c35834b89 100644 --- a/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst +++ b/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst @@ -116,28 +116,28 @@ DifferentialDrive is a method provided for the control of "skid-steer" or "West .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/tankdrive/Robot.java :language: java :lines: 17-18,22-23,24-26,30-35,38 .. tab-item:: C++ (Header) - :sync: C++ (Header) + :sync: C++ (Header) .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.3.2/wpilibcExamples/src/main/cpp/examples/TankDrive/cpp/Robot.cpp :language: c++ :lines: 15-19 .. tab-item:: C++ (Source) - :sync: C++ (Source) + :sync: C++ (Source) .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.3.2/wpilibcExamples/src/main/cpp/examples/TankDrive/cpp/Robot.cpp :language: c++ :lines: 24, 28-32 .. tab-item:: Python - :sync: Python + :sync: Python .. remoteliteralinclude:: https://raw.githubusercontent.com/robotpy/examples/d89b0587a1e1111239728140466c7dc4324d4005/TankDrive/robot.py :language: python @@ -151,7 +151,7 @@ Many FRC\ |reg| drivetrains have more than 1 motor on each side. Classes derived .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java Class variables (e.g. in Robot.java or Subsystem): @@ -166,14 +166,14 @@ Many FRC\ |reg| drivetrains have more than 1 motor on each side. Classes derived :lines: 56-62 .. tab-item:: C++ (Header) - :sync: C++ (Header) + :sync: C++ (Header) .. remoteliteralinclude:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.3.2/wpilibcExamples/src/main/cpp/examples/RamseteCommand/include/subsystems/DriveSubsystem.h :language: c++ :lines: 114, 118-126 .. tab-item:: C++ (Source) - :sync: C++ (Source) + :sync: C++ (Source) In Robot or Subsystem constructor: @@ -182,21 +182,21 @@ Many FRC\ |reg| drivetrains have more than 1 motor on each side. Classes derived :lines: 23-29 .. tab-item:: Python - :sync: Python - - ```python - def robotInit(self): - leftLeader = wpilib.Spark(1) - leftFollower = wpilib.Spark(2) - leftLeader.addFollower(leftFollower) - leftLeader.setInverted( - True - ) # if you want to invert the entire side you can do so here - rightLeader = wpilib.Spark(3) - rightFollower = wpilib.Spark(4) - rightLeader.addFollower(rightFollower) - self.drive = wpilib.drive.DifferentialDrive(leftLeader, rightLeader) - ``` + :sync: Python + + ```python + def robotInit(self): + leftLeader = wpilib.Spark(1) + leftFollower = wpilib.Spark(2) + leftLeader.addFollower(leftFollower) + leftLeader.setInverted( + True + ) # if you want to invert the entire side you can do so here + rightLeader = wpilib.Spark(3) + rightFollower = wpilib.Spark(4) + rightLeader.addFollower(rightFollower) + self.drive = wpilib.drive.DifferentialDrive(leftLeader, rightLeader) + ``` ### Drive Modes .. note:: @@ -272,9 +272,9 @@ MecanumDrive is a method provided for the control of holonomic drivetrains with The MecanumDrive class contains two different default modes of driving your robot's motors. - - driveCartesian: Angles are measured clockwise from the positive X axis. The robot's speed is independent from its angle or rotation rate. +- driveCartesian: Angles are measured clockwise from the positive X axis. The robot's speed is independent from its angle or rotation rate. - - drivePolar: Angles are measured counter-clockwise from straight ahead. The speed at which the robot drives (translation) is independent from its angle or rotation rate. +- drivePolar: Angles are measured counter-clockwise from straight ahead. The speed at which the robot drives (translation) is independent from its angle or rotation rate. .. tab-set-code:: diff --git a/source/docs/software/hardware-apis/sensors/ultrasonics-software.rst b/source/docs/software/hardware-apis/sensors/ultrasonics-software.rst index b736659747..d9d3308cdb 100644 --- a/source/docs/software/hardware-apis/sensors/ultrasonics-software.rst +++ b/source/docs/software/hardware-apis/sensors/ultrasonics-software.rst @@ -16,14 +16,14 @@ The :code:`Ultrasonic` class ([Java](https://github.wpilib.org/allwpilib/docs/re .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java .. rli:: https://github.com/wpilibsuite/allwpilib/raw/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/ultrasonic/Robot.java :language: java :lines: 17-18 .. tab-item:: C++ - :sync: C++ + :sync: C++ .. rli:: https://github.com/wpilibsuite/allwpilib/raw/v2025.3.2/wpilibcExamples/src/main/cpp/examples/Ultrasonic/include/Robot.h :language: c++ @@ -34,14 +34,14 @@ The measurement can then be retrieved in either inches or millimeters in Java; i .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java .. rli:: https://github.com/wpilibsuite/allwpilib/raw/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/ultrasonic/Robot.java :language: java :lines: 29-32 .. tab-item:: C++ - :sync: C++ + :sync: C++ .. rli:: https://github.com/wpilibsuite/allwpilib/raw/v2025.3.2/wpilibcExamples/src/main/cpp/examples/Ultrasonic/cpp/Robot.cpp :language: c++ @@ -62,21 +62,21 @@ Ultrasonic sensors are very useful for determining spacing during autonomous rou .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java .. rli:: https://github.com/wpilibsuite/allwpilib/raw/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/ultrasonicpid/Robot.java :language: java :lines: 19-68, 77-77 .. tab-item:: C++ (Header) - :sync: C++ (Header) + :sync: C++ (Header) .. rli:: https://github.com/wpilibsuite/allwpilib/raw/v2025.3.2/wpilibcExamples/src/main/cpp/examples/UltrasonicPID/include/Robot.h :language: c++ :lines: 19-52 .. tab-item:: C++ (Source) - :sync: C++ (Source) + :sync: C++ (Source) .. rli:: https://github.com/wpilibsuite/allwpilib/raw/v2025.3.2/wpilibcExamples/src/main/cpp/examples/UltrasonicPID/cpp/Robot.cpp :language: c++ @@ -87,14 +87,14 @@ Additionally, ping-response ultrasonics can be sent to :ref:`Shuffleboard > WPI Robotics Library >> Robot Drive >> and clicking the Tank Drive VI. +- Replace Arcade Drive with the tank drive.vi. This can be found by right clicking on the block diagram >> WPI Robotics Library >> Robot Drive >> and clicking the Tank Drive VI. - - Find the Index Array function that is after the Get Values.vi. You will need to create two numeric constants and wire each into one of the index inputs. You can determine what the values of each index should be by looking at the USB Devices tab in the FRC\ |reg| Driver Station. Move the two joysticks to determine which number (index) they are tied to. You will likely want to use the Y-axis index for each joystick. This is because it is intuitive to push up on the joystick when you want the motors to go forward, and down when you when them to go in reverse. If you select the X-axis index for each, then you will have to move the joystick left or right (x-axis directions) to get the robot motors to move. In my setup, I’ve selected index 1 for my left motors Y-axis control and index 5 as the right motors Y-axis control. You can see the adjustments in LabVIEW in the following image: +- Find the Index Array function that is after the Get Values.vi. You will need to create two numeric constants and wire each into one of the index inputs. You can determine what the values of each index should be by looking at the USB Devices tab in the FRC\ |reg| Driver Station. Move the two joysticks to determine which number (index) they are tied to. You will likely want to use the Y-axis index for each joystick. This is because it is intuitive to push up on the joystick when you want the motors to go forward, and down when you when them to go in reverse. If you select the X-axis index for each, then you will have to move the joystick left or right (x-axis directions) to get the robot motors to move. In my setup, I’ve selected index 1 for my left motors Y-axis control and index 5 as the right motors Y-axis control. You can see the adjustments in LabVIEW in the following image: .. image:: images/tank-drive-tutorial/block-diagram-2.png @@ -32,7 +32,7 @@ 8. The second thing to confirm in this VI is that the "Open 2 Motor.vi" has the correct motor controller selected (Talon, Jaguar, Victor, etc.). - For example, I am using Jaguar motor controllers and my motors are wired into PWM 8 and 9. The image below shows the changes I need to make: +For example, I am using Jaguar motor controllers and my motors are wired into PWM 8 and 9. The image below shows the changes I need to make: .. image:: images/tank-drive-tutorial/block-diagram-3.png diff --git a/source/docs/software/networktables/client-side-program.rst b/source/docs/software/networktables/client-side-program.rst index 1d88c14bf0..50febc11f2 100644 --- a/source/docs/software/networktables/client-side-program.rst +++ b/source/docs/software/networktables/client-side-program.rst @@ -9,7 +9,7 @@ A basic client program looks like the following example. .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java ```java import edu.wpi.first.networktables.DoubleSubscriber; @@ -55,7 +55,7 @@ A basic client program looks like the following example. ``` .. tab-item:: C++ - :sync: C++ + :sync: C++ ```c++ #include @@ -83,7 +83,7 @@ A basic client program looks like the following example. ``` .. tab-item:: C++ (Handle-based) - :sync: C++ (Handle-based) + :sync: C++ (Handle-based) ```c++ #include @@ -110,7 +110,7 @@ A basic client program looks like the following example. ``` .. tab-item:: C - :sync: C + :sync: C ```c #include @@ -136,7 +136,7 @@ A basic client program looks like the following example. ``` .. tab-item:: Python - :sync: Python + :sync: Python ```python @@ -171,22 +171,22 @@ Example build.gradle files are provided in the [StandaloneAppSamples Repository] .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java - .. rli:: https://raw.githubusercontent.com/wpilibsuite/StandaloneAppSamples/9020718b022ba220a2c5cc04ad12714d06e7a141/Java/build.gradle - :language: groovy - :linenos: - :emphasize-lines: 5 + .. rli:: https://raw.githubusercontent.com/wpilibsuite/StandaloneAppSamples/9020718b022ba220a2c5cc04ad12714d06e7a141/Java/build.gradle + :language: groovy + :linenos: + :emphasize-lines: 5 .. tab-item:: C++ - :sync: C++ + :sync: C++ - Uncomment the appropriate platform as highlighted. + Uncomment the appropriate platform as highlighted. - .. rli:: https://raw.githubusercontent.com/wpilibsuite/StandaloneAppSamples/9020718b022ba220a2c5cc04ad12714d06e7a141/Cpp/build.gradle - :language: groovy - :linenos: - :emphasize-lines: 3, 14-15, 20-22 + .. rli:: https://raw.githubusercontent.com/wpilibsuite/StandaloneAppSamples/9020718b022ba220a2c5cc04ad12714d06e7a141/Cpp/build.gradle + :language: groovy + :linenos: + :emphasize-lines: 3, 14-15, 20-22 ### Building Python diff --git a/source/docs/software/networktables/listening-for-change.rst b/source/docs/software/networktables/listening-for-change.rst index 82181e2c62..5dc7b7421c 100644 --- a/source/docs/software/networktables/listening-for-change.rst +++ b/source/docs/software/networktables/listening-for-change.rst @@ -7,143 +7,143 @@ There are a few different ways to detect that a topic's value has changed; the e .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java - ```java - public class Example { - final DoubleSubscriber ySub; - double prev; - public Example() { - // get the default instance of NetworkTables - NetworkTableInstance inst = NetworkTableInstance.getDefault(); - // get the subtable called "datatable" - NetworkTable datatable = inst.getTable("datatable"); - // subscribe to the topic in "datatable" called "Y" - ySub = datatable.getDoubleTopic("Y").subscribe(0.0); + ```java + public class Example { + final DoubleSubscriber ySub; + double prev; + public Example() { + // get the default instance of NetworkTables + NetworkTableInstance inst = NetworkTableInstance.getDefault(); + // get the subtable called "datatable" + NetworkTable datatable = inst.getTable("datatable"); + // subscribe to the topic in "datatable" called "Y" + ySub = datatable.getDoubleTopic("Y").subscribe(0.0); + } + public void periodic() { + // get() can be used with simple change detection to the previous value + double value = ySub.get(); + if (value != prev) { + prev = value; // save previous value + System.out.println("X changed value: " + value); } - public void periodic() { - // get() can be used with simple change detection to the previous value - double value = ySub.get(); - if (value != prev) { - prev = value; // save previous value - System.out.println("X changed value: " + value); - } - // readQueueValues() provides all value changes since the last call; - // this way it's not possible to miss a change by polling too slowly - for (double iterVal : ySub.readQueueValues()) { - System.out.println("X changed value: " + iterVal); - } - // readQueue() is similar to readQueueValues(), but provides timestamps - // for each change as well - for (TimestampedDouble tsValue : ySub.readQueue()) { - System.out.println("X changed value: " + tsValue.value + " at local time " + tsValue.timestamp); - } + // readQueueValues() provides all value changes since the last call; + // this way it's not possible to miss a change by polling too slowly + for (double iterVal : ySub.readQueueValues()) { + System.out.println("X changed value: " + iterVal); } - // may not be necessary for robot programs if this class lives for - // the length of the program - public void close() { - ySub.close(); + // readQueue() is similar to readQueueValues(), but provides timestamps + // for each change as well + for (TimestampedDouble tsValue : ySub.readQueue()) { + System.out.println("X changed value: " + tsValue.value + " at local time " + tsValue.timestamp); } } - ``` + // may not be necessary for robot programs if this class lives for + // the length of the program + public void close() { + ySub.close(); + } + } + ``` .. tab-item:: C++ - :sync: C++ + :sync: C++ - ```c++ - class Example { - nt::DoubleSubscriber ySub; - double prev = 0; - public: - Example() { - // get the default instance of NetworkTables - nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault(); - // get the subtable called "datatable" - auto datatable = inst.GetTable("datatable"); - // subscribe to the topic in "datatable" called "Y" - ySub = datatable->GetDoubleTopic("Y").Subscribe(0.0); + ```c++ + class Example { + nt::DoubleSubscriber ySub; + double prev = 0; + public: + Example() { + // get the default instance of NetworkTables + nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault(); + // get the subtable called "datatable" + auto datatable = inst.GetTable("datatable"); + // subscribe to the topic in "datatable" called "Y" + ySub = datatable->GetDoubleTopic("Y").Subscribe(0.0); + } + void Periodic() { + // Get() can be used with simple change detection to the previous value + double value = ySub.Get(); + if (value != prev) { + prev = value; // save previous value + fmt::print("X changed value: {}\n", value); } - void Periodic() { - // Get() can be used with simple change detection to the previous value - double value = ySub.Get(); - if (value != prev) { - prev = value; // save previous value - fmt::print("X changed value: {}\n", value); - } - // ReadQueueValues() provides all value changes since the last call; - // this way it's not possible to miss a change by polling too slowly - for (double iterVal : ySub.ReadQueueValues()) { - fmt::print("X changed value: {}\n", iterVal); - } - // ReadQueue() is similar to ReadQueueValues(), but provides timestamps - // for each change as well - for (nt::TimestampedDouble tsValue : ySub.ReadQueue()) { - fmt::print("X changed value: {} at local time {}\n", tsValue.value, tsValue.timestamp); - } + // ReadQueueValues() provides all value changes since the last call; + // this way it's not possible to miss a change by polling too slowly + for (double iterVal : ySub.ReadQueueValues()) { + fmt::print("X changed value: {}\n", iterVal); + } + // ReadQueue() is similar to ReadQueueValues(), but provides timestamps + // for each change as well + for (nt::TimestampedDouble tsValue : ySub.ReadQueue()) { + fmt::print("X changed value: {} at local time {}\n", tsValue.value, tsValue.timestamp); } - }; - ``` + } + }; + ``` .. tab-item:: C++ (Handle-based) - :sync: C++ (Handle-based) + :sync: C++ (Handle-based) - ```c++ - class Example { - NT_Subscriber ySub; - double prev = 0; - public: - Example() { - // get the default instance of NetworkTables - NT_Inst inst = nt::GetDefaultInstance(); - // subscribe to the topic in "datatable" called "Y" - ySub = nt::Subscribe(nt::GetTopic(inst, "/datatable/Y"), NT_DOUBLE, "double"); + ```c++ + class Example { + NT_Subscriber ySub; + double prev = 0; + public: + Example() { + // get the default instance of NetworkTables + NT_Inst inst = nt::GetDefaultInstance(); + // subscribe to the topic in "datatable" called "Y" + ySub = nt::Subscribe(nt::GetTopic(inst, "/datatable/Y"), NT_DOUBLE, "double"); + } + void Periodic() { + // Get() can be used with simple change detection to the previous value + double value = nt::GetDouble(ySub, 0.0); + if (value != prev) { + prev = value; // save previous value + fmt::print("X changed value: {}\n", value); } - void Periodic() { - // Get() can be used with simple change detection to the previous value - double value = nt::GetDouble(ySub, 0.0); - if (value != prev) { - prev = value; // save previous value - fmt::print("X changed value: {}\n", value); - } - // ReadQueue() provides all value changes since the last call; - // this way it's not possible to miss a change by polling too slowly - for (nt::TimestampedDouble value : nt::ReadQueueDouble(ySub)) { - fmt::print("X changed value: {} at local time {}\n", tsValue.value, tsValue.timestamp); - } + // ReadQueue() provides all value changes since the last call; + // this way it's not possible to miss a change by polling too slowly + for (nt::TimestampedDouble value : nt::ReadQueueDouble(ySub)) { + fmt::print("X changed value: {} at local time {}\n", tsValue.value, tsValue.timestamp); } - }; - ``` + } + }; + ``` .. tab-item:: Python - :sync: Python + :sync: Python - ```python - class Example: - def __init__(self) -> None: - # get the default instance of NetworkTables - inst = ntcore.NetworkTableInstance.getDefault() - # get the subtable called "datatable" - datatable = inst.getTable("datatable") - # subscribe to the topic in "datatable" called "Y" - self.ySub = datatable.getDoubleTopic("Y").subscribe(0.0) - self.prev = 0 - def periodic(self): - # get() can be used with simple change detection to the previous value - value = self.ySub.get() - if value != self.prev: - self.prev = value - # save previous value - print("X changed value: " + value) - # readQueue() provides all value changes since the last call; - # this way it's not possible to miss a change by polling too slowly - for tsValue in self.ySub.readQueue(): - print(f"X changed value: {tsValue.value} at local time {tsValue.time}") - # may not be necessary for robot programs if this class lives for - # the length of the program - def close(self): - self.ySub.close() - ``` + ```python + class Example: + def __init__(self) -> None: + # get the default instance of NetworkTables + inst = ntcore.NetworkTableInstance.getDefault() + # get the subtable called "datatable" + datatable = inst.getTable("datatable") + # subscribe to the topic in "datatable" called "Y" + self.ySub = datatable.getDoubleTopic("Y").subscribe(0.0) + self.prev = 0 + def periodic(self): + # get() can be used with simple change detection to the previous value + value = self.ySub.get() + if value != self.prev: + self.prev = value + # save previous value + print("X changed value: " + value) + # readQueue() provides all value changes since the last call; + # this way it's not possible to miss a change by polling too slowly + for tsValue in self.ySub.readQueue(): + print(f"X changed value: {tsValue.value} at local time {tsValue.time}") + # may not be necessary for robot programs if this class lives for + # the length of the program + def close(self): + self.ySub.close() + ``` With a command-based robot, it's also possible to use ``NetworkBooleanEvent`` to link boolean topic changes to callback actions (e.g. running commands). @@ -166,204 +166,203 @@ The ``addListener`` functions in NetworkTableInstance return a listener handle. .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java - ```java - public class Example { - final DoubleSubscriber ySub; - // use an AtomicReference to make updating the value thread-safe - final AtomicReference yValue = new AtomicReference(); - // retain listener handles for later removal - int connListenerHandle; - int valueListenerHandle; - int topicListenerHandle; - public Example() { - // get the default instance of NetworkTables - NetworkTableInstance inst = NetworkTableInstance.getDefault(); - // add a connection listener; the first parameter will cause the - // callback to be called immediately for any current connections - connListenerHandle = inst.addConnectionListener(true, event -> { - if (event.is(NetworkTableEvent.Kind.kConnected)) { - System.out.println("Connected to " + event.connInfo.remote_id); - } else if (event.is(NetworkTableEvent.Kind.kDisconnected)) { - System.out.println("Disconnected from " + event.connInfo.remote_id); - } - }); - // get the subtable called "datatable" - NetworkTable datatable = inst.getTable("datatable"); - // subscribe to the topic in "datatable" called "Y" - ySub = datatable.getDoubleTopic("Y").subscribe(0.0); - // add a listener to only value changes on the Y subscriber - valueListenerHandle = inst.addListener( - ySub, - EnumSet.of(NetworkTableEvent.Kind.kValueAll), - event -> { - // can only get doubles because it's a DoubleSubscriber, but - // could check value.isDouble() here too - yValue.set(event.valueData.value.getDouble()); - }); - // add a listener to see when new topics are published within datatable - // the string array is an array of topic name prefixes. - topicListenerHandle = inst.addListener( - new String[] { datatable.getPath() + "/" }, - EnumSet.of(NetworkTableEvent.Kind.kTopic), - event -> { - if (event.is(NetworkTableEvent.Kind.kPublish)) { - // topicInfo.name is the full topic name, e.g. "/datatable/X" - System.out.println("newly published " + event.topicInfo.name); - } - }); - } - public void periodic() { - // get the latest value by reading the AtomicReference; set it to null - // when we read to ensure we only get value changes - Double value = yValue.getAndSet(null); - if (value != null) { - System.out.println("got new value " + value); + ```java + public class Example { + final DoubleSubscriber ySub; + // use an AtomicReference to make updating the value thread-safe + final AtomicReference yValue = new AtomicReference(); + // retain listener handles for later removal + int connListenerHandle; + int valueListenerHandle; + int topicListenerHandle; + public Example() { + // get the default instance of NetworkTables + NetworkTableInstance inst = NetworkTableInstance.getDefault(); + // add a connection listener; the first parameter will cause the + // callback to be called immediately for any current connections + connListenerHandle = inst.addConnectionListener(true, event -> { + if (event.is(NetworkTableEvent.Kind.kConnected)) { + System.out.println("Connected to " + event.connInfo.remote_id); + } else if (event.is(NetworkTableEvent.Kind.kDisconnected)) { + System.out.println("Disconnected from " + event.connInfo.remote_id); } + }); + // get the subtable called "datatable" + NetworkTable datatable = inst.getTable("datatable"); + // subscribe to the topic in "datatable" called "Y" + ySub = datatable.getDoubleTopic("Y").subscribe(0.0); + // add a listener to only value changes on the Y subscriber + valueListenerHandle = inst.addListener( + ySub, + EnumSet.of(NetworkTableEvent.Kind.kValueAll), + event -> { + // can only get doubles because it's a DoubleSubscriber, but + // could check value.isDouble() here too + yValue.set(event.valueData.value.getDouble()); + }); + // add a listener to see when new topics are published within datatable + // the string array is an array of topic name prefixes. + topicListenerHandle = inst.addListener( + new String[] { datatable.getPath() + "/" }, + EnumSet.of(NetworkTableEvent.Kind.kTopic), + event -> { + if (event.is(NetworkTableEvent.Kind.kPublish)) { + // topicInfo.name is the full topic name, e.g. "/datatable/X" + System.out.println("newly published " + event.topicInfo.name); + } + }); + } + public void periodic() { + // get the latest value by reading the AtomicReference; set it to null + // when we read to ensure we only get value changes + Double value = yValue.getAndSet(null); + if (value != null) { + System.out.println("got new value " + value); } - // may not be needed for robot programs if this class exists for the - // lifetime of the program - public void close() { - NetworkTableInstance inst = NetworkTableInstance.getDefault(); - inst.removeListener(topicListenerHandle); - inst.removeListener(valueListenerHandle); - inst.removeListener(connListenerHandle); - ySub.close(); - } } - ``` + // may not be needed for robot programs if this class exists for the + // lifetime of the program + public void close() { + NetworkTableInstance inst = NetworkTableInstance.getDefault(); + inst.removeListener(topicListenerHandle); + inst.removeListener(valueListenerHandle); + inst.removeListener(connListenerHandle); + ySub.close(); + } + } + ``` .. tab-item:: C++ - :sync: C++ + :sync: C++ - ```c++ - class Example { - nt::DoubleSubscriber ySub; - // use a mutex to make updating the value and flag thread-safe - wpi::mutex mutex; - double yValue; - bool yValueUpdated = false; - // retain listener handles for later removal - NT_Listener connListenerHandle; - NT_Listener valueListenerHandle; - NT_Listener topicListenerHandle; - public: - Example() { - // get the default instance of NetworkTables - nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault(); - // add a connection listener; the first parameter will cause the - // callback to be called immediately for any current connections - connListenerHandle = inst.AddConnectionListener(true, [] (const nt::Event& event) { - if (event.Is(nt::EventFlags::kConnected)) { - fmt::print("Connected to {}\n", event.GetConnectionInfo()->remote_id); - } else if (event.Is(nt::EventFlags::kDisconnected)) { - fmt::print("Disconnected from {}\n", event.GetConnectionInfo()->remote_id); - } - }); - // get the subtable called "datatable" - auto datatable = inst.GetTable("datatable"); - // subscribe to the topic in "datatable" called "Y" - ySub = datatable.GetDoubleTopic("Y").Subscribe(0.0); - // add a listener to only value changes on the Y subscriber - valueListenerHandle = inst.AddListener( - ySub, - nt::EventFlags::kValueAll, - [this] (const nt::Event& event) { - // can only get doubles because it's a DoubleSubscriber, but - // could check value.IsDouble() here too - std::scoped_lock lock{mutex}; - yValue = event.GetValueData()->value.GetDouble(); - yValueUpdated = true; - }); - // add a listener to see when new topics are published within datatable - // the string array is an array of topic name prefixes. - topicListenerHandle = inst.AddListener( - {{fmt::format("{}/", datatable->GetPath())}}, - nt::EventFlags::kTopic, - [] (const nt::Event& event) { - if (event.Is(nt::EventFlags::kPublish)) { - // name is the full topic name, e.g. "/datatable/X" - fmt::print("newly published {}\n", event.GetTopicInfo()->name); - } - }); - } - void Periodic() { - // get the latest value by reading the value; set it to false - // when we read to ensure we only get value changes - wpi::scoped_lock lock{mutex}; - if (yValueUpdated) { - yValueUpdated = false; - fmt::print("got new value {}\n", yValue); + ```c++ + class Example { + nt::DoubleSubscriber ySub; + // use a mutex to make updating the value and flag thread-safe + wpi::mutex mutex; + double yValue; + bool yValueUpdated = false; + // retain listener handles for later removal + NT_Listener connListenerHandle; + NT_Listener valueListenerHandle; + NT_Listener topicListenerHandle; + public: + Example() { + // get the default instance of NetworkTables + nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault(); + // add a connection listener; the first parameter will cause the + // callback to be called immediately for any current connections + connListenerHandle = inst.AddConnectionListener(true, [] (const nt::Event& event) { + if (event.Is(nt::EventFlags::kConnected)) { + fmt::print("Connected to {}\n", event.GetConnectionInfo()->remote_id); + } else if (event.Is(nt::EventFlags::kDisconnected)) { + fmt::print("Disconnected from {}\n", event.GetConnectionInfo()->remote_id); } + }); + // get the subtable called "datatable" + auto datatable = inst.GetTable("datatable"); + // subscribe to the topic in "datatable" called "Y" + ySub = datatable.GetDoubleTopic("Y").Subscribe(0.0); + // add a listener to only value changes on the Y subscriber + valueListenerHandle = inst.AddListener( + ySub, + nt::EventFlags::kValueAll, + [this] (const nt::Event& event) { + // can only get doubles because it's a DoubleSubscriber, but + // could check value.IsDouble() here too + std::scoped_lock lock{mutex}; + yValue = event.GetValueData()->value.GetDouble(); + yValueUpdated = true; + }); + // add a listener to see when new topics are published within datatable + // the string array is an array of topic name prefixes. + topicListenerHandle = inst.AddListener( + {{fmt::format("{}/", datatable->GetPath())}}, + nt::EventFlags::kTopic, + [] (const nt::Event& event) { + if (event.Is(nt::EventFlags::kPublish)) { + // name is the full topic name, e.g. "/datatable/X" + fmt::print("newly published {}\n", event.GetTopicInfo()->name); + } + }); + } + void Periodic() { + // get the latest value by reading the value; set it to false + // when we read to ensure we only get value changes + wpi::scoped_lock lock{mutex}; + if (yValueUpdated) { + yValueUpdated = false; + fmt::print("got new value {}\n", yValue); } - ~Example() { - nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault(); - inst.RemoveListener(connListenerHandle); - inst.RemoveListener(valueListenerHandle); - inst.RemoveListener(topicListenerHandle); - } - }; - ``` + } + ~Example() { + nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault(); + inst.RemoveListener(connListenerHandle); + inst.RemoveListener(valueListenerHandle); + inst.RemoveListener(topicListenerHandle); + } + }; + ``` .. tab-item:: Python - :sync: Python - + :sync: Python - ```python - import ntcore - import threading - class Example: - def __init__(self) -> None: - # get the default instance of NetworkTables - inst = ntcore.NetworkTableInstance.getDefault() - # Use a mutex to ensure thread safety - self.lock = threading.Lock() - self.yValue = None - # add a connection listener; the first parameter will cause the - # callback to be called immediately for any current connections - def _connect_cb(event: ntcore.Event): - if event.is_(ntcore.EventFlags.kConnected): - print("Connected to", event.data.remote_id) - elif event.is_(ntcore.EventFlags.kDisconnected): - print("Disconnected from", event.data.remote_id) - self.connListenerHandle = inst.addConnectionListener(True, _connect_cb) - # get the subtable called "datatable" - datatable = inst.getTable("datatable") - # subscribe to the topic in "datatable" called "Y" - self.ySub = datatable.getDoubleTopic("Y").subscribe(0.0) - # add a listener to only value changes on the Y subscriber - def _on_ysub(event: ntcore.Event): - # can only get doubles because it's a DoubleSubscriber, but - # could check value.isDouble() here too - with self.lock: - self.yValue = event.data.value.getDouble() - self.valueListenerHandle = inst.addListener( - self.ySub, ntcore.EventFlags.kValueAll, _on_ysub - ) - # add a listener to see when new topics are published within datatable - # the string array is an array of topic name prefixes. - def _on_pub(event: ntcore.Event): - if event.is_(ntcore.EventFlags.kPublish): - # topicInfo.name is the full topic name, e.g. "/datatable/X" - print("newly published", event.data.name) - self.topicListenerHandle = inst.addListener( - [datatable.getPath() + "/"], ntcore.EventFlags.kTopic, _on_pub - ) - def periodic(self): - # get the latest value by reading the value; set it to null - # when we read to ensure we only get value changes - with self.lock: - value, self.yValue = self.yValue, None - if value is not None: - print("got new value", value) - # may not be needed for robot programs if this class exists for the - # lifetime of the program - def close(self): - inst = ntcore.NetworkTableInstance.getDefault() - inst.removeListener(self.topicListenerHandle) - inst.removeListener(self.valueListenerHandle) - inst.removeListener(self.connListenerHandle) - self.ySub.close() - ``` + ```python + import ntcore + import threading + class Example: + def __init__(self) -> None: + # get the default instance of NetworkTables + inst = ntcore.NetworkTableInstance.getDefault() + # Use a mutex to ensure thread safety + self.lock = threading.Lock() + self.yValue = None + # add a connection listener; the first parameter will cause the + # callback to be called immediately for any current connections + def _connect_cb(event: ntcore.Event): + if event.is_(ntcore.EventFlags.kConnected): + print("Connected to", event.data.remote_id) + elif event.is_(ntcore.EventFlags.kDisconnected): + print("Disconnected from", event.data.remote_id) + self.connListenerHandle = inst.addConnectionListener(True, _connect_cb) + # get the subtable called "datatable" + datatable = inst.getTable("datatable") + # subscribe to the topic in "datatable" called "Y" + self.ySub = datatable.getDoubleTopic("Y").subscribe(0.0) + # add a listener to only value changes on the Y subscriber + def _on_ysub(event: ntcore.Event): + # can only get doubles because it's a DoubleSubscriber, but + # could check value.isDouble() here too + with self.lock: + self.yValue = event.data.value.getDouble() + self.valueListenerHandle = inst.addListener( + self.ySub, ntcore.EventFlags.kValueAll, _on_ysub + ) + # add a listener to see when new topics are published within datatable + # the string array is an array of topic name prefixes. + def _on_pub(event: ntcore.Event): + if event.is_(ntcore.EventFlags.kPublish): + # topicInfo.name is the full topic name, e.g. "/datatable/X" + print("newly published", event.data.name) + self.topicListenerHandle = inst.addListener( + [datatable.getPath() + "/"], ntcore.EventFlags.kTopic, _on_pub + ) + def periodic(self): + # get the latest value by reading the value; set it to null + # when we read to ensure we only get value changes + with self.lock: + value, self.yValue = self.yValue, None + if value is not None: + print("got new value", value) + # may not be needed for robot programs if this class exists for the + # lifetime of the program + def close(self): + inst = ntcore.NetworkTableInstance.getDefault() + inst.removeListener(self.topicListenerHandle) + inst.removeListener(self.valueListenerHandle) + inst.removeListener(self.connListenerHandle) + self.ySub.close() + ``` diff --git a/source/docs/software/networktables/multiple-instances.rst b/source/docs/software/networktables/multiple-instances.rst index 3a825bae74..024c48fc0e 100644 --- a/source/docs/software/networktables/multiple-instances.rst +++ b/source/docs/software/networktables/multiple-instances.rst @@ -13,7 +13,7 @@ Destroying a NetworkTableInstance frees all resources related to the instance. A .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java ```java // get the default NetworkTable instance @@ -25,7 +25,7 @@ Destroying a NetworkTableInstance frees all resources related to the instance. A ``` .. tab-item:: C++ - :sync: C++ + :sync: C++ ```c++ // get the default NetworkTable instance @@ -37,7 +37,7 @@ Destroying a NetworkTableInstance frees all resources related to the instance. A ``` .. tab-item:: C++ (Handle-based) - :sync: C++ (Handle-based) + :sync: C++ (Handle-based) ```c++ // get the default NetworkTable instance @@ -49,7 +49,7 @@ Destroying a NetworkTableInstance frees all resources related to the instance. A ``` .. tab-item:: C - :sync: C + :sync: C ```c // get the default NetworkTable instance @@ -61,7 +61,7 @@ Destroying a NetworkTableInstance frees all resources related to the instance. A ``` .. tab-item:: Python - :sync: Python + :sync: Python ```python diff --git a/source/docs/software/networktables/networktables-networking.rst b/source/docs/software/networktables/networktables-networking.rst index 67aa39ec83..caa320c9d5 100644 --- a/source/docs/software/networktables/networktables-networking.rst +++ b/source/docs/software/networktables/networktables-networking.rst @@ -7,7 +7,7 @@ The advantage of the robot program being the server is that it's at a known netw .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java ```java NetworkTableInstance inst = NetworkTableInstance.getDefault(); @@ -15,7 +15,7 @@ The advantage of the robot program being the server is that it's at a known netw ``` .. tab-item:: C++ - :sync: C++ + :sync: C++ ```c++ nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault(); @@ -23,7 +23,7 @@ The advantage of the robot program being the server is that it's at a known netw ``` .. tab-item:: C++ (Handle-based) - :sync: C++ (Handle-based) + :sync: C++ (Handle-based) ```c++ NT_Inst inst = nt::GetDefaultInstance(); @@ -31,7 +31,7 @@ The advantage of the robot program being the server is that it's at a known netw ``` .. tab-item:: C - :sync: C + :sync: C ```c NT_Inst inst = NT_GetDefaultInstance(); @@ -39,7 +39,7 @@ The advantage of the robot program being the server is that it's at a known netw ``` .. tab-item:: Python - :sync: Python + :sync: Python ```python @@ -53,7 +53,7 @@ The advantage of the robot program being the server is that it's at a known netw .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java ```java NetworkTableInstance inst = NetworkTableInstance.getDefault(); @@ -68,7 +68,7 @@ The advantage of the robot program being the server is that it's at a known netw ``` .. tab-item:: C++ - :sync: C++ + :sync: C++ ```c++ nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault(); @@ -83,7 +83,7 @@ The advantage of the robot program being the server is that it's at a known netw ``` .. tab-item:: C++ (Handle-based) - :sync: C++ (Handle-based) + :sync: C++ (Handle-based) ```c++ NT_Inst inst = nt::GetDefaultInstance(); @@ -98,7 +98,7 @@ The advantage of the robot program being the server is that it's at a known netw ``` .. tab-item:: C - :sync: C + :sync: C ```c NT_Inst inst = NT_GetDefaultInstance(); @@ -113,7 +113,7 @@ The advantage of the robot program being the server is that it's at a known netw ``` .. tab-item:: Python - :sync: Python + :sync: Python ```python diff --git a/source/docs/software/networktables/publish-and-subscribe.rst b/source/docs/software/networktables/publish-and-subscribe.rst index 35f0f5d006..b5bbaf4584 100644 --- a/source/docs/software/networktables/publish-and-subscribe.rst +++ b/source/docs/software/networktables/publish-and-subscribe.rst @@ -13,187 +13,186 @@ Publishing values is done via a ``set()`` operation. By default, this operation .. tab-set:: .. tab-item:: Java - :sync: Java - - ```java - public class Example { - // the publisher is an instance variable so its lifetime matches that of the class - final DoublePublisher dblPub; - public Example(DoubleTopic dblTopic) { - // start publishing; the return value must be retained (in this case, via - // an instance variable) - dblPub = dblTopic.publish(); - // publish options may be specified using PubSubOption - dblPub = dblTopic.publish(PubSubOption.keepDuplicates(true)); - // publishEx provides additional options such as setting initial - // properties and using a custom type string. Using a custom type string for - // types other than raw and string is not recommended. The properties string - // must be a JSON map. - dblPub = dblTopic.publishEx("double", "{\"myprop\": 5}"); - } - public void periodic() { - // publish a default value - dblPub.setDefault(0.0); - // publish a value with current timestamp - dblPub.set(1.0); - dblPub.set(2.0, 0); // 0 = use current time - // publish a value with a specific timestamp; NetworkTablesJNI.now() can - // be used to get the current time. On the roboRIO, this is the same as - // the FPGA timestamp (e.g. RobotController.getFPGATime()) - long time = NetworkTablesJNI.now(); - dblPub.set(3.0, time); - // publishers also implement the appropriate Consumer functional interface; - // this example assumes void myFunc(DoubleConsumer func) exists - myFunc(dblPub); - } - // often not required in robot code, unless this class doesn't exist for - // the lifetime of the entire robot program, in which case close() needs to be - // called to stop publishing - public void close() { - // stop publishing - dblPub.close(); - } + :sync: Java + + ```java + public class Example { + // the publisher is an instance variable so its lifetime matches that of the class + final DoublePublisher dblPub; + public Example(DoubleTopic dblTopic) { + // start publishing; the return value must be retained (in this case, via + // an instance variable) + dblPub = dblTopic.publish(); + // publish options may be specified using PubSubOption + dblPub = dblTopic.publish(PubSubOption.keepDuplicates(true)); + // publishEx provides additional options such as setting initial + // properties and using a custom type string. Using a custom type string for + // types other than raw and string is not recommended. The properties string + // must be a JSON map. + dblPub = dblTopic.publishEx("double", "{\"myprop\": 5}"); + } + public void periodic() { + // publish a default value + dblPub.setDefault(0.0); + // publish a value with current timestamp + dblPub.set(1.0); + dblPub.set(2.0, 0); // 0 = use current time + // publish a value with a specific timestamp; NetworkTablesJNI.now() can + // be used to get the current time. On the roboRIO, this is the same as + // the FPGA timestamp (e.g. RobotController.getFPGATime()) + long time = NetworkTablesJNI.now(); + dblPub.set(3.0, time); + // publishers also implement the appropriate Consumer functional interface; + // this example assumes void myFunc(DoubleConsumer func) exists + myFunc(dblPub); + } + // often not required in robot code, unless this class doesn't exist for + // the lifetime of the entire robot program, in which case close() needs to be + // called to stop publishing + public void close() { + // stop publishing + dblPub.close(); } - ``` + } + ``` .. tab-item:: C++ - :sync: C++ - - ```c++ - class Example { - // the publisher is an instance variable so its lifetime matches that of the class - // publishing is automatically stopped when dblPub is destroyed by the class destructor - nt::DoublePublisher dblPub; - public: - explicit Example(nt::DoubleTopic dblTopic) { - // start publishing; the return value must be retained (in this case, via - // an instance variable) - dblPub = dblTopic.Publish(); - // publish options may be specified using PubSubOptions - dblPub = dblTopic.Publish({.keepDuplicates = true}); - // PublishEx provides additional options such as setting initial - // properties and using a custom type string. Using a custom type string for - // types other than raw and string is not recommended. The properties must - // be a JSON map. - dblPub = dblTopic.PublishEx("double", {{"myprop", 5}}); - } - void Periodic() { - // publish a default value - dblPub.SetDefault(0.0); - // publish a value with current timestamp - dblPub.Set(1.0); - dblPub.Set(2.0, 0); // 0 = use current time - // publish a value with a specific timestamp; nt::Now() can - // be used to get the current time. - int64_t time = nt::Now(); - dblPub.Set(3.0, time); - } - }; - ``` + :sync: C++ + + ```c++ + class Example { + // the publisher is an instance variable so its lifetime matches that of the class + // publishing is automatically stopped when dblPub is destroyed by the class destructor + nt::DoublePublisher dblPub; + public: + explicit Example(nt::DoubleTopic dblTopic) { + // start publishing; the return value must be retained (in this case, via + // an instance variable) + dblPub = dblTopic.Publish(); + // publish options may be specified using PubSubOptions + dblPub = dblTopic.Publish({.keepDuplicates = true}); + // PublishEx provides additional options such as setting initial + // properties and using a custom type string. Using a custom type string for + // types other than raw and string is not recommended. The properties must + // be a JSON map. + dblPub = dblTopic.PublishEx("double", {{"myprop", 5}}); + } + void Periodic() { + // publish a default value + dblPub.SetDefault(0.0); + // publish a value with current timestamp + dblPub.Set(1.0); + dblPub.Set(2.0, 0); // 0 = use current time + // publish a value with a specific timestamp; nt::Now() can + // be used to get the current time. + int64_t time = nt::Now(); + dblPub.Set(3.0, time); + } + }; + ``` .. tab-item:: C++ (Handle-based) - :sync: C++ (Handle-based) - - ```c++ - class Example { - // the publisher is an instance variable, but since it's a handle, it's - // not automatically released, so we need a destructor - NT_Publisher dblPub; - public: - explicit Example(NT_Topic dblTopic) { - // start publishing. It's recommended that the type string be standard - // for all types except string and raw. - dblPub = nt::Publish(dblTopic, NT_DOUBLE, "double"); - // publish options may be specified using PubSubOptions - dblPub = nt::Publish(dblTopic, NT_DOUBLE, "double", - {.keepDuplicates = true}); - // PublishEx allows setting initial properties. The - // properties must be a JSON map. - dblPub = nt::PublishEx(dblTopic, NT_DOUBLE, "double", {{"myprop", 5}}); - } - void Periodic() { - // publish a default value - nt::SetDefaultDouble(dblPub, 0.0); - // publish a value with current timestamp - nt::SetDouble(dblPub, 1.0); - nt::SetDouble(dblPub, 2.0, 0); // 0 = use current time - // publish a value with a specific timestamp; nt::Now() can - // be used to get the current time. - int64_t time = nt::Now(); - nt::SetDouble(dblPub, 3.0, time); - } - ~Example() { - // stop publishing - nt::Unpublish(dblPub); - } - }; - ``` + :sync: C++ (Handle-based) + + ```c++ + class Example { + // the publisher is an instance variable, but since it's a handle, it's + // not automatically released, so we need a destructor + NT_Publisher dblPub; + public: + explicit Example(NT_Topic dblTopic) { + // start publishing. It's recommended that the type string be standard + // for all types except string and raw. + dblPub = nt::Publish(dblTopic, NT_DOUBLE, "double"); + // publish options may be specified using PubSubOptions + dblPub = nt::Publish(dblTopic, NT_DOUBLE, "double", + {.keepDuplicates = true}); + // PublishEx allows setting initial properties. The + // properties must be a JSON map. + dblPub = nt::PublishEx(dblTopic, NT_DOUBLE, "double", {{"myprop", 5}}); + } + void Periodic() { + // publish a default value + nt::SetDefaultDouble(dblPub, 0.0); + // publish a value with current timestamp + nt::SetDouble(dblPub, 1.0); + nt::SetDouble(dblPub, 2.0, 0); // 0 = use current time + // publish a value with a specific timestamp; nt::Now() can + // be used to get the current time. + int64_t time = nt::Now(); + nt::SetDouble(dblPub, 3.0, time); + } + ~Example() { + // stop publishing + nt::Unpublish(dblPub); + } + }; + ``` .. tab-item:: C - :sync: C - - ```c - // This code assumes that a NT_Topic dblTopic variable already exists - // start publishing. It's recommended that the type string be standard - // for all types except string and raw. - NT_Publisher dblPub = NT_Publish(dblTopic, NT_DOUBLE, "double", NULL, 0); - // publish options may be specified - struct NT_PubSubOptions options; - memset(&options, 0, sizeof(options)); - options.structSize = sizeof(options); - options.keepDuplicates = 1; // true - NT_Publisher dblPub = NT_Publish(dblTopic, NT_DOUBLE, "double", &options); - // PublishEx allows setting initial properties. The properties string must - // be a JSON map. - NT_Publisher dblPub = - NT_PublishEx(dblTopic, NT_DOUBLE, "double", "{\"myprop\", 5}", NULL, 0); - // publish a default value - NT_SetDefaultDouble(dblPub, 0.0); - // publish a value with current timestamp - NT_SetDouble(dblPub, 1.0); - NT_SetDouble(dblPub, 2.0, 0); // 0 = use current time - // publish a value with a specific timestamp; NT_Now() can - // be used to get the current time. - int64_t time = NT_Now(); - NT_SetDouble(dblPub, 3.0, time); - // stop publishing - NT_Unpublish(dblPub); - ``` + :sync: C + + ```c + // This code assumes that a NT_Topic dblTopic variable already exists + // start publishing. It's recommended that the type string be standard + // for all types except string and raw. + NT_Publisher dblPub = NT_Publish(dblTopic, NT_DOUBLE, "double", NULL, 0); + // publish options may be specified + struct NT_PubSubOptions options; + memset(&options, 0, sizeof(options)); + options.structSize = sizeof(options); + options.keepDuplicates = 1; // true + NT_Publisher dblPub = NT_Publish(dblTopic, NT_DOUBLE, "double", &options); + // PublishEx allows setting initial properties. The properties string must + // be a JSON map. + NT_Publisher dblPub = + NT_PublishEx(dblTopic, NT_DOUBLE, "double", "{\"myprop\", 5}", NULL, 0); + // publish a default value + NT_SetDefaultDouble(dblPub, 0.0); + // publish a value with current timestamp + NT_SetDouble(dblPub, 1.0); + NT_SetDouble(dblPub, 2.0, 0); // 0 = use current time + // publish a value with a specific timestamp; NT_Now() can + // be used to get the current time. + int64_t time = NT_Now(); + NT_SetDouble(dblPub, 3.0, time); + // stop publishing + NT_Unpublish(dblPub); + ``` .. tab-item:: Python - :sync: Python - - - ```python - class Example: - def __init__(self, dblTopic: ntcore.DoubleTopic): - # start publishing; the return value must be retained (in this case, via - # an instance variable) - self.dblPub = dblTopic.publish() - # publish options may be specified using PubSubOption - self.dblPub = dblTopic.publish(ntcore.PubSubOptions(keepDuplicates=True)) - # publishEx provides additional options such as setting initial - # properties and using a custom type string. Using a custom type string for - # types other than raw and string is not recommended. The properties string - # must be a JSON map. - self.dblPub = dblTopic.publishEx("double", '{"myprop": 5}') - def periodic(self): - # publish a default value - self.dblPub.setDefault(0.0) - # publish a value with current timestamp - self.dblPub.set(1.0) - self.dblPub.set(2.0, 0) # 0 = use current time - # publish a value with a specific timestamp with microsecond resolution. - # On the roboRIO, this is the same as the FPGA timestamp (e.g. - # RobotController.getFPGATime()) - self.dblPub.set(3.0, ntcore._now()) - # often not required in robot code, unless this class doesn't exist for - # the lifetime of the entire robot program, in which case close() needs to be - # called to stop publishing - def close(self): - # stop publishing - self.dblPub.close() - ``` + :sync: Python + + ```python + class Example: + def __init__(self, dblTopic: ntcore.DoubleTopic): + # start publishing; the return value must be retained (in this case, via + # an instance variable) + self.dblPub = dblTopic.publish() + # publish options may be specified using PubSubOption + self.dblPub = dblTopic.publish(ntcore.PubSubOptions(keepDuplicates=True)) + # publishEx provides additional options such as setting initial + # properties and using a custom type string. Using a custom type string for + # types other than raw and string is not recommended. The properties string + # must be a JSON map. + self.dblPub = dblTopic.publishEx("double", '{"myprop": 5}') + def periodic(self): + # publish a default value + self.dblPub.setDefault(0.0) + # publish a value with current timestamp + self.dblPub.set(1.0) + self.dblPub.set(2.0, 0) # 0 = use current time + # publish a value with a specific timestamp with microsecond resolution. + # On the roboRIO, this is the same as the FPGA timestamp (e.g. + # RobotController.getFPGATime()) + self.dblPub.set(3.0, ntcore._now()) + # often not required in robot code, unless this class doesn't exist for + # the lifetime of the entire robot program, in which case close() needs to be + # called to stop publishing + def close(self): + # stop publishing + self.dblPub.close() + ``` ## Subscribing to a Topic @@ -204,191 +203,191 @@ Subscribers have a range of different ways to read received values. It's possibl .. tab-set:: .. tab-item:: Java - :sync: Java - - ```java - public class Example { - // the subscriber is an instance variable so its lifetime matches that of the class - final DoubleSubscriber dblSub; - public Example(DoubleTopic dblTopic) { - // start subscribing; the return value must be retained. - // the parameter is the default value if no value is available when get() is called - dblSub = dblTopic.subscribe(0.0); - // subscribe options may be specified using PubSubOption - dblSub = - dblTopic.subscribe(0.0, PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); - // subscribeEx provides the options of using a custom type string. - // Using a custom type string for types other than raw and string is not recommended. - dblSub = dblTopic.subscribeEx("double", 0.0); - } - public void periodic() { - // simple get of most recent value; if no value has been published, - // returns the default value passed to the subscribe() function - double val = dblSub.get(); - // get the most recent value; if no value has been published, returns - // the passed-in default value - double val = dblSub.get(-1.0); - // subscribers also implement the appropriate Supplier interface, e.g. DoubleSupplier - double val = dblSub.getAsDouble(); - // get the most recent value, along with its timestamp - TimestampedDouble tsVal = dblSub.getAtomic(); - // read all value changes since the last call to readQueue/readQueueValues - // readQueue() returns timestamps; readQueueValues() does not. - TimestampedDouble[] tsUpdates = dblSub.readQueue(); - double[] valUpdates = dblSub.readQueueValues(); - } - // often not required in robot code, unless this class doesn't exist for - // the lifetime of the entire robot program, in which case close() needs to be - // called to stop subscribing - public void close() { - // stop subscribing - dblSub.close(); - } + :sync: Java + + ```java + public class Example { + // the subscriber is an instance variable so its lifetime matches that of the class + final DoubleSubscriber dblSub; + public Example(DoubleTopic dblTopic) { + // start subscribing; the return value must be retained. + // the parameter is the default value if no value is available when get() is called + dblSub = dblTopic.subscribe(0.0); + // subscribe options may be specified using PubSubOption + dblSub = + dblTopic.subscribe(0.0, PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); + // subscribeEx provides the options of using a custom type string. + // Using a custom type string for types other than raw and string is not recommended. + dblSub = dblTopic.subscribeEx("double", 0.0); + } + public void periodic() { + // simple get of most recent value; if no value has been published, + // returns the default value passed to the subscribe() function + double val = dblSub.get(); + // get the most recent value; if no value has been published, returns + // the passed-in default value + double val = dblSub.get(-1.0); + // subscribers also implement the appropriate Supplier interface, e.g. DoubleSupplier + double val = dblSub.getAsDouble(); + // get the most recent value, along with its timestamp + TimestampedDouble tsVal = dblSub.getAtomic(); + // read all value changes since the last call to readQueue/readQueueValues + // readQueue() returns timestamps; readQueueValues() does not. + TimestampedDouble[] tsUpdates = dblSub.readQueue(); + double[] valUpdates = dblSub.readQueueValues(); } - ``` + // often not required in robot code, unless this class doesn't exist for + // the lifetime of the entire robot program, in which case close() needs to be + // called to stop subscribing + public void close() { + // stop subscribing + dblSub.close(); + } + } + ``` .. tab-item:: C++ - :sync: C++ - - ```c++ - class Example { - // the subscriber is an instance variable so its lifetime matches that of the class - // subscribing is automatically stopped when dblSub is destroyed by the class destructor - nt::DoubleSubscriber dblSub; - public: - explicit Example(nt::DoubleTopic dblTopic) { - // start subscribing; the return value must be retained. - // the parameter is the default value if no value is available when get() is called - dblSub = dblTopic.Subscribe(0.0); - // subscribe options may be specified using PubSubOptions - dblSub = - dblTopic.subscribe(0.0, - {.pollStorage = 10, .keepDuplicates = true}); - // SubscribeEx provides the options of using a custom type string. - // Using a custom type string for types other than raw and string is not recommended. - dblSub = dblTopic.SubscribeEx("double", 0.0); - } - void Periodic() { - // simple get of most recent value; if no value has been published, - // returns the default value passed to the Subscribe() function - double val = dblSub.Get(); - // get the most recent value; if no value has been published, returns - // the passed-in default value - double val = dblSub.Get(-1.0); - // get the most recent value, along with its timestamp - nt::TimestampedDouble tsVal = dblSub.GetAtomic(); - // read all value changes since the last call to ReadQueue/ReadQueueValues - // ReadQueue() returns timestamps; ReadQueueValues() does not. - std::vector tsUpdates = dblSub.ReadQueue(); - std::vector valUpdates = dblSub.ReadQueueValues(); - } - }; - ``` + :sync: C++ + + ```c++ + class Example { + // the subscriber is an instance variable so its lifetime matches that of the class + // subscribing is automatically stopped when dblSub is destroyed by the class destructor + nt::DoubleSubscriber dblSub; + public: + explicit Example(nt::DoubleTopic dblTopic) { + // start subscribing; the return value must be retained. + // the parameter is the default value if no value is available when get() is called + dblSub = dblTopic.Subscribe(0.0); + // subscribe options may be specified using PubSubOptions + dblSub = + dblTopic.subscribe(0.0, + {.pollStorage = 10, .keepDuplicates = true}); + // SubscribeEx provides the options of using a custom type string. + // Using a custom type string for types other than raw and string is not recommended. + dblSub = dblTopic.SubscribeEx("double", 0.0); + } + void Periodic() { + // simple get of most recent value; if no value has been published, + // returns the default value passed to the Subscribe() function + double val = dblSub.Get(); + // get the most recent value; if no value has been published, returns + // the passed-in default value + double val = dblSub.Get(-1.0); + // get the most recent value, along with its timestamp + nt::TimestampedDouble tsVal = dblSub.GetAtomic(); + // read all value changes since the last call to ReadQueue/ReadQueueValues + // ReadQueue() returns timestamps; ReadQueueValues() does not. + std::vector tsUpdates = dblSub.ReadQueue(); + std::vector valUpdates = dblSub.ReadQueueValues(); + } + }; + ``` .. tab-item:: C++ (Handle-based) - :sync: C++ (Handle-based) - - ```c++ - class Example { - // the subscriber is an instance variable, but since it's a handle, it's - // not automatically released, so we need a destructor - NT_Subscriber dblSub; - public: - explicit Example(NT_Topic dblTopic) { - // start subscribing - // Using a custom type string for types other than raw and string is not recommended. - dblSub = nt::Subscribe(dblTopic, NT_DOUBLE, "double"); - // subscribe options may be specified using PubSubOptions - dblSub = - nt::Subscribe(dblTopic, NT_DOUBLE, "double", - {.pollStorage = 10, .keepDuplicates = true}); - } - void Periodic() { - // get the most recent value; if no value has been published, returns - // the passed-in default value - double val = nt::GetDouble(dblSub, 0.0); - // get the most recent value, along with its timestamp - nt::TimestampedDouble tsVal = nt::GetAtomic(dblSub, 0.0); - // read all value changes since the last call to ReadQueue/ReadQueueValues - // ReadQueue() returns timestamps; ReadQueueValues() does not. - std::vector tsUpdates = nt::ReadQueueDouble(dblSub); - std::vector valUpdates = nt::ReadQueueValuesDouble(dblSub); - } - ~Example() { - // stop subscribing - nt::Unsubscribe(dblSub); - } - ``` + :sync: C++ (Handle-based) + + ```c++ + class Example { + // the subscriber is an instance variable, but since it's a handle, it's + // not automatically released, so we need a destructor + NT_Subscriber dblSub; + public: + explicit Example(NT_Topic dblTopic) { + // start subscribing + // Using a custom type string for types other than raw and string is not recommended. + dblSub = nt::Subscribe(dblTopic, NT_DOUBLE, "double"); + // subscribe options may be specified using PubSubOptions + dblSub = + nt::Subscribe(dblTopic, NT_DOUBLE, "double", + {.pollStorage = 10, .keepDuplicates = true}); + } + void Periodic() { + // get the most recent value; if no value has been published, returns + // the passed-in default value + double val = nt::GetDouble(dblSub, 0.0); + // get the most recent value, along with its timestamp + nt::TimestampedDouble tsVal = nt::GetAtomic(dblSub, 0.0); + // read all value changes since the last call to ReadQueue/ReadQueueValues + // ReadQueue() returns timestamps; ReadQueueValues() does not. + std::vector tsUpdates = nt::ReadQueueDouble(dblSub); + std::vector valUpdates = nt::ReadQueueValuesDouble(dblSub); + } + ~Example() { + // stop subscribing + nt::Unsubscribe(dblSub); + } + ``` .. tab-item:: C - :sync: C - - ```c - // This code assumes that a NT_Topic dblTopic variable already exists - // start subscribing - // Using a custom type string for types other than raw and string is not recommended. - NT_Subscriber dblSub = NT_Subscribe(dblTopic, NT_DOUBLE, "double", NULL, 0); - // subscribe options may be specified using NT_PubSubOptions - struct NT_PubSubOptions options; - memset(&options, 0, sizeof(options)); - options.structSize = sizeof(options); - options.keepDuplicates = 1; // true - options.pollStorage = 10; - NT_Subscriber dblSub = NT_Subscribe(dblTopic, NT_DOUBLE, "double", &options); - // get the most recent value; if no value has been published, returns - // the passed-in default value - double val = NT_GetDouble(dblSub, 0.0); - // get the most recent value, along with its timestamp - struct NT_TimestampedDouble tsVal; - NT_GetAtomic(dblSub, 0.0, &tsVal); - NT_DisposeTimestamped(&tsVal); - // read all value changes since the last call to ReadQueue/ReadQueueValues - // ReadQueue() returns timestamps; ReadQueueValues() does not. - size_t tsUpdatesLen; - struct NT_TimestampedDouble* tsUpdates = NT_ReadQueueDouble(dblSub, &tsUpdatesLen); - NT_FreeQueueDouble(tsUpdates, tsUpdatesLen); - size_t valUpdatesLen; - double* valUpdates = NT_ReadQueueValuesDouble(dblSub, &valUpdatesLen); - NT_FreeDoubleArray(valUpdates, valUpdatesLen); - // stop subscribing - NT_Unsubscribe(dblSub); - ``` + :sync: C + + ```c + // This code assumes that a NT_Topic dblTopic variable already exists + // start subscribing + // Using a custom type string for types other than raw and string is not recommended. + NT_Subscriber dblSub = NT_Subscribe(dblTopic, NT_DOUBLE, "double", NULL, 0); + // subscribe options may be specified using NT_PubSubOptions + struct NT_PubSubOptions options; + memset(&options, 0, sizeof(options)); + options.structSize = sizeof(options); + options.keepDuplicates = 1; // true + options.pollStorage = 10; + NT_Subscriber dblSub = NT_Subscribe(dblTopic, NT_DOUBLE, "double", &options); + // get the most recent value; if no value has been published, returns + // the passed-in default value + double val = NT_GetDouble(dblSub, 0.0); + // get the most recent value, along with its timestamp + struct NT_TimestampedDouble tsVal; + NT_GetAtomic(dblSub, 0.0, &tsVal); + NT_DisposeTimestamped(&tsVal); + // read all value changes since the last call to ReadQueue/ReadQueueValues + // ReadQueue() returns timestamps; ReadQueueValues() does not. + size_t tsUpdatesLen; + struct NT_TimestampedDouble* tsUpdates = NT_ReadQueueDouble(dblSub, &tsUpdatesLen); + NT_FreeQueueDouble(tsUpdates, tsUpdatesLen); + size_t valUpdatesLen; + double* valUpdates = NT_ReadQueueValuesDouble(dblSub, &valUpdatesLen); + NT_FreeDoubleArray(valUpdates, valUpdatesLen); + // stop subscribing + NT_Unsubscribe(dblSub); + ``` .. tab-item:: Python - :sync: Python - - ```python - class Example: - def __init__(self, dblTopic: ntcore.DoubleTopic): - # start subscribing; the return value must be retained. - # the parameter is the default value if no value is available when get() is called - self.dblSub = dblTopic.subscribe(0.0) - # subscribe options may be specified using PubSubOption - self.dblSub = dblTopic.subscribe( - 0.0, ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10) - ) - # subscribeEx provides the options of using a custom type string. - # Using a custom type string for types other than raw and string is not recommended. - dblSub = dblTopic.subscribeEx("double", 0.0) - def periodic(self): - # simple get of most recent value; if no value has been published, - # returns the default value passed to the subscribe() function - val = self.dblSub.get() - # get the most recent value; if no value has been published, returns - # the passed-in default value - val = self.dblSub.get(-1.0) - # get the most recent value, along with its timestamp - tsVal = self.dblSub.getAtomic() - # read all value changes since the last call to readQueue - # readQueue() returns timestamps - tsUpdates = self.dblSub.readQueue() - # often not required in robot code, unless this class doesn't exist for - # the lifetime of the entire robot program, in which case close() needs to be - # called to stop subscribing - def close(self): - # stop subscribing - self.dblSub.close() - ``` + :sync: Python + + ```python + class Example: + def __init__(self, dblTopic: ntcore.DoubleTopic): + # start subscribing; the return value must be retained. + # the parameter is the default value if no value is available when get() is called + self.dblSub = dblTopic.subscribe(0.0) + # subscribe options may be specified using PubSubOption + self.dblSub = dblTopic.subscribe( + 0.0, ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10) + ) + # subscribeEx provides the options of using a custom type string. + # Using a custom type string for types other than raw and string is not recommended. + dblSub = dblTopic.subscribeEx("double", 0.0) + def periodic(self): + # simple get of most recent value; if no value has been published, + # returns the default value passed to the subscribe() function + val = self.dblSub.get() + # get the most recent value; if no value has been published, returns + # the passed-in default value + val = self.dblSub.get(-1.0) + # get the most recent value, along with its timestamp + tsVal = self.dblSub.getAtomic() + # read all value changes since the last call to readQueue + # readQueue() returns timestamps + tsUpdates = self.dblSub.readQueue() + # often not required in robot code, unless this class doesn't exist for + # the lifetime of the entire robot program, in which case close() needs to be + # called to stop subscribing + def close(self): + # stop subscribing + self.dblSub.close() + ``` ## Using Entry to Both Subscribe and Publish @@ -397,221 +396,221 @@ An :term:`entry` is a combined publisher and subscriber. The subscriber is alway .. tab-set:: .. tab-item:: Java - :sync: Java - - ```java - public class Example { - // the entry is an instance variable so its lifetime matches that of the class - final DoubleEntry dblEntry; - public Example(DoubleTopic dblTopic) { - // start subscribing; the return value must be retained. - // the parameter is the default value if no value is available when get() is called - dblEntry = dblTopic.getEntry(0.0); - // publish and subscribe options may be specified using PubSubOption - dblEntry = - dblTopic.getEntry(0.0, PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); - // getEntryEx provides the options of using a custom type string. - // Using a custom type string for types other than raw and string is not recommended. - dblEntry = dblTopic.getEntryEx("double", 0.0); - } - public void periodic() { - // entries support all the same methods as subscribers: - double val = dblEntry.get(); - double val = dblEntry.get(-1.0); - double val = dblEntry.getAsDouble(); - TimestampedDouble tsVal = dblEntry.getAtomic(); - TimestampedDouble[] tsUpdates = dblEntry.readQueue(); - double[] valUpdates = dblEntry.readQueueValues(); - // entries also support all the same methods as publishers; the first time - // one of these is called, an internal publisher is automatically created - dblEntry.setDefault(0.0); - dblEntry.set(1.0); - dblEntry.set(2.0, 0); // 0 = use current time - long time = NetworkTablesJNI.now(); - dblEntry.set(3.0, time); - myFunc(dblEntry); - } - public void unpublish() { - // you can stop publishing while keeping the subscriber alive - dblEntry.unpublish(); - } - // often not required in robot code, unless this class doesn't exist for - // the lifetime of the entire robot program, in which case close() needs to be - // called to stop subscribing - public void close() { - // stop subscribing/publishing - dblEntry.close(); - } + :sync: Java + + ```java + public class Example { + // the entry is an instance variable so its lifetime matches that of the class + final DoubleEntry dblEntry; + public Example(DoubleTopic dblTopic) { + // start subscribing; the return value must be retained. + // the parameter is the default value if no value is available when get() is called + dblEntry = dblTopic.getEntry(0.0); + // publish and subscribe options may be specified using PubSubOption + dblEntry = + dblTopic.getEntry(0.0, PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); + // getEntryEx provides the options of using a custom type string. + // Using a custom type string for types other than raw and string is not recommended. + dblEntry = dblTopic.getEntryEx("double", 0.0); } - ``` + public void periodic() { + // entries support all the same methods as subscribers: + double val = dblEntry.get(); + double val = dblEntry.get(-1.0); + double val = dblEntry.getAsDouble(); + TimestampedDouble tsVal = dblEntry.getAtomic(); + TimestampedDouble[] tsUpdates = dblEntry.readQueue(); + double[] valUpdates = dblEntry.readQueueValues(); + // entries also support all the same methods as publishers; the first time + // one of these is called, an internal publisher is automatically created + dblEntry.setDefault(0.0); + dblEntry.set(1.0); + dblEntry.set(2.0, 0); // 0 = use current time + long time = NetworkTablesJNI.now(); + dblEntry.set(3.0, time); + myFunc(dblEntry); + } + public void unpublish() { + // you can stop publishing while keeping the subscriber alive + dblEntry.unpublish(); + } + // often not required in robot code, unless this class doesn't exist for + // the lifetime of the entire robot program, in which case close() needs to be + // called to stop subscribing + public void close() { + // stop subscribing/publishing + dblEntry.close(); + } + } + ``` .. tab-item:: C++ - :sync: C++ - - ```c++ - class Example { - // the entry is an instance variable so its lifetime matches that of the class - // subscribing/publishing is automatically stopped when dblEntry is destroyed by - // the class destructor - nt::DoubleEntry dblEntry; - public: - explicit Example(nt::DoubleTopic dblTopic) { - // start subscribing; the return value must be retained. - // the parameter is the default value if no value is available when get() is called - dblEntry = dblTopic.GetEntry(0.0); - // publish and subscribe options may be specified using PubSubOptions - dblEntry = - dblTopic.GetEntry(0.0, - {.pollStorage = 10, .keepDuplicates = true}); - // GetEntryEx provides the options of using a custom type string. - // Using a custom type string for types other than raw and string is not recommended. - dblEntry = dblTopic.GetEntryEx("double", 0.0); - } - void Periodic() { - // entries support all the same methods as subscribers: - double val = dblEntry.Get(); - double val = dblEntry.Get(-1.0); - nt::TimestampedDouble tsVal = dblEntry.GetAtomic(); - std::vector tsUpdates = dblEntry.ReadQueue(); - std::vector valUpdates = dblEntry.ReadQueueValues(); - // entries also support all the same methods as publishers; the first time - // one of these is called, an internal publisher is automatically created - dblEntry.SetDefault(0.0); - dblEntry.Set(1.0); - dblEntry.Set(2.0, 0); // 0 = use current time - int64_t time = nt::Now(); - dblEntry.Set(3.0, time); - } - void Unpublish() { - // you can stop publishing while keeping the subscriber alive - dblEntry.Unpublish(); - } - }; - ``` + :sync: C++ + + ```c++ + class Example { + // the entry is an instance variable so its lifetime matches that of the class + // subscribing/publishing is automatically stopped when dblEntry is destroyed by + // the class destructor + nt::DoubleEntry dblEntry; + public: + explicit Example(nt::DoubleTopic dblTopic) { + // start subscribing; the return value must be retained. + // the parameter is the default value if no value is available when get() is called + dblEntry = dblTopic.GetEntry(0.0); + // publish and subscribe options may be specified using PubSubOptions + dblEntry = + dblTopic.GetEntry(0.0, + {.pollStorage = 10, .keepDuplicates = true}); + // GetEntryEx provides the options of using a custom type string. + // Using a custom type string for types other than raw and string is not recommended. + dblEntry = dblTopic.GetEntryEx("double", 0.0); + } + void Periodic() { + // entries support all the same methods as subscribers: + double val = dblEntry.Get(); + double val = dblEntry.Get(-1.0); + nt::TimestampedDouble tsVal = dblEntry.GetAtomic(); + std::vector tsUpdates = dblEntry.ReadQueue(); + std::vector valUpdates = dblEntry.ReadQueueValues(); + // entries also support all the same methods as publishers; the first time + // one of these is called, an internal publisher is automatically created + dblEntry.SetDefault(0.0); + dblEntry.Set(1.0); + dblEntry.Set(2.0, 0); // 0 = use current time + int64_t time = nt::Now(); + dblEntry.Set(3.0, time); + } + void Unpublish() { + // you can stop publishing while keeping the subscriber alive + dblEntry.Unpublish(); + } + }; + ``` .. tab-item:: C++ (Handle-based) - :sync: C++ (Handle-based) - - ```c++ - class Example { - // the entry is an instance variable, but since it's a handle, it's - // not automatically released, so we need a destructor - NT_Entry dblEntry; - public: - explicit Example(NT_Topic dblTopic) { - // start subscribing - // Using a custom type string for types other than raw and string is not recommended. - dblEntry = nt::GetEntry(dblTopic, NT_DOUBLE, "double"); - // publish and subscribe options may be specified using PubSubOptions - dblEntry = - nt::GetEntry(dblTopic, NT_DOUBLE, "double", - {.pollStorage = 10, .keepDuplicates = true}); - } - void Periodic() { - // entries support all the same methods as subscribers: - double val = nt::GetDouble(dblEntry, 0.0); - nt::TimestampedDouble tsVal = nt::GetAtomic(dblEntry, 0.0); - std::vector tsUpdates = nt::ReadQueueDouble(dblEntry); - std::vector valUpdates = nt::ReadQueueValuesDouble(dblEntry); - // entries also support all the same methods as publishers; the first time - // one of these is called, an internal publisher is automatically created - nt::SetDefaultDouble(dblPub, 0.0); - nt::SetDouble(dblPub, 1.0); - nt::SetDouble(dblPub, 2.0, 0); // 0 = use current time - int64_t time = nt::Now(); - nt::SetDouble(dblPub, 3.0, time); - } - void Unpublish() { - // you can stop publishing while keeping the subscriber alive - nt::Unpublish(dblEntry); - } - ~Example() { - // stop publishing and subscribing - nt::ReleaseEntry(dblEntry); - } - ``` + :sync: C++ (Handle-based) + + ```c++ + class Example { + // the entry is an instance variable, but since it's a handle, it's + // not automatically released, so we need a destructor + NT_Entry dblEntry; + public: + explicit Example(NT_Topic dblTopic) { + // start subscribing + // Using a custom type string for types other than raw and string is not recommended. + dblEntry = nt::GetEntry(dblTopic, NT_DOUBLE, "double"); + // publish and subscribe options may be specified using PubSubOptions + dblEntry = + nt::GetEntry(dblTopic, NT_DOUBLE, "double", + {.pollStorage = 10, .keepDuplicates = true}); + } + void Periodic() { + // entries support all the same methods as subscribers: + double val = nt::GetDouble(dblEntry, 0.0); + nt::TimestampedDouble tsVal = nt::GetAtomic(dblEntry, 0.0); + std::vector tsUpdates = nt::ReadQueueDouble(dblEntry); + std::vector valUpdates = nt::ReadQueueValuesDouble(dblEntry); + // entries also support all the same methods as publishers; the first time + // one of these is called, an internal publisher is automatically created + nt::SetDefaultDouble(dblPub, 0.0); + nt::SetDouble(dblPub, 1.0); + nt::SetDouble(dblPub, 2.0, 0); // 0 = use current time + int64_t time = nt::Now(); + nt::SetDouble(dblPub, 3.0, time); + } + void Unpublish() { + // you can stop publishing while keeping the subscriber alive + nt::Unpublish(dblEntry); + } + ~Example() { + // stop publishing and subscribing + nt::ReleaseEntry(dblEntry); + } + ``` .. tab-item:: C - :sync: C - - ```c - // This code assumes that a NT_Topic dblTopic variable already exists - // start subscribing - // Using a custom type string for types other than raw and string is not recommended. - NT_Entry dblEntry = NT_GetEntryEx(dblTopic, NT_DOUBLE, "double", NULL, 0); - // publish and subscribe options may be specified using NT_PubSubOptions - struct NT_PubSubOptions options; - memset(&options, 0, sizeof(options)); - options.structSize = sizeof(options); - options.keepDuplicates = 1; // true - options.pollStorage = 10; - NT_Entry dblEntry = NT_GetEntryEx(dblTopic, NT_DOUBLE, "double", &options); - // entries support all the same methods as subscribers: - double val = NT_GetDouble(dblEntry, 0.0); - struct NT_TimestampedDouble tsVal; - NT_GetAtomic(dblEntry, 0.0, &tsVal); - NT_DisposeTimestamped(&tsVal); - size_t tsUpdatesLen; - struct NT_TimestampedDouble* tsUpdates = NT_ReadQueueDouble(dblEntry, &tsUpdatesLen); - NT_FreeQueueDouble(tsUpdates, tsUpdatesLen); - size_t valUpdatesLen; - double* valUpdates = NT_ReadQueueValuesDouble(dblEntry, &valUpdatesLen); - NT_FreeDoubleArray(valUpdates, valUpdatesLen); - // entries also support all the same methods as publishers; the first time - // one of these is called, an internal publisher is automatically created - NT_SetDefaultDouble(dblPub, 0.0); - NT_SetDouble(dblPub, 1.0); - NT_SetDouble(dblPub, 2.0, 0); // 0 = use current time - int64_t time = NT_Now(); - NT_SetDouble(dblPub, 3.0, time); - // you can stop publishing while keeping the subscriber alive - // it's not necessary to call this before NT_ReleaseEntry() - NT_Unpublish(dblEntry); - // stop subscribing - NT_ReleaseEntry(dblEntry); - ``` + :sync: C + + ```c + // This code assumes that a NT_Topic dblTopic variable already exists + // start subscribing + // Using a custom type string for types other than raw and string is not recommended. + NT_Entry dblEntry = NT_GetEntryEx(dblTopic, NT_DOUBLE, "double", NULL, 0); + // publish and subscribe options may be specified using NT_PubSubOptions + struct NT_PubSubOptions options; + memset(&options, 0, sizeof(options)); + options.structSize = sizeof(options); + options.keepDuplicates = 1; // true + options.pollStorage = 10; + NT_Entry dblEntry = NT_GetEntryEx(dblTopic, NT_DOUBLE, "double", &options); + // entries support all the same methods as subscribers: + double val = NT_GetDouble(dblEntry, 0.0); + struct NT_TimestampedDouble tsVal; + NT_GetAtomic(dblEntry, 0.0, &tsVal); + NT_DisposeTimestamped(&tsVal); + size_t tsUpdatesLen; + struct NT_TimestampedDouble* tsUpdates = NT_ReadQueueDouble(dblEntry, &tsUpdatesLen); + NT_FreeQueueDouble(tsUpdates, tsUpdatesLen); + size_t valUpdatesLen; + double* valUpdates = NT_ReadQueueValuesDouble(dblEntry, &valUpdatesLen); + NT_FreeDoubleArray(valUpdates, valUpdatesLen); + // entries also support all the same methods as publishers; the first time + // one of these is called, an internal publisher is automatically created + NT_SetDefaultDouble(dblPub, 0.0); + NT_SetDouble(dblPub, 1.0); + NT_SetDouble(dblPub, 2.0, 0); // 0 = use current time + int64_t time = NT_Now(); + NT_SetDouble(dblPub, 3.0, time); + // you can stop publishing while keeping the subscriber alive + // it's not necessary to call this before NT_ReleaseEntry() + NT_Unpublish(dblEntry); + // stop subscribing + NT_ReleaseEntry(dblEntry); + ``` .. tab-item:: Python - :sync: Python - - - ```python - class Example: - def __init__(self, dblTopic: ntcore.DoubleTopic): - # start subscribing; the return value must be retained. - # the parameter is the default value if no value is available when get() is called - self.dblEntry = dblTopic.getEntry(0.0) - # publish and subscribe options may be specified using PubSubOption - self.dblEntry = dblTopic.getEntry( - 0.0, ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10) - ) - # getEntryEx provides the options of using a custom type string. - # Using a custom type string for types other than raw and string is not recommended. - self.dblEntry = dblTopic.getEntryEx("double", 0.0) - def periodic(self): - # entries support all the same methods as subscribers: - val = self.dblEntry.get() - val = self.dblEntry.get(-1.0) - val = self.dblEntry.getAsDouble() - tsVal = self.dblEntry.getAtomic() - tsUpdates = self.dblEntry.readQueue() - # entries also support all the same methods as publishers; the first time - # one of these is called, an internal publisher is automatically created - self.dblEntry.setDefault(0.0) - self.dblEntry.set(1.0) - self.dblEntry.set(2.0, 0) # 0 = use current time - time = ntcore._now() - self.dblEntry.set(3.0, time) - def unpublish(self): - # you can stop publishing while keeping the subscriber alive - self.dblEntry.unpublish() - # often not required in robot code, unless this class doesn't exist for - # the lifetime of the entire robot program, in which case close() needs to be - # called to stop subscribing - def close(self): - # stop subscribing/publishing - self.dblEntry.close() - ``` + :sync: Python + + + ```python + class Example: + def __init__(self, dblTopic: ntcore.DoubleTopic): + # start subscribing; the return value must be retained. + # the parameter is the default value if no value is available when get() is called + self.dblEntry = dblTopic.getEntry(0.0) + # publish and subscribe options may be specified using PubSubOption + self.dblEntry = dblTopic.getEntry( + 0.0, ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10) + ) + # getEntryEx provides the options of using a custom type string. + # Using a custom type string for types other than raw and string is not recommended. + self.dblEntry = dblTopic.getEntryEx("double", 0.0) + def periodic(self): + # entries support all the same methods as subscribers: + val = self.dblEntry.get() + val = self.dblEntry.get(-1.0) + val = self.dblEntry.getAsDouble() + tsVal = self.dblEntry.getAtomic() + tsUpdates = self.dblEntry.readQueue() + # entries also support all the same methods as publishers; the first time + # one of these is called, an internal publisher is automatically created + self.dblEntry.setDefault(0.0) + self.dblEntry.set(1.0) + self.dblEntry.set(2.0, 0) # 0 = use current time + time = ntcore._now() + self.dblEntry.set(3.0, time) + def unpublish(self): + # you can stop publishing while keeping the subscriber alive + self.dblEntry.unpublish() + # often not required in robot code, unless this class doesn't exist for + # the lifetime of the entire robot program, in which case close() needs to be + # called to stop subscribing + def close(self): + # stop subscribing/publishing + self.dblEntry.close() + ``` ## Using GenericEntry, GenericPublisher, and GenericSubscriber @@ -620,190 +619,189 @@ For the most robust code, using the type-specific Publisher, Subscriber, and Ent .. tab-set:: .. tab-item:: Java - :sync: Java - - ```java - public class Example { - // the entry is an instance variable so its lifetime matches that of the class - final GenericPublisher pub; - final GenericSubscriber sub; - final GenericEntry entry; - public Example(Topic topic) { - // start subscribing; the return value must be retained. - // when publishing, a type string must be provided - pub = topic.genericPublish("double"); - // subscribing can optionally include a type string - // unlike type-specific subscribers, no default value is provided - sub = topic.genericSubscribe(); - sub = topic.genericSubscribe("double"); - // when getting an entry, the type string is also optional; if not provided - // the publisher data type will be determined by the first publisher-creating call - entry = topic.getGenericEntry(); - entry = topic.getGenericEntry("double"); - // publish and subscribe options may be specified using PubSubOption - pub = topic.genericPublish("double", - PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); - sub = - topic.genericSubscribe(PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); - entry = - topic.getGenericEntry(PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); - // genericPublishEx provides the option of setting initial properties. - pub = topic.genericPublishEx("double", "{\"retained\": true}", - PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); - } - public void periodic() { - // generic subscribers and entries have typed get operations; a default must be provided - double val = sub.getDouble(-1.0); - double val = entry.getDouble(-1.0); - // they also support an untyped get (also meets Supplier interface) - NetworkTableValue val = sub.get(); - NetworkTableValue val = entry.get(); - // they also support readQueue - NetworkTableValue[] updates = sub.readQueue(); - NetworkTableValue[] updates = entry.readQueue(); - // publishers and entries have typed set operations; these return false if the - // topic already exists with a mismatched type - boolean success = pub.setDefaultDouble(1.0); - boolean success = pub.setBoolean(true); - // they also implement a generic set and Consumer interface - boolean success = entry.set(NetworkTableValue.makeDouble(...)); - boolean success = entry.accept(NetworkTableValue.makeDouble(...)); - } - public void unpublish() { - // you can stop publishing an entry while keeping the subscriber alive - entry.unpublish(); - } - // often not required in robot code, unless this class doesn't exist for - // the lifetime of the entire robot program, in which case close() needs to be - // called to stop subscribing/publishing - public void close() { - pub.close(); - sub.close(); - entry.close(); - } + :sync: Java + + ```java + public class Example { + // the entry is an instance variable so its lifetime matches that of the class + final GenericPublisher pub; + final GenericSubscriber sub; + final GenericEntry entry; + public Example(Topic topic) { + // start subscribing; the return value must be retained. + // when publishing, a type string must be provided + pub = topic.genericPublish("double"); + // subscribing can optionally include a type string + // unlike type-specific subscribers, no default value is provided + sub = topic.genericSubscribe(); + sub = topic.genericSubscribe("double"); + // when getting an entry, the type string is also optional; if not provided + // the publisher data type will be determined by the first publisher-creating call + entry = topic.getGenericEntry(); + entry = topic.getGenericEntry("double"); + // publish and subscribe options may be specified using PubSubOption + pub = topic.genericPublish("double", + PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); + sub = + topic.genericSubscribe(PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); + entry = + topic.getGenericEntry(PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); + // genericPublishEx provides the option of setting initial properties. + pub = topic.genericPublishEx("double", "{\"retained\": true}", + PubSubOption.keepDuplicates(true), PubSubOption.pollStorage(10)); + } + public void periodic() { + // generic subscribers and entries have typed get operations; a default must be provided + double val = sub.getDouble(-1.0); + double val = entry.getDouble(-1.0); + // they also support an untyped get (also meets Supplier interface) + NetworkTableValue val = sub.get(); + NetworkTableValue val = entry.get(); + // they also support readQueue + NetworkTableValue[] updates = sub.readQueue(); + NetworkTableValue[] updates = entry.readQueue(); + // publishers and entries have typed set operations; these return false if the + // topic already exists with a mismatched type + boolean success = pub.setDefaultDouble(1.0); + boolean success = pub.setBoolean(true); + // they also implement a generic set and Consumer interface + boolean success = entry.set(NetworkTableValue.makeDouble(...)); + boolean success = entry.accept(NetworkTableValue.makeDouble(...)); + } + public void unpublish() { + // you can stop publishing an entry while keeping the subscriber alive + entry.unpublish(); } - ``` + // often not required in robot code, unless this class doesn't exist for + // the lifetime of the entire robot program, in which case close() needs to be + // called to stop subscribing/publishing + public void close() { + pub.close(); + sub.close(); + entry.close(); + } + } + ``` .. tab-item:: C++ - :sync: C++ - - ```c++ - class Example { - // the entry is an instance variable so its lifetime matches that of the class - // subscribing/publishing is automatically stopped when dblEntry is destroyed by - // the class destructor - nt::GenericPublisher pub; - nt::GenericSubscriber sub; - nt::GenericEntry entry; - public: - Example(nt::Topic topic) { - // start subscribing; the return value must be retained. - // when publishing, a type string must be provided - pub = topic.GenericPublish("double"); - // subscribing can optionally include a type string - // unlike type-specific subscribers, no default value is provided - sub = topic.GenericSubscribe(); - sub = topic.GenericSubscribe("double"); - // when getting an entry, the type string is also optional; if not provided - // the publisher data type will be determined by the first publisher-creating call - entry = topic.GetEntry(); - entry = topic.GetEntry("double"); - // publish and subscribe options may be specified using PubSubOptions - pub = topic.GenericPublish("double", - {.pollStorage = 10, .keepDuplicates = true}); - sub = topic.GenericSubscribe( - {.pollStorage = 10, .keepDuplicates = true}); - entry = topic.GetGenericEntry( - {.pollStorage = 10, .keepDuplicates = true}); - // genericPublishEx provides the option of setting initial properties. - pub = topic.genericPublishEx("double", {{"myprop", 5}}, - {.pollStorage = 10, .keepDuplicates = true}); - } - void Periodic() { - // generic subscribers and entries have typed get operations; a default must be provided - double val = sub.GetDouble(-1.0); - double val = entry.GetDouble(-1.0); - // they also support an untyped get - nt::NetworkTableValue val = sub.Get(); - nt::NetworkTableValue val = entry.Get(); - // they also support readQueue - std::vector updates = sub.ReadQueue(); - std::vector updates = entry.ReadQueue(); - // publishers and entries have typed set operations; these return false if the - // topic already exists with a mismatched type - bool success = pub.SetDefaultDouble(1.0); - bool success = pub.SetBoolean(true); - // they also implement a generic set and Consumer interface - bool success = entry.Set(nt::NetworkTableValue::MakeDouble(...)); - } - void Unpublish() { - // you can stop publishing an entry while keeping the subscriber alive - entry.Unpublish(); - } - }; - ``` + :sync: C++ + + ```c++ + class Example { + // the entry is an instance variable so its lifetime matches that of the class + // subscribing/publishing is automatically stopped when dblEntry is destroyed by + // the class destructor + nt::GenericPublisher pub; + nt::GenericSubscriber sub; + nt::GenericEntry entry; + public: + Example(nt::Topic topic) { + // start subscribing; the return value must be retained. + // when publishing, a type string must be provided + pub = topic.GenericPublish("double"); + // subscribing can optionally include a type string + // unlike type-specific subscribers, no default value is provided + sub = topic.GenericSubscribe(); + sub = topic.GenericSubscribe("double"); + // when getting an entry, the type string is also optional; if not provided + // the publisher data type will be determined by the first publisher-creating call + entry = topic.GetEntry(); + entry = topic.GetEntry("double"); + // publish and subscribe options may be specified using PubSubOptions + pub = topic.GenericPublish("double", + {.pollStorage = 10, .keepDuplicates = true}); + sub = topic.GenericSubscribe( + {.pollStorage = 10, .keepDuplicates = true}); + entry = topic.GetGenericEntry( + {.pollStorage = 10, .keepDuplicates = true}); + // genericPublishEx provides the option of setting initial properties. + pub = topic.genericPublishEx("double", {{"myprop", 5}}, + {.pollStorage = 10, .keepDuplicates = true}); + } + void Periodic() { + // generic subscribers and entries have typed get operations; a default must be provided + double val = sub.GetDouble(-1.0); + double val = entry.GetDouble(-1.0); + // they also support an untyped get + nt::NetworkTableValue val = sub.Get(); + nt::NetworkTableValue val = entry.Get(); + // they also support readQueue + std::vector updates = sub.ReadQueue(); + std::vector updates = entry.ReadQueue(); + // publishers and entries have typed set operations; these return false if the + // topic already exists with a mismatched type + bool success = pub.SetDefaultDouble(1.0); + bool success = pub.SetBoolean(true); + // they also implement a generic set and Consumer interface + bool success = entry.Set(nt::NetworkTableValue::MakeDouble(...)); + } + void Unpublish() { + // you can stop publishing an entry while keeping the subscriber alive + entry.Unpublish(); + } + }; + ``` .. tab-item:: Python - :sync: Python - - - ```python - class Example: - def __init__(self, topic: ntcore.Topic): - # start subscribing; the return value must be retained. - # when publishing, a type string must be provided - self.pub = topic.genericPublish("double") - # subscribing can optionally include a type string - # unlike type-specific subscribers, no default value is provided - self.sub = topic.genericSubscribe() - self.sub = topic.genericSubscribe("double") - # when getting an entry, the type string is also optional; if not provided - # the publisher data type will be determined by the first publisher-creating call - self.entry = topic.getGenericEntry() - self.entry = topic.getGenericEntry("double") - # publish and subscribe options may be specified using PubSubOption - self.pub = topic.genericPublish( - "double", ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10) - ) - self.sub = topic.genericSubscribe( - ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10) - ) - self.entry = topic.getGenericEntry( - ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10) - ) - # genericPublishEx provides the option of setting initial properties. - self.pub = topic.genericPublishEx( - "double", - '{"retained": true}', - ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10), - ) - def periodic(self): - # generic subscribers and entries have typed get operations; a default must be provided - val = self.sub.getDouble(-1.0) - val = self.entry.getDouble(-1.0) - # they also support an untyped get (also meets Supplier interface) - val = self.sub.get() - val = self.entry.get() - # they also support readQueue - updates = self.sub.readQueue() - updates = self.entry.readQueue() - # publishers and entries have typed set operations; these return false if the - # topic already exists with a mismatched type - success = self.pub.setDefaultDouble(1.0) - success = self.pub.setBoolean(True) - # they also implement a generic set - success = self.entry.set(ntcore.Value.makeDouble(...)) - def unpublish(self): - # you can stop publishing an entry while keeping the subscriber alive - self.entry.unpublish() - # often not required in robot code, unless this class doesn't exist for - # the lifetime of the entire robot program, in which case close() needs to be - # called to stop subscribing/publishing - def close(self): - self.pub.close() - self.sub.close() - self.entry.close() - ``` + :sync: Python + + ```python + class Example: + def __init__(self, topic: ntcore.Topic): + # start subscribing; the return value must be retained. + # when publishing, a type string must be provided + self.pub = topic.genericPublish("double") + # subscribing can optionally include a type string + # unlike type-specific subscribers, no default value is provided + self.sub = topic.genericSubscribe() + self.sub = topic.genericSubscribe("double") + # when getting an entry, the type string is also optional; if not provided + # the publisher data type will be determined by the first publisher-creating call + self.entry = topic.getGenericEntry() + self.entry = topic.getGenericEntry("double") + # publish and subscribe options may be specified using PubSubOption + self.pub = topic.genericPublish( + "double", ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10) + ) + self.sub = topic.genericSubscribe( + ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10) + ) + self.entry = topic.getGenericEntry( + ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10) + ) + # genericPublishEx provides the option of setting initial properties. + self.pub = topic.genericPublishEx( + "double", + '{"retained": true}', + ntcore.PubSubOptions(keepDuplicates=True, pollStorage=10), + ) + def periodic(self): + # generic subscribers and entries have typed get operations; a default must be provided + val = self.sub.getDouble(-1.0) + val = self.entry.getDouble(-1.0) + # they also support an untyped get (also meets Supplier interface) + val = self.sub.get() + val = self.entry.get() + # they also support readQueue + updates = self.sub.readQueue() + updates = self.entry.readQueue() + # publishers and entries have typed set operations; these return false if the + # topic already exists with a mismatched type + success = self.pub.setDefaultDouble(1.0) + success = self.pub.setBoolean(True) + # they also implement a generic set + success = self.entry.set(ntcore.Value.makeDouble(...)) + def unpublish(self): + # you can stop publishing an entry while keeping the subscriber alive + self.entry.unpublish() + # often not required in robot code, unless this class doesn't exist for + # the lifetime of the entire robot program, in which case close() needs to be + # called to stop subscribing/publishing + def close(self): + self.pub.close() + self.sub.close() + self.entry.close() + ``` ## Subscribing to Multiple Topics @@ -812,181 +810,180 @@ While in most cases it's only necessary to subscribe to individual topics, it is .. tab-set:: .. tab-item:: Java - :sync: Java - - ```java - public class Example { - // the subscriber is an instance variable so its lifetime matches that of the class - final MultiSubscriber multiSub; - final NetworkTableListenerPoller poller; - public Example(NetworkTableInstance inst) { - // start subscribing; the return value must be retained. - // provide an array of topic name prefixes - multiSub = new MultiSubscriber(inst, new String[] {"/table1/", "/table2/"}); - // subscribe options may be specified using PubSubOption - multiSub = new MultiSubscriber(inst, new String[] {"/table1/", "/table2/"}, - PubSubOption.keepDuplicates(true)); - // to get value updates from a MultiSubscriber, it's necessary to create a listener - // (see the listener documentation for more details) - poller = new NetworkTableListenerPoller(inst); - poller.addListener(multiSub, EnumSet.of(NetworkTableEvent.Kind.kValueAll)); - } - public void periodic() { - // read value events - NetworkTableEvent[] events = poller.readQueue(); - for (NetworkTableEvent event : events) { - NetworkTableValue value = event.valueData.value; - } - } - // often not required in robot code, unless this class doesn't exist for - // the lifetime of the entire robot program, in which case close() needs to be - // called to stop subscribing - public void close() { - // close listener - poller.close(); - // stop subscribing - multiSub.close(); + :sync: Java + + ```java + public class Example { + // the subscriber is an instance variable so its lifetime matches that of the class + final MultiSubscriber multiSub; + final NetworkTableListenerPoller poller; + public Example(NetworkTableInstance inst) { + // start subscribing; the return value must be retained. + // provide an array of topic name prefixes + multiSub = new MultiSubscriber(inst, new String[] {"/table1/", "/table2/"}); + // subscribe options may be specified using PubSubOption + multiSub = new MultiSubscriber(inst, new String[] {"/table1/", "/table2/"}, + PubSubOption.keepDuplicates(true)); + // to get value updates from a MultiSubscriber, it's necessary to create a listener + // (see the listener documentation for more details) + poller = new NetworkTableListenerPoller(inst); + poller.addListener(multiSub, EnumSet.of(NetworkTableEvent.Kind.kValueAll)); + } + public void periodic() { + // read value events + NetworkTableEvent[] events = poller.readQueue(); + for (NetworkTableEvent event : events) { + NetworkTableValue value = event.valueData.value; } } - ``` + // often not required in robot code, unless this class doesn't exist for + // the lifetime of the entire robot program, in which case close() needs to be + // called to stop subscribing + public void close() { + // close listener + poller.close(); + // stop subscribing + multiSub.close(); + } + } + ``` .. tab-item:: C++ - :sync: C++ - - ```c++ - class Example { - // the subscriber is an instance variable so its lifetime matches that of the class - // subscribing is automatically stopped when multiSub is destroyed by the class destructor - nt::MultiSubscriber multiSub; - nt::NetworkTableListenerPoller poller; - public: - explicit Example(nt::NetworkTableInstance inst) { - // start subscribing; the return value must be retained. - // provide an array of topic name prefixes - multiSub = nt::MultiSubscriber{inst, {{"/table1/", "/table2/"}}}; - // subscribe options may be specified using PubSubOption - multiSub = nt::MultiSubscriber{inst, {{"/table1/", "/table2/"}}, - {.keepDuplicates = true}}; - // to get value updates from a MultiSubscriber, it's necessary to create a listener - // (see the listener documentation for more details) - poller = nt::NetworkTableListenerPoller{inst}; - poller.AddListener(multiSub, nt::EventFlags::kValueAll); - } - void Periodic() { - // read value events - std::vector events = poller.ReadQueue(); - for (auto&& event : events) { - nt::NetworkTableValue value = event.GetValueEventData()->value; - } + :sync: C++ + + ```c++ + class Example { + // the subscriber is an instance variable so its lifetime matches that of the class + // subscribing is automatically stopped when multiSub is destroyed by the class destructor + nt::MultiSubscriber multiSub; + nt::NetworkTableListenerPoller poller; + public: + explicit Example(nt::NetworkTableInstance inst) { + // start subscribing; the return value must be retained. + // provide an array of topic name prefixes + multiSub = nt::MultiSubscriber{inst, {{"/table1/", "/table2/"}}}; + // subscribe options may be specified using PubSubOption + multiSub = nt::MultiSubscriber{inst, {{"/table1/", "/table2/"}}, + {.keepDuplicates = true}}; + // to get value updates from a MultiSubscriber, it's necessary to create a listener + // (see the listener documentation for more details) + poller = nt::NetworkTableListenerPoller{inst}; + poller.AddListener(multiSub, nt::EventFlags::kValueAll); + } + void Periodic() { + // read value events + std::vector events = poller.ReadQueue(); + for (auto&& event : events) { + nt::NetworkTableValue value = event.GetValueEventData()->value; } - }; - ``` + } + }; + ``` .. tab-item:: C++ (Handle-based) - :sync: C++ (Handle-based) - - ```c++ - class Example { - // the subscriber is an instance variable, but since it's a handle, it's - // not automatically released, so we need a destructor - NT_MultiSubscriber multiSub; - NT_ListenerPoller poller; - public: - explicit Example(NT_Inst inst) { - // start subscribing; the return value must be retained. - // provide an array of topic name prefixes - multiSub = nt::SubscribeMultiple(inst, {{"/table1/", "/table2/"}}); - // subscribe options may be specified using PubSubOption - multiSub = nt::SubscribeMultiple(inst, {{"/table1/", "/table2/"}}, - {.keepDuplicates = true}); - // to get value updates from a MultiSubscriber, it's necessary to create a listener - // (see the listener documentation for more details) - poller = nt::CreateListenerPoller(inst); - nt::AddPolledListener(poller, multiSub, nt::EventFlags::kValueAll); - } - void Periodic() { - // read value events - std::vector events = nt::ReadListenerQueue(poller); - for (auto&& event : events) { - nt::NetworkTableValue value = event.GetValueEventData()->value; - } - } - ~Example() { - // close listener - nt::DestroyListenerPoller(poller); - // stop subscribing - nt::UnsubscribeMultiple(multiSub); + :sync: C++ (Handle-based) + + ```c++ + class Example { + // the subscriber is an instance variable, but since it's a handle, it's + // not automatically released, so we need a destructor + NT_MultiSubscriber multiSub; + NT_ListenerPoller poller; + public: + explicit Example(NT_Inst inst) { + // start subscribing; the return value must be retained. + // provide an array of topic name prefixes + multiSub = nt::SubscribeMultiple(inst, {{"/table1/", "/table2/"}}); + // subscribe options may be specified using PubSubOption + multiSub = nt::SubscribeMultiple(inst, {{"/table1/", "/table2/"}}, + {.keepDuplicates = true}); + // to get value updates from a MultiSubscriber, it's necessary to create a listener + // (see the listener documentation for more details) + poller = nt::CreateListenerPoller(inst); + nt::AddPolledListener(poller, multiSub, nt::EventFlags::kValueAll); + } + void Periodic() { + // read value events + std::vector events = nt::ReadListenerQueue(poller); + for (auto&& event : events) { + nt::NetworkTableValue value = event.GetValueEventData()->value; } - ``` + } + ~Example() { + // close listener + nt::DestroyListenerPoller(poller); + // stop subscribing + nt::UnsubscribeMultiple(multiSub); + } + ``` .. tab-item:: C - :sync: C - - ```c - // This code assumes that a NT_Inst inst variable already exists - // start subscribing - // provide an array of topic name prefixes - struct NT_String prefixes[2]; - prefixes[0].str = "/table1/"; - prefixes[0].len = 8; - prefixes[1].str = "/table2/"; - prefixes[1].len = 8; - NT_MultiSubscriber multiSub = NT_SubscribeMultiple(inst, prefixes, 2, NULL, 0); - // subscribe options may be specified using NT_PubSubOptions - struct NT_PubSubOptions options; - memset(&options, 0, sizeof(options)); - options.structSize = sizeof(options); - options.keepDuplicates = 1; // true - NT_MultiSubscriber multiSub = NT_SubscribeMultiple(inst, prefixes, 2, &options); - // to get value updates from a MultiSubscriber, it's necessary to create a listener - // (see the listener documentation for more details) - NT_ListenerPoller poller = NT_CreateListenerPoller(inst); - NT_AddPolledListener(poller, multiSub, NT_EVENT_VALUE_ALL); - // read value events - size_t eventsLen; - struct NT_Event* events = NT_ReadListenerQueue(poller, &eventsLen); - for (size_t i = 0; i < eventsLen; i++) { - NT_Value* value = &events[i].data.valueData.value; - } - NT_DisposeEventArray(events, eventsLen); - // close listener - NT_DestroyListenerPoller(poller); - // stop subscribing - NT_UnsubscribeMultiple(multiSub); - ``` + :sync: C + + ```c + // This code assumes that a NT_Inst inst variable already exists + // start subscribing + // provide an array of topic name prefixes + struct NT_String prefixes[2]; + prefixes[0].str = "/table1/"; + prefixes[0].len = 8; + prefixes[1].str = "/table2/"; + prefixes[1].len = 8; + NT_MultiSubscriber multiSub = NT_SubscribeMultiple(inst, prefixes, 2, NULL, 0); + // subscribe options may be specified using NT_PubSubOptions + struct NT_PubSubOptions options; + memset(&options, 0, sizeof(options)); + options.structSize = sizeof(options); + options.keepDuplicates = 1; // true + NT_MultiSubscriber multiSub = NT_SubscribeMultiple(inst, prefixes, 2, &options); + // to get value updates from a MultiSubscriber, it's necessary to create a listener + // (see the listener documentation for more details) + NT_ListenerPoller poller = NT_CreateListenerPoller(inst); + NT_AddPolledListener(poller, multiSub, NT_EVENT_VALUE_ALL); + // read value events + size_t eventsLen; + struct NT_Event* events = NT_ReadListenerQueue(poller, &eventsLen); + for (size_t i = 0; i < eventsLen; i++) { + NT_Value* value = &events[i].data.valueData.value; + } + NT_DisposeEventArray(events, eventsLen); + // close listener + NT_DestroyListenerPoller(poller); + // stop subscribing + NT_UnsubscribeMultiple(multiSub); + ``` .. tab-item:: Python - :sync: Python - - - ```python - class Example: - def __init__(self, inst: ntcore.NetworkTableInstance): - # start subscribing; the return value must be retained. - # provide an array of topic name prefixes - self.multiSub = ntcore.MultiSubscriber(inst, ["/table1/", "/table2/"]) - # subscribe options may be specified using PubSubOption - self.multiSub = ntcore.MultiSubscriber( - inst, ["/table1/", "/table2/"], ntcore.PubSubOptions(keepDuplicates=True) - ) - # to get value updates from a MultiSubscriber, it's necessary to create a listener - # (see the listener documentation for more details) - self.poller = ntcore.NetworkTableListenerPoller(inst) - self.poller.addListener(self.multiSub, ntcore.EventFlags.kValueAlls) - def periodic(self): - # read value events - events = self.poller.readQueue() - for event in events: - value: ntcore.Value = event.data.value - # often not required in robot code, unless this class doesn't exist for - # the lifetime of the entire robot program, in which case close() needs to be - # called to stop subscribing - def close(self): - # close listener - self.poller.close() - # stop subscribing - self.multiSub.close() - ``` + :sync: Python + + ```python + class Example: + def __init__(self, inst: ntcore.NetworkTableInstance): + # start subscribing; the return value must be retained. + # provide an array of topic name prefixes + self.multiSub = ntcore.MultiSubscriber(inst, ["/table1/", "/table2/"]) + # subscribe options may be specified using PubSubOption + self.multiSub = ntcore.MultiSubscriber( + inst, ["/table1/", "/table2/"], ntcore.PubSubOptions(keepDuplicates=True) + ) + # to get value updates from a MultiSubscriber, it's necessary to create a listener + # (see the listener documentation for more details) + self.poller = ntcore.NetworkTableListenerPoller(inst) + self.poller.addListener(self.multiSub, ntcore.EventFlags.kValueAlls) + def periodic(self): + # read value events + events = self.poller.readQueue() + for event in events: + value: ntcore.Value = event.data.value + # often not required in robot code, unless this class doesn't exist for + # the lifetime of the entire robot program, in which case close() needs to be + # called to stop subscribing + def close(self): + # close listener + self.poller.close() + # stop subscribing + self.multiSub.close() + ``` ## Publish/Subscribe Options diff --git a/source/docs/software/networktables/tables-and-topics.rst b/source/docs/software/networktables/tables-and-topics.rst index a0c9cfbbce..a079376708 100644 --- a/source/docs/software/networktables/tables-and-topics.rst +++ b/source/docs/software/networktables/tables-and-topics.rst @@ -13,7 +13,7 @@ Having a Topic object or handle does not mean the topic exists or is of the corr .. tab-set:: .. tab-item:: Java - :sync: Java + :sync: Java ```java NetworkTableInstance inst = NetworkTableInstance.getDefault(); @@ -31,7 +31,7 @@ Having a Topic object or handle does not mean the topic exists or is of the corr ``` .. tab-item:: C++ - :sync: C++ + :sync: C++ ```c++ nt::NetworkTableInstance inst = nt::NetworkTableInstance::GetDefault(); @@ -49,7 +49,7 @@ Having a Topic object or handle does not mean the topic exists or is of the corr ``` .. tab-item:: C++ (Handle-based) - :sync: C++ (Handle-based) + :sync: C++ (Handle-based) ```c++ NT_Instance inst = nt::GetDefaultInstance(); @@ -67,7 +67,7 @@ Having a Topic object or handle does not mean the topic exists or is of the corr ``` .. tab-item:: Python - :sync: Python + :sync: Python ```python diff --git a/source/docs/software/pathplanning/trajectory-tutorial/trajectory-tutorial-overview.rst b/source/docs/software/pathplanning/trajectory-tutorial/trajectory-tutorial-overview.rst index 1c917fa3f4..0cc9468537 100644 --- a/source/docs/software/pathplanning/trajectory-tutorial/trajectory-tutorial-overview.rst +++ b/source/docs/software/pathplanning/trajectory-tutorial/trajectory-tutorial-overview.rst @@ -33,11 +33,11 @@ To follow this tutorial, you will need ready access to the following materials: 1. A differential-drive robot (such as the [AndyMark AM14U5](https://www.andymark.com/products/am14u5-6-wheel-drop-center-robot-drive-base-first-kit-of-parts-chassis)), equipped with: - * Quadrature encoders for measuring the wheel rotation of each side of the drive. - * A gyroscope for measuring robot heading. +* Quadrature encoders for measuring the wheel rotation of each side of the drive. +* A gyroscope for measuring robot heading. 2. A driver-station computer configured with: - * :ref:`FRC Driver Station `. - * :ref:`WPILib `. - * :ref:`The System Identification Toolsuite `. +* :ref:`FRC Driver Station `. +* :ref:`WPILib `. +* :ref:`The System Identification Toolsuite `. diff --git a/source/docs/software/telemetry/3rd-party-libraries.rst b/source/docs/software/telemetry/3rd-party-libraries.rst index 688ec55221..d627c45c3d 100644 --- a/source/docs/software/telemetry/3rd-party-libraries.rst +++ b/source/docs/software/telemetry/3rd-party-libraries.rst @@ -4,6 +4,6 @@ Several third-party logging utilities and frameworks exist that provide functionality beyond what is currently provided by WPILib: - * [AdvantageKit](https://github.com/Mechanical-Advantage/AdvantageKit) (Java only): "Log everything"-based logging framework with hooks for replaying logged data in :ref:`simulation `. - * [DSLOG](https://github.com/orangelight/DSLOG-Reader/tree/master): An alternate driver station log viewer. - * [DogLog](https://doglog.dev) (Java only): A simple logging library for Java. +* [AdvantageKit](https://github.com/Mechanical-Advantage/AdvantageKit) (Java only): "Log everything"-based logging framework with hooks for replaying logged data in :ref:`simulation `. +* [DSLOG](https://github.com/orangelight/DSLOG-Reader/tree/master): An alternate driver station log viewer. +* [DogLog](https://doglog.dev) (Java only): A simple logging library for Java. diff --git a/source/docs/software/what-is-wpilib.rst b/source/docs/software/what-is-wpilib.rst index 43a0a69b64..63dcd3ab9e 100644 --- a/source/docs/software/what-is-wpilib.rst +++ b/source/docs/software/what-is-wpilib.rst @@ -26,16 +26,16 @@ WPILib is an open-source library - the C++ and Java source code is in the [allwp The Java and C++ source code can be found in the WPILibJ and WPILibC source directories: - - [Java source code](https://github.com/wpilibsuite/allwpilib/tree/main/wpilibj/src/main/java/edu/wpi/first/wpilibj) +- [Java source code](https://github.com/wpilibsuite/allwpilib/tree/main/wpilibj/src/main/java/edu/wpi/first/wpilibj) - - [C++ source code](https://github.com/wpilibsuite/allwpilib/tree/main/wpilibc/src/main/native/cpp) +- [C++ source code](https://github.com/wpilibsuite/allwpilib/tree/main/wpilibc/src/main/native/cpp) - - [Python source code](https://github.com/robotpy/mostrobotpy) +- [Python source code](https://github.com/robotpy/mostrobotpy) While users are strongly encouraged to read the source code to resolve detailed questions about library functionality, more-concise documentation can be found on the official documentation pages for WPILibJ and WPILibC and RobotPy: - - [Java documentation](https://github.wpilib.org/allwpilib/docs/release/java/) +- [Java documentation](https://github.wpilib.org/allwpilib/docs/release/java/) - - [C++ documentation](https://github.wpilib.org/allwpilib/docs/release/cpp/) +- [C++ documentation](https://github.wpilib.org/allwpilib/docs/release/cpp/) - - [Python documentation](https://robotpy.readthedocs.io/projects/robotpy/en/stable/) +- [Python documentation](https://robotpy.readthedocs.io/projects/robotpy/en/stable/) diff --git a/source/docs/software/wpilib-tools/robot-simulation/drivesim-tutorial/diffdrive-sim-overview.rst b/source/docs/software/wpilib-tools/robot-simulation/drivesim-tutorial/diffdrive-sim-overview.rst index 6dd8880e82..e3a1651b5e 100644 --- a/source/docs/software/wpilib-tools/robot-simulation/drivesim-tutorial/diffdrive-sim-overview.rst +++ b/source/docs/software/wpilib-tools/robot-simulation/drivesim-tutorial/diffdrive-sim-overview.rst @@ -4,11 +4,11 @@ The goal of this tutorial is to provide guidance on implementing simulation capabilities for a differential-drivetrain robot. By the end of this tutorial, you should be able to: - 1. Understand the basic underlying concepts behind the WPILib simulation framework. - 2. Create a drivetrain simulation model using your robot's physical parameters. - 3. Use the simulation model to predict how your real robot will move given specific voltage inputs. - 4. Tune feedback constants and squash common bugs (e.g. motor inversion) before having access to physical hardware. - 5. Use the Simulation GUI to visualize robot movement on a virtual field. +1. Understand the basic underlying concepts behind the WPILib simulation framework. +2. Create a drivetrain simulation model using your robot's physical parameters. +3. Use the simulation model to predict how your real robot will move given specific voltage inputs. +4. Tune feedback constants and squash common bugs (e.g. motor inversion) before having access to physical hardware. +5. Use the Simulation GUI to visualize robot movement on a virtual field. .. image:: images/simgui.png diff --git a/source/docs/software/wpilib-tools/robot-simulation/drivesim-tutorial/drivetrain-model.rst b/source/docs/software/wpilib-tools/robot-simulation/drivesim-tutorial/drivetrain-model.rst index 6e38199b5c..2bb38048e8 100644 --- a/source/docs/software/wpilib-tools/robot-simulation/drivesim-tutorial/drivetrain-model.rst +++ b/source/docs/software/wpilib-tools/robot-simulation/drivesim-tutorial/drivetrain-model.rst @@ -6,13 +6,13 @@ In order to accurately determine how your physical drivetrain will respond to gi One way to creating a ``DifferentialDrivetrainSim`` instance is by using physical measurements of the drivetrain and robot -- either obtained through :term:`CAD` software or real-world measurements (the latter will usually yield better results as it will more closely match reality). This constructor takes the following parameters: - - The type and number of motors on one side of the drivetrain. - - The gear ratio between the motors and the wheels as output :term:`torque` over input :term:`torque` (this number is usually greater than 1 for drivetrains). - - The moment of inertia of the drivetrain (this can be obtained from a :term:`CAD` model of your drivetrain. Usually, this is between 3 and 8 :math:`kg m^2`). - - The mass of the drivetrain (it is recommended to use the mass of the entire robot itself, as it will more accurately model the acceleration characteristics of your robot for trajectory tracking). - - The radius of the drive wheels. - - The track width (distance between left and right wheels). - - Standard deviations of measurement noise: this represents how much measurement noise you expect from your real sensors. The measurement noise is an array with 7 elements, with each element representing the standard deviation of measurement noise in x, y, heading, left velocity, right velocity, left position, and right position respectively. This option can be omitted in C++ or set to ``null`` in Java if measurement noise is not desirable. +- The type and number of motors on one side of the drivetrain. +- The gear ratio between the motors and the wheels as output :term:`torque` over input :term:`torque` (this number is usually greater than 1 for drivetrains). +- The moment of inertia of the drivetrain (this can be obtained from a :term:`CAD` model of your drivetrain. Usually, this is between 3 and 8 :math:`kg m^2`). +- The mass of the drivetrain (it is recommended to use the mass of the entire robot itself, as it will more accurately model the acceleration characteristics of your robot for trajectory tracking). +- The radius of the drive wheels. +- The track width (distance between left and right wheels). +- Standard deviations of measurement noise: this represents how much measurement noise you expect from your real sensors. The measurement noise is an array with 7 elements, with each element representing the standard deviation of measurement noise in x, y, heading, left velocity, right velocity, left position, and right position respectively. This option can be omitted in C++ or set to ``null`` in Java if measurement noise is not desirable. You can calculate the measurement noise of your sensors by taking multiple data points of the state you are trying to measure and calculating the standard deviation using a tool like Python. For example, to calculate the standard deviation in your encoders' velocity estimate, you can move your robot at a constant velocity, take multiple measurements, and calculate their standard deviation from the known mean. If this process is too tedious, the values used in the example below should be a good representation of average noise from encoders. @@ -65,12 +65,12 @@ You can also use the gains produced by :ref:`System Identification `. You can also launch simulation without a GUI by unchecking :guilabel:`Sim GUI` in which case your console output in Visual Studio Code should look like the below. + The :guilabel:`Sim GUI` option will be selected by default. This will launch the :doc:`Simulation GUI `. You can also launch simulation without a GUI by unchecking :guilabel:`Sim GUI` in which case your console output in Visual Studio Code should look like the below. ```console ********** Robot program starting ********** diff --git a/source/docs/software/wpilib-tools/robot-simulation/physics-sim.rst b/source/docs/software/wpilib-tools/robot-simulation/physics-sim.rst index 0a8e646abe..0d6313e4b3 100644 --- a/source/docs/software/wpilib-tools/robot-simulation/physics-sim.rst +++ b/source/docs/software/wpilib-tools/robot-simulation/physics-sim.rst @@ -4,13 +4,13 @@ Because :ref:`state-space notation `, usually voltages from motors set from a PID loop - - Simulated encoder (or other sensor) readings are set for user code to use in the next timestep + - The simulation's :term:`state` is updated using :term:`inputs `, usually voltages from motors set from a PID loop + - Simulated encoder (or other sensor) readings are set for user code to use in the next timestep ## WPILib's Simulation Classes diff --git a/source/docs/software/wpilib-tools/robotbuilder/writing-code/robotbuilder-writing-subsystem-code.rst b/source/docs/software/wpilib-tools/robotbuilder/writing-code/robotbuilder-writing-subsystem-code.rst index fe0cd91482..69137e4fd8 100644 --- a/source/docs/software/wpilib-tools/robotbuilder/writing-code/robotbuilder-writing-subsystem-code.rst +++ b/source/docs/software/wpilib-tools/robotbuilder/writing-code/robotbuilder-writing-subsystem-code.rst @@ -15,11 +15,11 @@ The claw at the end of a robot arm is a subsystem operated by a single VictorSPX .. tab-item:: Java :sync: java - .. literalinclude:: ../resources/RBGearsBot2025Java/src/main/java/frc/robot/subsystems/Claw.java - :language: Java - :lines: 11- - :emphasize-lines: 63-77 - :lineno-match: + .. literalinclude:: ../resources/RBGearsBot2025Java/src/main/java/frc/robot/subsystems/Claw.java + :language: Java + :lines: 11- + :emphasize-lines: 63-77 + :lineno-match: .. tab-item:: C++ :sync: c++ diff --git a/source/docs/yearly-overview/known-issues.rst b/source/docs/yearly-overview/known-issues.rst index 21c29e02a1..bf0fd284b4 100644 --- a/source/docs/yearly-overview/known-issues.rst +++ b/source/docs/yearly-overview/known-issues.rst @@ -66,7 +66,7 @@ The proper value to look is as MemAvailable, rather then MemFree (which is what **Workaround:** We are currently investigating the root cause, but FIRST volunteers have been made aware and the recommendation is to reboot the roboRIO when this occurs. - .. note:: Pressing the physical :guilabel:`User` button on the roboRIO for 5 seconds can also cause the robot code to not start, but a reboot will not start the robot code. If the robot code does not start after rebooting, press the :guilabel:`User` button. Ensure that nothing on the robot is in contact with the :guilabel:`User` button. +.. note:: Pressing the physical :guilabel:`User` button on the roboRIO for 5 seconds can also cause the robot code to not start, but a reboot will not start the robot code. If the robot code does not start after rebooting, press the :guilabel:`User` button. Ensure that nothing on the robot is in contact with the :guilabel:`User` button. ### Onboard I2C Causing System Lockups @@ -113,8 +113,8 @@ Delete your Gradle cache located under ``~$USER_HOME/.gradle``. Windows machines **Workaround:** There are two known workarounds: - #. Copy and paste the Chinese characters into notepad, and the English text will be shown. - #. Temporarily change the Windows language to English. +#. Copy and paste the Chinese characters into notepad, and the English text will be shown. +#. Temporarily change the Windows language to English. ### C++ Intellisense - Files Open on Launch Don't Work Properly @@ -122,12 +122,12 @@ There are two known workarounds: **Workaround:** - #. Close all files in VS Code, but leave VS Code open - #. Delete c_cpp_properties.json file in the .vscode folder, if it exists - #. Run the "Refresh C++ Intellisense" command in VS Code. - #. In the bottom right you should see something that looks like a platform (linuxathena or windowsx86-64 etc). If it’s not linuxathena click it and set it to linuxathena (release) - #. Wait ~1 min - #. Open the main cpp file (not a header file). Intellisense should now be working +#. Close all files in VS Code, but leave VS Code open +#. Delete c_cpp_properties.json file in the .vscode folder, if it exists +#. Run the "Refresh C++ Intellisense" command in VS Code. +#. In the bottom right you should see something that looks like a platform (linuxathena or windowsx86-64 etc). If it’s not linuxathena click it and set it to linuxathena (release) +#. Wait ~1 min +#. Open the main cpp file (not a header file). Intellisense should now be working ### Issues with WPILib Dashboards and Simulation on Windows N Editions diff --git a/source/docs/zero-to-robot/step-1/basic-robot-wiring.rst b/source/docs/zero-to-robot/step-1/basic-robot-wiring.rst index 06537a5787..1e8b1281ae 100644 --- a/source/docs/zero-to-robot/step-1/basic-robot-wiring.rst +++ b/source/docs/zero-to-robot/step-1/basic-robot-wiring.rst @@ -54,7 +54,6 @@ Locate the following control system components and tools - Kit Materials: - - Power Distribution Hub (:term:`PDH`) / Power Distribution Panel (:term:`PDP`) - roboRIO - Pneumatics Hub (:term:`PH`) / Pneumatics Control Module (:term:`PCM`) @@ -78,7 +77,6 @@ Locate the following control system components and tools - 1/4" or 1/2" (6-12 mm) plywood - Tools Required: - - Wago Tool or small flat-head screwdriver - Very small flat head screwdriver (eyeglass repair size) - Wire cutters, strippers, and crimpers @@ -166,17 +164,17 @@ Using the Dual Lock or hardware, fasten all components to the board. Note that i .. tab-item:: REV :sync: REV - .. image:: images/how-to-wire-a-simple-robot/circuit-breaker-REV.jpg - :alt: Show the circuit breaker wired to the PDH. + .. image:: images/how-to-wire-a-simple-robot/circuit-breaker-REV.jpg + :alt: Show the circuit breaker wired to the PDH. - Requires: 6 AWG (16 :math:`mm^2`) red wire, 1x 6 AWG (16 :math:`mm^2`) terminal lugs, 7/16" (11 mm) wrench + Requires: 6 AWG (16 :math:`mm^2`) red wire, 1x 6 AWG (16 :math:`mm^2`) terminal lugs, 7/16" (11 mm) wrench - Secure one terminal lug to the end of the 6 AWG (16 :math:`mm^2`) red wire. Using the 7/16" (11 mm) wrench, remove the nut from the "AUX" side of the 120A main breaker and place the terminal over the stud. Loosely secure the nut (you may wish to remove it shortly to cut and strip the other end of the wire). Measure out the length of wire required to reach the positive terminal of the PDH. + Secure one terminal lug to the end of the 6 AWG (16 :math:`mm^2`) red wire. Using the 7/16" (11 mm) wrench, remove the nut from the "AUX" side of the 120A main breaker and place the terminal over the stud. Loosely secure the nut (you may wish to remove it shortly to cut and strip the other end of the wire). Measure out the length of wire required to reach the positive terminal of the PDH. - 1. Cut and strip the other end of the red wire. - 2. Using the 7/16" (11 mm) wrench, secure the wire to the "AUX" side of the 120A main breaker. - 3. Lift the lever on the positive (red) input terminal of the PDH, insert the wire, then close the terminal. + 1. Cut and strip the other end of the red wire. + 2. Using the 7/16" (11 mm) wrench, secure the wire to the "AUX" side of the 120A main breaker. + 3. Lift the lever on the positive (red) input terminal of the PDH, insert the wire, then close the terminal. .. tab-item:: CTR :sync: CTR @@ -227,25 +225,25 @@ Using the Dual Lock or hardware, fasten all components to the board. Note that i .. tab-item:: REV :sync: REV - .. image:: images/how-to-wire-a-simple-robot/pdh-motor-power.jpg - :alt: Wiring power from the PDH to motor controllers. + .. image:: images/how-to-wire-a-simple-robot/pdh-motor-power.jpg + :alt: Wiring power from the PDH to motor controllers. - .. image:: images/how-to-wire-a-simple-robot/spark-power.jpg - :alt: Wiring power to a Spark Motor Controller with ring terminals. + .. image:: images/how-to-wire-a-simple-robot/spark-power.jpg + :alt: Wiring power to a Spark Motor Controller with ring terminals. - Requires: Wire Stripper - Terminal Controllers only: 10 or 12 AWG (4 - 6 :math:`mm^2`) wire , 10 or 12 AWG (4 - 6 :math:`mm^2`) fork/ring terminals, wire crimper + Requires: Wire Stripper + Terminal Controllers only: 10 or 12 AWG (4 - 6 :math:`mm^2`) wire , 10 or 12 AWG (4 - 6 :math:`mm^2`) fork/ring terminals, wire crimper - For SPARK MAX or other wire integrated motor controllers (top image): + For SPARK MAX or other wire integrated motor controllers (top image): - - Cut and strip the red and black power input wires, then insert into one of the Wago terminal pairs. + - Cut and strip the red and black power input wires, then insert into one of the Wago terminal pairs. - For terminal motor controllers (bottom image): + For terminal motor controllers (bottom image): - 1. Cut red and black wire to appropriate length to reach from one of the Wago terminal pairs to the input side of the motor controller (with a little extra for the length that will be inserted into the terminals on each end) - 2. Strip one end of each of the wires, then insert into the Wago terminals. - 3. Strip the other end of each wire, and crimp on a ring or fork terminal - 4. Attach the terminal to the motor controller input terminals (red to +, black to -) + 1. Cut red and black wire to appropriate length to reach from one of the Wago terminal pairs to the input side of the motor controller (with a little extra for the length that will be inserted into the terminals on each end) + 2. Strip one end of each of the wires, then insert into the Wago terminals. + 3. Strip the other end of each wire, and crimp on a ring or fork terminal + 4. Attach the terminal to the motor controller input terminals (red to +, black to -) .. tab-item:: CTR :sync: CTR @@ -311,19 +309,19 @@ After making the connection check to be sure that it is clean and secure: .. tab-item:: REV :sync: REV - .. image:: images/how-to-wire-a-simple-robot/roborio-power-REV.jpg - :alt: Power coming from the PDH to the roboRIO. + .. image:: images/how-to-wire-a-simple-robot/roborio-power-REV.jpg + :alt: Power coming from the PDH to the roboRIO. - .. image:: images/how-to-wire-a-simple-robot/roborio-power-pdh.jpg - :alt: Power going into the roboRIO. + .. image:: images/how-to-wire-a-simple-robot/roborio-power-pdh.jpg + :alt: Power going into the roboRIO. - Requires: 10A mini fuse, Wire stripper, very small flat screwdriver, 18 AWG (1 :math:`mm^2`) Red and Black + Requires: 10A mini fuse, Wire stripper, very small flat screwdriver, 18 AWG (1 :math:`mm^2`) Red and Black - 1. Insert the 10A fuse into the PDH in one of the non-switchable fused channels (20-22). - 2. Strip ~5/16" (~8 mm) on both the red and black 18 AWG (1 :math:`mm^2`) wire and connect to the corresponding terminals on the PDH channel where the fuse was installed - 3. Measure the required length to reach the power input on the roboRIO. Take care to leave enough length to route the wires around any other components such as the battery and to allow for any strain relief or cable management. - 4. Cut and strip the wire. - 5. Using a very small flat screwdriver connect the wires to the power input connector of the roboRIO (red to V, black to C). Also make sure that the power connector is screwed down securely to the roboRIO. + 1. Insert the 10A fuse into the PDH in one of the non-switchable fused channels (20-22). + 2. Strip ~5/16" (~8 mm) on both the red and black 18 AWG (1 :math:`mm^2`) wire and connect to the corresponding terminals on the PDH channel where the fuse was installed + 3. Measure the required length to reach the power input on the roboRIO. Take care to leave enough length to route the wires around any other components such as the battery and to allow for any strain relief or cable management. + 4. Cut and strip the wire. + 5. Using a very small flat screwdriver connect the wires to the power input connector of the roboRIO (red to V, black to C). Also make sure that the power connector is screwed down securely to the roboRIO. .. tab-item:: CTR :sync: CTR @@ -481,22 +479,22 @@ Requires: an Ethernet cable .. tab-item:: REV :sync: REV - .. image:: images/how-to-wire-a-simple-robot/ph-pdh-power.jpg - :alt: PH CAN connection. + .. image:: images/how-to-wire-a-simple-robot/ph-pdh-power.jpg + :alt: PH CAN connection. - .. image:: images/how-to-wire-a-simple-robot/ph.jpg - :alt: PH CAN connection. + .. image:: images/how-to-wire-a-simple-robot/ph.jpg + :alt: PH CAN connection. - Requires: Wire stripper, small flat screwdriver (optional), yellow/green twisted CAN cable + Requires: Wire stripper, small flat screwdriver (optional), yellow/green twisted CAN cable - .. note:: The PH is an optional component used for controlling pneumatics on the robot. If you are not using the PH, wire the CAN connection directly from the roboRIO (shown in the above step) to the PDH (shown in this step). + .. note:: The PH is an optional component used for controlling pneumatics on the robot. If you are not using the PH, wire the CAN connection directly from the roboRIO (shown in the above step) to the PDH (shown in this step). - 1. Strip ~5/16" (~8 mm) off of each of the CAN wires. - 2. Insert the wires into the appropriate CAN terminals on the PH. - 3. Measure the length required to reach the CAN terminals of the PDH (either of the two available pairs). Cut and strip ~5/16" (~8 mm) off this end of the wires. - 4. Insert the wires into the appropriate color coded CAN terminals on the PDH. You may use either of the Yellow/Green terminal pairs on the PDH, there is no defined in or out. + 1. Strip ~5/16" (~8 mm) off of each of the CAN wires. + 2. Insert the wires into the appropriate CAN terminals on the PH. + 3. Measure the length required to reach the CAN terminals of the PDH (either of the two available pairs). Cut and strip ~5/16" (~8 mm) off this end of the wires. + 4. Insert the wires into the appropriate color coded CAN terminals on the PDH. You may use either of the Yellow/Green terminal pairs on the PDH, there is no defined in or out. - .. note:: See the :ref:`CAN Wiring Basics` if you need to terminate the CAN bus somewhere other than the PDP. + .. note:: See the :ref:`CAN Wiring Basics` if you need to terminate the CAN bus somewhere other than the PDP. .. tab-item:: CTR :sync: CTR diff --git a/source/docs/zero-to-robot/step-1/intro-to-frc-robot-wiring.rst b/source/docs/zero-to-robot/step-1/intro-to-frc-robot-wiring.rst index 8eae7c8536..7ec216c96d 100644 --- a/source/docs/zero-to-robot/step-1/intro-to-frc-robot-wiring.rst +++ b/source/docs/zero-to-robot/step-1/intro-to-frc-robot-wiring.rst @@ -95,17 +95,17 @@ Cable ties plus reclosable fastener make a great pair for securing robot electro 1. Secure each item down with recloseable fastener. One easy way to do this is to secure the two sides of the fastener together, peel one backing, secure the fastener(s) to the component, then peel the other backing and carefully press the component into place on the board. To ensure you have enough fastener for both electronics and the protective panels, some recommended lengths are provided below: - - SPARK MAX: 2x 1 in. pieces each - - roboRIO: 4x 1 in. pieces - - PDH: 3x 2 in. pieces (or 4x 1 in.) - - 120A Breaker: 2x 2 in. pieces + - SPARK MAX: 2x 1 in. pieces each + - roboRIO: 4x 1 in. pieces + - PDH: 3x 2 in. pieces (or 4x 1 in.) + - 120A Breaker: 2x 2 in. pieces 2. Mark hole locations for drilling ziptie holes - - SPARK MAX: 2x holes centered between each SPARK MAX (1 aligned with each ziptie notch) plus 2x just outside each outer controller. 2 cable ties will pass through each hole. - - PDH: 1 hole directly underneath each device mounting hole (4x total), 1 holes just outside the device footprint near each mounting hole (4x total) - - roboRIO: 1 hole directly underneath each ziptie notch (4x total), 1 hole just outside the device footprint near each mounting hole (4x total) - - 120A breaker: 1 hole directly underneath each device mounting hole (2x total), 1 hole just outside the device footprint near each mounting hole (2x total) + - SPARK MAX: 2x holes centered between each SPARK MAX (1 aligned with each ziptie notch) plus 2x just outside each outer controller. 2 cable ties will pass through each hole. + - PDH: 1 hole directly underneath each device mounting hole (4x total), 1 holes just outside the device footprint near each mounting hole (4x total) + - roboRIO: 1 hole directly underneath each ziptie notch (4x total), 1 hole just outside the device footprint near each mounting hole (4x total) + - 120A breaker: 1 hole directly underneath each device mounting hole (2x total), 1 hole just outside the device footprint near each mounting hole (2x total) 3. Remove components and drill holes. Using a "rocking" or "peeling" motion can often help remove components from recloseable fastener without removing the fastener adhesive. #. Place the components back down on the boards. You may wish to wait to actually secure components with cable ties until wiring is complete. Some cable ties may be able to double as wire management. From a172b690eda4a274b464cf519da74421b1541dde Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Sat, 14 Jun 2025 21:44:37 -0700 Subject: [PATCH 003/135] update transifex link (#3057) --- source/docs/contributing/frc-docs/translations.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/docs/contributing/frc-docs/translations.rst b/source/docs/contributing/frc-docs/translations.rst index e9267fb9c5..9e1575216e 100644 --- a/source/docs/contributing/frc-docs/translations.rst +++ b/source/docs/contributing/frc-docs/translations.rst @@ -6,7 +6,7 @@ frc-docs supports translations using the web-based [Transifex](https://www.trans Here are some steps to follow for translating frc-docs. -1. Sign up for [Transifex](https://www.transifex.com/) and ask to join the [frc-docs project](https://www.transifex.com/wpilib/frc-docs), and request access to the language you'd like to contribute to. +1. Sign up for [Transifex](https://www.transifex.com/) and ask to join the [frc-docs project](https://explore.transifex.com/wpilib/frc-docs/), and request access to the language you'd like to contribute to. 2. Join GitHub [discussions](https://github.com/wpilibsuite/allwpilib/discussions)! This is a direct means of communication with the WPILib team. You can use this to ask us questions in a fast and streamlined fashion. 3. You may be contacted and asked questions involving contributing languages before being granted access to the frc-docs translation project. 4. Translate your language! From 13254f74671091747582ff0679a5c30cec12910c Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Thu, 19 Jun 2025 09:45:19 -0700 Subject: [PATCH 004/135] Run linkcheck on 2027 (#3058) Made a separate workflow so it runs hours later to avoid rate limits --- .github/workflows/link-check-2027.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/link-check-2027.yml diff --git a/.github/workflows/link-check-2027.yml b/.github/workflows/link-check-2027.yml new file mode 100644 index 0000000000..5df7c9e864 --- /dev/null +++ b/.github/workflows/link-check-2027.yml @@ -0,0 +1,26 @@ +name: Link Check 2027 + +on: + workflow_dispatch: + schedule: + - cron: '0 8 * * *' + +env: + GITHUB_TOKEN: ${{ github.token }} + +jobs: + check-links-2027: + if: github.repository_owner == 'wpilibsuite' + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: 2027 + - uses: actions/setup-python@v5 + with: + python-version: 3.11 + - name: Install Dependencies + run: pip install -r source/requirements.txt + - name: Check Links + run: make linkcheck From 0d169ed8d57dccb64d157173096eb03fff02d4dd Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Fri, 20 Jun 2025 07:56:20 -0700 Subject: [PATCH 005/135] Update Inspector to 1.12 (#3063) --- .github/workflows/update-rli-commands.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-rli-commands.yml b/.github/workflows/update-rli-commands.yml index a2e171398a..49fe9fdc2c 100644 --- a/.github/workflows/update-rli-commands.yml +++ b/.github/workflows/update-rli-commands.yml @@ -72,7 +72,7 @@ jobs: # Run Inspector - name: Inspect RLIs - uses: docker://ghcr.io/starlight220/inspector:v1.9 + uses: docker://ghcr.io/starlight220/inspector:v1.12 id: inspector with: root: ${{ github.workspace }} From fe5ecba9cedc7fe30a9adb07d360d95ada798e46 Mon Sep 17 00:00:00 2001 From: Chris Gerth Date: Fri, 20 Jun 2025 20:58:29 -0500 Subject: [PATCH 006/135] Use Oxford Comma (#3037) --- source/docs/contributing/wpilib/index.rst | 2 +- .../docs/controls-overviews/control-system-hardware.rst | 8 ++++---- .../docs/controls-overviews/control-system-software.rst | 4 ++-- .../hardware-basics/preemptive-troubleshooting.rst | 2 +- .../docs/hardware/hardware-basics/status-lights-ref.rst | 2 +- .../hardware/hardware-basics/wiring-pneumatics-pcm.rst | 2 +- .../hardware/hardware-basics/wiring-pneumatics-ph.rst | 2 +- source/docs/hardware/sensors/gyros-hardware.rst | 4 ++-- .../networking-introduction/ip-configurations.rst | 2 +- .../networking-introduction/measuring-bandwidth-usage.rst | 2 +- source/docs/romi-robot/getting-to-know-romi.rst | 4 ++-- .../docs/software/advanced-controls/controls-glossary.rst | 2 +- .../introduction/control-system-basics.rst | 2 +- .../state-space/state-space-debugging.rst | 2 +- .../state-space/state-space-flywheel-walkthrough.rst | 2 +- .../advanced-controls/state-space/state-space-intro.rst | 2 +- .../state-space/state-space-observers.rst | 4 ++-- .../state-space/state-space-pose-estimators.rst | 2 +- .../system-identification/viewing-diagnostics.rst | 2 +- source/docs/software/basic-programming/joystick.rst | 2 +- .../software/can-devices/power-distribution-module.rst | 2 +- source/docs/software/dashboards/advantagescope.rst | 2 +- .../driver-station-labview-dashboard.rst | 6 +++--- .../getting-started/shuffleboard-displaying-data.rst | 2 +- .../shuffleboard/getting-started/shuffleboard-faq.rst | 2 +- .../shuffleboard/getting-started/shuffleboard-widgets.rst | 2 +- ...choosing-an-autonomous-program-from-smartdashboard.rst | 2 +- .../software/driverstation/driver-station-log-viewer.rst | 4 ++-- .../driverstation/driver-station-timing-viewer.rst | 2 +- source/docs/software/driverstation/driver-station.rst | 2 +- source/docs/software/frc-glossary.rst | 4 ++-- source/docs/software/hardware-apis/index.rst | 4 ++-- .../software/hardware-apis/motors/pwm-controllers.rst | 2 +- .../software/hardware-apis/motors/wpi-drive-classes.rst | 4 ++-- .../reading-array-values-published-by-networktables.rst | 2 +- source/docs/software/pathplanning/index.rst | 2 +- source/docs/software/support/support-resources.rst | 4 ++-- .../vision-processing/introduction/cameraserver-class.rst | 2 +- .../introduction/strategies-for-vision-programming.rst | 4 ++-- .../vision-processing/roborio/cameraserver-webserver.rst | 2 +- .../wpilibpi/the-raspberry-pi-frc-console.rst | 2 +- source/docs/software/vscode-overview/vscode-basics.rst | 2 +- source/docs/software/wpilib-tools/outlineviewer/index.rst | 4 ++-- .../robotbuilder/introduction/robotbuilder-overview.rst | 4 ++-- source/docs/xrp-robot/getting-to-know-xrp.rst | 2 +- source/docs/xrp-robot/hardware-and-imaging.rst | 2 +- source/docs/yearly-overview/known-issues.rst | 2 +- source/docs/zero-to-robot/introduction.rst | 2 +- source/docs/zero-to-robot/step-2/labview-setup.rst | 2 +- source/docs/zero-to-robot/step-3/radio-programming.rst | 2 +- .../step-4/creating-test-drivetrain-program-labview.rst | 2 +- source/index.rst | 2 +- 52 files changed, 69 insertions(+), 69 deletions(-) diff --git a/source/docs/contributing/wpilib/index.rst b/source/docs/contributing/wpilib/index.rst index dcf4de2af3..e7e0e6f8c8 100644 --- a/source/docs/contributing/wpilib/index.rst +++ b/source/docs/contributing/wpilib/index.rst @@ -8,7 +8,7 @@ This is a list of links to the various documentation for the [allwpilib](https:/ ## Quick Start -Below is a list of instructions that guide you through cloning, building, publishing and using local allwpilib binaries in a robot project. This quick start is not intended as a replacement for the information that is further listed in this document. +Below is a list of instructions that guide you through cloning, building, publishing, and using local allwpilib binaries in a robot project. This quick start is not intended as a replacement for the information that is further listed in this document. * Clone the repository with ``git clone https://github.com/wpilibsuite/allwpilib.git`` * Build the repository with ``./gradlew build`` or ``./gradlew build --build-cache`` if you have an internet connection diff --git a/source/docs/controls-overviews/control-system-hardware.rst b/source/docs/controls-overviews/control-system-hardware.rst index 885c9b4a39..7c6ede6c2e 100644 --- a/source/docs/controls-overviews/control-system-hardware.rst +++ b/source/docs/controls-overviews/control-system-hardware.rst @@ -170,7 +170,7 @@ There are a variety of different :ref:`motor controllers ` is a Dashboard focused on being a programmer's tool for debugging. The primary advantages are the field view, pose visualization and advanced signal plotting tools. +:ref:`Glass ` is a Dashboard focused on being a programmer's tool for debugging. The primary advantages are the field view, pose visualization, and advanced signal plotting tools. ### AdvantageScope @@ -136,7 +136,7 @@ This tool helps teams automatically calculate constants that can be used to desc .. image:: images/control-system-software/outline-viewer.png :alt: OutlineViewer with the preferences dialog box. -OutlineViewer is a utility used to view, modify and add to all of the contents of the NetworkTables for debugging purposes. LabVIEW teams can use the Variables tab of the LabVIEW Dashboard to accomplish this functionality. For more information see the :ref:`Outline Viewer section `. +OutlineViewer is a utility used to view, modify, and add to all of the contents of the NetworkTables for debugging purposes. LabVIEW teams can use the Variables tab of the LabVIEW Dashboard to accomplish this functionality. For more information see the :ref:`Outline Viewer section `. ## roboRIO Team Number Setter diff --git a/source/docs/hardware/hardware-basics/preemptive-troubleshooting.rst b/source/docs/hardware/hardware-basics/preemptive-troubleshooting.rst index 5d8cdac51d..883316cf94 100644 --- a/source/docs/hardware/hardware-basics/preemptive-troubleshooting.rst +++ b/source/docs/hardware/hardware-basics/preemptive-troubleshooting.rst @@ -24,7 +24,7 @@ Apply considerable force onto the battery cable at 90 degrees to try to move the :alt: Disconnected battery of a robot mid match. :width: 350 -In almost every event we see at least one robot where a not properly secured battery connector (the large Anderson) comes apart and disconnects power from the robot. This has happened in championship matches on the Einstein and everywhere else. Its an easy to ensure that this doesn't happen to you by securing the two connectors by wrapping a tie wrap around the connection. 10 or 12 tie wraps for the peace of mind during an event is not a high price to pay to guarantee that you will not have the problem of this robot from an actual event after a bumpy ride over a defense. Also, secure your battery to the chassis with hook and loop tape or another method, especially in games with rough defense, obstacles or climbing. +In almost every event we see at least one robot where a not properly secured battery connector (the large Anderson) comes apart and disconnects power from the robot. This has happened in championship matches on the Einstein and everywhere else. Its an easy to ensure that this doesn't happen to you by securing the two connectors by wrapping a tie wrap around the connection. 10 or 12 tie wraps for the peace of mind during an event is not a high price to pay to guarantee that you will not have the problem of this robot from an actual event after a bumpy ride over a defense. Also, secure your battery to the chassis with hook and loop tape or another method, especially in games with rough defense, obstacles, or climbing. ## Securing the Battery Connector & Main Power Leads diff --git a/source/docs/hardware/hardware-basics/status-lights-ref.rst b/source/docs/hardware/hardware-basics/status-lights-ref.rst index 282ae202d4..5a89cbc3c8 100644 --- a/source/docs/hardware/hardware-basics/status-lights-ref.rst +++ b/source/docs/hardware/hardware-basics/status-lights-ref.rst @@ -596,7 +596,7 @@ Each channel has a corresponding status LED that will indicate the sensed state | Right/Forward Signal | Solid Green | +-----------------------+----------------+ -- 6V Power LED off, dim or flickering with power applied = Over-current shutdown +- 6V Power LED off, dim, or flickering with power applied = Over-current shutdown ## Spike relay configured as a motor, light, or solenoid switch diff --git a/source/docs/hardware/hardware-basics/wiring-pneumatics-pcm.rst b/source/docs/hardware/hardware-basics/wiring-pneumatics-pcm.rst index 0341732870..6dafc7cd17 100644 --- a/source/docs/hardware/hardware-basics/wiring-pneumatics-pcm.rst +++ b/source/docs/hardware/hardware-basics/wiring-pneumatics-pcm.rst @@ -8,7 +8,7 @@ This page describes wiring pneumatics with the CTRE Pneumatic Control Module (PC A single PCM will support most pneumatics applications, providing an output for the compressor, input for the pressure switch, and outputs for up to 8 solenoid channels (12V or 24V selectable). The module is connected to the roboRIO over the :term:`CAN` bus and powered via 12V from the PDP or PDH. -For complicated robot designs requiring more channels or multiple solenoid voltages, additional PCMs or PHs can be added to the control system. +For complicated robot designs requiring more channels or multiple solenoid voltages, additional PCMs, or PHs can be added to the control system. ## PCM Power and Control Wiring diff --git a/source/docs/hardware/hardware-basics/wiring-pneumatics-ph.rst b/source/docs/hardware/hardware-basics/wiring-pneumatics-ph.rst index cb99695d59..7ce58842ae 100644 --- a/source/docs/hardware/hardware-basics/wiring-pneumatics-ph.rst +++ b/source/docs/hardware/hardware-basics/wiring-pneumatics-ph.rst @@ -16,7 +16,7 @@ This page describes wiring pneumatics with the REV Pneumatic Hub (:term:`PH`). F A single PH will support most pneumatics applications, providing an output for the compressor, input for a pressure switch, and outputs for up to 16 solenoid channels (12V or 24V selectable). The module is connected to the roboRIO over the :term:`CAN` bus and powered via 12V from the PDP/PDH. -For complicated robot designs requiring more channels or multiple solenoid voltages, additional PHs or PCMs can be added to the control system. +For complicated robot designs requiring more channels or multiple solenoid voltages, additional PHs, or PCMs can be added to the control system. ## PCM Power and Control Wiring diff --git a/source/docs/hardware/sensors/gyros-hardware.rst b/source/docs/hardware/sensors/gyros-hardware.rst index 054e9bec99..7ca47b4f3e 100644 --- a/source/docs/hardware/sensors/gyros-hardware.rst +++ b/source/docs/hardware/sensors/gyros-hardware.rst @@ -6,7 +6,7 @@ Gyroscopes (or "gyros", for short) are devices that measure rate-of-rotation. These are particularly useful for stabilizing robot driving, or for measuring heading or tilt by integrating (adding-up) the rate measurements to get a measurement of total angular displacement. -Several popular FRC\ |reg| devices known as :ref:`IMUs ` (Inertial Measurement Units) combine 3-axis gyros, accelerometers and other position sensors into one device. Some popular examples are: +Several popular FRC\ |reg| devices known as :ref:`IMUs ` (Inertial Measurement Units) combine 3-axis gyros, accelerometers, and other position sensors into one device. Some popular examples are: - [Analog Devices ADIS16448 and ADIS 16470 IMUs](https://www.analog.com/en/landing-pages/001/first.html) - [CTRE Pigeon IMU](https://store.ctr-electronics.com/gadgeteer-pigeon-imu/) @@ -37,7 +37,7 @@ Three-axis gyros measure rotation rate around all three spatial axes (typically The [Analog Devices ADIS16470 IMU Board for FIRST Robotics](https://www.analog.com/en/landing-pages/001/first.html) that has been in FIRST Choice in recent years is a commonly used three-axis gyro. .. image:: images/gyros-hardware/drive-yaw-pitch-roll.svg - :alt: The 3 axis: yaw, pitch, and roll and how they relate to robot movement. + :alt: The 3 axis: yaw, pitch, and roll, and how they relate to robot movement. :width: 400 .. note:: The coordinate system shown above is often used for three axis gyros, as it is a convention in avionics. Note that other coordinate systems are used in mathematics and referenced throughout WPILib. Please refer to the :ref:`Drive class axis diagram` for axis referenced in software. diff --git a/source/docs/networking/networking-introduction/ip-configurations.rst b/source/docs/networking/networking-introduction/ip-configurations.rst index 6f8679190a..30b560e926 100644 --- a/source/docs/networking/networking-introduction/ip-configurations.rst +++ b/source/docs/networking/networking-introduction/ip-configurations.rst @@ -1,6 +1,6 @@ # IP Configurations -This document describes the IP configuration used at events, both on the fields and in the pits, potential issues and workaround configurations. +This document describes the IP configuration used at events, both on the fields and in the pits, potential issues, and workaround configurations. ## TE.AM IP Address Notation diff --git a/source/docs/networking/networking-introduction/measuring-bandwidth-usage.rst b/source/docs/networking/networking-introduction/measuring-bandwidth-usage.rst index cb4738b99d..b981ac4236 100644 --- a/source/docs/networking/networking-introduction/measuring-bandwidth-usage.rst +++ b/source/docs/networking/networking-introduction/measuring-bandwidth-usage.rst @@ -59,7 +59,7 @@ In the ``Maximum Box`` under ``Vertical Scale`` enter 524288 (this is 4 Megabits .. image:: images/measuring-bandwidth-usage/graph.png :alt: Observing the bandwidth usage on the chart screen. -You may now connect to your robot as normal over the selected interface (if you haven't done so already). The graph will show the total bandwidth usage of the connection, with the bandwidth cap at the top of the graph. The Last, Average, Min and Max values are also displayed at the bottom of the graph. Note that these values are in Bytes/Second meaning the cap is 524,288. With just the Driver Station open you should see a flat line at ~100000 Bytes/Second. +You may now connect to your robot as normal over the selected interface (if you haven't done so already). The graph will show the total bandwidth usage of the connection, with the bandwidth cap at the top of the graph. he Last, Average, Min, and Max values are also displayed at the bottom of the graph. Note that these values are in Bytes/Second meaning the cap is 524,288. With just the Driver Station open you should see a flat line at ~100000 Bytes/Second. ## Measuring Bandwidth Usage using Wireshark diff --git a/source/docs/romi-robot/getting-to-know-romi.rst b/source/docs/romi-robot/getting-to-know-romi.rst index 4bb68d96be..c18f9021f9 100644 --- a/source/docs/romi-robot/getting-to-know-romi.rst +++ b/source/docs/romi-robot/getting-to-know-romi.rst @@ -2,7 +2,7 @@ ## Directional Conventions -The front of the Romi is where the Raspberry Pi USB ports, GPIO pins and suspended caster wheel are. +The front of the Romi is where the Raspberry Pi USB ports, GPIO pins, and suspended caster wheel are. .. image:: images/getting-to-know-romi/romi-front-view.png :alt: Romi Front View @@ -99,7 +99,7 @@ The control board has 5 configurable GPIO pins (named EXT0 through EXT4) that al All 5 pins support the following modes: Digital IO, Analog In, and PWM (with the exception of EXT 0, which only supports Digital IO and PWM). The mode of the ports can be configured with :ref:`The Romi Web UI `. -The GPIO channels are exposed via a 3-pin, servo style interface, with connections for Ground, Power and Signal (with the Ground connection being closest to the edge of the board, and the signal being closest to the inside of the board). +The GPIO channels are exposed via a 3-pin, servo style interface, with connections for Ground, Power, and Signal (with the Ground connection being closest to the edge of the board, and the signal being closest to the inside of the board). The power connections for the GPIO pins are initially left unconnected but can be hooked into the Romi's on-board 5V supply by using a jumper to connect the 5V pin to the power bus (as seen in the image above). Additionally, if more power than the Romi can provide is needed, the user can provide their own 5V power supply and connect it directly to power bus and ground pins. diff --git a/source/docs/software/advanced-controls/controls-glossary.rst b/source/docs/software/advanced-controls/controls-glossary.rst index 10b754cd20..fda9fe704c 100644 --- a/source/docs/software/advanced-controls/controls-glossary.rst +++ b/source/docs/software/advanced-controls/controls-glossary.rst @@ -148,7 +148,7 @@ A term encompassing a :term:`plant` and its interaction with a :term:`controller` and :term:`observer`, which are treated as a single entity. Mathematically speaking, a :term:`system` maps :term:`inputs ` to :term:`outputs ` through a linear combination of :term:`states `. system identification - The process of capturing a :term:`system `\'s :term:`dynamics` in a mathematical model using measured data. The SysId toolsuite uses system identification to find kS, kV and kA terms. + The process of capturing a :term:`system `\'s :term:`dynamics` in a mathematical model using measured data. The SysId toolsuite uses system identification to find kS, kV, and kA terms. system response The behavior of a :term:`system` over time for a given :term:`input`. diff --git a/source/docs/software/advanced-controls/introduction/control-system-basics.rst b/source/docs/software/advanced-controls/introduction/control-system-basics.rst index 8b27247a96..26819b483e 100644 --- a/source/docs/software/advanced-controls/introduction/control-system-basics.rst +++ b/source/docs/software/advanced-controls/introduction/control-system-basics.rst @@ -4,7 +4,7 @@ ## The Need for Control Systems -Control systems are all around us and we interact with them daily. A small list of ones you may have seen includes heaters and air conditioners with thermostats, cruise control and the anti-lock braking system (ABS) on automobiles, and fan speed modulation on modern laptops. Control systems monitor or control the behavior of systems like these and may consist of humans controlling them directly (manual control), or of only machines (automatic control). +Control systems are all around us and we interact with them daily. A small list of ones you may have seen includes heaters and air conditioners with thermostats, cruise control, and the anti-lock braking system (ABS) on automobiles, and fan speed modulation on modern laptops. Control systems monitor or control the behavior of systems like these and may consist of humans controlling them directly (manual control), or of only machines (automatic control). All of these examples have a mechanism which does useful work, but cannot be *directly* commanded to the state that is desired. diff --git a/source/docs/software/advanced-controls/state-space/state-space-debugging.rst b/source/docs/software/advanced-controls/state-space/state-space-debugging.rst index 4d3929b82f..753307b1f5 100644 --- a/source/docs/software/advanced-controls/state-space/state-space-debugging.rst +++ b/source/docs/software/advanced-controls/state-space/state-space-debugging.rst @@ -9,7 +9,7 @@ One of the most common causes of bugs with state-space controllers is signs bein ## The Importance of Graphs -Reliable data of the :term:`system's ` :term:`state`\s, :term:`input`\s and :term:`output`\s over time is important when debugging state-space controllers and observers. One common approach is to send this data over NetworkTables and use tools such as :ref:`Shuffleboard `, which allow us to both graph the data in real-time as well as save it to a CSV file for plotting later with tools such as Google Sheets, Excel or Python. +Reliable data of the :term:`system's ` :term:`state`\s, :term:`input`\s and :term:`output`\s over time is important when debugging state-space controllers and observers. One common approach is to send this data over NetworkTables and use tools such as :ref:`Shuffleboard `, which allow us to both graph the data in real-time as well as save it to a CSV file for plotting later with tools such as Google Sheets, Excel, or Python. .. note:: By default, NetworkTables is limited to a 10hz update rate. For testing, this can be bypassed with the following code snippet to submit data at up to 100hz. This code should be run periodically to forcibly publish new data. diff --git a/source/docs/software/advanced-controls/state-space/state-space-flywheel-walkthrough.rst b/source/docs/software/advanced-controls/state-space/state-space-flywheel-walkthrough.rst index 71329d82e1..64479f6179 100644 --- a/source/docs/software/advanced-controls/state-space/state-space-flywheel-walkthrough.rst +++ b/source/docs/software/advanced-controls/state-space/state-space-flywheel-walkthrough.rst @@ -99,7 +99,7 @@ The ``LinearSystem`` class contains methods for easily creating state-space syst ### Modeling Using Flywheel Moment of Inertia and Gearing -A flywheel can also be modeled without access to a physical robot, using information about the motors, gearing and flywheel's :term:`moment of inertia`. A full derivation of this model is presented in Section 12.3 of [Controls Engineering in FRC](https://file.tavsys.net/control/controls-engineering-in-frc.pdf). +A flywheel can also be modeled without access to a physical robot, using information about the motors, gearing, and flywheel's :term:`moment of inertia`. A full derivation of this model is presented in Section 12.3 of [Controls Engineering in FRC](https://file.tavsys.net/control/controls-engineering-in-frc.pdf). The ``LinearSystem`` class contains methods to easily create a model of a flywheel from the flywheel's motors, gearing and :term:`moment of inertia`. The moment of inertia can be calculated using :term:`CAD` software or using physics. The examples used here are detailed in the flywheel example project ([Java](https://github.com/wpilibsuite/allwpilib/tree/v2023.2.1/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/statespaceflywheel)/[C++](https://github.com/wpilibsuite/allwpilib/blob/v2023.2.1/wpilibcExamples/src/main/cpp/examples/StateSpaceFlywheel/cpp/Robot.cpp)/[Python](https://github.com/robotpy/examples/blob/main/StateSpaceFlywheel/robot.py)). diff --git a/source/docs/software/advanced-controls/state-space/state-space-intro.rst b/source/docs/software/advanced-controls/state-space/state-space-intro.rst index 57c29ac63a..8513efe613 100644 --- a/source/docs/software/advanced-controls/state-space/state-space-intro.rst +++ b/source/docs/software/advanced-controls/state-space/state-space-intro.rst @@ -4,7 +4,7 @@ ## From PID to Model-Based Control -When tuning PID controllers, we focus on fiddling with controller parameters relating to the current, past, and future :term:`error` (P, I and D terms) rather than the underlying system states. While this approach works in a lot of situations, it is an incomplete view of the world. +When tuning PID controllers, we focus on fiddling with controller parameters relating to the current, past, and future :term:`error` (P, I, and D terms) rather than the underlying system states. While this approach works in a lot of situations, it is an incomplete view of the world. Model-based control focuses on developing an accurate model of the :term:`system` (mechanism) we are trying to control. These models help inform :term:`gains ` picked for feedback controllers based on the physical responses of the system, rather than an arbitrary proportional :term:`gain` derived through testing. This allows us not only to predict ahead of time how a system will react, but also test our controllers without a physical robot and save time debugging simple bugs. diff --git a/source/docs/software/advanced-controls/state-space/state-space-observers.rst b/source/docs/software/advanced-controls/state-space/state-space-observers.rst index 029ab0882f..dbfd64069a 100644 --- a/source/docs/software/advanced-controls/state-space/state-space-observers.rst +++ b/source/docs/software/advanced-controls/state-space/state-space-observers.rst @@ -62,7 +62,7 @@ The state estimate :math:`\mathbf{x}`, together with :math:`\mathbf{P}`, describ ### Process and Measurement Noise Covariance Matrices -The process and measurement noise covariance matrices :math:`\mathbf{Q}` and :math:`\mathbf{R}` describe the variance of each of our states and measurements. Remember that for a Gaussian function, variance is the square of the function's standard deviation. In a WPILib, Q and R are diagonal matrices whose diagonals contain their respective variances. For example, a Kalman filter with states :math:`\begin{bmatrix}\text{position} \\ \text{velocity} \end{bmatrix}` and measurements :math:`\begin{bmatrix}\text{position} \end{bmatrix}` with state standard deviations :math:`\begin{bmatrix}0.1 \\ 1.0\end{bmatrix}` and measurement standard deviation :math:`\begin{bmatrix}0.01\end{bmatrix}` would have the following :math:`\mathbf{Q}` and :math:`\mathbf{R}` matrices: +The process and measurement noise covariance matrices :math:`\mathbf{Q}` and :math:`\mathbf{R}` describe the variance of each of our states and measurements. Remember that for a Gaussian function, variance is the square of the function's standard deviation. In a WPILib, Q, and R are diagonal matrices whose diagonals contain their respective variances. For example, a Kalman filter with states :math:`\begin{bmatrix}\text{position} \\ \text{velocity} \end{bmatrix}` and measurements :math:`\begin{bmatrix}\text{position} \end{bmatrix}` with state standard deviations :math:`\begin{bmatrix}0.1 \\ 1.0\end{bmatrix}` and measurement standard deviation :math:`\begin{bmatrix}0.01\end{bmatrix}` would have the following :math:`\mathbf{Q}` and :math:`\mathbf{R}` matrices: .. math:: Q = \begin{bmatrix}0.01 & 0 \\ 0 & 1.0\end{bmatrix}, @@ -117,4 +117,4 @@ WPILib's Kalman Filter classes' constructors take a linear system, a vector of p ## Footnotes -.. [1] In a real robot, noise comes from all sorts of sources. Stray electromagnetic radiation adds extra voltages to sensor readings, vibrations and temperature variations throw off inertial measurement units, gear lash causes encoders to have inaccuracies when directions change... all sorts of things. It's important to realize that, by themselves, each of these sources of "noise" aren't guaranteed to follow any pattern. Some of them might be the "white noise" random vibrations you've probably heard on the radio. Others might be "pops" or single-loop errors. Others might be nominally zero, but strongly correlated with events on the robot. However, the :term:`Central Limit Theorem` shows mathematically that regardless of how the individual sources of noise are distributed, as we add more and more of them up their combined effect eventually is distributed like a Gaussian. Since we do not know the exact individual sources of noise, the best choice of a model we can make is indeed that Gaussian function. +.. [1] In a real robot, noise comes from all sorts of sources. Stray electromagnetic radiation adds extra voltages to sensor readings, vibrations, and temperature variations throw off inertial measurement units, gear lash causes encoders to have inaccuracies when directions change... all sorts of things. It's important to realize that, by themselves, each of these sources of "noise" aren't guaranteed to follow any pattern. Some of them might be the "white noise" random vibrations you've probably heard on the radio. Others might be "pops" or single-loop errors. Others might be nominally zero, but strongly correlated with events on the robot. However, the :term:`Central Limit Theorem` shows mathematically that regardless of how the individual sources of noise are distributed, as we add more and more of them up their combined effect eventually is distributed like a Gaussian. Since we do not know the exact individual sources of noise, the best choice of a model we can make is indeed that Gaussian function. diff --git a/source/docs/software/advanced-controls/state-space/state-space-pose-estimators.rst b/source/docs/software/advanced-controls/state-space/state-space-pose-estimators.rst index eaf6ebb792..80b06ebff7 100644 --- a/source/docs/software/advanced-controls/state-space/state-space-pose-estimators.rst +++ b/source/docs/software/advanced-controls/state-space/state-space-pose-estimators.rst @@ -1,6 +1,6 @@ # Pose Estimators -WPILib includes pose estimators for differential, swerve and mecanum drivetrains. These estimators are designed to be drop-in replacements for the existing :ref:`odometry ` classes that also support fusing latency-compensated robot pose estimates with encoder and gyro measurements. These estimators can account for encoder drift and noisy vision data. These estimators can behave identically to their corresponding odometry classes if only ``update`` is called on these estimators. +WPILib includes pose estimators for differential, swerve, and mecanum drivetrains. These estimators are designed to be drop-in replacements for the existing :ref:`odometry ` classes that also support fusing latency-compensated robot pose estimates with encoder and gyro measurements. These estimators can account for encoder drift and noisy vision data. These estimators can behave identically to their corresponding odometry classes if only ``update`` is called on these estimators. Pose estimators estimate robot position using a state-space system with the states :math:`\begin{bmatrix}x & y & \theta \end{bmatrix}^T`, which can represent robot position as a ``Pose2d``. WPILib includes ``DifferentialDrivePoseEstimator``, ``SwerveDrivePoseEstimator`` and ``MecanumDrivePoseEstimator`` to estimate robot position. In these, users call ``update`` periodically with encoder and gyro measurements (same as the odometry classes) to update the robot's estimated position. When the robot receives measurements of its field-relative position (encoded as a ``Pose2d``) from sensors such as computer vision or V-SLAM, the pose estimator latency-compensates the measurement to accurately estimate robot position. diff --git a/source/docs/software/advanced-controls/system-identification/viewing-diagnostics.rst b/source/docs/software/advanced-controls/system-identification/viewing-diagnostics.rst index 5f3b9ec8ec..9ba00952fc 100644 --- a/source/docs/software/advanced-controls/system-identification/viewing-diagnostics.rst +++ b/source/docs/software/advanced-controls/system-identification/viewing-diagnostics.rst @@ -51,7 +51,7 @@ However, if your robot or mechanism has low mass compared to the motor power, th ## Common Failure Modes -When something has gone wrong with the identification, diagnostic plots and console output provide crucial clues as to *what* has gone wrong. This section describes some common failures encountered while running the system identification tool, the identifying features of their diagnostic plots, and the steps that can be taken to fix them. +When something has gone wrong with the identification, diagnostic plots, and console output provide crucial clues as to *what* has gone wrong. This section describes some common failures encountered while running the system identification tool, the identifying features of their diagnostic plots, and the steps that can be taken to fix them. ### Improperly Set Motion Threshold diff --git a/source/docs/software/basic-programming/joystick.rst b/source/docs/software/basic-programming/joystick.rst index 9391316028..d03b3326e8 100644 --- a/source/docs/software/basic-programming/joystick.rst +++ b/source/docs/software/basic-programming/joystick.rst @@ -11,7 +11,7 @@ The command based way to use the these classes is detailed in the section: :ref: .. image:: /docs/software/driverstation/images/driver-station/ds-usb-tab.png :alt: The 4th tab down on the left hand side is the USB devices tab. -The :ref:`USB Devices Tab ` of the Driver Station is used to setup and configure the joystick for use with the robot. Pressing a button on a joystick will cause its entry in the table to light up green. Selecting the joystick will show the values of axes, buttons and the POV that can be used to determine the mapping between physical joystick features and axis or button numbers. +The :ref:`USB Devices Tab ` of the Driver Station is used to setup and configure the joystick for use with the robot. Pressing a button on a joystick will cause its entry in the table to light up green. Selecting the joystick will show the values of axes, buttons, and the POV that can be used to determine the mapping between physical joystick features and axis or button numbers. .. image:: images/joystick/lights.jpg :alt: On the USB tab the indicators light up to show what is currently being pressed. diff --git a/source/docs/software/can-devices/power-distribution-module.rst b/source/docs/software/can-devices/power-distribution-module.rst index 0b42c66994..d3fd6aa079 100644 --- a/source/docs/software/can-devices/power-distribution-module.rst +++ b/source/docs/software/can-devices/power-distribution-module.rst @@ -85,7 +85,7 @@ Monitoring the temperature can be useful for detecting if the robot has been dra :lines: 43-55 -Monitoring the total current, power and energy can be useful for controlling how much power is being drawn from the battery, both for preventing brownouts and ensuring that mechanisms have sufficient power available to perform the actions required. Power is the bus voltage multiplied by the current with the units Watts. Energy is the power summed over time with units Joules. +Monitoring the total current, power, and energy can be useful for controlling how much power is being drawn from the battery, both for preventing brownouts and ensuring that mechanisms have sufficient power available to perform the actions required. Power is the bus voltage multiplied by the current with the units Watts. Energy is the power summed over time with units Joules. ## Reading Individual Channel Currents diff --git a/source/docs/software/dashboards/advantagescope.rst b/source/docs/software/dashboards/advantagescope.rst index 23b0cdd265..99a37462e9 100644 --- a/source/docs/software/dashboards/advantagescope.rst +++ b/source/docs/software/dashboards/advantagescope.rst @@ -13,7 +13,7 @@ The capabilities of AdvantageScope include: - Automatic synchronization of data sources, including log files, match videos, and [Zebra MotionWorks](https://www.firstinspires.org/robotics/frc/blog/2023-zebra-motionworks-for-first-robotics-competition-at-the-first-championship) tracking - Specialized displays for joysticks, swerve module states, and console text - Analysis of numeric fields using histograms and statistical measures -- Multiple export options, including CSV and WPILib data logs +- Multiple export options, including CSV, and WPILib data logs .. image:: images/advantagescope.png :alt: Screenshot of an AdvantageScope window displaying a line graph, a list of fields, and a series of miscellaneous tabs. diff --git a/source/docs/software/dashboards/labview-dashboard/driver-station-labview-dashboard.rst b/source/docs/software/dashboards/labview-dashboard/driver-station-labview-dashboard.rst index e85db145a4..6f44942593 100644 --- a/source/docs/software/dashboards/labview-dashboard/driver-station-labview-dashboard.rst +++ b/source/docs/software/dashboards/labview-dashboard/driver-station-labview-dashboard.rst @@ -31,7 +31,7 @@ The left pane is used to display a video feed from acamera located on the robot. 1. Camera Image Display 2. Mode Selector - This drop-down allows you to select the type of camera display to use. The choices are Camera Off, USB Camera SW (software compression), USB Camera HW (hardware compression) and IP Camera. Note that the IP Camera setting will not work when your PC is connected to the roboRIO over USB. -3. Camera Settings - This control allows you to change the resolution, framerate and compression of the image stream to the dashboard, click the control to pop-up the configuration. +3. Camera Settings - This control allows you to change the resolution, framerate, and compression of the image stream to the dashboard, click the control to pop-up the configuration. 4. Bandwidth Indicator - Indicates approximate bandwidth usage of the image stream. The indicator will display green for "safe" bandwidth usage, yellow when teams should use caution and red if the stream bandwidth is beyond levels that will work on the competition field. 5. Framerate - Indicates the approximate received framerate of the image stream. @@ -44,7 +44,7 @@ The left pane is used to display a video feed from acamera located on the robot. The center pane contains a section that provides feedback on the joysticks and drive commands when used with the LabVIEW framework and a section that displays the NetworkTables status and autonomous selector: -1. Displays X,Y and Throttle information and button values for up to 2 joysticks when using the LabVIEW framework +1. Displays X,Y, and Throttle information and button values for up to 2 joysticks when using the LabVIEW framework 2. Displays values being sent to motor controllers when using LabVIEW framework 3. Displays a connection indicator for the NetworkTables data from the robot 4. Displays a Gyro value @@ -63,7 +63,7 @@ The camera tab is used to display a video feed from a camera located on the robo 1. Camera Image Display 2. Mode Selector - This drop-down allows you to select the type of camera display to use. The choices are Camera Off, USB Camera SW (software compression), USB Camera HW (hardware compression) and IP Camera. Note that the IP Camera setting will not work when your PC is connected to the roboRIO over USB. -3. Camera Settings - This control allows you to change the resolution, framerate and compression of the image stream to the dashboard, click the control to pop-up the configuration. +3. Camera Settings - This control allows you to change the resolution, framerate, and compression of the image stream to the dashboard, click the control to pop-up the configuration. 4. Bandwidth Indicator - Indicates approximate bandwidth usage of the image stream. The indicator will display green for "safe" bandwidth usage, yellow when teams should use caution and red if the stream bandwidth is beyond levels that will work on the competition field. 5. Framerate - Indicates the approximate received framerate of the image stream. diff --git a/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-displaying-data.rst b/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-displaying-data.rst index a555a1df5a..9285774917 100644 --- a/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-displaying-data.rst +++ b/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-displaying-data.rst @@ -52,7 +52,7 @@ Often debugging or monitoring the status of a robot involves writing a number of You can write Boolean, Numeric, or String values to Shuffleboard by simply calling the correct method for the type and including the name and the value of the data, no additional code is required. -- Numeric types such as char, int, long, float or double call SmartDashboard.putNumber("dashboard-name", value). +- Numeric types such as char, int, long, float, or double call SmartDashboard.putNumber("dashboard-name", value). - String types call SmartDashboard.putString("dashboard-name", value) - Boolean types call SmartDashboard.putBoolean("dashboard-name", value) diff --git a/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-faq.rst b/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-faq.rst index e7efb1ca4a..2c84fa8876 100644 --- a/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-faq.rst +++ b/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-faq.rst @@ -4,7 +4,7 @@ ## Frequently Asked Questions -#### How do I report issues, bugs or feature requests with Shuffleboard? +#### How do I report issues, bugs, or feature requests with Shuffleboard? There is no active maintainer of Shuffleboard, but we are accepting pull requests. Bugs, issues, and feature requests can be added on the Shuffleboard GitHub page by creating an issue. Please try to look at existing issues before creating new ones to make sure you aren't duplicating something that has already been reported or work that is planned. You can find the issues on the [Shuffleboard GitHub page](https://github.com/wpilibsuite/shuffleboard). diff --git a/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-widgets.rst b/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-widgets.rst index 075804118c..380559207b 100644 --- a/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-widgets.rst +++ b/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-widgets.rst @@ -29,7 +29,7 @@ You can change the title of widgets by double-clicking in their title bar and ed ## Changing widget properties -You can change the appearance of a widget such as the range of values represented, colors or some other visual element. In cases where this is possible right-click on the widget and select "Edit properties" from the popup menu. In this boolean value widget shown below, the widget title, true color and false color can all be edited. +You can change the appearance of a widget such as the range of values represented, colors, or some other visual element. In cases where this is possible right-click on the widget and select "Edit properties" from the popup menu. In this boolean value widget shown below, the widget title, true color, and false color can all be edited. .. figure:: images/widgets-4.png :alt: diff --git a/source/docs/software/dashboards/smartdashboard/choosing-an-autonomous-program-from-smartdashboard.rst b/source/docs/software/dashboards/smartdashboard/choosing-an-autonomous-program-from-smartdashboard.rst index 21fd4f5f2b..34dc6ade26 100644 --- a/source/docs/software/dashboards/smartdashboard/choosing-an-autonomous-program-from-smartdashboard.rst +++ b/source/docs/software/dashboards/smartdashboard/choosing-an-autonomous-program-from-smartdashboard.rst @@ -1,6 +1,6 @@ # Choosing an Autonomous Program -Often teams have more than one autonomous program, either for competitive reasons or for testing new software. Programs often vary by adding things like time delays, different strategies, etc. The methods to choose the strategy to run usually involves switches, joystick buttons, knobs or other hardware based inputs. +Often teams have more than one autonomous program, either for competitive reasons or for testing new software. Programs often vary by adding things like time delays, different strategies, etc. The methods to choose the strategy to run usually involves switches, joystick buttons, knobs, or other hardware based inputs. With the SmartDashboard you can simply display a widget on the screen to choose the autonomous program that you would like to run. And with command based programs, that program is encapsulated in one of several commands. This article shows how to select an autonomous program with only a few lines of code and a nice looking user interface, with examples for both TimedRobot and Command-Based Robots. diff --git a/source/docs/software/driverstation/driver-station-log-viewer.rst b/source/docs/software/driverstation/driver-station-log-viewer.rst index a332f4fb6f..b50c435488 100644 --- a/source/docs/software/driverstation/driver-station-log-viewer.rst +++ b/source/docs/software/driverstation/driver-station-log-viewer.rst @@ -50,7 +50,7 @@ The Graph Display contains the following information: 5. Event markers will be displayed on the graph indicating the time the event occurred. Errors will display in red; warnings will display in yellow. Hovering over an event marker will display information about the event in the Messages box at the bottom left of the screen. 6. Major events are shown as vertical lines across the graph display. -To zoom in on a portion of the graph, click and drag around the desired viewing +To zoom in on a portion of the graph, click, and drag around the desired viewing area. You can only zoom the time axis, you cannot zoom vertically. ## Event List @@ -73,7 +73,7 @@ Three filters are currently available in the Log Viewer: .. image:: images/driver-station-log-viewer/identifyinglogs.png :alt: To identify a log from a match look for the "FMS Connected" message then the match number. -A common task when working with the Driver Station Logs is to identify which logs came from competition matches. Logs which were taken during a match can now be identified using the :term:`FMS` Connected event which will display the match type (Practice, Qualification or Elimination), match number, and the current time according to the FMS server. In this example, you can see that the FMS server time and the time of the Driver Station computer are fairly close, approximately 7 seconds apart. +A common task when working with the Driver Station Logs is to identify which logs came from competition matches. Logs which were taken during a match can now be identified using the :term:`FMS` Connected event which will display the match type (Practice, Qualification, or Elimination), match number, and the current time according to the FMS server. In this example, you can see that the FMS server time and the time of the Driver Station computer are fairly close, approximately 7 seconds apart. ## Identifying Common Connection Failures with the Log Viewer diff --git a/source/docs/software/driverstation/driver-station-timing-viewer.rst b/source/docs/software/driverstation/driver-station-timing-viewer.rst index e3d7ed44b7..c1d678898a 100644 --- a/source/docs/software/driverstation/driver-station-timing-viewer.rst +++ b/source/docs/software/driverstation/driver-station-timing-viewer.rst @@ -11,7 +11,7 @@ To start the Driver Station Timing Viewer, select the gear icon and then select ## Viewing Timing -The Timing viewer shows the timing of the driver station loops measuring the joysick, keyboard, and control and status network packets. When timing is good, all values should be close to 0 ms. This can help diagnose what is causing robot control issues. +The Timing viewer shows the timing of the driver station loops measuring the joysick, keyboard, and control, and status network packets. When timing is good, all values should be close to 0 ms. This can help diagnose what is causing robot control issues. .. image:: images/view-timing/normal-view-timing.png :alt: Driver Station timing viewer with all timing measurements near 0 ms diff --git a/source/docs/software/driverstation/driver-station.rst b/source/docs/software/driverstation/driver-station.rst index 32f00760d4..02d2221072 100644 --- a/source/docs/software/driverstation/driver-station.rst +++ b/source/docs/software/driverstation/driver-station.rst @@ -138,7 +138,7 @@ The USB Devices tab includes the information about the USB Devices connected to 1. USB Setup List - This contains a list of all compatible USB devices connected to the DS. Pressing a button on a device will highlight the name in green and put 2 \*s before the device name 2. :guilabel:`Rescan` - This button will force a Rescan of the USB devices. While the robot is disabled, the DS will automatically scan for new devices and add them to the list. To force a complete re-scan or to re-scan while the robot is Enabled (such as when connected to FMS during a match) press F1 or use this button. -3. Device indicators - These indicators show the current status of the Axes, buttons and POV of the joystick. +3. Device indicators - These indicators show the current status of the Axes, buttons, and POV of the joystick. 4. Rumble - For XInput devices (such as X-Box controllers) the Rumble control will appear. This can be used to test the rumble functionality of the device. The top bar is "Right Rumble" and the bottom bar is "Left Rumble". Clicking and holding anywhere along the bar will activate the rumble proportionally (left is no rumble = 0, right is full rumble = 1). This is a control only and will not indicate the Rumble value set in robot code. ### Re-Arranging and Locking Devices diff --git a/source/docs/software/frc-glossary.rst b/source/docs/software/frc-glossary.rst index d700c447ed..aec5efedff 100644 --- a/source/docs/software/frc-glossary.rst +++ b/source/docs/software/frc-glossary.rst @@ -59,7 +59,7 @@ Control Systems Advisor - FRC volunteer position that assists teams with Robot Control System-related issues. CTRE - [Cross the Road Electronics LLC](https://store.ctr-electronics.com/) - is an engineering design, software development and electronics manufacturer based outside of Detroit in Macomb, MI. They primarily focus on high-performing, high-quality electronics communication, motor control, and control system products for FIRST teams and the EV industry. CTR Electronics was founded in 2006 by two FRC mentors who met through their robotics team: Mike Copioli and Omar Zrien and is staffed largely by FRC alumni, and active volunteers & mentors. + [Cross the Road Electronics LLC](https://store.ctr-electronics.com/) - is an engineering design, software development, and electronics manufacturer based outside of Detroit in Macomb, MI. They primarily focus on high-performing, high-quality electronics communication, motor control, and control system products for FIRST teams and the EV industry. CTR Electronics was founded in 2006 by two FRC mentors who met through their robotics team: Mike Copioli and Omar Zrien and is staffed largely by FRC alumni, and active volunteers & mentors. C++ One of the four officially supported programming languages. @@ -282,7 +282,7 @@ A force applied at a distance from some axis of rotation trajectory - A trajectory is a smooth curve, with velocities and accelerations at each point along the curve, connecting two endpoints on the field. + A trajectory is a smooth curve, with velocities, and accelerations at each point along the curve, connecting two endpoints on the field. transitory In :term:`NetworkTables`, a :term:`topic` that will disappear after the last :term:`publisher` stops publishing. diff --git a/source/docs/software/hardware-apis/index.rst b/source/docs/software/hardware-apis/index.rst index 6308a94fe9..dbe27ca828 100644 --- a/source/docs/software/hardware-apis/index.rst +++ b/source/docs/software/hardware-apis/index.rst @@ -2,7 +2,7 @@ # Hardware APIs -This section discusses the control of motors and pneumatics through motor controllers, solenoids and pneumatics, and their interface with Java and C++ WPILib. +This section discusses the control of motors and pneumatics through motor controllers, solenoids, and pneumatics, and their interface with Java and C++ WPILib. .. toctree:: :maxdepth: 1 @@ -24,7 +24,7 @@ A motor controller is responsible on your robot for making motors move. For brus ### FRC Legal Motor Controllers -Motor controllers come in lots of shapes, sizes and feature sets. This is the full list of FRC\ |reg| Legal motor controllers as of 2025: +Motor controllers come in lots of shapes, sizes, and feature sets. This is the full list of FRC\ |reg| Legal motor controllers as of 2025: - DMC 60/DMC 60c Motor Controller (P/N: 410-334-1, 410-334-2) - Jaguar Motor Controller (P/N: MDL-BDC, MDL-BDC24, and 217-3367) connected to :term:`PWM` only diff --git a/source/docs/software/hardware-apis/motors/pwm-controllers.rst b/source/docs/software/hardware-apis/motors/pwm-controllers.rst index 0b63698378..ffc5466e07 100644 --- a/source/docs/software/hardware-apis/motors/pwm-controllers.rst +++ b/source/docs/software/hardware-apis/motors/pwm-controllers.rst @@ -12,7 +12,7 @@ The PWM signal the controllers use for an input is a little bit different. Even ## Raw vs Scaled output values -In general, all of the motor controller classes in WPILib take a scaled -1.0 to 1.0 value as the output to an actuator. The PWM module in the FPGA on the roboRIO is capable of generating PWM signals with periods of 5, 10, or 20ms and can vary the pulse width in 4096 steps of 1us each . The raw values sent to this module are in this 0-4096 range with 0 being a special case which holds the signal low (disabled). The class for each motor controller contains information about what the typical bound values (min, max and each side of the deadband) are as well as the typical midpoint. WPILib can then use these values to map the scaled value into the proper range for the motor controller. This allows for the code to switch seamlessly between different types of controllers and abstracts out the details of the specific signaling. +In general, all of the motor controller classes in WPILib take a scaled -1.0 to 1.0 value as the output to an actuator. The PWM module in the FPGA on the roboRIO is capable of generating PWM signals with periods of 5, 10, or 20ms and can vary the pulse width in 4096 steps of 1us each . The raw values sent to this module are in this 0-4096 range with 0 being a special case which holds the signal low (disabled). The class for each motor controller contains information about what the typical bound values (min, max, and each side of the deadband) are as well as the typical midpoint. WPILib can then use these values to map the scaled value into the proper range for the motor controller. This allows for the code to switch seamlessly between different types of controllers and abstracts out the details of the specific signaling. ## Calibrating Motor Controllers diff --git a/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst b/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst index 6c35834b89..da8848d888 100644 --- a/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst +++ b/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst @@ -68,7 +68,7 @@ Sometimes drivers feel that their drivetrain is driving too fast and want to lim Motor Safety is a mechanism in WPILib that takes the concept of a watchdog and breaks it out into one watchdog (Motor Safety timer) for each individual actuator. Note that this protection mechanism is in addition to the System Watchdog which is controlled by the Network Communications code and the FPGA and will disable all actuator outputs if it does not receive a valid data packet for 125ms. -The purpose of the Motor Safety mechanism is the same as the purpose of a watchdog timer, to disable mechanisms which may cause harm to themselves, people or property if the code locks up and does not properly update the actuator output. Motor Safety breaks this concept out on a per actuator basis so that you can appropriately determine where it is necessary and where it is not. Examples of mechanisms that should have motor safety enabled are systems like drive trains and arms. If these systems get latched on a particular value they could cause damage to their environment or themselves. An example of a mechanism that may not need motor safety is a spinning flywheel for a shooter. If this mechanism gets latched on a particular value it will simply continue spinning until the robot is disabled. By default Motor Safety is enabled for DifferentialDrive and MecanumDrive objects and disabled for all other motor controllers and servos. +The purpose of the Motor Safety mechanism is the same as the purpose of a watchdog timer, to disable mechanisms which may cause harm to themselves, people, or property if the code locks up and does not properly update the actuator output. Motor Safety breaks this concept out on a per actuator basis so that you can appropriately determine where it is necessary and where it is not. Examples of mechanisms that should have motor safety enabled are systems like drive trains and arms. If these systems get latched on a particular value they could cause damage to their environment or themselves. An example of a mechanism that may not need motor safety is a spinning flywheel for a shooter. If this mechanism gets latched on a particular value it will simply continue spinning until the robot is disabled. By default Motor Safety is enabled for DifferentialDrive and MecanumDrive objects and disabled for all other motor controllers and servos. The Motor Safety feature operates by maintaining a timer that tracks how long it has been since the feed() method has been called for that actuator. Code in the Driver Station class initiates a comparison of these timers to the timeout values for any actuator with safety enabled every 5 received packets (100ms nominal). The set() methods of each motor controller class and the set() and setAngle() methods of the servo class call feed() to indicate that the output of the actuator has been updated. @@ -306,7 +306,7 @@ The MecanumDrive class contains two different default modes of driving your robo ### Field-Oriented Driving -A 4th parameter can be supplied to the ``driveCartesian(double ySpeed, double xSpeed, double zRotation, double gyroAngle)`` method, the angle returned from a Gyro sensor. This will adjust the rotation value supplied. This is particularly useful with mecanum drive since, for the purposes of steering, the robot really has no front, back or sides. It can go in any direction. Adding the angle in degrees from a gyro object will cause the robot to move away from the drivers when the joystick is pushed forwards, and towards the drivers when it is pulled towards them, regardless of what direction the robot is facing. +A 4th parameter can be supplied to the ``driveCartesian(double ySpeed, double xSpeed, double zRotation, double gyroAngle)`` method, the angle returned from a Gyro sensor. This will adjust the rotation value supplied. This is particularly useful with mecanum drive since, for the purposes of steering, the robot really has no front, back, or sides. It can go in any direction. Adding the angle in degrees from a gyro object will cause the robot to move away from the drivers when the joystick is pushed forwards, and towards the drivers when it is pulled towards them, regardless of what direction the robot is facing. The use of field-oriented driving makes often makes the robot much easier to drive, especially compared to a "robot-oriented" drive system where the controls are reversed when the robot is facing the drivers. diff --git a/source/docs/software/networktables/reading-array-values-published-by-networktables.rst b/source/docs/software/networktables/reading-array-values-published-by-networktables.rst index 394761d1d8..87ccb1c1ec 100644 --- a/source/docs/software/networktables/reading-array-values-published-by-networktables.rst +++ b/source/docs/software/networktables/reading-array-values-published-by-networktables.rst @@ -10,7 +10,7 @@ Very often the values are for one or more areas of interest such as goals or gam You can verify the names of the NetworkTables topics used for publishing the values by using the Outline Viewer application. It is a C++ program in your user directory in the wpilib//tools folder. The application is started by selecting the "WPILib" menu in Visual Studio Code then Start Tool then "OutlineViewer". -In this case the values are stored in a table called GRIP and a sub-table called myContoursReport. You can see that the values are in brackets and there are 2 values in this case for each topic. The NetworkTables topic names are centerX, centerY, area, height and width. +In this case the values are stored in a table called GRIP and a sub-table called myContoursReport. You can see that the values are in brackets and there are 2 values in this case for each topic. The NetworkTables topic names are centerX, centerY, area, height, and width. Both of the following examples are extremely simplified programs that just illustrate the use of NetworkTables. All the code is in the robotInit() method so it's only run when the program starts up. In your programs, you would more likely get the values in code that is evaluating which direction to aim the robot in a command or a control loop during the autonomous or teleop periods. diff --git a/source/docs/software/pathplanning/index.rst b/source/docs/software/pathplanning/index.rst index ad81212d47..8fae5570e5 100644 --- a/source/docs/software/pathplanning/index.rst +++ b/source/docs/software/pathplanning/index.rst @@ -1,6 +1,6 @@ # Path Planning -Path Planning is the process of creating and following trajectories. These paths use the WPILib trajectory APIs for generation and a :ref:`LTV Unicycle Controller ` for following. This section highlights the process of characterizing your robot for system identification, trajectory following and usage of PathWeaver. Users may also want to read the :ref:`generic trajectory following documents ` for additional information about the API and non-commandbased usage. +Path Planning is the process of creating and following trajectories. These paths use the WPILib trajectory APIs for generation and a :ref:`LTV Unicycle Controller ` for following. This section highlights the process of characterizing your robot for system identification, trajectory following, and usage of PathWeaver. Users may also want to read the :ref:`generic trajectory following documents ` for additional information about the API and non-commandbased usage. ## Notice on Swerve Support diff --git a/source/docs/software/support/support-resources.rst b/source/docs/software/support/support-resources.rst index 2e0e8f8225..0cddbeccf6 100644 --- a/source/docs/software/support/support-resources.rst +++ b/source/docs/software/support/support-resources.rst @@ -18,8 +18,8 @@ In addition to this site there are a few other places teams may check for docume Stuck? Have a question not answered by the documentation? Official Support is provided on these forums: -- [NI FRC Support Forum](https://forums.ni.com/t5/Support/ct-p/Support) (roboRIO, LabVIEW and Driver Station software questions, as well as roboRIO repairs) -- [FIRST Inspires Control System Forum](https://forums.firstinspires.org/forum/general-discussions/first-programs/first-robotics-competition/competition-discussion/control-system?f=1338) (wiring, hardware and Driver Station questions) +- [NI FRC Support Forum](https://forums.ni.com/t5/Support/ct-p/Support) (roboRIO, LabVIEW, and Driver Station software questions, as well as roboRIO repairs) +- [FIRST Inspires Control System Forum](https://forums.firstinspires.org/forum/general-discussions/first-programs/first-robotics-competition/competition-discussion/control-system?f=1338) (wiring, hardware, and Driver Station questions) - [FIRST Inspires Programming Forum](https://forums.firstinspires.org/forum/general-discussions/first-programs/first-robotics-competition/competition-discussion/programming-aa) (programming questions for C++, Java, or LabVIEW) ## CTRE Support diff --git a/source/docs/software/vision-processing/introduction/cameraserver-class.rst b/source/docs/software/vision-processing/introduction/cameraserver-class.rst index 663db8e440..97d3486c25 100644 --- a/source/docs/software/vision-processing/introduction/cameraserver-class.rst +++ b/source/docs/software/vision-processing/introduction/cameraserver-class.rst @@ -44,7 +44,7 @@ The cscore library provides the lower level implementation to: - Get images from USB and HTTP cameras - Change camera settings (e.g. contrast and brightness) -- Change camera video modes (pixel format, resolution and frame rate) +- Change camera video modes (pixel format, resolution, and frame rate) - Act as a web server and serve images as a standard MJPEG stream - Convert images to/from OpenCV ``Mat`` objects for image processing diff --git a/source/docs/software/vision-processing/introduction/strategies-for-vision-programming.rst b/source/docs/software/vision-processing/introduction/strategies-for-vision-programming.rst index 3648cfedb2..e53c14a81e 100644 --- a/source/docs/software/vision-processing/introduction/strategies-for-vision-programming.rst +++ b/source/docs/software/vision-processing/introduction/strategies-for-vision-programming.rst @@ -11,7 +11,7 @@ There are many options for choosing the components for vision processing and whe ## OpenCV Computer Vision Library -**OpenCV** is an open source computer vision library that is widely used throughout academia and industry. It has support from hardware manufactures providing GPU accelerated processing, it has bindings for a number of languages including C++, Java, and Python. It is also well documented with many web sites, books, videos, and training courses so there are lots of resources available to help learn how to use it. The C++ and Java versions of WPILib include the OpenCV libraries, there is support in the library for capturing, processing and viewing video, and tools to help you create your vision algorithms. For more information about OpenCV see https://opencv.org. +**OpenCV** is an open source computer vision library that is widely used throughout academia and industry. It has support from hardware manufactures providing GPU accelerated processing, it has bindings for a number of languages including C++, Java, and Python. It is also well documented with many web sites, books, videos, and training courses so there are lots of resources available to help learn how to use it. The C++ and Java versions of WPILib include the OpenCV libraries, there is support in the library for capturing, processing, and viewing video, and tools to help you create your vision algorithms. For more information about OpenCV see https://opencv.org. ## Vision Code on roboRIO @@ -31,7 +31,7 @@ Using functions provided by the CameraServer class, the video stream can be sent When vision code is running on the DS computer, the video is streamed back to the Driver Station laptop for processing. Even the older Classmate laptops are substantially faster at vision processing than the roboRIO. You can write your own vision program using a language of your choosing. Python makes a good choice since there is a native NetworkTables implementation and the OpenCV bindings are very good. -After the images are processed, the key values such as the target position, distance or anything else you need can be sent back to the robot with NetworkTables. This approach generally has higher latency, as delay is added due to the images needing to be sent to the laptop. Bandwidth limitations also limit the maximum resolution and FPS of the images used for processing. +After the images are processed, the key values such as the target position, distance, or anything else you need can be sent back to the robot with NetworkTables. This approach generally has higher latency, as delay is added due to the images needing to be sent to the laptop. Bandwidth limitations also limit the maximum resolution and FPS of the images used for processing. The video stream can be displayed on Shuffleboard or SmartDashboard. diff --git a/source/docs/software/vision-processing/roborio/cameraserver-webserver.rst b/source/docs/software/vision-processing/roborio/cameraserver-webserver.rst index b446e356b7..c8226063b6 100644 --- a/source/docs/software/vision-processing/roborio/cameraserver-webserver.rst +++ b/source/docs/software/vision-processing/roborio/cameraserver-webserver.rst @@ -9,7 +9,7 @@ When CameraServer opens a camera, it creates a webpage that you can use to view .. image:: images/cameraserver-webserver/cameraserver-webserver-settings.png :alt: CameraServer webpage showing camera image and settings sliders. -The web server will show a live camera image and has sliders to adjust various camera settings, such as brightness, contrast, sharpness and many other options. You can adjust the values and see the results live, and then use the ``VideoCamera`` class to set those in your robot code. +The web server will show a live camera image and has sliders to adjust various camera settings, such as brightness, contrast, sharpness, and many other options. You can adjust the values and see the results live, and then use the ``VideoCamera`` class to set those in your robot code. ## Camera Video Modes diff --git a/source/docs/software/vision-processing/wpilibpi/the-raspberry-pi-frc-console.rst b/source/docs/software/vision-processing/wpilibpi/the-raspberry-pi-frc-console.rst index ea7f58e1b5..a1a4537559 100644 --- a/source/docs/software/vision-processing/wpilibpi/the-raspberry-pi-frc-console.rst +++ b/source/docs/software/vision-processing/wpilibpi/the-raspberry-pi-frc-console.rst @@ -126,7 +126,7 @@ The running application can be changed by selecting one of the choices in the dr .. figure:: images/the-raspberry-pi-frc-console/application-2.png -When selecting one of the Upload options, a file chooser is presented where the jar, executable or Python program can be +When selecting one of the Upload options, a file chooser is presented where the jar, executable, or Python program can be selected and uploaded to the rPi. In the following picture an Uploaded Java jar is chosen and the "Choose File" button will select a file and clicking on the "Save" button will upload the selected file. diff --git a/source/docs/software/vscode-overview/vscode-basics.rst b/source/docs/software/vscode-overview/vscode-basics.rst index 54e30b5a73..8cca393900 100644 --- a/source/docs/software/vscode-overview/vscode-basics.rst +++ b/source/docs/software/vscode-overview/vscode-basics.rst @@ -26,7 +26,7 @@ In the following example "wpilib" is typed into the search box after activating |WPILib Commands| -The WPILib extension provides the FRC\ |reg| specific functionality related to creating projects and project components, building and downloading code to the roboRIO and more. You can access the WPILib commands one of two ways: +The WPILib extension provides the FRC\ |reg| specific functionality related to creating projects and project components, building, and downloading code to the roboRIO and more. You can access the WPILib commands one of two ways: - By typing "WPILib" into the Command Palette - By clicking on the WPILib icon in the top right of most windows. This will open the Command Palette with "WPILib" pre-entered diff --git a/source/docs/software/wpilib-tools/outlineviewer/index.rst b/source/docs/software/wpilib-tools/outlineviewer/index.rst index 0a2767c894..ce40a599c0 100644 --- a/source/docs/software/wpilib-tools/outlineviewer/index.rst +++ b/source/docs/software/wpilib-tools/outlineviewer/index.rst @@ -2,13 +2,13 @@ .. image:: /docs/controls-overviews/images/control-system-software/outline-viewer.png -OutlineViewer is a utility used to view, modify and add to the contents of the NetworkTables for debugging purposes. It displays all key value pairs currently in the NetworkTables and can be used to modify the value of existing keys or add new keys to the table. OutlineViewer is included in the Java and C++ language installations. +OutlineViewer is a utility used to view, modify, and add to the contents of the NetworkTables for debugging purposes. It displays all key value pairs currently in the NetworkTables and can be used to modify the value of existing keys or add new keys to the table. OutlineViewer is included in the Java and C++ language installations. In Visual Studio Code, press :kbd:`Ctrl+Shift+P` and type ``WPILib`` or click the WPILib logo in the top right to launch the WPILib Command Palette. Select :guilabel:`Start Tool`, then select :guilabel:`OutlineViewer`. To connect to your robot, open OutlineViewer and select :guilabel:`options` then :guilabel:`settings` and set the ``Team/IP`` to be your team number. After you click :guilabel:`Apply`, OutlineViewer will connect. If you have trouble connecting to OutlineViewer please see the :doc:`Dashboard Troubleshooting Steps `. -.. note:: You can use ``localhost`` instead of a team number to point OutlineViewer at a simulated robot, Romi or XRP. +.. note:: You can use ``localhost`` instead of a team number to point OutlineViewer at a simulated robot, Romi, or XRP. .. image:: images/outlineviewer.png diff --git a/source/docs/software/wpilib-tools/robotbuilder/introduction/robotbuilder-overview.rst b/source/docs/software/wpilib-tools/robotbuilder/introduction/robotbuilder-overview.rst index 5553bfd317..f87a075d64 100644 --- a/source/docs/software/wpilib-tools/robotbuilder/introduction/robotbuilder-overview.rst +++ b/source/docs/software/wpilib-tools/robotbuilder/introduction/robotbuilder-overview.rst @@ -40,7 +40,7 @@ For more information see :doc:`Creating a Subsystem `. +.. note:: This document covers how to create, build, and load a basic FRC\ |reg| LabVIEW program for a drivetrain onto a roboRIO. Before beginning, make sure that you have installed LabVIEW for FRC and the FRC Game Tools and that you have configured and imaged your roboRIO as described in the :ref:`Zero-to-Robot tutorial `. ## Creating a Project diff --git a/source/index.rst b/source/index.rst index b1b7c18731..e9012307f0 100644 --- a/source/index.rst +++ b/source/index.rst @@ -63,7 +63,7 @@ Community translations can be found in a variety of languages in the menu toward ^^^ - The Zero-to-Robot tutorial will guide you through preparation, wiring and programming a basic robot! + The Zero-to-Robot tutorial will guide you through preparation, wiring, and programming a basic robot! +++ From 627e8b83e0b4cdcfe34cf7ad68de19898f8e5df1 Mon Sep 17 00:00:00 2001 From: Billfred Leverette <44166106+Billfred@users.noreply.github.com> Date: Fri, 20 Jun 2025 23:35:17 -0400 Subject: [PATCH 007/135] Update hardware-and-imaging.rst (#3048) Changed the cable to a USB-C one as non-beta XRPs use that, and updated the Micro USB link to one that's actually available. --------- Co-authored-by: sciencewhiz --- source/docs/xrp-robot/hardware-and-imaging.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/docs/xrp-robot/hardware-and-imaging.rst b/source/docs/xrp-robot/hardware-and-imaging.rst index b77f4e63f8..449ffe8ab6 100644 --- a/source/docs/xrp-robot/hardware-and-imaging.rst +++ b/source/docs/xrp-robot/hardware-and-imaging.rst @@ -3,7 +3,7 @@ To get started with the XRP, you will need to have the necessary hardware. 1. XRP Kit [from SparkFun](https://www.sparkfun.com/products/22230) or [from DigiKey](https://www.digikey.com/en/products/detail/sparkfun-electronics/KIT-22296/19117674) - Available at a discount for educational institutions or FIRST teams. See individual vendors for details. -2. [Micro-USB cable](https://www.amazon.com/dp/B0711PVX6Z) - Ensure that this is a data cable +2. [USB-C cable](https://www.amazon.com/dp/B01GGKYN0A). Beta versions of XRP use a [Micro-USB cable](https://www.amazon.com/dp/B07232M876) - Ensure that this is a data cable 3. [4 AA batteries](https://www.amazon.com/gp/product/B07TW9T8JW/) - Rechargeable ([example](https://www.amazon.com/AmazonBasics-AA-High-Capacity-Rechargeable-4-Pack/dp/B081FF82RK)) is best (don't forget the charger) ## Assembly From 2ef5730f60f55ebcd40609b6eabf95f39133659d Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Sat, 21 Jun 2025 08:53:58 -0700 Subject: [PATCH 008/135] Update urllib3, Requests, Jinja2 (#3065) Fixes dependabot alerts Unpin urllib3 since it's no longer maintained --- poetry.lock | 31 ++++++++++++++++--------------- pyproject.toml | 1 - source/requirements.txt | 6 +++--- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2c1a441014..63d011f4d4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -963,13 +963,13 @@ type = ["pytest-mypy"] [[package]] name = "jinja2" -version = "3.1.5" +version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, - {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, ] [package.dependencies] @@ -1645,18 +1645,18 @@ six = ">=1.5" [[package]] name = "requests" -version = "2.32.3" +version = "2.32.4" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, + {file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"}, + {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" +charset_normalizer = ">=2,<4" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<3" @@ -2454,19 +2454,20 @@ files = [ [[package]] name = "urllib3" -version = "1.26.20" +version = "2.5.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.9" files = [ - {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, - {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, + {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, + {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, ] [package.extras] -brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "webencodings" @@ -2574,4 +2575,4 @@ test = ["pytest"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "c11a9e04c9e655b199e0ead1a7b28f9d5feafba829e5fe76c8f79ff9dbac0768" +content-hash = "c8628a9250eea176452528768cb27227f2d9c053113a1e69fb30cd22463f4cc7" diff --git a/pyproject.toml b/pyproject.toml index 8a2d5f13ed..3df1bea87e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,7 +38,6 @@ sphinxext-presentations = "==0.3.1" sphinxext-rediraffe = "==0.2.7" sphinxext-remoteliteralinclude = "==0.6.0" sphinxext-toptranslators = "==0.1.3" -urllib3 = ">=1.26.6, <2.0.0" frccontrol = "==2023.28" [tool.poetry.dev-dependencies] diff --git a/source/requirements.txt b/source/requirements.txt index d838165d0d..0245522b43 100644 --- a/source/requirements.txt +++ b/source/requirements.txt @@ -35,7 +35,7 @@ idna==3.10 ; python_version >= "3.9" and python_version < "3.13" imagesize==1.4.1 ; python_version >= "3.9" and python_version < "3.13" importlib-metadata==8.5.0 ; python_version >= "3.9" and python_version < "3.10" importlib-resources==6.4.5 ; python_version >= "3.9" and python_version < "3.10" -jinja2==3.1.5 ; python_version >= "3.9" and python_version < "3.13" +jinja2==3.1.6 ; python_version >= "3.9" and python_version < "3.13" jsmin==3.0.1 ; python_version >= "3.9" and python_version < "3.13" kiwisolver==1.4.7 ; python_version >= "3.9" and python_version < "3.13" latex==0.7.0 ; python_version >= "3.9" and python_version < "3.13" @@ -57,7 +57,7 @@ pycparser==2.22 ; platform_python_implementation != "CPython" and python_version pygments==2.18.0 ; python_version >= "3.9" and python_version < "3.13" pyparsing==3.1.4 ; python_version >= "3.9" and python_version < "3.13" python-dateutil==2.9.0.post0 ; python_version >= "3.9" and python_version < "3.13" -requests==2.32.3 ; python_version >= "3.9" and python_version < "3.13" +requests==2.32.4 ; python_version >= "3.9" and python_version < "3.13" restructuredtext-lint==1.4.0 ; python_version >= "3.9" and python_version < "3.13" ruamel-yaml-clib==0.2.8 ; platform_python_implementation == "CPython" and python_version < "3.13" and python_version >= "3.9" ruamel-yaml==0.18.6 ; python_version >= "3.9" and python_version < "3.13" @@ -103,7 +103,7 @@ tempdir==0.7.1 ; python_version >= "3.9" and python_version < "3.13" tinycss2==1.3.0 ; python_version >= "3.9" and python_version < "3.13" tomli==2.0.2 ; python_version >= "3.9" and python_version < "3.11" typing-extensions==4.12.2 ; python_version >= "3.9" and python_version < "3.13" -urllib3==1.26.20 ; python_version >= "3.9" and python_version < "3.13" +urllib3==2.5.0 ; python_version >= "3.9" and python_version < "3.13" webencodings==0.5.1 ; python_version >= "3.9" and python_version < "3.13" zipp==3.20.2 ; python_version >= "3.9" and python_version < "3.10" zopfli==0.2.3 ; python_version >= "3.9" and python_version < "3.13" From 6310dcbf809db166ed7e3dd60bf5867f30e5b158 Mon Sep 17 00:00:00 2001 From: Chris Gerth Date: Sun, 22 Jun 2025 18:37:19 -0500 Subject: [PATCH 009/135] Adding section about pinning dependencies (#3062) --- .../software/vscode-overview/3rd-party-libraries.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/docs/software/vscode-overview/3rd-party-libraries.rst b/source/docs/software/vscode-overview/3rd-party-libraries.rst index eb0539536b..33a2ec50a7 100644 --- a/source/docs/software/vscode-overview/3rd-party-libraries.rst +++ b/source/docs/software/vscode-overview/3rd-party-libraries.rst @@ -89,6 +89,16 @@ Vendor dependencies are installed on a per-project basis (so each robot project | URCL | Community | | robotpy-urcl | +---------------------+-----------+-------------------+---------------------------+ + When using ``requires``, you can specify a version by appending ``==`` to the package name, e.g. ``robotpy-commands-v2==2024.0.0``. If you do not specify a version, the latest version will be installed. + + To check what version of packages are currently installed, run the command ``pip list``. + + Note that pinning versions may cause issues with incompatibilities between different components. Unpinning all versions, installing, then re-pinning to the latest set is a good practice when updating. + + Pinning versions is a good practice to do after most robot code is written and validated, before and during a competition. However, outside of this window, remaining on the latest version of the components is recommended, as it will ensure you have the latest bug fixes and features. + + See https://pip.pypa.io/en/stable/topics/repeatable-installs/ for more information on how to specify versions. + .. tab-item:: Java/C++ (Legacy) :sync: javacpplegacy From 7cb2360b0fd61c31a5c30fc353c0f9787f44108a Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Sun, 22 Jun 2025 18:22:20 -0700 Subject: [PATCH 010/135] Fix broken links (#3069) Update link to AdvantageScope 2025 changes to CD post, since removed from AdvantageScope website Update link to Spark Max getting started Ignore filezilla and miktex as they are blocking --- source/conf.py | 2 ++ source/docs/yearly-overview/yearly-changelog.rst | 2 +- source/docs/zero-to-robot/step-1/basic-robot-wiring.rst | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/source/conf.py b/source/conf.py index 8bc1805fb8..a636c4ffdc 100644 --- a/source/conf.py +++ b/source/conf.py @@ -159,6 +159,8 @@ r".*digilent.com.*", r".*digilentinc.com.*", r".*electrodragon.com.*", + r".*filezilla-project.org.*", + r".*miktex.org.*", ] linkcheck_anchors_ignore_for_url = [ diff --git a/source/docs/yearly-overview/yearly-changelog.rst b/source/docs/yearly-overview/yearly-changelog.rst index 3777df905b..95756cd2f6 100644 --- a/source/docs/yearly-overview/yearly-changelog.rst +++ b/source/docs/yearly-overview/yearly-changelog.rst @@ -267,7 +267,7 @@ Supported Operating Systems and Architectures: ## AdvantageScope -- Update to [2025 AdvantageScope](https://docs.advantagescope.org/whats-new) +- Update to [2025 AdvantageScope](https://www.chiefdelphi.com/t/advantagescope-2025-swift-simple-smart/471922) ## Elastic diff --git a/source/docs/zero-to-robot/step-1/basic-robot-wiring.rst b/source/docs/zero-to-robot/step-1/basic-robot-wiring.rst index 1e8b1281ae..46afe6334a 100644 --- a/source/docs/zero-to-robot/step-1/basic-robot-wiring.rst +++ b/source/docs/zero-to-robot/step-1/basic-robot-wiring.rst @@ -643,6 +643,6 @@ If stuff blinks, you probably did it right. If you hear any clicking, or see any Before moving on, if using SPARK MAX controllers, there is one more configuration step to complete. The SPARK MAX motor controllers are configured to control a brushless motor by default. You can verify this by checking that the light on the controller is blinking either cyan or magenta (indicating brushless brake or brushless coast respectively). To change to brushed mode, press and hold the mode button for 3-4 seconds until the status LED changes color. The LED should change to either blue or yellow, indicating that the controller is in brushed mode (brake or coast respectively). To change the brake or coast mode, which controls how quickly the motor slows down when a neutral signal is applied, press the mode button briefly. -.. tip:: For more information on the SPARK MAX motor controllers, including how to test your motors/controllers without writing any code by using the REV Hardware Client, see the [SPARK MAX Quickstart guide](https://docs.revrobotics.com/sparkmax/gs-sm). +.. tip:: For more information on the SPARK MAX motor controllers, including how to test your motors/controllers without writing any code by using the REV Hardware Client, see the [SPARK MAX Quickstart guide](https://docs.revrobotics.com/brushless/spark-max/gs). From here, you should connect to the roboRIO and try uploading your code! From d9ecc0294f825362d7320d3bf42f63d3ebacb005 Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Tue, 24 Jun 2025 18:05:12 -0700 Subject: [PATCH 011/135] Fix another SparkMax link (#3070) --- source/docs/zero-to-robot/step-1/intro-to-frc-robot-wiring.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/docs/zero-to-robot/step-1/intro-to-frc-robot-wiring.rst b/source/docs/zero-to-robot/step-1/intro-to-frc-robot-wiring.rst index 7ec216c96d..0db6e2badd 100644 --- a/source/docs/zero-to-robot/step-1/intro-to-frc-robot-wiring.rst +++ b/source/docs/zero-to-robot/step-1/intro-to-frc-robot-wiring.rst @@ -337,7 +337,7 @@ If stuff blinks, you probably did it right. If you hear any clicking, or see any Before moving on, if using SPARK MAX controllers, there is one more configuration step to complete. The SPARK MAX motor controllers are configured to control a brushless motor by default. You can verify this by checking that the light on the controller is blinking either cyan or magenta (indicating brushless brake or brushless coast respectively). To change to brushed mode, press and hold the mode button for 3-4 seconds until the status LED changes color. The LED should change to either blue or yellow, indicating that the controller is in brushed mode (brake or coast respectively). To change the brake or coast mode, which controls how quickly the motor slows down when a neutral signal is applied, press the mode button briefly. -.. tip:: For more information on the SPARK MAX motor controllers, including how to test your motors/controllers without writing any code by using the REV Hardware Client, see the [SPARK MAX Quickstart guide](https://docs.revrobotics.com/sparkmax/gs-sm). +.. tip:: For more information on the SPARK MAX motor controllers, including how to test your motors/controllers without writing any code by using the REV Hardware Client, see the [SPARK MAX Quickstart guide](https://docs.revrobotics.com/brushless/spark-max/gs). From here, you should continue on to install software and configure your radio and roboRIO, then load up the provided KitBot code. From 15a4151f73dd5c63a45524d1ba413ee11c8bb740 Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Fri, 27 Jun 2025 07:55:16 -0700 Subject: [PATCH 012/135] Add deprecation notice for RobotBuilder, Shuffleboard (#3064) --- source/docs/software/dashboards/dashboard-intro.rst | 2 +- .../dashboards/shuffleboard/getting-started/index.rst | 2 ++ .../shuffleboard/getting-started/shuffleboard-tour.rst | 2 ++ source/docs/software/dashboards/shuffleboard/index.rst | 2 ++ source/docs/software/wpilib-tools/robotbuilder/index.rst | 2 ++ .../software/wpilib-tools/robotbuilder/introduction/index.rst | 2 ++ .../robotbuilder/introduction/robotbuilder-overview.rst | 2 ++ source/docs/yearly-overview/yearly-changelog.rst | 4 ++++ 8 files changed, 17 insertions(+), 1 deletion(-) diff --git a/source/docs/software/dashboards/dashboard-intro.rst b/source/docs/software/dashboards/dashboard-intro.rst index f673aabffa..e01677a65c 100644 --- a/source/docs/software/dashboards/dashboard-intro.rst +++ b/source/docs/software/dashboards/dashboard-intro.rst @@ -14,7 +14,7 @@ This dashboard is designed for debugging code and analyzing data from the robot. ## Included Dashboards (oldest to newest) -.. note:: SmartDashboard and Shuffleboard have a long history of aiding FRC teams. However, they do not have a person to maintain them so are not receiving bug fixes or improvements. Notably, Shuffleboard may experience performance issues on some machines under certain scenarios. PRs from external contributors will be reviewed. +.. note:: SmartDashboard and Shuffleboard have a long history of aiding FRC teams. However, they do not have a person to maintain them so are not receiving bug fixes or improvements. Notably, Shuffleboard may experience performance issues on some machines under certain scenarios. PRs from external contributors will be reviewed. They are deprecated and will be removed for the 2027 season. :ref:`LabVIEW Dashboard ` (Driver / Programming) - easy to use and provides a lot of features straight out of the box like: camera streams, autonomous selection, and joystick feedback. It can be customized using LabVIEW by creating a new Dashboard project. While it :ref:`can be used ` by Java or C++ teams, they generally prefer SmartDashboard or Shuffleboard which can be customized in their respective language. diff --git a/source/docs/software/dashboards/shuffleboard/getting-started/index.rst b/source/docs/software/dashboards/shuffleboard/getting-started/index.rst index 550fef1a3c..4781ba92d7 100644 --- a/source/docs/software/dashboards/shuffleboard/getting-started/index.rst +++ b/source/docs/software/dashboards/shuffleboard/getting-started/index.rst @@ -1,5 +1,7 @@ # Shuffleboard - Getting Started +.. warning:: Shuffleboard is deprecated and will be removed for 2027 due to its lack of a maintainer and resource utilization issues. Users can find :doc:`additional modern dashboard options here ` + .. toctree:: :maxdepth: 1 diff --git a/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-tour.rst b/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-tour.rst index 894301312d..4091924acd 100644 --- a/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-tour.rst +++ b/source/docs/software/dashboards/shuffleboard/getting-started/shuffleboard-tour.rst @@ -2,6 +2,8 @@ # Tour of Shuffleboard +.. warning:: Shuffleboard is deprecated and will be removed for 2027 due to its lack of a maintainer and resource utilization issues. Users can find :doc:`additional modern dashboard options here ` + Shuffleboard is a dashboard for FRC\ |reg| based on newer technologies such as JavaFX that are available to Java programs. It is designed to be used for creating dashboards for C++, Java, and Python programs. If you've used SmartDashboard in the past then you are already familiar with many of the features of Shuffleboard since they fundamentally work the same way. But Shuffleboard has many features that aren't in SmartDashboard. Here are some of the highlights: - Graphics is based on **JavaFX**, the Java graphics standard. Each of the components has an associated style sheet so it becomes possible to have different "skins" or "themes" for Shuffleboard. We supply default light and dark themes. diff --git a/source/docs/software/dashboards/shuffleboard/index.rst b/source/docs/software/dashboards/shuffleboard/index.rst index d85ee60c4d..d29b93726a 100644 --- a/source/docs/software/dashboards/shuffleboard/index.rst +++ b/source/docs/software/dashboards/shuffleboard/index.rst @@ -2,6 +2,8 @@ Shuffleboard is a straightforward and easily customizable driveteam focused dashboard. It displays network tables data using a variety of widgets that can be positioned and controlled with robot code. It includes many extra features like: tabs, recording / playback, and advanced custom widgets. +.. warning:: Shuffleboard is deprecated and will be removed for 2027 due to its lack of a maintainer and resource utilization issues. Users can find :doc:`additional modern dashboard options here ` + .. toctree:: :maxdepth: 2 diff --git a/source/docs/software/wpilib-tools/robotbuilder/index.rst b/source/docs/software/wpilib-tools/robotbuilder/index.rst index 500adb8708..2eeb37a3ba 100644 --- a/source/docs/software/wpilib-tools/robotbuilder/index.rst +++ b/source/docs/software/wpilib-tools/robotbuilder/index.rst @@ -1,5 +1,7 @@ # RobotBuilder +.. warning:: RobotBuilder is deprecated and will be removed for 2027 due to its declining usage and burden of updating for the 2027 control system. + .. toctree:: :maxdepth: 2 diff --git a/source/docs/software/wpilib-tools/robotbuilder/introduction/index.rst b/source/docs/software/wpilib-tools/robotbuilder/introduction/index.rst index 9cc1ab749f..039e2e720a 100644 --- a/source/docs/software/wpilib-tools/robotbuilder/introduction/index.rst +++ b/source/docs/software/wpilib-tools/robotbuilder/introduction/index.rst @@ -1,5 +1,7 @@ # RobotBuilder - Introduction +.. warning:: RobotBuilder is deprecated and will be removed for 2027 due to its declining usage and burden of updating for the 2027 control system. + .. toctree:: :maxdepth: 1 diff --git a/source/docs/software/wpilib-tools/robotbuilder/introduction/robotbuilder-overview.rst b/source/docs/software/wpilib-tools/robotbuilder/introduction/robotbuilder-overview.rst index f87a075d64..ace4986ab9 100644 --- a/source/docs/software/wpilib-tools/robotbuilder/introduction/robotbuilder-overview.rst +++ b/source/docs/software/wpilib-tools/robotbuilder/introduction/robotbuilder-overview.rst @@ -2,6 +2,8 @@ # RobotBuilder Overview +.. warning:: RobotBuilder is deprecated and will be removed for 2027 due to its declining usage and burden of updating for the 2027 control system. + RobotBuilder is an application designed to aid the robot development process. RobotBuilder can help you: - Generating boilerplate code. diff --git a/source/docs/yearly-overview/yearly-changelog.rst b/source/docs/yearly-overview/yearly-changelog.rst index 95756cd2f6..994b73aaf1 100644 --- a/source/docs/yearly-overview/yearly-changelog.rst +++ b/source/docs/yearly-overview/yearly-changelog.rst @@ -193,6 +193,8 @@ Supported Operating Systems and Architectures: ## Shuffleboard +.. warning:: Shuffleboard is deprecated and will be removed for 2027 due to its lack of a maintainer and resource utilization issues. Users can find :doc:`additional modern dashboard options here ` + - Expose orientation property for NumberSlider - Add :doc:`persistent alerts widget ` - Correct FieldData de/serialization @@ -249,6 +251,8 @@ Supported Operating Systems and Architectures: ## RobotBuilder +.. warning:: RobotBuilder is deprecated and will be removed for 2027 due to its declining usage and burden of updating for the 2027 control system. + - Remove robotInit in favor of Robot constructor ## SysId From f763de089626ec83bf2a055ddd0dafc4f41afc3f Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Sat, 28 Jun 2025 10:46:04 -0700 Subject: [PATCH 013/135] Fix yet another Spark Max link (#3071) --- .../step-4/creating-test-drivetrain-program-cpp-java-python.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/docs/zero-to-robot/step-4/creating-test-drivetrain-program-cpp-java-python.rst b/source/docs/zero-to-robot/step-4/creating-test-drivetrain-program-cpp-java-python.rst index 6a858c8787..11fa31ce7b 100644 --- a/source/docs/zero-to-robot/step-4/creating-test-drivetrain-program-cpp-java-python.rst +++ b/source/docs/zero-to-robot/step-4/creating-test-drivetrain-program-cpp-java-python.rst @@ -5,7 +5,7 @@ Once everything is installed, we're ready to create a robot program. WPILib com * :ref:`create_java_cpp_project` * :ref:`create_python_project` -.. important:: This guide includes code examples that involve vendor hardware for the convenience of the user. In this document, :term:`PWM` refers to the motor controller included in the KOP. The CTRE tab references the Talon FX motor controller (Falcon 500 motor), but usage is similar for TalonSRX and VictorSPX. The REV tab references the CAN SPARK MAX controlling a brushless motor, but it's similar for brushed motor. There is an assumption that the user has already installed the required :doc:`vendordeps ` and configured the device(s) (update firmware, assign CAN IDs, etc) according to the manufacturer documentation ([CTRE](https://docs.ctr-electronics.com/) [REV](https://docs.revrobotics.com/sparkmax/gs-sm)). +.. important:: This guide includes code examples that involve vendor hardware for the convenience of the user. In this document, :term:`PWM` refers to the motor controller included in the KOP. The CTRE tab references the Talon FX motor controller (Falcon 500 motor), but usage is similar for TalonSRX and VictorSPX. The REV tab references the CAN SPARK MAX controlling a brushless motor, but it's similar for brushed motor. There is an assumption that the user has already installed the required :doc:`vendordeps ` and configured the device(s) (update firmware, assign CAN IDs, etc) according to the manufacturer documentation ([CTRE](https://docs.ctr-electronics.com/) / [REV](https://docs.revrobotics.com/brushless/spark-max/gs)). .. _create_java_cpp_project: From e981dae9d9304b851eb0b146511c409f6e31d682 Mon Sep 17 00:00:00 2001 From: Warren Reynolds <43365474+w-reynolds@users.noreply.github.com> Date: Sat, 5 Jul 2025 06:01:37 +1000 Subject: [PATCH 014/135] Fix C++ code snipet for runIntakeCommand(double percentage) (#3072) --- .../commandbased/organizing-command-based.rst | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/source/docs/software/commandbased/organizing-command-based.rst b/source/docs/software/commandbased/organizing-command-based.rst index 699022b797..acec4d78d5 100644 --- a/source/docs/software/commandbased/organizing-command-based.rst +++ b/source/docs/software/commandbased/organizing-command-based.rst @@ -30,11 +30,11 @@ The easiest and most expressive way to do this is with a ``StartEndCommand``: .. tab-set-code:: ```java - Command runIntake = Commands.startEnd(() -> intake.set(1), () -> intake.set(0), intake); + Command runIntake = Commands.startEnd(() -> intake.set(1.0), () -> intake.set(0.0), intake); ``` ```c++ - frc2::CommandPtr runIntake = frc2::cmd::StartEnd([&intake] { intake.Set(1.0); }, [&intake] { intake.Set(0); }, {&intake}); + frc2::CommandPtr runIntake = frc2::cmd::StartEnd([&intake] { intake.Set(1.0); }, [&intake] { intake.Set(0.0); }, {&intake}); ``` This is sufficient for commands that are only used once. However, for a command like this that might get used in many different autonomous routines and button bindings, inline commands everywhere means a lot of repetitive code: @@ -43,8 +43,8 @@ This is sufficient for commands that are only used once. However, for a command ```java // RobotContainer.java - intakeButton.whileTrue(Commands.startEnd(() -> intake.set(1.0), () -> intake.set(0), intake)); - Command intakeAndShoot = Commands.startEnd(() -> intake.set(1.0), () -> intake.set(0), intake) + intakeButton.whileTrue(Commands.startEnd(() -> intake.set(1.0), () -> intake.set(0.0), intake)); + Command intakeAndShoot = Commands.startEnd(() -> intake.set(1.0), () -> intake.set(0.0), intake) .alongWith(new RunShooter(shooter)); Command autonomousCommand = Commands.sequence( Commands.startEnd(() -> intake.set(1.0), () -> intake.set(0.0), intake).withTimeout(5.0), @@ -54,13 +54,13 @@ This is sufficient for commands that are only used once. However, for a command ``` ```c++ - intakeButton.WhileTrue(frc2::cmd::StartEnd([&intake] { intake.Set(1.0); }, [&intake] { intake.Set(0); }, {&intake})); - frc2::CommandPtr intakeAndShoot = frc2::cmd::StartEnd([&intake] { intake.Set(1.0); }, [&intake] { intake.Set(0); }, {&intake}) + intakeButton.WhileTrue(frc2::cmd::StartEnd([&intake] { intake.Set(1.0); }, [&intake] { intake.Set(0.0); }, {&intake})); + frc2::CommandPtr intakeAndShoot = frc2::cmd::StartEnd([&intake] { intake.Set(1.0); }, [&intake] { intake.Set(0.0); }, {&intake}) .AlongWith(RunShooter(&shooter).ToPtr()); frc2::CommandPtr autonomousCommand = frc2::cmd::Sequence( - frc2::cmd::StartEnd([&intake] { intake.Set(1.0); }, [&intake] { intake.Set(0); }, {&intake}).WithTimeout(5.0_s), + frc2::cmd::StartEnd([&intake] { intake.Set(1.0); }, [&intake] { intake.Set(0.0); }, {&intake}).WithTimeout(5.0_s), frc2::cmd::Wait(3.0_s), - frc2::cmd::StartEnd([&intake] { intake.Set(1.0); }, [&intake] { intake.Set(0); }, {&intake}).WithTimeout(5.0_s) + frc2::cmd::StartEnd([&intake] { intake.Set(1.0); }, [&intake] { intake.Set(0.0); }, {&intake}).WithTimeout(5.0_s) ); ``` @@ -90,7 +90,7 @@ For example, a command like the intake-running command is conceptually related t ```c++ frc2::CommandPtr Intake::RunIntakeCommand() { // implicitly requires `this` - return this->StartEnd([this] { this->Set(1.0); }, [this] { this->Set(0); }); + return this->StartEnd([this] { this->Set(1.0); }, [this] { this->Set(0.0); }); } ``` @@ -133,9 +133,9 @@ Adding a parameter to the ``runIntakeCommand`` method to provide the exact perce ``` ```c++ - frc2::CommandPtr Intake::RunIntakeCommand() { + frc2::CommandPtr Intake::RunIntakeCommand(double percent) { // implicitly requires `this` - return this->StartEnd([this, percent] { this->Set(percent); }, [this] { this->Set(0); }); + return this->StartEnd([this, percent] { this->Set(percent); }, [this] { this->Set(0.0); }); } ``` From 186d6b8c545f52ea0b6196191ca846f90d2a95e8 Mon Sep 17 00:00:00 2001 From: crueter Date: Sun, 6 Jul 2025 19:03:08 -0400 Subject: [PATCH 015/135] [dashboards] reference QDash over QFRCDashboard (#3074) also updated the description a bit --- source/docs/software/dashboards/dashboard-intro.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/docs/software/dashboards/dashboard-intro.rst b/source/docs/software/dashboards/dashboard-intro.rst index e01677a65c..bf80def719 100644 --- a/source/docs/software/dashboards/dashboard-intro.rst +++ b/source/docs/software/dashboards/dashboard-intro.rst @@ -32,4 +32,4 @@ This dashboard is designed for debugging code and analyzing data from the robot. [FRC Web Components](https://github.com/frc-web-components/frc-web-components) (Driver) - A web-based dashboard that can be installed as a standalone application, or as a JavaScript package for custom dashboard solutions. -[QFRCDashboard](https://github.com/Q-FRC/Dashboard) (Driver) - described as reliable, high-performance, low-footprint dashboard. QFRCDashboard has been specifically designed to use as few resources as possible. +[QDash](https://github.com/Q-FRC/QDash) (Driver) - described as a reliable, high-performance, low-footprint dashboard. QDash has been specifically designed to use as few resources as possible without sacrificing features or aesthetics. From 65880f912576555200f2a7ea5823da382bb95fb1 Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Sun, 13 Jul 2025 16:57:38 -0700 Subject: [PATCH 016/135] Update miktex packages (#3078) --- miktex-packages.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/miktex-packages.txt b/miktex-packages.txt index ef1978b13d..ddb386e5b5 100644 --- a/miktex-packages.txt +++ b/miktex-packages.txt @@ -257,3 +257,7 @@ zerohyph zhmetrics colortbl letltxmacro +fontawesome5 +pict2e +ellipse +booktabs From 736cd53a03065eeaa562f2d67ec76cc005f7d5ba Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Thu, 24 Jul 2025 19:12:23 -0700 Subject: [PATCH 017/135] Update some pneumatic RLIs (#3083) --- .../hardware-apis/pneumatics/pressure.rst | 19 ++++++++-------- .../hardware-apis/pneumatics/solenoids.rst | 22 +++++++++---------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/source/docs/software/hardware-apis/pneumatics/pressure.rst b/source/docs/software/hardware-apis/pneumatics/pressure.rst index 2ba4d50a2a..eba552bb9c 100644 --- a/source/docs/software/hardware-apis/pneumatics/pressure.rst +++ b/source/docs/software/hardware-apis/pneumatics/pressure.rst @@ -13,16 +13,17 @@ Construct a ``Compressor`` object: .. tab-item:: Java :sync: Java - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/solenoid/Robot.java + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/solenoid/Robot.java :language: java :lines: 39-40 .. tab-item:: C++ (Header) :sync: C++ (Header) - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibcExamples/src/main/cpp/examples/Solenoid/include/Robot.h + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/Solenoid/include/Robot.h :language: c++ :lines: 54-55 + .. tab-item:: CTRE Pneumatics Control Module (PCM) .. tab-set:: @@ -55,7 +56,7 @@ Querying compressor current and state: .. tab-item:: C++ (Source) :sync: C++ (Source) - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibcExamples/src/main/cpp/examples/Solenoid/cpp/Robot.cpp + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/Solenoid/cpp/Robot.cpp :language: c++ :lines: 26-28, 31-32, 35-37 @@ -119,14 +120,14 @@ The Pneumatic Hub has analog inputs that may be used to read a pressure transduc .. tab-item:: C++ (Header) :sync: C++ (Header) - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibcExamples/src/main/cpp/examples/Solenoid/include/Robot.h + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/Solenoid/include/Robot.h :language: c++ :lines: 54-55 .. tab-item:: C++ (Source) :sync: C++ (Source) - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibcExamples/src/main/cpp/examples/Solenoid/cpp/Robot.cpp + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/Solenoid/cpp/Robot.cpp :language: c++ :lines: 19-23 @@ -139,12 +140,12 @@ A pressure transducer can be connected to the Analog Input ports on the roboRIO, .. tab-item:: Java :sync: Java - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/rapidreactcommandbot/subsystems/Pneumatics.java + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/rapidreactcommandbot/subsystems/Pneumatics.java :language: java - :lines: 16-24 - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/rapidreactcommandbot/subsystems/Pneumatics.java + :lines: 17-25 + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/rapidreactcommandbot/subsystems/Pneumatics.java :language: java - :lines: 40-41 + :lines: 36-37 .. tab-item:: C++ (Header) :sync: C++ (Header) diff --git a/source/docs/software/hardware-apis/pneumatics/solenoids.rst b/source/docs/software/hardware-apis/pneumatics/solenoids.rst index 737f2dbed6..45f6c7ce0d 100644 --- a/source/docs/software/hardware-apis/pneumatics/solenoids.rst +++ b/source/docs/software/hardware-apis/pneumatics/solenoids.rst @@ -15,19 +15,19 @@ Single solenoids in WPILib are controlled using the ``Solenoid`` class ([Java](h .. tab-item:: Java :sync: Java - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/solenoid/Robot.java + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/solenoid/Robot.java :language: java :lines: 30-32 :lineno-match: - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-3/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/solenoid/Robot.java + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/solenoid/Robot.java :language: java - :lines: 88-93 + :lines: 72-77 :lineno-match: .. tab-item:: C++ (Header) :sync: C++ (Header) - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibcExamples/src/main/cpp/examples/Solenoid/include/Robot.h + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/Solenoid/include/Robot.h :language: c++ :lines: 44-47 :lineno-match: @@ -35,7 +35,7 @@ Single solenoids in WPILib are controlled using the ``Solenoid`` class ([Java](h .. tab-item:: C++ (Source) :sync: C++ (Source) - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibcExamples/src/main/cpp/examples/Solenoid/cpp/Robot.cpp + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/Solenoid/cpp/Robot.cpp :language: c++ :lines: 42-47 :lineno-match: @@ -50,20 +50,20 @@ Double solenoids are controlled by the ``DoubleSolenoid`` class in WPILib ([Java .. tab-item:: Java :sync: Java - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/solenoid/Robot.java + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/solenoid/Robot.java :language: java :lines: 34-37 :lineno-match: - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-3/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/solenoid/Robot.java + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibjExamples/src/main/java/edu/wpi/first/wpilibj/examples/solenoid/Robot.java :language: java - :lines: 100, 102 + :lines: 84, 86 :linenos: - :lineno-start: 100 + :lineno-start: 84 .. tab-item:: C++ (Header) :sync: C++ (Header) - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibcExamples/src/main/cpp/examples/Solenoid/include/Robot.h + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/Solenoid/include/Robot.h :language: c++ :lines: 49-52 :lineno-match: @@ -71,7 +71,7 @@ Double solenoids are controlled by the ``DoubleSolenoid`` class in WPILib ([Java .. tab-item:: C++ (Source) :sync: C++ (Source) - .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2024.1.1-beta-4/wpilibcExamples/src/main/cpp/examples/Solenoid/cpp/Robot.cpp + .. rli:: https://raw.githubusercontent.com/wpilibsuite/allwpilib/v2025.3.2/wpilibcExamples/src/main/cpp/examples/Solenoid/cpp/Robot.cpp :language: c++ :lines: 54, 56 :linenos: From a8bae7da3be4ac06fd51452fc2ae1cb8b97c8c7c Mon Sep 17 00:00:00 2001 From: arbessette <115647688+arbessette@users.noreply.github.com> Date: Wed, 20 Aug 2025 23:23:46 -0400 Subject: [PATCH 018/135] updated logo to include WPI full name (#3086) --- source/_static/wpilibDocsLogo_1050.png | Bin 83972 -> 120703 bytes source/_static/wpilibDocsLogo_1050.webp | Bin 29898 -> 45524 bytes source/_static/wpilibDocsLogo_300.png | Bin 14721 -> 32291 bytes source/_static/wpilibDocsLogo_300.webp | Bin 8798 -> 15446 bytes source/_static/wpilibDocsLogo_500.png | Bin 30586 -> 56903 bytes source/_static/wpilibDocsLogo_500.webp | Bin 15902 -> 23178 bytes source/_static/wpilibDocsLogo_700.png | Bin 50442 -> 87578 bytes source/_static/wpilibDocsLogo_700.webp | Bin 23718 -> 32586 bytes source/_templates/layout.html | 2 +- source/assets/wpilibDocsLogo.png | Bin 83972 -> 118058 bytes 10 files changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_static/wpilibDocsLogo_1050.png b/source/_static/wpilibDocsLogo_1050.png index 95f5667edf080453c8ddef3e07a38e06d6299943..ecaeb794be9426085d00572c4965596c74b06dcd 100644 GIT binary patch literal 120703 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 K=d#Wzp$PydZ}v_A literal 83972 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

EF38Ib>?h*2F`6U*V`U!_XgufDHq71|TAzSBRL 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�%AHt?W> zA;H4sAi}TL&j6K$DG7P5%0@8y+s=Mfhha1%yWK>=dW$5F{7C>y*c9j-$TJ=)A}iWO zn%eA=r-tv%ox#9}ZvOc9;w|mrUst_ZtD&-e0-lS|*KPohF7tV`zNgj;^Y6GIr<(&6 z-UJHmfnlpG{nx6g92HV==eRss^LSd1$OvsKshuEBk%zxl-SCujI@m%8yi6R zVrP{Jf3vU=CBGPXN%4}s%VXBNz0p$?=>#OGTBqNgBs!P5%2<^vHDpr4?vVO2Zvd0e zmiI3M{|Wkjl0n%q9yOHOXeXlda~x>-Mf3*>lHm1G)QJn!!D)w1hj`%j2S+Z*kRaF} z^HuMJ_*tPdf^}@1_3lMKnG-0acQ^h^RYp!}AgX3(g+(?j8ckv~xNX?E+)zp?whT_Q zmL@4Beor%DO?J7F2^LdL$9LI#AF3T<8c0oo`q*_anpVCJ+mrNQ>*;W82ZhaHd|{7X z5dlP%T7WVRAdKc?1cSY1pC$8{Wu!x1a?^UhI3(7nkULE{Y>RMlUF0WgK(nb8B1is^ zh~e_5wa~;i+%J%T|I8;&B>Ode9qj!~tzNd5gDY%bRHru5YW_Bso^(`We zwIMJRi*>AtATy~QlE0S>_4Meq^gkQY>{miKc@O84-qOKwfho}OV2Y>B9na&$lDg7PWvxPKj8M$8-VC8HhooC9sd$7s(jb#H*fs7mH&u{=jTRy-7lz*QdGLTyKCq!K|+vJ5K+3jYiLkVx}{qh-sAmypXYu)GR&uQ_Uyf{>ssr-F51XS zy6;cd2jei!wX3?I?0mWKYVxf9NdFL$B6FjpOO9sf0__(nZm~V9^Vi!V`ZsB#w7ld! zk8xYn@O!ukns}#2rn)1j5&0`~qw7pDfhHS2TA-;75xJZpbu{Ki{MhEyi7hX-#lHo9 zD{+XFi_R2&321UrrN#if51@bAM?q^3D%y`zN9*DTM*ls+lp_;s$y_4wIzE5O)YSRi zqz6+@;aVEQS6uC&=aEm$?8ogNC#yniK6uYK@m18#=J1CB4_#+|cYY1uFZDH-g`1hAK%u(4TuG>q@_ux!s({`| zwCcdq*DcdQ@%H6AGxvVyv@$#(@nc%Ejy&Iu!6p9f^Csmx)XLv2DRbjz@hmFwB~-9 z`bf26D26j|=NK3#fPh7g;efU~5cV=Oucsm&*i`F|)Ch$WI*Mhp1?8WlmJsuNtT!{#D4oT?0j-fhb?de6w??clvdK z+xroigf9%y)!v1=;_66Gk+SaV?EhL&`__vXm|25oO@VGEX;Rv=Ug66O_5#!dsEQC;-D@{NxlXlV_Y(CRdBxI@zQ z@a+RtNXWSLN+5UCQnd=pD!%reOEc}Wn|0We_V037mt(>w;fG%-B5i}pTs%JSpbf+{ zQm%bEQ{jB+AC^h&#y!^{YcOp*Eh)P!%PQqt9P$i1!@>XS-wf{Xi{A!Vbl9%*vd4MV zYK}@{39fUgX>Z6Pg_p#$zVH}PBf#eJQdd~jRC3*qiO2{Np)v2d}6xF03)0k&A@kk?Y71I@x35VnAt3nOX+xXMjP8pY8EiIW)T( zwm!q`_D=)Hu8Uy!z0@<3u@AxyI{P9#s3~~N;bUrQ%V2RZV@gn0AW-m&56JW~O;TtQ z{vx>-jk;Vm=<0@dfvUvN!bV&`jPFRr$vSZV(-SbM;zL`>kp&<2)Pd1M%?c<3N5)7R z0bvaRpvx5=p0$$s+(^-)ZrY05@EL$L%nlw6%6ZUo9S5g;TidY$e`MISeEYnHV$*?Z zDiVzpZ~FJ&CEMRrKH4gNH{L~9zaNdbtL>i)T2NAXYB0Z1`~6mAO~KPlI>{XXr)ELK zjI{o)#}OTDzQf{F^NZX07>F}>v_fni-Xtg$hew)trPM(4L!5k>+MTt08q@S76{^Sk zqBc}E+iW6rg*S%MdC0M=rl9ch8ceFa6}o%5jMAvn9*Nc*{1Zil%>$RmLp!T?40_!0 zfXmFxm~5XbC>v2i(v!1x`VRgsR;sX&o!NyiuC3rz`irp)>27y_`7laO*OXtC~@ z09%DJ+*}DZ$n=gcb-O$(K(a6Y$W$2zB{Kx+U(r7=s*tuG5Bg#D3p*DJEnMbAe10@G zc7nhF$*Ow(Z$@jY`gM4fmL|8Pk%yHEmlDT|wM=K40k(j@YaghQAD?idO0Xbjy7d)( z(Ho6dHh*OD9}YcLK5D9Pmn}NO!Ygn|Hg~pp+Xw)oNU#)>fXlL~$Id9@M7886D=tv` zAtN^igu1b{C~tw!&F#mg{0cQ@q_CZg@J@>zlp+|h|GUWJU*b(i^iaSq8xmNyEP*@x z8zDKLB=pqi9U$O~uLTNG!-ZyTyxZ&79Y5eQL>2AcZHB)GzA-{k0@uZ^`ObOD2-ST=!X( z=>MW{!rg?TiS!FEx9IV2ttr)@U=lj8wV(lUE$D1U53Eg7$me**KzGavRF!N3c``MenRy;FNcuGvj`kd*YaC8zitM9zc zWEspw}oCLWq)-yAtG725)B(Nr@<^zoMj!{5|h=;^GN{l&3T52laqZr;bK(5 zlCO!6Q8NDV&bPW#P_}Ba3hxMkuD^?HyV=fbQvqK+qg*-v;vOrixD&8NkXm(A_zIAu zRUK@k7B{$b`Fekxv>jmUB!Aen_22*A7?VxN3aEoAW_4)<2DC^6a8v&EVY0w1q3Iqo z8}d@$<$!LNV?y`Ly#)wdN-O~h0<<;xg2M@uSda}124Af(rKE=-6(L19-KtlT#v@j6&jY$cBsCH4uM8TWyre|- zQ>RW&C7lqqPPnqL+ZC@_xx(9CA0I6b~AExmPF;#AL!bE56zQu*NihdUy2k9@S~S zu9=55R?>sF59XOGRZ0}qs1zO<)#jRYMsMcJtBU#8ntR>rKI<6^Imj`lY1s9!H2g-y;M0Fc5FKX#GSc~&`$Tnr=u>Q+GvE;R^ zB6KHb;FFRnvQs;;1_gxKJzfd9=0K?uicn%k=B^h#+&buZ0l*Y+pZ7I)j`2u0#patJ znsSmMr0P5VTjSLEWLju;@TdA>d*20sPXi4qyuYZkD8Iu*g}iy5rK}!P<}^`gB3*L< zlUh~4+<1^SC<+Rd<{8OVMotHfZ_oFQ!N~!^jYzn@vwwm{%2jtG&#mCO;OZxZGxSNY zCQfst#hkJO7HvEu4}h;@g@@*Ufm?xkrt5Gbs&g}Rkm$Ran{U6!`t^rCZ1!pYJlQ9O zpb~dDaYeei)fU!&X69qa)X9=K76t%BhFWjOb5i$~RI70>W{xeKoW5s{rSNeo=SZPo zLGH}&I;%KHW-;8rwpSWXBzj0*ce1IJ>XBV3B4$V;nqtEqoSi8o)Hf8ydrOU>HFf;} zp`o*MIQ!^+5BKRS7*=0AY(O!yCT2b!6=?+M8Mwh7&Lbn z%I}kO(&_`@BZM?Ht{)>g<&0Pg9TyV(8#A`WKxZjwrZk=ef0l_lqZEJ&rTuvs^lh(+ zFF-`doC#XrkLC&z&CaS4a;R6r#X+dk_uCcw(ob)h_!fyRv?p~f5$vdk;QlmHiGFdg zW_T4KT+?&*XIJjJ+U_HL5IwCW7vz7(u__}4=9>#o&jk0={Da;fpcxBTbA#$R?;0Hl zd!6pynLQV}d~EgeYIHWHkkz_{n%=SmQuMh=`HLwPu5*=4$7(cWsJ|wSj3Uha2DK@% zIa!yFZ~7(k$vNopX6IsdL&MMOhl(m-uk{}Eg((d*aKW1|q!!umvW21ULTtGk^*N*L zFIHnUB>M7mebBfhzjV&|nagJex2Z0nyP4cSkbC-LyW+Iy6+~M582ev$8^&dPP=-=0 zru@W|6&xgFq^SwAvGa~Gqa9LQDjZ><72s>xGOfzCbiG5YcD_lxB-~@z^3WJyf;^aS|ghSaw)=h4z;Hj+%DCCNbCl+a=ql|XaLbl-> z&bTuML3)w9q(UT=jMML17NE!UW0b6Lv|vT#d};!vEBO)@m=<;)j7`Qxpbgi%@1=1mk{(jwPcI~qSELO$ z8lF0)Hy|mm3-Jhng8)#_(B zpkb*^l0EU=wA5soZmRsc*wtpIJkfr?2%!{#%qF@5@hl^?W->{={l9SYgI&mG-l#Z! znfqj-Dj`2CXR3(QJQmU^W(^h+(X=I%`1mIm^J4B(V{G<5!eCLgn&=UyFo8WvQWn_F z4qUTVTcvHp4ORGjqnfBgWn@eI&S)G_$a4E%xr}naqSdeZDtT$Ly0qzFn~_G|5m{^* z?}w~M$ zDGs?cd_sS=?sU0@%P{Hn5p9mjFf`Ufq41qho*ORcbY;uwOHrZ4~WNJ2hod@%8ldV#$rBf^m*$KO(S0Q2TmdADdT5H4?MV^ zhOZVCcTpot*pmoPJA{FOwvBrJ@EBzzoOE+%D}WG%j;{{+33=u;Z;qUaksM7{gKDcg zCDj0BWBe8FPSnjWQH3*~kX!M}qve^L>p4%+q0am6PDhyv#2rRoH3(r$);~>;yY_Vo zZ$tcj^}h9-p8%=a84fia?q3pV+b;lI7?9;e&U5$j#^5|d3kxI-n>h?O*}szugbZLK zwQ3n^O7B>YR#eh$$}c9I?lRNJwowf3tt4x~_hhyDK9^1du{7%Ri;aMOzieAIf)@V^ z&y{`>xRM5o7Iy#eh-pZT=@zWZYeJkYZ*NrR?Zxx+Fo1MWt7;PZ?*|bX<*>dPKSTBn zI1dZ}6(@U=+BbCcdYQsC3t)r=QmSUY&a)s~3FCyDt8%VdbL9ZLl%>cZlSHyMWtR^7sn5C5*ZDN`rjpTS|Fw6w+Yl*NTGvd0LVoRROJ#i8Al zMs@EyaIo^9)s>lD9>4wHH!^N2ugxI`A{*M6m&c!nXeJD8&dU>NvJsMxC$06x@=@>1 z_p?j!YA?2ofv@F!O6DRI;#rF z$w&}}01PXO2{^{Cn_6uIOPJiL=}KDNIx&-T#L{T*dO^G2{`^jUMjgno_4yOwa*nd$ zX+)GJOJ5ml8B6|kR*vv;4$N;PPebz3Ge3rcEdJ`MqP(JV>XY^&vuuvi_ff{4GI_#( zZB}fU_VxGf%+s)qq;&wR={bfuu%D~-%ap}AF z?E$imP1xqL&47VSBuR_!^duwFK~jntt6~&#YFGT4tUqNJ?8I4onG#rLI+EFdr3I>5c^;$w}F3@>WU2oaJ0Ng<#Lw6H$(C;t#vG{7rsqGmfJhz;4}WlGdo-<>IO^BBaQ z=sa1@Dpk~(Q~TvyakmK41TT0^egwRCeCpJrr|q*s2#&lT!KML%+Nx%O6L{A zsDv|-5eF(?m(lf9q2yy9=@=Ct3dhg9_bm89=yvjB?rW{?q@0cHH!Vrhwv(O7`ogi{ zmtl_4%u=q`f=mIPiF%G0c?kkl+L3&?IKdwcB@qmKzW1fMB|&w)2~jI>HDI&q4mkE0 zxh9&J)fTS~0Zk^wG(pMFC~pxDR&qL{XL9fTF(87&4tvMlv^ct`7`z54bOU%RzEV{NBf30mFWMoH~@Z*8dS2W}8`2m~N9;Pf% z@KALk3AkU+Hs-TQw~6$(JdopspUW=gf-Xh{cost)ZNk;jB9G|jha_V1E>z%Slt=V0 z_>^cbgd0+EFb>c=Vo!y0)DLP@I8ljA*q<4QR7dYO4Q&oD{n-NtIH7IUjD zfkBhL^(QOS1f|gKMK9@`zyOP(OA#do5|=~T)QR^e;@6wGyuQD>Lfa~gbc}!f+NTA} z#iC?*;VWebgPNTeosVF26T55z@F#?0R`3%Qz)Lu)UrZ3H$dI<+Bso>^N(jGfiwS=l zrWg35myi@KJZ~QAxVIyU{~pCxeCX0YTiJQQH%-g7sUSCQ`7yG=k>~Mo0e;m?W`Vst z4+uA6yoXz$o@}&|GU|N@Yo(FV<&0tO*9dEngcSq5cVI|S$D9z*eI-bN6i>=Ur5%0S ze0TD80-9;`t4uMW2U&4NC&J4fXtcMHd5aXTO_Qn%F*3Uct`h_Cl4Fk?+zW8$Rs9p# zAoF7isBn#_O4L?c!y7#y6gO_;M}3^T;|7I*kI^4wd*Q!4=m|&-=Vq9tO^dv5^Y4_OR`{W8dsyvB@f zX+e13j?F{3!z~p`Xd!l`SXHH9?A87z_~I#ZlP9b ztqGhs{8zRGY|PqMqWPu7^%ODLjLELNgFPl8ky050>O)gckmgCjc&t^s&c?ubr!?C} z2OHmfK`Gm&;m&lrFDOiV%rKP2_*L)HmeUOvmz*I@j3&|*VXa$~ih!nc+UedoM=rA0`h6mzLT9jr+5x z%l+nNi|q@tyc4=w5}YjpV?AkqbujbBZS?u1^!icG^+M-;sLs`&Ew2=*D~K0Wqxli_ z+Hnp(J1z<)7C0OKaf{a!h;VOeul8}1W!BsVTZitOh3N8mqC8|Xdu;gHjT*ThtB|=yb^f2<}=AvhmiwuQ@mxCdo zn=0n(cRmd9+t_Q`c))buoMNw*$kZO<_R5T3S?ZrNNN~CY3|d-ie{I5<#()5=%&B@Qu@$ zNN9=#a*rM!OWUv|2D$8uMha7US%+Egw{}ciJqCZ*JNU^cV=_4p-v&+2ls9^%3~{Ui z6Oi$7uj|MK=hfq<7+iuSf0={b5q_ga?-WwY6C)^6Qixyps6Yy0`qKz$0_pG6WqnE16-3}l#iD|a^*lJqO5XK%fE76Zw%>8HJqgR26S%SduW*~Sp- z2x!{Gw(G39>*~YJF?NgM)T%}JRX{dQ^om$)yixSahBzF$^UfS8!ro7RR;dIb2eDfN zF*v}Lf-qT9{+~gD=Y0GH-vvs1lbxG!*9vKmsLmpaEy*+TU=*kD2Ym0ZLnuT6z(rvm zIdBA^8(oqCSvbl8?@v#;i1R*e^=r=92h_x7y>+WcoU)w_4bhsJgCAT<=x!vMIu1-L}W#X#mH z_4@cMKQIf}ekK5;!NKdHCiWeRGzml^12-4|WB{)jwa>t%W6Nq)h)(=`7l>o5z@f*KJj9y&B;*9^ z+9$Nfl&1o~tW`p{P})^UxBI)~GHUA~?f#CzvfsLyR4l-SmFazX7F)#^bRo#4{fNV8 zCAOOikU1vuxWgz-hon-9g=@PPN2YU63mRN{grF%XjFfy28KOWJGVH|o!I$UYXAo0m zhZsNq`<;g~-bQ%W-F0Lw3`Vv)d7$7f);pGdhLx9c&)3O&{p#`Z3%#Gw9p}I4^|kqs zL-U5R_(0b_TXNbJq}W9fN=J=Cs)$uBOR2qd3^guX%8z)3W+GXIJ}h5cN@GE_g9W8K>$%-VtOH~bQ7@dqp~@UP&x=_(_|+EU zPuzi2Xp}>0R#D0lPWlppnwQ=Te7O*T>ukrp;?PwGit7(>E6afka-M8n-d@Ah{aBpo ziGdWSjSnc*$<>t<1p`jUE(InTY< z&a9`sS1TLhj2`aRG0cVGeTpQxV=sZ-#CG9VP9Rqr$BT!4)a+eaMYs0%0JO+EqHpe8 zI>Qt$ICdw%=(qu)g6mZ>Sz!*7(cd7=ZXd8{{hSf?- z(BY{d@HpRN2nk|987e;HPMv1h*#5XpteNny9f&>->Dm}fw9rAoU;WZBF$6y0jHf6)*ViIZkEX*8ZH!$6y)PE$kk3 z1yb!-1llZ`F9&zw1pkp|tc*OdW{58lKTnh9uxKS5-~P6al;^=HqF#4g=*5Ha2Zm28 z0xAyuBs5_uMc~O%@NbOGtGFCD9gEd-#~+3{6%K0`PA5KtVFW+!G6PQ;=tZ36Vm}VN z6!rWIBYj(tUhrEott&-*)#rP7OW@F9^mYDA$4os|0#=}Rt8TxrDqP*R07}>L+-lbO zI8kPRU~xZxnxLJ&OsROBMs(8?c$0nSq7xtj1dvdQQ6%`NHwK?OP971$BPW&hHjV5f zg!=Zg|Do)nOwqGt98|xXuTH+4@ZU#dTT)|YrTi$*RfQ1tLc zNJ2{LYyxl<_NF^!Fz(w(sSlY}0`51(tk9MF}D?fF;0sb7caD+3;tN_A;{mLw z)+xTn!S{_7L7$kK7?>G7tmIK$e$_-8sEV2N^BduA?g^luOb3VG*JAXc7;`C}UiNm8 z8j8?e-NaMEM5VDbq<7{EbwdyNmnLg!Wl8b^`cV(IEj?J?aYS$zhcW>>!y30n)VwPq zOKcgPP^(3Ogkm(!Fhm30uMNr+Hi`qzfDEMAKS){yj>uNJj*UP#N};-bypB3~>pzWb z&{Nb=UT;PIDKKEhH`=x0&5DTHa67dBB(=)*6D9NW(A)@*CJs`|P}Ryw*}bI-uFhKP z#!oAF^Y%2=cfOaNAFojmRMq((X!(>}qKxEihc-(35pZ%TlM{i)q-$~GC4E{k% z@k9*xfb1TuiBu&c%l(90zbLZKBn8<70pIK(MF%v~03X=32Qmmr=2z>Pjp&}Vk}0&} zx7^xvV_@q$4-R0jJebx|Wrt|AJiwkIH6T&zB#Hk?d@`2amG9qdNu{## zq>P=YMXkbZBTvDV$m_hhrEpfRUc20FbDWeio-U#1dQa$G>udVV?H(c=j?j1g_VjS6 zkp0V)rI?#ciF~E<=HVjJMwSE!BxxB9y7^g{4fHz%W|t%xIhAZeOzn9w8mt7wVq!Op zvownytlCFt!t#?8`~8X}(pKRIF@^KNTB!M+Pl)^dBL2l!=08T>=jqw$+eZ!2mgVTK zU@A#-#%xFbS^gwuUwi`tob><>eQ)VKG77fz_IVa+B*+ZuIdTX6J+y-@?M&ui@5wms z8+Rm;!;e32EpA91OPR1B(>Z23_~g`UCH;X_8uUzg6YhwlO!=TkV2fA;v!ETIK3}Za zzy<;?Q2@b~=_7dC4Uwqt>P8sZl-YDC_oAQ=$j&J=`+7@bYWJ6AI;h@D92sc=c6Q!; zu*=*;Zg&Vk-ZS;Ew=pZ^B!&e_ryV{r?~Qx4al+VlMPuw2ygo-FCly@u$c&6~6(|ic zw%PFi!bhn4`kaWH7GS?%$yeIx2}7#%GI<#{CK=MhuShfe(tCks&MbupeBUAk+Gx=e zIuQ&_U+8aXU>_5IKv?t5x?!>3k!f}4&v>j_*>3&Xu20ng^xq+C9ZvHSM&jQBk%?rK z(hzCqwQZOTd2a&nm>S(i@7P@M33qnd@R9o*|1@;a+MwrVE?;j6vldjZx+wiKMy?KG0#I198fzLWxZLk@VQHUWNpx=NonSs;f> z$LH9I%cN8&Z$vn;c{C=tyqfVWC*(FE^XZ((ST*2mntB-s^61=@wnTv!xMQ0>LyfR~ z9Re;&t{nP=sn8QGjlsNrtlr;HTir$xfu{eXSg_sw97rb#JuwnTzjF1^jj>?r#vvUE zZ-Zf}GQ0thh-kI6wE5rWT3<%${zbTI8uCW&_F#2zJK?(M&DF?7-JEZ`p+z)(8%^Py z|MR3iYigjllv5}+S7d3&<(QB`_ZbVJ0);c3lNXH%zIgYLNdUCQ4oVJh2ldC&cYAQK z#IMOnodT>%p7j?eRDvPjwy*2F+NvV`KZs!m|JzZhzmaX4nF+Q@AM+J*#1HFc)eEG2 zSY7r1&apxoEL^$!GmYmat?a}d$xgj>uJI~ccFZ6D=4+q(Gk(1EW7HSt{1wDy{JR>DYv1P!pJw{=#O4K* zFD}f`f_#lzmn;?Tiw&He%DEN&L^nzyGDO5Vz5)yb5^?7%aAffPt%TVJl$;03*}uwJ zN)l0+Ry1`S5%bWL>Vit_wQkSAAbl&`{Bh44xsrIcn~o7KgS?@7JNnFwbk|p}Y94b^ zx8CxGo>;ru!gt2FX9!97{8!IItj5`GH4$3Uu9&D85?A%SZQ~4$31d57&MZ%Of-V~T z?)n87W!QVq=tx=70G@{R{EvvJAaickJlrp_hR7053S3e9AWU!KLNjq+!bMOEvI^8D zTzFCJl&wk9O%E8|$IwxAA)A_cyj}`JT3aG;_zUu>PjOFe{Gc3D3vgR$uj2#v*qE#o z27`s^G&tEdk{`XE0bm_@HIbl5@Jd6bdrw&kQ}~$}F0Is$AUrzfTAFs>Lsu1f^6KJ8 z8*wSyKe3kqbOnJNOe()GV_c`NE%RV@u*O+k(MNE_awnBe454S5Ve>SLxW*1> zYi{ICO=SNt8;-jXt4wQgNm`tDlFi7*gP5hXJu4q?1B@3cT9pk`5bh}JcA^*rth1l4 z{H5SOJ@@2S@-7tJpa04OGt`g)^#M+gI|c%~kx>29>1X|@U*yR&ym>1*3+@IEF204i znN++nnUle7b$3!gJeqeP6iEi2Qjqa^B`T@Gh+GV#V*2`7gf0*Um{z z!BkPKE7!bl?=!bcd=r!5+w~k5ze#XO%d7-2!VFkP4w-so-uJs6zAiaOT=$`ythsDg zu4j;9hZw=x^Kr&UhSp;!wB``LkS8<@&5C_Z>$h3B9Zp3%V+A%acqMo)*_K{JVQ6F1 zeYVqL=-+NGC~cYbf#i3_6eEfbD<{U3JPFrCpOP9e`6of-8nX2p$#^dKRkvv3sw_9M zCmIoR5_)ZSKw@BWe)t`zKZUS6aqqs`-Px#k9DsT?)=JrM%PzJ0dN~%RZ^-2h95y=>(Tu7iA_dket@NAC|b{qOO-~ zq7&JSgDkprOpVwHjJhjn(G77$!1fA{7|!UGVej3b&pOcMSKW7o&8qv5fh^h<2qWTz zfyNeL{+up|9OfS1B;>%(C3eIDD1c3#j!=W{MIm2!svMC3-BREyuTELJL$G*RgRJ0) z+C;(TG;9RODv-9l#%>^n>+6+s&HN$u$3z`kWsE2Bc$o;C(4%ae!q`ly0Uln1%T4Ot zc{ngxX)GYKnQQLhr6m$CW1nAsuP^?9I1jdK;RqQl+;b^(DO}$U zp>TDoH|m}@wJk%F1A=MNabW2|6zepMK8J{vD4;bB$;Lr7R(u!3Jn$jN9?l&#+t7T( zlt2QCtDj6s%~SSkzNrg-@HgM~trDFltg~bJz0WdU2M*vn6F))~88{8PM1DdYHYM;y zz6S-P)+iqOS3&Plti#Jp#hP$%lqTyL+>QyxsNwp;?On~QZro&Tm>oJ-f%SB<7O5>e z$6+i(pgDMNH^A*>X$=+saI&y~en7o*)u=<*5g$2_3tZUUu0D@R?{y8*ME`Ix&O@| z@SRyI5vr)#u@Tl7tblH>DWNU-wWKK4CyR?(?*I~+R zJ(E7Xcd55!FNPplUmq%%KeBpsPVxGFczF4n2K6n@nE zUr$LV5j%MX>`qcXlN6MA>PXBlZbS2G0>2X1p#MSh53{J7h)GRGZ=daGfU`e)xo_|C z3;fzaW7(6JS2nJy;aevW6Y>KNh>7Z~>o)iDgr zup!c0YRF+%OPw=F*CRzi(_5al8D!)p-Ew<}N=uCMl@Myq!WWZ}QQVyzm63t+3FDdZ@ARY;x(Z;x5lB@CO4mS6yqR3&SEx@ggO4>3FwQ}$UPSd zGJc+j8L7K=SUJ$t7Vwmw7~u0sr=lZcKi`(vb#M{=& zV?3)!-}~#+`y;CN-_e=WRrS36w7b7(Q8Aj2*j^3Yv73~q3v}}E=dnJoVMgLFRZWpeOT5yX%-`+w zyIzZPowCtzu0NxON@rB35wF*!^Rc#Nw;5)@A5sqG7=O`;+;zWtZUu^+=%mPE9Z@2u zgQ8rU#%$c9VpfL?;Y?(LpNG%&z?cs(v{X3v%|DS7&r2Wy!Zf7`_+-kQdj#75#Fib3 z;CuJTZbnFdzw`d^MOJMuJO>b zcY(x2!Gc-+lcqDLJmr;TTcew=NqMLn0p`U!%rsV7==1RFdwdX~0IrqwY1qwqGk;&k zXUVg@*66coXQL+n#=oR@=hGk!R1>+VSQam>;;HzJH?E8sR|5h)N`M{U7N=;hBFI*6 zkh;$O>F>q;kDZyO`yzlATa4Zi^c@>QT_Ld-a~q)Hh~ef&nhj}Gf1L-J2_L1Y$3@f5 z;$+`Rnp3!m{W{?{wwK5u$!oo#P{Cfgxp_LAcT-Hn$TJcmSkvg0Jydk}>MVvcM1d=t zg~y5qh4B5llx7*KZI&|gaxpW^5Hr=x+{qCTN!mIetA?KtQjWbs4^f$|Jge))o-&mHe_phV_j3p8&1jk=8N9RXr*=l;e%7#S67GEd*F@G-1Mpi%u?jnjK-~R#EiJ6+fK<#7eqzo|E|=6L@S8F6 ze^=k7tt*w!hd(W*d5-&OoNj>%&JvjkG>DgIlmkHBE*Ou|)fxHu+c}<6>)?JW=Y&J+ zg|6;tUvY2RNI8?@r|i#uFj{7;4w$*VhI1T!EoP$pzPD^bg7;_n}rD{5O0dD>sQ_qexgd(~4a|M}=W`2Ke)XMYQ_`fM!$Qe;#|IL5CRub0Z0-_U?Wu1faA z7i4wkKW22rTWr0Nwfo^kZ@U$lITaMh~wpmv)hT(Lp}fu-`42>%SM} zYL->o;|HUc#$qD9G`>31Wu=aZ4JR`06G-s=Et*%VSnB4GkmzB&`CjKfI@9|&6el{U zxh058K`$&Xc6}jHCdvLLAfa)iDHtxcN6&X5nUHZXgCEwDXKJGFJA9Lithf&okT-m8sd{Gq) z8Jx;-QTp~YXlfLmBD&r-#H`#pMunt)wQ;h(dgyELoih! z&Vk_X>|6nDLu}ca9XMoB(~$+Z_~3=DedIB^vFCl0z)ia}@x{i-B9uf*$o;aR6u9NF zd?r9ETD}#MYOVRdzkc+nk0Ik zeqfYN~XqbTdG&ujF>R6D3u9Ahj`%Y2APkP?@!UyHPpgMlv{r8X=8A#ub`!qv$G-GaN8ULB@QLUR7Nt_ zFgH+EBn_nB%YaT>R*#4vJnt4?z)ai7pCiLwjnvY?K!dG=QiR4qBZyChwrCl4Iwb%1 z823Ew8|UVkQu}Oo%Dt8A=9zf z9jg8a@H&AJz0N@T-gbedFL_R;FNqBIvU=Y~A=rQDb2^hOIh6@`U;E|z0YE5IIx>{W zZUjNMh;~)2LYNLO3$j>(xsp9k+mm`XS~$zViI`YhBjY+xOY7L8*{NLrNxl+vN44?W z_j!0(ItoH25JW3@uz01ag+}Fx`1uZ#D`yRtmDY4NB}^979gORqFLR`W&>35|IR3h+ z+)Ssz?jAuB4VcWlzE4$*2_4Y?HzPOe`y}`1yp~KlnQw8f=@+N02oGyFaLDLH%K$D8*xY3$4k@paRw`Hj0$FXg)v5D9B9quKnDy7wN((mIATsN z?v7V0)$iCU59V@8B?7saGt-sng)AuKR@FrQC8!*CUP(0mov#UItjx*kWs5c*N8ldq z*AIMKCZS>zx!h*FqpS)XUZ#5aY-YI=Ij^AV;0vMVqw5!D_Ac3Oi!J%5&t8Nh07X3h zr`UZ&W+8125y5yAgaTvxV_qh5ALG_mihSWHv{2l>tR+)lzYR(*V^*0CGE$^vXLJ+! zEw29U>$=a%$FXu9b_+vc=l)RDC>mkpd=7rbAB3-v^q2h?h$sLZ_Fv(vRCD{GI-p@n4ZYu8 z-F6Rad2kOf-ld9)3QXE(Lt z`nIOysA|L714}NVu7-e9MPq%=xhX0{|P`(VJ~_tmP`o%a^k#65)#@m4kAuvwsU z>KJXF^H&cWtEe_-qT{h_gy>7h+cjBZK{^s++?@)O-}?op<<3p@h`oiQpEdX|Y|rme z>vrS0>^53G^vCer^*&~XZ#*z5NQw{a_nE(-A31}Oyc4oBBoHlxW~#Al`K2QoalqvpW9|@Ym)}jP1|cy(Y@wx+b~a8)0`6Sals2gw5J|B_ zZ3M(1o`{j^A0Gggn?|!7s6>{1r6;V>d9Gd|UckmBk5JC82VFE|wAdE-@L`PFPmVnY z7^cJdhMvzvQH2j8JR+XLx^Z4{lx`8bsrU&i))?h^O>o@zXNT+%2i=~uJhYs|aXy$@ z#&&*g@3c>FSn%1PdGaKP#_|w>(nHn5E0waj)_n9W^ABBQZw7U;ig{o)@ ze#Tt5vkY;mvW{?V?pTZWngpMsa_Kjv`24*7o8v;-gEdMs!_S2^72D5HRkrdwUOv0g z_^&TdA)@bwkNrzRVP05R+0y5pMfvBeVxaE=&BtSe%|Z)iS#N9T``={Oe{N8&{>Qqe z_`ge~N}M@+Z}Nu#VC4F_{7QJV6< zdJnk(&#L?Z1*3B!TkyCA`1Rgiw$%>WOVidClV&mHkn$xbW24FiZ$w zaRVYV$e;cH3eEw|uigRX+gr0gV(_QY)C&-y)q#jbiG|;;U)eDw zt9y|V<*VX6PuIo5D{5O8Z8Ax|X@qp#z6+yP6hn?DuZ{uR@}^gPeOr7#!3jAFQgK&j z_gaDYJe4MImE<4vM_gw#PTyyNgRQ!4=YJP+-{r2qS5+dE)A6=SMXR2dpj$AD!3kLm zI!Wl9PY6ksBGX?qR(_Twc})xk^@jGW~;OJFkgk=XyE=_{b3 z{GRvO1(sYom+tQF4h1PukX%ZZkPwhsasla7Lg|o@Mp9yF5G0ibX;f6L?efRp(+bq&zj4}Wger1Y4FBy zN<)J~f&XO@B@EKQY=9uhHw*{Kop6IhKxr_;5>P*O~8kp@Y+ffDoci* z*wH2VG5tqt8kocvvMMn0i-Al<{LvcgpPgI}@NY5MAJbm!WQCFuWy+;{I=>L1{*-jl zrga;CK-!q|wcD-$N9gcP^06O=ilx9`b(~jnGa0^U9$3KHc7+JB=WEYa@vwL0v%&gm z{_V4M$Tg;}hul|K1FXVK{GdE;n{~@>IjCSJ4plfdRN*En;XR*;hl57s4pX=rog9CP zu(!!k=n)TV?eB}FpgxK>_3gS*59Gx1 zqc6asUOEEf19Nx=Xqhfm`%vU+qhpSoqo9gB>q|F*J)C>MKsfCxmz$sUoHL4u8<>GW zU^IFxaI>7c8DJ}-2N$i?QH+B6p{Ch7KNiB%ki*XL5~ZPR{}ujt>Vki*fB1rJzbdtQ zv0D6clQ>@rhO>YXD}spz3X7kQ@vQpQ2BI!L{R|mn1B79A562D!Hxq%d0=^wy>-7w; zs@DoJd&oJ?NvpDYpGDcF=sq`?L_>rH$xx7^g`FQKO%SOM$7Z{2?9cn ze`Vxw6tU3vF;;H`yOKb}ix0#6RFn4qTxrk;*;CA(G7OD;4P@X_f2r(Yu9IcR+^m!L z7A@(vRulX{Jx<5U#+CFm_VKfeXf40?>?w72-O=nr7I``EA3S0Wc<2)PI)nEMg$ z3iyoHFBTlao<(#yrImh4=Bjb$a}YDdKL=v1EId-ouy43_#S%Q7Q6cX%F9}6Uyc6s zk)q4I0GcPvXRqobRDGfP0w0hyD**y#$^p4JM*PAbRA&TquCauK)J)=he!CqFNSGXN zh&g&nFRo=>ERW^oo#|WsY$jI6{i#rxkr4?cql7o`QgprmBjpa!s*jgB-5DODqZ|xU z=9XM3c&u$cxJBAYgwnTMEMNZ(f!vaCdENk~J4#GayhVz^bss%`Py2YqwE2mj#P0_| z>3m+UKH~Th>o0@JPF+)t({wX!WLR;ypT@{0F?zKV)-VQ=a0=me7S2TKAe&p_$HfW7mp*m@SXK-E>W{>BhbzIb{24QzDaQjdp~mQ#Fn}58y1FPcni{#}Ns&*3 z+b@ytNPmALn?_ET7iuoul(Q{6U=XbjVuu}EG`pGb=3KsYulVAAfmcVE`i<9rtc2RH zN}z-5;l70Ib*hjCp4Uv+Z&}0XAdGr0qVGEf4{orFj)O<1Qb9r?s#7Fm)a1Q_5!9<1;4vl_KmmFB{ zz=DL!RaTamj1xT7@tOutYxB^|+hn41a6v?GNG#;^ynx<@fb(Q~G@MyP*^SuEg%--l zlgK2Wwg^r_%Qv62@JbbDz%#!yI$Wih;Yh4ra^hi1rmYzZCwvr|3ALYKFaXkGh<3kp z>of%(fNn6Hfn2X`*YT7^2DbY8VnPYqN2<8CLr(w_$-otV+g48T_Fg&nc1&Cg^e~9m z%20~K_PR$SFj&R#LXF5M>{6g?b337?`=`h#P4xSiWwQyU*!CExD-c!>O z^jIr@bp2i9*)z{=&Anc8kCH+Q0rxnQxs!lHn=N%w308OjORi+Y+TvdYzZpGgzOl9W zZzoD9fS_Mx^)h9@c|i$DX#478IuQoxljN4%iEH%K0)Ue^8M4>*I`YhUA7agXUs*pk z!r#E-7)L8!HrcSHAED>idRpn_?hLL*Sk!oH1=O}we-6^Jd^$+$F2l9w;qWFp>Fehn zG1Jq1W&3Q9601<0xvnC)AcF`T>=Bx!amP-tEYexTj_l_PaD0|7A9}h@;~9&mZ$- z{qcp&+upsJgFSXN?FzFF*_Y7N0@eg^blSCyXJwz&l; zh*1E)aRGJNBe_`;$t~m%7cFlfzmB~D`orT>A&7Nf9>A+Z;3cquAFMUG9Y-L zfEcfeeqx@JEot+TUtuHxm`}Ne#_@e+qpDibQ@A_&TO0v87)OtW@ryBkSqW78U=AZW z3gi=KUm~0$hpd#1rzsMf9GK{@5j<{zFQG^B)dJdqevD_qVf*+EmlK(~ zSPs|R&3~ejSa((IHKOZ2;oPz=_-@ZmuCZbh-6x(G&%I})p6a)j7kFNC)Mm(@q`%E? zFSQ!Ou~<8qsjNj_L+`kkS!Kzg+GffeJia1nx1I3K+bF_cR6QziaOc=PnC> z?n47j_~P@KF17wu+9gmhsc*utqj&FwhQeKg&YJP<*PS}Rt|PwP;I*9?Z8auci^HHQ zia4s>_c~c)%vdK>suz&=&khZh6-^(`vd#o_LJ0=hP=Zar_>8ko{u-*TX$*)vC*@w z|2T>+Ewt(pq!dqXY48qw>yKrzn6dSz8hb_?1Iidi;cn?yV(gf;9d>kQ%j+ckQqwI5D$O(}V#pSUGgGcQUaIv5!6@E&H9)5wY5hph;?_#{YV+xrs!9!k zsA>wnB)omdR=E-5;H_(T?t9O_IVjiz5yHn3btOstf7K3Hvp51UYzT*JY@SCX20b&84=L96U*hXx9s=dx{PmDuF!jD;A!c8Z0lL4Q1)XO(RBg0mRW$l(RiblXVu{};Fy;}K>hMoI7Bgl zUQu<{hWo&3$sn%V?u;r^eDmzNxa)#3{SS5phyi7(-N7O8u<&ydOxyEtU6kjFO`+#g zzG{Y&U5(q57^}8mb%$`rm#7=^QvR!(aUkzobwu#K-nh3B0tYMhNuQN*CXrf*Wv>6p1%Iy!g**~TuC-VjayQPPg_Zn>&Y)SWTZKTBy5}U z--LvZ&iS~TwK@=7Z_lxD&xmPolv$^U&alHvTTh|K7Dt50bER7>OI!XfBi^2AG^HglsXbZ z=X|i#+R9HWSbCfE>^@^ie2yNjd&Ts#l^J4c0Wj8f18%A#eqJJDqO^NsKwOZ8P}MS` z5EG*4s4Zv)w>sjZ>>7t=!ymHy)Di508bxI1v9ZKY3hL?Gj(g>}H!Er28EhG(DBflz z<{QNfl4Gxr<4*h~wyE96q1M(02{^eg3S6YWxYd-V=*sOfZT@^_L_0M{UUzx;$u(}C z2+oveMtV|aKI=C0n!D&|V_-U|I=B}^eRjt8`!0r@=Y3_N;JEMPE5o})GREXj`%oTm zwZ!cSHBPy@#jI@0@8R68M^T3GYv8!D@VS)RHP$XGOE#O*%Ba2c#gSFZ7>#I*$9Ub@ z#rOfAa0BjcGqfCSnN^8Kd+r0nO0>F3#z?A-b!|94+X^OKiRU2?Z*~j+pgID_Slc-V zHuN}qUtNv;zoSDJ)?6-ZD#NYQu6XfFa>!xXSa;PdvmFG_7`%WyLYlZk-0PG zJ^1zZn^Ewhj!ixn)tX%h0WmIvk^#M*qZITJx`OcvlY~g{`ONI}+cd7HmQNV|3X9`{ z6um#1|K`v)vgxOWj%aHj=y9YclPxD}GpH}p8=QBQ4@!jgaoUKwbuN~) z<9wG9R8);8rK&J^IWu?;n-k<2eLh$TaEI}VjI%@eKb&Y%su1eRylyERWjJubs6D4zeQG1bcp zKCW{!nP-^izkL7kNw*Ec5s@EWWWhO5XZ1dM*9rHb#~aIsgS}T`H7Zm!K?QZf9>ZLT zGaD3Y-(nk|I~Jx3Qs`iFyZ<;v)5s-%(s?Fw64XXeMo$jDKFfu#Ka$vJpl!9vSi4d^ z_0JDt!y3`$ZKp|5E3}b;;TT8Vf|JR?Da$Sbl+Rs36q(wQbmR@p5XQouL?sPw$UXjZ z!?pgWGR%+xnSWODkp0|@G&*aAqmt;X7wT534lx2QzQw`%^{Qaq)jgq>)p-*%Jj{7t zzh-}D?y9yhPE{h#0K<8sS_Ox(A4K-9yt!hrzkVsY-Zz`r49U|e3ED0D(w0cJ9mpMx zsrX*wQsTMnr*dwWA&+R5UK=#0MBHVD|J$KQo!^mdz(tPl>7rUN{kxt7d-lP_mL*m-kPqoM0l3Aa??EcIQT+&QwHKSq z*v9zQaH;cG*n>bCOpi+>ad5})LG33MXRSOw4xY^4P|X+JyatkkF}oR7yER`+{RXUH z@UdzuHL*Yf5Ff8P)JJ>s*-+-k-}8GCXqCeV`0u4oXnFT8bs`FFfDY&k#A?;qBlhS) z3FIvUtbuB{67;WUCmlH({qkhNovH)+uqfv1sP^012?k6TE@n>6CBQ5;#graO3+my_r&qc9B>QQ;TKnhMzG^r}HPPC1W2{5AB51L`{% z^jY>_UeD$2AV9etL2`tZhynWA_B$G+&J9rkL!`B<%$o&g8)!9CmQBI3VL?+ZQLm6^ z_Fc>yZJ|zBfuRBQbX}oi&}PjQUoQ`gGPWBLY}a>eg$3dKKOMO-CX=0rFB6c8`DqR^ zXI4}zhiPHoSR{c`;nk~I$?|}eV$>0*Ur*1OH?|ZI`yO3+=JAl{uJZ`e4|gUI4V3gV zBR>ep#nca@f+yp+Y^ztz>w+w|D`RPgdP_=_!X zb}~$U8dTJ0cgo!wn6+8DI5}f2Qp4jBcVWwnqkpK3aE|pb2bzPXxZmtJO-^7|5g8gJg3g(g$$teU zrSrc~6?`rByv9l+?@6AX-C#Tm#r2PU-4V1jd|cLpqQXi}g#KF+(CkA$1zbK2)Pu0P*+LX8GjV7uO2OVFT#pwUvdXukF~pY{RqvutW*Y08*y*hE^F5YCxq%3fJWG@iT9@;Y&F09IEqCBDmZm zU$9-cE!qL^(7C9xc)RYKB79fs^;{tg0{)TPE=^v@X3O`OsJ-YYUwMDUW`3rK+?$f0 z9c8|Myu=?cytC(Qd}rnX+L6p#z=Z95r80tuD@a&9aB!_u#^^dBDP$n|@#zpJ;rgYUdsnvPT%5($^JBonECcnZ#jX1fYvd{!w zv3MEupipJm5M?1AbbHxLEPm8+QKnzBVjO;6LgQ+L&2E_L`y?4OeuOk53{^;fFb8!o z(_C}f1(4KKLzg)s95i=dFX{x3zM~tEZL#HNfL|ypSQZk^LM{#wzK(!)WChQ@GVS?i z3kq;1S&@N@#*-XT38qfrq~=>}?HB8+wNvXtHy>+v+yUvS9o$Xczp5H5>!=UyRm9;~ zpB$LE&M|p$b!KHrb%$&wJ!A~1q=#%@_Tr^$^j;}bvQm{&uFC8+bB!5JdeE5Kv7HQv zF3wYcN$tg!Z2xo;W9OxGXm5qWG6^Jo3%d_~#JoZRon#{{gp~DE4rWT3z#*5xW-HFr zgoRsXxW}v3iuz@77^ilZo}EIb23XcwsQcxT65Kp9o0Y-9Rgmjp%j*#;XWh4n6^o(w zuTU$&eW1jiP($85E<(kUcpNn|nwp~0XWoYkIk72!Cc4~}0xtG_VfVNG9&x)v8s1@} zWE8%)5t<1!DxTVrg529L%#5PWq;Kej*BK8*yOo40bw&@VqvGv?lzBCIDw(`zq1K|} zZWR$!0NR&Qs5^L$*Osa5X>OSD+rVlBMGW1=cW92~WtWh%6rm!YLStP<@i0SYPpqq*l&W=cfm`z#vkO=BwS$!gDhJVkQ$V$X;wz(Ix%igRk;#ozFy3h*H2&x_No< z=k#NYoSG4=m#nuv#X#HxC=2-V>dL4JhvYQVdXqKzw(;sD3Ahustqh1XqjElF@cry| zcf;4dqv5Boh1VsGDf3mmH_4N>IKzTUBr8SxH{ey0n?ji!Qm9-UK4kFW_)qC+noCMn zqiLrrPte_#$tjw^^;t{@QcvCXhc$QD&qxRBg(B^ZUpg=&{JwSDQ5_N=n0vrKSyG&O zzAuc0@K+Os`3(S))x+A8@M4(Dkuz7GLrIv-Dghkwe=R954heKPr$=wze|3q+`nXvE z3&r^H5R|JB*u+{0E}8E0uGL7d_N1AQ`JAw`L<3isf6bX=GEH==`lfKI9!3KaEI2Kq zHgFOZMToDYb(ewF#lL)cm*rJT4kqM+^sK4(jzMh_W8h;kP=@&!x!20#l~}LPc^x`| zh1~Uj1RM3KRADe`)v0qlJFWagETou}{%R3|xhKvJgt_K`S`Ps3G36Ho49xblP`8_* zX|7F|E!7BxL)$%}?qgwo%5+W(@yqf>4ozPSo3>c?hzPGcJ9wzW=nnN}L^>hmZzIF0 zBIAdOTx1<-Z&cBAcTE=2iBrNys}xUYu7ZGBi-DtHJgvlszs}A+JGi=blUW=uFL3oM zN}zgKB8w8=Qey}>I<0F4>vA6t_?QoUwJ!TqFuz~;kxIA~H~E78mNF`#*P27#%#hgB)+DEdE>s;;Ud z`s3TP;EzKo_Z%-eARRCgyG(L0?P|Y5%)znH`rMAlJTmcW#I!!P{V&#c=^HGwrVTe& zln}XrMap5u7~b6YUv7;1Z23i`b%u-7kZnYsqaxKP@}5g2MTlmK1dMM1eqI|uV|r}e z;{UiqzILls> z4JO?Wy1j3SiYn|W-&1A4VxC%9JZ8*LQMDv$bqVMCVG2zW>Bl0c4p2%D5{5Em$4>Sq zU2yscfKF!PIepmDfc$}B0@J*NJcm0wxY#Ty!xQ&SECFrmzbM!d*~@meRAJ)3lyZhK zUK2=h0?eZuP5Ikwb(VlXA&ak+kDB=rr~i|la?brTnO`HC?j-v zbSsb$s1!Ao6s#O3CCNNFf#?}T=!tt|!*CI4 z*^(|oAI!Ej6TdH}KmOday-mt*{uQ9pJZjPDnsxs(7(qqAXEN0;h%PO<-ax-|GnEo z0g>>Z+Js*f(wCwPg-UtMcF1(P{<^E52Ye6$$!(^P{Ixd}zr^NrFFoD37C*QvAVFOE zN}c5p5a z+qYz(V(s+Pwm029&tKj05SrG9$={si#k~y`1m7O1zQqq=N~7PaQ*1Y2gV}fBrr1co z5gl`iDw&F)0tWbhAFVn0T$qQ)_QHO&52V>aglYiH43sDP7=Ec^|_)iAJI_ejF4~Kz~Ps(yTPz# zhnl}Y8yat{{}+_8so#nGwH8Sb5g#rr7TanfZ5W%AnQ*dC) zVQDi5&Oa?U*M?&D!eyVebbQD*tH}z5VG({q`N_rTO8Jk2rUE~uv>#my8HC$Ehzok7 zQ1b(?$(ovRcr!FG6{RXF>K}j4k(09SWIwcXstvMHpZzKV1HZx6pj}nc3u_qGqjx-E zWV`GSz?&Pchs{YNAo#z+pK#0F?JHq^$6_(~U09IaGbn%#%na$?!8{7PV?Z~@?zA6c zlV4SE!`pMvS-0d|PfXOP7)0-44(=glY3256c>68lpyPUKQOZJh2^aDbJ{790cHpnUI!#Q|CC_U(C=bDIdFGR7{uV!9@KBS) z9(>{}ujY8Vv4n0~i><4NW_Y_b6>c|H^ML*MmQIua+OL+rA*_rs%pMV1^Ws|PQ0$iZ zYMb+bJ}Ph0bMpRFz8uX=p|(yIAZnrxOIO~ay)d}Ej13AKmVBF<^KEr-juQNV^j$Fh za&(~L`>7;IzNGS`a7xdh2KoabSiR-6*ZPNOyg*|)7^6!QDw z`*HrkS_BH;fzyKCAZ23084-_JT9Ub$S;L&ihQC&VV9*DEIGWvkE#%D5e*X9KZ}?I5 z7^mMuM~ryT0=lsI=}FFCwdw9JJg#(b$yc&Lm)$tmb?B7QgdpM{0NGM!=Y&G4{OGb) zsz7L$ou(RF9q)Q4SGN&iF9iK{;qC1_o_Z~yw@$)wC+U4G=i^8wySr5<|5|0{Zk7r^`!{*J%JUI5T}eM)M+ zydT552ybNR8_Y$6A~QaP3zfP;qhLp#W&S6$#_XSY4EHBT*%I>|7Aa^YXd>2=Gy$4| zM1GR0s}uw;jH9zCx=ePuBl6s9@oxg{{40g1P}dbP8VI0&3vZo68lk9+j3KUuqo*1WdkqNh?tEf+D!REe)A{}SsgU#aTEpkvUtWy){DKvSwu ztGgx7ZSYQmI}(9`*GGPpZah~#UP8YsBM!QTu^!q@HR2t;YHu7=HDxoZPHr-GMNq1V zx){!6sm9PGDXYa_FB|FBO^GTJ4KM21_XFbC>Ea#oVads3kJQ91BtA$YHvPUxYpAi% zk{vt7=ukfzxWytGaD1`V217Q&CWU?e{(#fD4!)wK9#yj{KpkNikcvh144%9o0pC2m z7O5w_xX}c4!6_*tVA1zpb@+Sc(84u?f5!pFI$0}m`JrdfUs+>lApI}E(oLqwMt>qs zG%11{ob@Ef&xBZ2+^9{SP98r8{P?Ltx$hM^DGybeDr7j%x6ULaQ3s+?>luCFF`L1y zoz-bUzqLn?v}$WfC>{>C0VSnTl&xsmG}@>Z3UDJrOY_4**|6;gWd&8{v41$ zI08m0=Z#|{P^}vpkDf5I2AccX7M8?k~DK0p*$1A)!qvZNCe7ur33H+2&eRrdXLz*8WE6 zMhylSPfdKtWFFbPrfg5dp4ox6N*PE??Py@KXZ)T1s^1CzA_WvOy1b+|@YnQ0@kAzx zg~ev>aKleUI!_mGdmcnes2h-yfQvSB(4YDmKx0@;RN#=FF5si|BoZCyu%XR~LuHyA zvXB0?HMC!@zr3%;e5LGSz_c!NkA{*0`kBo``>nFUKnXaM=b>=XAg_Q49DGe`w)E21 zYyv-$Ie{M_NK(v0qDwQh^GLLNj)|XiPEw93bDoU6E(m8XJtmwUeapSf$IRTtt0Mkx z{UuVRF}rX)7e`nISps-)_1mL<;~$GnA|}K>T#|9j%n+?Q+5)=rzf^oA?2*+YMiqWB zT*y+^5TRMIhEcr7cJI60$Z#2SeBp#q5BfGj{^NSvMpu&NDK}7zI=r5i1~8>UUDE!B z;*+=Wq_ABZ)<|YbTMcTwk9bZIOXvMaVc6`;OvzVfo!}-Z0MpY;X|gi;BFap)HCqX3 zlCtR5#GXOve56Wx7fQ)drt!}Eu@d7L+ayU7TW@E6>|Q_AWjZeVKSvp*#tpy4Y69`v zKIVpdH=^wZz23mOR}p;&nZFe8n-(GHQs+Q_I6r>GhU#R0 zs4EtlAUbnQHa;@ufX!xNCqsC151^Ql@MnkI+G&`+={fmv5|6EzyoGqFSPK?xqZam{ zj(Y?dVvTsR0i8wmh4EAMxj}Bv=IjuWI3y(iEosgrv5}WhY&qlUr2^Znm8vqKmD;(G?!C+N$f{o{MIl+Zuxk*^$={L6C8 zqp;wppV?hJBf0qt^PK&0tc zP&dp63BRbwZ7u^akz~IrV;tz=_D*Cj{^2k*{_X>V0iW_a-AW10WF@xxmQ*FB9v9jj zlnXeM5!r{`1@dH6>N4?%XelRPZv-RaN`W?()%#FE30K+p!A+brS-!KYp53Fax6Gzr zT)87%=e{D85?FKG$oL7udl$_=6s~=kguY8B?DYT-N606rr@q|loCyuF?W*U8SiAyd z?RS&mQ=iOHe}=CmL9rv_IQaLi*$2DI9_Ej!?+Xb#D--ZqX7S!x!HJuO*(PhLDzRK3 z!_MEVDgkJeVHI865kXhaAFbKhlE*~x@xTci`5{DNxrcyn@}Ce1Ik4n4%xUQdjr3Be z*A;R+f#d1BGQ9~$$2@Hv-?{HFVjf3k3{LVd@!Fqnu*Tl!&GNGjTg5rZ!ig9$0%?E+ z$?9soQzt}&oo1CacO7G_@XoJGMw1b- zpg11C^^z@l+@WUp>E*nSS4wY5kRDMi)YW!PgG_bGUX0 zq3;8JJv*+O$uQGkB92cgu5+mjU@7#hDs+mX35FV10*>UG3gYxYbHGuwevF2XVVBI$ zNx-(A{h|-BQDOUoeDInZbewZUZ>W(8i0e6t2(oAsM~FxDc-I`8vj?R)BrP71TlD;k9OIYEnOd;6!T zYsCltyDvA2Utk%MaOilc6oz7nYGpSvL)Assze_l$knyzdI>xoOizNp1Fc-YaQ#mfR zl^Qk7?#awg@rtne1Q{77PZ>sx47*&i716$``(!G7@o^9sEJ4iwcc?}Vm3z5+tz#&P z8pC@%G7(TY8=f||(@SF?c(WSJdE~@9MR89)&hku&lQi!Q7EaCD6cp z)@>v`H5ljV^%1{8ygJBQ{Q~Xbiu@?cvj4?q(vz#|y&v;w4M@E_t7Aa}a_{`#VO!^s zgKxr~<)Y#~&snNgU+R}MDmabWF*vO;?!(pu_cLM8-Bs#8G}L6Dq$iRlb?#{d+5Ena zwwelcU*F#||B3-&)Gm`PC7lst;&|lp(?!@u1NP~@6M{D6i863ZU(a*AX7$XaqkRkK|oL=W-a@tTBl zLcsafr;ZZnCR7det8eE}p2#@td`tAX%3XCNxag!rzdxC&&f0oVy(wYpBt2Z~Pd}Zq z$V%zyIwC$YlpGx5^)CzLf>g#uZScU`m(>f`-rzI!vXX$g47Ux57wCSyojYqSCwIKI z4J$1f(b$am;X^NUu$;8g{zueop+Z6cw!A`(c^W6~!|E4{nckjRL>S0_Xe)xf6o1C* zUrU?~6V8?Mq?*BD7p_vh*T^CsyQ;Z{^EeU>Y4Ch62b*R%U|LI6C(Xhx!NE*nS$OUF z(4JDyi=kaBEZslJU+pnOid1WAy06WpgDK~RGa?cwz|!0M5oa->zD27wLNm!IF}eUQ z1=+RkU^60RN!T#+tfMe3ODxXadLZ;1YtB+Is_^ZVr zFTa0yKVE1 zJmrgf%s)k9WBJ#w%ur!nXx*pE^3Wj8YtOJk75RJoOX4{~@!;A+bhm3eLz7(CMe#bK zoed$Z?SSe3CefpsOIKm_sVs(zFCIH-H~zEwF{-_`R;*P-P{CL@v!c2mKvzYcW-4-4 zWpY>gVkDyU!I%47LX1NdQrP`)Lv3^8rJT$2rZ}EsgWk?^BuZsSUV1y&T2i$_}r#0Q5q$2vGkNZ6d76IS(u;SB!ru)N;Z?mpZjLQLKlSNv5tlu0Zf$r!CiiP+v z2nPj@jPrq81*$LElp`|}c-RkL=zdjDuqSPt&W6=0K71un?@f8a{-2%Jgz{IyCst_7 zqRT&_CS_PBCvtmyHf3nIk!>F6vb{Y*R5IE2wMr%*gTAq0rJ#m2y$^rYT-&pJ`qflr zMUz}cz@`?Y%Q8;zjLNfWoM1Q>uA?nbtMJnf}FO>+5Ez- zo3Jfv3t=yl{4*K)jV9;R!&<3j$ZJjkS%xziSr1t=5Q+6cz}S{1RDr+Bjk?p;iiG zK!=Nb0f;ATmz6<8D;S5GqxQn2w*@i(=wo`~UoaYY;PlwWeY*K5Pc896m8Xxh2C-^s zFIQqftRc$vq@5_emk3Ttn&VnRy&FNDv*O&kYVnKJu8CBJH#@1y{M)$UV$`+zxn>39 z7tM~g^VnbPjL^p$?Q*5vbv$?zpM{r)5~n_beWW#=Mi8IN*oJAK6Y9D=2i)3?y@ffu zh~2bLp%}r3s{3z|k~yk|y)R6eBDW;+-}B(}$ARwL8ROT^q{Bt!8W&keVr4jN!O;DBe-6~JHsD#LA0^33{RG;W)NRCQwRyS%e*P)Ta* z6i3YuI@#PPIN6LeRa%ADjzxwIBomp5LYI>%_GDK2k9o7dvSr|-iEGqgII4~IJSTQb zZSEd-mv3$kTRE_So}Iyxi&t{%&~gl zzD5NvcSD}v{6on2UMwic%}W?|cP2b{=P^u%BQe}E<|=))rr73!g)jGQn*Fqs6gV{wQI!m#R(f8I&Q7j&gfvRf(~Pn0Xg0zo)KNWGj0a*f%fc2zZt$ zJ;}VGj_Ah4XHp1@O=jbPSAqgHxFF)q2HSPWp&qY70KEXkE`jS#sm=R)5$R8pzDpWs z=FQ2aikUZ9{`r$Pr}z0zWJO4S=^6T)Gv!}sE}I6zvvXwyYxf4~PmR{4{bMu(VA}Hv zV}A1%Lp6gyB^nPAk}zl`ru-aBe+ydE3)&1N0JW;=*a|ichI4gycR9pl9tIj0cEk5* z>Z(dm_b^k=#{%}f$$x2bPE6eeNSW#S^eB||Go+6?@5O5?R7CsycSx9VX&=eIue%x2 znKUr8DzM!WY4rXxrFxYLXP=KzLfdB$4Y*~Q5+9J%5q`nuWgRO-)e+sY04F^HqRte@ z>g0&gF1*iim8e#OTz6U~1VQ#+qyX(ITc3rB<+H8_<1_t2d}pHqe+Qz=ZN#X*zcfDuuM)0GJ4GbY7^#iUD8b6I2&=*yN)Q$#*|i4!l-8 z2M^@mF}mjA$6nsvexd@KN)GPM4*AfY%8nQT1_DWOxHq-cj3`fQN&_YAB`w4jT!a4T zfEKzol>cIiOny$)A5Iq2J(YFo#d~~uMjZe^++ubHK-a$ z&N<{f1q?_h(eR>4{tK)^8#>{nsW`3f2HGWkFD^)*%DA!z%Uu1VzhVEPDD(?aqia+| zWzm;E796>NlgLZz7kFHd*f4_^dHZ6kMy#MolA5Yw9_nmOoo4s%{b5U}3a zFtHnFE7vMG$;+z06RU-C5hwiBY2e=n1!baGkn65P77xOnl+70yV;ABxRb*36lk-`O z&NNJ0JL>KLqWvsaE2v`q8s2adCI2jZ_Gsc}09uZ(B5usd_pG#3uKcj`rh1~2JE;V9 zs?V#v?Fnc{08Fx6W_SBqyf5Tg@>MmH*EDHzU}lwc)9>nZ^X@*9T{ zt2AuCyqq9O_J5YyKfQ}eaz@vU{OZYl)p;N^H3q*uo^lCGuY1*B(ci4bUQ@p3>G>Vo zsc;N6Te2lq-0yxzI3;4uo0&!IZs$)rmkR!NqK}SNkz+qyV|TCkn#TLCtE8XDZqcA5 zW~euOW@!*+irf-dp%dFiBsR7Lk7r&^ZM>q`3QrqBx>o8VMF9u>*O7kJh+5Z}S0^hH zS8Nb*%S&&(2Jk0#PhF9BJ*{dX-(CGGO7rF?m}zB+rux}#R7L%^L$pG<#pLfhF@K~X z>-`I&qt+SwohOhg@C9|2iIlxQ>=&J52?8Y=iZ=3&se66p$_`m$_FUC*2I5QV^GR{X zrsDEMM8LN%kt|Ss1FWWk>^~ms|8ru(D^12H`3wdxUW(7h^nTP6Uu`!)SJ^qCvO3QO zQb{jTb}CJbXN@eIt54My?_h?X6@pTbU)5-Kcas3tf|cl@f6}yrA3Y6M)zwsDK;_Z} z=o0gDG@3I)P}@%6-F=P0uNCfFt4NvjG49OYw7TD@dKMaNH7|l(s`;R>D2MwvP)AMtFqX|iG)utTy>keppS;7{H%8%*o)ADf z%fPw5=f4HawhdesxnA%fj%0?U#uWcuDsO-&xxrb24Ohr33sE8xBeVWQ%z=?45*f)k znb})`?oQ>n_6jhxBa+6bEZOUSUF(SE_o@oK`>l>CGf4vBg5+Y^i_i&~)2qH&cd2#w zQ5YujPLv2uF%W__iugfK8p5m`yF}}WFgVZ&$&ZbTsqp2+$sWsv4_SDo8KwG{H{Hah zhw)o^b5MBizd!*M_&)Jf)F7qJJY=LRytnp&nLlaJD>v!vq%K%75wkLIs?8TNCPP9W z8}v3*p{@pZ(cFJ8xY&iqbuvFm={>YcLE^rR$E$X8TDt<7ZybLB?~Kajt17LXY+77Q6&S{#b#QKQ^ANhQ*yL{Kl{*8k?AAa$Pt)y z;9X66?vkadEAeI5U|isNfyrTedis}@1S*O~7ZThkQ;e5uS|N8qdm%JC2mCPre>4e( z3o;j!S#x-Fp~1AVyH~g8p94cN{Ysf_MUrJ!sm=eup9v}oc}D+~Q$F^jTtH>tE5QdP zGvkXiqD+Nx3kjJ#5_&OYoh~$dB&0fb%Ar*86dyQqCcp+|ifIxqbA z&(iAX9LWX^TFGRpzOkj6qval9AF|4(DS_2mPY=gLeFfxkvNV&Qng%o&s@DYm0*GIQ zd%^nO2>jWxymJM0Y@X51*vLR`1fhrvdXoRV&8j-4T(A!G0<0!2tb(kky0nXU*v2@Q zC9hk;(|HCfEYNCZbYAa^ao%5OjJ$U6*AbqzmAx^fs@aFvM(wFn=hJYdc3fi9+aIlr zH^N^nN`=8%GV7^J|J_Jx)96Ep#!2GMhpk4THRR~}zg0W2abk2-RX6dwH|S1A(Aw+-VbPUMl=T=mpvt34KFBgl2!d@M!IK#@VC z=Yx0lQUMr0u?h=t`MGY62<8NLG|(Q!@&7!_7dBJnb6c{@hRB=5wB;62vq@;zT;u0S z68+IrF>=2+og@cI)Z?T3&iV?oiYKS}FK`|b(p|eg8)m4SFtjk;oZBJx+yB2^5mr_L zj&grEsNac7Zy$MK`-g4e%&p*+sZxMj^l~PJy|zbHslkf~reU`q;T>Wv={d@H%)4D* zhO(cWZ}`{hfG&cuXr8>Wqn%@WjP`Ou^GR09TkYsfZ%wq;GO<dz6EG?$rUi${72G4gX z2rQK+E^rXRfN2$I;sN@N zHx{e?TtwKVHg|9jIzN)dt$eOATEv#z+y&(fwQVc?ZvamI!5wI# z?5o^V?7n%mN>CJlMmTQ(Gnvi>srptdREWof8f$jhI!Nh_zalX0f;%p$95jLwq!6E4zZ2wv{gjZe{ z7IaYt59L!#fnbdT3dflZ95R2eU{@=Y-5CiIX zxIIJbUYv&~_lK4c%MCJDzX;uxVGq?QstUI~1<*8fvk zq7H`c0eN!1{wu6vvW-KZX;Rq1J2Bu+?D7nMa`ty|}7)S!!p{kIzz8 zrO#a(#6Tne_qT1(jw%>GUFUmGV!$8Tr(E(X%BwBOSHje{^C50r5d74@GLQB5;s=3r z!WsBn1Gh|p7Z`RrWLh@2T}`hRoAzO^7T=t@E@o#nqW|^kMrTUyrOD5wiUY6IUq01u z@;XWR!zZ9+;WY`NJmTEq?354+^a^b}l8UWYtSwW+6s~@%hEVOr+rk6m|F@z9j-H+0 zQBF+hXABhr>rXIB8xDyZo}E7+RMqO1V}4xVJdg509&q<`_8E~zMy0K}yyc|*@2USi z*~>6OA!?os4?GfqFaN(M{`-pL&3-6u%~K3pIDwHdp>W2X+{escsP>kT7FD9J!8aQ| zQt2Y%qlnU!Kkl=fB*G=i=7SXuuF@z8zju-A$2DO!Bgy9KC1O-$hnIVG>o zgs%%FUW^@-8W-50klm6_J;kY-QD!b{&x*f%hBBUNI?GW~Il+G8&*oU7RRaHS36obp z78czD=m?5qXmy|bGuZzYMCtt4ufWi_OyT>+L&&|bo;j^rZ?cM-D|-Ib`ORThhJqwN zVkf0X6RMfXg_+!Q-;G!M|BCzeaHjwN?=fcBY#3(dd>W00IfgJpk>-$8l98H7BWgv$ zW|(7&Rt$n*>3|VPT?-k9RFdf)Eu4X9P(~A*gP#b zJl>cWqE57U#4xgSk-gww$^vFFws(iB&`LAI@9-AL82)R@y^U6WuOVlRbN8RFs zvaTzCRO%hv#uHeh?-5&gUWL}}ihC8NXzhtXt<1|r_& z=wygj$Mwa#hGv-N(17BD8zzmV#;CTXC6f(u>C=PiJ8c7PyMK%S#n(AzS7)3*6bPCb z(&qIJX%hzS33lZ6Gf&);x%TkSqseG*uk3|Cw>p&tMm)@?li5EIm6}#vuzFx1hi-_= zj_(hers?2`BJ<*iPXCy{sI|@ptV`eYw)MElGG<^R0M_9%0vtV8FqgX5DnFN|wq)Zd z0R99;R6=%6I7LAtU0q%Gi!CH85|H;NY!h=n?OxRQ$Y%tlo@#i1dSRqN-pL8g@-gus zdYR~uX{}?~kUOE^tCYoyDlL#>w+D*i(PAJF2#Eo{fhzy!B?|)l>_ij&_CH?!-@a}9 z$p7}C|Ia`FzXtvvL;R1I|F@(4|N3d!B2z=*z_;W zaQa!cA3gNI_fOxX9ydkX9=z4@)*_*NrA0Gu_SETuyH}P!pBM;^^hReLU&Mdx_-3PN zLJ@PWMdNa|1m^7s6k0r4vR-Q~^GN29;7e97Pb|g<<(=RmA}9uz2Y%jl=nUNu5Sk`+ zvm@4?xiw}bn1yWl^K4M|OM}LfhBo$&z`Q;3g|og;BaCZLql_f9a&RYfMf^oYXte`G z=$Q=xWp@yQq?AZ^&E&d*PL+{08n@eUm?KQ}5l(z@`c-tA7!MYo4^@(!u9u@~K335g z$rAHmaV&b~(!m<1)CD%lJ1LmU%qQ>>sBD^slAHGT@!jo_OZwF`T#g|fL`A(pxuEmT zw+!SVeTmQp<)r>)v z>7T|)A!d_eUT577vq8P+ROwDXuG`bTHQP<|4#`M`!?s*Z_&#yL29L1|6KlCdVo2A( z(~BgsQ>QHyhn&{-%3rCbF|blp)j2~lsYkb(h7475S&Z!LsHe?koUoGWcE+hq-c(%4 zU)D`4&NUpApH|0XUbcODoxTr(t84aFL)A^3LQb&YcJk9 zec8S|)5A?hp_;ZRt}Xg#%QjykdOqC&XR3`SkD;T>(0Sq>tLNhxD0u#Y(@?!w(!iRH zU6pq7FhgZmj4v^WeXc%{X074eyG64K)-fGp)g%q=Rh*7pHjxk9kGkg6(Q4xwV)&Y;u*K}BK^&}6YiXYjRA?O}5iS$n z081K>vsVHp9x=)UYsL5wzjj0iI->aHyyfaVANG{#2&<~QU0$t`j+&&rJ3Cu%r_qXE za1s7-H@z34aI&fp1$W5+TI^l!2*T&m)|RnZKA>CS`j6Vw7$9q|iEjlLmoXD4-YgwP zxaLgWW&CCmW1qoaR{l%=@2E~xOV+_f=+6mqVyfzh(!o8Bcs?qTt<8`*MVG|rLU**4rESxS@gue{C+ichAsMAeT<33o0wRwoO{0-;p=-{K`y;|yhbg`ckk8Nb`$4X2tYW0(kK6fD(l27RleI11rW8 z?e{WC^~AJA2TaGxnAYP%YdW5e2e@}p@L+8gV0eFbM0R_UtHsK)hJz2dmvokZu^rq3 zy|3L9_UrM*D#T?SP460{MT}vIQ-nwRJOjE}JC(Ly{ipM+W}`HXb$wCqQHK@pf_*kw z4X0A*e!L}fjJ}Eb)b&XB)!$C)iLlKEEI#h0?G1?`*oKgEpa%>{_*!1q2C_iR6~R}f{AuA@M_cucGSC}^VZeWt03pNx?}Zi7(|F0?LB!X zJ=Vi6xJ!;D3~-Ej(6Uvq9mi68o!Q*F8=1*d-&0W#wk%#Ygt{48ZL+%plUgF!su0|o zba7Vesq3aYt{cwZZGEsTDOnHjnd8NmjC9CM6#Otj<)slO#oU+3$Pr=U8TKU`=>4;q z_bctMVcc|8F3*2h`aRueCTY;qHCsD99B}Ele2Ury)&YuKv)Bh@%AON_(-xi@?Q*;` zwzVvff2r(v96s4wr#MBw4_-P+Afq03OBZK3Jo@fX64Rsj}@T za-QU!c=n#xX$ciU!(vay<8miS9z7ucR%=N4!)-kAOyJVjLLT&q5y3w?YGEgyj}ru8 z3|WIu@kW?x;88S$8-7Gh6_26u9U}X?I^bg)XuL7OJFDRAFq?Bxt*0yOZ&<$6g*Dq| z{K}vDd_fG+meZ28n_}wGN*)ov|M_CpEVi(1fNu9|5mi{PuxOR*Vz|OX)Fe83=uhAm zQo;o?rK(ktH?u42iGR0&A(2~$w8(<8dTc#X<>Uhza^34$Hqa{tnc5T$f9V0Ce?guz zMdKJoxe9qqp)=2?33$eol{U=qOEBsqaX!s~uKQqF;wr@yJ?q=RF!V3=Y{BN2(!_ggbHqjoq-O*d*;-uEJz5{T*xHq&1zF*)d>lylNVO613=MZZ${r_QoDhf%&nk0H9_J%JtBZ}9mO0L<1M z8;Tw6Hi%mqNty)J9i#KcGWOWFkf)4URBH>a&7yzDFPoWX+)C2}I^tIf(v50i)Af8) z``N4^xN&ZL=SGOWK>Uu8Gt>W6&c3*jtaOLQvB|9qM0AOJBv#HyG)uUde321r5u?x& zOoWQU*o5sAe||y0^k9C@7-qSe{>%q&m(vSrHS;lr1zbJ^i11a` zxdQXA)}}A^ZT|W1JnOpbY|6sWd5s#IZjV2vo6GvVV}_H|`-BJOO|xT%2&1!rn(LLO z)*~=9jq01vdPp~a5@Y6Hda`r;RB4XNnV>ev)hCwTFaAhhNtk={Y*Ak(B*G?Dt(sQv z%wdCu&EzHPVPD-#08ju`aL3M!|P0 zEa|z>?Wj>?DV)@|qm{H}a9PC!WqTAW+R=GOEe`4ykzt(ms6Gml*?3Iq4lerlvUJhq zjyYqINv)o+FE76xKantyc-{MJ7GxdE^~TA(GuW?AGKEqt*@V)kFk=GAoj08S%=$O=>@5?>^(jAc6L)ZOlXqfbup*T+}t-j#h&=w9vcODJ7|5^S}LJO@p(|{6F zE%(S>JMOcJDRVfVbG|`AbtFpQeWNwr$FZDhi&x8?u<8S={R#z}*S}_~2WD@w)O1Jw z2t(lE7Z`hPjpTE+`=797cw(QzWM-(2$|1^~!d<2C-))27e_d}EqFm|?l^q<_J?L{I z9q_QOhFu;P`!;o~g(CwnD(P`kme8%J@^)7iTXS+Dm;IihCOruAT$)*fy9+N5cNO)THHC$S1p}HMXit?#7+TgMA zW#@9h@*)D4)I!saX6-qFHZogd|4HDTgUSgLaR{DFB-QZCPyh#Vl$P_Fz5xM*H`Vi@ zhH<_b^R>{LO68>1n2~Mh$RW8DoE%PR$pC*b*jZJ;{94yR4a77O#J7}0-W8l=QD6IK z)X-Ng04@XsYpAd*OPQoMu zm}`U)CbZ7-fR=a}-oj?JLE$ZNIT71=*CXdM(3v=CDd*jyA||-oJ1HGla%|FBk9Ol6 zClUs^C7$havPA_h0xzv~f?&6dik>$gJJ|rFPoYS)$)^<|Caj`I6A0sy~aFcg_BUSE=UHyTuRSpslmmLZ|dUNYC z+7{B`wozi@Kd*MjjqOQV*@Octk)>&w-!cN;I_+Zoer0KH1`4mH(Qj1C3Ua($WC1(Q z7%Z^7WeBjlur;|$l4GmMFU>IC;tY7vHeJd<<=u_#GJz$XXsq08g#vkY4b`kaZ&oxX z(EW9M!Ajec@M!?KOP%Zj|Mmi^i%MiWyEZs78+%3t~-3Y@q z%{UeaFLPbI?riHXz0bw^13es;UeLR&P_zwEb%Xg~Gpnqg_>g5@61jJOU{qorW@)#` zS^pJaCZw_KXRmYjRB~%|*0O?JH|%2I*vz3<02*MMF9PVPW!gbid2;#&1w#_FOB0L!ALnDJIeSi(UM8P!~Ysm6YKl-(ajVOe}K*nu~+_& z<)K%avzKnC4P$Y*0V8Qp?m4I<8RK90LLh!Ip-al{B(xd@KQGKc!S&t9EtyesdW!ee zqRN}ZE+SLB**XrLf}U+7pzCOAl$)nYU8TH1+c2^-sI=-qfF+Do6CtIM(e)pely}l! z6%NzaEU&r7{N=iRO8d<&bk*OA4)yXK(;MU5LA_?N?#w-8!6zGc4!d>>-@yi2h83uZ zcAR>E7Od>4>jnhOaA2HpBXo*teyAxZ8 zhb^*~uud3>PWI_IpzdmXIm5)r!x@(gP#c!i7bh#wv?xd^lo=@s5GZdlm zbN(k&xoy%E)2;1?p}MIB(@420koQ4{Cif+^Z^|PfUoH;*0k~(aFHbgl+LKtw<;U+> zvW>f~YV90>%Sng5{gb}bn9jcZr5;lR-!mizJW?~@yDSr|c3c>%7g6_v_`PlTxn?+k z2hH3{n1&N1Hl`iO5m%X!zk`XTfg2>_2jR>HtYm#qEc%@=_>NP@$V0?Bu;n4y&vvnY zLU}ERCr+Wx5t2HA+jU<#iaw%^tZ7!Q>k>nqKay`sW>)o1X!FhqYXL5B{p^yt9Lewm zW4Hpnkg~b5z$Kd;fq-vA=m=(3BxHSzWL}}1POYW@xbv6`PAz#yIlZ5t7ha*F0F3WC z0A82ceF95#=B8)4!uHu3@w!&VemV5)u{#=*SelD*iwE_jty_P*Y9uVwu4F#`jl2ns7V?3VMh#o=tAyd7R z$c7U3L?ZmYEpBS!sGj?LQz{Ru77~GLCp;(EU}I(QaOzY3YhPmfm^wU9NWgFFqTe3K zVt-jOk<-?c5A;!PGmB~k6|1bQ^Q$u!1Ql;XSxp_#^w~X!Vf80?GCgP+>qfPmI{Grq zk4JD$KCf9HDzN%w(&0pqwE}+(3i!0-Sl|J|@__56zE=j4ME3&V2dq`kEBQJM! zfZ6wojS5`GsR)L`FL-oA(#whw9_$Gz0P>x50XqU-lemjWvnJ`@OdM7S9vxk zKY>M@mJ4%hn`fD6z6fghsBOi*pHquS+th&YHdN7c6{={w`Kx8^){rX)(pAQepzFHF z=mXkEUG3rJH-|gZ2GvW;+nnd7Y<_aH)7dpz7%CjEw$>>Lbz8B!KIsrxVl@e2hE958 zlWVl4j_7XTu+MsMAZw8aLtt{PpKEIv59Sy+RnMOmK03I%~^Grv?tsBv0H8eUo9F`XSy#f)JKBF-rHTM~J$>v}h{Mu_}K<^uSciGr`rj+udr5DOjob1l|s zqVzqh0po3`w!JlHhL@M)df$59N9EQrU662>>a zM4LL8h9%B7F9cc0mWXRRG^dwcJ_HJ0efZlDfUsQ>1^FB&So*|W2zbf=`Eby6<45K= zHFLW3SwI@wWQ1A%Q!ohkq^>;mAf8uk-789K-iM${y)`aZ8Wb`W7BA)SPfNbnhQ_xk zjZFFuEh=GL9sqgpJ)g6QIR`{nCkC_Bq$j;amZ^0O%Ih24;@BCXTrF10mWJH=Z5QV< z$Q1aJvv02`o_&p0nEbG26Q&JGY354TgepziW1(~Sg2^4<%Qqav+x zV)MwSVXgQA!5*3DwtYC`O^aG6kd{&&KZiwsEPK#bZ&Dt09vhS*+S|?8J>zjQW=e2? zi1kZ(VjF5T1WGAd29ggMHvvSSLFJZOtNfj?KV0y?f0j zgc4<+1AL65E?Hnwn}VQ#JfDfJrpPnUJF7PJlXsTp$inHl;k8PD(hlz?e;Yr^@(QWm_ zDAGnFOrk4?EpE>NZWFQ_`Zxr56ySVqx;Yf(H}%4GPh3Y;amMd@>>b4K(G&gaOMNRt zGJ3z*8(ZSyxvnVGIhX8IyUdbh1#O!$bso0Yd8`3Kt^wVuY6PtJf%SlHmlim+JekiG zDleo)JG#W<;M)jFO&7BIH8cx{mx?+US5u@k1$WthVH{nz_1!HAHOFtuqF)A#rcD-@ zt+I14dDDjWDHi!BIj=O@Bj(a#Mx>r-tBns+->ipRrS9}+J?)m1E4U2VdTDaF%15%# zW~CFdu|l_CI^%k`gH_!(Xp;^g>9|W0x@&&)CXJ?xJPVzOx{)58L<+;fmCUe!{s*c1 z#;4Qya&(}>`R=AY`JxQGQRZV@MLYK zVFOxHuI$yK#c4sRn3ET(JOckt@~N3{9u_Cpjn7>JU3lvV?J$H!(m5%-_2B zNQX%eSBijo4?gvov~Z`tvlEByr|jhEWwH7q-Lxca`!0L7*PNbgUR5>%Qggc=UIhOz zC;)~f^OkQGh_RZ)h;oJGi}ddCJrh4DyEu>mfUxYdI>1dp4V=9&H8^RTD~9{D5HBMV zaCa=pgT~zk-`DlIz1sYIe5FqSeZJUJ5eIIAz9xXx?N~Q#FYe-n~2I(g7TwX zit{c*f9|IoO4nvQfZiI12c^qsB;hmXat}j}V-lI4OCF!}QGciPE~ItdfXvL>GPLM? z5uGGM(FTl-uu)VX)m*^rx{YoXes-M47s z@tjKyX4M;=;S#_udrBTjCY1J@mm;QtL$}j@aLehNb=9qhZT^Yq~ho zCqr^uNlIQRYAcF2&w#=!5cgh>7!Tv+ve?HdioIf)wOQ`{iC#f*N*Z+^$# z@_JCJ8IEZ791OaybeTVV2iu3t=kl4=v~EEl;xXhLLAr~o`m_J_kNSUtsaiMd*^0Df z1u?E80CheRhS<}L_7p`Y*&5iTKjzC1iyLP_8cdFWOSS7yG53eRnpDF&iH&;5u`A8R zfq<_gtrA-9JVba~QL(kdb?$(LY5He9BaB9Ca9{}pbK`~BZE8eGIvbE<0G@W8emQ*~ z6R0Jf4pDtGw;H*w>5L}B>2{GZ7x>DlE~R+w8}6P!)=q##???0x+OKYuKSA<)SG|8OcLlP?@R5sR-`zvPFp=CO_ezU=&zq5tf@{Ov8@u+U6SLh- z@nA{D>(?LF<@!V8?lxs$hFI_AIGDRnkHEv9Y5q0ClQe4v8^lJPUBb&%)F!ey`gOFy z0q516bH&VE#i=pqtgFR2(<7-^URgL#YDWdI!^vcr1;gPuTBG9RL+6!~FkOmtuVVFn zTJk)O$ZH;t>btA3s351h+S@VdaZaG+u$9C9HYY52HG$dRYW~%7t8K#G_2ASD<@caM zjeRSkc*yG%f4NCWwTr49;)yWMB{1VM#p+zw{wd-9o(^3KV02@t#eG3CHQPCmsxN!K z-c}fc-=o-b!0hAq^qe{h3t>AJuR8bC!*{Bc_R%*SYa6Cy+|Q5h8Q633JPKar)A4y= z;7xyWI87S+$YL9SORTvxb-JBeOiAAt)K4zR&{HB3yDXXdo*@-ojdX~T!-x?D?{LP~ z=_x4qr5+zVALP$G3#8Yk1ibXYiWL5@mAxn@!{!*cLZv-k{>32j8;7D9?;|5t4pW;R zL=;_SGGIo4&pI)IC6{UNSzn@SISMYxcz*Df`)Q!)9HRCy=6lIHtlTRWyK-CQ;h95| zcYd6~8NWu)4{jbm;^H{kebMU2`zwIes%o>zVSvI@0*!4@(yXxb2OtGB%BdRMqT$Ac z6|&uyJ1U|A)4xMqPWXditrCd=tOj&ifX5;~{|qYWdOnO@AetK?3)BftpE*Y-uJ)pd@47por|9c_A=_fFE#!OAudPV;_%!6|r@B8WDhVOHpu(!MA{E)V+X#q%P4H-vzCY z1ccC%FjVY}eV%6Ac4{Pt+lYo^e-_naAcCB!s{4IMP%0HjLr;Sy61fZoUkS`mp(|h0 zm6ieYUp6KTAE&?%2)eP-muNJa0v_CA8vJ=tyYBZQg5wGOLU|$ub|WR`CI(^xs;caf$<562dF5GDVgD9=s6^_ zm9(oR*K2M+;^XJJ*APuz%?^FVPuv?_=~@0QKrZ^J4eaqe=#zPr)ySu{@UK$VKnW6v z&Gx>hmP_oD@qv&4Zr1Hrdh5DH#}!dnZpt|F-CLl8I;YN4>2NSVWNezjl=Ge|0;}(g|D&0Llo=i|1M>{ z(R4zo7y8){^8LQiJawG$;|U^8>Rg9nckI=m6ZbOiUJMcEY?W)$M$eK3;@RyIPx(4G zIw4Uc$h|*Vu&6GB8+_lV9bVb|4LnUit1TSx7y^Cm*gV)5Su0UfDLdn2{mkKOB4h}2 zn(u8jiPt;HsGUpQ!G3(izPeN%Uu_jll?3P;}GB0+#+8`^)-qcTzD zSey4um9e-6)A?;VUixnnMbK#_AXz{A~%N#+2GZ9K!R)Ko}ZE+KZDrmBvl{3?C? zPrfdl2E}>A+?K^H7Go%yghKoc;xNh{)oK}pIIZW>Ks=^N9t83{OfI8*LQpIoYrq2JP zWu9Hccx6G(%LJ^maH}G~ZqOKzsu7xNF^ zxyc7IYvAgj!VVCtqJT7)u7`tJjZOVFT(}^(Gkxu7i%gUgaFbknuK&2z< zeTWP|S?;(viTnd}0SrqVl~46np1?~~5@D9O13xA&;Sir+EH(5E(4a?7L@{vb&fQiv zt4q$zJ-3du8!#=j+$sUS^hjScT+_p4>-A;v+AJly-RVh%>d7CWkQ736)XqV<+hZP&Wla!@KFgEJEC8TMQ|pHYEnf@-7nkN>nX>z-C1S&j#BsRPwdO zj)!c*1F=M8tl{fYBm!4QWmI9VPRRm zORRz!r1)r#~QQRK1Uxq1J7A7U#d5}=e1r}LBU@vnc=~k==cA<;vIpE zP1&iD{Z%xcN$;=o1!kb=DVwz{6P)p+50LMR+)4LROq3eKJ6i);{vx(*uxB%aAd|lT z5v+LyRbx*e__sF$d&F^+Mlm1FRR`)h%xjkz1OG1B95aogl*7ECu}G9CMf6>Qk8YLt zQ$)DeNgI41-Yj&JkvE-r{71)s2v}vlM4FxE^@;-M0d(oB{9H4rv*8}PtwKf6AX+iR zaD~yU3m(<&PN@+>gPoj?CUmZh0AdhoI~)*yMYAIru1Y*C*U{|L6$SR$PL@oP%0ab4c-CM?jX-8i4dIZ)l zAPQeiUFuF7bEPA9My{2iT=y-oz1tXX(jLodq>m-$x|v}WwuVUng4GSd-I6^9;*6&u zH%Sa7zCzGH#@iN76T6{3M7DcDsO!5h5kD2q5nrC= z^7DYEM@WxjqC;n^IbDLuJ^pZ=<8SMBA~wn*PK+a;UObaU3m3E7^3SAvVvMYu4CNDZ zAruT|eAC1nsH%a< z0YlBf>p?*r!vCAKWP7$E6t61Cm%Q(nafzMKSR-2C#aA;bA>~VDyzNI5c8W)LM9=A| zeB#=pyc{@_^#vDb@=Rfck%3_Nt6@J84U^K95(Q)xBcLTyw890LpsA`?I`U!2)bNnR zubbbkTh9cSeDQUoAfZFq&M^xw~fYuW?vL7@E_I$pgan;{xE+P@c{>^Obh8 za-i6gRx^9e-;pY!jojag;a%8Fmn)Q#ph!OE_f3VBc50cdUvt-NsCt}*%H0a0f15<# zfQLkLOp5S+3Jnv9av*%;ki zlHsmpi5km4-VrI&K(o(j^xKu^l8+II13d1b?2_^ zumbJW0XMBEUm->C`evN-sW-YJe6X-4ss?`Bm%%MZZ!8QtVq|{yFFL5G@?faH0U$4efhMjos9+w?U!iFD$-NWgpeA}ysaK~gD+{;lmsl=KsdhcaD zujI1*VFY8h7#kYvBM&`xm?v@bOcaF{Wo09AM1pwwSRjY302HB+Nu33TGIP2=)se%Yi+)2-e5-? zFcwd}K_0c_3`CyU-NtTxSuE@M41ed4Aa^y&dUZ%0iDdc2&E;+Af`B|*Ipz)w1LTs22ajO`zH z&MSM@pw^+E{f^Qg0YBY?4yButB!1}hMI8ou(||T>9h;1|9@$G@lI#v>Njw=$iepR3 zO(_H5rtP~Zm)n}@O5bp{!hQjZPxk9+Jw?&?0I#yeZ7!U!SuuGUiY@IwFe<0iRT8EU zr_d==3RVhpPRx!%oyRA#rWDMVYsRfs!Jf}HEybAv@dRjZdXw24wp@C=6=4H;LeY5Z zBzdIeyeQmdxCZ6iw0Xg5P(NH@U#Ign+3&)w-@J#nEUk25hPTxkfoHJRgc_9g2Y+R9 z!o*6`m4MFR+k+ruc5kR$o7Ltpgl;7ZmZTC221>W9p!@gpfRKFJmk7EzsQH4snz%2$ zoC1}-tjw(&?bB-U112Y4`*Bd1(X}Lb&1I$4vYV~Af;G}#I29xPc|6X=&;jos*J^H4 zHaU*;HVTLVA9J=Y?_7N4t1#$NgSoz+dN_V?SL1?%^^vU8CMbU8DmYQWp}7Dq+hZs^a1f>lOYo+W()(7KQrvMnRFIFm5y0f}~30J=x{2O-n% zokuxS=%|Yf@CBTyycbT46pMkN7hd=Czsy9EIBe+mad)paqSv=G`xfmm=UahZgWz`g zKIc_cm>@b3GsD%~U8S&9S6(b<-&qfm&`P}n3~(LTTPf{@R)&4DTy16} zbnS^Hgd%fpNc?`NgtE3Q)iuO6#K6vJ?MTTY9q91#;M)`*u-5o06o$nw$$kzgQL)sx z|Eer)3234}3i}eHX6({&_1TiPoVK|2QS8x}>!YtjB!|F}6$Oc20ys}%CvPq`D7D#A z?!Z{aU$E1!D{brSgd8+)l@%PA3M8SMCt*2VCct40OR2K0Awv|gavE^JcJM>{pEZ4e z4LX^Ar>Yf&Vcf>yEo^57Two@h)u8l8OEwKC{mG~}e;ihH!~qT+(2_OSm3d%s&-EbX zfwr$Pn(ciQM?cIwEyZ&Y?G~n*t6TD#6@gCOG^k{fpF6BiOCV#eRjKw19MHLG-P!!3 zYnG4-sW%nMy0%S_=2ce4h68_lQf{%-#cq$@??Gu&7W zMzA!)79qkX*8Y4lS^?+%llh>6 z+)5m4T6Y&i5hE4%vq*$;{_Q(U(yKqZ9@qP`ooWVZrmnQhXaD##@N#|oZC8U;J+4qH z+%7pNr3w`Hqmw`LuG3Na`ksU6UICDhBn?no6b%0|dJ|%)vl!X9Nbm<_%9Uj~%x2s7 zks{VcQQfSoS+q^nMrzBSF9-F7(tqFFI;6sP1X=(-zgAu|0jBhaA3ZnaSH0Xqqp`?? zJ%{4hpLw1Qiu(Frd^CZJ2)8dgBrHV%pL><3k&qZ@u5M1ib(1djIa`>>hy(wfM&}f+9Wg6%jl_)cQALjnR28W4VwC9|@ z;Y(bwHU=mS<9R);JLUncHuEuY-?MYIMvV%5^bDb+jOVJeGx0jZD#-(NeBRO*q z0&u4$KF9Am{hshkfZPDzJnnqft%y@V&&3G)kky}6P}8`PSC?a;53 zockj`wEpEh0~yu;O2FC^%~P3yDXI+hot3GH$2_e>*l!6OK+yT67h5l`;&e{Sp1zqCoJ`3y4(@uVZD^aSTPu_dLd z`+G5VKUKErO;V6AQLobcTE_)UE%3a7S(9Xfn;rQR6OkBKegE5)cGtM0Ms*jG zO&Ky_X0mGa@a6_h_x#@*8|lbDTHuTIAjKsaQ|G3{VDhSn2cY6Qte52q);j#{GwlGj zaq4SVwvNV+*|`k8S_Mz2kL>n|1h3Ea^9+T%R68$!rz2i%$BU=53(Vy23wmyzbbpoqJIMQ0}0 yPpYoJ)LK8vS|<+t7P)?$@_+vHf4(bu7a|{h_(egzUKa3f&=#_{Yn@9->i+`13|GDY diff --git a/source/_static/wpilibDocsLogo_1050.webp b/source/_static/wpilibDocsLogo_1050.webp index b9fd009eb8bf7782cfff25eb77ced835ddc08df9..782d575445dfd95f74e34403f1c3ff37d5531a0a 100644 GIT binary patch literal 45524 zcmbTd1yEeg_UOB3aCf)C-2=hh-QC?GxVuAecMq`Su#ZPDK z_&?=l9svE*`pGP#0)hNT{{M?G%w1gF0RW`(rp;+#>1O`M;cx8V9(fJpP{KFQGP8M%E|Jdwe;b`#>54~};r-$VmLn*v*q^GT= z*Bk$OV=4y^N82~Pdt+=zOH(%hfd0ojRPL7MHgEioF&;~Vrp)0>S_TIcXo6!b@Bm#f35kS zQ2^#YzJ)|LhqEcj7;?|BU^Q%((;r zc&^`klk^{%SvCNCi2wln<^Ra2iU0sD901y;|7$(C|HO-pySob?E32267mKZ>Im+A%vb^71!@c-qo|FYp9{8wDR0an=y zfNjhIpig51P{$JhG!_y7Wl-?e1N!&ADIjP8|74yv+3vsM{*B-I|EKPy%!SGr$472lxRIKoXDxlmQJu7cc_M z0UN*(a0R>oe;@>i1mb`sARWj73V|}93aAH~fiFNe&<}hAz5_GB9Iyhc1KYqMa0c7} zk01~T4uk^20ug}7K-3^c5C@0{Bm|NKDS*^Kx*!vfHOL9%0rCfhf#N_Zpd3&!s0!2s z>HzhF#y~$nOP~$VKIj7U0EPl1gR#LRU>Yzhm@^%590437oFJSsoGF|;TqImJTrFHL+$`KS+#Ng;JQ+L(ycE11yc2vVd|11PcToghYfggieHMgl&XJL<~e)L_tIiL_5R~#4N;m#9_qWh?hu6 zNEArCNUBJ-NWn;1NR3FNNE=A^$e73s$l}Nb$R5ZE$e)n=ke84zQBY85P()DlP~1@x zP^wS{QPxoIP_a;1P-RgqP=io&QQJ^wQBTki(5TTw(Tvc1(K66l(5BIj&=JsS(8bYB z(F4(Q(L2x=(62GDFxWAaF&r`CF{&}fF!nIvFljI)F)c8|F-tKAF*mWGuqd&_vCOf; zu*$H8v9_^cv1zeovF)(quJ;@#pC;fvr~;>Y4Q;LqVd5I_hd3G4}y3BC}l5<(L)5ULV-5f%^* z6CM#^6Y&$76U7oW6D<>ii5ZC1i2aC5i6@A!Nk~bgNnA*>Nd`%dNO4I;NbN||NWYTq zlVOnwk=c@^k@b=tKyVrAXyZRYSE*jX=#qZ9|<&Jwkm;LrbGg6GiidW{(!1R+iS6wubgM9SWT= z-3Pi7x?l9L^gQ(T^!fBN3}6N>1{;Q4hG|AHBR8WhV?N^#CKx7OCMTv6rUhnXW>IEO z<{IV=7F-qumQa>2EGMi~ta_};tRt*1Y+P&(Y-MaK?3nCw?4j(P>=zsi9OfLk9KSeG zIHfp)INLeT-!ZR8fa{t2J+~`&J@@{5s`n=E^WHD;VDqT(#Pf{u z!tjdm2Jv?D-t%$ux$`yio$@pD+w)iR?+MTfSPGO0Yzk5cnhF*Rt_wkgOoWPr)`iK1 zO@&K@|B6tGScp`J?26Kh+KJYRo`|uDxr()l-HP*x2Z;AcKuJhT#7ay_VoGXC=18td zQAk-!)kvL5b4mM2_sPJ>$jcR7hBGg{EboRi$;SEuo#Fy{^Nm6QJ{5mr&PMw_OiTPfM>t?^<6{KV5&@fXg7# zVBV0{(A#j#h|tKvsK*%1*wnbi1ja<$q}t@kRN1t|^x90;EYIxBT--d<{Ln(gBF$po zQqVHRa@R`GD#dEgTF^Sxdf!IaCd1~)R@^qn_S{a!uF&q*UfKSW{i}nvLxUr{qlsgO z6Q+~B(~vW%v$yjP7e<#zm-P>PAJRXZxyrj%xPjaZ-P+x;-wsm~9&{cN9vhxQp1GcP zURqu)-Wc9a-V;6yJ~2MKzEZyBe$amAegppG{vrMw0iprLfuKOMz=0sjpzxsWVCmq> z5X2DskjYTC(3H@tFzv9;aFX!g@XZM6h?+>$NY}`PDE_FzXy|C$=&2aanCzIBSc};4 zIJUTqxTkpY`0FI=f&jR=3C^?7Kjwo7m^gl6+RT% z7A+P_7q^wrlw_2`mU@=%lxdZXl=GBVRS;IhRXl%k`m|oDRykDlzN)I4xH_>0T;ox* zUu#f1Qzuc^Ue8=#+<@B<*9bIvG#)gWG|e~5HxIP%wA6p5{+!o})f(FdYV&D3`(pED zyJ0uG zQXQHamLDGdCiQJ_M0BKgRB*I=jBl)CoM-&Yckb_P6I>ImlU$RnQ`}Q+)9w(PUucPpNgDLoavlxpSzyFUc_G#Tzz+6N51V(4z<-{`|8r)oc;EY;?F0qqa}1UvGAOE!r>i43%t8I zHMv3Yd#}*mHI9slZH_AyFia*OB%SEDFLK;QbfoWK+{Q+xcrpYkeaF^?4|%&C#@dos zLEtA4aP!;pHE2Osw>b&F$!vj?yy<=Gtr5wMR%x_WreSWIh9g%jL#$e9?4sWsq9{6r zUqPN*z3`Mz{bT1T*4WtNGXchPArSEVdi}caYWy1XU+}8_XFW&J7dh)??%`t;Oa9kX zkpTaVy9Y_iu5fG>`u52g>fXWx1sCF=!>g(L!nXP(lD(HN;s&0cxEqZ2#2P)`=itM+ zQ<5};_WiRC=?~m#Pgm;$-1nOBdrz19JQj)_H!EAqq`=JM-(e&r-yT~d`LJlG08&E1 z+c{Jknt|_Gai6_-@FRXR630t=m|Vj(t?A)9>V3nb^}$<-_Hb*=s7nuHMkN1xJtp;aHtt1yDZ>?jG2)#TR4aXJ2bPR=qU(P#Km`NG>SDTR$eZyD4T+W z@#92t2y*=0KX>ux+;9NPjiDaH!Oq{Yl>fOV$IO7gDdUGmEkbBGD+ zcW5Drm!LJE*1AQmULqCo`WfT96LaOlDCSkNzqeZrb8Ix|Yqm;KYkK(Cq=$3eHCeWD z&z>xp?=4A&FD0Z(FUF-6q`D}s&OBKAA1LeMT~Vi8$}_+GG;~2E7N2bp*SrPyWh%KV zX3}yPll;A`ps0WrRJug%?6frmKmLs|Sm^(15b3r!j;R2rvXl(CjK^?`73^6FvMot` zW)=B}+5kbYeLX6oc6~i4g5ulfX5I|ccn=NXnTw&>in+`C1@kF4vWul?=bf_&LQ_Ag zRpUqZv-}nll8?r!t5GKa)Q_0lotW^D&BJ zzYuK>ib*Fm^|eoTpBGS}Kcyk8O!cl1Yz6J(7D!NO?-U*qvGvo}qLFiTGZx|VrSDK{ zo4!tdl9ga)Pf`<15%onO*`w)j-)wQdlvC_G`_FLjqO=K@lUVyP?|PBW*O>Mz-ISs~ zTuaSmD;u+aO)!ML(VQ@N4GuuDP`ZX4`C3Em0IM^MyD$PQ8?{!v-XmgQfk8BUKj}xY z0>a^Uq`VyoD*c?oO%+vcJVHw1MX6VbuS8EQQDNPlk%m0{^+oZ<(ykR}p56zO z&t_-re(aWlam(?sWlT0vvM+s5(ZwG%7@8mKm#ZI6nD%cAx_miDMfOXv%8D&@4UL50$s#Io8$e!62a z?U1QpEqZ%$OO_QAxbN+4K&wBYwjA3;X7G-psU4H~VXE{c1+zP~kESP;VZMccv<5YH zx@&x0WLQx9w`5q#TT4NIYA6ge4~-2n7PoYP9FHON)7z4iWZ&)|pXt;+FfASgc73-j z@z4h~GuyE%~#OuNGN7Kjge(3r? zAv#;kE1Ce?T4t1YQA`?vL+XW1NwRsYcG{j*2q&^-BF9OsnP=`2A>ZO8SAokdy@n7v zuxxByP{GK<2y9z6Z7 zZTiB-|8)c=-$>D&zS+nMTgj~I{&>En)$5Eglljtz_rL(NXxmK}L!ol2Ik!%fRPj5J z!;I~; zJ7DU;=l}3yUGyjJL^kK?iZU$f%V#f}Fpj|c_}FVE$s1Jhy#tDykA_v)^>KV%7yC-) zaLup6vFqfKDqAmD7dGlV8*6OjIctJ{H?xIb0w0{jQmBz4nCCx-SIP%DWpS3N>(IaF z$|(>BWfJzM%5;|+`fVAZ-5Ad3W`;`L&c&MOHz_afY|qtNNBD4CWzakq8g?Gq1aehB zoZJ{6(z-Jok&k&IO8&M5zDHBzwmhadmW3@%aS(k*^DX(N*fXQ-K(;gIKZ4XkbZ#qf z#yj#wyE@r?_L&501^P0=vNTDl#(QaKD)d>DMV}gOB)`;OppvOm6~TekJ(E!=h*Z%= zh*N-QvgAkOm)ipIoe!TDP#7Gy8n=tHvS+y(AZSbQg!`BHljhbZ~ zu4GXH%U?%@gky6~gZKSdOOvX!zwWCj4CQ%RymO-i&=_AC&Q*-;hb>-HViM%=3 ztM{lv^l*bVo$>}T!)WOtSXM4GWo6q2D{{m^S*k}wF)!Lp8dMmuMMr@!eSvUxzTfYn!SsYzenp~UCE#x zm$}QUZ}h4FcfU$GxGkex?Vt11P@N-IC`7UAoV3s zLL)fYliX|#G@xMxt%VO$yjLferQv#?YJ1Ys9Rx{gcXE0&ksg19L^{~w*nVnvu)MI_ z`5xja88Dw&x?oJmtk%;~{rA~&kHxJVc6tBQHR6}$_t_oZ`ghurZTwDU6jcUZ9zI-! z@SzPg_|5Ylt=L|jVmeC?f<&#F6zbs{(WcDC8K8d{+%;CHD6Ibc^6oob8?%U0-0vFl zh8ulZHpQQ3&o;QPa@aN{&CX?4A}5llu;iD_SWH&@UQrpm(b4CRpETHFJ}a0UD&>yM z3pda_mC)^-)!yp8OHN0)@Gq-vNwahaAZFTJ2CGD%q_z@&5g)p$`Gbahy-Ezru(2;heo4}nxYd%DWs3Qmtpu1hk-yAtTLY`8W9q85ngKo}N zy@t#op5%wOxFESR^f#finh~YuxY0~ofg*M38({QW(ESSxFnk;!rDjOQ+MUeb)9 zCe=LY!j^D|%rlkQfNWe{BzW zTA-!v<=Tl#fUePRTbx7qt>B0&StQpi#8y$UY@|q`*R@-YjLmnDbP_6x< zR_{iQ`-SuOU&7isZ4x2%pAO|lQNb>joD1y0&wI}^jF(Q>MDfg)Zvv^o3-$QF*J(vq zH3En&GL(1upl&ql6m+*+*Ab1&rusj~(T0jVQEK#{7cE(P_2YLFC-b5S@o3RamkI66 zo9~qKV^!$i2^Krlr?HIod=o{p2sEKm*cue_BrymN^o07BK28d2)85M;FFHg7kkfWw zD!^{fPcRqPshdWUb zoX~ys=|iueF|-8NH2*!Lm(>aU&9TE&_@iStg>&@-p2be$ZYR`@q*@1IN~9bQyvi9N z%4J1o-xEf4;4|)BI|LJe>>aZvSyu<;G0LApC-4vRVeN!B62?_$%I?ShJ|uA$-+3Qc z7R)5%03Uei`BMKURg)_?0BdECD|mCZg55kQpa=g#iBZ?ha!{n}N#1(kH@s5ZxQ166 zW7It#kJ03YA2Lhj7JiowxmdkqBs6T4K6JX$NJuR*3xd<@` z5+1(Zcx`KOwf62Sg4s6a!77N|*@Ss-he6_JJX;s@K~Nv2|8>J_XVwJ?RK4m(!(?M^ zbO01+pTvpNfHJZAPMbMRWfk&U%|48OMB}r?bP)i>uDZXeX=~S!G6*9MG%JEVX@Xy= ztp`#zJbuA4?0zNc%dp1$TZ2(_W@;^_?Z5h2a{PG>00x?e-B#%s8Tl?&ll6Or)U~uu zFcAvxF+_U*WY45)&^i{nMy+eDps8u@1hkkB|F%AfJH#jc-DlUdc7TOWOiaM<{kwKp zA2p956~;@Y&%G}jeeHk(=2t-ztf1;Dl+Rm4u5zpgiEU+oF@d3#@XK#0sPyk$u2rI+a>mC)Ny9RvJJiHN zAg*OAuU}diH$<*RfvATbaSa|o9f!-M-N+M`HHrC=v^b8F0LpcT9nUx80EBE;>VxB) z?Yc=s%VCD0mQ%SjTg=?`BqdZx;4dHSJ7ZAR6r%cJ3XV_BZ=OVo1`fUpf4Fsg!&r($ ztY8bRy-M+U{Pfo->6N5&`92N?GRweia==q7OV7(8+BGxRZ26jN8tHE>CIDquSaj(R4}O!=%Aylm5^zR*57_#b3{Tv=4=@R(#%+9?fiW z)r{m|mLr9PEH?&Vkk)bpPrkNYPp*Ks6M{dzZbzW{nl90KTG3;8&rBkG(W%n$yZJcR zW0Y7778XHgA)Tp;8?$e#y zq+~cwrEI`8svJ3T-A5XU2ii+06BLv-lune&R@5|0c5IL$i-9&O1J5SA>q%V`qY3AVJO7fS%Myj$6&g4 zF3Ca5hVXzNdbrqQO_9vhJhp~biFN}U%xZyeOJ}Nq#Y)^7i>A0wxy~Ye{n15OVSL?97|QF zx^EuJOUUcB!OWLD8`*R*F5P|j8h+g^8&=5)RvLVo0)tK(4`!lr`Wg?>b4=IL2RkgS zmWZL$?7qB7b&pGK_hsO%j6=~8*G8>p> z6j0pqG-k}R$Tk+`3vni&9)9#vA84}c%NRkpETwwLRpXTBb(nHwt=h8Jc%fg)D8BG( z4HTQ}$}W57`dB<~OJ^^eLP|gS9;feuzI-(nas<#a9W$f1&0qKhAJB$#wm@TDWvV>q zu2K<2Dc$9lE>}LWq^2o3sXDHNi^gkPOMgXe=lZCk+DLKseJgwc6MDJs8i{Z7(}WAO zDIwn`dyN5ERz9eP|1N~~;P=Za9ILS90G&Fvij0#Evnk%t2fHNO^rYNbd>D#En-)0FDkRL_KI8P3p6yAkvZB; zDuv9GZ!hXIrH6-Z@ZSj?%S$do0XZe!7KTNgAC=8{Ok+tU4_F25d{ikERFgG^NA`C? z{&G9^B(-F2Vz*H4M!_y$x%qV}__LyG6Q!`hj;}%(OgzSh?`M9~qsB{Wbmw(U|Gy5 zL`o!C;jS}dgGFeiwm`HmQNkshG-(|1IL`!jP^jx=)aC@`?=df11iAx;AL(8Zmumvt z`Px0AOH&GMt7ADX{&X@j;!o^#;^1eqkHhQTi}p05uJOO62?bRTG^Ur+AuGhjGs``B zqfCZ<{fMc&{aj6PumI204+0)P9sC4+c#k#&Lr_!~uMphS-XS6jw+g#dZt61LC=XWJ zi*~yI7=bYOmoc2plRk@q zV_kUwsClv_Wc+o8rxvTMabN-81D(GDPG{5wwmp%(TfVYwkpV71^{I*o%fAw0SY$;P z_{|tYVIk6SJx#~eyonHLXR??z=r^EJ?*6+bgjSEnsA4jgD8m`gju?SB0;#YA8tP@5eq4415?k!C^j<}$ zxOr2|k@ljWaDdoX>9$P$(7z{6h?b65q1Z~&_^nuvq(ugui|p%vSRw`YC&Yiqq~<%v zFKVs_=@YH7CTs{dZ59csuQ2G0276Z-7aRNmxthPL?Z8HT>>Y>cbplViB|8RU(*@;% zZ)Q=xv5lL(6LSFir0Lc)#T+BEE##;WP(Y72bV3qhhjNauxU|s2BYS6^D|W>zfnhI9 z(X8A7dJ=`XNOX|fVyPA|Vh@Pe;7p{DadN{LZkKy=?AG;L)!}R&9&=+y^jnc*~p|43Vi%E@-Fqv z>u{M$1Pe;5<4Xd6m$0Q9t8B44fg)l0Hbe^+yzg4S48!VY$`WXEI ztASG^8Z$9NH~X7j)tj``LIW4V(cm|U=(k?rxY{A#U&d}u?%lNc#}wz~W*P*Vab?&s zy(sox!qCyRDYO(m_Lck^5GBvoE-$?^18hDHBnPUkx9Lzsg@+XB(ks%nv|}$eIOedW z&qg?L(`rk@Ncgw3n>rovbhPP}Ui*;=d?u2%1n<2j1ztvrbb+gC*{6+FON}WHIo|{L zRGx%eFDy57g5MdOXX>K{&=g!>N*#;Yu2t@=ja}I!Q6vOr*%y9Q$LHKb)log035H+~ z;v+yqP0542aN)~$q5vRl_(o2TnLEnp!5S3aW`=j=y7sG0BCE~J7&N$D4LPZ?Oo64m zCX({_3O9WWYYLZg8qNNzPb%yg&#a4j5;IpBjor~l_T!ovoV%-)?Fx;8bCWV}AEqVx zZgy$Y)=dZ>t8Fm0xHqoNO&SF$uN*r9F$=mrxoys(0BUqYC(i+S8|ju1y&+l?noi#* z`tkJ>bk5K5zs)>;Gq(n>!W)r;|BTN}Tk13{hi&qj{gFeQra|xBUWV+mJ1XtZUj!p| zrS<=Y$NHRUVC?Y~=9nHfxF))rL9C17U8VJnoSG!p=6Oo_HxL`EDXvg;c%nBH1+Kyzozr@kg5#EhU#-iifF_PJVu(StZn)NXM=*t53x;Mln|1Q z0OiCPa*pbj94ngYMO*6M0UE}xstBKR^Mg`W&<-Xvz;Cl63xl5xj!rs*4I0`^tb3Q& zE59tF$kGmzYWyuo-ST-QuqSn0X9dX3nuJ{QmW{9~+7v6lxDSt7Txg}z1U~F!VTod}WP{*m@b!*1Q z=DCfsQclBvlVpMLyW{rTA}*{W&LgFs%@`wRBtxVSRsBpX*) z(u1uE!lp)l6l^f>LR`)|8RL$}vx;#Bi|9hz;>Gbt9 zbk7J?GadPFiObxf?|OzOG^vj;a#>JB7S5r+6RLA&|7Mt_d~j6xY4PoZg0kt!=>=WEmx@xS!QCC&yC~{EtO;G*!ui3kb~6kO6db zT3p+$E~*TI+F!e7Ex<`!&*e6M5k!iZhvH^FlNmdLv(Qox+EGxq=>4E5=cZed0jFAg zV7pXU`R#0~O&K+N^@*fbSCTVFV<@?q4j!hiMmckJClEAv-emr~QWsQYZaG#+>VxJ)D(`xI_1< zOQctM_C=2we#Jay#t!m)jzUHuPA%XQI%zh~pir(hgvx@kGVo5vp)h;@q{NeSvoXKlr{~EH>*e>05P_2(sX^!M^NG&(!G=9RD~Rl-{1@e5L>~%zVB-GU3Ht1q8|rV zz|iOj$-*D8oZ0Nw8#S)S!fJM`RTHh3RWz*ESY8`1hBZ4S*_kk!O?po;i6n2Uk6#c* z&p>)=vrj9v^j;Brx*7p!Oo1{EqL}ext)4(jse*(1hKzn^g6GNt(-39Wo>s~q`}%X} z?nQ>V7`hG(Wz&n+&q^?oN_ex0^3OFy+_<*mT+;}LnZEN)$-8{24nYqa<0w|83#j8KgcpoI>E z>-TZ1HfCme#>Ji}dtTbUlF^=tM&dbwx^Jt9)QqMP)0qZ2Y=|m!G#@|8{&DU~3Z57V zne^oUE5QC&%3lok;siSC&n2Xy;O=Tw7fJZ#0FglmQB0H$&FtVh|9i!hvDXs`M+0>5 z6tQ=CkdRs!S<-p0iCGl+^)q-fu7^tD+ywq2JKp~%Gem+5Njt=wW@&%>F70?{^olI? z3ctyOCG}_m6EN}a3-J!x{gu!S#Hl$mG%Y zgJ@;&u^0yj@R5AO-Y#vQ?ukVOKk1;l5;*e@8Z?qknmf1YG&_tM%nwb}LKZapcC!}3 ztGJ-^M5^hM$aSi^m7`;?U$(ej+&ZKhpAPisR(%O$Q^_K34cn`8rUCXPUM z8O`9vKYjzh^z&r6isMzpsGBDpVO{rFkrZb*475%%dVdODQ}hXKvwQ)K74^7gFs!$S zVLf4(S%tEw`B|XfkH(3?^|?~{{Sl|?|LEW*CW0P~o>K=C;)Ua~4PW6HYs(5ja7Q!Qh#B25)*%QPq{|JTUnVl={xU6qcwrtWZc@O_ks6vmTaKhqBE|&2pep@35%AKtjFDKbIgJLDr6EgWp zY@UHCm=#+WxkSmOioP*HR>Rx}z=wi%(%6*1L7!(j)H9@!O$=&W*P)mL>s2 zXb=4$YlX8{#LdhxpbvJ48!{l9K)Db`=DsDPDNm>!25B6gd$v6$gg)uS?Q(yVT0!UP z4`rxXs|o49P{Zyt24!?L(BAP^SO-M~+wey?uzrE^5imk{rU##mIm)6%LY3-eTTA1C zVn|qJ8S=;gDR7|i*9`MD4N%s{!rmmjA6TxvP{|K=#XD}7$bZj|)I=O{3XdbO2AY%W z7%|``~X%;EM(Pzq~$Gcam-q`jJfheYEnV+k35T>ut}7 zW;O-EKizN`|60z0{P4TzRpUUrnipr`$^K0ja>E!mgWrI14%KhR+T4Y!*Cwzu~a|}3wEe$!@nFgEC%{lL%S{HP4 zP@3%=R>nQz-m;nlfnj5i1^98iLjk|jrO^TV=slJfO2$?8wp3yC>+|bY-;?6q*$x8e zRd;`YG+pZHZ1-cP^U+$*S1*U3S5iVnW%Vw*1pEnq;sYI9{VpF~vU|QqYF>sKTx$RN z>))#Ij9S88;fxHkW;ZSIi1Us!*;&9l>_xJM8@^7Px)Rcz`RsW7ICQg5iUGS;Tr6{* z)HpMvCR$L`+2o?~v2ms`$xQSf;zeR0c1*={L*$C`@qGINvCrta)*^sdH-FR%@z?!{ zuA*ahm|6?j=HvNEI|Zagwavh}hxpEd!kGWpb0BV2B5bg4oZ8v5w_PK@Oxt$MH4@M7 zXn*x0)H{kfgSz#XI-B?mW@eH8Mu)10U+W@YJu8s{MOsT@_-F9{)S<#~IZ9hREcwba zTo@vI^ef(K)JT}e=NTZTU4MwZ5&(js?kmLd&zkA02{wnDgo@lNL^6p$ec-Lb;LZ&) zvjomV6@8V}gS1^qAS=dSy*S}6I!|h#!K05rIJu&lI+)}>5Yb~eXk6EV1r?fB5yy&G z1o6V-VUB=5wWZOhV74vTtxrw0etDgDD;L4zTfo{5(^26`uEEN8gmpvNw`cNJ*QA~o z6S7;GZgQ@$qpDc>x=|vl5Zx%*4B7q8o!IJmq8knBpO-G`Zh30sp0bC!C*#@&J0F-x~qaDmcoOQw)U?V3|Gsih=BzrgQ(vj_Oq z3M&DeFk`1IP9&XKnjZUDpW3_(R8R~bhxb=2+Y>bvE&lLa1e7q(lq(Z| zf6y!v>G3talG=t;nr5lbBVC6lJ(ykz2|lOY-}(wZyThdXd1`SI5#<(_d1mW}rOvAT z5%5>w1Z#54n{)SSt-Fa2ZV7iqWQ_)?5MqB&EE*!`?)~Bq+gw3RppjHwKWw+*fd^ZI z!0OiZtJ9F3%U}C=b|nKd^?IYMAG9pw+BMq6Iv3`=%91e;zh~R3x7T*eHfZ%h&fW^g z+q!jT^`2Yu$7NuZSot|WU#|Dlnl5wbeAm5qC~JoyX&3840f763H(5y zDHYbZ8YGgVpUa4-mngAI=SD3iY0<%?!@f!-Ni32xCa&2Rx%8VrTh&qkp8qRm6)uV< z<}+u?YQ8dtf(kofgs6d8EG8>tse{2_bnPkCK;lFK{f3&#e^V6Z7%}OLH%QV*y-AGJ zJ*()>j;dRo6|Kw4{(6SXAR8FqOS%!yF_TNWnjEn6FYj|zgXCHIrWnXP1cQ@FQ&8M6 zs6!inCbcsfh1CHuWbf%!G3x6|^-HP?Xg&$68B?Qul5ZQ}dWR8C61K(I;Me^9%ge`BZD-8UIYpFU@7S8{J8vLD+;&DX8i&iZho-KYT4_5{;r3qvk{(=0#z^vS4N;_)e1 zyHsa#iTxh%_M&CPw)#6yyq&Sr^JkCa8NTbzAit%;RC^kCR*F+D-h6P+%FsEJk(9BH!A0N`%}_@5ncPN*qAuguc>)% zqO?G&HX|6tL7=gdXeGl!g_0Tl3%%u3xQn1~t!-t(;tt`8+pc$a3@V5% z9_mc6c>Ud3MvVDg#C9U+GfIJ_w}znm`%;>P&x-G96~ANGLbWnGnDMBtP4ZLwN>!KP zn2H!!8O<_7oWJ6kwV|7^*y8G=%mBkbml;A;5h(H?SD>8zi`~g>dI_q;kV1xX7_fpEL~B1FzWZ#Fc#u7kAGT(`0p5eLf>W3NlX6 z(f+ze%Igged^wgVBv=l~JXsdqOBP zW=q7oiZ%zi#K{+i^UJ(c#JKFb}6GqSa-Lzf;Zz|6h~_= zd{~vpLxL&(6iWi#`ab3uoPB-q8D%qDB)6Qa@CLtubZ!}z{zvbJgk9q%UbXQuL{rX$ zPlft0^{u!&l5;MhVFbpCZGT^KpsEbP}EL z9rtd^;Z9lhHC&>JWG%ZI;6*x%Qmnf`3r2(FE}xgq22Snp1^2KtVa5h$ zoQ+5c*c$41XBce9B#9*xMVwFZycC?m^;2v@%xWROqO5dLQkE?4*b)IMi`;cqJ4tim zVy6vU-?Pw(!bo{@;_q}0=`aqR`A%UsC%qwE;A&RY_d!i8uxs6YR;#FN%ae_|=j{x; zg^ay2Y3WNBJdM?GVYZ+4ebc}E`85NE)a`SjN++-HNIiaU~ zlI5JqyTV>Uc7XBsO#-`j0@@JSwgS{d7L&u#H+bUl4?S?l`Dx|*~UV~ACY1mjv znZv{8@;H#DV;RW}U164>C-3E;j~C<~{i7*Gexq3lVwTD~@^LHCGQY@EpR^DgeN9-B z?rXeW`5MCTZYt+c-9DzqHoE|2ep{CWAMC&t8~x-E1(hQDV^~AE%&;Lkg*f=)$+j6~ zOX0WLOQ1^tCpWSH>h~QpxP3t~B-4P_P_yva(Cv8f$xp?wXtmVTIB;~SqH;Ji1PXFl zim^tGj`uMlfi!vDTZ=t(qChe>az1} zmv2Pr)PpeF;PxW6ymjY6xv;$X2Lxia5nB%ExwOR&>99vIK{01SJ%=@qAwzX|LSs`Y zLc~kx8j$T{C4AymR#*1>FQmvqB$%nZyEzJcze2htcT#pZr^X3QJ zkUP-rrY%Y!oE2mYz68mwUkbLiR3$@NwR4S6ERjpI2|SWkkQY4Rpp`NfmEIgkm9{=7`Htn>wf}&~QDwnjf8w3$@y^6WeHy3O{Me->NUsRZ84ZpcJ?UJfJP20^( znPcYHRDCeXD!7hv^36Ii&}H|lXro7z(-W@vjEp>c+p%bX&@)U?RDzG1-lV!>E?78i zKU;fWHUdk4_$2`qdRkE?h~0r%}W>$w*$w3K_I==`L;Qm>^<5IthL9?C^QtaC2rT?Jj`$xfNauUQY)L?7C*~j zr`ItnS2d5I!A1Eec7waEla6$s8p%`UXPw-a_m|aTQ$PO9cl#M!^--a1`hENMxeW&N z`kt;#|08rl^oCeHJo_aa5V1Mz5?Re$`AjuB^XD%gR5i-f@SJI%r$Xd+WP8!&{Pz(A zF?_}kCFolT>Q~>9V8luKf{(o;OYam(fFrZYXwB4kL|U1URs(qhy2uq|R>bqC_;}_m z(P}nMk0z2MgbwR2qa{<5TB8R1Swh#VMm8oeVACI*S*j@zjkx)=eYI=1DHhU%?A=Q@ zqG8bujrgk<@*S3Bmiv8(fk&*64>#L#2XfXA`C25``7dEa$U5i^j;PfJu&%Kc=R@~B z!ctkm;B#c}j+{littTBAndI%-X6v8A!M|^K1QQ}cHXeE{MSg1(Xt}_+8iAwodC~u% z-qucAS8}wLQSpqo;H;4;!(d&_?Yfxo!Br?YGuLIa)I0>F11EQfA%`Og>##_;z3h#uiWrphU8?(hNjOuSPlB#J@$1h6y!oLY zh@%r}7jE4(D*lLWkwD4yg_S_h!#n;j+TJoMu3!lmoMD1nf?IHc2X`AnaCf&5+}&Y- z5E6pBGq_uDmju_~?(Xg|OP=l9_x;sonxnr3h~nk6roG1tJr&*0I5_M$Bl{WQ`ma8jKYc{5cSYyklggEjbCCMby0_ z0Y`?7m!ybIo*$hS*|(WcYz-7!O^Pogs3thQ@4Zi#tx-^NIttAld4V4@HAkY5?>iMD zxK=*}l-ps*LeOj+v_)62Ww?8S z$aV5iDhlayRz?lgmj#fxIGT#Sc&@vhViY`yXBYA~)HmexLbczhY71L+i!@LD6CQb(&HIB1i|qkLzAVx$)W~cvjADx zpP>p5Sm2d?Z)#j76nGuiS3d_D8~_MplY5^-$yftc^mGh%R+(qw^&cFNb`8y!WnD$& zFcE`6oLk;zVL3~PUTyh6u1)Le*tuVDx^&t_N3!FfDEcH^Wz3j;szEvpKI@!PR^4va}~t zB5oKda+DR|VzsJ2-ELt5RHDloJb4;uhbKmyXrEPNg+rXcnQT8eeufTM4Z*w)7$dL0 z!0^9f5VhNkewQ`n$`Cp|Yl%KutAp7;zz$#w&+SLB3RwFy?Eaa!qw>qgm+%EyW@RwYxX=E++X4ER?o$E_=>+P2E z$VzECN3jb(vHiNOO9mx>T+%8w?{G2R*pRzMpvV8f&P7_!BV8Q0z!OpDq1s;u z@7$SwyOG7Sct+2em`7Q4xqrA|h(0}QGgz7Q$W?Tl((hNX^~FvXtk2#)_$ndY&12q% zN%GD>mnSy?e^mY|)a)Yk39rBHLFRW8g0y|x#6l_#<7slqag%s0y4Mt6PCW07JWtrDjg=_4+Kk#=$@23rE^2(EVWFDGBONR z!;iwEzXdjAo4+rqo^%OH2#d;Au!o8$puV^~C3aO9|JeTBDb~E)shG$@S7Q=sU|WKB zIrP9Ao2|iBZdp2^k&5@uowJ|5PIynqq&m%pdDB_D)w!AgUda6op}c@%>3y%U$`>Iy zsj!(gow_Xa_O6_Ww!VP@8Q&J`O3e((GB=R9O^cDn#%+&yEa~2H#gDdeacZ3%+?WmJ z=7n8P?~H-FmGZpm0y%F_bu;1MT**WhgBBN9*{k0}uy+UWa`Fg@x7)o!u(W)owAO>1 zdNU!8?6P3Rm5IK+bmHHYR{o3>L^PB_8}Hq+yiM50mJ_ahbhlbC0QGRD``3ooQuAaH zz25cc6(^|o`v{WCHasN*!1T^$sqSrT_jeBQc1eOz)sGfIt374SXvxV2S&EC>Rjnyg zMc66@js=k-D=wMnY+lmJM7xW=AX$x4w$rL$$t(I>3n!lnh3L8{KnZ5$(JB1+y$-nr zeoXtBUnLs)${#&}x!|`vRBRUxwStj@UHa2)(J^uu~gm}{EE`S-iE5p&Z33%Ui%feczbt*W|Ib5aCMZ6AYl@6jZI0RQiqO16W7DQ)ZO zSFEln?$@W&5(}MWi^e#QRUR2g;Eu2dEER4|0F5in3AwMnG%f(TugLc4#IFe0MbX}3 zJeZUV`lFJ0=->OLA+Ll80OLzkQzzX6!rl8OE6B85+JD(Zl@z`rCv5(RwLY53N8IUi zJya`)(sOyy=Xk5|;ZK9&xfI}Dyh?jC9-d3cn+9dkHV0`FCag~FX$fHU8kJvd(j_MN zG304x+NEBGBigZ}9{Nmz2uCF16*gHjoP}E~Q?A??mGSxhJX~XXO-H@>r>33HkX+{l z^A%tCenGH9xVyo3bC_27?{26?mTM6luW|vB+B|JkV--Oqo`IFgym~YUI`ftoyKSum z>0PF(OG7lKi2g8A?mR{?WdB%Tyk;FQa1uk)7H5$(ZNlO$)wO$i3)ZP_M&G4JB?E4` z>3183^3bZt6p(xW-nuRCjgzKWErM%8=yq7^!#>}=AAd3v*A`%dW4NbUVk1OWfj?GN6-2!y#-k7k|bD_37e9tz!()`Lm~ zB-5qwX(nU7|NN%ZA9u`AG(JQl!L&OWfYA22scj#Ft5S40x$05wmq~O>C4lZkh%(w? zQW7g}LA;BY*%{B5>C>Cx3#I*xozC`FR~fYjO*Blr7oUaX_}4;cx2Pw5M%p8Ys92t- zqp!%gPShFueIe;Zzf5vat~OaOV!YOy3beRZ@pwx z-qZDyc9orCO4TkMppIzK4ivlA<_NM5d&qZ5xAA@R37QZ;t`BaB%W(G?ue&Qe?Nq=J z#4pv%{*4)TQI=b(Qoin&AF9qxGZ7l+BNDby!>Mx4#8Y5lFMdSDg$o#EHdFDbAo)_> zhf&>uHYyme(tb8e8mE?JjWc-hvM_IznO%B4q7kObBzU}%9WSSOVTxA$j2YF!|N8a{ z%jX@XV;QDsFJh;plt-5K2+#%hnOr*oUMwTj7!Nbw#ZhzBno;&X!bhgYQ(B4$V-AJ0 zy(j3H?W)gbIY4ukkQ%0sS}4x%w`l0STF9FIg`Jq5Bf!Fn=aZ5Dk)qCn3iL=m##WN= z1PJYEc_7-x#+LoCjB@EWXkwrzW$?YV@1Z8t0Jv1i)Ft9tolMD?>>!TH?mb_{a3+bj z*X{NjN*G-2HRYWZ2MW&P`{Y3TclVxe07|8PITG=LqGlQ5opXY9zcKUn+7!&# z$ry9MQ>|aZ45Eg?8wB}`-zB2#lhBJCF9abLXujXn2JLA?v;EMpW)Ne^4-JXoVeh2_ zumqTJ9!(sCDn4`yqV5g{@lNX}oRIa|c+aQ>DAXgHTYnaqQea*COl9#vQlyP|0jizN z+`~CI(%~n(YcKHGke_gkq@pQfQ+BC6)}dFI6qrOWa-Qj_&MGav*K8Q${-e2^B-eG= zVMFWjcBVaOv&5}WqDc?65WY=O%u3H4GfLZ-xRYB?64c&L9Y$(P4w0j4|N+HDb~KZE_T(Q zqKO24#ZK;#s!UAd0UE_(kP57jL>o8oP%=v71K>pRluqkuefJ^YS~_CX_h$*83Z3w2 zMsA{~F3L4NHMn1I@bwMU)K8JF{3K8+c`JUNIR!317N9Ptr$Hzyk8$voMp2uy z&NG@8aur2699`wp5)0jF&>}1#9=u;qpRSh3KkS|43bwRonY*mDBcF0>VOK)65j{_j zAa7j78_*&{Ah<~TV(6&~y;8?Iu9*U!C6n}CxIp3_1yoI`!=rOy=(UPoV%ItL#J!hO zBA*%W%@MkZrqBxS?N_2zLIMvfV_)f_u5$X=)4W7X=5&myjk|{A9fuUHp^^^T(5oB1 z>>=WJ9jD6hfzhpwLcj_iCOiQ1Wmmx#Ij6YtvY=vSqAVK~Vm`=WU{Z2J?DuMVQ#59S zm657;Bc{1(NR0Z7N8VZOk02v7qot6Dr~|8=G?lb%#JEZv^3`Henb_Vzv??pn$R#aD z887IzG(ALL4@khLPim}3f@e6SRNq0bO+qmVSf?qOE>g{rJA?B|B-~AScdlp2Okt5O zuCSiywB0tre~3D#LZa&B-p{`zW;I=o1!k_r@8==j-72fL$n!ZE-TcGyHPG@$3!Tyf z9Q@gVomppz)6N?XO}i!k)f3eM1(HSB!TBi#vkZ~`r?HJUiZ%^jnj*`b9NO#AM#b>L zCq1LyCN~wZ+uE^c9broet78_zHYfSA zH@5BTHU|x`zb;^a@JYZ%_Cpa*e!|UIW5ZX;Gr>Lk)na!IYlBuH!MbWcAHQns+O|LD zvhe0ktxh3YPo%R_gF#Zb*VLZ)%Mn2O~B$?5A%_-;4Hgk;_x%#4daw4LjZ)(KyZ3-Y~}OO9-tnD)yU} zEY?Y6mJ-sFm2`yh;TFNJI0FI=5X*E}Xo;vHJ8?WXVW|q^_08+Z8aC)Rlq%||kK4-p z47XJ!=Si->(8xwc(J|9|19Bwd?>_ zs~3T#^$H5S|H-5L;OE?mM%NPdCDKc|<0AG)#%e8%-?C2YmA&#G*$p3kZC18)ctcL^ z^T}sjsw;E*La(S^rwYNu8Koc7rC#j8LS_S@xW%gvnq@Jr@7w%pgbFTSF z^C_KSVo6M9L00MsaeR0dlQ^tBk*0iGp{0x^!{`~C{cVC`2G%Wy`xreeHcS@8t0QWk z(5>(=LCIc8$;;Lhu{XCaDvx?lqWxuX@zu#V^mAMPNlj_9po{=3us`X1E!u`p?Mc93-%1T`Ij*|; z$bRkfWpb#j4QB~)A=;`{RkK3kxvWU19~E3zIyjRbjznjPo6J;Za*p|GaRitW}cu@P6^sjJz=A$t+15l z78-jgah#^8AKdX;Dy=r-puD@j%H0(ZCZF?TivE=X$Mt^px5`RSt8C?&w*ULRpMfLx zT4VDs0r{i;M57WQfQQ_w=%5tUj|JYz7Va)e)rVd|^*#5{xRV{uT;cr_iF;nWBKjXb z;6L+hg}zn6g8I?=$v8e^U*Ix0mQ`5KoP9_3tFjq~r2HOEQmXWIx$UNFJbNjAD7371 z=H8LMFCpsnaBx(PFeN0~8JH7&O4PtxR7%Mkl0cvNGeRD7T*8!*s)!hR=}Mx)QE(4e zJ7r1@)4{^Iy5|k5tbhnYWZqB<>V?AvYwFP7em06IX6Jik#$xX6T9{(mDg%XNh;pTb zubh1anFu>;dF~ND-z_G25m|+#jCBr*H$~F1 zEmM}KuWC;rx&Et3D)=9`9tM=*9F@mjyaqBCo7epE#B6 zOZV|j;d4QFAU?wZveIga8p=EW_4JJa9bL4~UMwDrpS=wjLF(?4S(!?5+{1Z@#I02=44NfYv@2NR4><|OQ^=ZM48e#t=+KSzB$$G zo;^pVx2-1=*Yt3I*L~e09$_v1CLQPW>7D2+W@nVf{7YQ2^Ca4Dw+b?ow*_qp?@viE zNm*F9ndPY#wyBg4yfre?yur}xo2V8lq{42Vxv2ZXMpB$>Cagm3-?{}T9vJd@M(gf( zNPzeemDh^uqsC=u2y?;s+Ty34CNnr5N5h{x$y(tf1$t9icrLtIpbX)b5St8ftbuhFYxf$LjvkW66 z>d);yzWc4hYWI~)9N#G=uB!d|A!|#UV{hg>_mc=s?6He;NLsXMd@93gBeQzPW9^UP zT|+_p_FNq8;0TUsJS>Rgo}lHLA5Q(AJ(nDO;nHx=ppP4)-*PqgKN3ZmC(J48WJ zfIH26rPDb{97x6uT~b|s#{=}TlPNdD5=rfs=1J7OSq$Q4)Ug}TwOJf_)!v|-Udzh3 zfBr|RR8%B)%q!o1YM9*(f#2?E!gVv!E*e;ONC zZ;6bkz+?~ndFUxG%4*>k{3S$2mE55yIq=U?*Z=`)JpC4LLvEr1#mZwVM|E7%TBhk<`LcVSK2YkAF2!(h*Wy;(-`fvn zL&zBkqQC=M2l4?wdxvmZRCOz4_D+w8N$l_Qibdb5-ni#(US)tM#1SSGeu%OG=mL?*u7j0O`c`&8*GXjpA2pK^D9 zQA#H_|0o%MN>CRl!z5|}AR+FT!;Y2Sw6B2S(NUn`%sM74H8{SPB5C2)IRS`Ey z@TSZ$tHz*oOfY|_Qzwt=Ckaj6t2y>j-?{o^vZzh?E$(QWXj`;br}wwa@T%4x5uk3?wEyO14I-}?=QKH1sxvWjfAW@ImC>;%lAUyg zhWx6Vj;d&hDmSGb=PSvi4`!Z`T1-bRE53Svrsq)Rj{9k+r^}-auLGWd>2~9MmvS3& zAs?4W^AJqa+;5fL2MsEGdLNQ&`e!`!Nt) z=1S7vYXw%Y`f5;ScLPuA=AfJ`p`~4lILJ$IC%18n$Rr#a>oGL(Hh!f%di=xa`%g#L zsyp_J-dIS4 zE&XCBgJf;jREr@}(Q6l6)%}CD##th2D%$Vto0gdd348-d*o{AHP&DB5Ijn z6$tu-E?H*_b&EinU#U}ZFyT}AQ>Km6vZ%q5b$G{AHe;gB>hp+Gw9V&-qrZeLRZCKi z(MUSsPU)<#0bR-HkKyO%M1QM87998+s4QsNzTc%v(mgyBob;}h($w!j;t$VV;^#SH zY6@zMT6-6Du;Ec?{G~VU+irhdygfI3vEyFb2=JwOIb+goV0WE0H-DWCJOR`tNTFow1`+xTjH_M1uXX zJh&%=)ejg@djuzmHtBycry)+b3s27`i15H|`O~g-vdbAPSYCUVc^D9zUVij`U+H$ojK*)I3EBVs&Z6PczZ-S1AUxa~SbC z;OHwn6k$7iBZm6)D882fjYwHhtH(rs^8M6hvGcZ{QN+dGA6E?+@$rUaJ~^c|^(!hg zmdVXW3pvsEv{le0Rpq~iAIPXwI`v7)D0p`5ny?!WTOuXr@@?f&DuD&79ZaP}G46Zl zuKKuYY9tb?82Il~^!g@=j~vT1;+!HY<{EAPe#Fr)Su?QaMhT84ReDDv3K;bYgs6$sGUb$5AmY#P1Vl|9vCz zAT_le6C>ja5#yeM`&)6IP8qM8GT~ls<%(&hTwU%xJ?*cJ>_g3A06MEo@HVqTzz;H){CXQU%kz@egjFfh>>~~jBDUT(b&FQwV&0n|y zIzGDZ_7w2@I&J9-CTSJnDT|xx9(T^Qc~UlCreS?>|0JQLzn%4a;HV@4{a4^0969}c zT2A3~hlZbNDBjUNCBjOrJ9*?+M-De>i^J0lgfqIY>KdEtpqa_cW+Z()bv{F8zIy0R zTuOe;!GW;au{Ry=UhMD_ArD9d3FMA$6!hYFlA3o6 z;}dNFeD~H=8yL3=7~dg=+1dI`4}-H!tZSm1PRYods2gudPZIS${QP?X+7m5d?yM(x zip#?;=kudFoRdpK7L@;fuLAz~+Ql_qZ}|F02prTf<#)Vr4~wKrLm+nJl>#kI*@)yH z&9)Ds3++=D#<15h^ShsGntyDrfTVDre^OrAC9#FLH>dLZ(U!t_%QQDF3a`nKf@JDi z2d^mQG8Y0KIVR`{VA{fP;9feE^^BBUQOw#>cM-sM<`MEcIejQX*${aDhaW=UnyDRY z;X3y^Gl~L7Qxnv#CVuCWDwhw;Xn>y-z?aQ&m4=M+93$FU(29oh^d%>8#M1CC=Z&RX zipF+8Hv9df?_Jt;9%w0GpX=$Z%F6ILB#l(!S}ku}zNBM#d-eRiA9<{~sWF$48J6NA z36Hr}e>L@oP~-}&@)}2m!pp?)z&GLatExA@66S4FaI=!?a@@{a9@z)#Y$jA5ep%V& z3P(m+8DPKS6B+DZx59ZO6>n$Uy+6-P>5Abaz_Im8p#53)ruN%s>+M)OyX6U#&XByU#1ac1dSxY+==O5{NYeoZIdzu#hMT3ES}oF zp`xK=)H;TK z;T~!gS<3V$=*ubZ(8WDR!30;MjOgH>@o^so?b_^KqBQ7~P_7P)3Dk(_!(wp8nW8|(_zW&b7NZa(Il6i}ML_Th`(wzT1vi_zg#VBoDYoAlR#=)xyM z>sGI+NXk1sg3lbfUFe@Ehx3CSMYu1FO3v?WaUu?Z<>$4@ACR9~af%-!wFYn;Bw+SY zo~9;*`EA>s{%~m+E{1Is#to4qk!@^Ws%cyYaPQyrW8RCpUED#N=cA8jyE6ODsV}y8 zG|+#SU|ZcfC&{?ZnToIdo?B%n!=nG>t%QJskw)WI70$7nvb@QE(NOWKEu>6NnJjrW z;Nh#B${~P3f3hfO@%jkSpeE|M9B~fw=@*;eqh{30rUin3S@8p;K6qnFeHvu#k9Hp+OBw8~>A{sF=C zv*~sOHw?^k(^c(;PqD@&BQ)7V6S~_%W6YGZiEli@!}E;ppLE?D>{q-#OB_wOS_WjU zG*R7MA4%fnO1QCa0WhxD*KVlj*Qj_#m02vWr{fxC-K(Uv`+UoC1RBN#7IRIXiV^eB zr>Ni~rZsxF2Qtp@F&Ca&2!h5-MtrKhCkE;b)2<&+$=UNUsPcyl8jm`X>EishLRxi~ z4F%l?a?*X1z^ib?;&V&zmZBv}N57*ZmSK_4~ zrVW!RXziO$yGx31YA7dGrGkkqn@8ntw&3#oG%N1kl8tt)lvBF8ItraGpTkllJeSAO zJ6HsD@@{R7SFK=+ANV!Yxt5~nRLoeExU0|z&FX2e9}#2PABo5c{eI=oPwfQ!89qYq z_`!JV{*I)y;(QD$#q#Vtn*?AYMqZ=}qy7ufNl6K6>(3k#WY9Uwt_{ zvZ>bbHc5Q~*f%4p#{l_rWh?yH&3WM@S4SX&jGDjq)_&PEW_hpjJ1# zH!D9!&u9rMuVwxs115%$m3^NIg|VeAi$mvwzx;QLY|^kWN-arGMi+%TJ%nmL(JWW9 zS`zd-z0{T0zZ=MhJOXg)pfH;_>&^&(47xDI(N&5j1NNy^@4|7@2s zX!bHAN7~1qj;m$8ov@pio$vjh{1^Ub`}QlCzbMhEB*&^DJZL%Q z#c5Q6J>pb2#_@~cYoK8$z>x;9u|Yo^CM#g|nD$bu$+~(&vw;LNW`nk2g7#U)0OK-z z@$u-hBBUlu>jj^|PpSk;u3j9V^}E`DnyMO#n_3U%d_E41ZfWO2=7pulmJI9cJvgQjrJz zq8*H2Qw=vcDq{@Tqw<=&seD|)MV~c8R15N*hFlsK0j~T%qEwEOIDt~p3GQp)93FRU z7lu3LuhEofwx*3q7Ut_x18Qx%vt+8!On^E;!A$qYiKx3yfhO^rWu`YLI?|$YViKde6Q3!!51 zpNMCfG>9R!SY}%UV+(aS#lW0+RWrWP0XAs8ZRcN-hmx;mZLAS4>xBLU{QLE&zSHnPLWJF-FlpU~VPCt*Tz`sy@Agi?aP zSM$G=uA{%~4|#iaDfA~@b0SYA-*8q>Y@bG@kFR>=<_RY0q|I46H_WG58X_akPzil1 z_$=q$R0}e#1KHLAuW-9MucYcZA=2=w2l`e({K^KdOh5uY1pp ztQu?_(QnQ6>bv}{nbIBss$obZH}`oXE_ zMni7ot>E1up=B#@8+##^QUwONp8E8liW45UIhQ^T#28_9uefqHg8}dhtz$yQ$&U$m zmHpGe4jyqm5VV&355&VSpzjAh4X2EjRquxCiv|?s`FM?xul9BY&)U0 zp4NctF*Ya-y$0lsU7xWW)(+<$YmEzn+z;BIx~($cY#H1nqfspXY<$q(Pe2WmB?si^ zII#Mu1{j7#lV`<`4>gxIM!XkyI3>ze>&>_BsL}c-9mW^({<*+~qJMUBl0=_1Cmwr2 zTmrwVtuh-RJO_~Y9;3n~k2arBk6Vhhz|Akn#qlT9c zl;0gP08M~Y1i?LaKBW^*as%~Ur3%W*b~vFuJ-~Q65(z#bk_xC@3fw9M5T6lP zbu=3be4hi7Klqb{__8FB!JyPL_UPa0>Y%dW|;%a!XKf^buO~cE^I=Gb)KhPNCI={LCjjb*M@S zr~}BCV0w(Zg7(!xm?=bI@D@$NfF(iCzcs4b6KEa{$`Ge1;~+nE$RkRI%M!#(67-lI zD9r%oS0~peP~x%&r;1M00OfgzJ;o-D(lEgF_ME5CqRu4Ii6HA#ka`SSVG0j)Ng46{ zxAAT?0x2ig%if?CULCRJ#7c>RdriPA15k=V_upa#2H1T??jLL@Nb1WbZo$lZy;`OvJlA)I2~F)OmPC;N`QNlSu&wu zp|`92v>i1BBuLe7-n}7cB7_us0%NE_U6HS#Rt6AG;8LxuL>X z|A5LxLK9Nvl7}!Ky^ygJH`+CIlgBpFMEK&4_qTnV)}(`DVF01V8=+L~NiLcKY_d6JAQhQ2u5KjS@j?t>ajh5G=!2;})3vi@>Q&)i>pmKbNXejeS zpbRB$M*8JCg;C?K0cm(0aG#v3lA0`%Z`z@uQZzhdzezTp4a7%8D}%G87^Q@4>FRK< zQZR$u3gFIMI`ZE}sKV7Hj%5SuDaWX7SNVAeVz89nqm7*-OloHkzCI>ltwG_Ge$#P| z`8QXi{oJVRVhKs$fi5e927-h3qCsCZ0^apQPQT%yYrPPvM?g7-JX{ zj+#vC&g3wPNvUqgp5buNg|`v?5qwd&rb*~P3lvuY1hP96L;N!N(WC`P@NvJXz;|^+ z+VCJI`FD`=W(2zuh_uR@pq0l!hb?YpGHG?}TP{m}Xa)RgLp)@o2Dn8Cs#ouzM&I?K z0yX(1qU%k;${aI~U8y~9Dp&|Hu z%j&>l>X3X*K4I)`w?NWowB7QzL)Y z)0u-X6v3U@l7M~QszY1VUdmpwh@3}CitL5#g(t>{iJjciU@HeXHz*SqxyTsAX$P>5 zSqOLZ9rUf;4sk#QbPhr;bShMQ3-*Bmx57E0Er>68G(hKF9{YfGNfXHSMpe@|gt{Lv z+-uJW_RRv!%1*^2zNvJji$$-D2Q-k*LL3VKSF~_Oia5~c zrhnEcg=7SrssZ;w#H`DG2w^;L0N!ONliJ%waFda=aww6WX{JUNSnq-}9ZoY*F)|D! zJI+){%?Syb$bh0VrmsfFuD%7eYXKNshS3>b(-ML8c_H^-5Gq%YFf#nW9gbV8)vK#} z^_BqFHNZX0qlGYx z_(FVyO>?w9R41tZE0cbRpfbFmKPw?r24%`~B7 zHRi)|FNbZMM==Je;lMwEyqpk2c#Bq}GUk9Re2Mt;d^^EIo`y;wUT*q043BXtD?rXi z>BfjyG^nkpO5a0+Mb2+k*He#Lkb%>CT0-zbU~bgSnZP65 z{lDqO6LrujtCVld6#ad^Z}Izy64PW92lf7Vdm7{1SpOG~CT@q!NVAy!KUnxTrCZ)f zz#{+HO)pA`kX|9M!4-NU@+SR&45i1*?>CTVL+?^0c#4#C4$zd3Y_yxatJgl}=2T{2 z!)V3iJua42m8RIKHA;)P80P%P)uo&zuqwkpglI71Qi*>mZ&%L{-bBbSxX0<)^##&! z^e;Xa!t?|0KaFiD>D@7!+0MRi!mb`2zx23Z5=uoD-rCG?a^`#YfxTq5xN`Sp7qItS zgt%K1LPy<%4#DY`fCn*#3Vem$nDiP0pS5pZGR18wiYixm@+$oLk@6Qm->DnU`+W~( zAyHQB52(y_5-V=2(U+dm+^>i&u9!@eEjXyM)FD-E%$lWbvy?WKe`)q5QL+1~8$M1i zlB0xPDP+aP^Q%l^FOE!Am_*`%E!fGWqb$CVHrKX(q*8;^_ieBh|O@dn>H5ZF@U zf=Utee}Df=_utqy+U{p7p408YEf<+Pu<1VVgduWvP;Wa{E{57uxRG-kdtlwN2-V61%1z#oJV6P;yJVC6@&tN4mdl>M6<0}Hw3-wyWu5ct@8KYCknw$f;L(3a#M0uy<7*OiUly@{zl|=!=_QoygeiU^098^l!*#oBT7WakyxJ$^SrOPwu;K>-n`G-re+99KjF9SF z-o^H$e*9NT8D%OT|9JHPX*9d82d%X;n%jN_%&%*OO?lH5m`k*dfJ&X!A0tqgiZ9AG8CoK@ZON2vKHp-g!Gw zgd}hGl*I|DmCZ?Gtjd4b`8-k}P*+Dvb7`8^3;Vqe!qV=|o-S+>?R1=1%o@w)V`!%N zxJGD-*lxTBz)xUHGVtqv z2Jv4RQ%7l&1=JTm8hN2>H#Tk64|7dPj9I0xkalPLB70&?By8Qiyt|1m6f(!Jo^=hK;5XiUSlW(wZT^;sop>|mm(tin8xNH;7%`A$_tpf*Vw0+4cwqbi2Md(U9OmWM3NanrHJ+)C0^vy z?{$)j%r9OA|252i#~W*k3*T^vM+EKy;jiT7DwX_P$T;Qsj+M$d{Z;xivvy?YCVHoD zjmdw{&%Y)Lmy!2HEB27h|HmHu$1wc=n8~+0byq8}nudK~cpuF4YaIvi0R!#7H2=Fm#hy))5fJG zO<4R-N;K%7z+1R%Xe@6C<7XOmtlhi#AB!C_13N{+*Oh38eOkB2-~0?-DNasp z{-ZCpI7)Gq{_~LVe3ai)TCvtkpGNyOvV!@?uC`$#-ySUf50y~S{qpzzzCVopkHP%6 zTL0fBbmmpSl({eFRgQU6g&(RtIq6+9|FVv^-A8APYjQo;9047S7}P9PyFb9;tW_!G zG{tl^oElA&qwvMD_TOhdI$zz`Y&S7x;_;91Y6t~aIN(zjuI>jdP*~Fu$yGU2mU-y8 z=FiI`fZwMp&OIh9yympQ;W;Frt|SjINwp5!1-jI#ZVJsBujJh3)bGR%Hp$f~GSX`c zg$j%Yin+2-LpHt~XgPbWT5EerOQdhBp4vjG!;SjYGH;&y<;!em{=JjKS;2n|ZZ7rz zIj{eEiv52ftj4Q==cl95zvsXMfTGVX0x9FpI_gimYi!xWwFY!4yL#&qj)F)1BKD>6A#-NWNCRY^cprp;2eLY82ao} zhiQ{?`#$Vi2PM3^*h-(LlT6uQHdw|iemGIy_oMkVit6b{H++DY8#Kgh?ZQbEwZvQN zRQwjAM~Sd0TKCpkg4~QUxf%3$2LNjAbz|m0oP+!i-}jP_lkqZey==fB6dHAoh*6!95Z|^ln~3; zd3(#y_>ukaxdV~&>f02Y$+=@^rwoFZLYB)SS$%69!JY_y29QG<3Xk34O>d9@_2KOZ z`b+|Gdeu4C@~n&>zr4>uDLu3lGt16o|MbPM7KlltMRxs0g)*mY0Xw1u^W-?D_2n>2 zL;>*#013VrqwSaWftAUE9@03YS50*fQu|4j5y>ClCBL;eN^&=n4y#z8MCk+a329$D z_^Kvthn5rO;uVD@#a@p8`5v|Rfp3u?0C<8u^ju-(hEW1jti$wui9{A_#3q_Vo=~&i zBYt?|l)`%7VFcjv!gA2yys{h?O}So<2@GCwejhMJMCx~BTN5NgEYec5G9_$aq2%d{ zqKbg2GJnAkE;%c`B}dtZz7Ak`9^XCM_sRi!;9xk03Rv(m;e!48%VXJ~`UU-;cthe} z9k3n|T0cW!d7(K+E#{?<4WSMbolJPzX+~dck$p+kWjOEAejU)vj6R-B9kza(F%Y+Q zB{_j#mNDxl6;Ky(3-<cANgng#&9cmD1ISiZ?BqgodFH3Lp%N!XqQxNSeM6 zcrJ>g}94^B1St2hi(9Ys3yi2IVur-M{cY1J3G__$YrhCGVY*vcjK>2?_Z zbD2Wmch4gI_E<;U@hF?hpo7^k0+rcszovAo;&<0Fmsk3-11pAe9e7>2XNqrL;$R#_ zf~(SA_i1!yUbSV}Lmh3USH;7PNU8@TBn1Xp znYb~Y6(+(qVplDF17FvhWNdxY$!fhq95DV)UTW4_-JY}fS>>x!RI2-_SY+G>bagd( zNGsVB=Y@-`tirBe_P&ZkWS-i4LE5=IVN0YLxq60tMyDD`p6|eEf_Fsn^se#|XM)!M z6=Ex$)Kjj{idy;P-~%8XtvW+AbXm0CfS733W9B=Gk}G8Sncm@R_B}6@u*p*}#KRU8 z*-_cZ6v=6NheG5hFPm}HTC!AJ1v>rJ6_ ziw5@JV9X^wfy_{L(r(0r3|P%#Z>!qE$*n#Cf||El{VgVb zb+GBm#Hp9Pq~%wIf^q*sW(Ku zWU|u1ytgE{ZhZ*z1`x_?hCd)3DUmK^UrcJ3qzZ*ub>XY79*K_q90_Hi@R@p6=j`5^ z^5|SQIV)f};?pDR;PP<7x4-*#Ph5L+s2b3JVgLbc+%ir+LD>1jt|J4rL@Y>8LW6d2 z^N-~h%kFK)3afd}tpGDp91G~O+_&{?Yh6?X6_0A0dO@}(x}XA^J8h@QXJ;!;ZVEc^ zksSQE6Zt3-<*zD0zx-KjtLCNMm!j73F8kp$hc&RreeBlF=Pil5p8_=cJZgn2-C;U# z8;Kse!{w^S7?E@RmIUHSO{E);0%CQKj^f}pq?qtD`d8SP(z zvywV&g@xvHYe;D?}kB{=N%DWxrjg zjRsKv4KVD5^T$=b8gagh{Cq5eW}r!5GmJ1eys=VbJCkontJG8rEN>eCeKd{;q3w?HI3#Bjm}{?iLtQ3{IqRK{XdI1_vQB_l+mO%gik=ct9C|24@2aFr|wRFaF~}F#_(Mg zy>En0#y4-N%v1#f)%K&U8J30LddZ)h;=!O~5n%ik3hss)H} zg;L*+F<#k5&_sNPnWO-9`O_p}g^a>wBJ3ou4Z7qDhXL zYAB=H3jYI>y+J3jh;uA5?nWTa6dqnm$FB!)j@vJ-=A)hLF9~cY*3th4&(1G*sOw@} z!q91<^`LE;Xn(l`!6kK7t{SVQo|&nSv24IyOf4sn5~Z0BQf*|IRx(Dv2=+d)D?uP_ zYDmQD)Ta{x>s@BG*@2DXTFh!Q9VcVMd^!nv>AUf3a>`=-1oYd-Os*`tw80uZ(T-kl zXwAoxfx}leXovSs??+px@7op61--UAhuv5*$v;lTtJ+l2sw5derbCmPj?;Br&DGtz zbbKQLlNI^UXC#?-Ecy=YPK$tqb`7^tR&(x;lJ0y z>xVphVLfbmS>U30pwo(p*mxNUlzeFtVf&rSK|@cNt(OGGpIpJ=QA;C0)0G#+k=3C=fCTY9xhYyAOV%Ux~Zo>zEGhWhMRGnUYWB< z@e^KPsO((|9~40-b*uq+OxP*jaCB5og!>Ba=KCyIK^AEZgNf7|F@0+T$;>OR-Y@lf z^HO_#@z6{is{CwEXPZs3Hj5s!QfbxeBR~!RR{t(|^XEp9c3^qG=j0Wb-n>fjr6@Q^ zO|sB#Lepc4cb+%Q7D7c$p5rWC7P??}D~ajnLEiFz-+EqMQg}(+n}440Xl1h{b=SL= zQo?^#xcrH~^8)8?#7VSvPgsu>xAreI^xc3bh1g17a@JF~3$^FpJJz-F{-hRU zi}98bW!O*W(WiYa7}g{(7m2m5pn&ttn+uM|UC9oV-d-DB{Io{%y>4qW8hL;R?gexD zEJ`E)QH539Ea7+8LIZRVT$y~-M$ALHL6dw$e60U+7qT`mTx0+j&O7m0Y|BI~zSFMn z;V+I&`F!JZwtE_kKZQ9rc>h=6XRBZDqfSet1s|o@EPI_ zs4|Z2ySg->Huq(bQlUPd?69bYkbrB{Hu|R=?#KA;6W_sHd?aDHi6;H@!;5oF1wR(1 zl9FBF8_XAp3Nil8UM0t+l6+)Iq%>xVdz5P4Wa@9bwigzMkv)Syv2jekv;);QwpW+t zZ|0OrNV))Mgk9)NLRDM%F9wCYj6pakXY_jk!nAt;SS8aX2g|lm>{#aVKS2vT0iL+$uUAHwU za3obOPKVeP7^y3ZM%*E}?!W~y-tfh=T*7y-J!L4MB!}5LYyG<}e0nR9zyJ#USE;Pt ze(@Lo=`OniF!qzS9K04qfozje4ct@Hn8X~Jte1ohZpN9Hrz&BZ(4~6fsZ)BmNwV4P zYErO=l$a}dcLgt+&`c#50cL;=$@}~#YPd4`(LRr0^g8lh*}w9w8WA^)80w`iGh6yZ zvo6sYJSiohh_q+;VA1W^;q@t!!yK!cuorA?zfqA+s znF{*|byfd|g#UoL8q?%Q`|2jJ*)mFGg=d)3#4UzVkch9zK8kY+3y`jUZO6MEw|+!0 zH|acp8FbC=kq*X#z%d*cjLq*>8SS^?n>-yyGbTL#Hlexz3+~NI#9-b^iQkgwf51uc zww~u*SpCGcp_(~>7Q~YEu}-GA$(W$mcU-{4r*T}%c;%(Rsh|c`T>U@BR!9M(cWh#k zg2^fn&b0Xu_U$eJuzTGK16p27jRg@|0iA8FgNkP>mU%C|D$LF+wcq^_(EHJlyrf5c zbzw|6gi0Cfu>O<}WQ>%k{FbbnU^?FH>_ojt*0f_rwb<_rEFjcD`2pgy0H%5RAiA`N zoEbvwO&8`AkR@szC~c#S{=kV!@XdbOLf`m01M`wU(7b;`IQ*7o6c!cI6m1I7&7cRh z0J*3GuzVJdim#QIyCM945I#dO2^+_#hF`c3tBM#ZZo$=|B#M3MbyfQh^oNr@V|W6C zoo}(mPeNMw`AgmPZS1(*=|wbb=%{@)|GUY$RIukgX>;FY5}kwZ52Wuo)@~C1!Jq z*Yuw$)cM&@+2{t(KHmLA^g%kpmiID6j!31NcK@Jy&%WaODc6n#og|JH6yfDQ(%My8 zSD>9-G&8uW0VNdzu~OnaFex$6#7oX11FZQ#r$u1ZTgzk&_xK$NP*G4K0$$7kq(D2k zz9zB*+rH`a9gz=G6u)IOju{J^46PgslCyxU`#i5X>0wKEjYxnHl(4qj+^JUPu9Zz1?U~ z|72r9C@)-?#sWQ0tfi9fc7mVjJSvjX^O}dz1O6mjkz$Wcb7N0Y9Co+8MLN}xpQkQc z$-W13NZM)-cknwve8ASe<`be0huO|E4dCeRJ>Fp}s5FN=4QF{ZfRfBC>>n{ebIg%b^+(y9{`fk>z zP(QHyT)kUL%T(B#H-asc)M;M-a4wH9Rul4VRIj&dW?xwm8!15udSI%gyF78Lx(p8* zHUWxJt7q?$%JWFiz|n*cF5lKDQS#{hikO0!%|!Ds~5bDWYC5eL*Dx1S&ZOZ>4xoFJr=C_Ul^_ac`H9hSjA)q zIg+Ept4F2&Za_8Rq`t%`fx&PO@I zrG#cZugyHLgbAh-bwl3|+1f||LFegqzhoablAyGfRjopex?CJcZTVuQ;QzY6|E%S> zd}qIEX#7H#CFX3sYWrx;ls)NhbMN;gD$gJmVuu0)<8X<`X>dJ!vJ}OLel?{4cemB_ z{+^IsPB1&m;BKArE64)UDbZ(C>O4a=O01NfYgPzH99F44iQ~Nq&(?ouD0jiNMbRtX zTKMM6WR=K@cFHn;D>rXI=O4nZeuLypg!6{IW|;YwE@JR`Pu^xf>3jOUg5d6_u zfCUiy=2#~2Fp=ap1NFg564mM@?H$(9yxRL^#IJ&}rlq(q75QKeL0We^qt2L8IH8`R zkbi!r51r|#mxC#WrK=xehyy@RAruRj?}G4U$_ti)>q8dKMn0NC^P3Nc0^nGDRiGD7 z<7$FDy@W7T*5XQ6j39cjX;6V5_0?ne`c9`e96Y_cpF3hzAf# z)jI)*6RDtB=wvBGgtp8niVO54bd>UIsgsYyw1mYGJ9>i&%V(q7jgJ)&o3J2oue+-w zwGB>vc@_bCkM7|j#XVGZq}^W6Rb)*@1l+(`aw*XG`5hccz2+6K&;XS72mW+k0D>_! zpiYFIbAF%#+!d^YzvFH6?tOg2N5GM5*@NR^)N@61SB2TSOcoTcua4urP^0z39&gc^k|a0QKmLVV0F-3q&ki8OZSpo*&*ukjz1rh-_iOEj|y*c(?NbgRbcTF z{Ae>{M3UZneh1k${xZ^a73v5ECDx^(55ecHA{L0jp4UQ00+1}t>X~~17`0$F3FdD; zi_fVjheIxGdczuj;q4#}q=47)VMDK1(!6xY-%WAH6m4nfqET)Z;>erp@Fc+LN`cv8 zhKxUD-tJ8`aBTBmBgH+52)g9*`6VI4K`nmVee#0AnGzY8AVuV`)dm$_& zdE4B1)obfLdiG+q|M8%Nqvxc{&K?B)0AILnP(LY%O&ieU{&6BJ59xW4AJ%v;j5%9s zCp-S${(BmS0lo+Kag}BSd;U_6=gZ0@7RBJg(mOFCxiiTb090We{xg|}^N4>zb7D|4 zAa~Yvf<$#zDU5BNufh-}C?c1CDlOb$RJnbB1wq&#^YfJ`Op_h17@u8iCab_(R z$4u4pJz4V%L1)n>4y*=EUv?5@rBl2~kY;3>wer8GaPYoz01xDeNl+mV0o^W%(YU>K z0E>qSh!|9e{=2892z(17@KI*MNom&X!!#Mw^evhO>IaAkR8qkilM|O8(EgBI%mTe1BYs`m>a{u(l0gvj4#Z7yjLrb>wZfXgy^{<#UN^cnegt zOXI1TKUdR*s)bT}XcS{f&Hl@E0Z)YHAz{r<|LIeox#P|ONd)9$db{uq{CgR13x)X5 zmyvjWs)|&I|8d=Lm@X|#?U$*lT*fNnxAWjAfX+)FZeF7rnKLyGp=ULx*&MKp3(1zQ z?NAvb)o|~zDyz1S*^DPDx?fDsM+TgFawYT=LFO-|m|sD+*oAa}iE)egatxITT5|C^ z^Vc(NB8Owq3THhacSH2OW%_e5Um6m$PaMqLcXd3v>*<&u|Lz+Ul9ilI$+!(A?k8di zMbpz#)7?yu{4v&h)tIqE4>RQ3-8#u-BEdLumXCRZ001t%+%J~+208(V_nJ|-^b!Bm z4mY{X|0j*ELQ@pi=pwmKSDUk;5N4sD^_M6Y^Wum*_Q@}R?+}{a)2tozCmVgkZ=jdb z#7=j>ZCk#Wi&$FT}{I*pL+iHa==}ZNR#g-Y8SkS`SX|!$?-#Vq1rM_`n zMyFxlsmq^wF`|A%gm_RzBS&=D7f7GMNr6E8+wd3kb zPB=7+$uYfJZPDe{HZNlN-^*lLqGK}_$;D9xfGgEWOC7xHkLrH?&g$sPk&6sOo8vd; z?ojoKXV$n@|Ev^{L#uvs-Ql_N7B9 zLI+VVV53ZbHPSpNE#vSKrS)&sgS%B#B76JVz7j+Rm>MKuu}~yi#Evn2V3o6o0%Gbp zt8WgWXN?ihukW8Bf+2I1;xj_{Y3o6THq5e1{QH=PFmUNV822%~0!9eLYoxC$zSe*9 zwdJ-Fr;gR*$2x|LpZ$v0$Oro20sD)8YYDg@LQ)OpCx9Ky-ta*5TArL@+stPTOmuqB zIN5*OX6_nCOM96{^edc+U($5N4kv2WtZ}B3bnjD&`7XvgwKDXK(YwwL0S*E@4G39K zAFQlXTr^Wq@o>U@A+YU2-gN8fPT|7N+t#$|S2W7l+EAf`Mw*zhFP)JzpZv4ShPb6o zkDY7B3UxHaiQg&COQ3g*l^`t4^C|LsL!w#CF9CwKCb^0xy|Wg?l!$fV6c#>%|cM~rjNdNwgLt!kIm63GP_(7e~0}qq#{`QBLm?J-i z*Q^R>{f?_XO_18yJm~qXBlmL|@SM+*>YtCh8SmL-$Y=C|Lf{=uTg97~n(je0*nezD zf!ps3yWZShx3m8hiWb#!Nws_=ZV_XS2PBoB`2jHsS~MmLq{46DDq2xsbu5W(V0}WH z%oIlv;6`b9b#jsE{P+4lp8gH2(SYK%!X`?|JsiySe zAWzT-^}6(!3rfpr{bpRa?c*P&@u%+>>Nu57%QJ~hh>BQI-Ld0317jEh|4|h^H?WUd z8BM7gq2UX|^#O=Orsf1d!>N_)NT_OtE*hbZua7_fx1Y#sd#uJgw&qIkD05IB|Bo~{rV}#U zkR4?099C7bPmaXEV^TNcfB-E>_wRx3_QC-%0kJxlm$8JDsT)arE`l->5B^WN~h3VlFXhUC7kCsS6B}qhG-I+XqHj%Ro31 z&#CT!7`|s>h(=4D?6E7C?K_vzR61ShKQh|t735j-C#k2vf zCJ34PBkTR>gip9^{gHh(&Zl=uRo+@Q*H`s#aS$luEZ&d18&*>eK8SB9$@cBP{l@H2Scl&db> zGbXD@cDx>)@Yx2u?X4i=Y)A!fu>|4*^UpXXnpuT-R8P@g0>}%>2$koB$xx+#)C3)% zq$fnd%DKEAG?IRi;TitqQ0toSofk!VDAS@xbFDZqeSvCASJV?bl{D{rAaJg~J@HYp z%)eG$C-!)w!^mK)J3TPg-RjE{@S+rb__IQ44}mu1xPbd2Z{}t zA#%asOm}T#wrxv7Im8hyhs7yVmy{S91}inLJv7p-N+hA0D4IykKLUdO^@*ru`xuVo z{Z6v+YHU0fQ4UEz2EC1FJf-)~CCB~1u$DCOd0D(M27;mbq`tSdp5;0 z{y4`p_#gKxT@6SczBJyGpD6N&Uu{Af7<(_ z6=ROdun_l+9`+bbRDk2N5IbVYGHC01dr4(`=a%HP%6pVXQ%mpD{p=T|+EZrc=Mdg( zeclY>OmI^nxAiVD4nd>{lk25$ev5H3V4{yW)9#Lzn z0b&|FTY763>+2Lb@j#A=L~h3vW$0rmvI0v)#3=puG-HW35rEj5-zrsU_T6!HU6Qe=mlk&7$jEl%f-*R4^QAogG^?0Z;@AXo^;Z zYxpf4lDwrtylUHb+~ShE#5c2ts3%npy>bei1KOR8U`B34wXXQv?8*YIhh7}mv809( zW)=L*ix?;9_hP{!wzkj<#LJxBziPr)4X?G^fX|-O-qpD`5Tk6uVx~!YAWzjTclQsr zIl1B!pNpW|9e(E1Qu1sRV5crnJoGQ}a`WBxm?$}_i&s7%5R>a5pD$PlT45qKZf}TL=F2(+<`$x<5Uu|--~a_j`OxlXr8H`mwl3=ELdA&Tq=>x8 z8f6krzP9*10?UsO zez9}=if@+E;}%x)Cl`0SvusPZ{EM5EE)d=WYKg_1LEIJWW3gL!fk;^Z-oHx4y^n=X zcV|~YzGjqGwQoffrG%&NC|jRn#7UkbwQ2P(o@vfj-FaJQRp9Hs&Rt85ELcl$#)-6* zyr|y9I`Kqq@Tzr^oxzWk=kb$q&y2EOBTPG~3`zj$1omD!o<>uf*sMXuD}EP82oBuD zB_Q$R*=105dTA9#AcxoqsIcR_M<4=t#4;ZwUUm}WME8yAzES^6^JpaJ#y&&B_$XKZ zr*ES|Egu&NW3*&jzOEAR4cen&^GvALK&A-|gB)X%HfAQihE+_9=6xURtsR&he}8xzC$#&4l+ zL8nGWBIRHjrR}wP3?*<#aT9EJ*&k8II(~w$E*P8^%=TM+ zI< zL?z!RTL!}F--35k--ZY_d@!`8-r0_IYFDKHiTyK%^k;g(Foe!Z$FB!)j@r(f-7>dJ z1GFn^MekF-xVNfNd{Ma1tN;`mA(5JkQMuj{3zCo&OL8BiONEW+PF%kPk1YBn{C7SL zQX*d*kK&h7sX&PHkT5Y#dsyqBNS1gNfC#)Wz8zZ07~iOWzBdrHiEBl6Kq`ODJ7?E~ z03U%$fq5p)&vQe}Si2N%0Rbe2GT^dzxbi()N)SxCAuB=zu406ftKh=BVY%sLLOaBe zW2aHOsu20NsX)`y4;4OJ8JuS@6BM7sJu@rG45||RWz_@G-*rh>{opJH9XWY+a;}0* zM&T+`rg=ndbMdU6`W(^Cds-Qqa$o7ZObL1Va7<9t-q{+T`)5vG*o<`W^;m$zF1afE zW}I~Z&DQiJji-qDMmHAGJ}8ru0-I)-<)|SjlB9$<;TL3bFvEV zOcWfH8nH&Zk+9!yX{sssxuAFyiDcxaCq$BFNYOK^&$5M=dp}fF1+-~vN!76kMVq?y zz}(J;FD^vBEj*4tkhud9;+$LcDCiStmrZ)(jC@wZVWs`0<1cT?HP96xNDo7__7F$y z(s-p8lE~Le;><%>RSMT014Yh1S$BBU+dy;@YrHy>kBn@X-jX6}m79Q~8>lf;IDE_K z4C&;jLkQqAH(9DrcUFNh0-E>n41p*JZ|gW@vVvogB06c{xxuq)wJ9p2zC%;~me3Zlw%) z_}wsLTHaNi6=OV$$`lJ7GFBIItu+HRY`dFru#vog&9or$f!)juDIrNfH1;}f>Oqt?p~Jag5!5x*MZ;Hn;ARql@f00i}e=c3`!e}jrecnL2@~^el=F_sI{iKx{zte5jqN9MgNg9Ek$Z6OXA-UOCGOB3t9}A9_jZ4lKQJVn8qymVK!f1HO_nk_3_m(+}5Hu|p`s32A!> zYl`fJmcrhLvqvYs;QK(bJi;gRREno&KpHXPqwSbjIzcPhw1;ubkQZYJG|4BR_X5S+ zq{cD#33fd+X0@IcQPy7DB_rkArKJNqIW4jGH9{HwiYI6IU?Y^3`F=>Io3PNQm@XqbIX0N9+gJYZl znhOQ)6?^&5A|CYQz@O$R2IuA3NXLYwYgphDIvm_h$b!HkB+39pX_6lx&$<(1O%HmO ziaG!QT;?ev6h|ysm-%aThGTDR-4;%v(tDth^PI|ugY51F5K^_aw&_ZI923Pzh9bb| zhczQFS!uY97^EkZ+98awGfY4b7Xb{gvHn`)m!O9f=3(b09y6v*&nVJ8c9b0x z2Ic?&0yFt`hUsQ}2f(Zg&)GAbvGr--?s+R~Elsf$&4j`F5YOLL>I*f?*eMA8K`k zOm3q&LpFTuV4(X>pUYaZaVC+tZlB@~mA%VA06GB!;Q^sQ00O7^cAcdoAYY}!?O`=W zK?t`+QyYCp&t0}sAA~smwmgHdeo(93$5$n5b6zgGKbE(ove!f37F)rtw9O3YG(}hB zl}AuBEHC--55cgQxZLuMwxkMx96T5zsH5FrOf7xQ(oKIrZ-FPnSv+|UuvNJI_MZ`V z003Vuc~;^?7X~2GYFPbm^4GikwZ}%JIM`-238f35Xa%Ue4G|Uh0i+XF(?2rhd?hcM z=HbkT*Z=jIXWc=XQGmADd~lWYRUK-3%iM;-P&;ei+VADA5@J9Lq(d36(VzKiY*qCS zKP~_O000000001e+?|}2t1!^?CCA(kQX%_N>;JYuy%#{gL#Xv3<({NKuc6%cq8@>X zuoGZI@TWs_T=QI?aNFX5)D!?1N%cW;U7gslpbW(Mz+%4CNB{r;000000000000000 z08mpwNlpL&060QPO#|%!000005CBL3000310RTt<000310XRZQO#~nv2AN(TN~Tj6Pp{`ww;ZgY;0|8+sXHS|L(nYpQ^6v>guWK z>gt-Qd3st!MpClh6#&qb5LMDp;?{x(001ce2`&_19taSTQ(?m{iiGo{`QdRe{NaZ}GRM9i_|2_F^(j-P@T6D0HG@a4m6uw#G7Dxd6&`URvFduN*e@Zo_ zMuOihb?raLraM${l)-f7PyCDwIsWw{i3?ri0vV9^?V%G`TQDMx=bakgL>nINVsv15buqhgI!)g8mlB-s7Srb4UjvvJXfcfPzIurodO63F6J# ztK=4E!3Pw%5H@#5CY6hqahegR%c7nCz)yj;k-1K+;^`|Oa!j#6f%d5bs^$6q1UOF>LswHj)mhH9H zlGT)Pa;K86OvgEj$ojwpVp3fvB!6F-ofIt~#qh)gV7Xzqc15!1FE!!@yb;K>%9T%H zVxFPp=n|FN%TJ$^Zf@x0Bo~Zk16rgA2?r`Id(5B7A?tEUZc37NPnFM!;VR>RW#+F_By?HHP4DAQ{BqY{YL6* z98vusI+adYh}!FPli^xrO(p6+)JIwZU9g|KgGH@lh{W_>95b7j65U8IZq!DWxaKh^~nV-C{q0xAMe;%u?< z#K;FPG$yl<)ly3|GsJclKAXz1Lo{_%<;YbOgXF9^1u7*^pF1Y zQsIM(X`}?c6-&rhFgh|9pT{ZFU0O_-s>A(J`#>ySmi`9>Tx&xO4v8Xhj*S~y2_8fA zl#0YSEm#@C*F!{*o)2Si(HraA0n)7)5U-bvF}Sb4oDXsY%8weu_nD+ zq?h81LS$pMq?Gsa*wQb=Q4o{kJjW^wtej0cL~66Tlb)52RLe!WQO;2S!nev2&gfan z5zj<8n@54$#WB5Lv4hs0IrjY6R*(lf%6~$#p|ya^rKO&FrS@blT*E|2l|)Q(ut{dnjR`Z-FDgKD`1ocjan2UJoGC23v2 zSpsd+gKXl#GVZ_Rvwmf+c9-A0e!N=8qlq+n%a&>Dl1H&{oF9L0#UC`i4`EMC8d1XO zJS4PsXhcu-J&UVFH{X7UCsx9E@^; z)XkS}7Dp6j+P*g*27NNCF(zCLjPu}~?+q&v&2!?NwolBIKt&x1;8UI{T&uSoUs27p zEtaY`#qE999V1;DqgQ1y@nUnZxAMwOy}AxCBvO5?Hg z@WK-@)G^W@XU$ZGEFiT`_Ils7A@+ZU_G*x(2*e16pOpPs$Z-LR;1M035J@4 z)a<28_$uP`5l(_>Pr+3BD#@C0gm>DncV+NnjPi0d)QiRUI*ryO+>*+jMJ80oOdJI& zMS=i^O{WTS&zw>en$_*neho%s$z`Ga`1=F~NEZQ>FaPB=a`Haynpge5807Mx1+ho@ zM2(^x*_nVrY^pS>POiIXaLxT;*SG^^oE zBq}CZHwYbG;<6gKX+6>kcz`9@fN={IhW^;kO3_m{&uT(0f(=%n@H&Tifxz%w_(D|1 z9|>zFe!sB6Cv!lY{ix`-65O4`03Uzb?Zsgm{x&P88spG42kM`u0vY#-NK`llYr#ib zW7qie#g-ymVX0NO&BLw^!kz~s(aqD+pX79lgFiIVjk2w|MeMWa_l>AUW_1HL-=#6@ zs79^qN4?C(BJhy3S3p+h1nucyHV$da3_ntrgyNR46d-h$CN(H7cdbA#LylltuWoLU8+r+8C%x z8t6GrQA>`3*iT6D6=oFOU?Zx1SqbEKJu&F+L7rWv&49;J()Ldq2S&s#T|;FJLj%Vp z63)>Ic5Tv1`8qj{T&Tn2_Z0DF>ZTqjPkBwX-wOWigwNsOD}c4I=n@t_kc6d0dVFh4Up@`@g=tlq-0B|`1?a7h+ zX>M9iCB1>MfS$AB_JCS$!EPmaIt0Za{cdUDOzWxz{TLskdtrYh8vu@|;sE}I)_i-_ zAS&5;Xp){B?I86M5mxlPT$+DEaVw-ECq12lA}2Lrs+$fQC3gV;v^lyamQh&`E;UuL zET6xNpZg`kj`!F*#HRGpStFS5)2XnQ!Jfh?p7S;&29;>=aZog^MNASHEnly?{IK8a z-7UGgjHmJZ*xD5i!E9<))!kWiXJ;E=;K9Xseh6MZc$EnvEOK~@yj}0u`GyNI#p?edu833hY%%#kvGM&(J=FgLaa(X19R&ZWUMaq# z+q*M?QWpU{7ZfnA`y_7uwzHrDSau6Vp*8kDCltt^yLMPha%|-UI6fmPMudnWk4TM7 zBY%a8Di6h7|C<8LmETN3iJ{amZ^Y^J={yQLQ*>Pd}^Ka>^37w^_kLtXm2?h5c#9U}i(v;uy zE#^)K8qgMhd~8jr8A+Vs8&0IoUkK*P?}OcbQ##7e6{Zc#)bDiq2PDpkfy3U`CV@Qq zJ2O4zTfx7Ys32E3A+|)bF$e9V3uk@Jg0%IGw}i|q`!9f%f2vy7XRT5G6&CDNP}(w= z(!Jk0tVTErrR8aA&Nfpagd6TkK?-jBi|Fqx^qAI2?R2F53wCqe(1i7-N6sgGauM#S zal9mMu*UdgnCCrxraNvJ{5?#->>`|7<9NDN&$yGbLBCjbcIE9Tkf*G8_n-T2*g zk{>}90WondfxW|Ma|vG5*=AV&)!yD-qM;xsrjBZEb5ZdxTN5yN*TzG?MuIx(O#j!{ z;NbJ~ernAt*yfOvW`m{fa~69l;^;cxc*MmkPkRylGeshPqJlp|6RXn>qU+-BpJY78 zso_;MM|`?$CBM#p<_j`)SEfzzI1a3p7d?wYPt}WAGxc=DIMs`ts;SxDf6TABLb1`a zx(puVZ(t1(i2(PIxqkil zFf#{^A1cH@nsi5weuS@$5PuTcgB{#{Kw!u{$32>tOCIWoWJ{g{&_@MC%&fIKCFUkV zXl2M%=f@3;y0m@hEDUbD9LecRI|evps4J0U_%kM;QqVQC6&b31Xs%z=h`HKXn8eN#Qrxd_2MMWH1E;4$vQ}Nkf_o0in&9v}>X0Geh&&}l8?&9=WQ%StR zZ#FUsl{j!9_$FM@k64~o@&4cJ+Z{{juRo%Xg;G=`xT|K@L8_OK@LR^VY}D_P4aC&m zGNJ5r8&nj8!atE(tXYCzvmxS^#Mj6mMsjkP)vScIQvdqK?1t&_s@~#I5JwU-u{8KD z>}VCRV)(L&tzp>Hu6Fd1aLzpB`yOq-R0$)ylQG+!!I8&+_T^jrz4hjCADO`-0y*Qu z>Nv}gDHLg??R;zZ_PHCV#xjzoaInkSgEyAkvUH0irylTV(-A>eWx|iAaEnxX5pC#; zWL*V=Cw2Nk(&0P>DAiPSV%`$U$Bv_I3UPYMyLjgUjc;(fE^gmEFUxS-NN^{@;nims z5-6H2d-d7n%eLI41?i@^SpDq;jQ=R-jh?S?pS89>*x=bpljNemEO&Ey@|(rvcD0K8 zqNl6aSh)Z4UY7ZmaDggd7u%wymelk1$5jGjJd~l!D23BU`mKp)O=X9s@`e4EaBwx? z8tcV@&VO-%n38)Ud`;=zpJyx_bq7VFvVgcY0=N{+vmk6Rhh8zc`y8;Y(<;fDWdx9M z@NOV&@45(w>X}Ohcx31HrWS!@u3qm*+KW%Zq5MSmj$xntQ?Cjfg5S>Kw9%!)_dA4; zap=qoD8c~DgHLG)SqI2qtt_}0xK$+g@1L7AG{rLv$=-;L8|Qz(Yb(L8h!|2#3qqvmyc z!h{R+zenza^Z#9&U=--U134Z8tC?OjU*{NGOcvhpz!T6T6K7^;B==v0rKH`exOot8 zVF4|ffGv2n3dak|(O8tfKs$7xFFVOgq!FGaAu>1;LE&W>PVnZ!On8y{HHdAj&1pxG zM@9tT_Ui&-+|cCQ21=}>-+|Y9e?1vM1@|q$JJm=skF~oUia73TN*pQ*Difp@^zJt) z&O93CRyU1Zen^*{g=3NHFzxRhd?zx82{~{f&VyX0n+qvzmW!f^6_cl^$;Df-uM6d` z3W2Q6($`EsrJGzS*vH!kljqKVE5H+Dk+ChH#1{k(s{0!@OO*bdJQu^BXSExp)LWz$ z3h=19aH0AQCAESq__isKRDkfTEWiPtL}<7b;l2{AMKuL=`!6GBmFQU^z&8OIA5p4% zmk;vQuA3)~LipZibn5vr`0NK+Zd9GaX9+gHYv3D!+Zhw^RtB|BlKm0O`R7&u|$AP1&9-{w&bU_jRSRmSH^yREql7DsCEKO=NF2)vk`yo8>MAifg zKG7c3NX;seTD4c`Z+swj7vVJ%GT5SgYjjT%JlE$(Qsrbt`K0SLh`c^ABfnV#cWmPt7u!hG2A%YQ#orgCjEqi0sqqZ<@1M!4N`X zv-Od2Kz`CJ6ok&ZB+v^Ogw{v|$V+q(D<)pl5g))K37qKQd64R~2Y@#V6WXbf zUaUf5cG}EIA)t#%;yxg5KJw{sBKKL>Y6r;(l;2Vx#kAWwZl8()?3gC9~loB(W!Zkh#mpDfd8V1LOZl zTi^xklSmf%HnA-5SuD;WRO#BE=G2!ACPCqr!RCII*)iBsrce=#FWH)h?*B-xd_9*ek}TC@zjsA{wRhVd~)uRsosSPa-m5_g1p&_wA~D+V#GCAwYPSv3tV7v?&03L|Z$S52~S1@|r7 zzEFGslH}fkd%NY1f*dnRrcmJS|69unr&N5*_=Wm_H#NI?N9E+ZIghz~Ed&Dz4FDtW!kcsWa`)8CV#$ zEVrFCsD3oO;~zlJ!==BaTu(fwoCc7?{)KQ2|J8W4OvHFG#=Pe8I1Y1+sr(?K#S67`>ho#`|~^48~ISsj1j7(x`5W27r1 zx`^W7^YupcB>m|GIJ6^%E09E1&sg2+dYVn^Xnn~v#sM3OR;6u0<+;y;#)f6wg9i7% zl&52{jb1G7dnrEwXN@FPg9?cKrH}IihcNuVuj-^-K2X}_+b2_@P^>7O8dsIsW_FeI z?ph3hQCmSRFx_79M!5)?`KibgO>Nt{z(T9NC~TX$DXuD9|AjWGhPc^#c&?F!l1=y+ z7soSF%)B1aAkKwkD};yjZw1c`y*7jeY2F$WVTSC_{_okMF?UEJ0pnbiBILKoII(QQ zA@i;!_}%3u$QI4n$N&&VU`({RWE-%A>cXTQoH9IwQZg@970afvFKNXSkvakmtHI!ycClT(PQ9c2J#V3(Za8hTA= zxhS9Bb{wrm4RbPxuIyAvGqY^VcLvk-#uysV3nG3@bR+#DMma^;g6%~lo=RLK`$``3 z6ujBtUq$X7@!9_rh3t7zV8i{P)a00Aq|Eih_$oh=hEqw@wW!i-!GZV~aq8tY*M|)D z5LFuzYSTnMaRH^QSbUDMj~_?TAWM;fYCPuJPVtTb-R<@xbu5XtfDp1#3ZSQ8VzU)# z0w3Fw@JC8uvcR_|;8O6mn%_n8`8wPZ=4H>zB>T<>ntAhfCnnJx6^;%Ow&nSHPO>rR zy(=4xjFq9${UCQp9x2E~pdnD1>D#NeDQxsvS<16;MSnbvd${HYih^pRSN==BLj}7S z{@w*(R`BPe5R>*qlw1(?U;j@_)9ni*w(NLGVN1X2e+c)m9#7{T#;9q!mCuhgSMG5! z0@O{q+4*P`pluWLrP@K$Y{4J+QdmL(G?M_xw=akB4U=)(|EciL-DEq2`!rxpc0RBn zTe|$t>CnJDNy#%P$3!B$R{W!EOPe{^sYdFFZKbexLL+vKt!M+fK_xQ7WnWVk2sos^ z-XWJd_@?q&J-i?rfP6s^Vo;O?oIoO;Qfeak3PY6aMqx-A(4dh#)qGpsSH*CSD?xtf zL>#^j_(3DTO)9c+H5rdSx~l(6T323^W-K~k%%16LQ+ynMzA+02y1;>AIZ4>rwT9dd z8z<3KJm46AjDxa)i$Nlu^%Z244#1YvyKw4GV+$HXigE{?7vD6&*8e`ik6e|V`~A9^ zfV9hitwH5)hBr8Ra=Ng+aOwmb;SnI$#m#HZ&x;&_QKTOftjZof+t{2wjs641nBp-& zBp?jL;@!e|_wv?nj}mbN$cunbT(6c>zmtB3VO`^c4` z{jriu@g$PO8%VWql>!&t|Ixdc1>4~^i|pOmNEIln|2N2K4BI=+|EP<7dM~n|Oq#&i zob|4s!$rE(3SEJ+E-Syx3@l&a>rTlWZ7a0=MsY0$lbP4aC@okKM84XaM@|2)KB?DL ztmK4i)bvSQ^_Ito%csBG!T^KgKD3f0wnJbVv=^t)21*$F-mkyn=3!y%FTay>+dG;k z!d;Am#&xqVp03*Au(t#Kk= z*9H@fv)njVuXfFJBLJJ?D1QRRlW%?q!MNf!>^*^{PW^K1&Xob=tUS*}5=P%T? zdYskvV!#zc++)a4TC1=%;3xs-*HABmJRJH}DB`j!<62iXf`;mtc_9>Frl`a}E}Qa= z$PK>=FhFzAPxP&96??l0>mCb-3+Qx146M-+`AH5uey`Nu$B%2tiMlC;VBPF*v*ha) zien{HO^$0~F$b^r9(PD?3S#=-q(SQG@&kyO*gHO_}4xm zK<|)aRR*xXfy{Om)*8S~HcWg8&YZt+FwIMqZx|-|(`g0XyXHg@5r5dZ^mMuW8IKE< zY--RbPML11kSGpg#CV#%#f!`@h#;tU!HA@}E-X#cY2|76wDFZE_zT=7xRG|kST8&b zCRs~lNIw}MDj8l$fU*2>iDUaw7>Mra}-RV3o zK%`i+4pA_%da3ezMD@~Lm$b13Mq)i^@UezXE+$|Vf`qA^t)b<={@BAh@)tO@ykL@I zl<+I6{H9?GT89@r{9q|VVpr(VAXR@}hrtZG68_gOdAEgs;Di1O%&ZZQ z`f2@#a2(p0vX=A#2>6@tTe_Wl{T^;vKD%rIncs?ZJO%{pm2L4nbNwNjS1{`&5>M?K zW`h8Tm2J^HOa1x230tk^Pox5&b*%g|LdTv5@ zxd3E)koCe<1mah$pPV9^AQAmNTIKHiJ#Rq%J+LN{X+ZmR&xC-dpoE1 zGjHCC?R2iW^(kwg7}rk0cqB`uCKDkfX?m~FO~{!ZM%GVe;;;%`GBxpy?%&EH zTd04F*E2XVuAyH}1m_4A|6Q3zU$_WDh<>`*XGoB2<;xPqcqAN&W4|pO5K+l5gRjP` zn{N}X5Ur%ego{;^u;I9M{IjBKv!knqxwDw}zoyhv)TWAx{+gQpx{70!7;G^m^%eD= zs50=ripboIPGZC`ks7AL!<_6-|SiO1;f7$|LPGT4O{tIZ_7B+Ba*%9tfbtd zu=dp(#O?@e;YA-y(1fCB_DU!nN>tYhsRY9oc(Ie_#N~hti0=Pm2!h=H7WfAkAbE>Y zZ<}>-|6(td4D?h>W|1MM-Zd_VZL@YoV3NFXW?q?d!I(dzYG5qP+v^YB#BeAW4y^A( z9P0`*k?fG@r48Z((?oLl_xVN^mLXqBk25K2)vBY|7J2>#1#xGiatIXEp_38dX9~QF z7I6mj`AP)*oP>e~VmyyBj&enM?e(=ImWfCNEK^+6tUIAk0S#3K)D_!d+qOf2a=39%)YKN-E6ii!% z4M=jnu`WP@)+72yqSF5!QNI_Utc)#3Nd}ju%Nrt1}|H@17q@RzupPStU zr7*o%`-E`z^(+o**}FYdBhqOz$+G@;Q$TV}2dkol*~AKEyiNt~62AJ^#56t5C6)>; zI&`n)o2x>>;rG#)cz*ePVdr+&^g~fJqZ|tv?8#n6Ou0dtSgU^l;VRSj+)u4y-2)DL z8}kC!0n-Q^je8qEqi9q8vizL?S`}1E&h;2JkhH&SGQ!o^c$lm87=RCZ9na#OOQE&HCgcIv1J2>{zS=)o@1I>C7#{ZG)+d^FN`7&VY2 zlLhOP+I5f?HsPWSi->PXr=u&ElIuil**whugfI|=vnV z)})y*={|1-uD2pyS;#ihI&N%JTs7a3w^(AbtMF*v{I^^r{G-;O|Av|(;I2CTh9tS7 zZ(N1iV^D@o31|ue2mr1z;rsx_`{ccN35$kuD+8S4oLwcvIONZ9`Bf_SkY*{lBnj2H z3iv9RcuyKph|~JI>3>tk{Hfx<#zi6Vq4WW_xP8ExZZ9$|l2uC!UE_5Vl`XrIQQRH; zzj6&?P!qzsmA5qs%RWLXfY^m~a(aWbtsuKa+TvJbwdGIfVFXA(zjyCzv z)0pNR&2=m9a=sHavD^MvHs*5y?;hr4&$4x;g!VYI(JcDE+x@%fQu1xnd;Rg_{D?-m zp51}nC~}Z5K;k78g5GcFDfMdPcX$NHR-q0QY}#a&FxGd3hU|)bRjhem(Z^+*@Eep; zxMLAelJ7xGDN@T*9&~+zhTKs#0Y-tlu%H#e`sg~h{`#CyR&p2rD~#i?=Q=Teu{{=j zyy;;+IO@qB);Jd~oLjgptQl+}eyA1VS_+$J2O{=A+v}y=p|UNMDRwPn*C$qK4(#M! zQSV)N+yme{2&1r_Bx=wdw=(?xBy#$21R-KO$?%f_R|88bK$c=B2|5v?7`4WAT<(%bHvpD*krbbmZ@#m&m2eSe4)Q zR^=@2jATB`yi4aGBEGCLj8X+C{Osc*T_M`4qpF+al2ILONk0FNXqsE*bRI!)+mZ38 zY6UZ7jADbcF=jU~zrC9=kAQBji*dxOdBzbTpp6#h{J?f5W7y!BHM!gBxn7>ctrY6- zf18jyUZdZ!OXT+D!|8Hr;cRbXl*+s=al&+Lsi*2lpFy@HbqmC!03y2HI{728x``P~ zTN0~X$BTPjmT3Z9B{~Pmoo2jFJ3MxrBOz-%{Qftc=JbQi5+z!r9LO&mScJ>xLWYH+EN+*~hbf@M~u9UUE)eIiJppMyY^o;AMWik-Y|Z1Zs=TA|154T0T2#Qe zSVv^5DDU1*Co}EU> zCW@CV*?L>yhzi`PYyqCX{~`@HAa<0?ddQmS&Dz>wy-=}_YI4^>kcD3V_;Wl>%e>n$ zrb~{%#JTD}S6?0mln&^5c^wKAV?3WTk8lW}XBuYzcAZFb%$$UYzWLBsUsBp#;5u@0 z)K6>o_yS`0=gIN8>q3<-E!dRr0v5I`FzDeW`c=~5mlfOH9Fkxv+%UkmjB!;@vTQNq zW-(tt>al(R$7+r;+a*LV}`nme&XP!w;nG6?f zOto-}{8*)1!zdb5=>DM%xjeYf{kBgHKH{6B_&&HS$2E!3*cty)8KAcqge9N1+yvx& zN#Q6LwWl;hINpOBiq6B6_-7s8_bd+`^pCC(_B>i$OZd*N{*Z)2G+mk-Ec^2&#`%N$eqnvJ8yKet3+v%J!~JzF{Il*4!}pmqHN?X zYp1>=X!*QJe{+d;JQtD3W(;uJYKM}WQ_oXn?OzbYbVMT(jZ4^-WDrfadfeqpEQh1S zi-!L<&a|4EG~a-!z<|t;=6DdFqXmfrMz;i#b)26t`3hT(088u|eO!ioag2}4daJQS zT$$h3^3l_Q0*bFJMr{^v=yP4NT=(7^=sF7d?3gO9M>ooVYKn8VJNefNowGh?-lXt$ zxT2R>tGrTq@`$6HCdAO-_Dux}MT+$c?+29__Pk%Vg~H_<|=0szfW&uR*@(ZP!Dc5CIQ z21(aQBi?E+FRl=vobqJP;a|Adgy(<<7x_fXc|1v}3n2-)+i*FuQNgy56M@6CI z0^g*WSv8O3Ol#9Uh39@pY-d3c4_gyNY{X2^CNTPIkhABiNV8LHySaDlc@_x2^Ql?M z+#e2b&OHX8%=~wCs3?lre2u=}KF)3_sd<&W+xsJS1&kX)lxqoo7a4r>sa@{ue!`CU zIHYi65BF?6d+=UHCXRci(QULwE9MS?#dR;`n^6o3*W@#(^%%ew-DN|8`W6$c-mr2f z;6@mPjv3e9N=uRNEIp~Nrt>6xi%DDEDa>}qFcgwy0HtU3`y@%$<~OrL%!yeYqbLe> zfZB&P@~>V?gkxj;rXY^U-0Oabp$eiB5gaXWeP9Jist$Ddo6ybf3%ycpkW?#d7sdq> zBXd#E&qiUM(~DDK^uxPH6Rejlhu-@j<3-DJT0-`NKiCTctV^}I3b(^^o9_bLaA>0A6a)h zEss*t7~7Tk;~vSG7E}Gg-Y0sL%0Mx%yFf^#&eGY%I5<~`9>b=&skJTThEWp+OG6ga zJU(JqpfN{kuDq{FC&*n$(+xt%FqfIHqn99o7%XJ@`uxr6A6aWI6~c=PHNe_8bZjBW z9zn^R^hq~^00P_vG5YogouqA@U=+wwO{`H%4MuRIBAI-;^|c5RWO9KS@nCZB4ZJeA zZ0*1Q_0Se4F?V@jU+Q&sKvY2Ud~xuh@KgKomeF(;VERF{h!t^TusGkMG3)9!U@*s^PBlQRWU)n^(XJtk}#p>Zia>*c-md5 z7NsVJ#NZ^iNAuU)bG5;V0U`v&)wzq+@-*yHLjtSZ;=SwJq?_{weeZm}C_0lp=N1h! z^a+Ij@WZ7#JB&y@M4d3n@R(8QUVTz9Y{8SCNVAX+Yf=MKF5o7tF*_uG*tWq2L$ItB z*-v?424`8C09vq8_DwJ>&gZ!JQVrE^wLIPoI#EzN_?d10OA z;u7;xHy!7hVnc^OO!d`S6k*Ep?}2bFT1Ly}0;&P&LK*xg6Yin1aRb7w2+yZnH`5DW zaYCeLXjP`u=zbS;_^^a9F*>i;iOY{YO$^G{<#j8s2Wp#R90T6iD5sX&uGZ>>stC1x zF-bQvU3?eqA6J8~*_>RNY=*Bel76;t60loY&*1JeDI}CVO)<2v6T73{)|ZD5d{iQE zW>jKsC*B?9huUUdPRY-}{Dw>$ltp9Ht?}h-i#^iN>BZv@>scEZ|FN5r0-r<4#?JP~ zad4_S$gX&bujJ0ePB@{uravQ~8AaW)xV2+6+pLk#CCVm@^XD2r!&6snc^P$Wnf>dt z*GUHAtk8uC-)lG~$cDSWZcwOF{@f=mX+CnpKsgk=O7NAmZ?MZ5J+nJdd z=it30|3Q~FnjyK4WzDAa-St$#g6LT22qv;xu1+STbl3PkY7vJ>U2JSiWa=eL6BTfD z{omxu0R)Q5c$fHNh#o2+?|B5$&@msQZ33HU%p?fy`p|a+5smbdu>{DB3{$>4VrJz3 zSj$pUceO3OwQ-Jw4?*^3p#O>lnFNG+Z9s$7dY`=Jpj&mC7rM4z&T@zLx zAGwnAB+Pki^{Zj+>oyHpF4=Ew*QF25gL6bh@QOiss|d>92;!gu3gly-6Y!-QE!4;y zNTGY*ek8+=n35fLeP8pCeod799jCs@2s1lrGi$1tm}j+DJ|0-fX7G@5re_o1qQfdF#3iR< z?9#i5_=}(66Wqo&12lcH1M+5|AD(#QD5vajKg92PGq)|7&2*=v! z(Ocrl0gIU)enQbD&)?AEsg)3E?@cQBj&iK|JzSH|;qOvc28u@P( gDim?H*m)A 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 lWm?n!QX?e35DHgHH37yStO&>uS)ve<0AYj> z5AR{$W90N^4L=L-RlQUJ&DC0@ZjPh;=*jPLSYvv5M~MFBAl0-BNIsH15C~g000{K(ZT*WKal6< z?_01!^k@7iDG<<3=fuAC~28EsPoqkpK{9G%|Vj z005J}`Hw&=0RYXHq~ibpyyzHQsFW8>#s~laM4*8xut5h5!4#~(4xGUqyucR%VFpA% z3?#rj5JCpzfE)^;7?wd9RKPme1hudO8lVxH;SjXJF*pt9;1XPc>u?taU>Kgl7`%oF z1VP9M6Ja4bh!J9r*dopd7nzO(B4J20l7OTj>4+3jBE`sZqynizYLQ(?Bl0bB6giDt zK>Co|$RIL`{EECsF_eL_Q3KQhbwIhO9~z3rpmWi5G!I>XmZEFX8nhlgfVQHi(M#xc zbO3#dj$?q)F%D*o*1Pf{>6$SWH+$s3q(pv=X`qR|$iJF~TPzlc-O$C3+J1#CT#lv5;6stS0Uu9wDA3 zUMCI{Uz12A4#|?_P6{CkNG+sOq(0IRX`DyT~9-sA|ffUF>wk++Z! zkWZ5P$;0Hg6gtI-;!FvmBvPc55=u2?Kjj3apE5$3psG>Lsh-pbs)#zDT1jo7c2F-< zhp7`Zb($s3n-)XMq%EV>(3)vyY4>O^>2$gY-Gd%Qm(Z8eYv>2*=jns=cMJ`N4THx> zVkjAF8G9M07`GWOnM|ey)0dgZR4~^v8<}UA514ONSSt1^d=-((5|uiYR+WC0=c-gy zb5%dpd8!Lkt5pxHURHgkMpd&=fR^vEcAI*_=wwAG z2sV%zY%w@v@XU~7=xdm1xY6*0;iwVIXu6TaXrs|dqbIl~?uTdNHFy_3W~^@g_pF#!K2~{F^;XxcN!DEJEbDF7S8PxlSDOr*I-AS3sI8l= z#CDr)-xT5$k15hA^;2%zG3@;83hbKf2JJcaVfH2VZT8O{%p4LO);n}Nd~$Sk%yw*W zyz8XlG{dRHsl(}4XB%gsbDi@w7p6;)%MzD%mlsoQr;4X;pL)xc% z+^yMd)ZNTI#eJ*$O)i@o$z8)e??LqN_gLa_%;TM>o2SC_kmoO6c3xRt`@J4dvz#WL z)-Y|z+r(Soy~}%GIzByR`p)SCKE^%*pL(B%zNWq+-#xw~e%5}Oeh2)X`#bu}{g3#+ z;d$~F@lFL`0l@*~0lk45fwKc^10MvL1f>Tx1&sx}1}_Xg6+#RN4Ot&@lW)Km@*DYM zGu&q^n$Z=?2%QyL8~QNJCQKgI5srq>2;UHXZ>IT7>CCnWh~P(Th`1kV8JQRPeH1Aw zGO8}>QM6NZadh`A)~w`N`)9q5@sFvDxjWlxwsLl7tZHmhY-8-3xPZ8-xPf?w_(k!T z5_A(J3GIpG#Ms0=iQ{tu=WLoYoaCBRmULsT<=mpV7v|~C%bs^USv6UZd^m-e5|^?+ z<%1wXP%juy<)>~<9TW0|n}ttBzM_qyQL(qUN<5P0omQ3hINdvaL;7fjPeygdGYL;p zD|wL_lDQ-EO;$wK-mK5raoH_7l$?~Dqf!lNmb5F^Ft;eTPi8AClMUo~=55LwlZVRp z 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 P00000NkvXXu0mjf@!(NZ diff --git a/source/_static/wpilibDocsLogo_300.webp b/source/_static/wpilibDocsLogo_300.webp index ca1486f7ce8e09dc6c9b5f7f3502a102ae193802..8b58871395a5e30bc83c07dc2da6c94a02deed4d 100644 GIT binary patch literal 15446 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 E1;BiEs{jB1 literal 8798 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 Z@u^B^p2&;M@_2aSjX&H`=~*nkBp8m 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%0D7~s2Ax!gA%|$U>k9+3QwEtRF+)7s7U%5G2K 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 diff --git a/source/_static/wpilibDocsLogo_500.webp b/source/_static/wpilibDocsLogo_500.webp index 1f62159fd02634a1aea7b2cf81edd012b1086fd0..378018a80b237dccce64c36397d378631a65b5a6 100644 GIT binary patch literal 23178 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 literal 15902 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 literal 50442 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

H@MSd^Rt`Z5KydGz>^H=u}EBVTVc8unii6i_ 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 diff --git a/source/_templates/layout.html b/source/_templates/layout.html index 18d5997e02..7df7af2bd5 100644 --- a/source/_templates/layout.html +++ b/source/_templates/layout.html @@ -46,7 +46,7 @@ src="{{ logo_url }}" sizes="300px" srcset="{{logo_url|replace('.png', '_300.png')}} 300w, {{logo_url|replace('.png', '_500.png')}} 500w, {{logo_url|replace('.png', '_700.png')}} 700w, {{logo_url|replace('.png', '_1050.png')}} 1050w" - height="468" + height="600" width="1050" alt="{{ _('Logo') }}" decoding="async" diff --git a/source/assets/wpilibDocsLogo.png b/source/assets/wpilibDocsLogo.png index 95f5667edf080453c8ddef3e07a38e06d6299943..fd0f35b19f7d7dfa618d34f497fce5b8600d968c 100644 GIT binary patch literal 118058 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 literal 83972 zcmb^YXE>XW8$OJO5Gx_}CQ&tN@4XdOHA|_zDJAx(9fDdhYHy|0+MC+DsL^5XQIy(y z{?pI*_x~Nwo9Es0Lfprl`$(>JUgvpTx$kIgO;rdX9U%Y!fILxC)&&4?=l}q$pZFlm znH11dY0N(Ygqo2D06;|k?+*)*nN0)0Qf+vmtnl1-c6S<%1pwf8@?WLNhRbV~b#8p{ z$D9DburV(d!k8C;3h@6P(m*hWArt@3{yz@?-!4P^yRPWpr}1NK0svzF+0^Oqe-Hnk z@BM##ndQuv{bi1dvi&vHLGH0tWe{8$F-ovmCn4TJlPy5oOIPVJDnZXpAIs`aOyvl5 zen07$w&gYI_PUca8r+|M9Yl2HR}%Pn-vIfuXgk;AldPB2H??{9DSd+^1Vz6_pzx!M!sO8KOekeDgrM1C`n|H#aU)BR335zAw(cv@C- z=3HiFX;{`CCwuGz&ZH3MKJ9(=+WfujXz&aCO|5qo#lwQPGdi#MJbQJ-8BN`2UAh)% z;;PdVihT)Otxq*CXkw}XMTa<`RcTKZAvF!pUe^f{qyRbJ3V9josmNmQ({z;TI9^8= z7W(gVCS}gz6c8jDpU$kQBo74n6y!Lbuh8R{Ts&|wb$ZOOi^F}$9UuKd8$^IG48P9} zUUO3mIr9at9k6rvs(w_2{P`@~BQ1?uD&%B+TG!dkG4S-GqUn@>>)Y)nrh(;Pm@M^d zUIvaoL=M>-t*iduhv#Nfui|Hi^O}5F-aaIEHAVcOJTK$fMOb)+f*^fuZ9yfL&6I9srD#B~e9EaXYv;QtrNB5#aS{lOc9O=F zpTJ3**^9W>p31#IGn}J1<$HcXy9f)vL;M2*il8Us2+pYrR(W5VVv|aX8=|RHfuO+) z$W+5o*-F5d4{VyEeBeK}lZ~7vrutQ`_7J*NHJ-}F-n5_8%DfeW@`mV|u^jW0@*UuT zNXx5n=<-|j?!qU6HxXm+OH|~3q|!!NdxhfAgmUamp#kL3Mt{hZwU}D3_~`l&2hXVrw`86O+PZdvf8SQ~7Y-C>lJ;ux`&(8!^1JP2 zx_-np&nD5;3Y~CoqSb8MV6$GWh=Vxt5KpDYfdEmSW)I2|CX6Ld-|R<59F)%{QH+kRFjS{8O63B4?Pl95o=5f z84Dw&d9Q#xHK~;NzV+6x#{HD-R^tO>r1+$uS_l$q%M*elP9qZaX2D<}4sTzDvZj16)<2Rwn-fcy2u?~>saaJbp2y5`8OfT8iK;vN-W?jZ3tCUhm;oq zc5H2|a~vb!t}yCP^q4Y#9*+YFkQg&iwa%huF|4KRJk5V|5I;PkM_!V?$<#bhw%CX? zTKM!Mo)!Xw^2g30;z5vCX_)UMJa6zXP((}vz~A$`&KZW;U!FYu+O75J!~>!s&#)7q z79yx@w5fm{tCI8yrzWOCsbTWPH2JCoRkL>1IB{W$t~wHR<&6~@7AjK|YQ5>z`DS6c z^vB4}=L&(WGl%L2CI@!H2e=Eq4Tzuu5Jc*k<9L-^yL%*<^JZ%{5DKB|9EBf!ArRaz zuk72}lw@}8uaoNuLIe0zZ){%&50HiSsl9}R?S_MBC~IYLeORdf=&vhazI6M0^p*EO z{Bk}wBWnoh#sN5&wY?POlLWDq`K`<067O8S|tull=~6mipf6)sG9(NucX<3B(s)boq#_X-NpB@BWes*OXjj7e z*StlMWv-jk!z{b`U3?CHeL`z&nU_AMt_IXz!oOZi`YD9{`p}g*vn<6ok&hLEX@}^; zxO>^;E|JSes=P ztfMwKdQ1HkrQfX5uPgGP{-u`|GPC>$3QM_6QvytK193*xc3^}ba(an=RXbvLc1xch_f@_@|$j<^4L5W7|~2AoWIHK zIN=i?aPs%cLJhlG`*n4FOFp$gy?+4d5m0lrB`_Zcgm?hX z>XY2`Mm)6Uoj#H5+88u$If(h6;KALd4Dot#ZbSMiZT!l%YW{S3u+k7#49Km9qYr z5;jBh$5+6!kR}Vh6c%z3rd8Uv9G?lP;ml-;)(mmR+R=O~mA?$MJt6MJW+671tYW%> ziCWV#PmD!4ypF!Do>Ei>)vOd!kK)zP5d=iEyEYP#J{ZrBhvKCPf0BjU`$P{$uG+W}JG zssu*!q;k?8BoHLUuNJXji#;iF?oM=ln^vGSiUSF>dukm|-Fp2R6GzntLy}lY3RT(@5?_t+kuvGcT)w9AV;-5b&`vATN3XVp)kL-bOL6Rp zCYh~wzJ)kwK#jQw%)uxy1ZEbSZ4H``uv1EIkXsz8!AI=LuMop_Z7I1B*&xUxQU#zm z@66=}8F581S>H;UiSOoTgo!2&WW)|#%Ql?Rllr^cz8Py#<#|1J9Gv!~GAb>ULXq3g zF!d7A<4B7MEL@yfXObpL^tp&}6`oDnf0Pr-w=?q|Yw-{lZ_Dx^FNBBV|YsLYhL35JJ1p^o5@!(BN0mkf=|oa1txd-t&wl)1K|e%0@tV z6O+y)m1m?fOf&Dx3)qu_|71WQKBVEY2iKe#q%w_}DHM8Yiv}{QA8KV(5=;LqbNtm+ zpHsX>^El*I5{IYjA|A0qfiWr8UO1(*O}U$qH@w4M4tPFB(0a$X=Ju7CuC)YhuaUIE z7sMta5`D*gu9D)##fof!5BY=0^0^8>i6xQ{l#(tgq?{7rGbypXqKFRBYTUF8;IT?d6K*mnJ>sxU0H#z5LNA}GWI+J{u z+(8S=n9u+%_@_+348gVagThazTlifM2A{v~63+&F71V+cwcsaFU`nY@wde1h5#ja% z`%vrxEJ*f@z2ebU3+1aS)qivMg9cA#Ods#TWstZHno>%j--3NCOr z*JaK8EUPblG%v;o7WWsqzy@uKrr%99FOCrjjsDD6=z}>_*$Z}3vV=omx?NZbzIRhS zfw4kl^umbT0jd(kiH{*yayDNfOtPo2jJeV;`Et zUzPc7fl5_%?$3kiA#j3!g_Ne5a(}E^OWoO==QBnKm$sd2Y{<4*l(~Ij=dnhGK_MO< z4v^u?wdizZwK=nAJLH911%`qq^H&IO8ruo?7Qu*)$%5&z^LBi&aM^?+)Q8geXwD|y?M7wVeNRK3rCz$rIf-w#TKUMhYCEe>GTvI@`s;ee* zL0MRKh<=F~CNN6KufajVu&SnY&R=YGWAzevrZ|PTS=@(TSewt+G zR&^BZ{11I;nx2}Ggx=%JSzUnrcCnH)O=%hLqzut@tmB1(>kN@^QYApH%f*AQv}#l$h?OV| zgdx?LSYrnB>GBP-(vUZzOHN_fIMV|wjpG{4=9}%Z9Bv9ql}54eo?L^)`qQGUZyBw= zVkW^)pBQdw=~jREFV+{)8^Hg(43&YWrW!^%f7ai67ur!oNjgUO3jaUD=!EB=IV|H6 z-I;-zxGWBGpGHD99(?7&=2FW4MRS@V6j}5F$Z*S2wwe7!&m>_T2Xf-z;QJNK>33Jl8i>+T zGTBjx+OYVkJnyNE?TG;ebClA9?9k1`(m%v*O`w^VKdSLqvE`IfL~xT>F~#P&-RseA zfyHqe$8mga7jl33owR7=fWUgBgKx)5boZCHs(46ee!(Ci$&CUqEDYzMb&5 z|1Ze}j7`lVn1B2f_K2bqV6ZlSW;*g)!S){h6 zME}K7vdB`bJ1l`FE^g;;f$jTL`Cq=s1cui`D(|vLg5G>GnkqA0CMKP%AT!unHY2v| zNV_+hzGW20E6dYMEX`MN91j^~c!3vWL^4K;(_{~8sxYdhRy=n?@HHdm-$?#eK>ng| zFB}OL5_ksZf)31vlt70al#T2au{9K*>m&CMaYYN;|47xzr~iGN1~+yRiI19Dn)v#E zNI;3yvWx8ki0d>!@LA`5aBpoCWbtL68bNm(D^ zsJc|M=Lk7-B+9g4l(9ki{nL;6D~MEfZW26H6+W9z#>5z6UP;Lc8_`je8D!j{Nw4@+|n$4j84b z1ez)&6hYH+_OeGJ4$}|)9Kzcs=-8JHvm<1;qM4c)#MX4AxBO_%3&dKA@UE5>84{AK zNzVHBrXfksco{EU6DxlFwdnE&o9lj73Rv-}$t7t@B@`I$)OGHdJY=$@eBVd)^`7y(eSyVA_^1-KZQYWV%t4@W$0Ts^O)qm-rS}t*uDNjT+;H4y?q?-Tyt4Ge=2O> zXrHO*UStoAwKoGEg|3b{R46Fr8;BFy7f`zl)TT$L9S|E>^E9mD{cLEkq8GIixkDCz z?4^;8Y8S_2&j$u!e|=BAcw=yM{XzL^#QXK;^xMN@{;tq{26(DeQ<`>X5F4e{0O3^i zt(oN_`^J?RBsy@sGkw54!)(ng=6cD?r?-9-WjLywB0@*DEX~@C`gwGJmd0YdbB=!b zCyrysQqBE;vtaQCIZd2Wr!Ik0G%iXb*N*D6IlY``F8z<iK96Cm3rdQ0>(MxD=SSre|Z^779YYq`@%154!h15d^gCQoPqBXL8LN4zcKJtizTT z>y{R=ed~AqqC+Ih$CY$Gmh^7N8?YP~KV=w5!vF`3HQC8D1w}q|NChe=5#2D{3Q*j4 z)BS`!si)evepJ!rIzg&SP1W{A{Rj^S1o>9YI)8+B?LR~c7553mKg^{%Ki;#iKCXNw zk*Qqr2+cf~A8N!6+5UB~+1Np9tzp8Wz_62t1{|}v4Epl3c4D)Zi&_ER6H{7n*OZTj z|Lm5+wDAcFUDf~Xc#f_nQ^qZtgXh#crL^!M4EGM~gb2p5nzi1jYTMtn$(mM9!`PeN zsb?~S1utktF5@nSwrr&?F<55~FV5PBJ*JsyT z4N~Hc(~0=_$67TQW%p4f=}`m{Mk*mN+?^4PHuc0WEW<^!{+r=t=rkLAvO*3k{4B9I z@9dY&4Gu@rqwS7_5;7|j#HY&~Cl_UsyBK9JD)B(1SeBta-~467Nqn`=z4|xArTZ0n zT*M($t79J(5st4rxtgf$3#zCTlw?!GjmcJC4K@8>=n9u&K*)6n85>`PFH!c$R#-SQ z)aGL~1(ejay$+?ZUfl}lt>;Al*R)M(a^YZX z=f3(Ty9o058OjxUla}DKomkvzBD$-?TE0(cyv<;a{`4k42DdVv_+l-e2Sa~I2oS2+ zij&*o)Vf+NlOD@eqs=>kmZ;L0uSsWz1AlCaVm_`u4(DV%Unxy<7jg`xAAeNGz*YHfy+}T;9Xd|I8H@A zJddw{65%2gjTRy^879+RbZcrS-m_<1QHWBB$3Ju)x|Q7biMYLc+B7L`prGVdJZO}> z5nJ%Imxf#{SczeWQY}Oxszx&u=cDrcAEJ?gxGnsz*k20p?n19VlEb7p`Bp=0AhQZd z|5jSOIq6PgX3O*R66bqx1m4^4M~QaR;nj9V=Pq_d3wZ_jRdzIn=StkQYI#x(1K^2{ zuGQHMY!Pwxm@rg-6Hf9WqoCf)tV8Pg@P_t$xR(D|u4^Dc!!wig*>w~yjZ za_kp~+J1yHGW^VaW7LPoK;6sg0Pz2os)!w#&~D0yiM2x*AL#%cVYP6-DrvC55|Py< zr|jeGSCpD4o9aC4AaEG!mSxYQ2LFF@L`6wfw$6_4B2|aK+e~nUgcX%QW2-(8%kO&M zVV-sRjOec{Vf=C@Bcb8&qgDamP5gxGz`%jM&A{&k160|jV+uWozR)~{&p}R%{ei6k znC(mq*8o&F{6;W0?6WFz$4^Qc{}epl@qJyW;Re`Yp67SAGp`W#<%!KjaN1h#Y3yr) z^OyZ>4o!u+>)Bu3f7Lav*8SS}8dZ~8#KMAEqN%bBT}iQa3Vc+^{)2Zzdx_?r!ez#! z8bMW9M*2TU3elbQ7<}FgYjkE|eB=wqv5>jm-4d|-Syf=yXQ`T5Up{LbN5?2cU=m0f zmg}|Tb8cOg`J}~sZEr2)b@usJ#CR1R$O5abrtB&q=-axf><_hj33wVzyzx_AMRWMy ziREuLTM|nqL1U~!868t=t^uQJm2wiP64U!%YM=5bo;t`s8aayJke-sjAX&iw8yT%3 zCngU~bUKr-(cnLrA6DRMAy`qL+ItO@^^4Io)8s@o!VbOw9RnY=r2mnSeb3SjDb~}6 zyVthce|aP0Xzfd6uEx(cAWpNM!Z=|3+`i@gAIlw^9aKMky4GZ@JItGGDb572k$7Lu zffYmY;|Qor*XH<8H=X$5vj?UhXt$*XZu@3sNp3f!d%e>&TPyD4(JMZU&qVZ8QZs4S zaz)55=A{3$(1t^ff!#P$N6{}iD!%RL4%3n(JRX;SFy7C==X-7}(BIp25iU~o2Bc#k zrWT^Bte;?Ez;>nC+sSD(3qHbC))$$^({03bbjNXR1GBun5Y9&L6pmU&5Q3q#uF&R2 z`FP5>QqXDE%Vr=t(4>~wIiA0(?et;M=S^UlQ~WqqRdBqN?*T47l7)~?vm3`b+#uCp zpR|&8n~cS#sLFqG})Y|^pB>I5O=qFhQly0p=&Q*0+~*>fm%vp<4T zAJ|V4lEoC=RC=4UNu7%z9)|fr(Y%Kf)sD4&yv4!<`Nd z^I5t#Y5CBDj@BC)4&HJRy$L=W#nyPs_2!x#u8GF+!6vAVbFP{2ig}&%tzV4(Ayf_D z?crWmzkSQ6HzqWFbTMDB-F$#yV6g1PrP5k1*uV+5`VqXJy zvd=vqI}PUoe<_>#v(bEccJY=NrHha32n%MzRw<%c;Zi)A#Km7qicz)Z5WZog2>Iq* z^myQzZJvS+2RRGUBE4AyCZ450Mw#rtodvsJ^whEuzg-mMU3$cABefgOvMb5k&!1*t zd^kCRGXC5ei^otoy6q$T`sBW>tC*^5K`^8_7Mo$tJp$BMtnYdBpmID(e)V<2G9dRh0+D9hTAV#OXuvHr zW1jxS0z-CNs5?@~=w@*UXD|BSP&-RYTs|#{c~m?&o_-VwNL1u~TF}LwjJ4XuywABd zG!La#QQURFF4zIQo6#oozNqB*od4N=*-PQIc+nkO!reYz`WZoQHCrgKtoulU=cPka zkmN+hLkj;>)!CYe=;l7b>^1rXfI5sC5n#;#1HM4qtddu;!}xR8=;e@s0Ffm2fSQ+u z%f$R@*W7U{`xX)dVxxFJ<#Sgr`fWqFsbczSge+y~T96ODipl5}TMEjHDd=ig{1|wn z4$j&0hMeZSrZDNu6jE2fqLEU$@a3R6-yS?7zz1QWlBERGg)l&!YuCw)Y3=Hs2dEfQO)T1ooDhP$FqxyvP}q(=@D9_E`S%lYiC(a2-`w3^AN zDkf)tr5GmG;uRLwV7d}kl|J%*lgiEQx1rg^T#@faXrONfr*-FirtVuZ)KvPc&fA7G z-E96`u6&^gx?e4MWS0gezQuSVf(L&Q**Gmgl}Gull87E$LiW>vr@l1 z>cvpvyW2O%M=n6aXkhoa4pe&;$_m~3`1<#8G->)67cPFF-1xA3$ex%0<($tsDcx+? zmrnPFiBH{udwB1@@;|oYy6|zvcRr_a$i~+gwo6>mjsiDV4BJY~#WLTIjqCH}Ks$^9 zBzP4g1{shSr6Z`7k`Bf?UI&dBO%G7i$i*~Z)G1LBIQ_TPozCovK)~ba`{3+ncAFT7 zO*>iQ%>!1F&z2sH-pA(w)Ycf{gXe)CL$im=r9?%)Ypp(ych$hDtF^>XfQN&x#_ z4pBrZY7LxCD!BVejI~@Em^B95ue@HCGddRv#rdw)wKS(NNBy&btf-Tl_rg~Wr!9ys z93>Mmjv%;rYiv55e$g*o@|69PJArwv(s&esPm!cv)amEOw_tq}3b!WiDNEH`s$%>t zo-cpSxqBmT1~F|2ns=^tC_09M%Lj~xe2?$1A7r2kXr1ZlvZhHj&K{S4p;_;u=EiNkFCzR`0@d{_JgK~HTp)t z>`WELw-`#gPrZ6t3pYB?G^Iltw92JiMD0^3j-+0g_dA{Mvpt2>c}Y~K8Ii=1;lHn1 zfw$4gqi1Xoei1ic+;2OXCNh_9T+GcnN{NKh+&+Wp$3~4hznF?fZ@cq5`^&3FT=`f+ z2d#I4E1c}yr|8+;?Cg4X_(=&PW+)ZmGWwsJ5aDug z(AZt!V|lj7_~x6{lGKO79D0L4VjTKE#QgI!!7adAJRe6e3F8KqAOdfIuP_8G4QYy? z^$Qv;7yG23B_EfMd6OMDoAIBIBFK578uW$f;l#Ozmf zn(QT2A+S>tjY5Y85$p16KO_p`d2}0rjdg~bp?O6_Y!!SO+U7Sy8W~vax6*jrq>qYw z;`(h(hA(eK-3H2{P-S63#mw4OjNR${F-ikv_JF-QnG!V!J$m^9bs8H{UL-%}g6=TI zTSxUsOUT9W`IV`86{Yh^DWyMEsbb=8y4WQV4FyA43m?3UAJ4y7Qob@inya%5j1h_m z2x1qi`i$wMoFQNhXA~JK$O1SZmMYfydBwry+r&jf?sZ5XLx&+?7F%!}?}k3RIJLCi z;$PWv37>TJTDQr<4^t!fkX&&a!U8N@Qh39}_r62Xtu=bgJ?m!V_~C<4i)n|i{^wM}@ov5S)RIC4$`OV9bR)gP&J; zUD|YrKPECzyT;L@mo2ohWPyBw+QS?9a`~z8|0vseyBBw{SBWnMQGewUTevu>+xoZ4=-)(q#I5%$QrM(#=g?SCY*HRjV8tggUB)y+*bNz1C4edePA1uu|gnFA3oq0JQ z{f^exzu6TUJNR7L+Rfa4j}?6WO{}%G1SRG?-C6zCr`@Fg+MM22`kg@rxXTQT#YpjI z-w`lE{`xiZ&_n;&^byU}VanV=Sess}SAH}JcKQ4hJBg1YptR3Niqbcwii@`|Z@zU2 z1&r_%6(T|W(F9m|#<0f0Lk(c!PQ?87Uu zbzm(98axHKUqB5zm5sc`;Lym?*)SPB)Q0WTxbcS;hVJGXn6QnVjr+@2EoATp0vag1 zwIhu&9wDF{Wh7*GWbE3Cb+}?|)`}o?ooz~_r!&863j0Em*LAY=2rh`D5esak3>&k4 zq{RYcEO$rST#I@^V`l z;jMc6loNZH{RS6Q%~SLkA2Mi{AM?mznQ?5QHIwScpCj3L*Lg5UD0uUtzwO&H(VuP?l_9q_LIrOidp-Rr|%RP|!wk z8d`!s(WBM_9f6MB4QJJSrmv`|LdA9u_g0MeJ9?z5O7BIk^Wr`pYlR+`8n-|WbMW2A z-6!Z)ElGQbg%viCKtD#@kd~HuSX-OBa=zIf=^lUCDj@IcyE$AOuv}HnqEyT#D7@+z zApd4q-m<&n3(lf>%0S6F!q!ZU+{5HD>)jMIy<*?Hl3JD+FigrXA=m2@Ke{Q3{O~3N zqKJdf-v&OZL_efnO$X@obC0|iO&EtYS$^iU5%_lVzAs%-bLFDHG=xlzU_k7Scu<~n zfUgFCiyl2p@U!R$w;$-e7hec>N+8_#S9awT0Pa@KzXwA1JC+JKiX6sGMN6{nno(il;2!qQ{ftv~nPM-e358aL!wT}u2?$Uh_CCc9q{HDO zPueu_@JSZ!6@DYx)lxJ$Hm1z{aPLT$-W0xNTDq%qH)iX3_)eqegIKqcLJGOCif5;T ztmvO-2Xm0Tp@fGUei>jEJ>|HUPm(F<)?KG?S6j9-o?f*@TLkKwQ7x^%(^;N15$b^v zj6h_p%EIkGa0eZj3KX1G4SE76Dx)&8vf8?)7&WhT=hF|~jTD-ct zl{`L?+FN$}!FIH{d54_x+Ugcr0Qt_~OfNZDD%r^Zmd0?DQAjBBvawFvRH(^98+m20 zqq;{lQMyC$KxONVpcV&b7b`>ZVfC5>Beqh>kbyRNV4{u%Z>fNm&99&c$JNi_oSabK z^t_>+Fr@_nl`*Uk+rJm+wM%K(gQ8JB7WSlXwc5lr%R32|walrAJSlUlmZm~Y8+={@ z=*QP_02IZXu8T|=Pa43Kk7`>7lLb1>Z=GQJaFOAP2TEyPz z(hKRdRDZuk__6puS)Db3c$>Y|TtPucA1e(b(F_X+eixDuqqIvdrJc85w<+N&`Q#pr zN>Lu%094{OSIP$O%+k(-?(om^JuP)}2A5wIhHyV4?N(Y4K~S$uf2cAe(wNe=OH(^k zd#7V_Xbq*G?O_iCje%W`3I61@LD#)VPw@}@(5osGyNl9_$fH-{pVLQ2eACjKB`(cb z*whHtml&21ShP(cYt-gq%h4x1+38I<=wbnDX+Bh!$_5%8);SgmJ^F}7}`uK?V)~}QU{xLxdnfnA5 z%i7msAnGR1Z05U5Dh>Alf7qmQS8>7mkgB;X@xpYl9?x@wGUvL02t`5A>vw99`W@Mo zow1U33qxb0$mq}h4*in(a(Lx{HNa(1{_?BG#3OgB$CMvFl)UMW^Zm5%M^E!I8C!3t ztsq>%hBGP*(q{!@LQXi-~I98ytL`)Q4TmH~ST_s#9;bYh!Op*Zu^>iuL zboPm^^ge=wE-3Bz;mWAMr5PL2hcP1E>Xm+JjLKVx;k^`$JI}Ipl9=D$5`Q1h$5@Q; zLiyteidLfsc}pSRBh9-Wh!2Hfhi5rXx7)8qfJDqhGW;Pi-y36IkPC@X^Zsw_XTqBY zKLoEy1nB@i=AHnZB<>CgU|py4N7l09B-*hVJ%=&%`9!d|&91i9mV2;4=|*Bmr;LRl z>|dOJ0*xg}HH8ymzJj3Sq_>W>kqwNj@6wJ(vRv0ruYD$KsrfS#OJZIvOx=*~sF+8H z{PjN|`H(%da>H*Q;UU4`E-v&X2mke|R8k(gu(9D|eUm}d&kL-HH!qpIrUwskWB+(> z-UW_0b*kcT3}5TS>bjbNum^<6sv%Ptbj@$OVCk)cA6 zwjw7!o&*=e3+mK=Dsm1g`QN2(DR$X01QVYnlhL(`HdrJ>ZR)0WSQ3n4!=?cpQ6`Jb zRzOpkrvbkmWS%kHp5xW`f)}aYbw8un`63cCj<^LEdZ=%e)Mz>Olzi(Q`PMannOh#{ z{vhv)VOSCeqeG{}gWP2DK?j8FY>-wE0JPo;k9^ z@jV57RV7eeWA^XZ4q;ML>ES}-(m`2S zjQm7#?0A0$XGzQzb(JgO@`W))Q_@kq&^jFAz%&jTz`uQ@2u5uKv@u0H2B6&{p2V!~ z&O_)rp_&>a0Dt4*U-L&+Kn?&qAgPWl7^R9uJBUX#J)c_3ZirojRj>Si6!$`x&#Ggi zKrvI%gfiwyoGLx^w>%S1wn~ZoG{5gm>s}UyB>WL4FC8lOW|PfTpMJBcoBXMF{eY&H zr5P%(esTH5W&K^-_0g-=#y_&(cNC~Wf9%a1k7Cio?X=`AUrL$zPlq|hYKAnmK=*DP#>jW)S%%P z)z#ytT?*xIP`Q{Hs{VpETgZFFFl>fBj!`JL-%^=N`)&Ax_q~xG{02_liKX01Q8F|l z%n6V5!@hg1vt}@|$XUa%!hlh4H&kq8NBX7(Rup?g^c*_iKem3krjiMiu}MQD~>5P&u_K|z{REng1F3gpHm@5Dzu z;J_m4@|EYI{MS^bE65{}->g_T+1#$YB@{d*QgQ}XqI%?Rww29(HCJ+Qehl8mIT)tV zc912s@HA9qQKm*>;$tER76O03%*`(98eGq=Q~o$m}g&7Lp6S{cYE!XrBl zIy4K!C0yH_XebqY3%qte&3$t?tGcs)c)CU+ckuJ8p7=w~2)!h|R)P{|T23J{PmN^v zj1`yw9WoPw`%p2Y)4^Y`GXD5)HXxven?ex*fDfE1qfDITC|H1|A~A=aw8}ejw8XiC zqJIcv$K#k~u-20X-nM=ZcYcvUFM?v;3L$^;v z&4ZbBmthxioGGW!-K|iaD56!_SJ=;ObBokpQ(8(Z3z5q~o(89HFsqk2jlZXzyGe=BuD_QwK8iVLj}%>y^tOZJc&Z z`Gy{q19E(%$FDc}IET&*m4^X({b9?#2Y_^f!es@7aDHm+ztO*J9MNw6MY@a&Tue@9 z$;_dltH9s z<#u7o1vPu6QV#Ny3OzTpVU4uXV3fwWGU}L#cjc>}Q8vBzjDQVtt3&lglq3||>UP&^ zPNReEjrYFRq6>RpEH5LmG#r#bE?=)@6sHh!q+(gIjrfCENYb-&!UyI{9}GGRU6>8- zunW=uS#bB{-9p0(u$0>j(%#(pu*hUz7^E?-f*+>elHdES-uaw6I-b86C)EaAhqbHw zw$QGJm0E~ikaGV)+n_O^ zHO#lZRaAsF<%cHU-+>gmIB2%g`*0*KsmX8kbFL2(KIBH7uOSS)E6j;BMFe7eWr-=D zBpk0=6R*wQPFxnGL2&|vc)YiMSUl?E_xd`H&U@-7nr}RiBy;v#q)4SI_H<|RaL%=@ z&nUwvTX>P2rk9n1hAjq_8i{fTT7Lj7Z*DIyB`UU=mBp-43Ih8&lEcjHkR8>w_!Ksg zO$^z-_P9UvjUS`7r7G^3Q3BJd@WBLlK3JaL^Yb8o&#+B;HoYzja_9kM4 z3BGrC@h0XotBa~n2h9S$`>madZB?r>7gf4+z-YV9SwnMsOYZ&$yz7ihi z8?*TrKEXVaHqQH;6hien_FT{6F3a5V_ClEevUpXm7d^^Z9LW}}Fw*+jqM8BUAGy{Q zy$nW#hI({9Sr#9E@s{vEF<2++tb*K0&8nd=ArV+fPF6o{`B_MC^ZoDC;ZSa1Q^_@; zHp+rm08Q?(#7n-)z~m%(vYNmr6QhJX!$7!+m`+J0sRFl>W_WW=vEmh4vjgZxL39p8eJrGtt{zITIRUWur*zTz8Weq!kn) z0d1E8Vo^~wdy6K-56m~$Ci1N-cBt*pmU^IY4iA1p)~hA4I~k9s&)9Ji;bcd%hIea= zg03vg;+Ch>c-W6|YaK|1y9`)>IOvWA^C3NtTJcIvn*-Nd&RRKLz3;6~wGJzaqROPO zoY~oznbMAeaY3)@eorlv^%r$gTeg`z4!PcZv&86=HH|J;e?A`9P3|3lg99g4ru=

EF38Ib>?h*2F`6U*V`U!_XgufDHq71|TAzSBRL zC%XT(Bk8?j+tzC%nO`PvX@YmvvJCZ1+Uk+Z_8cNIy7a3IukrX9KK*Wc!HR6JTf8Qg zNRjjAN1o<^AbqNT2Ba&8{e1{50qf^}+LkTORoHrgkQv;9B=M(+|pz$4(F7#0`|n zCcI-9H=@AlgKx;MmOpITttnh)UTJwhyu#d_Pp&R;v48%~--z0eRQ34NxNM#l8@@93 zSTbDb0W$b<`$N9B>-$>2VY^I2i9{8-wr9@Tioj6fi#Hyp9qhOui_svRLL1JCH z)b-cB4m)zY&WlOyl0z3{OZ2U!;aG}DNh+(JWlkwCJLJE1`VZx)nkU`LRv7{Ae_GsE zx2|NrdS|~b=jpf@UJ`KJud&t}khM#G+~Ew$&k!X%#F~5Mf3mq@dTlOtTJdJCgqkwQ zG636o@F%`?u=*3+&4?d3#}yJKJsZX{V2{eX}BJh!IR?0{T79 z^1iuS3L10qrusmY>dyK+jR)3?r7gBCWD9jj_M3S7eIP&}9~lleRw%ocNqmw1l6{C9 z0(YQIpiEw<60@uvBsg?DPZcti={c7B7-=3-7%B_-y&GxKfhquC4>H5UpDWsMj9_XK zJ*D|pp=A)An>#8ObT2dYzy({;d0LVDvvjrPbuf80g72n0p?;?#MnWFn2wSzD^jnu( z@+*ZkO-#y(4KmGc0lAz<>$kjXSuAkz0oF5~F^x~u*8mP4H$E0?hG1p$7w!Ziat z3KBssE+v)RA-$8=+WwllBGC#-p>`uAge_a?Th3mAqLDy3j~|?>=-0*6AJY zMPTlaA+qbh&cJlUx8G0yD#8UJIH=o_8c2jzNqGB0$Fqn0ERAnhXo_*jB?CN(lxYCwSR<3(-Sixqx#< zG1#bxov6I?_%KIzys9eq7^zhf#}`ssB^F@ePoWjh%jXx?AK$FZNj`TW$Fa#7{9E(O z;r69n*eitpO$2CV22t_NdHV9dJrAbZipkSH6NEWiJBrSDY{;hR9Y1a2zI3aQJ+d&H zDD8j(g_%LMRr$>9LICUt{4!TF5BV|cVDUX0_nw*XJ!%>L?aP;0RfG?uUPM9S(>S4z zhBhj-uDM*N&*jY~14E|nbb~+^L!I~(s_XU?iV>X_sF`C6v#AEI`;$#_3FN!8`0>}QJpP@zwuZ!sFMF%?c;0>F z7ojz8!u=F^hFQWh3LTGl8a`W-+!eGe75o+5|CMXTAeo)S^@w1@yZG4Bw= zSm{IC7Wju!q43?`uwK-%2A0upjDB_RCb795dS+OGJ6!F`MO1x5>?^fvfirD@H@Vb# z!PviHIc3e0Dt4Kw>987wwB<|2V(HOONaZ&b%5jVe@LvQdsd{`>de8>yb>g3qJsf?+ z+k4F$8$LZD7sIVjc1PLimXY($%z&&}<}QXG{< zqFQ`XyOapu4Ep;ra{68`qV}M!^ATwfec+HTB)=C$L42}$W3T2i_hLQ$lV?rw%q8iob|=|;Ho zfA4+o*ZKIIXU^Vx?cZ8w9zQDm=W*Lb@jC5>_k>E04$nIxH6oP_>*DgD;Ck_rmi*$S zE|fsfT7TmR1b6Hv+^L5G!PNej&-o;Dr?R2XpQ$;IeWwU1#!ZDHFfmVC~*psfT%6|KCz$B~5wV)4yxKXbV{8%W*p2N&Ue3xz8w4{ISP&5BAH3pl{pA1~B}u z+t3cN-XdQhi+$Ko91x;lhxQ^tvv~XwRhRqWy3de#9K+i_grD6<92^WjV1D_yn>^<0 zvgg`f>?v!u^cF0k;Ue;@PE>8%p3mMsE2TKne|72OYRi2LauXue4{Z43l^-)K_PRN^ zjAYZ8Ezp?FwWqU;+`K0%JZOGHB0q8dAMo%2P5PJFtK9PUhuvQ7#`6WGpS%&@Z8c23 z@h!VZ^2-WA1WE4Hhhy`+H=t#n&)POIe-|FLHQb=}q{ZD0ri}a8l2SNY%_VW4++04@ z*|I>N^3$>vA=JBgF?b`Y?2j7{bZ+sRALTyZ>~_AgE}&I3qA>EdCHb>D0sFZTA*8d&*fjy3ec=+l*qc!F=59X&=x!rHh$SCK;Ol(E+^c0e& zZlkhV-u%C+{-53`S3^|8840Wm2uswcC$Qb~5L@2(@a)G?Em4zHD<#+Hm4@#9l`u76 z5$D3#nNj21F=%;G=s}ijHtU-nJF&+fmZn=NLCwMFI@(Sx=i$k%v^s&{R<=8LZ!-5<4r=dn^k#f!O_W;DQ2_H#Dm>t@_DPKEkD+7q2%uxMIA+*K)qDT2BVEY zKc5J69q@U)Kst9&N;pcvh@Q7zepOP}I)`)ZE8&-jq3DlXp=ZqF66r}u$@EVlJFzpC z8QTTsb&HrRYbh6PUAB%l`NTXBgukjU=$w>ay z>S)>#HuK~%0=tq|Kk*+&IW+c%_J{t_5*EEMy`QNoKr25wV`cAXR?3C=eY<3W#p9++pReZ4-*%6Rm>JO`>i(=Ai~j9n3%ldVLb!nJ^l@lPjG=0S1LWZkmicd{;N{i z`{(vp6nJ}b77I3{xZ{UC3}NiJ#W3x@Ur0hCjF3V=fWagVyOFUj8sJtYrvH{_!$usr z;5H0?sB99$Ka*JiCvX3|S-X*V4XKCy?R321LmN}}Gz_94mzF-4l1#^T+u z7;Dodlm{k|d>XI*fN1GCM&3)3z07HhNfWDGgV_IVHFM-;j$*L|oOVHKcn$JeXXqnePI>ZW_VYWR!AfK`R(NivID!`eGgr*B++|pvsK~6 zbcC>*@6jjq@vj9KC44L%d$`)!hx&LDN2Cz;N5!<@Mz$x_%ZrGCmfMN3$Sml7q9ac< z>sTV9HTe55?zFV3-({}kcPtnB*s8pjS$V`Pw)Rj^x2!q}x+V`5kFJsrmze{D;uIB& zr=48{=LJN7yj>`wd#939D#h|~;p}m#qS}Lc3q_7)cf3Fmi4AN=P_qkJi0A$3uwO*! z7sg^&@I94?P@*m<7ockYovCPdo8B68h4?}I%wJyeQs1tB_~aKBr_ldzJSlAWz)#N& z_Fb&&b_Agfy~xQizt8VYb*IU!b?9ruQ!uF14f4)n)N>?O%ojU(^1D{Y{+R4j{`ti@ z``4Obstb<`Hd)caniUpN)+RP-;Z-oz#|0PpSWwm{Pu-U8>BZi4=T0cp34mC#eJrOP2_=J(t z3q>dpag2F87|XN3xEWT(8$%O2y@@Ra)P%_KDsz+bBe0k3#Ix}VN=J`BhqCUVCujfG(7-Dj!deV!(6Exc8H)T-(UD3c31w(5OeV=( zU8@K?vsjwFA6QLu@GFT_5LEC*fC^PzpJZCOp)p=W&6jwubs6XX4~(2bM_Da0$M^$v zZlC81?pZSpPLZJ1CIu_cp}5Wk8=pNVK<_{)RBq$Yn-I0M9(@N~vE&T{;Rcs^Q;ERu zuMV56ul~H5*Ulw=DRD1`T#c_4Pc;cfZYf)|8cxpAwnbN9(ipRf>=(*2pcCDR?*y|C z0%m3C4FMlokZ8)UZ=%(ImvYTJZOK{Rruk*FXo>ZvB)0(zzv30{nbZ{WkT;OPdQcV( zd1E3RNFT{))kexBmB}DbSRD^kUSl*7^#VG^P)v(rh6gE1>uu1CBT%r}=L_VB7GR8b z#{0PKqYfE2>^QNVX)bM!!(%W*v$1-5yfb6PiSb zI7e9-@{Emp3;+EqY7;Swt^LAnSX z_n1A#+UxGWkE6q|y!;pbtd%wUgSB8*+8h%DEmtuGLYne2Y!Lo1uB3hjxR~E@@pArQ z)WJuiUFtcqN3b0a$nP#mJBM{vgzdr}X<;Gu7VdOqO&@<6Oh`eiHL?+VXLN*RIk~XY z_qx0e)hh_GSKt=~re;LRHf-=EVrFFy*i8l^#edEF6XjPiY;^^aYEMt?*77P@h&eFyh*1m z5j)>-av&Ky_z^l4%0o^bNO4(*^33xhWF|7|kCwEfW0#`CY?ADQ>3r-DtBYMtDerTA z+Gt8&WD&c_2kc7tCz}|L?raqx?uMwLlLV$`wA=l%=+BIxo2Z?VP6_y4q)KPhy ztv6dc9hfqwgUp$;+X2cw^_#A0`Fvr6nt3Yh%*-UCBWNuJr*ISGveP28J2{do3h(}= z5A1N_^c9R0j z$d{B_AWi4cP?jnU$bjXgxGs;qgjCMzEg$?O`ILj#~_{Fk7{u?!5?{4SMeCEOouY zZRS@rqn!9hUu9PbgnUTA4z;d%Dq|i{Tf@KD!zCvWV+Ey(s+P%2)%_T>6lwhAU>-qRRS|(BORp{ zCR=^H@b4hu!K?HqP3!E}5b4#6D&OPL9`Ep;1=Upc%JPUhMXlZlAemAPcTQL3r+ymi ziv!V93%MYftSap}Ch2YlPvaoBPpXhiCeXHDRtc|Buch0^)WVz(eb?h~8Zk)j#@mdSSC+U=r&G~i z$Gea6gz|*@7ohzqK!$P!RE4q^u6Qin6#B2{H6oA?T?(gQrc=~#_u*IPtek9(xzmH_ z>xUo{pmI3ti}M?P@;ns$wYw0y|9Dm9L)37ySKMRFm*+Ur|0G))@>r#P>8cN=p_y0Y zY-2QDbSUxi`D}CUS06C%@F5u7FW-&*=~&itF&;k2kr|3wXm@n7>m#8Rwaa5=C@L%Z zs|b^6vilr+g_WqzUC@1J^zCtrP8+d=Z`v`{HMfqXi-me`FO1D~C6xW+)gne6wLr!d zr3#x1eGGm>t0!IWM{TdH;AK<&>wU101ZCOWXY90Cjp!eF)L1C4MX^PyNSlBCeyBrO2axX?ALOq1Km?!x3qB-8>kQ6Q$Crhy(JA)8mH!53f=1d zhUmB3wQ*zG$5=vnkMT$m4|s#Xtcju`b?TPlBU%AGu`G`chDrC-B5t_1gKyAj06&Sf z0E%)bx4<8pQ7^d-0R<>N;j>ncL3Ds8EUlFhu@}^sO90(V*G>C>B@&p-p@|3$BtuR+ zj(JFR`(c2f2qzv80?v-&4#QV-=%COKJE1yzFr>PCaQOG1+Ti=~)ozki9cV5>wX$Tl zP;X4_Zosl{<1KuVjY(w+wUG6xn@t5>`d9Trm2+{B=y&nEso?nw29c;?XSftq`)je? zv5zT^kpo90O1ES6&!b2$Mbv^t)=`Bmq)iLmP6ps964RBuk*WF_2dfzEmzw*p(wXKz}>PH>E7$TXzRXVk~_jC zrU*X~9qir#K!>xDkFP36qr){z4L74IZs+;2YBvLn?66NkzStz8x!vv-ALO`0*TeBn zWrkQ~FtQQ)a_&W}hBM)RZxl{xe8Cz(Z78msb`4b#X*cAQDQn^^7Rh1WaxS3hfZ2BQ zMGc^dp(NVwvs>T9KKa{+2_Ruv85vA*gno@=k)4IM8xI?BecA6yak|w6+(%vqwUf;=w#zT?XWtj%oO_ELS zcN+5-LHJm{B5q!z`s7N9m50h3@2zkNvuOZBWh7}esa=}R3pMLuCbO$qix%y`FOB&S zowSr4CJ4L_C2fnk&3d)XjNB1>RMX(&iFWSw5dxcFLCgGc$Y<0Y<%rkU;Wqc zPrZtM98pir!k!e+-1-Veto>X`S5woXd5GT>^pyNzfNik~9TC`J%6c1QwSlpUyR&2n zP+7`)r3ec#G@`5J!bJHE$_P8P&-;KV3OL~5?`LX$Yr%&uu3rq%?orRJw+0i^qIgIs z4k*khBIO+*Zuq}NKgF|ctXhnEEtom`5@sVkqpgZr0xRr;_m#ICV=u34Me`^@7SYE{*_B|G`7J848?9t?8l}}Za2&Du_#vn9jfcg zE`m?YL^3`c_O5X%m8|kSJ06SBa(m)f!a<_9^iO^nfXHqS;YeMb>E;I59ZtN*0HNyrnfYq&vL&8= zOd}46q-NGjtRO$ZK@|U{SX)dQHL7(%8I-(1hHycuFQ*H&Tm4FI0Yu7nBBhGXDxA69 zC#LQ))gR_#-+CQSsXyHNq;|K8Tg#K#-QW5gC*RVt3b67i_Y}0ki;@64B+>rGeY+i! z3cmZtE)Rd^x^#X)lOTPtw9gzI?2Of+CO+@RG)x_aL6SlsTVkU4K3d){(owHss{)k^ zRers4a6tPWSjYfHh-3sS$k(Wr26Dq2Ia5#;@fZt~S)i-}!y@Sl$;4$~+WU`1nvK%6 zNZwjN`+HstdOr6=dg~GeJTXhioml#6TTjh~4+liv$7=lp#dsHZ3Z^ufP|@Y*m+k*X zLG)MLs*a-sYuJL{P8^HU`q9z9V^RNH6aI}|q3>y4yDahT_N?_Ax}(nu(3o!sEID@z zIzC$GjSO&h(P|ZoP|SEnt$USb2*7ze1N^cm_XVYKI~-1@v6%sW?Pf@=7Gviz7S}-j zu=GEMJxNz7zv1*$+sISa)8pRc6!YP9ZP{H-n@pcWUO|dLy@y)f{n++1lklmYzoC5D zUk8v;A;DvVSfo^T6L~wxwR60J7JAuYA+nv!#ID0md&QONQd-IFqY)PfGKq5$8^qY-Yl>A&{>IE33PQR#rk1y`DN^Pl7swpQ- zdkIdX*|>|lboc>><16%aQ>h&ws5tlc{`_kD0f)?di$;l~{~DUqVml~`m}<*`LpBxN z^r=~1e{dg*ze6x^3N;wQHY94|-X%>)D!#y>_Vc&cO zD%OR{-5n_F1{+PSqtuqC(fg8&QYiy1qvP)j7s=VykERYUlb{aQeq?&`x;VDVtbXei zJxMQKe@)SA7r=&~NBQG|m=ic6lfk_}O0@9MNmMnPZl;^jSD*Z>v|>Da?`;fi+8jzq zzD6XW@jaB5e)-~O$|mCKOlm#+L7qxZ(rTkOvS1-OJH?Th^0F>&tG3-Fj;ohRH-jC? zzZD7a_Gc4P`6py;u41wS(7_;w50uGw#1MUQH4i)MqdDYRHcPV16lCts%<9S1DfB(R z1QwCIp_IE|Y>o>5cl=gnc&ub0XtM5ONo|#IcyUD3YLA%f-D}h(wD(M+$Y1GtAadN~ z|GlIvcq}4ct0Z5|2|UoZl*X@9dr(v#EJ2<8@h?vbAhS0=M;h7E`MeBIuV|YqTu}op zczgHv8q6koh!Bf>pN0}?$Fz_H58dneK6~A7?Ob&XEqS_TgS@K}cnTVHQ+=q5D8XfT z5JW45AoZiVfET?YZS@Hzopnb@5ggLpA_YS^7I4%&f$n!)@D8TVdlXlgLns9lHS#DK zgfzwg&Mbx`I_P#tYI%*b{~ESD%3S5&(0>6M#+Kx&51(VxppEqXnvM}+$}TW0P!_}L zH4%Jc>iR_tSBJ2=>smtkdf&Q$zqAXE;HHZ`!vL`G4p_-_irOI`=#RkD(Xt%Vx1{MS+Ww)1fpID;z=CDD&y`ASXoDO44KT){3sdz=CBo8Tg6Qnsg znL0Ra{d)ge46e+yNd8;u6g>`p$vi#0H_;p3&m|C_8ZK`^790AP(C&<$Bk78W&Zebb zqw{ftxF9PRBc;do)s(W^PQRf>mZ|4RsL98$@zCMn;cY1!;UA`LjV*to*kk?!G9+Hm zsD0MMej@HvfExdWPTgHy&rh7@&M1)^8H9^`%ZqmD>Znw+5mC_w8j)HvaJ*!8e4=nB zp>#7lrTLxoJ|6D2!2M?KIs{|1q6Y_Lyn5* z{wqYyR|C#)Y#nKF=sWXvMgg98gruKbKHNpuR9yX?*UJcN)SOeF*F2&X=Ko3m?A;<~%`+rCPp93iHRH^!D* zRq_+OmG>tc_P}vuI`9*Y*WPUL+!cCzY)>X9&t=>YQxN#5IyyS6TO5uYEqurFyPY+q zbeaV&`V`IHVlKydDwxDrYqggUTlI0Ruy)mDJ3u9pvj*5^J)muQbD>*Q975FiFxbhd zz{W3&NZ^Yh)c1h5?uUsR|MPMtNZ`s`7_Sr^6v_SX0%x!IZ#lU^iU6(Qzg8ryr68Zm zrVRy$-P)Ub-zcE*HMsS&^<#9HbYnQSM4Ei&&mp4;V5*iXsy4DXB_rGB_bBFKUHW{| z9X$GjP(hJO@7-9i1$aoz%(ldD=dxmQU?eHsIiY)44>7fWc{DR~|VPgV1`8-OXax|-tE>uDxGi5W*FwUk6W z;y17DTY1q9_}jPJwO;2)m~^>7#MvV`M@OaCla*ctIrX2dIsDCQNkg5&f0RK*l5n(! z&&Iw5w;9DMC_^aBNXoQj*tz*9&W$7KRxrh1?}h@F`>nVLT;#n}S$rAHOYgesE`&TZTT69T z-7t~tX%>~4e=W6nss8nN*8`9a0fZUT`ON5%GeDJ%UX_2kdv)^AfR^%Q~i z^4s1>g(Z^apKl4AajK$x@E!x3gwjXy19kajZK2 z#{M;MK+OtvS5hWkcz&a+vB3}$%152wNj>>NQUK~XR)-F7%c95=)|l#`X}QM00TKVb zGaGL0rDdPzC8wEwJn(P`Iivn-c>)G|`tBiD6Z;X^$de-is=2K?~h*5U*>7}@o4Df{x?Am zzkbaVIp6JE)Zs)A4`dNYVZf%dV+>*a(Ycl6^j^U%{&-^aAM9$vi)L z`d_BJ`ehFyq2y}~*pwJgv&#QF4N=#)JlsMw7gI-%(WC!6D-d87(a5~fx9q%0U`xWf z)dD^p|GJ$lTm`^-kSzxe=uIf<@NPcmsLyK{%Ig!-uRa%(FHWE$1`aW8a5wUWZh?=J zU!St6A8xVRLB&Nl;{eZ|B~W)cpKXkkCO@b8q8Z|TT6P^f;2m10zJKb8m^pk5EPhh{D!VnHc2tuo7+X%R$4 zm@M%FJ9$)EdxcM44Asj`VBXcG+LG#K0|f}yzA}Av60fqJif7xjCZZR4(GMX)k8{tW zb60<`2`R%TATOGJ1?aMZ?*H(r#QZzILZugY+)Y%|wqYCntpvQIBC-M~8@(68PbQ?C zt78?jiE)l;wLQ>IPEQ$GOrbXGc>h9F@ez%1ewN&0re8HJ=QAaj5Zg4y{8vy$MGf_~ z5sYw|kJP5k1f^%=sL>C+p+X=dm7w$YC| zcL5;KExWiLaV~dC=7xLA6lO$4sveHqnOj3;c6eIt&p*Jfw}_hN7FU+O$H z{GFD`)e%OE_QxXlHHu;sv#v6qej{xr1}i8&`S ztr3hXEdWqnkG|umSA1mkeGh*lm=!fV4h+$bEFzAz*nkw-42=ViWZTRXpqKAe+Tk^n zrQxr7z#s%sG73vrwV2Gte3UoADbWz?ZkUIgtQa`2{FYmcY6Y94=f?feksmZVg)1lTG8Uqa+nw7{%Ll@g8 z&$4eV#z!Z%j&w+;B>x(kEw)sXV1zEty^h28(B)$7vtsx`Mfw-5yj79F_~W?h7bhRO zA@NdsMSo+UB)zxhVV(RXc1nRR0Ys#fgv7I)EmKx@&&#aq1gU)mg^oHCqCzPTod7L( zSp&dqdfk)wm}MU(A+8|_pA!Ygucjc_#uWs%fqJw~zM@*pzp2pe1pOV2N-j$q9KcMb zOwBWao!w3<)f**}X7%pHp!6ZTP^eoA%ro-R`BbUWzR)i!mwpW}N4S>zP>}fxU_FeS z6kYgs)u;6`ASl-Ck)N&tSK4r5K+nw~;jEO7R?yCI z9i@Z|x&R2LG$Mp_25S=n0AWhLSAn=uVO61j2ZXaTF{i#|(r+=WL-J$;&6l+T(MIO`jf$LUE$DiDS zyoKt62|EM-2)1@s?+>(xrE89?-N-Fa+0n6o^Jws*$7#O;-`ITrnO z{6Z}po<5i#?2-(3W5N1!3u!|~mrAMfG3`)zSH~4)BOumlwTDlGD88C*lrI_fN^d8PvZlMoR5-xD43pma&QC?hei-SCdWjMb?9x-S3SGrvh2r%_OJ~mIer9_4pj+jIStAk zp%Y^+1H26TCeSxtZ+kvGIMiy`Z{?B=g+!g0OK1fgeWJ-Km$1!u$}z;#h{X%V5|yUK zm{a1}Sm-B|n@IZ4wU5)y(qH-o-zcCUapX+!X0?~opRQk68lU)>{3T0xR=Zjk3bq;D zHa}nMBvu_#*${uyU#jy+_x+r_@X;Vw^uuOs`kVO1;2evRpP=;lB^27KSN^W__8BCn zN1VKy{~4s?sxbZLC)}hT)z$Eh1vJA!$z~uA(^q!IQcLKt4KJ<_=OKTnn%A&W=sDg| zk1qKWVj%fb|5c%s3zPW^TQ_RO2Q|?AP$7y&zelbz7O3=5PiA_OIf1Z)I6wXp&#c{n z2w6XHbrcP2EKtgr0*-l*EpqaClf_YH7iY=99QlXcJbY#`}{9|N(eWZ#J- zO9v@xYnIaCyuq7~{QQ}h!&|S=u|YExuykzD=KygLOAp$vcxy7M?txINZll`j@GC`;iqFQYsV|mF9Sdyj~b{4ap}7OzGBS+Wog-D|9FW zp+1}DYmT){s7S~Fe{G$G77ImwE~mmJ++|rWPW>){s(M>^HQ)@11ZgsaWg$jgJcy44 z7mux_cE3x&ESrKHSNqxf-!%$3wH4&pj)_stGYc~6P1*4^$_SaftWHK66Mg@N zOl^5%$~o`P6jlT+zZ*TI3FO{!AGF>Ux%fvpj|JNxbguXvi7E~RgM8Jvu#R|$u1+&j z%+{|4NAfV@bPh(S;bq}ocgwubgCjIslX}jVj`0|Np6K-_`0jwsgYTF{ z6<4s!VM9gnhV(`ZIq%i(fjGKyH@-8LlO)^W)!=K7I#7LLIng91?JI*6WRZfc9s zP>wGo`l^flc}-LPzq;XIs{q}Gl9$ak5$y$~Sd;Cc#?h0x9gP#q0@|90VH+kjk-4NN zDCe*^Yce0C1T_Q|rp`4)T|$W?dh0P;^8E!a=*IJC6JL&hS3FU39HTUALNiGZFc8XW zohGj^f#egG-(BOjZM^XgM)5#(7J4_Ugyrq5>n9#^SzV7zn&gqEz^cP2F_~v+?vz29 zd55q;Vny(^hK+$tyyqSb=f~TvB&pyPUvZ+VDSV>TS05;>?X+b2qp%;(ClviO=l{0X zfk$;U%J62mW;Kewl`gTIq>gLw|I3dDVu4sKT3Vm7ajojevL*=KejI$OW6Rw4+hY1y z*K3kO^_l(7|2nqOm1Ns)>!)drmL?J9+NbQ7c8X{gpr|?qq~~9-)f4I zKM%5go1)_qim|5EyNM_RFgB@9;bCq!^Jt$7P{p}-HN}Ct=N09HeNff8 z*hG*}hIddJSHcND8E@S5(1wz9Z7mFRgl=~0B$_^cOUD8Y^~+iKVJC-GSqKlY%%BW} zd5V8@2NkhcM@C7Deca7g4c(MuCHy2bm{24MIW_xH?FeqhcRPAEtuZ7{ctQEZ7DTRL z7fH*~1&oKeCE8ou9-ll%xMHt9vNQ!3hm&75g#6?oWCq~Yu28`1I-wAu2H4fC-SFYH z7^|4f{XV0VEp1mvC?ZaPWR~fT)_X-BdwFLSo@&IrYkQ7U+sCbR%tVp|q4PLf%FPsp3u;7^yoG$SquJ^9xZEi^uWx^8{qnGCUJlWj67W@*tV|cd;!7p& z5Rkux>@Rf(EIAswDyNk19jplNf-L?@BfKGVj5%_dha*942RZDQj1j;O?WQIH=JdcA zEndsXPt7Kg0aA}=3~ToLLeJyCpm)~S>VMefRHU?H>1SyVB&~?AE@4BU)EFLa7}dpI z<44$r`O2lQywoo`Fe}JJkS76lwq+K&sl+qHQXHBS|ANxW zmi9iMuO?o&$-{Y5NRIzJ#1P|&oDs!C$QMUy8cRUDd9}J9Stp@~&9!#TBJRZ6C@)&G zVP?3M8M8Hv!8)&g-C=52 zgbCex?IC<-uo(w*9RM!f)CZ~Iwo@gr1{>55NX7?DZ5|$kA{>Ry3}%z&?nqI94q+8l zMYqx^M5NeScrVMLAJ)eS+!gTOtpF9!ST1^2wZ;o@QOd-pyQ@f_qSDlCLa{!sp@BR7 z*u*pcQfGeH=5f0!7aA?NRd6Ds)QW{tYzI*1iV^8h-+_?*AgYUT82t1rd74%p%5b+* zqUIx+4)p;tUS-xg`}Dg5HF8Fss*U{w7)aqM%E_f|!tP4@GDyisePqcRP5SA|fgG(- zlx<@_6_-%fXDd;1}vV>u!uHe$v8??(%@UzsGo?gWoIc`G~b zB{mbNcDw`9!PJ6Zrz{%ItmmB}x1F66!i`EKy%EGzgKzcE;xRvLr3XEn|G{rvKqQe6 zE2&1TR4Ie#WI^%4%BgP%DL;Z06kloNtX+iQP+#4c^Cew{s8L^1G7B_NiKNqMkM4|0 zMVr!D>qFYAV>HrF1>%EhlKyZDSvUiR5GO7fs48~;EPK1#XRZA{1%~+dXz%d~L!QK? z@A^~IXeM3L;6=@*ZBOK3!wdpzqFj6SAC8q$2A=)PBYfJBicGjV1*+OdR4ggw7`#(F z@gRMQHK+Z2BoU=waHy>{I(xbMX{rHv;m65yw`lO*Tc?E(N*mYnIn8U5SF&yRCx_A&BI;NPwEcZ#?qUlvmrt< zyXb?v6S;o6zmx`3jW-fcOzYqFtRXBNjia47mo6N^EI+5*8BhDlx7oGhH*L`{&vQPm z`Z=!4pSP-ovE1gw5tAZa0g+-_jVzT1!lxiCkZBqm4o>}&gu)pfL>yjtj@l)X?jdf` zpLzs!&Fi(+^=K9lRgc5{(|MaC|A(36qWg6yWyGw-;IQu3ALCpnK|GJhC1%tuP0^sv zyLal5k*Dv;GfS6DMU)**n{}UWRP9U;x)=$5AiMs-{`_ZO?L`s2Vc2;a$<@xbuza5V-u2Leh>}`sV1O($s-`P&4TnMb~7YHueHAP?$wQ zzCPU>86{)EEXrNA)9iIlxR)gRPfUcHmk#s4b9a*(VyQwW@zD=38Tg`HgQ4#h-*z68 zg^AN`0XI!+IPN#(5-G7XpLZv7aNMxcWuCd)`G|<97q?a*>I%BrX>W9SoBg?3Qz=Y) z2py5y$g3>)70njC1+%hqSHf?iH4G!K`E+KUb8J)^CXWLo*Zw`TBdC-SBmRbN-{qcK zG&j}#={tYY>E}LzJtS-2J`Sw>S4IeEuq}$fVy7Io?V4`l0+#Ry@kK;s7Tgad>+KJU zuB8Oy^rY6w>B+<=_=Y>HsnSV7d4rm>%(*5JF%_8#S#4?&JHbDol+Kd0I*RW3zy7VM&%3H=*N+%LFtnT1h4Z3wdz6O}dybqyt! zvv;f8ELA?m=I$HKq@GI#e6swxZbx;gvGGT$lZ9T4S#^`cM-CCO@37 z-V1L>t#&m_%Mr5%R@Oy7Yx)+gt z#_kprOi+y0FLjiejpq)goI`(PsMPNUQ?4YBUF=QlDGd!KP))rW0d54Wvt?zk`9096 zsj4}Ch8Hy!ITxvl3C+Q%|>3g z^L*^{x7akHOu_3iAJ7+H*pUgB@ZMSa`S&y9rSUQ@SGWyc{ zZ1+cHZ}(HHJHKelJ}qoP#XXbEYXb)|kVCd#i(eknq^91#VA%w>%)IRfLJ$H96WTm~9avX&qR8amEGPAYJ+h0fuSSl!~ zJZ*#;0UC@96}-T0wpkIY`WwK;d$P8Un1HZUdzjKs(C?hdXs>&spnN}AiO!%7=9&ol z=k31-CD=zsf?WF^?__G58F!?Cd4#ro6`;YU^#GJDChTS9+n)y)>tFh#J_}67+MH{D zrJXul_TIIX*4SY|VF)i=ELq__dGmp81683fhez6P(mT^b{v|enUvcuX$zeKs3^9(X zkQir=)az91e-vM0K`L*$&Qq)kvQh^Y)tud49-#m3Aad@$uHWfzk{8q5Bo+?a)iD?j z(7wo(cks2_6}*wYyG=z`992exDVe5z!3DivKk2breZ^=Vi?=6jg1X`4AGB-~4zTR$ z(-y-W9p`TcuJ`nPs5qBmVzG%X?SA0=9nerT6MJW2o@m+>X=p?H15+A>9Up_L#j#dZ zYmHcrtcF8`mP5h8;h(!+_s>JD;O#F%vH<4fMg*p-|09(Sv{pee;4}y?qCghq{XqK| zH)}AU3=!xCK(0JqAeT$RE%}?RgQ`C+txhZ7X#bb!N3cF19E5p#?uvPbgRRS!JhpJs zMKe6l>57RC5xV@s98If9*M842akmZj|1e3N)U@uqb%Y#SiSyMa9hUdfwaT4-l5PRy z6r7W3uw661tr;7suhzA{B}z6H3iIqcc)T(S+4VkdJ+1qTW=ZVW{`*fWFb2mexB2?~ zX}F41&0)Xi1O6TFSH?qzoWcRdLN0_fM8rbjM6ec|%C~V(m)8RMjTV7Xzfe<|fOwNc zYOPDTxf0WQOO6QZ9-5==a5{NLv~_euRJDlm z0YcegHa4S<%zd$)$0Ks#$~B9!hJ42&?28z7+jmLNJ8U({*{WfD=cV8PkOtiGyK)Io z62FzG#iB-Q4W$JYQSD5SFJo`niMjc6vF$YaW3@9Mew=hcIeP*TrMD5@Cs zkAyIbUsO8beksTv6!4zUz(I_9ZqRVwIpHz!ogEi&%XTDfU`Dr=7Nm8HRyh_{E;&yq zJZ0Pn73~Q+-mUO^leFghSw^nV8TeC=#0a-%l@KqlHXqKn@8G}JvbUem;(1Uhx_0V& zcSpu!Y-~D#jaPlx-#@CBC2v>L8kG|IP{g9f)51|N50gSI6^F4%Idp=)A)Ut+Y=vEq z^X7hiPnaH>O<}`ADdAIz31U5oYAm65)MGaDNGEVR28_O?c}~zMFD-Mxrx#P+Rs>yZ z3032UayE`nEY-?TKNj>(kV;LemY&W^k*&eB;~B_R$jvfDo*Vf*=O-k_Gxe}TrsW0E z3?Z4hveuvcD;xvp zqEFt>C$36Yd3QC)LdI~oHmR`3EL5lp@nz^RG$%}T<+9m^ zm5>q{vh=!reVxT|AU zrLsKD+<@~Rk4DGZ7{*GgxnA)!*VISDt(#|C-R$+q*5w`Qe(WYIX$q57cJ;6yI5ni_b^JB9 zvS(uJoS^kQwihFy_mbbxCb>6U4vR1@D%RK|mzbh8A#dB3FKtJHx|c1|^yeezKFTn` z3a&ziDmWs_fadFvW3Lc}jv&HqcB>#?&Y>KmDSR^YPY(rhWX{a}3R>6WpZxPp7J2m< zuZwLeSkm7GYhZL?*wi*~{eYi}7JUM?78QBJPLo%`Qh6%)_AmA>M7y5r|MgV=@JiiCeP#J7P<0R> z14fmF$@_|skJFpZD>nbB@Q$9P7b#84JX_(M+Pk7@Jw;}(`8syV2P^D9%c3b77$I@v)UIFOrSt_-ZDq&C>cv(ff~~6{r0589~}1SNA`>Nd>HXvwd`2 zyr%+uq~FJnQ7P&N)>a$LR=~mK!_|L6ROll)CT!!*RL`LqB{}Tj-FXCiD5kZu#{7~x z>+f)VxG194bX+sZ(LxmYa?*13*FYyh$`hNX9qgD5;FSJKMr9P_G6f&GOi|_y>&A*G zCqyQzZf|?aGo|n4`%+i`fiG7JDR5&_;ae@PWcMD;^1WbWFaPpR)_D5R!ry*S!{24n z#Q)-IUfL}1=??e%e}!-BYF-?<({~5aIh4W?$fc7jWU#TMs#%tZ%YK*C&0m$MOY)Z3 zY`K=IdVeLe0%R&jB5wt45BXja39FBB1up)KW)&(W<%G#=7S!<@>_px^)%vXjFX&fm zghdIDM({Q#6fNG+-~Mb}2)(&M#sV}YOi>9uI$q6D;{~*KD@scbVO`qBf2JBDnHfmR zfKO+s>^0-Ru#X;gY=yf~k9zs)zDdv2OhsJM6i7MFu>H!ZQzcOd9QhRS?IPxzQl|7_ zEQXyIy(KW~<*6xTg%?nTROsz<>aD{upokNbQ~t2Qq+3_-$l+w9Ahl#DkyBKTj)}0M z5TiZghdTdrr-INad(JX~bOhZ*MWvOGBkYoqUrO){l>E4jOxoemF8Yt#SP1#x0XVk7 z16H)`40$!0a&U12oq*W}tX$1?7ZGeJ@a`uGU0n6%z@w7(OC56gj|bKERQn|b2^NIJ zs1i&nVAZ0GAv9h1_m8FreLeHjOi1-7L91jx?Hg?wn8l>V;t5sDEAVb0Q!4oAcA{A; z2yj=c25qCEOMX)hpoaY0TwwC>`lui0p|BOJZ zL|Yeht1bm<&jBup{YH-O!=TrV%a`k(@74aiAx{ZR8!S*EdEyZDL#p- z_43T>WC`xZOnO@q5mC;=p#s~uu}Ez{`SO~Gi;KMJB^9fdNxg8YrGTUn�%AHt?W> zA;H4sAi}TL&j6K$DG7P5%0@8y+s=Mfhha1%yWK>=dW$5F{7C>y*c9j-$TJ=)A}iWO zn%eA=r-tv%ox#9}ZvOc9;w|mrUst_ZtD&-e0-lS|*KPohF7tV`zNgj;^Y6GIr<(&6 z-UJHmfnlpG{nx6g92HV==eRss^LSd1$OvsKshuEBk%zxl-SCujI@m%8yi6R zVrP{Jf3vU=CBGPXN%4}s%VXBNz0p$?=>#OGTBqNgBs!P5%2<^vHDpr4?vVO2Zvd0e zmiI3M{|Wkjl0n%q9yOHOXeXlda~x>-Mf3*>lHm1G)QJn!!D)w1hj`%j2S+Z*kRaF} z^HuMJ_*tPdf^}@1_3lMKnG-0acQ^h^RYp!}AgX3(g+(?j8ckv~xNX?E+)zp?whT_Q zmL@4Beor%DO?J7F2^LdL$9LI#AF3T<8c0oo`q*_anpVCJ+mrNQ>*;W82ZhaHd|{7X z5dlP%T7WVRAdKc?1cSY1pC$8{Wu!x1a?^UhI3(7nkULE{Y>RMlUF0WgK(nb8B1is^ zh~e_5wa~;i+%J%T|I8;&B>Ode9qj!~tzNd5gDY%bRHru5YW_Bso^(`We zwIMJRi*>AtATy~QlE0S>_4Meq^gkQY>{miKc@O84-qOKwfho}OV2Y>B9na&$lDg7PWvxPKj8M$8-VC8HhooC9sd$7s(jb#H*fs7mH&u{=jTRy-7lz*QdGLTyKCq!K|+vJ5K+3jYiLkVx}{qh-sAmypXYu)GR&uQ_Uyf{>ssr-F51XS zy6;cd2jei!wX3?I?0mWKYVxf9NdFL$B6FjpOO9sf0__(nZm~V9^Vi!V`ZsB#w7ld! zk8xYn@O!ukns}#2rn)1j5&0`~qw7pDfhHS2TA-;75xJZpbu{Ki{MhEyi7hX-#lHo9 zD{+XFi_R2&321UrrN#if51@bAM?q^3D%y`zN9*DTM*ls+lp_;s$y_4wIzE5O)YSRi zqz6+@;aVEQS6uC&=aEm$?8ogNC#yniK6uYK@m18#=J1CB4_#+|cYY1uFZDH-g`1hAK%u(4TuG>q@_ux!s({`| zwCcdq*DcdQ@%H6AGxvVyv@$#(@nc%Ejy&Iu!6p9f^Csmx)XLv2DRbjz@hmFwB~-9 z`bf26D26j|=NK3#fPh7g;efU~5cV=Oucsm&*i`F|)Ch$WI*Mhp1?8WlmJsuNtT!{#D4oT?0j-fhb?de6w??clvdK z+xroigf9%y)!v1=;_66Gk+SaV?EhL&`__vXm|25oO@VGEX;Rv=Ug66O_5#!dsEQC;-D@{NxlXlV_Y(CRdBxI@zQ z@a+RtNXWSLN+5UCQnd=pD!%reOEc}Wn|0We_V037mt(>w;fG%-B5i}pTs%JSpbf+{ zQm%bEQ{jB+AC^h&#y!^{YcOp*Eh)P!%PQqt9P$i1!@>XS-wf{Xi{A!Vbl9%*vd4MV zYK}@{39fUgX>Z6Pg_p#$zVH}PBf#eJQdd~jRC3*qiO2{Np)v2d}6xF03)0k&A@kk?Y71I@x35VnAt3nOX+xXMjP8pY8EiIW)T( zwm!q`_D=)Hu8Uy!z0@<3u@AxyI{P9#s3~~N;bUrQ%V2RZV@gn0AW-m&56JW~O;TtQ z{vx>-jk;Vm=<0@dfvUvN!bV&`jPFRr$vSZV(-SbM;zL`>kp&<2)Pd1M%?c<3N5)7R z0bvaRpvx5=p0$$s+(^-)ZrY05@EL$L%nlw6%6ZUo9S5g;TidY$e`MISeEYnHV$*?Z zDiVzpZ~FJ&CEMRrKH4gNH{L~9zaNdbtL>i)T2NAXYB0Z1`~6mAO~KPlI>{XXr)ELK zjI{o)#}OTDzQf{F^NZX07>F}>v_fni-Xtg$hew)trPM(4L!5k>+MTt08q@S76{^Sk zqBc}E+iW6rg*S%MdC0M=rl9ch8ceFa6}o%5jMAvn9*Nc*{1Zil%>$RmLp!T?40_!0 zfXmFxm~5XbC>v2i(v!1x`VRgsR;sX&o!NyiuC3rz`irp)>27y_`7laO*OXtC~@ z09%DJ+*}DZ$n=gcb-O$(K(a6Y$W$2zB{Kx+U(r7=s*tuG5Bg#D3p*DJEnMbAe10@G zc7nhF$*Ow(Z$@jY`gM4fmL|8Pk%yHEmlDT|wM=K40k(j@YaghQAD?idO0Xbjy7d)( z(Ho6dHh*OD9}YcLK5D9Pmn}NO!Ygn|Hg~pp+Xw)oNU#)>fXlL~$Id9@M7886D=tv` zAtN^igu1b{C~tw!&F#mg{0cQ@q_CZg@J@>zlp+|h|GUWJU*b(i^iaSq8xmNyEP*@x z8zDKLB=pqi9U$O~uLTNG!-ZyTyxZ&79Y5eQL>2AcZHB)GzA-{k0@uZ^`ObOD2-ST=!X( z=>MW{!rg?TiS!FEx9IV2ttr)@U=lj8wV(lUE$D1U53Eg7$me**KzGavRF!N3c``MenRy;FNcuGvj`kd*YaC8zitM9zc zWEspw}oCLWq)-yAtG725)B(Nr@<^zoMj!{5|h=;^GN{l&3T52laqZr;bK(5 zlCO!6Q8NDV&bPW#P_}Ba3hxMkuD^?HyV=fbQvqK+qg*-v;vOrixD&8NkXm(A_zIAu zRUK@k7B{$b`Fekxv>jmUB!Aen_22*A7?VxN3aEoAW_4)<2DC^6a8v&EVY0w1q3Iqo z8}d@$<$!LNV?y`Ly#)wdN-O~h0<<;xg2M@uSda}124Af(rKE=-6(L19-KtlT#v@j6&jY$cBsCH4uM8TWyre|- zQ>RW&C7lqqPPnqL+ZC@_xx(9CA0I6b~AExmPF;#AL!bE56zQu*NihdUy2k9@S~S zu9=55R?>sF59XOGRZ0}qs1zO<)#jRYMsMcJtBU#8ntR>rKI<6^Imj`lY1s9!H2g-y;M0Fc5FKX#GSc~&`$Tnr=u>Q+GvE;R^ zB6KHb;FFRnvQs;;1_gxKJzfd9=0K?uicn%k=B^h#+&buZ0l*Y+pZ7I)j`2u0#patJ znsSmMr0P5VTjSLEWLju;@TdA>d*20sPXi4qyuYZkD8Iu*g}iy5rK}!P<}^`gB3*L< zlUh~4+<1^SC<+Rd<{8OVMotHfZ_oFQ!N~!^jYzn@vwwm{%2jtG&#mCO;OZxZGxSNY zCQfst#hkJO7HvEu4}h;@g@@*Ufm?xkrt5Gbs&g}Rkm$Ran{U6!`t^rCZ1!pYJlQ9O zpb~dDaYeei)fU!&X69qa)X9=K76t%BhFWjOb5i$~RI70>W{xeKoW5s{rSNeo=SZPo zLGH}&I;%KHW-;8rwpSWXBzj0*ce1IJ>XBV3B4$V;nqtEqoSi8o)Hf8ydrOU>HFf;} zp`o*MIQ!^+5BKRS7*=0AY(O!yCT2b!6=?+M8Mwh7&Lbn z%I}kO(&_`@BZM?Ht{)>g<&0Pg9TyV(8#A`WKxZjwrZk=ef0l_lqZEJ&rTuvs^lh(+ zFF-`doC#XrkLC&z&CaS4a;R6r#X+dk_uCcw(ob)h_!fyRv?p~f5$vdk;QlmHiGFdg zW_T4KT+?&*XIJjJ+U_HL5IwCW7vz7(u__}4=9>#o&jk0={Da;fpcxBTbA#$R?;0Hl zd!6pynLQV}d~EgeYIHWHkkz_{n%=SmQuMh=`HLwPu5*=4$7(cWsJ|wSj3Uha2DK@% zIa!yFZ~7(k$vNopX6IsdL&MMOhl(m-uk{}Eg((d*aKW1|q!!umvW21ULTtGk^*N*L zFIHnUB>M7mebBfhzjV&|nagJex2Z0nyP4cSkbC-LyW+Iy6+~M582ev$8^&dPP=-=0 zru@W|6&xgFq^SwAvGa~Gqa9LQDjZ><72s>xGOfzCbiG5YcD_lxB-~@z^3WJyf;^aS|ghSaw)=h4z;Hj+%DCCNbCl+a=ql|XaLbl-> z&bTuML3)w9q(UT=jMML17NE!UW0b6Lv|vT#d};!vEBO)@m=<;)j7`Qxpbgi%@1=1mk{(jwPcI~qSELO$ z8lF0)Hy|mm3-Jhng8)#_(B zpkb*^l0EU=wA5soZmRsc*wtpIJkfr?2%!{#%qF@5@hl^?W->{={l9SYgI&mG-l#Z! znfqj-Dj`2CXR3(QJQmU^W(^h+(X=I%`1mIm^J4B(V{G<5!eCLgn&=UyFo8WvQWn_F z4qUTVTcvHp4ORGjqnfBgWn@eI&S)G_$a4E%xr}naqSdeZDtT$Ly0qzFn~_G|5m{^* z?}w~M$ zDGs?cd_sS=?sU0@%P{Hn5p9mjFf`Ufq41qho*ORcbY;uwOHrZ4~WNJ2hod@%8ldV#$rBf^m*$KO(S0Q2TmdADdT5H4?MV^ zhOZVCcTpot*pmoPJA{FOwvBrJ@EBzzoOE+%D}WG%j;{{+33=u;Z;qUaksM7{gKDcg zCDj0BWBe8FPSnjWQH3*~kX!M}qve^L>p4%+q0am6PDhyv#2rRoH3(r$);~>;yY_Vo zZ$tcj^}h9-p8%=a84fia?q3pV+b;lI7?9;e&U5$j#^5|d3kxI-n>h?O*}szugbZLK zwQ3n^O7B>YR#eh$$}c9I?lRNJwowf3tt4x~_hhyDK9^1du{7%Ri;aMOzieAIf)@V^ z&y{`>xRM5o7Iy#eh-pZT=@zWZYeJkYZ*NrR?Zxx+Fo1MWt7;PZ?*|bX<*>dPKSTBn zI1dZ}6(@U=+BbCcdYQsC3t)r=QmSUY&a)s~3FCyDt8%VdbL9ZLl%>cZlSHyMWtR^7sn5C5*ZDN`rjpTS|Fw6w+Yl*NTGvd0LVoRROJ#i8Al zMs@EyaIo^9)s>lD9>4wHH!^N2ugxI`A{*M6m&c!nXeJD8&dU>NvJsMxC$06x@=@>1 z_p?j!YA?2ofv@F!O6DRI;#rF z$w&}}01PXO2{^{Cn_6uIOPJiL=}KDNIx&-T#L{T*dO^G2{`^jUMjgno_4yOwa*nd$ zX+)GJOJ5ml8B6|kR*vv;4$N;PPebz3Ge3rcEdJ`MqP(JV>XY^&vuuvi_ff{4GI_#( zZB}fU_VxGf%+s)qq;&wR={bfuu%D~-%ap}AF z?E$imP1xqL&47VSBuR_!^duwFK~jntt6~&#YFGT4tUqNJ?8I4onG#rLI+EFdr3I>5c^;$w}F3@>WU2oaJ0Ng<#Lw6H$(C;t#vG{7rsqGmfJhz;4}WlGdo-<>IO^BBaQ z=sa1@Dpk~(Q~TvyakmK41TT0^egwRCeCpJrr|q*s2#&lT!KML%+Nx%O6L{A zsDv|-5eF(?m(lf9q2yy9=@=Ct3dhg9_bm89=yvjB?rW{?q@0cHH!Vrhwv(O7`ogi{ zmtl_4%u=q`f=mIPiF%G0c?kkl+L3&?IKdwcB@qmKzW1fMB|&w)2~jI>HDI&q4mkE0 zxh9&J)fTS~0Zk^wG(pMFC~pxDR&qL{XL9fTF(87&4tvMlv^ct`7`z54bOU%RzEV{NBf30mFWMoH~@Z*8dS2W}8`2m~N9;Pf% z@KALk3AkU+Hs-TQw~6$(JdopspUW=gf-Xh{cost)ZNk;jB9G|jha_V1E>z%Slt=V0 z_>^cbgd0+EFb>c=Vo!y0)DLP@I8ljA*q<4QR7dYO4Q&oD{n-NtIH7IUjD zfkBhL^(QOS1f|gKMK9@`zyOP(OA#do5|=~T)QR^e;@6wGyuQD>Lfa~gbc}!f+NTA} z#iC?*;VWebgPNTeosVF26T55z@F#?0R`3%Qz)Lu)UrZ3H$dI<+Bso>^N(jGfiwS=l zrWg35myi@KJZ~QAxVIyU{~pCxeCX0YTiJQQH%-g7sUSCQ`7yG=k>~Mo0e;m?W`Vst z4+uA6yoXz$o@}&|GU|N@Yo(FV<&0tO*9dEngcSq5cVI|S$D9z*eI-bN6i>=Ur5%0S ze0TD80-9;`t4uMW2U&4NC&J4fXtcMHd5aXTO_Qn%F*3Uct`h_Cl4Fk?+zW8$Rs9p# zAoF7isBn#_O4L?c!y7#y6gO_;M}3^T;|7I*kI^4wd*Q!4=m|&-=Vq9tO^dv5^Y4_OR`{W8dsyvB@f zX+e13j?F{3!z~p`Xd!l`SXHH9?A87z_~I#ZlP9b ztqGhs{8zRGY|PqMqWPu7^%ODLjLELNgFPl8ky050>O)gckmgCjc&t^s&c?ubr!?C} z2OHmfK`Gm&;m&lrFDOiV%rKP2_*L)HmeUOvmz*I@j3&|*VXa$~ih!nc+UedoM=rA0`h6mzLT9jr+5x z%l+nNi|q@tyc4=w5}YjpV?AkqbujbBZS?u1^!icG^+M-;sLs`&Ew2=*D~K0Wqxli_ z+Hnp(J1z<)7C0OKaf{a!h;VOeul8}1W!BsVTZitOh3N8mqC8|Xdu;gHjT*ThtB|=yb^f2<}=AvhmiwuQ@mxCdo zn=0n(cRmd9+t_Q`c))buoMNw*$kZO<_R5T3S?ZrNNN~CY3|d-ie{I5<#()5=%&B@Qu@$ zNN9=#a*rM!OWUv|2D$8uMha7US%+Egw{}ciJqCZ*JNU^cV=_4p-v&+2ls9^%3~{Ui z6Oi$7uj|MK=hfq<7+iuSf0={b5q_ga?-WwY6C)^6Qixyps6Yy0`qKz$0_pG6WqnE16-3}l#iD|a^*lJqO5XK%fE76Zw%>8HJqgR26S%SduW*~Sp- z2x!{Gw(G39>*~YJF?NgM)T%}JRX{dQ^om$)yixSahBzF$^UfS8!ro7RR;dIb2eDfN zF*v}Lf-qT9{+~gD=Y0GH-vvs1lbxG!*9vKmsLmpaEy*+TU=*kD2Ym0ZLnuT6z(rvm zIdBA^8(oqCSvbl8?@v#;i1R*e^=r=92h_x7y>+WcoU)w_4bhsJgCAT<=x!vMIu1-L}W#X#mH z_4@cMKQIf}ekK5;!NKdHCiWeRGzml^12-4|WB{)jwa>t%W6Nq)h)(=`7l>o5z@f*KJj9y&B;*9^ z+9$Nfl&1o~tW`p{P})^UxBI)~GHUA~?f#CzvfsLyR4l-SmFazX7F)#^bRo#4{fNV8 zCAOOikU1vuxWgz-hon-9g=@PPN2YU63mRN{grF%XjFfy28KOWJGVH|o!I$UYXAo0m zhZsNq`<;g~-bQ%W-F0Lw3`Vv)d7$7f);pGdhLx9c&)3O&{p#`Z3%#Gw9p}I4^|kqs zL-U5R_(0b_TXNbJq}W9fN=J=Cs)$uBOR2qd3^guX%8z)3W+GXIJ}h5cN@GE_g9W8K>$%-VtOH~bQ7@dqp~@UP&x=_(_|+EU zPuzi2Xp}>0R#D0lPWlppnwQ=Te7O*T>ukrp;?PwGit7(>E6afka-M8n-d@Ah{aBpo ziGdWSjSnc*$<>t<1p`jUE(InTY< z&a9`sS1TLhj2`aRG0cVGeTpQxV=sZ-#CG9VP9Rqr$BT!4)a+eaMYs0%0JO+EqHpe8 zI>Qt$ICdw%=(qu)g6mZ>Sz!*7(cd7=ZXd8{{hSf?- z(BY{d@HpRN2nk|987e;HPMv1h*#5XpteNny9f&>->Dm}fw9rAoU;WZBF$6y0jHf6)*ViIZkEX*8ZH!$6y)PE$kk3 z1yb!-1llZ`F9&zw1pkp|tc*OdW{58lKTnh9uxKS5-~P6al;^=HqF#4g=*5Ha2Zm28 z0xAyuBs5_uMc~O%@NbOGtGFCD9gEd-#~+3{6%K0`PA5KtVFW+!G6PQ;=tZ36Vm}VN z6!rWIBYj(tUhrEott&-*)#rP7OW@F9^mYDA$4os|0#=}Rt8TxrDqP*R07}>L+-lbO zI8kPRU~xZxnxLJ&OsROBMs(8?c$0nSq7xtj1dvdQQ6%`NHwK?OP971$BPW&hHjV5f zg!=Zg|Do)nOwqGt98|xXuTH+4@ZU#dTT)|YrTi$*RfQ1tLc zNJ2{LYyxl<_NF^!Fz(w(sSlY}0`51(tk9MF}D?fF;0sb7caD+3;tN_A;{mLw z)+xTn!S{_7L7$kK7?>G7tmIK$e$_-8sEV2N^BduA?g^luOb3VG*JAXc7;`C}UiNm8 z8j8?e-NaMEM5VDbq<7{EbwdyNmnLg!Wl8b^`cV(IEj?J?aYS$zhcW>>!y30n)VwPq zOKcgPP^(3Ogkm(!Fhm30uMNr+Hi`qzfDEMAKS){yj>uNJj*UP#N};-bypB3~>pzWb z&{Nb=UT;PIDKKEhH`=x0&5DTHa67dBB(=)*6D9NW(A)@*CJs`|P}Ryw*}bI-uFhKP z#!oAF^Y%2=cfOaNAFojmRMq((X!(>}qKxEihc-(35pZ%TlM{i)q-$~GC4E{k% z@k9*xfb1TuiBu&c%l(90zbLZKBn8<70pIK(MF%v~03X=32Qmmr=2z>Pjp&}Vk}0&} zx7^xvV_@q$4-R0jJebx|Wrt|AJiwkIH6T&zB#Hk?d@`2amG9qdNu{## zq>P=YMXkbZBTvDV$m_hhrEpfRUc20FbDWeio-U#1dQa$G>udVV?H(c=j?j1g_VjS6 zkp0V)rI?#ciF~E<=HVjJMwSE!BxxB9y7^g{4fHz%W|t%xIhAZeOzn9w8mt7wVq!Op zvownytlCFt!t#?8`~8X}(pKRIF@^KNTB!M+Pl)^dBL2l!=08T>=jqw$+eZ!2mgVTK zU@A#-#%xFbS^gwuUwi`tob><>eQ)VKG77fz_IVa+B*+ZuIdTX6J+y-@?M&ui@5wms z8+Rm;!;e32EpA91OPR1B(>Z23_~g`UCH;X_8uUzg6YhwlO!=TkV2fA;v!ETIK3}Za zzy<;?Q2@b~=_7dC4Uwqt>P8sZl-YDC_oAQ=$j&J=`+7@bYWJ6AI;h@D92sc=c6Q!; zu*=*;Zg&Vk-ZS;Ew=pZ^B!&e_ryV{r?~Qx4al+VlMPuw2ygo-FCly@u$c&6~6(|ic zw%PFi!bhn4`kaWH7GS?%$yeIx2}7#%GI<#{CK=MhuShfe(tCks&MbupeBUAk+Gx=e zIuQ&_U+8aXU>_5IKv?t5x?!>3k!f}4&v>j_*>3&Xu20ng^xq+C9ZvHSM&jQBk%?rK z(hzCqwQZOTd2a&nm>S(i@7P@M33qnd@R9o*|1@;a+MwrVE?;j6vldjZx+wiKMy?KG0#I198fzLWxZLk@VQHUWNpx=NonSs;f> z$LH9I%cN8&Z$vn;c{C=tyqfVWC*(FE^XZ((ST*2mntB-s^61=@wnTv!xMQ0>LyfR~ z9Re;&t{nP=sn8QGjlsNrtlr;HTir$xfu{eXSg_sw97rb#JuwnTzjF1^jj>?r#vvUE zZ-Zf}GQ0thh-kI6wE5rWT3<%${zbTI8uCW&_F#2zJK?(M&DF?7-JEZ`p+z)(8%^Py z|MR3iYigjllv5}+S7d3&<(QB`_ZbVJ0);c3lNXH%zIgYLNdUCQ4oVJh2ldC&cYAQK z#IMOnodT>%p7j?eRDvPjwy*2F+NvV`KZs!m|JzZhzmaX4nF+Q@AM+J*#1HFc)eEG2 zSY7r1&apxoEL^$!GmYmat?a}d$xgj>uJI~ccFZ6D=4+q(Gk(1EW7HSt{1wDy{JR>DYv1P!pJw{=#O4K* zFD}f`f_#lzmn;?Tiw&He%DEN&L^nzyGDO5Vz5)yb5^?7%aAffPt%TVJl$;03*}uwJ zN)l0+Ry1`S5%bWL>Vit_wQkSAAbl&`{Bh44xsrIcn~o7KgS?@7JNnFwbk|p}Y94b^ zx8CxGo>;ru!gt2FX9!97{8!IItj5`GH4$3Uu9&D85?A%SZQ~4$31d57&MZ%Of-V~T z?)n87W!QVq=tx=70G@{R{EvvJAaickJlrp_hR7053S3e9AWU!KLNjq+!bMOEvI^8D zTzFCJl&wk9O%E8|$IwxAA)A_cyj}`JT3aG;_zUu>PjOFe{Gc3D3vgR$uj2#v*qE#o z27`s^G&tEdk{`XE0bm_@HIbl5@Jd6bdrw&kQ}~$}F0Is$AUrzfTAFs>Lsu1f^6KJ8 z8*wSyKe3kqbOnJNOe()GV_c`NE%RV@u*O+k(MNE_awnBe454S5Ve>SLxW*1> zYi{ICO=SNt8;-jXt4wQgNm`tDlFi7*gP5hXJu4q?1B@3cT9pk`5bh}JcA^*rth1l4 z{H5SOJ@@2S@-7tJpa04OGt`g)^#M+gI|c%~kx>29>1X|@U*yR&ym>1*3+@IEF204i znN++nnUle7b$3!gJeqeP6iEi2Qjqa^B`T@Gh+GV#V*2`7gf0*Um{z z!BkPKE7!bl?=!bcd=r!5+w~k5ze#XO%d7-2!VFkP4w-so-uJs6zAiaOT=$`ythsDg zu4j;9hZw=x^Kr&UhSp;!wB``LkS8<@&5C_Z>$h3B9Zp3%V+A%acqMo)*_K{JVQ6F1 zeYVqL=-+NGC~cYbf#i3_6eEfbD<{U3JPFrCpOP9e`6of-8nX2p$#^dKRkvv3sw_9M zCmIoR5_)ZSKw@BWe)t`zKZUS6aqqs`-Px#k9DsT?)=JrM%PzJ0dN~%RZ^-2h95y=>(Tu7iA_dket@NAC|b{qOO-~ zq7&JSgDkprOpVwHjJhjn(G77$!1fA{7|!UGVej3b&pOcMSKW7o&8qv5fh^h<2qWTz zfyNeL{+up|9OfS1B;>%(C3eIDD1c3#j!=W{MIm2!svMC3-BREyuTELJL$G*RgRJ0) z+C;(TG;9RODv-9l#%>^n>+6+s&HN$u$3z`kWsE2Bc$o;C(4%ae!q`ly0Uln1%T4Ot zc{ngxX)GYKnQQLhr6m$CW1nAsuP^?9I1jdK;RqQl+;b^(DO}$U zp>TDoH|m}@wJk%F1A=MNabW2|6zepMK8J{vD4;bB$;Lr7R(u!3Jn$jN9?l&#+t7T( zlt2QCtDj6s%~SSkzNrg-@HgM~trDFltg~bJz0WdU2M*vn6F))~88{8PM1DdYHYM;y zz6S-P)+iqOS3&Plti#Jp#hP$%lqTyL+>QyxsNwp;?On~QZro&Tm>oJ-f%SB<7O5>e z$6+i(pgDMNH^A*>X$=+saI&y~en7o*)u=<*5g$2_3tZUUu0D@R?{y8*ME`Ix&O@| z@SRyI5vr)#u@Tl7tblH>DWNU-wWKK4CyR?(?*I~+R zJ(E7Xcd55!FNPplUmq%%KeBpsPVxGFczF4n2K6n@nE zUr$LV5j%MX>`qcXlN6MA>PXBlZbS2G0>2X1p#MSh53{J7h)GRGZ=daGfU`e)xo_|C z3;fzaW7(6JS2nJy;aevW6Y>KNh>7Z~>o)iDgr zup!c0YRF+%OPw=F*CRzi(_5al8D!)p-Ew<}N=uCMl@Myq!WWZ}QQVyzm63t+3FDdZ@ARY;x(Z;x5lB@CO4mS6yqR3&SEx@ggO4>3FwQ}$UPSd zGJc+j8L7K=SUJ$t7Vwmw7~u0sr=lZcKi`(vb#M{=& zV?3)!-}~#+`y;CN-_e=WRrS36w7b7(Q8Aj2*j^3Yv73~q3v}}E=dnJoVMgLFRZWpeOT5yX%-`+w zyIzZPowCtzu0NxON@rB35wF*!^Rc#Nw;5)@A5sqG7=O`;+;zWtZUu^+=%mPE9Z@2u zgQ8rU#%$c9VpfL?;Y?(LpNG%&z?cs(v{X3v%|DS7&r2Wy!Zf7`_+-kQdj#75#Fib3 z;CuJTZbnFdzw`d^MOJMuJO>b zcY(x2!Gc-+lcqDLJmr;TTcew=NqMLn0p`U!%rsV7==1RFdwdX~0IrqwY1qwqGk;&k zXUVg@*66coXQL+n#=oR@=hGk!R1>+VSQam>;;HzJH?E8sR|5h)N`M{U7N=;hBFI*6 zkh;$O>F>q;kDZyO`yzlATa4Zi^c@>QT_Ld-a~q)Hh~ef&nhj}Gf1L-J2_L1Y$3@f5 z;$+`Rnp3!m{W{?{wwK5u$!oo#P{Cfgxp_LAcT-Hn$TJcmSkvg0Jydk}>MVvcM1d=t zg~y5qh4B5llx7*KZI&|gaxpW^5Hr=x+{qCTN!mIetA?KtQjWbs4^f$|Jge))o-&mHe_phV_j3p8&1jk=8N9RXr*=l;e%7#S67GEd*F@G-1Mpi%u?jnjK-~R#EiJ6+fK<#7eqzo|E|=6L@S8F6 ze^=k7tt*w!hd(W*d5-&OoNj>%&JvjkG>DgIlmkHBE*Ou|)fxHu+c}<6>)?JW=Y&J+ zg|6;tUvY2RNI8?@r|i#uFj{7;4w$*VhI1T!EoP$pzPD^bg7;_n}rD{5O0dD>sQ_qexgd(~4a|M}=W`2Ke)XMYQ_`fM!$Qe;#|IL5CRub0Z0-_U?Wu1faA z7i4wkKW22rTWr0Nwfo^kZ@U$lITaMh~wpmv)hT(Lp}fu-`42>%SM} zYL->o;|HUc#$qD9G`>31Wu=aZ4JR`06G-s=Et*%VSnB4GkmzB&`CjKfI@9|&6el{U zxh058K`$&Xc6}jHCdvLLAfa)iDHtxcN6&X5nUHZXgCEwDXKJGFJA9Lithf&okT-m8sd{Gq) z8Jx;-QTp~YXlfLmBD&r-#H`#pMunt)wQ;h(dgyELoih! z&Vk_X>|6nDLu}ca9XMoB(~$+Z_~3=DedIB^vFCl0z)ia}@x{i-B9uf*$o;aR6u9NF zd?r9ETD}#MYOVRdzkc+nk0Ik zeqfYN~XqbTdG&ujF>R6D3u9Ahj`%Y2APkP?@!UyHPpgMlv{r8X=8A#ub`!qv$G-GaN8ULB@QLUR7Nt_ zFgH+EBn_nB%YaT>R*#4vJnt4?z)ai7pCiLwjnvY?K!dG=QiR4qBZyChwrCl4Iwb%1 z823Ew8|UVkQu}Oo%Dt8A=9zf z9jg8a@H&AJz0N@T-gbedFL_R;FNqBIvU=Y~A=rQDb2^hOIh6@`U;E|z0YE5IIx>{W zZUjNMh;~)2LYNLO3$j>(xsp9k+mm`XS~$zViI`YhBjY+xOY7L8*{NLrNxl+vN44?W z_j!0(ItoH25JW3@uz01ag+}Fx`1uZ#D`yRtmDY4NB}^979gORqFLR`W&>35|IR3h+ z+)Ssz?jAuB4VcWlzE4$*2_4Y?HzPOe`y}`1yp~KlnQw8f=@+N02oGyFaLDLH%K$D8*xY3$4k@paRw`Hj0$FXg)v5D9B9quKnDy7wN((mIATsN z?v7V0)$iCU59V@8B?7saGt-sng)AuKR@FrQC8!*CUP(0mov#UItjx*kWs5c*N8ldq z*AIMKCZS>zx!h*FqpS)XUZ#5aY-YI=Ij^AV;0vMVqw5!D_Ac3Oi!J%5&t8Nh07X3h zr`UZ&W+8125y5yAgaTvxV_qh5ALG_mihSWHv{2l>tR+)lzYR(*V^*0CGE$^vXLJ+! zEw29U>$=a%$FXu9b_+vc=l)RDC>mkpd=7rbAB3-v^q2h?h$sLZ_Fv(vRCD{GI-p@n4ZYu8 z-F6Rad2kOf-ld9)3QXE(Lt z`nIOysA|L714}NVu7-e9MPq%=xhX0{|P`(VJ~_tmP`o%a^k#65)#@m4kAuvwsU z>KJXF^H&cWtEe_-qT{h_gy>7h+cjBZK{^s++?@)O-}?op<<3p@h`oiQpEdX|Y|rme z>vrS0>^53G^vCer^*&~XZ#*z5NQw{a_nE(-A31}Oyc4oBBoHlxW~#Al`K2QoalqvpW9|@Ym)}jP1|cy(Y@wx+b~a8)0`6Sals2gw5J|B_ zZ3M(1o`{j^A0Gggn?|!7s6>{1r6;V>d9Gd|UckmBk5JC82VFE|wAdE-@L`PFPmVnY z7^cJdhMvzvQH2j8JR+XLx^Z4{lx`8bsrU&i))?h^O>o@zXNT+%2i=~uJhYs|aXy$@ z#&&*g@3c>FSn%1PdGaKP#_|w>(nHn5E0waj)_n9W^ABBQZw7U;ig{o)@ ze#Tt5vkY;mvW{?V?pTZWngpMsa_Kjv`24*7o8v;-gEdMs!_S2^72D5HRkrdwUOv0g z_^&TdA)@bwkNrzRVP05R+0y5pMfvBeVxaE=&BtSe%|Z)iS#N9T``={Oe{N8&{>Qqe z_`ge~N}M@+Z}Nu#VC4F_{7QJV6< zdJnk(&#L?Z1*3B!TkyCA`1Rgiw$%>WOVidClV&mHkn$xbW24FiZ$w zaRVYV$e;cH3eEw|uigRX+gr0gV(_QY)C&-y)q#jbiG|;;U)eDw zt9y|V<*VX6PuIo5D{5O8Z8Ax|X@qp#z6+yP6hn?DuZ{uR@}^gPeOr7#!3jAFQgK&j z_gaDYJe4MImE<4vM_gw#PTyyNgRQ!4=YJP+-{r2qS5+dE)A6=SMXR2dpj$AD!3kLm zI!Wl9PY6ksBGX?qR(_Twc})xk^@jGW~;OJFkgk=XyE=_{b3 z{GRvO1(sYom+tQF4h1PukX%ZZkPwhsasla7Lg|o@Mp9yF5G0ibX;f6L?efRp(+bq&zj4}Wger1Y4FBy zN<)J~f&XO@B@EKQY=9uhHw*{Kop6IhKxr_;5>P*O~8kp@Y+ffDoci* z*wH2VG5tqt8kocvvMMn0i-Al<{LvcgpPgI}@NY5MAJbm!WQCFuWy+;{I=>L1{*-jl zrga;CK-!q|wcD-$N9gcP^06O=ilx9`b(~jnGa0^U9$3KHc7+JB=WEYa@vwL0v%&gm z{_V4M$Tg;}hul|K1FXVK{GdE;n{~@>IjCSJ4plfdRN*En;XR*;hl57s4pX=rog9CP zu(!!k=n)TV?eB}FpgxK>_3gS*59Gx1 zqc6asUOEEf19Nx=Xqhfm`%vU+qhpSoqo9gB>q|F*J)C>MKsfCxmz$sUoHL4u8<>GW zU^IFxaI>7c8DJ}-2N$i?QH+B6p{Ch7KNiB%ki*XL5~ZPR{}ujt>Vki*fB1rJzbdtQ zv0D6clQ>@rhO>YXD}spz3X7kQ@vQpQ2BI!L{R|mn1B79A562D!Hxq%d0=^wy>-7w; zs@DoJd&oJ?NvpDYpGDcF=sq`?L_>rH$xx7^g`FQKO%SOM$7Z{2?9cn ze`Vxw6tU3vF;;H`yOKb}ix0#6RFn4qTxrk;*;CA(G7OD;4P@X_f2r(Yu9IcR+^m!L z7A@(vRulX{Jx<5U#+CFm_VKfeXf40?>?w72-O=nr7I``EA3S0Wc<2)PI)nEMg$ z3iyoHFBTlao<(#yrImh4=Bjb$a}YDdKL=v1EId-ouy43_#S%Q7Q6cX%F9}6Uyc6s zk)q4I0GcPvXRqobRDGfP0w0hyD**y#$^p4JM*PAbRA&TquCauK)J)=he!CqFNSGXN zh&g&nFRo=>ERW^oo#|WsY$jI6{i#rxkr4?cql7o`QgprmBjpa!s*jgB-5DODqZ|xU z=9XM3c&u$cxJBAYgwnTMEMNZ(f!vaCdENk~J4#GayhVz^bss%`Py2YqwE2mj#P0_| z>3m+UKH~Th>o0@JPF+)t({wX!WLR;ypT@{0F?zKV)-VQ=a0=me7S2TKAe&p_$HfW7mp*m@SXK-E>W{>BhbzIb{24QzDaQjdp~mQ#Fn}58y1FPcni{#}Ns&*3 z+b@ytNPmALn?_ET7iuoul(Q{6U=XbjVuu}EG`pGb=3KsYulVAAfmcVE`i<9rtc2RH zN}z-5;l70Ib*hjCp4Uv+Z&}0XAdGr0qVGEf4{orFj)O<1Qb9r?s#7Fm)a1Q_5!9<1;4vl_KmmFB{ zz=DL!RaTamj1xT7@tOutYxB^|+hn41a6v?GNG#;^ynx<@fb(Q~G@MyP*^SuEg%--l zlgK2Wwg^r_%Qv62@JbbDz%#!yI$Wih;Yh4ra^hi1rmYzZCwvr|3ALYKFaXkGh<3kp z>of%(fNn6Hfn2X`*YT7^2DbY8VnPYqN2<8CLr(w_$-otV+g48T_Fg&nc1&Cg^e~9m z%20~K_PR$SFj&R#LXF5M>{6g?b337?`=`h#P4xSiWwQyU*!CExD-c!>O z^jIr@bp2i9*)z{=&Anc8kCH+Q0rxnQxs!lHn=N%w308OjORi+Y+TvdYzZpGgzOl9W zZzoD9fS_Mx^)h9@c|i$DX#478IuQoxljN4%iEH%K0)Ue^8M4>*I`YhUA7agXUs*pk z!r#E-7)L8!HrcSHAED>idRpn_?hLL*Sk!oH1=O}we-6^Jd^$+$F2l9w;qWFp>Fehn zG1Jq1W&3Q9601<0xvnC)AcF`T>=Bx!amP-tEYexTj_l_PaD0|7A9}h@;~9&mZ$- z{qcp&+upsJgFSXN?FzFF*_Y7N0@eg^blSCyXJwz&l; zh*1E)aRGJNBe_`;$t~m%7cFlfzmB~D`orT>A&7Nf9>A+Z;3cquAFMUG9Y-L zfEcfeeqx@JEot+TUtuHxm`}Ne#_@e+qpDibQ@A_&TO0v87)OtW@ryBkSqW78U=AZW z3gi=KUm~0$hpd#1rzsMf9GK{@5j<{zFQG^B)dJdqevD_qVf*+EmlK(~ zSPs|R&3~ejSa((IHKOZ2;oPz=_-@ZmuCZbh-6x(G&%I})p6a)j7kFNC)Mm(@q`%E? zFSQ!Ou~<8qsjNj_L+`kkS!Kzg+GffeJia1nx1I3K+bF_cR6QziaOc=PnC> z?n47j_~P@KF17wu+9gmhsc*utqj&FwhQeKg&YJP<*PS}Rt|PwP;I*9?Z8auci^HHQ zia4s>_c~c)%vdK>suz&=&khZh6-^(`vd#o_LJ0=hP=Zar_>8ko{u-*TX$*)vC*@w z|2T>+Ewt(pq!dqXY48qw>yKrzn6dSz8hb_?1Iidi;cn?yV(gf;9d>kQ%j+ckQqwI5D$O(}V#pSUGgGcQUaIv5!6@E&H9)5wY5hph;?_#{YV+xrs!9!k zsA>wnB)omdR=E-5;H_(T?t9O_IVjiz5yHn3btOstf7K3Hvp51UYzT*JY@SCX20b&84=L96U*hXx9s=dx{PmDuF!jD;A!c8Z0lL4Q1)XO(RBg0mRW$l(RiblXVu{};Fy;}K>hMoI7Bgl zUQu<{hWo&3$sn%V?u;r^eDmzNxa)#3{SS5phyi7(-N7O8u<&ydOxyEtU6kjFO`+#g zzG{Y&U5(q57^}8mb%$`rm#7=^QvR!(aUkzobwu#K-nh3B0tYMhNuQN*CXrf*Wv>6p1%Iy!g**~TuC-VjayQPPg_Zn>&Y)SWTZKTBy5}U z--LvZ&iS~TwK@=7Z_lxD&xmPolv$^U&alHvTTh|K7Dt50bER7>OI!XfBi^2AG^HglsXbZ z=X|i#+R9HWSbCfE>^@^ie2yNjd&Ts#l^J4c0Wj8f18%A#eqJJDqO^NsKwOZ8P}MS` z5EG*4s4Zv)w>sjZ>>7t=!ymHy)Di508bxI1v9ZKY3hL?Gj(g>}H!Er28EhG(DBflz z<{QNfl4Gxr<4*h~wyE96q1M(02{^eg3S6YWxYd-V=*sOfZT@^_L_0M{UUzx;$u(}C z2+oveMtV|aKI=C0n!D&|V_-U|I=B}^eRjt8`!0r@=Y3_N;JEMPE5o})GREXj`%oTm zwZ!cSHBPy@#jI@0@8R68M^T3GYv8!D@VS)RHP$XGOE#O*%Ba2c#gSFZ7>#I*$9Ub@ z#rOfAa0BjcGqfCSnN^8Kd+r0nO0>F3#z?A-b!|94+X^OKiRU2?Z*~j+pgID_Slc-V zHuN}qUtNv;zoSDJ)?6-ZD#NYQu6XfFa>!xXSa;PdvmFG_7`%WyLYlZk-0PG zJ^1zZn^Ewhj!ixn)tX%h0WmIvk^#M*qZITJx`OcvlY~g{`ONI}+cd7HmQNV|3X9`{ z6um#1|K`v)vgxOWj%aHj=y9YclPxD}GpH}p8=QBQ4@!jgaoUKwbuN~) z<9wG9R8);8rK&J^IWu?;n-k<2eLh$TaEI}VjI%@eKb&Y%su1eRylyERWjJubs6D4zeQG1bcp zKCW{!nP-^izkL7kNw*Ec5s@EWWWhO5XZ1dM*9rHb#~aIsgS}T`H7Zm!K?QZf9>ZLT zGaD3Y-(nk|I~Jx3Qs`iFyZ<;v)5s-%(s?Fw64XXeMo$jDKFfu#Ka$vJpl!9vSi4d^ z_0JDt!y3`$ZKp|5E3}b;;TT8Vf|JR?Da$Sbl+Rs36q(wQbmR@p5XQouL?sPw$UXjZ z!?pgWGR%+xnSWODkp0|@G&*aAqmt;X7wT534lx2QzQw`%^{Qaq)jgq>)p-*%Jj{7t zzh-}D?y9yhPE{h#0K<8sS_Ox(A4K-9yt!hrzkVsY-Zz`r49U|e3ED0D(w0cJ9mpMx zsrX*wQsTMnr*dwWA&+R5UK=#0MBHVD|J$KQo!^mdz(tPl>7rUN{kxt7d-lP_mL*m-kPqoM0l3Aa??EcIQT+&QwHKSq z*v9zQaH;cG*n>bCOpi+>ad5})LG33MXRSOw4xY^4P|X+JyatkkF}oR7yER`+{RXUH z@UdzuHL*Yf5Ff8P)JJ>s*-+-k-}8GCXqCeV`0u4oXnFT8bs`FFfDY&k#A?;qBlhS) z3FIvUtbuB{67;WUCmlH({qkhNovH)+uqfv1sP^012?k6TE@n>6CBQ5;#graO3+my_r&qc9B>QQ;TKnhMzG^r}HPPC1W2{5AB51L`{% z^jY>_UeD$2AV9etL2`tZhynWA_B$G+&J9rkL!`B<%$o&g8)!9CmQBI3VL?+ZQLm6^ z_Fc>yZJ|zBfuRBQbX}oi&}PjQUoQ`gGPWBLY}a>eg$3dKKOMO-CX=0rFB6c8`DqR^ zXI4}zhiPHoSR{c`;nk~I$?|}eV$>0*Ur*1OH?|ZI`yO3+=JAl{uJZ`e4|gUI4V3gV zBR>ep#nca@f+yp+Y^ztz>w+w|D`RPgdP_=_!X zb}~$U8dTJ0cgo!wn6+8DI5}f2Qp4jBcVWwnqkpK3aE|pb2bzPXxZmtJO-^7|5g8gJg3g(g$$teU zrSrc~6?`rByv9l+?@6AX-C#Tm#r2PU-4V1jd|cLpqQXi}g#KF+(CkA$1zbK2)Pu0P*+LX8GjV7uO2OVFT#pwUvdXukF~pY{RqvutW*Y08*y*hE^F5YCxq%3fJWG@iT9@;Y&F09IEqCBDmZm zU$9-cE!qL^(7C9xc)RYKB79fs^;{tg0{)TPE=^v@X3O`OsJ-YYUwMDUW`3rK+?$f0 z9c8|Myu=?cytC(Qd}rnX+L6p#z=Z95r80tuD@a&9aB!_u#^^dBDP$n|@#zpJ;rgYUdsnvPT%5($^JBonECcnZ#jX1fYvd{!w zv3MEupipJm5M?1AbbHxLEPm8+QKnzBVjO;6LgQ+L&2E_L`y?4OeuOk53{^;fFb8!o z(_C}f1(4KKLzg)s95i=dFX{x3zM~tEZL#HNfL|ypSQZk^LM{#wzK(!)WChQ@GVS?i z3kq;1S&@N@#*-XT38qfrq~=>}?HB8+wNvXtHy>+v+yUvS9o$Xczp5H5>!=UyRm9;~ zpB$LE&M|p$b!KHrb%$&wJ!A~1q=#%@_Tr^$^j;}bvQm{&uFC8+bB!5JdeE5Kv7HQv zF3wYcN$tg!Z2xo;W9OxGXm5qWG6^Jo3%d_~#JoZRon#{{gp~DE4rWT3z#*5xW-HFr zgoRsXxW}v3iuz@77^ilZo}EIb23XcwsQcxT65Kp9o0Y-9Rgmjp%j*#;XWh4n6^o(w zuTU$&eW1jiP($85E<(kUcpNn|nwp~0XWoYkIk72!Cc4~}0xtG_VfVNG9&x)v8s1@} zWE8%)5t<1!DxTVrg529L%#5PWq;Kej*BK8*yOo40bw&@VqvGv?lzBCIDw(`zq1K|} zZWR$!0NR&Qs5^L$*Osa5X>OSD+rVlBMGW1=cW92~WtWh%6rm!YLStP<@i0SYPpqq*l&W=cfm`z#vkO=BwS$!gDhJVkQ$V$X;wz(Ix%igRk;#ozFy3h*H2&x_No< z=k#NYoSG4=m#nuv#X#HxC=2-V>dL4JhvYQVdXqKzw(;sD3Ahustqh1XqjElF@cry| zcf;4dqv5Boh1VsGDf3mmH_4N>IKzTUBr8SxH{ey0n?ji!Qm9-UK4kFW_)qC+noCMn zqiLrrPte_#$tjw^^;t{@QcvCXhc$QD&qxRBg(B^ZUpg=&{JwSDQ5_N=n0vrKSyG&O zzAuc0@K+Os`3(S))x+A8@M4(Dkuz7GLrIv-Dghkwe=R954heKPr$=wze|3q+`nXvE z3&r^H5R|JB*u+{0E}8E0uGL7d_N1AQ`JAw`L<3isf6bX=GEH==`lfKI9!3KaEI2Kq zHgFOZMToDYb(ewF#lL)cm*rJT4kqM+^sK4(jzMh_W8h;kP=@&!x!20#l~}LPc^x`| zh1~Uj1RM3KRADe`)v0qlJFWagETou}{%R3|xhKvJgt_K`S`Ps3G36Ho49xblP`8_* zX|7F|E!7BxL)$%}?qgwo%5+W(@yqf>4ozPSo3>c?hzPGcJ9wzW=nnN}L^>hmZzIF0 zBIAdOTx1<-Z&cBAcTE=2iBrNys}xUYu7ZGBi-DtHJgvlszs}A+JGi=blUW=uFL3oM zN}zgKB8w8=Qey}>I<0F4>vA6t_?QoUwJ!TqFuz~;kxIA~H~E78mNF`#*P27#%#hgB)+DEdE>s;;Ud z`s3TP;EzKo_Z%-eARRCgyG(L0?P|Y5%)znH`rMAlJTmcW#I!!P{V&#c=^HGwrVTe& zln}XrMap5u7~b6YUv7;1Z23i`b%u-7kZnYsqaxKP@}5g2MTlmK1dMM1eqI|uV|r}e z;{UiqzILls> z4JO?Wy1j3SiYn|W-&1A4VxC%9JZ8*LQMDv$bqVMCVG2zW>Bl0c4p2%D5{5Em$4>Sq zU2yscfKF!PIepmDfc$}B0@J*NJcm0wxY#Ty!xQ&SECFrmzbM!d*~@meRAJ)3lyZhK zUK2=h0?eZuP5Ikwb(VlXA&ak+kDB=rr~i|la?brTnO`HC?j-v zbSsb$s1!Ao6s#O3CCNNFf#?}T=!tt|!*CI4 z*^(|oAI!Ej6TdH}KmOday-mt*{uQ9pJZjPDnsxs(7(qqAXEN0;h%PO<-ax-|GnEo z0g>>Z+Js*f(wCwPg-UtMcF1(P{<^E52Ye6$$!(^P{Ixd}zr^NrFFoD37C*QvAVFOE zN}c5p5a z+qYz(V(s+Pwm029&tKj05SrG9$={si#k~y`1m7O1zQqq=N~7PaQ*1Y2gV}fBrr1co z5gl`iDw&F)0tWbhAFVn0T$qQ)_QHO&52V>aglYiH43sDP7=Ec^|_)iAJI_ejF4~Kz~Ps(yTPz# zhnl}Y8yat{{}+_8so#nGwH8Sb5g#rr7TanfZ5W%AnQ*dC) zVQDi5&Oa?U*M?&D!eyVebbQD*tH}z5VG({q`N_rTO8Jk2rUE~uv>#my8HC$Ehzok7 zQ1b(?$(ovRcr!FG6{RXF>K}j4k(09SWIwcXstvMHpZzKV1HZx6pj}nc3u_qGqjx-E zWV`GSz?&Pchs{YNAo#z+pK#0F?JHq^$6_(~U09IaGbn%#%na$?!8{7PV?Z~@?zA6c zlV4SE!`pMvS-0d|PfXOP7)0-44(=glY3256c>68lpyPUKQOZJh2^aDbJ{790cHpnUI!#Q|CC_U(C=bDIdFGR7{uV!9@KBS) z9(>{}ujY8Vv4n0~i><4NW_Y_b6>c|H^ML*MmQIua+OL+rA*_rs%pMV1^Ws|PQ0$iZ zYMb+bJ}Ph0bMpRFz8uX=p|(yIAZnrxOIO~ay)d}Ej13AKmVBF<^KEr-juQNV^j$Fh za&(~L`>7;IzNGS`a7xdh2KoabSiR-6*ZPNOyg*|)7^6!QDw z`*HrkS_BH;fzyKCAZ23084-_JT9Ub$S;L&ihQC&VV9*DEIGWvkE#%D5e*X9KZ}?I5 z7^mMuM~ryT0=lsI=}FFCwdw9JJg#(b$yc&Lm)$tmb?B7QgdpM{0NGM!=Y&G4{OGb) zsz7L$ou(RF9q)Q4SGN&iF9iK{;qC1_o_Z~yw@$)wC+U4G=i^8wySr5<|5|0{Zk7r^`!{*J%JUI5T}eM)M+ zydT552ybNR8_Y$6A~QaP3zfP;qhLp#W&S6$#_XSY4EHBT*%I>|7Aa^YXd>2=Gy$4| zM1GR0s}uw;jH9zCx=ePuBl6s9@oxg{{40g1P}dbP8VI0&3vZo68lk9+j3KUuqo*1WdkqNh?tEf+D!REe)A{}SsgU#aTEpkvUtWy){DKvSwu ztGgx7ZSYQmI}(9`*GGPpZah~#UP8YsBM!QTu^!q@HR2t;YHu7=HDxoZPHr-GMNq1V zx){!6sm9PGDXYa_FB|FBO^GTJ4KM21_XFbC>Ea#oVads3kJQ91BtA$YHvPUxYpAi% zk{vt7=ukfzxWytGaD1`V217Q&CWU?e{(#fD4!)wK9#yj{KpkNikcvh144%9o0pC2m z7O5w_xX}c4!6_*tVA1zpb@+Sc(84u?f5!pFI$0}m`JrdfUs+>lApI}E(oLqwMt>qs zG%11{ob@Ef&xBZ2+^9{SP98r8{P?Ltx$hM^DGybeDr7j%x6ULaQ3s+?>luCFF`L1y zoz-bUzqLn?v}$WfC>{>C0VSnTl&xsmG}@>Z3UDJrOY_4**|6;gWd&8{v41$ zI08m0=Z#|{P^}vpkDf5I2AccX7M8?k~DK0p*$1A)!qvZNCe7ur33H+2&eRrdXLz*8WE6 zMhylSPfdKtWFFbPrfg5dp4ox6N*PE??Py@KXZ)T1s^1CzA_WvOy1b+|@YnQ0@kAzx zg~ev>aKleUI!_mGdmcnes2h-yfQvSB(4YDmKx0@;RN#=FF5si|BoZCyu%XR~LuHyA zvXB0?HMC!@zr3%;e5LGSz_c!NkA{*0`kBo``>nFUKnXaM=b>=XAg_Q49DGe`w)E21 zYyv-$Ie{M_NK(v0qDwQh^GLLNj)|XiPEw93bDoU6E(m8XJtmwUeapSf$IRTtt0Mkx z{UuVRF}rX)7e`nISps-)_1mL<;~$GnA|}K>T#|9j%n+?Q+5)=rzf^oA?2*+YMiqWB zT*y+^5TRMIhEcr7cJI60$Z#2SeBp#q5BfGj{^NSvMpu&NDK}7zI=r5i1~8>UUDE!B z;*+=Wq_ABZ)<|YbTMcTwk9bZIOXvMaVc6`;OvzVfo!}-Z0MpY;X|gi;BFap)HCqX3 zlCtR5#GXOve56Wx7fQ)drt!}Eu@d7L+ayU7TW@E6>|Q_AWjZeVKSvp*#tpy4Y69`v zKIVpdH=^wZz23mOR}p;&nZFe8n-(GHQs+Q_I6r>GhU#R0 zs4EtlAUbnQHa;@ufX!xNCqsC151^Ql@MnkI+G&`+={fmv5|6EzyoGqFSPK?xqZam{ zj(Y?dVvTsR0i8wmh4EAMxj}Bv=IjuWI3y(iEosgrv5}WhY&qlUr2^Znm8vqKmD;(G?!C+N$f{o{MIl+Zuxk*^$={L6C8 zqp;wppV?hJBf0qt^PK&0tc zP&dp63BRbwZ7u^akz~IrV;tz=_D*Cj{^2k*{_X>V0iW_a-AW10WF@xxmQ*FB9v9jj zlnXeM5!r{`1@dH6>N4?%XelRPZv-RaN`W?()%#FE30K+p!A+brS-!KYp53Fax6Gzr zT)87%=e{D85?FKG$oL7udl$_=6s~=kguY8B?DYT-N606rr@q|loCyuF?W*U8SiAyd z?RS&mQ=iOHe}=CmL9rv_IQaLi*$2DI9_Ej!?+Xb#D--ZqX7S!x!HJuO*(PhLDzRK3 z!_MEVDgkJeVHI865kXhaAFbKhlE*~x@xTci`5{DNxrcyn@}Ce1Ik4n4%xUQdjr3Be z*A;R+f#d1BGQ9~$$2@Hv-?{HFVjf3k3{LVd@!Fqnu*Tl!&GNGjTg5rZ!ig9$0%?E+ z$?9soQzt}&oo1CacO7G_@XoJGMw1b- zpg11C^^z@l+@WUp>E*nSS4wY5kRDMi)YW!PgG_bGUX0 zq3;8JJv*+O$uQGkB92cgu5+mjU@7#hDs+mX35FV10*>UG3gYxYbHGuwevF2XVVBI$ zNx-(A{h|-BQDOUoeDInZbewZUZ>W(8i0e6t2(oAsM~FxDc-I`8vj?R)BrP71TlD;k9OIYEnOd;6!T zYsCltyDvA2Utk%MaOilc6oz7nYGpSvL)Assze_l$knyzdI>xoOizNp1Fc-YaQ#mfR zl^Qk7?#awg@rtne1Q{77PZ>sx47*&i716$``(!G7@o^9sEJ4iwcc?}Vm3z5+tz#&P z8pC@%G7(TY8=f||(@SF?c(WSJdE~@9MR89)&hku&lQi!Q7EaCD6cp z)@>v`H5ljV^%1{8ygJBQ{Q~Xbiu@?cvj4?q(vz#|y&v;w4M@E_t7Aa}a_{`#VO!^s zgKxr~<)Y#~&snNgU+R}MDmabWF*vO;?!(pu_cLM8-Bs#8G}L6Dq$iRlb?#{d+5Ena zwwelcU*F#||B3-&)Gm`PC7lst;&|lp(?!@u1NP~@6M{D6i863ZU(a*AX7$XaqkRkK|oL=W-a@tTBl zLcsafr;ZZnCR7det8eE}p2#@td`tAX%3XCNxag!rzdxC&&f0oVy(wYpBt2Z~Pd}Zq z$V%zyIwC$YlpGx5^)CzLf>g#uZScU`m(>f`-rzI!vXX$g47Ux57wCSyojYqSCwIKI z4J$1f(b$am;X^NUu$;8g{zueop+Z6cw!A`(c^W6~!|E4{nckjRL>S0_Xe)xf6o1C* zUrU?~6V8?Mq?*BD7p_vh*T^CsyQ;Z{^EeU>Y4Ch62b*R%U|LI6C(Xhx!NE*nS$OUF z(4JDyi=kaBEZslJU+pnOid1WAy06WpgDK~RGa?cwz|!0M5oa->zD27wLNm!IF}eUQ z1=+RkU^60RN!T#+tfMe3ODxXadLZ;1YtB+Is_^ZVr zFTa0yKVE1 zJmrgf%s)k9WBJ#w%ur!nXx*pE^3Wj8YtOJk75RJoOX4{~@!;A+bhm3eLz7(CMe#bK zoed$Z?SSe3CefpsOIKm_sVs(zFCIH-H~zEwF{-_`R;*P-P{CL@v!c2mKvzYcW-4-4 zWpY>gVkDyU!I%47LX1NdQrP`)Lv3^8rJT$2rZ}EsgWk?^BuZsSUV1y&T2i$_}r#0Q5q$2vGkNZ6d76IS(u;SB!ru)N;Z?mpZjLQLKlSNv5tlu0Zf$r!CiiP+v z2nPj@jPrq81*$LElp`|}c-RkL=zdjDuqSPt&W6=0K71un?@f8a{-2%Jgz{IyCst_7 zqRT&_CS_PBCvtmyHf3nIk!>F6vb{Y*R5IE2wMr%*gTAq0rJ#m2y$^rYT-&pJ`qflr zMUz}cz@`?Y%Q8;zjLNfWoM1Q>uA?nbtMJnf}FO>+5Ez- zo3Jfv3t=yl{4*K)jV9;R!&<3j$ZJjkS%xziSr1t=5Q+6cz}S{1RDr+Bjk?p;iiG zK!=Nb0f;ATmz6<8D;S5GqxQn2w*@i(=wo`~UoaYY;PlwWeY*K5Pc896m8Xxh2C-^s zFIQqftRc$vq@5_emk3Ttn&VnRy&FNDv*O&kYVnKJu8CBJH#@1y{M)$UV$`+zxn>39 z7tM~g^VnbPjL^p$?Q*5vbv$?zpM{r)5~n_beWW#=Mi8IN*oJAK6Y9D=2i)3?y@ffu zh~2bLp%}r3s{3z|k~yk|y)R6eBDW;+-}B(}$ARwL8ROT^q{Bt!8W&keVr4jN!O;DBe-6~JHsD#LA0^33{RG;W)NRCQwRyS%e*P)Ta* z6i3YuI@#PPIN6LeRa%ADjzxwIBomp5LYI>%_GDK2k9o7dvSr|-iEGqgII4~IJSTQb zZSEd-mv3$kTRE_So}Iyxi&t{%&~gl zzD5NvcSD}v{6on2UMwic%}W?|cP2b{=P^u%BQe}E<|=))rr73!g)jGQn*Fqs6gV{wQI!m#R(f8I&Q7j&gfvRf(~Pn0Xg0zo)KNWGj0a*f%fc2zZt$ zJ;}VGj_Ah4XHp1@O=jbPSAqgHxFF)q2HSPWp&qY70KEXkE`jS#sm=R)5$R8pzDpWs z=FQ2aikUZ9{`r$Pr}z0zWJO4S=^6T)Gv!}sE}I6zvvXwyYxf4~PmR{4{bMu(VA}Hv zV}A1%Lp6gyB^nPAk}zl`ru-aBe+ydE3)&1N0JW;=*a|ichI4gycR9pl9tIj0cEk5* z>Z(dm_b^k=#{%}f$$x2bPE6eeNSW#S^eB||Go+6?@5O5?R7CsycSx9VX&=eIue%x2 znKUr8DzM!WY4rXxrFxYLXP=KzLfdB$4Y*~Q5+9J%5q`nuWgRO-)e+sY04F^HqRte@ z>g0&gF1*iim8e#OTz6U~1VQ#+qyX(ITc3rB<+H8_<1_t2d}pHqe+Qz=ZN#X*zcfDuuM)0GJ4GbY7^#iUD8b6I2&=*yN)Q$#*|i4!l-8 z2M^@mF}mjA$6nsvexd@KN)GPM4*AfY%8nQT1_DWOxHq-cj3`fQN&_YAB`w4jT!a4T zfEKzol>cIiOny$)A5Iq2J(YFo#d~~uMjZe^++ubHK-a$ z&N<{f1q?_h(eR>4{tK)^8#>{nsW`3f2HGWkFD^)*%DA!z%Uu1VzhVEPDD(?aqia+| zWzm;E796>NlgLZz7kFHd*f4_^dHZ6kMy#MolA5Yw9_nmOoo4s%{b5U}3a zFtHnFE7vMG$;+z06RU-C5hwiBY2e=n1!baGkn65P77xOnl+70yV;ABxRb*36lk-`O z&NNJ0JL>KLqWvsaE2v`q8s2adCI2jZ_Gsc}09uZ(B5usd_pG#3uKcj`rh1~2JE;V9 zs?V#v?Fnc{08Fx6W_SBqyf5Tg@>MmH*EDHzU}lwc)9>nZ^X@*9T{ zt2AuCyqq9O_J5YyKfQ}eaz@vU{OZYl)p;N^H3q*uo^lCGuY1*B(ci4bUQ@p3>G>Vo zsc;N6Te2lq-0yxzI3;4uo0&!IZs$)rmkR!NqK}SNkz+qyV|TCkn#TLCtE8XDZqcA5 zW~euOW@!*+irf-dp%dFiBsR7Lk7r&^ZM>q`3QrqBx>o8VMF9u>*O7kJh+5Z}S0^hH zS8Nb*%S&&(2Jk0#PhF9BJ*{dX-(CGGO7rF?m}zB+rux}#R7L%^L$pG<#pLfhF@K~X z>-`I&qt+SwohOhg@C9|2iIlxQ>=&J52?8Y=iZ=3&se66p$_`m$_FUC*2I5QV^GR{X zrsDEMM8LN%kt|Ss1FWWk>^~ms|8ru(D^12H`3wdxUW(7h^nTP6Uu`!)SJ^qCvO3QO zQb{jTb}CJbXN@eIt54My?_h?X6@pTbU)5-Kcas3tf|cl@f6}yrA3Y6M)zwsDK;_Z} z=o0gDG@3I)P}@%6-F=P0uNCfFt4NvjG49OYw7TD@dKMaNH7|l(s`;R>D2MwvP)AMtFqX|iG)utTy>keppS;7{H%8%*o)ADf z%fPw5=f4HawhdesxnA%fj%0?U#uWcuDsO-&xxrb24Ohr33sE8xBeVWQ%z=?45*f)k znb})`?oQ>n_6jhxBa+6bEZOUSUF(SE_o@oK`>l>CGf4vBg5+Y^i_i&~)2qH&cd2#w zQ5YujPLv2uF%W__iugfK8p5m`yF}}WFgVZ&$&ZbTsqp2+$sWsv4_SDo8KwG{H{Hah zhw)o^b5MBizd!*M_&)Jf)F7qJJY=LRytnp&nLlaJD>v!vq%K%75wkLIs?8TNCPP9W z8}v3*p{@pZ(cFJ8xY&iqbuvFm={>YcLE^rR$E$X8TDt<7ZybLB?~Kajt17LXY+77Q6&S{#b#QKQ^ANhQ*yL{Kl{*8k?AAa$Pt)y z;9X66?vkadEAeI5U|isNfyrTedis}@1S*O~7ZThkQ;e5uS|N8qdm%JC2mCPre>4e( z3o;j!S#x-Fp~1AVyH~g8p94cN{Ysf_MUrJ!sm=eup9v}oc}D+~Q$F^jTtH>tE5QdP zGvkXiqD+Nx3kjJ#5_&OYoh~$dB&0fb%Ar*86dyQqCcp+|ifIxqbA z&(iAX9LWX^TFGRpzOkj6qval9AF|4(DS_2mPY=gLeFfxkvNV&Qng%o&s@DYm0*GIQ zd%^nO2>jWxymJM0Y@X51*vLR`1fhrvdXoRV&8j-4T(A!G0<0!2tb(kky0nXU*v2@Q zC9hk;(|HCfEYNCZbYAa^ao%5OjJ$U6*AbqzmAx^fs@aFvM(wFn=hJYdc3fi9+aIlr zH^N^nN`=8%GV7^J|J_Jx)96Ep#!2GMhpk4THRR~}zg0W2abk2-RX6dwH|S1A(Aw+-VbPUMl=T=mpvt34KFBgl2!d@M!IK#@VC z=Yx0lQUMr0u?h=t`MGY62<8NLG|(Q!@&7!_7dBJnb6c{@hRB=5wB;62vq@;zT;u0S z68+IrF>=2+og@cI)Z?T3&iV?oiYKS}FK`|b(p|eg8)m4SFtjk;oZBJx+yB2^5mr_L zj&grEsNac7Zy$MK`-g4e%&p*+sZxMj^l~PJy|zbHslkf~reU`q;T>Wv={d@H%)4D* zhO(cWZ}`{hfG&cuXr8>Wqn%@WjP`Ou^GR09TkYsfZ%wq;GO<dz6EG?$rUi${72G4gX z2rQK+E^rXRfN2$I;sN@N zHx{e?TtwKVHg|9jIzN)dt$eOATEv#z+y&(fwQVc?ZvamI!5wI# z?5o^V?7n%mN>CJlMmTQ(Gnvi>srptdREWof8f$jhI!Nh_zalX0f;%p$95jLwq!6E4zZ2wv{gjZe{ z7IaYt59L!#fnbdT3dflZ95R2eU{@=Y-5CiIX zxIIJbUYv&~_lK4c%MCJDzX;uxVGq?QstUI~1<*8fvk zq7H`c0eN!1{wu6vvW-KZX;Rq1J2Bu+?D7nMa`ty|}7)S!!p{kIzz8 zrO#a(#6Tne_qT1(jw%>GUFUmGV!$8Tr(E(X%BwBOSHje{^C50r5d74@GLQB5;s=3r z!WsBn1Gh|p7Z`RrWLh@2T}`hRoAzO^7T=t@E@o#nqW|^kMrTUyrOD5wiUY6IUq01u z@;XWR!zZ9+;WY`NJmTEq?354+^a^b}l8UWYtSwW+6s~@%hEVOr+rk6m|F@z9j-H+0 zQBF+hXABhr>rXIB8xDyZo}E7+RMqO1V}4xVJdg509&q<`_8E~zMy0K}yyc|*@2USi z*~>6OA!?os4?GfqFaN(M{`-pL&3-6u%~K3pIDwHdp>W2X+{escsP>kT7FD9J!8aQ| zQt2Y%qlnU!Kkl=fB*G=i=7SXuuF@z8zju-A$2DO!Bgy9KC1O-$hnIVG>o zgs%%FUW^@-8W-50klm6_J;kY-QD!b{&x*f%hBBUNI?GW~Il+G8&*oU7RRaHS36obp z78czD=m?5qXmy|bGuZzYMCtt4ufWi_OyT>+L&&|bo;j^rZ?cM-D|-Ib`ORThhJqwN zVkf0X6RMfXg_+!Q-;G!M|BCzeaHjwN?=fcBY#3(dd>W00IfgJpk>-$8l98H7BWgv$ zW|(7&Rt$n*>3|VPT?-k9RFdf)Eu4X9P(~A*gP#b zJl>cWqE57U#4xgSk-gww$^vFFws(iB&`LAI@9-AL82)R@y^U6WuOVlRbN8RFs zvaTzCRO%hv#uHeh?-5&gUWL}}ihC8NXzhtXt<1|r_& z=wygj$Mwa#hGv-N(17BD8zzmV#;CTXC6f(u>C=PiJ8c7PyMK%S#n(AzS7)3*6bPCb z(&qIJX%hzS33lZ6Gf&);x%TkSqseG*uk3|Cw>p&tMm)@?li5EIm6}#vuzFx1hi-_= zj_(hers?2`BJ<*iPXCy{sI|@ptV`eYw)MElGG<^R0M_9%0vtV8FqgX5DnFN|wq)Zd z0R99;R6=%6I7LAtU0q%Gi!CH85|H;NY!h=n?OxRQ$Y%tlo@#i1dSRqN-pL8g@-gus zdYR~uX{}?~kUOE^tCYoyDlL#>w+D*i(PAJF2#Eo{fhzy!B?|)l>_ij&_CH?!-@a}9 z$p7}C|Ia`FzXtvvL;R1I|F@(4|N3d!B2z=*z_;W zaQa!cA3gNI_fOxX9ydkX9=z4@)*_*NrA0Gu_SETuyH}P!pBM;^^hReLU&Mdx_-3PN zLJ@PWMdNa|1m^7s6k0r4vR-Q~^GN29;7e97Pb|g<<(=RmA}9uz2Y%jl=nUNu5Sk`+ zvm@4?xiw}bn1yWl^K4M|OM}LfhBo$&z`Q;3g|og;BaCZLql_f9a&RYfMf^oYXte`G z=$Q=xWp@yQq?AZ^&E&d*PL+{08n@eUm?KQ}5l(z@`c-tA7!MYo4^@(!u9u@~K335g z$rAHmaV&b~(!m<1)CD%lJ1LmU%qQ>>sBD^slAHGT@!jo_OZwF`T#g|fL`A(pxuEmT zw+!SVeTmQp<)r>)v z>7T|)A!d_eUT577vq8P+ROwDXuG`bTHQP<|4#`M`!?s*Z_&#yL29L1|6KlCdVo2A( z(~BgsQ>QHyhn&{-%3rCbF|blp)j2~lsYkb(h7475S&Z!LsHe?koUoGWcE+hq-c(%4 zU)D`4&NUpApH|0XUbcODoxTr(t84aFL)A^3LQb&YcJk9 zec8S|)5A?hp_;ZRt}Xg#%QjykdOqC&XR3`SkD;T>(0Sq>tLNhxD0u#Y(@?!w(!iRH zU6pq7FhgZmj4v^WeXc%{X074eyG64K)-fGp)g%q=Rh*7pHjxk9kGkg6(Q4xwV)&Y;u*K}BK^&}6YiXYjRA?O}5iS$n z081K>vsVHp9x=)UYsL5wzjj0iI->aHyyfaVANG{#2&<~QU0$t`j+&&rJ3Cu%r_qXE za1s7-H@z34aI&fp1$W5+TI^l!2*T&m)|RnZKA>CS`j6Vw7$9q|iEjlLmoXD4-YgwP zxaLgWW&CCmW1qoaR{l%=@2E~xOV+_f=+6mqVyfzh(!o8Bcs?qTt<8`*MVG|rLU**4rESxS@gue{C+ichAsMAeT<33o0wRwoO{0-;p=-{K`y;|yhbg`ckk8Nb`$4X2tYW0(kK6fD(l27RleI11rW8 z?e{WC^~AJA2TaGxnAYP%YdW5e2e@}p@L+8gV0eFbM0R_UtHsK)hJz2dmvokZu^rq3 zy|3L9_UrM*D#T?SP460{MT}vIQ-nwRJOjE}JC(Ly{ipM+W}`HXb$wCqQHK@pf_*kw z4X0A*e!L}fjJ}Eb)b&XB)!$C)iLlKEEI#h0?G1?`*oKgEpa%>{_*!1q2C_iR6~R}f{AuA@M_cucGSC}^VZeWt03pNx?}Zi7(|F0?LB!X zJ=Vi6xJ!;D3~-Ej(6Uvq9mi68o!Q*F8=1*d-&0W#wk%#Ygt{48ZL+%plUgF!su0|o zba7Vesq3aYt{cwZZGEsTDOnHjnd8NmjC9CM6#Otj<)slO#oU+3$Pr=U8TKU`=>4;q z_bctMVcc|8F3*2h`aRueCTY;qHCsD99B}Ele2Ury)&YuKv)Bh@%AON_(-xi@?Q*;` zwzVvff2r(v96s4wr#MBw4_-P+Afq03OBZK3Jo@fX64Rsj}@T za-QU!c=n#xX$ciU!(vay<8miS9z7ucR%=N4!)-kAOyJVjLLT&q5y3w?YGEgyj}ru8 z3|WIu@kW?x;88S$8-7Gh6_26u9U}X?I^bg)XuL7OJFDRAFq?Bxt*0yOZ&<$6g*Dq| z{K}vDd_fG+meZ28n_}wGN*)ov|M_CpEVi(1fNu9|5mi{PuxOR*Vz|OX)Fe83=uhAm zQo;o?rK(ktH?u42iGR0&A(2~$w8(<8dTc#X<>Uhza^34$Hqa{tnc5T$f9V0Ce?guz zMdKJoxe9qqp)=2?33$eol{U=qOEBsqaX!s~uKQqF;wr@yJ?q=RF!V3=Y{BN2(!_ggbHqjoq-O*d*;-uEJz5{T*xHq&1zF*)d>lylNVO613=MZZ${r_QoDhf%&nk0H9_J%JtBZ}9mO0L<1M z8;Tw6Hi%mqNty)J9i#KcGWOWFkf)4URBH>a&7yzDFPoWX+)C2}I^tIf(v50i)Af8) z``N4^xN&ZL=SGOWK>Uu8Gt>W6&c3*jtaOLQvB|9qM0AOJBv#HyG)uUde321r5u?x& zOoWQU*o5sAe||y0^k9C@7-qSe{>%q&m(vSrHS;lr1zbJ^i11a` zxdQXA)}}A^ZT|W1JnOpbY|6sWd5s#IZjV2vo6GvVV}_H|`-BJOO|xT%2&1!rn(LLO z)*~=9jq01vdPp~a5@Y6Hda`r;RB4XNnV>ev)hCwTFaAhhNtk={Y*Ak(B*G?Dt(sQv z%wdCu&EzHPVPD-#08ju`aL3M!|P0 zEa|z>?Wj>?DV)@|qm{H}a9PC!WqTAW+R=GOEe`4ykzt(ms6Gml*?3Iq4lerlvUJhq zjyYqINv)o+FE76xKantyc-{MJ7GxdE^~TA(GuW?AGKEqt*@V)kFk=GAoj08S%=$O=>@5?>^(jAc6L)ZOlXqfbup*T+}t-j#h&=w9vcODJ7|5^S}LJO@p(|{6F zE%(S>JMOcJDRVfVbG|`AbtFpQeWNwr$FZDhi&x8?u<8S={R#z}*S}_~2WD@w)O1Jw z2t(lE7Z`hPjpTE+`=797cw(QzWM-(2$|1^~!d<2C-))27e_d}EqFm|?l^q<_J?L{I z9q_QOhFu;P`!;o~g(CwnD(P`kme8%J@^)7iTXS+Dm;IihCOruAT$)*fy9+N5cNO)THHC$S1p}HMXit?#7+TgMA zW#@9h@*)D4)I!saX6-qFHZogd|4HDTgUSgLaR{DFB-QZCPyh#Vl$P_Fz5xM*H`Vi@ zhH<_b^R>{LO68>1n2~Mh$RW8DoE%PR$pC*b*jZJ;{94yR4a77O#J7}0-W8l=QD6IK z)X-Ng04@XsYpAd*OPQoMu zm}`U)CbZ7-fR=a}-oj?JLE$ZNIT71=*CXdM(3v=CDd*jyA||-oJ1HGla%|FBk9Ol6 zClUs^C7$havPA_h0xzv~f?&6dik>$gJJ|rFPoYS)$)^<|Caj`I6A0sy~aFcg_BUSE=UHyTuRSpslmmLZ|dUNYC z+7{B`wozi@Kd*MjjqOQV*@Octk)>&w-!cN;I_+Zoer0KH1`4mH(Qj1C3Ua($WC1(Q z7%Z^7WeBjlur;|$l4GmMFU>IC;tY7vHeJd<<=u_#GJz$XXsq08g#vkY4b`kaZ&oxX z(EW9M!Ajec@M!?KOP%Zj|Mmi^i%MiWyEZs78+%3t~-3Y@q z%{UeaFLPbI?riHXz0bw^13es;UeLR&P_zwEb%Xg~Gpnqg_>g5@61jJOU{qorW@)#` zS^pJaCZw_KXRmYjRB~%|*0O?JH|%2I*vz3<02*MMF9PVPW!gbid2;#&1w#_FOB0L!ALnDJIeSi(UM8P!~Ysm6YKl-(ajVOe}K*nu~+_& z<)K%avzKnC4P$Y*0V8Qp?m4I<8RK90LLh!Ip-al{B(xd@KQGKc!S&t9EtyesdW!ee zqRN}ZE+SLB**XrLf}U+7pzCOAl$)nYU8TH1+c2^-sI=-qfF+Do6CtIM(e)pely}l! z6%NzaEU&r7{N=iRO8d<&bk*OA4)yXK(;MU5LA_?N?#w-8!6zGc4!d>>-@yi2h83uZ zcAR>E7Od>4>jnhOaA2HpBXo*teyAxZ8 zhb^*~uud3>PWI_IpzdmXIm5)r!x@(gP#c!i7bh#wv?xd^lo=@s5GZdlm zbN(k&xoy%E)2;1?p}MIB(@420koQ4{Cif+^Z^|PfUoH;*0k~(aFHbgl+LKtw<;U+> zvW>f~YV90>%Sng5{gb}bn9jcZr5;lR-!mizJW?~@yDSr|c3c>%7g6_v_`PlTxn?+k z2hH3{n1&N1Hl`iO5m%X!zk`XTfg2>_2jR>HtYm#qEc%@=_>NP@$V0?Bu;n4y&vvnY zLU}ERCr+Wx5t2HA+jU<#iaw%^tZ7!Q>k>nqKay`sW>)o1X!FhqYXL5B{p^yt9Lewm zW4Hpnkg~b5z$Kd;fq-vA=m=(3BxHSzWL}}1POYW@xbv6`PAz#yIlZ5t7ha*F0F3WC z0A82ceF95#=B8)4!uHu3@w!&VemV5)u{#=*SelD*iwE_jty_P*Y9uVwu4F#`jl2ns7V?3VMh#o=tAyd7R z$c7U3L?ZmYEpBS!sGj?LQz{Ru77~GLCp;(EU}I(QaOzY3YhPmfm^wU9NWgFFqTe3K zVt-jOk<-?c5A;!PGmB~k6|1bQ^Q$u!1Ql;XSxp_#^w~X!Vf80?GCgP+>qfPmI{Grq zk4JD$KCf9HDzN%w(&0pqwE}+(3i!0-Sl|J|@__56zE=j4ME3&V2dq`kEBQJM! zfZ6wojS5`GsR)L`FL-oA(#whw9_$Gz0P>x50XqU-lemjWvnJ`@OdM7S9vxk zKY>M@mJ4%hn`fD6z6fghsBOi*pHquS+th&YHdN7c6{={w`Kx8^){rX)(pAQepzFHF z=mXkEUG3rJH-|gZ2GvW;+nnd7Y<_aH)7dpz7%CjEw$>>Lbz8B!KIsrxVl@e2hE958 zlWVl4j_7XTu+MsMAZw8aLtt{PpKEIv59Sy+RnMOmK03I%~^Grv?tsBv0H8eUo9F`XSy#f)JKBF-rHTM~J$>v}h{Mu_}K<^uSciGr`rj+udr5DOjob1l|s zqVzqh0po3`w!JlHhL@M)df$59N9EQrU662>>a zM4LL8h9%B7F9cc0mWXRRG^dwcJ_HJ0efZlDfUsQ>1^FB&So*|W2zbf=`Eby6<45K= zHFLW3SwI@wWQ1A%Q!ohkq^>;mAf8uk-789K-iM${y)`aZ8Wb`W7BA)SPfNbnhQ_xk zjZFFuEh=GL9sqgpJ)g6QIR`{nCkC_Bq$j;amZ^0O%Ih24;@BCXTrF10mWJH=Z5QV< z$Q1aJvv02`o_&p0nEbG26Q&JGY354TgepziW1(~Sg2^4<%Qqav+x zV)MwSVXgQA!5*3DwtYC`O^aG6kd{&&KZiwsEPK#bZ&Dt09vhS*+S|?8J>zjQW=e2? zi1kZ(VjF5T1WGAd29ggMHvvSSLFJZOtNfj?KV0y?f0j zgc4<+1AL65E?Hnwn}VQ#JfDfJrpPnUJF7PJlXsTp$inHl;k8PD(hlz?e;Yr^@(QWm_ zDAGnFOrk4?EpE>NZWFQ_`Zxr56ySVqx;Yf(H}%4GPh3Y;amMd@>>b4K(G&gaOMNRt zGJ3z*8(ZSyxvnVGIhX8IyUdbh1#O!$bso0Yd8`3Kt^wVuY6PtJf%SlHmlim+JekiG zDleo)JG#W<;M)jFO&7BIH8cx{mx?+US5u@k1$WthVH{nz_1!HAHOFtuqF)A#rcD-@ zt+I14dDDjWDHi!BIj=O@Bj(a#Mx>r-tBns+->ipRrS9}+J?)m1E4U2VdTDaF%15%# zW~CFdu|l_CI^%k`gH_!(Xp;^g>9|W0x@&&)CXJ?xJPVzOx{)58L<+;fmCUe!{s*c1 z#;4Qya&(}>`R=AY`JxQGQRZV@MLYK zVFOxHuI$yK#c4sRn3ET(JOckt@~N3{9u_Cpjn7>JU3lvV?J$H!(m5%-_2B zNQX%eSBijo4?gvov~Z`tvlEByr|jhEWwH7q-Lxca`!0L7*PNbgUR5>%Qggc=UIhOz zC;)~f^OkQGh_RZ)h;oJGi}ddCJrh4DyEu>mfUxYdI>1dp4V=9&H8^RTD~9{D5HBMV zaCa=pgT~zk-`DlIz1sYIe5FqSeZJUJ5eIIAz9xXx?N~Q#FYe-n~2I(g7TwX zit{c*f9|IoO4nvQfZiI12c^qsB;hmXat}j}V-lI4OCF!}QGciPE~ItdfXvL>GPLM? z5uGGM(FTl-uu)VX)m*^rx{YoXes-M47s z@tjKyX4M;=;S#_udrBTjCY1J@mm;QtL$}j@aLehNb=9qhZT^Yq~ho zCqr^uNlIQRYAcF2&w#=!5cgh>7!Tv+ve?HdioIf)wOQ`{iC#f*N*Z+^$# z@_JCJ8IEZ791OaybeTVV2iu3t=kl4=v~EEl;xXhLLAr~o`m_J_kNSUtsaiMd*^0Df z1u?E80CheRhS<}L_7p`Y*&5iTKjzC1iyLP_8cdFWOSS7yG53eRnpDF&iH&;5u`A8R zfq<_gtrA-9JVba~QL(kdb?$(LY5He9BaB9Ca9{}pbK`~BZE8eGIvbE<0G@W8emQ*~ z6R0Jf4pDtGw;H*w>5L}B>2{GZ7x>DlE~R+w8}6P!)=q##???0x+OKYuKSA<)SG|8OcLlP?@R5sR-`zvPFp=CO_ezU=&zq5tf@{Ov8@u+U6SLh- z@nA{D>(?LF<@!V8?lxs$hFI_AIGDRnkHEv9Y5q0ClQe4v8^lJPUBb&%)F!ey`gOFy z0q516bH&VE#i=pqtgFR2(<7-^URgL#YDWdI!^vcr1;gPuTBG9RL+6!~FkOmtuVVFn zTJk)O$ZH;t>btA3s351h+S@VdaZaG+u$9C9HYY52HG$dRYW~%7t8K#G_2ASD<@caM zjeRSkc*yG%f4NCWwTr49;)yWMB{1VM#p+zw{wd-9o(^3KV02@t#eG3CHQPCmsxN!K z-c}fc-=o-b!0hAq^qe{h3t>AJuR8bC!*{Bc_R%*SYa6Cy+|Q5h8Q633JPKar)A4y= z;7xyWI87S+$YL9SORTvxb-JBeOiAAt)K4zR&{HB3yDXXdo*@-ojdX~T!-x?D?{LP~ z=_x4qr5+zVALP$G3#8Yk1ibXYiWL5@mAxn@!{!*cLZv-k{>32j8;7D9?;|5t4pW;R zL=;_SGGIo4&pI)IC6{UNSzn@SISMYxcz*Df`)Q!)9HRCy=6lIHtlTRWyK-CQ;h95| zcYd6~8NWu)4{jbm;^H{kebMU2`zwIes%o>zVSvI@0*!4@(yXxb2OtGB%BdRMqT$Ac z6|&uyJ1U|A)4xMqPWXditrCd=tOj&ifX5;~{|qYWdOnO@AetK?3)BftpE*Y-uJ)pd@47por|9c_A=_fFE#!OAudPV;_%!6|r@B8WDhVOHpu(!MA{E)V+X#q%P4H-vzCY z1ccC%FjVY}eV%6Ac4{Pt+lYo^e-_naAcCB!s{4IMP%0HjLr;Sy61fZoUkS`mp(|h0 zm6ieYUp6KTAE&?%2)eP-muNJa0v_CA8vJ=tyYBZQg5wGOLU|$ub|WR`CI(^xs;caf$<562dF5GDVgD9=s6^_ zm9(oR*K2M+;^XJJ*APuz%?^FVPuv?_=~@0QKrZ^J4eaqe=#zPr)ySu{@UK$VKnW6v z&Gx>hmP_oD@qv&4Zr1Hrdh5DH#}!dnZpt|F-CLl8I;YN4>2NSVWNezjl=Ge|0;}(g|D&0Llo=i|1M>{ z(R4zo7y8){^8LQiJawG$;|U^8>Rg9nckI=m6ZbOiUJMcEY?W)$M$eK3;@RyIPx(4G zIw4Uc$h|*Vu&6GB8+_lV9bVb|4LnUit1TSx7y^Cm*gV)5Su0UfDLdn2{mkKOB4h}2 zn(u8jiPt;HsGUpQ!G3(izPeN%Uu_jll?3P;}GB0+#+8`^)-qcTzD zSey4um9e-6)A?;VUixnnMbK#_AXz{A~%N#+2GZ9K!R)Ko}ZE+KZDrmBvl{3?C? zPrfdl2E}>A+?K^H7Go%yghKoc;xNh{)oK}pIIZW>Ks=^N9t83{OfI8*LQpIoYrq2JP zWu9Hccx6G(%LJ^maH}G~ZqOKzsu7xNF^ zxyc7IYvAgj!VVCtqJT7)u7`tJjZOVFT(}^(Gkxu7i%gUgaFbknuK&2z< zeTWP|S?;(viTnd}0SrqVl~46np1?~~5@D9O13xA&;Sir+EH(5E(4a?7L@{vb&fQiv zt4q$zJ-3du8!#=j+$sUS^hjScT+_p4>-A;v+AJly-RVh%>d7CWkQ736)XqV<+hZP&Wla!@KFgEJEC8TMQ|pHYEnf@-7nkN>nX>z-C1S&j#BsRPwdO zj)!c*1F=M8tl{fYBm!4QWmI9VPRRm zORRz!r1)r#~QQRK1Uxq1J7A7U#d5}=e1r}LBU@vnc=~k==cA<;vIpE zP1&iD{Z%xcN$;=o1!kb=DVwz{6P)p+50LMR+)4LROq3eKJ6i);{vx(*uxB%aAd|lT z5v+LyRbx*e__sF$d&F^+Mlm1FRR`)h%xjkz1OG1B95aogl*7ECu}G9CMf6>Qk8YLt zQ$)DeNgI41-Yj&JkvE-r{71)s2v}vlM4FxE^@;-M0d(oB{9H4rv*8}PtwKf6AX+iR zaD~yU3m(<&PN@+>gPoj?CUmZh0AdhoI~)*yMYAIru1Y*C*U{|L6$SR$PL@oP%0ab4c-CM?jX-8i4dIZ)l zAPQeiUFuF7bEPA9My{2iT=y-oz1tXX(jLodq>m-$x|v}WwuVUng4GSd-I6^9;*6&u zH%Sa7zCzGH#@iN76T6{3M7DcDsO!5h5kD2q5nrC= z^7DYEM@WxjqC;n^IbDLuJ^pZ=<8SMBA~wn*PK+a;UObaU3m3E7^3SAvVvMYu4CNDZ zAruT|eAC1nsH%a< z0YlBf>p?*r!vCAKWP7$E6t61Cm%Q(nafzMKSR-2C#aA;bA>~VDyzNI5c8W)LM9=A| zeB#=pyc{@_^#vDb@=Rfck%3_Nt6@J84U^K95(Q)xBcLTyw890LpsA`?I`U!2)bNnR zubbbkTh9cSeDQUoAfZFq&M^xw~fYuW?vL7@E_I$pgan;{xE+P@c{>^Obh8 za-i6gRx^9e-;pY!jojag;a%8Fmn)Q#ph!OE_f3VBc50cdUvt-NsCt}*%H0a0f15<# zfQLkLOp5S+3Jnv9av*%;ki zlHsmpi5km4-VrI&K(o(j^xKu^l8+II13d1b?2_^ zumbJW0XMBEUm->C`evN-sW-YJe6X-4ss?`Bm%%MZZ!8QtVq|{yFFL5G@?faH0U$4efhMjos9+w?U!iFD$-NWgpeA}ysaK~gD+{;lmsl=KsdhcaD zujI1*VFY8h7#kYvBM&`xm?v@bOcaF{Wo09AM1pwwSRjY302HB+Nu33TGIP2=)se%Yi+)2-e5-? zFcwd}K_0c_3`CyU-NtTxSuE@M41ed4Aa^y&dUZ%0iDdc2&E;+Af`B|*Ipz)w1LTs22ajO`zH z&MSM@pw^+E{f^Qg0YBY?4yButB!1}hMI8ou(||T>9h;1|9@$G@lI#v>Njw=$iepR3 zO(_H5rtP~Zm)n}@O5bp{!hQjZPxk9+Jw?&?0I#yeZ7!U!SuuGUiY@IwFe<0iRT8EU zr_d==3RVhpPRx!%oyRA#rWDMVYsRfs!Jf}HEybAv@dRjZdXw24wp@C=6=4H;LeY5Z zBzdIeyeQmdxCZ6iw0Xg5P(NH@U#Ign+3&)w-@J#nEUk25hPTxkfoHJRgc_9g2Y+R9 z!o*6`m4MFR+k+ruc5kR$o7Ltpgl;7ZmZTC221>W9p!@gpfRKFJmk7EzsQH4snz%2$ zoC1}-tjw(&?bB-U112Y4`*Bd1(X}Lb&1I$4vYV~Af;G}#I29xPc|6X=&;jos*J^H4 zHaU*;HVTLVA9J=Y?_7N4t1#$NgSoz+dN_V?SL1?%^^vU8CMbU8DmYQWp}7Dq+hZs^a1f>lOYo+W()(7KQrvMnRFIFm5y0f}~30J=x{2O-n% zokuxS=%|Yf@CBTyycbT46pMkN7hd=Czsy9EIBe+mad)paqSv=G`xfmm=UahZgWz`g zKIc_cm>@b3GsD%~U8S&9S6(b<-&qfm&`P}n3~(LTTPf{@R)&4DTy16} zbnS^Hgd%fpNc?`NgtE3Q)iuO6#K6vJ?MTTY9q91#;M)`*u-5o06o$nw$$kzgQL)sx z|Eer)3234}3i}eHX6({&_1TiPoVK|2QS8x}>!YtjB!|F}6$Oc20ys}%CvPq`D7D#A z?!Z{aU$E1!D{brSgd8+)l@%PA3M8SMCt*2VCct40OR2K0Awv|gavE^JcJM>{pEZ4e z4LX^Ar>Yf&Vcf>yEo^57Two@h)u8l8OEwKC{mG~}e;ihH!~qT+(2_OSm3d%s&-EbX zfwr$Pn(ciQM?cIwEyZ&Y?G~n*t6TD#6@gCOG^k{fpF6BiOCV#eRjKw19MHLG-P!!3 zYnG4-sW%nMy0%S_=2ce4h68_lQf{%-#cq$@??Gu&7W zMzA!)79qkX*8Y4lS^?+%llh>6 z+)5m4T6Y&i5hE4%vq*$;{_Q(U(yKqZ9@qP`ooWVZrmnQhXaD##@N#|oZC8U;J+4qH z+%7pNr3w`Hqmw`LuG3Na`ksU6UICDhBn?no6b%0|dJ|%)vl!X9Nbm<_%9Uj~%x2s7 zks{VcQQfSoS+q^nMrzBSF9-F7(tqFFI;6sP1X=(-zgAu|0jBhaA3ZnaSH0Xqqp`?? zJ%{4hpLw1Qiu(Frd^CZJ2)8dgBrHV%pL><3k&qZ@u5M1ib(1djIa`>>hy(wfM&}f+9Wg6%jl_)cQALjnR28W4VwC9|@ z;Y(bwHU=mS<9R);JLUncHuEuY-?MYIMvV%5^bDb+jOVJeGx0jZD#-(NeBRO*q z0&u4$KF9Am{hshkfZPDzJnnqft%y@V&&3G)kky}6P}8`PSC?a;53 zockj`wEpEh0~yu;O2FC^%~P3yDXI+hot3GH$2_e>*l!6OK+yT67h5l`;&e{Sp1zqCoJ`3y4(@uVZD^aSTPu_dLd z`+G5VKUKErO;V6AQLobcTE_)UE%3a7S(9Xfn;rQR6OkBKegE5)cGtM0Ms*jG zO&Ky_X0mGa@a6_h_x#@*8|lbDTHuTIAjKsaQ|G3{VDhSn2cY6Qte52q);j#{GwlGj zaq4SVwvNV+*|`k8S_Mz2kL>n|1h3Ea^9+T%R68$!rz2i%$BU=53(Vy23wmyzbbpoqJIMQ0}0 yPpYoJ)LK8vS|<+t7P)?$@_+vHf4(bu7a|{h_(egzUKa3f&=#_{Yn@9->i+`13|GDY From 9a0e737da9eb8b4427b12d115f804691e05235ed Mon Sep 17 00:00:00 2001 From: Kevin-OConnor Date: Sat, 30 Aug 2025 20:23:10 -0400 Subject: [PATCH 019/135] Add CAN Mfgrs and Update Device Types (#3088) --- source/docs/software/can-devices/can-addressing.rst | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/source/docs/software/can-devices/can-addressing.rst b/source/docs/software/can-devices/can-addressing.rst index 7dc77157ae..07bd88de7b 100644 --- a/source/docs/software/can-devices/can-addressing.rst +++ b/source/docs/software/can-devices/can-addressing.rst @@ -27,14 +27,15 @@ Motor Controller 2 Relay Controller 3 Gyro Sensor 4 Accelerometer 5 -Ultrasonic Sensor 6 -Gear Tooth Sensor 7 +Distance Sensor 6 +Encoder 7 Power Distribution Module 8 Pneumatics Controller 9 Miscellaneous 10 IO Breakout 11 Servo Controller 12 -Reserved 13-30 +Color Sensor 13 +Reserved 14-30 Firmware Update 31 ========================= ===== @@ -65,7 +66,11 @@ The Thrifty Bot 13 Redux Robotics 14 AndyMark 15 Vivid Hosting 16 -Reserved 17-255 +Vertos Robotics 17 +SWYFT Robotics 18 +Lumyn Labs 19 +Brushland Labs 20 +Reserved 21-255 ===================== ========== #### API/Message Identifier From cf9410618a676a35b0fee5ab6e02e5c5a4cea0d3 Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Mon, 1 Sep 2025 09:05:39 -0700 Subject: [PATCH 020/135] Use Python 3.10 in CI (#3090) Python 3.9 will be out of support soon Update RTD to Ubuntu 22.04 since 20.04 is out of support --- .github/workflows/CI.yml | 16 ++++++++-------- readthedocs.yml | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 09fba980b5..8914546313 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -14,7 +14,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" cache: 'pip' - name: Install Python Dependencies run: | @@ -41,7 +41,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" cache: 'pip' - name: Install Python Dependencies run: | @@ -75,7 +75,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" cache: 'pip' - name: Install Python Dependencies run: | @@ -102,7 +102,7 @@ jobs: # uses: tj-actions/changed-files@v41 # - uses: actions/setup-python@v5 # with: - # python-version: 3.9 + # python-version: "3.10" # - name: Install Dependencies # run: pip install -r source/requirements.txt # - name: Run linkcheck on .rst files @@ -126,7 +126,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" - name: Install Dependencies run: | pip install -r source/requirements.txt @@ -140,7 +140,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" - name: Install Dependencies run: | pip install -r source/requirements.txt @@ -168,7 +168,7 @@ jobs: git fetch origin main --depth=1 - uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" - name: Install Dependencies run: | pip install -r source/requirements.txt @@ -185,7 +185,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" - name: Install Python Dependencies run: | pip install -r source/requirements.txt diff --git a/readthedocs.yml b/readthedocs.yml index 284b967e21..42e8c4e884 100644 --- a/readthedocs.yml +++ b/readthedocs.yml @@ -6,9 +6,9 @@ sphinx: fail_on_warning: true build: - os: ubuntu-20.04 + os: ubuntu-22.04 tools: - python: "3.9" + python: "3.10" apt_packages: - librsvg2-bin jobs: From 51371dba9c9dc14c1e9ee16e7e22637ea674a4eb Mon Sep 17 00:00:00 2001 From: sciencewhiz Date: Sat, 6 Sep 2025 19:42:41 -0700 Subject: [PATCH 021/135] Remove latex package dependency (#3089) Appears to be unused and is unmaintained --- poetry.lock | 88 +---------------------------------------- pyproject.toml | 1 - source/requirements.txt | 7 ---- 3 files changed, 2 insertions(+), 94 deletions(-) diff --git a/poetry.lock b/poetry.lock index 63d011f4d4..94efc47365 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.0 and should not be changed by hand. [[package]] name = "alabaster" @@ -625,32 +625,6 @@ files = [ docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] tests = ["pytest", "pytest-cov", "pytest-xdist"] -[[package]] -name = "data" -version = "0.4" -description = "Work with unicode/non-unicode data from files or strings uniformly." -optional = false -python-versions = "*" -files = [ - {file = "data-0.4.tar.gz", hash = "sha256:2726a65da1af31e2345b6bba81ae4cee87dddf17f7c62f5c63ba7327a8480667"}, -] - -[package.dependencies] -decorator = "*" -funcsigs = "*" -six = "*" - -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.5" -files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] - [[package]] name = "dict2css" version = "0.3.0.post1" @@ -816,28 +790,6 @@ matplotlib = "*" numpy = "*" scipy = "*" -[[package]] -name = "funcsigs" -version = "1.0.2" -description = "Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2+" -optional = false -python-versions = "*" -files = [ - {file = "funcsigs-1.0.2-py2.py3-none-any.whl", hash = "sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca"}, - {file = "funcsigs-1.0.2.tar.gz", hash = "sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"}, -] - -[[package]] -name = "future" -version = "1.0.0" -description = "Clean single-source support for Python 3 and 2" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216"}, - {file = "future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05"}, -] - [[package]] name = "gitdb" version = "4.0.11" @@ -1111,22 +1063,6 @@ files = [ {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, ] -[[package]] -name = "latex" -version = "0.7.0" -description = "Wrappers for calling LaTeX/building LaTeX documents." -optional = false -python-versions = "*" -files = [ - {file = "latex-0.7.0.tar.gz", hash = "sha256:bf10c3fe27e9f3adccebc12e90ec239c86dcba101b89221f6775918211482a79"}, -] - -[package.dependencies] -data = "*" -future = "*" -shutilwhich = "*" -tempdir = "*" - [[package]] name = "markdown2" version = "2.4.6" @@ -1782,16 +1718,6 @@ dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pyde doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] -[[package]] -name = "shutilwhich" -version = "1.1.0" -description = "shutil.which for those not using Python 3.3 yet." -optional = false -python-versions = "*" -files = [ - {file = "shutilwhich-1.1.0.tar.gz", hash = "sha256:db1f39c6461e42f630fa617bb8c79090f7711c9ca493e615e43d0610ecb64dc6"}, -] - [[package]] name = "six" version = "1.16.0" @@ -2402,16 +2328,6 @@ files = [ [package.extras] widechars = ["wcwidth"] -[[package]] -name = "tempdir" -version = "0.7.1" -description = "Tempdirs are temporary directories, based on tempfile.mkdtemp" -optional = false -python-versions = "*" -files = [ - {file = "tempdir-0.7.1.tar.gz", hash = "sha256:689680ed3ba4cc8347a70e67efc25086ce85b53b9d24a1420899c585bbf7ba8e"}, -] - [[package]] name = "tinycss2" version = "1.3.0" @@ -2575,4 +2491,4 @@ test = ["pytest"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "c8628a9250eea176452528768cb27227f2d9c053113a1e69fb30cd22463f4cc7" +content-hash = "6b9f37536b0bdc61b9f8d935be02f51fbd8b980a3e73bffacbc8aef4d29fe195" diff --git a/pyproject.toml b/pyproject.toml index 3df1bea87e..b221a9a08a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,6 @@ doc8 = "==1.1.2" docutils = "==0.21.2" fonttools = {version = "==4.43.0", extras = ["woff"]} jsmin = "==3.0.1" -latex = "==0.7.0" markdown2 = "==2.4.6" numpy = ">=1.26.2, <2.0.0" scipy = ">=1.9.0, <2.0.0" diff --git a/source/requirements.txt b/source/requirements.txt index 0245522b43..b2c7113d29 100644 --- a/source/requirements.txt +++ b/source/requirements.txt @@ -16,8 +16,6 @@ colorama==0.4.6 ; python_version >= "3.9" and python_version < "3.13" and (sys_p contourpy==1.3.0 ; python_version >= "3.9" and python_version < "3.13" cssutils==2.11.1 ; python_version >= "3.9" and python_version < "3.13" cycler==0.12.1 ; python_version >= "3.9" and python_version < "3.13" -data==0.4 ; python_version >= "3.9" and python_version < "3.13" -decorator==5.1.1 ; python_version >= "3.9" and python_version < "3.13" dict2css==0.3.0.post1 ; python_version >= "3.9" and python_version < "3.13" doc8==1.1.2 ; python_version >= "3.9" and python_version < "3.13" docutils==0.21.2 ; python_version >= "3.9" and python_version < "3.13" @@ -26,8 +24,6 @@ filelock==3.16.1 ; python_version >= "3.9" and python_version < "3.13" fonttools==4.43.0 ; python_version >= "3.9" and python_version < "3.13" fonttools[woff]==4.43.0 ; python_version >= "3.9" and python_version < "3.13" frccontrol==2023.28 ; python_version >= "3.9" and python_version < "3.13" -funcsigs==1.0.2 ; python_version >= "3.9" and python_version < "3.13" -future==1.0.0 ; python_version >= "3.9" and python_version < "3.13" gitdb==4.0.11 ; python_version >= "3.9" and python_version < "3.13" gitpython==3.1.43 ; python_version >= "3.9" and python_version < "3.13" html5lib==1.1 ; python_version >= "3.9" and python_version < "3.13" @@ -38,7 +34,6 @@ importlib-resources==6.4.5 ; python_version >= "3.9" and python_version < "3.10" jinja2==3.1.6 ; python_version >= "3.9" and python_version < "3.13" jsmin==3.0.1 ; python_version >= "3.9" and python_version < "3.13" kiwisolver==1.4.7 ; python_version >= "3.9" and python_version < "3.13" -latex==0.7.0 ; python_version >= "3.9" and python_version < "3.13" markdown2==2.4.6 ; python_version >= "3.9" and python_version < "3.13" markupsafe==2.1.5 ; python_version >= "3.9" and python_version < "3.13" matplotlib==3.9.2 ; python_version >= "3.9" and python_version < "3.13" @@ -62,7 +57,6 @@ restructuredtext-lint==1.4.0 ; python_version >= "3.9" and python_version < "3.1 ruamel-yaml-clib==0.2.8 ; platform_python_implementation == "CPython" and python_version < "3.13" and python_version >= "3.9" ruamel-yaml==0.18.6 ; python_version >= "3.9" and python_version < "3.13" scipy==1.13.1 ; python_version >= "3.9" and python_version < "3.13" -shutilwhich==1.1.0 ; python_version >= "3.9" and python_version < "3.13" six==1.16.0 ; python_version >= "3.9" and python_version < "3.13" smmap==5.0.1 ; python_version >= "3.9" and python_version < "3.13" snowballstemmer==2.2.0 ; python_version >= "3.9" and python_version < "3.13" @@ -99,7 +93,6 @@ sphinxext-remoteliteralinclude==0.6.0 ; python_version >= "3.9" and python_versi sphinxext-toptranslators==0.1.3 ; python_version >= "3.9" and python_version < "3.13" stevedore==5.3.0 ; python_version >= "3.9" and python_version < "3.13" tabulate==0.9.0 ; python_version >= "3.9" and python_version < "3.13" -tempdir==0.7.1 ; python_version >= "3.9" and python_version < "3.13" tinycss2==1.3.0 ; python_version >= "3.9" and python_version < "3.13" tomli==2.0.2 ; python_version >= "3.9" and python_version < "3.11" typing-extensions==4.12.2 ; python_version >= "3.9" and python_version < "3.13" From c336be004e65851da4016e7268d5b96a14d68e14 Mon Sep 17 00:00:00 2001 From: crueter Date: Sat, 6 Sep 2025 22:51:21 -0400 Subject: [PATCH 022/135] [dashboards] move QDash repo again (#3091) --- source/docs/software/dashboards/dashboard-intro.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/docs/software/dashboards/dashboard-intro.rst b/source/docs/software/dashboards/dashboard-intro.rst index bf80def719..1ee4dc1b0a 100644 --- a/source/docs/software/dashboards/dashboard-intro.rst +++ b/source/docs/software/dashboards/dashboard-intro.rst @@ -32,4 +32,4 @@ This dashboard is designed for debugging code and analyzing data from the robot. [FRC Web Components](https://github.com/frc-web-components/frc-web-components) (Driver) - A web-based dashboard that can be installed as a standalone application, or as a JavaScript package for custom dashboard solutions. -[QDash](https://github.com/Q-FRC/QDash) (Driver) - described as a reliable, high-performance, low-footprint dashboard. QDash has been specifically designed to use as few resources as possible without sacrificing features or aesthetics. +[QDash](https://git.crueter.xyz/QFRC/QDash) (Driver) - described as a reliable, high-performance, low-footprint dashboard. QDash has been specifically designed to use as few resources as possible without sacrificing features or aesthetics. From b86b37744b4bd9b1c5ac82d9b7db1a62a8aaef5e Mon Sep 17 00:00:00 2001 From: Pedro Palacios <109385020+pedropalaciosjr@users.noreply.github.com> Date: Mon, 29 Sep 2025 10:18:58 -0500 Subject: [PATCH 023/135] Fix comment syntax in Python example (#3094) --- .../docs/software/hardware-apis/motors/wpi-drive-classes.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst b/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst index da8848d888..b5e430614e 100644 --- a/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst +++ b/source/docs/software/hardware-apis/motors/wpi-drive-classes.rst @@ -298,9 +298,9 @@ The MecanumDrive class contains two different default modes of driving your robo ```python def teleopPeriodic(self): - // Drive using the X, Y, and Z axes of the joystick. + # Drive using the X, Y, and Z axes of the joystick. self.robotDrive.driveCartesian(-self.stick.getY(), -self.stick.getX(), -self.stick.getZ()) - // Drive at 45 degrees relative to the robot, at the speed given by the Y axis of the joystick, with no rotation. + # Drive at 45 degrees relative to the robot, at the speed given by the Y axis of the joystick, with no rotation. self.robotDrive.drivePolar(-self.stick.getY(), Rotation2d.fromDegrees(45), 0) ``` From 9bb4ddc446376b4e91ab770d520436a0cc7ce891 Mon Sep 17 00:00:00 2001 From: Kevin-OConnor Date: Fri, 3 Oct 2025 17:11:52 -0400 Subject: [PATCH 024/135] Update links for new FIRST website (#3096) --- source/_templates/layout.html | 2 +- source/docs/contributing/frc-docs/style-guide.rst | 2 +- source/docs/controls-overviews/control-system-hardware.rst | 2 +- .../docs/hardware/hardware-basics/wiring-pneumatics-pcm.rst | 2 +- .../docs/hardware/hardware-basics/wiring-pneumatics-ph.rst | 2 +- source/docs/legal/privacy-policy.rst | 2 +- source/docs/romi-robot/index.rst | 6 ++++-- source/docs/software/dashboards/advantagescope.rst | 2 +- source/docs/software/support/support-resources.rst | 2 +- 9 files changed, 12 insertions(+), 10 deletions(-) diff --git a/source/_templates/layout.html b/source/_templates/layout.html index 7df7af2bd5..e2444037a4 100644 --- a/source/_templates/layout.html +++ b/source/_templates/layout.html @@ -13,7 +13,7 @@

-Notice that we do not need to involve the control variables for the intermediate steps in the recursion; we iterate *only* on the time-of-flight. This is a key computational advantage of this approach: it works implicitly on the *geometry* of the look-up table, which *implicitly* encodes the physics of the problem in such a way that the motion-adjustment becomes independent of the specifics of the shooting mechanism physics (except as is latent in the structure of the time-of-flight measurements in the look-up table). +Note that the convergence behavior depends critically on the projectile velocity; as the projectile velocity increases, the convergence envelope expands, and the algorithm becomes more robust to errors in the robot velocity estimate. Increasing iteration count also increases the convergence envelope, but this rapidly "saturates" and the difference between 5 and 10 iterations is quite small. -If we did not record the time-of-flight measurements in the look-up table, we would need to calculate the time-of-flight for each shot from the control variables, which would involve a physics model. Measuring the time-of-flight at the time of table construction gives us enough surplus information to avoid the need for explicit physics modeling at all. +The "inverted NASA logo" shape of the convergence envelope generally follows the shape of the "maximum recursion stability" geodesic, which *under the assumptions of this simulation* (constant horizontal projectile velocity, no drag) follows the equation :math:`v_r = v_p \cot(\theta)`. For velocities along this geodesic, the robot is in an instantaneous orbit around the virtual target, meaning the time-of-flight of the shot is not changing as the robot moves. Perhaps surprisingly, under these assumptions, the curve does not depend on the distance to the target. + +Convergence is worst in a direct sprint towards or away from the target - in these cases, shot solution is maximally-sensitive to errors in the robot velocity estimate. Direct lateral motion is also not great. Along the "maximum stability" geodesic, there are two "wings" of stable convergence; we can see that it is optimal (in terms of motion-compensation stability) to approach a target diagonally, rather than head-on. + +Whether the "constant horizontal shot velocity" assumption is valid depends on the implicit shooting strategy of your look-up table; to achieve a look-up table whose convergence envelope looks *exactly* like the plot above, you would need to choose shots such that the horizontal component of the projectile velocity is constant. This may not be possible - or optimal - for your particular shooting mechanism; but the general shape of the convergence envelope for a modified shooting strategy will still "rhyme" with the simulation above. + +It is fairly easy to generate a convergence plot using your actual look-up table, if you wish to know the exact shape of the convergence envelope for your particular shooting strategy - simply run the recursion along a series of rays in velocity space, and plot the maximum velocity that converges within the given number of iterations for each ray (convergence is typically defined as the time-of-flight changing by less than a certain tolerance, though you can also just check that the final landing position is within a certain tolerance of the target). From 4ec0ac718caa02ba595f64054bc23adf9b1bfbd2 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Thu, 29 Jan 2026 12:15:38 -0500 Subject: [PATCH 115/135] prose adj --- .../fire-control/dynamic-shooting.rst | 5 +++- .../fire-control/static-shooting.rst | 29 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst index 06fbeceb36..a8c16dead5 100644 --- a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst @@ -48,6 +48,9 @@ The "inverted NASA logo" shape of the convergence envelope generally follows the Convergence is worst in a direct sprint towards or away from the target - in these cases, shot solution is maximally-sensitive to errors in the robot velocity estimate. Direct lateral motion is also not great. Along the "maximum stability" geodesic, there are two "wings" of stable convergence; we can see that it is optimal (in terms of motion-compensation stability) to approach a target diagonally, rather than head-on. -Whether the "constant horizontal shot velocity" assumption is valid depends on the implicit shooting strategy of your look-up table; to achieve a look-up table whose convergence envelope looks *exactly* like the plot above, you would need to choose shots such that the horizontal component of the projectile velocity is constant. This may not be possible - or optimal - for your particular shooting mechanism; but the general shape of the convergence envelope for a modified shooting strategy will still "rhyme" with the simulation above. +The Effect of Firing Strategy +----------------------------- + +Whether the "constant horizontal shot velocity" assumption is valid depends on the implicit firing strategy of your look-up table; to achieve a look-up table whose convergence envelope looks *exactly* like the plot above, you would need to choose shots such that the horizontal component of the projectile velocity is constant. This may not be possible - or optimal - for your particular shooting mechanism; but the general shape of the convergence envelope for a modified shooting strategy will still "rhyme" with the simulation above, unless you adopt a firing strategy that fundamentally changes the problem's ballistic geometry. It is fairly easy to generate a convergence plot using your actual look-up table, if you wish to know the exact shape of the convergence envelope for your particular shooting strategy - simply run the recursion along a series of rays in velocity space, and plot the maximum velocity that converges within the given number of iterations for each ray (convergence is typically defined as the time-of-flight changing by less than a certain tolerance, though you can also just check that the final landing position is within a certain tolerance of the target). diff --git a/source/docs/software/advanced-controls/fire-control/static-shooting.rst b/source/docs/software/advanced-controls/fire-control/static-shooting.rst index a6a45ea9ef..714bc9ace5 100644 --- a/source/docs/software/advanced-controls/fire-control/static-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/static-shooting.rst @@ -1,7 +1,9 @@ Static Shooting via Look-Up Table ================================== -This section describes how to design, populate, and use a look-up table (a "firing table") to aim at a stationary target from a stationary robot. +.. note:: A look-up table containing firing solutions is generally called a "firing table" in the professional literature; there is a *huge* amount of literature (much of it from the early 20th century) and a fascinating history around the computation of such tables. As we are not guiding artillery fire, we will use the more general term "look-up table" throughout this documentation. + +This section describes how to design, populate, and use a look-up table to aim at a stationary target from a stationary robot. The Problem ----------- @@ -11,27 +13,36 @@ We ultimately want to launch the game piece on a trajectory that will end up in 1. Robots have a wide variety of shooting mechanisms, each with a specific relationship between their control variables (e.g. flywheel speed, hood angle, catapult release angle, etc.) and the trajectory of the game piece. In general, these relationships are nonlinear and complex. 2. Calculating an exact trajectory for the gamepiece is in general *also* nonlinear and complex, due to factors such as air resistance, spin effects, and other gamepiece-specific properties. -Any method that attempts to "directly solve" the problem by calculating an exact trajectory, and then working backwards from that to find the correct control variables, must solve both of the above problems. - -But, there is a simpler way: we can just experimentally determine the control variables that we *observe* to result in scoring the game piece, from a variety of different starting positions. Then, to make a given shot, we can simply plug the starting position into the look-up table and use the corresponding control variables to reproduce the shot. +We could build mathematical models of both the shooting mechanism and the gamepiece's trajectory, and then solve the problem directly. But, it is much simpler to just use a static record of empirical solutions to this problem, as experimentally determined by a human operator - a **look-up table**. This collapses the complexity of both models into the behavior of the values in the table, effectively pre-computing the relevant physics of the problem in a way that removes the need for any further physical modeling in the runtime robot code. Building the Look-Up Table -------------------------- To build the look-up table, we need to: -1. Pick a set of positions that we will experimentally shoot from. This is setting the resolution of your table; in reality, your robot will never be exactly at a position that you recorded in the table, and you will have to interpolate between the recorded positions. The higher the resolution of the table, the more accurate your shooting will be, but the more data you will need to collect and the more time it will take to build the table. Generally, it is a good idea to start with a low resolution and increase it only if you observe that it is not sufficiently accurate. -2. "Dial in" the control variables that successfully score the game piece from each of the starting positions. Note that if your shooter is not consistent at this stage, then there is nothing the software can do to compensate for it; the mechanical quality of your shooter is always more important than the subtlety of the control software. -3. (Optional) Measure the time-of-flight of the gamepiece to the goal from each of the starting positions, and record it in the table along with the control variables. This is needed later, when we discuss shooting at moving targets or from a moving robot; recording this ahead-of-time reduces the amount of computation required at runtime, and improves the accuracy of the shoot-on-the-move algorithm. +1. Pick a set of distances to the target that we will experimentally shoot from. This is setting the resolution of your table; in reality, your robot will never be exactly at a distance that you recorded in the table, and you will have to interpolate between the recorded distances. The higher the resolution of the table, the more accurate your shooting will be, but the more data you will need to collect and the more time it will take to build the table. Generally, it is a good idea to start with a low resolution and increase it only if you observe that it is not sufficiently accurate. +2. "Dial in" the control variables that successfully score the game piece from each of the starting distances. Note that if your shooter is not consistent at this stage, then there is nothing the software can do to compensate for it; the mechanical quality of your shooter is always more important than the subtlety of the control software. +3. (Optional) Measure the time-of-flight of the gamepiece to the goal from each of the starting distances, and record it in the table along with the control variables. This is needed later, when we discuss shooting at moving targets or from a moving robot; recording this ahead-of-time reduces the amount of computation required at runtime, and improves the accuracy of the shoot-on-the-move algorithm. Using the Look-Up Table ----------------------- To use the look-up table, we: -1. Determine the relative position of the target from the robot. This tells us where on the look-up table to find the corresponding control variables for the shot. This will likely require some amount of vision processing or other sensor input. -2. Interpolate between the nearest recorded positions in the look-up table to find the corresponding control variables for the shot. +1. Determine the distance to the target from the robot. This tells us where on the look-up table to find the corresponding control variables for the shot. This will likely require some amount of vision processing or other sensor input. +2. Interpolate between the nearest recorded distances in the look-up table to find the corresponding control variables for the shot. 3. Set the control variables to the values found in the look-up table. 4. Shoot the game piece. That's it. This might seem like a crude approach, but for most problems it works very well. Most shooting mechanisms have governing equations that, while complex, are still well-behaved enough (i.e., not chaotic, slowly-changing, etc.) that interpolating the look-up table is in fact a very good approximation of the exact solution. + +Choosing a Firing Strategy +-------------------------- + +When we populate our look-up table, we are implicitly fixing a "firing strategy" for the robot. This is the set of control variables that we will use to shoot the game piece, for a given position, into the target. In general, there are *multiple* valid firing strategies for a given position, each with a different time-of-flight. We need to choose a firing strategy that is appropriate for the robot and the target. + +For the stationary shot problem, the firing strategy determines how long the projectile will take to reach the target, and the amount of energy it will arrive with. Both of these may matter for the success of the shot, and so this should be chosen intentionally rather than haphazardly. Try multiple different firing strategies from each distance, and see which one works best for your robot and target. + +The firing strategy may be different at different distances; there is no hard rule that says we must follow any particular pattern. However, if the firing strategy varies wildly with distance, it may be difficult to interpolate the look-up table accurately, and the resulting shooting accuracy will be poor. Therefore, you should be careful to choose firing strategies at each distance such that the shooter parameters are "nearby" those of neighboring points in the look-up table - essentially, the shooter parameters should be continuous and smooth as a function of distance. + +As we will see in the next section, the firing strategy also has a profound effect on the behavior of motion compensation, since the amount of required motion compensation in the aiming of the shot varies with the amount of time the shot takes to reach the target (the longer the shot takes, the further offset the aim must be to compensate for motion). From cb81e3841fb24c066e9e79eb27d37300f1f65ed3 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Thu, 5 Feb 2026 16:14:55 -0500 Subject: [PATCH 116/135] wording --- .../software/advanced-controls/fire-control/index.rst | 8 ++++++-- .../advanced-controls/fire-control/static-shooting.rst | 8 +++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/index.rst b/source/docs/software/advanced-controls/fire-control/index.rst index f1a9c2d2af..58cf8c3bf5 100644 --- a/source/docs/software/advanced-controls/fire-control/index.rst +++ b/source/docs/software/advanced-controls/fire-control/index.rst @@ -1,14 +1,18 @@ Fire Control ============ +.. note:: Fire control is a difficult problem, and depends on the shooting mechanism and the gamepiece. This sequence of articles covers one approach to solving fire-control in a "soft" conceptual manner that can apply to many different shooting mechanisms and gamepieces. We do not provide example code; the core concept is so simple that working example code would be 90% distracting details of the assumed game context, and 10% fire-control algorithm. If you understand the concepts presented here, you will be able to apply them to your own robot and gamepiece. + This section describes software approaches for aiming a robot's shooting mechanism at a goal. Technical literature calls this "fire control", as it was first (and remains primarily) studied in the context of aiming artillery. -Fire control problems can typically be solved in one of two ways: +Fire control problems can be solved in one of two ways: 1. Direct-solve 2. Recursion -Direct-solve methods are computationally more-complex, but can be more accurate and can be more-flexibly adapted to account for small perturbations in the system. In this documentation sequence, however, we primarily focus on recursion: it works very well in practice and is remarkably easy to understand, implement, and tune. +This sequence of articles only covers recursion, because direct-solve methods depend much more heavily on the specifics of the shooting mechanism and gamepiece. Recursion is a general approach that can be applied to many different shooting mechanisms and gamepieces, and is relatively easy to understand, implement, and tune. + +Recursive approaches have another advantage: they are their own error analysis. By watching how the recursion converges, we can see how accurate the solution is likely to be. The interactive visualization in the dynamic shooting article allows you to explore this behavior graphically. .. toctree:: :maxdepth: 1 diff --git a/source/docs/software/advanced-controls/fire-control/static-shooting.rst b/source/docs/software/advanced-controls/fire-control/static-shooting.rst index 714bc9ace5..09c6d10c4f 100644 --- a/source/docs/software/advanced-controls/fire-control/static-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/static-shooting.rst @@ -1,9 +1,7 @@ Static Shooting via Look-Up Table ================================== -.. note:: A look-up table containing firing solutions is generally called a "firing table" in the professional literature; there is a *huge* amount of literature (much of it from the early 20th century) and a fascinating history around the computation of such tables. As we are not guiding artillery fire, we will use the more general term "look-up table" throughout this documentation. - -This section describes how to design, populate, and use a look-up table to aim at a stationary target from a stationary robot. +This section describes how to use a look-up table to aim at a stationary target from a stationary robot. This kind of a look-up table is called a `firing table `_, and has been used for hundreds of years because it is simple and effective. The Problem ----------- @@ -24,10 +22,10 @@ To build the look-up table, we need to: 2. "Dial in" the control variables that successfully score the game piece from each of the starting distances. Note that if your shooter is not consistent at this stage, then there is nothing the software can do to compensate for it; the mechanical quality of your shooter is always more important than the subtlety of the control software. 3. (Optional) Measure the time-of-flight of the gamepiece to the goal from each of the starting distances, and record it in the table along with the control variables. This is needed later, when we discuss shooting at moving targets or from a moving robot; recording this ahead-of-time reduces the amount of computation required at runtime, and improves the accuracy of the shoot-on-the-move algorithm. -Using the Look-Up Table +Using the Firing Table ----------------------- -To use the look-up table, we: +To use the firing table, we: 1. Determine the distance to the target from the robot. This tells us where on the look-up table to find the corresponding control variables for the shot. This will likely require some amount of vision processing or other sensor input. 2. Interpolate between the nearest recorded distances in the look-up table to find the corresponding control variables for the shot. From 2546511d17445eea8ef24b4a14cf304c4ca6a55d Mon Sep 17 00:00:00 2001 From: Oblarg Date: Sat, 7 Feb 2026 15:56:45 -0500 Subject: [PATCH 117/135] add fractal mode --- .../controls_js_sim/dynamic-shooting.js | 95 ++--- .../dynamic-shooting-visualization.js | 362 +++++++++++++++--- .../fire-control/dynamic-shooting.rst | 4 +- 3 files changed, 354 insertions(+), 107 deletions(-) diff --git a/source/_extensions/controls_js_sim/dynamic-shooting.js b/source/_extensions/controls_js_sim/dynamic-shooting.js index bf9790a893..956e0a7b59 100644 --- a/source/_extensions/controls_js_sim/dynamic-shooting.js +++ b/source/_extensions/controls_js_sim/dynamic-shooting.js @@ -18,9 +18,10 @@ class DynamicShootingWidget { this.robotVelocityX = 0.0; this.robotVelocityY = 0.0; this.numIterations = 10; // Number of iterations to compute and display - this.currentIteration = 1; // Which iteration to highlight/display (1 to numIterations) + this.currentIteration = 1; // Which iteration to highlight (simulation) / envelope N (fractal) this.projectileSpeed = 3.5; // m/s this.convergenceTolerance = 0.1; // meters + this.mode = "simulation"; // "simulation" | "fractal" // Set initial values on visualization this.visualization.setNumIterations(this.numIterations); @@ -43,48 +44,59 @@ class DynamicShootingWidget { } buildControlTable(divIdPrefix) { - // Clear the old control table and use the control div for our control bar - this.controlDrawDiv.innerHTML = ""; // Clear existing content - this.controlDrawDiv.style.display = "flex"; // Use flex layout + this.controlDrawDiv.innerHTML = ""; + this.controlDrawDiv.style.display = "flex"; + this.controlDrawDiv.style.flexDirection = "column"; this.controlDrawDiv.style.alignItems = "center"; - this.controlDrawDiv.style.justifyContent = "center"; - this.controlDrawDiv.style.gap = "10px"; - this.controlDrawDiv.style.padding = "5px"; + this.controlDrawDiv.style.gap = "6px"; + this.controlDrawDiv.style.padding = "6px 5px"; this.controlDrawDiv.style.backgroundColor = "#f5f5f5"; this.controlDrawDiv.style.borderTop = "1px solid #ddd"; - this.controlDrawDiv.style.width = "100%"; // Full width - this.controlDrawDiv.style.flexShrink = "0"; // Don't shrink - this.controlDrawDiv.style.flexBasis = "auto"; // Natural height - this.controlDrawDiv.style.order = "2"; // Ensure it appears after visualization - this.controlDrawDiv.style.position = "relative"; // Proper positioning - this.controlDrawDiv.style.zIndex = "10"; // Ensure it's above canvas elements - this.controlDrawDiv.style.boxSizing = "border-box"; // Include padding in size - - // Create a tiny control bar - we'll add elements directly to controlDrawDiv - const controlBar = this.controlDrawDiv; - - // Iteration label + this.controlDrawDiv.style.width = "100%"; + this.controlDrawDiv.style.flexShrink = "0"; + this.controlDrawDiv.style.boxSizing = "border-box"; + this.controlDrawDiv.style.position = "relative"; + this.controlDrawDiv.style.zIndex = "10"; + + // Row 1: Mode toggle only + const row1 = document.createElement("div"); + row1.style.cssText = "display: flex; align-items: center; justify-content: center; gap: 6px;"; + const simBtn = document.createElement("button"); + simBtn.innerHTML = "Simulation"; + simBtn.setAttribute("id", divIdPrefix + "_mode_sim"); + simBtn.style.cssText = "padding: 2px 10px; font-size: 12px; cursor: pointer;"; + simBtn.onclick = function() { this.setMode("simulation"); }.bind(this); + row1.appendChild(simBtn); + const fractBtn = document.createElement("button"); + fractBtn.innerHTML = "Fractal"; + fractBtn.setAttribute("id", divIdPrefix + "_mode_fractal"); + fractBtn.style.cssText = "padding: 2px 10px; font-size: 12px; cursor: pointer;"; + fractBtn.onclick = function() { this.setMode("fractal"); }.bind(this); + row1.appendChild(fractBtn); + this.modeSimBtn = simBtn; + this.modeFractalBtn = fractBtn; + this.controlDrawDiv.appendChild(row1); + + // Row 2: Iterations, speed, tolerance (same controls in both modes) + const row2 = document.createElement("div"); + row2.style.cssText = "display: flex; align-items: center; justify-content: center; flex-wrap: nowrap; gap: 6px; font-size: 12px;"; + const controlBar = row2; + const iterationLabel = document.createElement("label"); iterationLabel.innerHTML = "Iterations:"; iterationLabel.style.cssText = "font-size: 12px; margin-right: 5px;"; controlBar.appendChild(iterationLabel); - - // Previous button const prevButton = document.createElement("button"); prevButton.innerHTML = "◀"; prevButton.style.cssText = "padding: 2px 8px; font-size: 12px; cursor: pointer;"; prevButton.onclick = function() { if (this.currentIteration > 1) { this.currentIteration--; - if (this.iterationInput) { - this.iterationInput.value = this.currentIteration; - } + if (this.iterationInput) this.iterationInput.value = this.currentIteration; this.update(); } }.bind(this); controlBar.appendChild(prevButton); - - // Iteration number input (for which iteration to display) const input = document.createElement("INPUT"); input.setAttribute("type", "number"); input.setAttribute("min", "1"); @@ -93,10 +105,7 @@ class DynamicShootingWidget { input.setAttribute("value", "1"); input.setAttribute("id", divIdPrefix + "_iteration"); input.style.cssText = "width: 50px; padding: 2px; font-size: 12px; text-align: center;"; - - // Store reference to input for syncing this.iterationInput = input; - input.onchange = function (event) { let val = parseInt(event.target.value); if (isNaN(val) || val < 1) val = 1; @@ -105,7 +114,6 @@ class DynamicShootingWidget { event.target.value = val; this.update(); }.bind(this); - input.oninput = function (event) { let val = parseInt(event.target.value); if (!isNaN(val) && val >= 1 && val <= this.numIterations) { @@ -113,24 +121,27 @@ class DynamicShootingWidget { this.update(); } }.bind(this); - controlBar.appendChild(input); - - // Next button const nextButton = document.createElement("button"); nextButton.innerHTML = "▶"; nextButton.style.cssText = "padding: 2px 8px; font-size: 12px; cursor: pointer;"; nextButton.onclick = function() { if (this.currentIteration < this.numIterations) { this.currentIteration++; - if (this.iterationInput) { - this.iterationInput.value = this.currentIteration; - } + if (this.iterationInput) this.iterationInput.value = this.currentIteration; this.update(); } }.bind(this); controlBar.appendChild(nextButton); - + + this.setMode = function(mode) { + this.mode = mode; + this.visualization.setMode(mode); + this.modeSimBtn.style.fontWeight = mode === "simulation" ? "bold" : "normal"; + this.modeFractalBtn.style.fontWeight = mode === "fractal" ? "bold" : "normal"; + this.update(); + }.bind(this); + // Add separator const separator = document.createElement("span"); separator.innerHTML = "|"; @@ -151,7 +162,7 @@ class DynamicShootingWidget { speedSlider.setAttribute("step", "0.1"); speedSlider.setAttribute("value", this.projectileSpeed.toString()); speedSlider.setAttribute("id", divIdPrefix + "_projectile_speed"); - speedSlider.style.cssText = "width: 120px; height: 20px; margin: 0 5px; cursor: pointer;"; + speedSlider.style.cssText = "width: 100px; height: 20px; margin: 0 3px; cursor: pointer;"; // Value display const speedValueDisplay = document.createElement("span"); @@ -203,7 +214,7 @@ class DynamicShootingWidget { toleranceSlider.setAttribute("step", "0.01"); toleranceSlider.setAttribute("value", this.convergenceTolerance.toString()); toleranceSlider.setAttribute("id", divIdPrefix + "_tolerance"); - toleranceSlider.style.cssText = "width: 120px; height: 20px; margin: 0 5px; cursor: pointer;"; + toleranceSlider.style.cssText = "width: 100px; height: 20px; margin: 0 3px; cursor: pointer;"; // Value display const toleranceValueDisplay = document.createElement("span"); @@ -234,6 +245,8 @@ class DynamicShootingWidget { controlBar.appendChild(toleranceSlider); controlBar.appendChild(toleranceValueDisplay); + + this.controlDrawDiv.appendChild(row2); // Control bar is already in the right place (controlDrawDiv is in the flex-grid) // Make sure the visualization div doesn't expand into the control area @@ -298,19 +311,15 @@ class DynamicShootingWidget { } update() { - // Update visualization with current values this.visualization.setRobotVelocity(this.robotVelocityX, this.robotVelocityY); this.visualization.setCurrentIteration(this.currentIteration); this.visualization.setNumIterations(this.numIterations); this.visualization.setProjectileSpeed(this.projectileSpeed); this.visualization.setConvergenceTolerance(this.convergenceTolerance); this.visualization.update(); - - // Sync iteration input field if (this.iterationInput) { this.iterationInput.value = this.currentIteration; } - // Sync speed slider and value display if (this.speedSlider) { this.speedSlider.value = this.projectileSpeed.toString(); diff --git a/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js b/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js index 1aa73f44bb..c55567643e 100644 --- a/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js +++ b/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js @@ -200,6 +200,17 @@ class DynamicShootingVisualization extends BaseVisualization { // Drag state for velocity vector this.draggingVelocity = false; this.velocityCallback = null; // Callback to update velocity in widget + + // Mode: "simulation" (interactive velocity + shot) or "fractal" (heatmap + geodesic + envelope only) + this.mode = "simulation"; + // Fractal/heatmap state (velocity-space view) + this.heatmapData = null; + this.heatmapMaxVel = 20.0; + this.heatmapGrid = 200; + this.iterationCap = 1000; + this.heatmapVelocityScale = 1; + this.heatmapCenterX = 0; + this.heatmapCenterY = 0; // Add mouse event handlers for dragging velocity vector this.animatedCanvas.addEventListener("mousedown", event => this.handleMouseDown(event)); @@ -216,6 +227,72 @@ class DynamicShootingVisualization extends BaseVisualization { setVelocityCallback(callback) { this.velocityCallback = callback; } + + setMode(mode) { + if (this.mode === mode) return; + this.mode = mode; + if (this.mode === "fractal") { + this.computeRegionOfConvergence(); + this.computeHeatmap(); + this.drawStatic(); + this.drawDynamic(); + } + } + + // Same scale as simulation: velocity space centered at robot, using reference TOF * field scale + velocityToCanvas(vx, vy) { + const robotCanvas = this.coords.worldToCanvas(this.robotPos.x, this.robotPos.y); + const velScale = this.getReferenceTOF() * this.coords.getScale(); + return { + x: robotCanvas.x + vx * velScale, + y: robotCanvas.y - vy * velScale + }; + } + + // Dark green (few iterations) → white (many iterations / cap), logarithmic scaling + static iterationToColor(k, cap) { + if (cap <= 1) return "rgb(0, 68, 27)"; + const t = Math.log(k) / Math.log(cap); // 0 = 1 iteration, 1 = cap iterations + const r = Math.round(0 + t * 255); + const g = Math.round(68 + t * 187); + const b = Math.round(27 + t * 228); + return "rgb(" + r + "," + g + "," + b + ")"; + } + + // Compute the visible velocity bounds from the canvas geometry + getVisibleVelocityBounds() { + const robotCanvas = this.coords.worldToCanvas(this.robotPos.x, this.robotPos.y); + const velScale = this.getReferenceTOF() * this.coords.getScale(); + if (velScale <= 0) return { vxMin: -10, vxMax: 10, vyMin: -10, vyMax: 10 }; + const vxMin = -(robotCanvas.x) / velScale; + const vxMax = (this.width - robotCanvas.x) / velScale; + const vyMin = -(this.height - robotCanvas.y) / velScale; + const vyMax = (robotCanvas.y) / velScale; + return { vxMin, vxMax, vyMin, vyMax }; + } + + computeHeatmap() { + if (!this.robotPos || !this.targetPos) return; + const cap = this.iterationCap; + const n = this.heatmapGrid; + const bounds = this.getVisibleVelocityBounds(); + this.heatmapBounds = bounds; + const stepX = (bounds.vxMax - bounds.vxMin) / n; + const stepY = (bounds.vyMax - bounds.vyMin) / n; + const data = []; + for (let j = 0; j < n; j++) { + const row = []; + for (let i = 0; i < n; i++) { + const vx = bounds.vxMin + (i + 0.5) * stepX; + const vy = bounds.vyMax - (j + 0.5) * stepY; + const vel = { x: vx, y: vy }; + const k = this.getIterationsToConvergence(vel, cap); + row.push(k); + } + data.push(row); + } + this.heatmapData = data; + } getCursorPosition(event) { const rect = this.animatedCanvas.getBoundingClientRect(); @@ -464,6 +541,21 @@ class DynamicShootingVisualization extends BaseVisualization { return iterations; } + // Returns the 1-based iteration count at which convergence is achieved (final landing within + // convergenceTolerance of target), or maxIter if never achieved within maxIter iterations. + getIterationsToConvergence(robotVel, maxIter) { + const iterations = this.runIterations(robotVel, maxIter); + for (let k = 0; k < iterations.length; k++) { + const iter = iterations[k]; + const dx = iter.actualTrajectoryEnd.x - this.targetPos.x; + const dy = iter.actualTrajectoryEnd.y - this.targetPos.y; + if (Math.sqrt(dx * dx + dy * dy) <= this.convergenceTolerance) { + return k + 1; + } + } + return maxIter; + } + // Check if a velocity causes convergence failure // Returns true if the algorithm fails to converge within tolerance checkConvergenceFailure(robotVel, maxIter) { @@ -493,59 +585,60 @@ class DynamicShootingVisualization extends BaseVisualization { return distance > this.convergenceTolerance; } - // Compute region of convergence by casting velocity rays - computeRegionOfConvergence() { + // Compute region of convergence by casting velocity rays. + // If maxIter is provided, use it; otherwise use this.currentIteration. Returns the region array + // when maxIter is provided (does not store); otherwise stores in this.regionOfConvergence. + computeRegionOfConvergence(maxIter) { // Guard against uninitialized positions if (!this.robotPos || !this.targetPos) { - return; + return maxIter !== undefined ? [] : null; } - + // Ensure target radius is calculated (tolerance is user-configurable, not calculated) if (this.targetRadius === null) { this.targetRadius = this.coords.pixelsToWorldDistance(this.targetPixelRadius); } - - this.regionOfConvergence = []; - + + const limit = maxIter !== undefined ? maxIter : this.currentIteration; + const result = []; + // Cast rays at 1 degree intervals (360 rays total) const numRays = 360; const angleStep = 360 / numRays; - + // Linear search parameters const velocityStep = 0.05; // Step size in m/s const maxVelocity = 20.0; // Maximum velocity to search (m/s) - + for (let i = 0; i < numRays; i++) { const angleDeg = i * angleStep; const angleRad = (angleDeg * Math.PI) / 180; - + // Walk outward linearly from zero velocity until convergence fails - let minFailureVel = null; // Minimum velocity at which convergence fails - + let minFailureVel = null; + for (let testVel = 0.0; testVel <= maxVelocity; testVel += velocityStep) { - // Calculate velocity vector in this direction const testRobotVel = { x: testVel * Math.cos(angleRad), y: testVel * Math.sin(angleRad) }; - - // Check if this velocity causes convergence failure - // Use currentIteration as the limit - this shows what converges within that many iterations - const fails = this.checkConvergenceFailure(testRobotVel, this.currentIteration); - + const fails = this.checkConvergenceFailure(testRobotVel, limit); if (fails) { - // Found the minimum velocity at which convergence fails minFailureVel = testVel; break; } } - - // Store the result (use maxVelocity if no failure found, or the found minimum) - this.regionOfConvergence.push({ + + result.push({ angle: angleDeg, maxVelocity: minFailureVel !== null ? minFailureVel : maxVelocity }); } + + if (maxIter === undefined) { + this.regionOfConvergence = result; + } + return result; } // Run the dynamic shooting recursion algorithm @@ -556,40 +649,50 @@ class DynamicShootingVisualization extends BaseVisualization { drawStaticCustom() { const ctx = this.staticCanvasContext; - - // Draw field background + if (this.mode === "fractal") { + this.drawStaticFractal(ctx); + return; + } + // Simulation: field background and grid ctx.fillStyle = "#E8F5E9"; ctx.fillRect(0, 0, this.width, this.height); - - // Draw grid - use full display area, no padding ctx.strokeStyle = "#C8E6C9"; ctx.lineWidth = 1; - const scale = this.coords.getScale(); const centerX = this.coords.centerX; const centerY = this.coords.centerY; - - // Draw grid lines - cover full 15m x 15m field - // Use 15 grid lines for 15m field (one per meter) for (let i = 0; i <= 15; i++) { const worldX = i * this.fieldWidth / 15; const worldY = i * this.fieldHeight / 15; const canvasX = centerX + (worldX - this.coords.fieldCenterX) * scale; const canvasY = centerY - (worldY - this.coords.fieldCenterY) * scale; - - // Vertical line ctx.beginPath(); ctx.moveTo(canvasX, 0); ctx.lineTo(canvasX, this.height); ctx.stroke(); - - // Horizontal line ctx.beginPath(); ctx.moveTo(0, canvasY); ctx.lineTo(this.width, canvasY); ctx.stroke(); } } + + drawStaticFractal(ctx) { + ctx.fillStyle = "#E8F5E9"; + ctx.fillRect(0, 0, this.width, this.height); + if (!this.heatmapData || !this.heatmapBounds) return; + const n = this.heatmapData.length; + const cellW = this.width / n; + const cellH = this.height / n; + const cap = this.iterationCap; + for (let j = 0; j < n; j++) { + for (let i = 0; i < n; i++) { + const k = this.heatmapData[j][i]; + ctx.fillStyle = DynamicShootingVisualization.iterationToColor(k, cap); + ctx.fillRect(i * cellW, j * cellH, cellW + 1, cellH + 1); + } + } + } drawRobot(ctx) { const robotCanvas = this.coords.worldToCanvas(this.robotPos.x, this.robotPos.y); @@ -667,31 +770,134 @@ class DynamicShootingVisualization extends BaseVisualization { drawDynamicCustom() { const ctx = this.animatedCanvasContext; - - // Always draw robot and target, even if no iterations yet - // Guard against uninitialized positions - if (!this.robotPos || !this.targetPos) { + if (this.mode === "fractal") { + if (this.robotPos && this.targetPos) { + this.drawRobot(ctx); + this.drawTarget(ctx); + } + this.drawGeodesicVelocitySpace(ctx); + this.drawEnvelopeVelocitySpace(ctx); + this.drawFractalLegend(ctx); return; } - - // Draw robot and get its canvas position + if (!this.robotPos || !this.targetPos) return; const robotCanvas = this.drawRobot(ctx); - - // Draw velocity vector this.drawVelocityVector(ctx, robotCanvas); - - // Draw target this.drawTarget(ctx); - - // Draw region of convergence this.drawRegionOfConvergence(ctx, robotCanvas); - - // Draw geodesic of maximum recursion stability this.drawGeodesic(ctx, robotCanvas); - - // Draw iterations up to currentIteration this.drawIterations(ctx, robotCanvas); } + + drawGeodesicVelocitySpace(ctx) { + if (!this.robotPos || !this.targetPos) return; + ctx.save(); + ctx.strokeStyle = "#9B59B6"; + ctx.lineWidth = 2; + ctx.setLineDash([5, 5]); + const dx = this.targetPos.x - this.robotPos.x; + const dy = this.targetPos.y - this.robotPos.y; + const targetDirection = Math.atan2(dy, dx); + const vp = this.projectileSpeed; + const maxVelocity = this.heatmapMaxVel; + const asymptoteThreshold = 0.05; + const numPoints = 180; + const thetaRange = Math.PI / 2 - asymptoteThreshold; + const thetaStep = thetaRange / numPoints; + for (const sign of [-1, 1]) { + ctx.beginPath(); + let first = true; + for (let i = 0; i <= numPoints; i++) { + const theta = sign * (asymptoteThreshold + i * thetaStep); + if (Math.abs(theta) >= Math.PI / 2 - asymptoteThreshold) continue; + const cotTheta = Math.cos(theta) / Math.sin(theta); + const vel = vp * cotTheta; + if (Math.abs(vel) > maxVelocity) { + if (!first) ctx.stroke(); + ctx.beginPath(); + first = true; + continue; + } + const angleRad = theta + targetDirection; + const vx = Math.abs(vel) * Math.cos(angleRad); + const vy = Math.abs(vel) * Math.sin(angleRad); + const pt = this.velocityToCanvas(vx, vy); + if (first) { ctx.moveTo(pt.x, pt.y); first = false; } else { ctx.lineTo(pt.x, pt.y); } + } + if (!first) ctx.stroke(); + } + ctx.restore(); + } + + drawEnvelopeVelocitySpace(ctx) { + if (!this.regionOfConvergence || this.regionOfConvergence.length === 0) return; + ctx.save(); + ctx.strokeStyle = "#2E86AB"; + ctx.lineWidth = 2; + ctx.setLineDash([5, 5]); + ctx.beginPath(); + let first = true; + for (let i = 0; i < this.regionOfConvergence.length; i++) { + const p = this.regionOfConvergence[i]; + const angleRad = (p.angle * Math.PI) / 180; + const vx = p.maxVelocity * Math.cos(angleRad); + const vy = p.maxVelocity * Math.sin(angleRad); + const pt = this.velocityToCanvas(vx, vy); + if (first) { ctx.moveTo(pt.x, pt.y); first = false; } else { ctx.lineTo(pt.x, pt.y); } + } + const p0 = this.regionOfConvergence[0]; + const a0 = (p0.angle * Math.PI) / 180; + const pt0 = this.velocityToCanvas(p0.maxVelocity * Math.cos(a0), p0.maxVelocity * Math.sin(a0)); + ctx.lineTo(pt0.x, pt0.y); + ctx.stroke(); + ctx.restore(); + } + + drawFractalLegend(ctx) { + const cap = this.iterationCap; + const margin = 12; + const barWidth = 18; + const barHeight = 180; + const x0 = this.width - margin - barWidth - 36; + const y0 = margin + 36; // leave room for title above bar + ctx.save(); + // Title above the bar + ctx.fillStyle = "#000"; + ctx.font = "11px Arial"; + ctx.textAlign = "right"; + ctx.fillText("Iterations", x0 + barWidth, y0 - 24); + ctx.fillText("to converge", x0 + barWidth, y0 - 12); + // Draw bar (log-scaled: position t maps to k = cap^t) + ctx.strokeStyle = "#333"; + ctx.lineWidth = 1; + ctx.strokeRect(x0, y0, barWidth, barHeight); + const nSteps = 96; + for (let i = 0; i < nSteps; i++) { + const t = i / (nSteps - 1); + const k = Math.pow(cap, t); // log scaling: 1 at top, cap at bottom + ctx.fillStyle = DynamicShootingVisualization.iterationToColor(Math.round(Math.max(1, k)), cap); + const sy = y0 + t * barHeight; + const sh = Math.ceil(barHeight / nSteps) + 1; + ctx.fillRect(x0, sy, barWidth, sh); + } + // Tick marks and labels: logarithmically-spaced values + const ticks = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000].filter(v => v <= cap); + ctx.fillStyle = "#000"; + ctx.font = "10px Arial"; + ctx.textAlign = "right"; + ctx.strokeStyle = "#000"; + ctx.lineWidth = 1; + for (const tick of ticks) { + const t = Math.log(tick) / Math.log(cap); + const ty = y0 + t * barHeight; + ctx.beginPath(); + ctx.moveTo(x0, ty); + ctx.lineTo(x0 - 4, ty); + ctx.stroke(); + ctx.fillText(String(tick), x0 - 6, ty + 4); + } + ctx.restore(); + } drawRegionOfConvergence(ctx, robotCanvas) { if (!this.regionOfConvergence || this.regionOfConvergence.length === 0) { @@ -976,30 +1182,37 @@ class DynamicShootingVisualization extends BaseVisualization { setCurrentIteration(iter) { if (this.currentIteration !== iter) { this.currentIteration = iter; - // Recompute region of convergence when current iteration changes - // The region shows what converges within this many iterations - this.computeRegionOfConvergence(); + if (this.mode === "fractal") { + this.scheduleFractalUpdate(); + } else { + this.computeRegionOfConvergence(); + } } } setNumIterations(numIter) { this.numIterations = numIter; - // Note: Region uses currentIteration, not numIterations } setProjectileSpeed(speed) { if (this.projectileSpeed !== speed) { this.projectileSpeed = speed; - // Recompute region of convergence when projectile speed changes - this.computeRegionOfConvergence(); + if (this.mode === "fractal") { + this.scheduleFractalUpdate(); + } else { + this.computeRegionOfConvergence(); + } } } setConvergenceTolerance(tolerance) { if (this.convergenceTolerance !== tolerance) { this.convergenceTolerance = tolerance; - // Recompute region of convergence when tolerance changes - this.computeRegionOfConvergence(); + if (this.mode === "fractal") { + this.scheduleFractalUpdate(); + } else { + this.computeRegionOfConvergence(); + } } } @@ -1055,20 +1268,45 @@ class DynamicShootingVisualization extends BaseVisualization { // Recompute region of convergence since scale changed (affects target radius calculation) this.computeRegionOfConvergence(); - + if (this.mode === "fractal") { + this.scheduleFractalUpdate(); + } // Always redraw after size update this.drawStatic(); this.drawDynamic(); } + // Debounced fractal update: waits for inputs to settle before recomputing the expensive heatmap + scheduleFractalUpdate() { + if (this._fractalDebounceTimer) { + clearTimeout(this._fractalDebounceTimer); + } + // Immediately redraw overlays (envelope, geodesic, legend, robot, target) with stale heatmap + this.computeRegionOfConvergence(); + this.drawStatic(); + this.drawDynamic(); + // Debounce the expensive heatmap recomputation + this._fractalDebounceTimer = setTimeout(() => { + this._fractalDebounceTimer = null; + this.computeHeatmap(); + this.computeRegionOfConvergence(); + this.drawStatic(); + this.drawDynamic(); + }, 250); + } + update() { - // Always run recursion to populate iterations array + if (this.mode === "fractal") { + // In fractal mode, update() only redraws with existing data (cheap). + // Heatmap recomputation is triggered only by scheduleFractalUpdate(). + this.drawStatic(); + this.drawDynamic(); + return; + } this.runRecursion(this.robotVelocity, this.numIterations); - // Ensure we have at least one iteration to show if (this.currentIteration < 1 && this.iterations.length > 0) { this.currentIteration = 1; } - // Always draw, even if no iterations yet (to show robot, target, and velocity vector) this.drawStatic(); this.drawDynamic(); } diff --git a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst index a8c16dead5..3f125f11e6 100644 --- a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst @@ -26,9 +26,9 @@ If we did not record the time-of-flight measurements in the look-up table, we wo Interactive Visualization ------------------------- -Interact with the simulation below to see how the dynamic shooting recursion algorithm works. Adjust the robot velocity, projectile velocity, shot tolerance, and iteration number to see how the algorithm converges to the correct shot (or doesn't). +Interact with the simulation below to see how the dynamic shooting recursion algorithm works. Use **Simulation** mode to drag the robot velocity and step through iterations; use **Fractal** mode to see a heatmap of iterations-to-convergence over velocity space (with the same geodesic and convergence envelope). The iteration control affects only the convergence envelope (in both modes). Adjust projectile velocity and tolerance to see how the algorithm converges. -.. note:: The visualization shows a top-down view of a 2D game field. The robot is shown in blue, the target in orange. The (draggable) robot velocity vector points in the direction of motion. For each iteration, the virtual target (shown in green) is offset by the time-of-flight multiplied by the robot velocity vector. The actual trajectory (shown in red) shows where the projectile actually would actually land, if fired at that iteration. The blue envelope shows the region of convergence of the algorithm: the maximum velocity that can be achieved within the given number of iterations, within the specified tolerance. The purple geodesic represents velocity vectors that are "optimal" in the sense that they have the best possible convergence behavior given their magnitude - notice how the convergence envelope follows the shape of the geodesic as it expands with increasing iteration count. +.. note:: In **Simulation** mode the view is a top-down 2D game field: the robot is blue, the target orange. The (draggable) robot velocity vector shows motion. For each iteration, the virtual target (green) is offset by time-of-flight times robot velocity; the actual trajectory (red) shows where the shot would land. The blue envelope is the region of convergence (max velocity that converges within the chosen iteration count and tolerance). The purple geodesic is the "maximum stability" curve. In **Fractal** mode the same envelope and geodesic are overlaid on a heatmap of how many iterations until convergence at each velocity (green = fast, red = slow or no convergence). .. raw:: html From af21bb5e9008e273006d625c2209f8ef40f1cf20 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Sun, 8 Feb 2026 19:17:09 -0500 Subject: [PATCH 118/135] add newton's method shooting page --- .../controls_js_sim/newton-shooting.js | 395 ++++++++++++++++++ .../newton-shooting-visualization.js | 154 +++++++ .../fire-control/dynamic-shooting.rst | 4 +- .../advanced-controls/fire-control/index.rst | 1 + .../fire-control/newton-shooting.rst | 116 +++++ 5 files changed, 668 insertions(+), 2 deletions(-) create mode 100644 source/_extensions/controls_js_sim/newton-shooting.js create mode 100644 source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js create mode 100644 source/docs/software/advanced-controls/fire-control/newton-shooting.rst diff --git a/source/_extensions/controls_js_sim/newton-shooting.js b/source/_extensions/controls_js_sim/newton-shooting.js new file mode 100644 index 0000000000..5c95406411 --- /dev/null +++ b/source/_extensions/controls_js_sim/newton-shooting.js @@ -0,0 +1,395 @@ +class NewtonShootingWidget { + constructor(divIdPrefix) { + this.divIdPrefix = divIdPrefix; + + this.containerDiv = document.getElementById(divIdPrefix + "_container"); + this.visualizationDrawDiv = document.getElementById(divIdPrefix + "_viz"); + this.controlDrawDiv = document.getElementById(divIdPrefix + "_ctrls"); + + if (!this.containerDiv || !this.visualizationDrawDiv || !this.controlDrawDiv) { + console.error("[NewtonShootingWidget] Missing required DOM elements!"); + return; + } + + // Use the Newton-capable visualization + this.visualization = new NewtonShootingVisualization(this.visualizationDrawDiv); + + // Default values + this.robotVelocityX = 0.0; + this.robotVelocityY = 0.0; + this.numIterations = 10; + this.currentIteration = 1; + this.projectileSpeed = 3.5; + this.convergenceTolerance = 0.1; + this.activeMode = "newton"; // "newton" | "fixed-point" | "simulation" + + this.visualization.setNumIterations(this.numIterations); + this.visualization.setProjectileSpeed(this.projectileSpeed); + this.visualization.setConvergenceTolerance(this.convergenceTolerance); + + this.buildControlTable(divIdPrefix); + + if (this.containerDiv) { + var width = this.containerDiv.offsetWidth || this.containerDiv.clientWidth; + if (width > 0) { + this.containerDiv.style.height = width + "px"; + } + } + + this.update(); + } + + buildControlTable(divIdPrefix) { + this.controlDrawDiv.innerHTML = ""; + this.controlDrawDiv.style.display = "flex"; + this.controlDrawDiv.style.flexDirection = "column"; + this.controlDrawDiv.style.alignItems = "center"; + this.controlDrawDiv.style.gap = "6px"; + this.controlDrawDiv.style.padding = "6px 5px"; + this.controlDrawDiv.style.backgroundColor = "#f5f5f5"; + this.controlDrawDiv.style.borderTop = "1px solid #ddd"; + this.controlDrawDiv.style.width = "100%"; + this.controlDrawDiv.style.flexShrink = "0"; + this.controlDrawDiv.style.boxSizing = "border-box"; + this.controlDrawDiv.style.position = "relative"; + this.controlDrawDiv.style.zIndex = "10"; + + // ── Row 1: Mode toggle ────────────────────────────────────────────────── + var row1 = document.createElement("div"); + row1.style.cssText = + "display: flex; align-items: center; justify-content: center; gap: 6px;"; + + var simNewtonBtn = document.createElement("button"); + simNewtonBtn.innerHTML = "Simulation (Newton)"; + simNewtonBtn.style.cssText = + "padding: 2px 10px; font-size: 12px; cursor: pointer;"; + simNewtonBtn.onclick = function () { + this.setActiveMode("sim-newton"); + }.bind(this); + row1.appendChild(simNewtonBtn); + + var simFixedBtn = document.createElement("button"); + simFixedBtn.innerHTML = "Simulation (Fixed-Point)"; + simFixedBtn.style.cssText = + "padding: 2px 10px; font-size: 12px; cursor: pointer;"; + simFixedBtn.onclick = function () { + this.setActiveMode("sim-fixed"); + }.bind(this); + row1.appendChild(simFixedBtn); + + var newtonBtn = document.createElement("button"); + newtonBtn.innerHTML = "Fractal (Newton)"; + newtonBtn.style.cssText = + "padding: 2px 10px; font-size: 12px; cursor: pointer;"; + newtonBtn.onclick = function () { + this.setActiveMode("newton"); + }.bind(this); + row1.appendChild(newtonBtn); + + var fixedBtn = document.createElement("button"); + fixedBtn.innerHTML = "Fractal (Fixed-Point)"; + fixedBtn.style.cssText = + "padding: 2px 10px; font-size: 12px; cursor: pointer;"; + fixedBtn.onclick = function () { + this.setActiveMode("fixed-point"); + }.bind(this); + row1.appendChild(fixedBtn); + + this.simNewtonBtn = simNewtonBtn; + this.simFixedBtn = simFixedBtn; + this.newtonBtn = newtonBtn; + this.fixedBtn = fixedBtn; + this.controlDrawDiv.appendChild(row1); + + // ── Row 2: Iterations · Speed · Tolerance ─────────────────────────────── + var row2 = document.createElement("div"); + row2.style.cssText = + "display: flex; align-items: center; justify-content: center; flex-wrap: nowrap; gap: 6px; font-size: 12px;"; + var controlBar = row2; + + // Iteration controls + var iterationLabel = document.createElement("label"); + iterationLabel.innerHTML = "Iterations:"; + iterationLabel.style.cssText = "font-size: 12px; margin-right: 5px;"; + controlBar.appendChild(iterationLabel); + + var prevButton = document.createElement("button"); + prevButton.innerHTML = "◀"; + prevButton.style.cssText = + "padding: 2px 8px; font-size: 12px; cursor: pointer;"; + prevButton.onclick = function () { + if (this.currentIteration > 1) { + this.currentIteration--; + if (this.iterationInput) + this.iterationInput.value = this.currentIteration; + this.update(); + } + }.bind(this); + controlBar.appendChild(prevButton); + + var input = document.createElement("INPUT"); + input.setAttribute("type", "number"); + input.setAttribute("min", "1"); + input.setAttribute("max", this.numIterations.toString()); + input.setAttribute("step", "1"); + input.setAttribute("value", "1"); + input.style.cssText = + "width: 50px; padding: 2px; font-size: 12px; text-align: center;"; + this.iterationInput = input; + input.onchange = function (event) { + var val = parseInt(event.target.value); + if (isNaN(val) || val < 1) val = 1; + if (val > this.numIterations) val = this.numIterations; + this.currentIteration = val; + event.target.value = val; + this.update(); + }.bind(this); + input.oninput = function (event) { + var val = parseInt(event.target.value); + if (!isNaN(val) && val >= 1 && val <= this.numIterations) { + this.currentIteration = val; + this.update(); + } + }.bind(this); + controlBar.appendChild(input); + + var nextButton = document.createElement("button"); + nextButton.innerHTML = "▶"; + nextButton.style.cssText = + "padding: 2px 8px; font-size: 12px; cursor: pointer;"; + nextButton.onclick = function () { + if (this.currentIteration < this.numIterations) { + this.currentIteration++; + if (this.iterationInput) + this.iterationInput.value = this.currentIteration; + this.update(); + } + }.bind(this); + controlBar.appendChild(nextButton); + + // Separator + var separator = document.createElement("span"); + separator.innerHTML = "|"; + separator.style.cssText = + "margin: 0 10px; color: #999; font-size: 12px;"; + controlBar.appendChild(separator); + + // Projectile speed + var speedLabel = document.createElement("label"); + speedLabel.innerHTML = "Projectile Speed (m/s):"; + speedLabel.style.cssText = "font-size: 12px; margin-right: 5px;"; + controlBar.appendChild(speedLabel); + + var speedSlider = document.createElement("INPUT"); + speedSlider.setAttribute("type", "range"); + speedSlider.setAttribute("min", "0.1"); + speedSlider.setAttribute("max", "20.0"); + speedSlider.setAttribute("step", "0.1"); + speedSlider.setAttribute("value", this.projectileSpeed.toString()); + speedSlider.style.cssText = + "width: 100px; height: 20px; margin: 0 3px; cursor: pointer;"; + + var speedValueDisplay = document.createElement("span"); + speedValueDisplay.innerHTML = this.projectileSpeed.toFixed(1); + speedValueDisplay.style.cssText = + "font-size: 12px; min-width: 35px; text-align: center; display: inline-block;"; + + this.speedSlider = speedSlider; + this.speedValueDisplay = speedValueDisplay; + + speedSlider.oninput = function (event) { + var val = parseFloat(event.target.value); + if (!isNaN(val) && val >= 0.1 && val <= 20.0) { + this.projectileSpeed = val; + this.speedValueDisplay.innerHTML = val.toFixed(1); + this.update(); + } + }.bind(this); + speedSlider.onchange = function (event) { + var val = parseFloat(event.target.value); + if (isNaN(val) || val < 0.1) val = 0.1; + if (val > 20.0) val = 20.0; + this.projectileSpeed = val; + this.speedValueDisplay.innerHTML = val.toFixed(1); + this.update(); + }.bind(this); + + controlBar.appendChild(speedSlider); + controlBar.appendChild(speedValueDisplay); + + // Separator + var separator2 = document.createElement("span"); + separator2.innerHTML = "|"; + separator2.style.cssText = + "margin: 0 10px; color: #999; font-size: 12px;"; + controlBar.appendChild(separator2); + + // Tolerance + var toleranceLabel = document.createElement("label"); + toleranceLabel.innerHTML = "Tolerance (m):"; + toleranceLabel.style.cssText = "font-size: 12px; margin-right: 5px;"; + controlBar.appendChild(toleranceLabel); + + var toleranceSlider = document.createElement("INPUT"); + toleranceSlider.setAttribute("type", "range"); + toleranceSlider.setAttribute("min", "0.01"); + toleranceSlider.setAttribute("max", "1.0"); + toleranceSlider.setAttribute("step", "0.01"); + toleranceSlider.setAttribute( + "value", + this.convergenceTolerance.toString() + ); + toleranceSlider.style.cssText = + "width: 100px; height: 20px; margin: 0 3px; cursor: pointer;"; + + var toleranceValueDisplay = document.createElement("span"); + toleranceValueDisplay.innerHTML = this.convergenceTolerance.toFixed(2); + toleranceValueDisplay.style.cssText = + "font-size: 12px; min-width: 40px; text-align: center; display: inline-block;"; + + this.toleranceSlider = toleranceSlider; + this.toleranceValueDisplay = toleranceValueDisplay; + + toleranceSlider.oninput = function (event) { + var val = parseFloat(event.target.value); + if (!isNaN(val) && val >= 0.01 && val <= 1.0) { + this.convergenceTolerance = val; + this.toleranceValueDisplay.innerHTML = val.toFixed(2); + this.update(); + } + }.bind(this); + toleranceSlider.onchange = function (event) { + var val = parseFloat(event.target.value); + if (isNaN(val) || val < 0.01) val = 0.01; + if (val > 1.0) val = 1.0; + this.convergenceTolerance = val; + this.toleranceValueDisplay.innerHTML = val.toFixed(2); + this.update(); + }.bind(this); + + controlBar.appendChild(toleranceSlider); + controlBar.appendChild(toleranceValueDisplay); + + this.controlDrawDiv.appendChild(row2); + + // ── Flex layout (same as DynamicShootingWidget) ───────────────────────── + if (this.visualizationDrawDiv.parentNode) { + var flexGrid = this.visualizationDrawDiv.parentNode; + if (flexGrid.classList && flexGrid.classList.contains("flex-grid")) { + flexGrid.style.flexDirection = "column"; + flexGrid.style.alignItems = "stretch"; + flexGrid.style.height = "100%"; + flexGrid.style.width = "100%"; + flexGrid.style.margin = "0"; + flexGrid.style.padding = "0"; + flexGrid.style.boxSizing = "border-box"; + + this.visualizationDrawDiv.style.minHeight = "0"; + this.visualizationDrawDiv.style.maxHeight = "none"; + this.visualizationDrawDiv.style.height = "auto"; + this.visualizationDrawDiv.style.flex = "1 1 auto"; + this.visualizationDrawDiv.style.overflow = "hidden"; + this.visualizationDrawDiv.style.position = "relative"; + this.visualizationDrawDiv.style.order = "1"; + this.visualizationDrawDiv.style.width = "100%"; + this.visualizationDrawDiv.style.boxSizing = "border-box"; + + this.controlDrawDiv.style.flex = "0 0 auto"; + this.controlDrawDiv.style.order = "2"; + } + } + + // Make container square + if (this.containerDiv) { + this.containerDiv.style.overflow = "hidden"; + this.containerDiv.style.width = "100%"; + + var self = this; + var makeSquare = function () { + var w = + self.containerDiv.offsetWidth || self.containerDiv.clientWidth; + if (w > 0) { + self.containerDiv.style.height = w + "px"; + if (self.visualization) { + self.visualization.updateSize(); + self.update(); + } + } + }; + + window.addEventListener("resize", makeSquare); + } + + // Velocity callback for simulation-mode dragging + this.visualization.setVelocityCallback( + function (velX, velY) { + this.robotVelocityX = velX; + this.robotVelocityY = velY; + this.update(); + }.bind(this) + ); + + // Set initial mode (matches first button) + this.setActiveMode("sim-newton"); + } + + setActiveMode(mode) { + this.activeMode = mode; + + // Update button styles + this.simNewtonBtn.style.fontWeight = + mode === "sim-newton" ? "bold" : "normal"; + this.simFixedBtn.style.fontWeight = + mode === "sim-fixed" ? "bold" : "normal"; + this.newtonBtn.style.fontWeight = mode === "newton" ? "bold" : "normal"; + this.fixedBtn.style.fontWeight = + mode === "fixed-point" ? "bold" : "normal"; + + // Update visualisation mode and solver method + if (mode === "newton") { + this.visualization.setSolverMethod("newton"); + this.visualization.setMode("fractal"); + } else if (mode === "fixed-point") { + this.visualization.setSolverMethod("fixed-point"); + this.visualization.setMode("fractal"); + } else if (mode === "sim-fixed") { + this.visualization.setSolverMethod("fixed-point"); + this.visualization.setMode("simulation"); + } else { + // sim-newton (default) + this.visualization.setSolverMethod("newton"); + this.visualization.setMode("simulation"); + } + + this.update(); + } + + update() { + this.visualization.setRobotVelocity( + this.robotVelocityX, + this.robotVelocityY + ); + this.visualization.setCurrentIteration(this.currentIteration); + this.visualization.setNumIterations(this.numIterations); + this.visualization.setProjectileSpeed(this.projectileSpeed); + this.visualization.setConvergenceTolerance(this.convergenceTolerance); + this.visualization.update(); + + if (this.iterationInput) { + this.iterationInput.value = this.currentIteration; + } + if (this.speedSlider) { + this.speedSlider.value = this.projectileSpeed.toString(); + } + if (this.speedValueDisplay) { + this.speedValueDisplay.innerHTML = this.projectileSpeed.toFixed(1); + } + if (this.toleranceSlider) { + this.toleranceSlider.value = this.convergenceTolerance.toString(); + } + if (this.toleranceValueDisplay) { + this.toleranceValueDisplay.innerHTML = + this.convergenceTolerance.toFixed(2); + } + } +} diff --git a/source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js b/source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js new file mode 100644 index 0000000000..964123dddb --- /dev/null +++ b/source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js @@ -0,0 +1,154 @@ +class NewtonShootingVisualization extends DynamicShootingVisualization { + constructor(div_in) { + super(div_in); + // solverMethod left undefined so the first setSolverMethod() call from the + // widget actually triggers envelope recomputation (the parent constructor + // already ran computeRegionOfConvergence with the fixed-point fallback). + this.solverMethod = undefined; + this.iterationCap = 20; + } + + setSolverMethod(method) { + if (this.solverMethod === method) return; + this.solverMethod = method; + this.iterationCap = method === "newton" ? 20 : 1000; + // Always recompute the envelope for the active solver + this.computeRegionOfConvergence(); + if (this.mode === "fractal") { + this.scheduleFractalUpdate(); + } + } + + // ── Newton's method iteration (full data, for simulation mode) ──────────── + + runNewtonIterations(robotVel, maxIter) { + const iterations = []; + if (!this.robotPos || !this.targetPos) return iterations; + + const dx0 = this.targetPos.x - this.robotPos.x; + const dy0 = this.targetPos.y - this.robotPos.y; + const D0 = Math.sqrt(dx0 * dx0 + dy0 * dy0); + if (D0 < 1e-10) return iterations; + + const vp = this.projectileSpeed; + const vx = robotVel.x; + const vy = robotVel.y; + + // Initial guess: straight-line TOF + let t = D0 / vp; + let prevTOF = null; + + for (let iter = 0; iter < maxIter; iter++) { + const X = dx0 - vx * t; + const Y = dy0 - vy * t; + const D = Math.sqrt(X * X + Y * Y); + if (D < 1e-10) break; + + const fD = D / vp; + const F = t - fD; + const Fprime = 1 + (X * vx + Y * vy) / (vp * D); + + const virtualTargetPos = { + x: this.targetPos.x - vx * t, + y: this.targetPos.y - vy * t + }; + const virtualTargetOffset = { x: -vx * t, y: -vy * t }; + const actualTrajectoryEnd = { + x: virtualTargetPos.x + vx * fD, + y: virtualTargetPos.y + vy * fD + }; + + iterations.push({ + iteration: iter + 1, + relativePos: { x: X, y: Y }, + tau: fD, + tau_prev: prevTOF !== null ? prevTOF : t, + virtualTargetPos: virtualTargetPos, + virtualTargetOffset: virtualTargetOffset, + actualTrajectoryEnd: actualTrajectoryEnd + }); + + // Check convergence + const edx = actualTrajectoryEnd.x - this.targetPos.x; + const edy = actualTrajectoryEnd.y - this.targetPos.y; + if (Math.sqrt(edx * edx + edy * edy) <= this.convergenceTolerance) break; + + // Guard singular derivative + if (Math.abs(Fprime) < 1e-10) break; + + // Newton step + prevTOF = t; + t = t - F / Fprime; + if (t < 0.001) t = 0.001; + } + return iterations; + } + + // ── Optimised convergence counter (no allocations, for heatmap) ─────────── + + getNewtonIterationsToConvergence(robotVel, maxIter) { + if (!this.robotPos || !this.targetPos) return maxIter; + + const dx0 = this.targetPos.x - this.robotPos.x; + const dy0 = this.targetPos.y - this.robotPos.y; + const D0 = Math.sqrt(dx0 * dx0 + dy0 * dy0); + if (D0 < 1e-10) return 1; + + const vp = this.projectileSpeed; + const vx = robotVel.x; + const vy = robotVel.y; + const vrMag = Math.sqrt(vx * vx + vy * vy); + const tol = this.convergenceTolerance; + + let t = D0 / vp; + + for (let k = 1; k <= maxIter; k++) { + const X = dx0 - vx * t; + const Y = dy0 - vy * t; + const D = Math.sqrt(X * X + Y * Y); + if (D < 1e-10) return k; + + const fD = D / vp; + const F = t - fD; + + // Landing error = |F| * |v_r| (derived from actualLanding − target = −v_r·F) + if (Math.abs(F) * vrMag <= tol) return k; + + const Fprime = 1 + (X * vx + Y * vy) / (vp * D); + if (Math.abs(Fprime) < 1e-10) return maxIter; + + t = t - F / Fprime; + if (t < 0.001) t = 0.001; + } + return maxIter; + } + + // ── Overrides so parent machinery dispatches to correct solver ──────────── + + getIterationsToConvergence(robotVel, maxIter) { + if (this.solverMethod === "newton") { + return this.getNewtonIterationsToConvergence(robotVel, maxIter); + } + return super.getIterationsToConvergence(robotVel, maxIter); + } + + runRecursion(robotVel, maxIter) { + if (this.solverMethod === "newton") { + this.iterations = this.runNewtonIterations(robotVel, maxIter); + } else { + super.runRecursion(robotVel, maxIter); + } + } + + checkConvergenceFailure(robotVel, maxIter) { + if (this.solverMethod === "newton") { + const iters = this.runNewtonIterations(robotVel, maxIter); + if (iters.length === 0) return true; + const last = iters[iters.length - 1]; + const dx = last.actualTrajectoryEnd.x - this.targetPos.x; + const dy = last.actualTrajectoryEnd.y - this.targetPos.y; + return Math.sqrt(dx * dx + dy * dy) > this.convergenceTolerance; + } + return super.checkConvergenceFailure(robotVel, maxIter); + } +} diff --git a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst index 3f125f11e6..f59aee6b33 100644 --- a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst @@ -26,9 +26,9 @@ If we did not record the time-of-flight measurements in the look-up table, we wo Interactive Visualization ------------------------- -Interact with the simulation below to see how the dynamic shooting recursion algorithm works. Use **Simulation** mode to drag the robot velocity and step through iterations; use **Fractal** mode to see a heatmap of iterations-to-convergence over velocity space (with the same geodesic and convergence envelope). The iteration control affects only the convergence envelope (in both modes). Adjust projectile velocity and tolerance to see how the algorithm converges. +Interact with the simulation below to see how the dynamic shooting recursion algorithm works. Use **Simulation** mode to drag the robot velocity and step through iterations; use **Fractal** mode to see a heatmap of iterations-to-convergence over velocity space (with the same geodesic and convergence envelope). -.. note:: In **Simulation** mode the view is a top-down 2D game field: the robot is blue, the target orange. The (draggable) robot velocity vector shows motion. For each iteration, the virtual target (green) is offset by time-of-flight times robot velocity; the actual trajectory (red) shows where the shot would land. The blue envelope is the region of convergence (max velocity that converges within the chosen iteration count and tolerance). The purple geodesic is the "maximum stability" curve. In **Fractal** mode the same envelope and geodesic are overlaid on a heatmap of how many iterations until convergence at each velocity (green = fast, red = slow or no convergence). +.. note:: The view is a top-down 2D game field: the robot is blue, the target orange. In **Simulation** mode the (draggable) robot velocity vector shows motion. For each iteration, the virtual target (green) is offset by time-of-flight times robot velocity; the actual trajectory (red) shows where the shot would land. The blue envelope is the region of convergence (max velocity that converges within the chosen iteration count and tolerance). In **Fractal** mode the same envelope and geodesic are overlaid on a heatmap of how many iterations until convergence at each velocity (green = fast, red = slow or no convergence). The purple geodesic is the "maximum stability" curve, showing velocity vectors that are instantaneously orbiting the virtual target. .. raw:: html diff --git a/source/docs/software/advanced-controls/fire-control/index.rst b/source/docs/software/advanced-controls/fire-control/index.rst index 58cf8c3bf5..79f43b3680 100644 --- a/source/docs/software/advanced-controls/fire-control/index.rst +++ b/source/docs/software/advanced-controls/fire-control/index.rst @@ -19,3 +19,4 @@ Recursive approaches have another advantage: they are their own error analysis. static-shooting dynamic-shooting + newton-shooting diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst new file mode 100644 index 0000000000..09fb09354d --- /dev/null +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -0,0 +1,116 @@ +Newton's Method for Dynamic Shooting +===================================== + +The previous article described the time-of-flight recursion — a fixed-point iteration that converges to the correct shot by repeatedly looking up the TOF from the adjusted target position. This works well and is simple to implement, but the fixed-point iteration can be slow to converge for certain robot velocities (as we saw in the convergence fractal). This article describes a Newton's method reformulation that converges much faster — and discusses why faster convergence does not necessarily mean better shots. + +The Reformulation +----------------- + +We first introduce notation. Let: + +- :math:`\mathbf{r}` — robot position +- :math:`\mathbf{g}` — goal (target) position +- :math:`\mathbf{v} = (v_x,\; v_y)` — robot velocity +- :math:`v_p` — projectile speed (constant) +- :math:`\tau` — time of flight (the unknown we solve for) + +As the robot moves, the *virtual target* shifts opposite to the robot's velocity. The displacement from the robot to the virtual target at a given TOF guess :math:`\tau` is: + +.. math:: + + \mathbf{d}(\tau) \;=\; (\mathbf{g} - \mathbf{r}) \;-\; \mathbf{v}\,\tau + +with components :math:`d_x(\tau) = (g_x - r_x) - v_x \tau` and :math:`d_y(\tau) = (g_y - r_y) - v_y \tau`. The distance to the virtual target is :math:`D(\tau) = \lvert\mathbf{d}(\tau)\rvert = \sqrt{d_x^2 + d_y^2}`. + +The firing table maps distance to time of flight. In the constant-velocity model this is simply :math:`\operatorname{tof}(D) = D / v_p`. The fixed-point iteration from the previous article is then :math:`\tau_{n+1} = \operatorname{tof}\!\bigl(D(\tau_n)\bigr)`. + +To apply Newton's method, we rewrite the fixed-point condition as a root-finding problem. Define the *TOF error*: + +.. math:: + + E(\tau) \;=\; \tau \;-\; \operatorname{tof}\!\bigl(D(\tau)\bigr) + +At the solution, :math:`E(\tau^*) = 0` — the guessed TOF equals the TOF the geometry demands. Newton's method iterates: + +.. math:: + + \tau_{n+1} \;=\; \tau_n \;-\; \frac{E(\tau_n)}{E'(\tau_n)} + +The derivative :math:`E'` requires the chain rule through the distance function. Differentiating :math:`D` with respect to :math:`\tau`: + +.. math:: + + \frac{dD}{d\tau} \;=\; \frac{\mathbf{d} \cdot (-\mathbf{v})}{D} \;=\; -\,\frac{d_x\, v_x + d_y\, v_y}{D} + +This is the rate at which the virtual target distance changes per unit change in TOF guess; it is negative when the robot velocity has a component toward the target (increasing :math:`\tau` moves the virtual target closer). + +Using :math:`\operatorname{tof}'(D) = 1/v_p`, the error derivative becomes: + +.. math:: + + E'(\tau) \;=\; 1 \;-\; \frac{1}{v_p}\,\frac{dD}{d\tau} \;=\; 1 \;+\; \frac{d_x\, v_x + d_y\, v_y}{v_p\; D} + +(the two negatives — one from differentiating :math:`E = \tau - \operatorname{tof}`, one from :math:`dD/d\tau` — combine to a positive term.) + +Substituting into the Newton update rule :math:`\tau_{n+1} = \tau_n - E/E'`: + +.. math:: + + \tau_{n+1} \;=\; \tau_n \;-\; \frac{\tau_n - D / v_p}{\;1 \;+\; \dfrac{d_x\, v_x + d_y\, v_y}{v_p\; D}\;} + +where :math:`d_x`, :math:`d_y`, and :math:`D` are all evaluated at :math:`\tau_n`. + +Interactive Visualization +------------------------- + +Use the visualization below to compare Newton's method to the fixed-point iteration. The two **Simulation** modes let you drag the robot velocity vector and step through iterations for each solver; **Fractal (Newton)** and **Fractal (Fixed-Point)** show convergence heatmaps. + +.. note:: The color scale differs between methods: Newton typically converges in 2–5 iterations, while the fixed-point iteration may take hundreds. The legend adjusts automatically. In both fractals, the same geodesic (purple) and convergence envelope (blue) are overlaid. + +.. raw:: html + +
+
+
+
+
+ +
+ +Toggle between **Fractal (Newton)** and **Fractal (Fixed-Point)** to see the dramatic reduction in iteration count. The fixed-point fractal's intricate banding structure — hundreds of iterations near the Mach cone boundary — collapses to a near-uniform 2–3 iterations under Newton's method. The convergence envelope (blue) also expands significantly: Newton converges in regions where fixed-point iteration fails entirely within the same iteration budget. + +.. note:: In the Newton modes, the convergence envelope may show a narrow dip along the ray directly toward the target. This is a *point singularity* of :math:`E'(\tau)`: when the robot speed toward the target exactly equals :math:`v_p`, the virtual target distance :math:`D(\tau)` momentarily passes through zero, causing :math:`E'` to diverge. The envelope's ray-casting algorithm detects this as a convergence failure, but it is a measure-zero event — the heatmap's finite grid steps over it, and convergence recovers immediately on either side. The singularity is an artifact of the envelope search, not a practical concern for the algorithm. However, a robot moving directly towards the target at-or-above the projectile speed will collide with the target at or before the projectile lands. + +Convergence Does Not Equal Quality +----------------------------------- + +Newton's method converges to the correct geometric solution in very few iterations. But the "correct geometric solution" in the ill-conditioned region of velocity space is *the same fragile answer*. Newton finds it faster; it doesn't make it less fragile. + +The fixed-point fractal was warning you about the *physics*, not the *numerics*. The fine structure of the convergence bands reflects the sensitivity of the time-of-flight to small changes in robot velocity — a property of the problem geometry, not the solver. A shot that takes 500 fixed-point iterations to converge takes 3 Newton iterations to reach the same answer, but that answer is equally sensitive to velocity error. + +Where Newton does genuinely help is in preventing a bad *failure mode*: in a real-time control loop with a hard iteration budget, the fixed-point iteration in the ill-conditioned region might be cut off mid-oscillation, producing a qualitatively wrong firing solution (the turret points the wrong way entirely). Newton, by converging quickly, ensures that the solver is not the reason you miss — the miss, if it happens, is the physics' fault, not the numerics'. + +Proxy Derivatives for Empirical Tables +--------------------------------------- + +In the constant-velocity model above, :math:`\operatorname{tof}'(D) = 1/v_p` is known exactly and Newton's method achieves quadratic convergence. With an empirical firing table (where :math:`\operatorname{tof}(D)` is a measured lookup rather than an analytical formula), the true derivative must be estimated numerically — and differentiating noisy data amplifies that noise. + +A practical compromise: use the constant-velocity derivative :math:`1/v_p` as a *proxy*, even when the firing table accounts for drag or other effects. This gives a quasi-Newton iteration that: + +- Converges faster than fixed-point (the proxy provides a damped Newton correction) +- Does not require differentiating the firing table (no noise amplification) +- Degrades gracefully: for drag, the true :math:`\operatorname{tof}'(D) > 1/v_p`, so the proxy undershoots the correction — a *stabilizing* error that slows convergence slightly but never causes divergence + +The convergence rate of this proxy-Newton approach sits between linear (fixed-point) and quadratic (exact Newton), with the gap depending on how much drag distorts :math:`\operatorname{tof}'(D)` from :math:`1/v_p`. For FRC-class projectiles where drag is modest, the distortion is small and you get nearly the full Newton speedup for free. + +Shot-Quality Advisory Architecture +----------------------------------- + +Combining Newton's method with the fixed-point contraction rate creates a powerful architecture for real-time fire control: + +1. **Newton's method** (with proxy derivative) produces the *firing solution*. It always converges quickly, even in the Mach cone region. +2. **The fixed-point iteration** produces a *firing solution quality metric* from the same initial guess. The contraction rate of the fixed-point iteration is a direct, derivative-free measurement of how ill-conditioned the shot is; a threshold on this contraction rate can alert the driver to the inherent risk of missing introduced by the motion, regardless of the solver's convergence behavior. + +This separates *solver convergence* from *shot quality*, turning convergence-based shot suppression from a hard limitation into an overridable advisory. The driver retains authority over the risk/reward tradeoff: a marginal-confidence shot with ten seconds left and down by one is a shot you take. The algorithm provides the information; the human makes the call. From 489eb707202acea545fd5a56e7ed09a281e62c7f Mon Sep 17 00:00:00 2001 From: Oblarg Date: Sun, 8 Feb 2026 22:33:41 -0500 Subject: [PATCH 119/135] add reachability envelope --- .../dynamic-shooting-visualization.js | 95 +++++++++++++++++++ .../fire-control/dynamic-shooting.rst | 9 +- .../fire-control/newton-shooting.rst | 16 ++-- 3 files changed, 112 insertions(+), 8 deletions(-) diff --git a/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js b/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js index c55567643e..7af7c884ba 100644 --- a/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js +++ b/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js @@ -637,10 +637,50 @@ class DynamicShootingVisualization extends BaseVisualization { if (maxIter === undefined) { this.regionOfConvergence = result; + // Reachability boundary depends only on projectile speed and geometry, + // so piggyback on envelope recomputation (cheap, just trig). + this.computeReachabilityBoundary(); } return result; } + // Compute the physical reachability boundary in velocity space (the "Mach cone"). + // For each ray direction, the maximum robot speed that still admits a positive-TOF + // solution. In the forward hemisphere (toward target): v_max = v_p / |sin(phi)| + // where phi is the angle off the target line. In the rear hemisphere: v_max = v_p + // (subsonic speeds are always reachable). + computeReachabilityBoundary() { + if (!this.robotPos || !this.targetPos) return; + const dx = this.targetPos.x - this.robotPos.x; + const dy = this.targetPos.y - this.robotPos.y; + const targetDirection = Math.atan2(dy, dx); + const vp = this.projectileSpeed; + const maxVelocity = 20.0; + const numRays = 360; + const angleStep = 360 / numRays; + const result = []; + for (let i = 0; i < numRays; i++) { + const angleDeg = i * angleStep; + const angleRad = (angleDeg * Math.PI) / 180; + var phi = angleRad - targetDirection; + while (phi > Math.PI) phi -= 2 * Math.PI; + while (phi < -Math.PI) phi += 2 * Math.PI; + var maxVel; + if (Math.abs(phi) >= Math.PI / 2) { + maxVel = vp; + } else { + var sinPhi = Math.abs(Math.sin(phi)); + if (sinPhi < 0.01) { + maxVel = maxVelocity; + } else { + maxVel = Math.min(vp / sinPhi, maxVelocity); + } + } + result.push({ angle: angleDeg, maxVelocity: maxVel }); + } + this.reachabilityBoundary = result; + } + // Run the dynamic shooting recursion algorithm runRecursion(robotVel, maxIter) { this.iterations = this.runIterations(robotVel, maxIter); @@ -775,6 +815,7 @@ class DynamicShootingVisualization extends BaseVisualization { this.drawRobot(ctx); this.drawTarget(ctx); } + this.drawReachabilityBoundaryVelocitySpace(ctx); this.drawGeodesicVelocitySpace(ctx); this.drawEnvelopeVelocitySpace(ctx); this.drawFractalLegend(ctx); @@ -784,6 +825,7 @@ class DynamicShootingVisualization extends BaseVisualization { const robotCanvas = this.drawRobot(ctx); this.drawVelocityVector(ctx, robotCanvas); this.drawTarget(ctx); + this.drawReachabilityBoundary(ctx, robotCanvas); this.drawRegionOfConvergence(ctx, robotCanvas); this.drawGeodesic(ctx, robotCanvas); this.drawIterations(ctx, robotCanvas); @@ -853,6 +895,59 @@ class DynamicShootingVisualization extends BaseVisualization { ctx.restore(); } + // Draw the physical reachability boundary (Mach cone) in simulation mode + drawReachabilityBoundary(ctx, robotCanvas) { + if (!this.reachabilityBoundary || this.reachabilityBoundary.length === 0) return; + ctx.save(); + ctx.strokeStyle = "#2E86AB"; + ctx.lineWidth = 2; + // Solid line (no dash) to distinguish from dashed convergence envelope + const velScale = this.getReferenceTOF(); + const scale = this.coords.getScale(); + ctx.beginPath(); + let first = true; + for (let i = 0; i < this.reachabilityBoundary.length; i++) { + const p = this.reachabilityBoundary[i]; + const angleRad = (p.angle * Math.PI) / 180; + const endX = robotCanvas.x + p.maxVelocity * Math.cos(angleRad) * velScale * scale; + const endY = robotCanvas.y - p.maxVelocity * Math.sin(angleRad) * velScale * scale; + if (first) { ctx.moveTo(endX, endY); first = false; } else { ctx.lineTo(endX, endY); } + } + const p0 = this.reachabilityBoundary[0]; + const a0 = (p0.angle * Math.PI) / 180; + ctx.lineTo( + robotCanvas.x + p0.maxVelocity * Math.cos(a0) * velScale * scale, + robotCanvas.y - p0.maxVelocity * Math.sin(a0) * velScale * scale + ); + ctx.stroke(); + ctx.restore(); + } + + // Draw the physical reachability boundary in fractal/velocity-space mode + drawReachabilityBoundaryVelocitySpace(ctx) { + if (!this.reachabilityBoundary || this.reachabilityBoundary.length === 0) return; + ctx.save(); + ctx.strokeStyle = "#2E86AB"; + ctx.lineWidth = 2; + // Solid line (no dash) + ctx.beginPath(); + let first = true; + for (let i = 0; i < this.reachabilityBoundary.length; i++) { + const p = this.reachabilityBoundary[i]; + const angleRad = (p.angle * Math.PI) / 180; + const vx = p.maxVelocity * Math.cos(angleRad); + const vy = p.maxVelocity * Math.sin(angleRad); + const pt = this.velocityToCanvas(vx, vy); + if (first) { ctx.moveTo(pt.x, pt.y); first = false; } else { ctx.lineTo(pt.x, pt.y); } + } + const p0 = this.reachabilityBoundary[0]; + const a0 = (p0.angle * Math.PI) / 180; + const pt0 = this.velocityToCanvas(p0.maxVelocity * Math.cos(a0), p0.maxVelocity * Math.sin(a0)); + ctx.lineTo(pt0.x, pt0.y); + ctx.stroke(); + ctx.restore(); + } + drawFractalLegend(ctx) { const cap = this.iterationCap; const margin = 12; diff --git a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst index f59aee6b33..16029a3bb8 100644 --- a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst @@ -28,7 +28,7 @@ Interactive Visualization Interact with the simulation below to see how the dynamic shooting recursion algorithm works. Use **Simulation** mode to drag the robot velocity and step through iterations; use **Fractal** mode to see a heatmap of iterations-to-convergence over velocity space (with the same geodesic and convergence envelope). -.. note:: The view is a top-down 2D game field: the robot is blue, the target orange. In **Simulation** mode the (draggable) robot velocity vector shows motion. For each iteration, the virtual target (green) is offset by time-of-flight times robot velocity; the actual trajectory (red) shows where the shot would land. The blue envelope is the region of convergence (max velocity that converges within the chosen iteration count and tolerance). In **Fractal** mode the same envelope and geodesic are overlaid on a heatmap of how many iterations until convergence at each velocity (green = fast, red = slow or no convergence). The purple geodesic is the "maximum stability" curve, showing velocity vectors that are instantaneously orbiting the virtual target. +.. note:: The view is a top-down 2D game field: the robot is blue, the target orange. In **Simulation** mode the (draggable) robot velocity vector shows motion. For each iteration, the virtual target (green) is offset by time-of-flight times robot velocity; the actual trajectory (red) shows where the shot would land. In **Fractal** mode the same envelope and geodesic are overlaid on a heatmap of how many iterations until convergence at each velocity (green = fast, red = slow or no convergence). The purple geodesic is the "maximum stability" curve, showing velocity vectors that are instantaneously orbiting the virtual target. The dashed blue line shows the "convergence envelope" of velocities that converge within the chosen iteration count and tolerance. The solid blue line shows the "reachability boundary" of velocities for which the shot is geometrically possible - outside of this region, it does not matter *what* fire control solver you use, the shot simply cannot be made. .. raw:: html @@ -48,6 +48,13 @@ The "inverted NASA logo" shape of the convergence envelope generally follows the Convergence is worst in a direct sprint towards or away from the target - in these cases, shot solution is maximally-sensitive to errors in the robot velocity estimate. Direct lateral motion is also not great. Along the "maximum stability" geodesic, there are two "wings" of stable convergence; we can see that it is optimal (in terms of motion-compensation stability) to approach a target diagonally, rather than head-on. +In "fractal" mode, we can see the region of poor convergence visually as a "Mach cone" in the direction of the target. This is much like the sonic boom of a supersonic aircraft, but in this case the "shock" is caused by the robot velocity exceeding the projectile speed (instead of the speed of sound). + +Contraction Rate and Preventing Bad Shots +----------------------------------------- + +While *eventual* convergence is theoretically guaranteed for any velocity vector within the reachability boundary - even in these regions of chaotic/poor convergence, the shot will eventually converge to the correct solution if you wait long enough. But, as we can see from the simulation,this iteration may take a very long time, and truncating it may produce a qualitatively wrong firing solution (the turret points the wrong way entirely). A good fire control system will check the contraction rate (the rate at which the time-of-flight is changing at the last iteration) and prevent firing if it is too large. + The Effect of Firing Strategy ----------------------------- diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst index 09fb09354d..7baefbaa41 100644 --- a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -86,11 +86,11 @@ Toggle between **Fractal (Newton)** and **Fractal (Fixed-Point)** to see the dra Convergence Does Not Equal Quality ----------------------------------- -Newton's method converges to the correct geometric solution in very few iterations. But the "correct geometric solution" in the ill-conditioned region of velocity space is *the same fragile answer*. Newton finds it faster; it doesn't make it less fragile. +Newton's method converges to the correct geometric solution in very few iterations. But the "correct geometric solution" in the ill-conditioned region of velocity space is still ill-conditioned. Newton finds it faster; it doesn't make it less fragile. -The fixed-point fractal was warning you about the *physics*, not the *numerics*. The fine structure of the convergence bands reflects the sensitivity of the time-of-flight to small changes in robot velocity — a property of the problem geometry, not the solver. A shot that takes 500 fixed-point iterations to converge takes 3 Newton iterations to reach the same answer, but that answer is equally sensitive to velocity error. +The fixed-point fractal was warning you about the physics, not the numerics. The fine structure of the convergence bands reflects the sensitivity of the time-of-flight to small changes in robot velocity — a property of the problem geometry, not the solver. A shot that takes 500 fixed-point iterations to converge takes 3 Newton iterations to reach the same answer, but that answer is equally sensitive to velocity error. -Where Newton does genuinely help is in preventing a bad *failure mode*: in a real-time control loop with a hard iteration budget, the fixed-point iteration in the ill-conditioned region might be cut off mid-oscillation, producing a qualitatively wrong firing solution (the turret points the wrong way entirely). Newton, by converging quickly, ensures that the solver is not the reason you miss — the miss, if it happens, is the physics' fault, not the numerics'. +Where Newton does genuinely help is in preventing a *bad failure mode*: in a real-time control loop with a hard iteration budget, the fixed-point iteration in the ill-conditioned region might be cut off mid-oscillation, producing a qualitatively wrong firing solution (the turret points the wrong way entirely). Newton, by converging quickly, ensures that the solver is not the reason you miss — the miss, if it happens, is the physics' fault, not the numerics'. Proxy Derivatives for Empirical Tables --------------------------------------- @@ -105,12 +105,14 @@ A practical compromise: use the constant-velocity derivative :math:`1/v_p` as a The convergence rate of this proxy-Newton approach sits between linear (fixed-point) and quadratic (exact Newton), with the gap depending on how much drag distorts :math:`\operatorname{tof}'(D)` from :math:`1/v_p`. For FRC-class projectiles where drag is modest, the distortion is small and you get nearly the full Newton speedup for free. -Shot-Quality Advisory Architecture ------------------------------------ +Contraction Rate and Preventing Bad Shots, Revisited +---------------------------------------------------- + +It may seem at this point that we have "solved" the problem of the "mach cone" - by using Newton's method, we can converge to the correct solution in a few iterations, even in the troublesome region of sprinting directly towards the target. But remember, Newton's method does not change the physics of the problem - it only changes the numerics. The shot will still likely miss if the robot velocity is not estimated accurately enough. -Combining Newton's method with the fixed-point contraction rate creates a powerful architecture for real-time fire control: +So, while Newton's method gives us a very powerful tool for quickly finding the correct firing solution, it does so at the cost of erasing the convenient built-in "bad shot" warning system of the fixed-point iteration. Fortunately, because these computations are exceedingly cheap, we can just do both: 1. **Newton's method** (with proxy derivative) produces the *firing solution*. It always converges quickly, even in the Mach cone region. -2. **The fixed-point iteration** produces a *firing solution quality metric* from the same initial guess. The contraction rate of the fixed-point iteration is a direct, derivative-free measurement of how ill-conditioned the shot is; a threshold on this contraction rate can alert the driver to the inherent risk of missing introduced by the motion, regardless of the solver's convergence behavior. +2. **The fixed-point iteration**, by means of its contraction rate, produces a *firing solution quality metric* from the same initial guess. This separates *solver convergence* from *shot quality*, turning convergence-based shot suppression from a hard limitation into an overridable advisory. The driver retains authority over the risk/reward tradeoff: a marginal-confidence shot with ten seconds left and down by one is a shot you take. The algorithm provides the information; the human makes the call. From c4760289c76b33d0d8a560f899dc35dfb4ba98d0 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Thu, 19 Feb 2026 10:10:43 -0500 Subject: [PATCH 120/135] fix newton's method seeding --- .../controls_js_sim/dynamic-shooting.js | 42 +++- .../dynamic-shooting-visualization.js | 206 +++++++++++++----- .../newton-shooting-visualization.js | 9 +- .../fire-control/dynamic-shooting.rst | 18 +- .../fire-control/newton-shooting.rst | 16 +- 5 files changed, 215 insertions(+), 76 deletions(-) diff --git a/source/_extensions/controls_js_sim/dynamic-shooting.js b/source/_extensions/controls_js_sim/dynamic-shooting.js index 956e0a7b59..b5cd19f97e 100644 --- a/source/_extensions/controls_js_sim/dynamic-shooting.js +++ b/source/_extensions/controls_js_sim/dynamic-shooting.js @@ -58,7 +58,7 @@ class DynamicShootingWidget { this.controlDrawDiv.style.position = "relative"; this.controlDrawDiv.style.zIndex = "10"; - // Row 1: Mode toggle only + // Row 1: Mode toggle (Simulation, Fractal iterations, Fractal interaction) const row1 = document.createElement("div"); row1.style.cssText = "display: flex; align-items: center; justify-content: center; gap: 6px;"; const simBtn = document.createElement("button"); @@ -67,14 +67,29 @@ class DynamicShootingWidget { simBtn.style.cssText = "padding: 2px 10px; font-size: 12px; cursor: pointer;"; simBtn.onclick = function() { this.setMode("simulation"); }.bind(this); row1.appendChild(simBtn); - const fractBtn = document.createElement("button"); - fractBtn.innerHTML = "Fractal"; - fractBtn.setAttribute("id", divIdPrefix + "_mode_fractal"); - fractBtn.style.cssText = "padding: 2px 10px; font-size: 12px; cursor: pointer;"; - fractBtn.onclick = function() { this.setMode("fractal"); }.bind(this); - row1.appendChild(fractBtn); + const fractIterBtn = document.createElement("button"); + fractIterBtn.innerHTML = "Fractal (Iterations)"; + fractIterBtn.setAttribute("id", divIdPrefix + "_mode_fractal_iter"); + fractIterBtn.style.cssText = "padding: 2px 10px; font-size: 12px; cursor: pointer;"; + fractIterBtn.onclick = function() { + this.visualization.setFractalVariant("convergence"); + this.setMode("fractal"); + this.refreshModeButtons(); + }.bind(this); + row1.appendChild(fractIterBtn); + const fractInterBtn = document.createElement("button"); + fractInterBtn.innerHTML = "Fractal (Interaction)"; + fractInterBtn.setAttribute("id", divIdPrefix + "_mode_fractal_inter"); + fractInterBtn.style.cssText = "padding: 2px 10px; font-size: 12px; cursor: pointer;"; + fractInterBtn.onclick = function() { + this.visualization.setFractalVariant("interaction"); + this.setMode("fractal"); + this.refreshModeButtons(); + }.bind(this); + row1.appendChild(fractInterBtn); this.modeSimBtn = simBtn; - this.modeFractalBtn = fractBtn; + this.modeFractalIterBtn = fractIterBtn; + this.modeFractalInterBtn = fractInterBtn; this.controlDrawDiv.appendChild(row1); // Row 2: Iterations, speed, tolerance (same controls in both modes) @@ -134,11 +149,18 @@ class DynamicShootingWidget { }.bind(this); controlBar.appendChild(nextButton); + this.refreshModeButtons = function() { + const mode = this.mode; + const variant = this.visualization.fractalVariant || "convergence"; + this.modeSimBtn.style.fontWeight = mode === "simulation" ? "bold" : "normal"; + this.modeFractalIterBtn.style.fontWeight = (mode === "fractal" && variant === "convergence") ? "bold" : "normal"; + this.modeFractalInterBtn.style.fontWeight = (mode === "fractal" && variant === "interaction") ? "bold" : "normal"; + }.bind(this); + this.setMode = function(mode) { this.mode = mode; this.visualization.setMode(mode); - this.modeSimBtn.style.fontWeight = mode === "simulation" ? "bold" : "normal"; - this.modeFractalBtn.style.fontWeight = mode === "fractal" ? "bold" : "normal"; + this.refreshModeButtons(); this.update(); }.bind(this); diff --git a/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js b/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js index 7af7c884ba..a4e0ccf11b 100644 --- a/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js +++ b/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js @@ -205,6 +205,7 @@ class DynamicShootingVisualization extends BaseVisualization { this.mode = "simulation"; // Fractal/heatmap state (velocity-space view) this.heatmapData = null; + this.fractalVariant = "convergence"; // "convergence" | "interaction" this.heatmapMaxVel = 20.0; this.heatmapGrid = 200; this.iterationCap = 1000; @@ -239,6 +240,14 @@ class DynamicShootingVisualization extends BaseVisualization { } } + setFractalVariant(variant) { + if (this.fractalVariant === variant) return; + this.fractalVariant = variant; + if (this.mode === "fractal") { + this.scheduleFractalUpdate(); + } + } + // Same scale as simulation: velocity space centered at robot, using reference TOF * field scale velocityToCanvas(vx, vy) { const robotCanvas = this.coords.worldToCanvas(this.robotPos.x, this.robotPos.y); @@ -251,14 +260,25 @@ class DynamicShootingVisualization extends BaseVisualization { // Dark green (few iterations) → white (many iterations / cap), logarithmic scaling static iterationToColor(k, cap) { + if (k < 0) return null; // outside reachability: caller should use background if (cap <= 1) return "rgb(0, 68, 27)"; - const t = Math.log(k) / Math.log(cap); // 0 = 1 iteration, 1 = cap iterations + const t = Math.log(Math.max(1, k)) / Math.log(cap); // 0 = 1 iteration, 1 = cap iterations const r = Math.round(0 + t * 255); const g = Math.round(68 + t * 187); const b = Math.round(27 + t * 228); return "rgb(" + r + "," + g + "," + b + ")"; } + // Orange heatmap: 0 (good, geodesic) → 1 (bad). value in [0, 1] or NaN for outside reachability. + static interactionToColor(value) { + if (value !== value || value < 0) return null; // NaN or outside reachability + const t = Math.max(0, Math.min(1, value)); + const r = Math.round(140 + t * 115); + const g = Math.round(70 + t * 85); + const b = Math.round(0 + t * 50); + return "rgb(" + r + "," + g + "," + b + ")"; + } + // Compute the visible velocity bounds from the canvas geometry getVisibleVelocityBounds() { const robotCanvas = this.coords.worldToCanvas(this.robotPos.x, this.robotPos.y); @@ -273,6 +293,7 @@ class DynamicShootingVisualization extends BaseVisualization { computeHeatmap() { if (!this.robotPos || !this.targetPos) return; + this.computeReachabilityBoundary(); const cap = this.iterationCap; const n = this.heatmapGrid; const bounds = this.getVisibleVelocityBounds(); @@ -280,14 +301,24 @@ class DynamicShootingVisualization extends BaseVisualization { const stepX = (bounds.vxMax - bounds.vxMin) / n; const stepY = (bounds.vyMax - bounds.vyMin) / n; const data = []; + const variant = this.fractalVariant || "convergence"; for (let j = 0; j < n; j++) { const row = []; for (let i = 0; i < n; i++) { const vx = bounds.vxMin + (i + 0.5) * stepX; const vy = bounds.vyMax - (j + 0.5) * stepY; + if (!this.isInsideReachability(vx, vy)) { + row.push(variant === "interaction" ? NaN : -1); + continue; + } const vel = { x: vx, y: vy }; - const k = this.getIterationsToConvergence(vel, cap); - row.push(k); + if (variant === "interaction") { + const phi = this.getInteractionIndicator(vel); + row.push(phi); + } else { + const k = this.getIterationsToConvergence(vel, cap); + row.push(k); + } } data.push(row); } @@ -449,8 +480,9 @@ class DynamicShootingVisualization extends BaseVisualization { } // Run the dynamic shooting recursion algorithm iterations - // Returns an array of iteration data objects - runIterations(robotVel, maxIter) { + // Returns an array of iteration data objects. + // When allowEarlyTermination is false, never break on convergence (used for interaction heatmap). + runIterations(robotVel, maxIter, allowEarlyTermination = true) { const iterations = []; // Guard against uninitialized positions @@ -522,9 +554,10 @@ class DynamicShootingVisualization extends BaseVisualization { tau_prev: tau_prev }); - // Check for convergence (TOF hasn't changed much) - if (prevTOF !== null && Math.abs(tau - prevTOF) < 0.01) { - break; // Converged + if (prevTOF !== null) { + const step = Math.abs(tau - prevTOF); + if (allowEarlyTermination && step < 0.01) break; + if (!allowEarlyTermination && step <= 1e-12 * Math.max(1, Math.abs(tau))) break; } // Update for next iteration: @@ -541,6 +574,32 @@ class DynamicShootingVisualization extends BaseVisualization { return iterations; } + // Contraction factor |φ'| from the last two fixed-point steps after n iterations. + // Uses 1 + n (n = this.currentIteration) so the converged-shot trace aligns with the + // iteration control. + // Returns value in [0, 1] (0 = geodesic-like, 1 = bad). Used for interaction heatmap. + getInteractionIndicator(robotVel) { + const maxIter = 1 + this.currentIteration; + const iterations = this.runIterations(robotVel, maxIter, false); + if (iterations.length < 2) return 1; + const last = iterations.length - 1; + const tauScale = Math.max(1, Math.abs(iterations[last].tau)); + const step1 = iterations[last].tau - iterations[last - 1].tau; + const step0 = last >= 2 + ? iterations[last - 1].tau - iterations[last - 2].tau + : iterations[0].tau - iterations[0].tau_prev; + if (Math.abs(step1) < 1e-12 * tauScale && last >= 2) { + const step0Prev = iterations[last - 2].tau - (last >= 3 ? iterations[last - 3].tau : iterations[last - 2].tau_prev); + if (Math.abs(step0Prev) >= 1e-12 * tauScale) { + const phiPrime = step0 / step0Prev; + return Math.min(1, Math.abs(phiPrime)); + } + } + if (Math.abs(step0) < 1e-12 * tauScale) return 1; + const phiPrime = step1 / step0; + return Math.min(1, Math.abs(phiPrime)); + } + // Returns the 1-based iteration count at which convergence is achieved (final landing within // convergenceTolerance of target), or maxIter if never achieved within maxIter iterations. getIterationsToConvergence(robotVel, maxIter) { @@ -588,6 +647,7 @@ class DynamicShootingVisualization extends BaseVisualization { // Compute region of convergence by casting velocity rays. // If maxIter is provided, use it; otherwise use this.currentIteration. Returns the region array // when maxIter is provided (does not store); otherwise stores in this.regionOfConvergence. + // Does not test velocities outside the reachability cone (saves cycles). computeRegionOfConvergence(maxIter) { // Guard against uninitialized positions if (!this.robotPos || !this.targetPos) { @@ -599,6 +659,10 @@ class DynamicShootingVisualization extends BaseVisualization { this.targetRadius = this.coords.pixelsToWorldDistance(this.targetPixelRadius); } + // Reachability first so we can cap each ray and avoid wasted convergence checks + this.computeReachabilityBoundary(); + const reachability = this.reachabilityBoundary; + const limit = maxIter !== undefined ? maxIter : this.currentIteration; const result = []; @@ -613,11 +677,12 @@ class DynamicShootingVisualization extends BaseVisualization { for (let i = 0; i < numRays; i++) { const angleDeg = i * angleStep; const angleRad = (angleDeg * Math.PI) / 180; + const velCap = reachability && reachability[i] ? Math.min(maxVelocity, reachability[i].maxVelocity) : maxVelocity; - // Walk outward linearly from zero velocity until convergence fails + // Walk outward from zero until convergence fails or we leave the reachability cone let minFailureVel = null; - for (let testVel = 0.0; testVel <= maxVelocity; testVel += velocityStep) { + for (let testVel = 0.0; testVel <= velCap; testVel += velocityStep) { const testRobotVel = { x: testVel * Math.cos(angleRad), y: testVel * Math.sin(angleRad) @@ -631,19 +696,28 @@ class DynamicShootingVisualization extends BaseVisualization { result.push({ angle: angleDeg, - maxVelocity: minFailureVel !== null ? minFailureVel : maxVelocity + maxVelocity: minFailureVel !== null ? minFailureVel : velCap }); } if (maxIter === undefined) { this.regionOfConvergence = result; - // Reachability boundary depends only on projectile speed and geometry, - // so piggyback on envelope recomputation (cheap, just trig). - this.computeReachabilityBoundary(); } return result; } + // True if (vx, vy) is inside the reachability cone (shot is geometrically possible). + isInsideReachability(vx, vy) { + if (!this.reachabilityBoundary || this.reachabilityBoundary.length === 0) return true; + const velMag = Math.sqrt(vx * vx + vy * vy); + let angleDeg = (Math.atan2(vy, vx) * 180 / Math.PI + 360) % 360; + const numRays = this.reachabilityBoundary.length; + const angleStep = 360 / numRays; + const idx = Math.round(angleDeg / angleStep) % numRays; + const maxVel = this.reachabilityBoundary[idx].maxVelocity; + return velMag <= maxVel; + } + // Compute the physical reachability boundary in velocity space (the "Mach cone"). // For each ray direction, the maximum robot speed that still admits a positive-TOF // solution. In the forward hemisphere (toward target): v_max = v_p / |sin(phi)| @@ -718,17 +792,22 @@ class DynamicShootingVisualization extends BaseVisualization { } drawStaticFractal(ctx) { - ctx.fillStyle = "#E8F5E9"; + const bg = "#E8F5E9"; + ctx.fillStyle = bg; ctx.fillRect(0, 0, this.width, this.height); if (!this.heatmapData || !this.heatmapBounds) return; const n = this.heatmapData.length; const cellW = this.width / n; const cellH = this.height / n; const cap = this.iterationCap; + const variant = this.fractalVariant || "convergence"; for (let j = 0; j < n; j++) { for (let i = 0; i < n; i++) { - const k = this.heatmapData[j][i]; - ctx.fillStyle = DynamicShootingVisualization.iterationToColor(k, cap); + const v = this.heatmapData[j][i]; + const color = variant === "interaction" + ? DynamicShootingVisualization.interactionToColor(v) + : DynamicShootingVisualization.iterationToColor(v, cap); + ctx.fillStyle = color != null ? color : bg; ctx.fillRect(i * cellW, j * cellH, cellW + 1, cellH + 1); } } @@ -949,47 +1028,76 @@ class DynamicShootingVisualization extends BaseVisualization { } drawFractalLegend(ctx) { - const cap = this.iterationCap; + const variant = this.fractalVariant || "convergence"; const margin = 12; const barWidth = 18; const barHeight = 180; const x0 = this.width - margin - barWidth - 36; const y0 = margin + 36; // leave room for title above bar ctx.save(); - // Title above the bar ctx.fillStyle = "#000"; ctx.font = "11px Arial"; ctx.textAlign = "right"; - ctx.fillText("Iterations", x0 + barWidth, y0 - 24); - ctx.fillText("to converge", x0 + barWidth, y0 - 12); - // Draw bar (log-scaled: position t maps to k = cap^t) - ctx.strokeStyle = "#333"; - ctx.lineWidth = 1; - ctx.strokeRect(x0, y0, barWidth, barHeight); - const nSteps = 96; - for (let i = 0; i < nSteps; i++) { - const t = i / (nSteps - 1); - const k = Math.pow(cap, t); // log scaling: 1 at top, cap at bottom - ctx.fillStyle = DynamicShootingVisualization.iterationToColor(Math.round(Math.max(1, k)), cap); - const sy = y0 + t * barHeight; - const sh = Math.ceil(barHeight / nSteps) + 1; - ctx.fillRect(x0, sy, barWidth, sh); - } - // Tick marks and labels: logarithmically-spaced values - const ticks = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000].filter(v => v <= cap); - ctx.fillStyle = "#000"; - ctx.font = "10px Arial"; - ctx.textAlign = "right"; - ctx.strokeStyle = "#000"; - ctx.lineWidth = 1; - for (const tick of ticks) { - const t = Math.log(tick) / Math.log(cap); - const ty = y0 + t * barHeight; - ctx.beginPath(); - ctx.moveTo(x0, ty); - ctx.lineTo(x0 - 4, ty); - ctx.stroke(); - ctx.fillText(String(tick), x0 - 6, ty + 4); + if (variant === "interaction") { + ctx.fillStyle = "#1a1a1a"; + ctx.font = "11px Arial"; + ctx.fillText("0 good → 1 bad", x0 + barWidth, y0 - 12); + ctx.strokeStyle = "#333"; + ctx.lineWidth = 1; + ctx.strokeRect(x0, y0, barWidth, barHeight); + const nSteps = 96; + for (let i = 0; i < nSteps; i++) { + const t = i / (nSteps - 1); + const c = DynamicShootingVisualization.interactionToColor(t); + if (c) { + ctx.fillStyle = c; + const sy = y0 + t * barHeight; + const sh = Math.ceil(barHeight / nSteps) + 1; + ctx.fillRect(x0, sy, barWidth, sh); + } + } + ctx.strokeStyle = "#000"; + ctx.lineWidth = 1; + ctx.fillStyle = "#1a1a1a"; + for (const tick of [0, 0.25, 0.5, 0.75, 1]) { + const ty = y0 + tick * barHeight; + ctx.beginPath(); + ctx.moveTo(x0, ty); + ctx.lineTo(x0 - 4, ty); + ctx.stroke(); + ctx.fillText(String(tick), x0 - 6, ty + 4); + } + } else { + const cap = this.iterationCap; + ctx.fillText("Iterations", x0 + barWidth, y0 - 24); + ctx.fillText("to converge", x0 + barWidth, y0 - 12); + ctx.strokeStyle = "#333"; + ctx.lineWidth = 1; + ctx.strokeRect(x0, y0, barWidth, barHeight); + const nSteps = 96; + for (let i = 0; i < nSteps; i++) { + const t = i / (nSteps - 1); + const k = Math.pow(cap, t); + const c = DynamicShootingVisualization.iterationToColor(Math.round(Math.max(1, k)), cap); + if (c) { + ctx.fillStyle = c; + const sy = y0 + t * barHeight; + const sh = Math.ceil(barHeight / nSteps) + 1; + ctx.fillRect(x0, sy, barWidth, sh); + } + } + const ticks = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000].filter(v => v <= cap); + ctx.strokeStyle = "#000"; + ctx.lineWidth = 1; + for (const tick of ticks) { + const t = Math.log(tick) / Math.log(cap); + const ty = y0 + t * barHeight; + ctx.beginPath(); + ctx.moveTo(x0, ty); + ctx.lineTo(x0 - 4, ty); + ctx.stroke(); + ctx.fillText(String(tick), x0 - 6, ty + 4); + } } ctx.restore(); } diff --git a/source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js b/source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js index 964123dddb..dd5a8d423b 100644 --- a/source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js +++ b/source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js @@ -33,9 +33,8 @@ class NewtonShootingVisualization extends DynamicShootingVisualization { const vp = this.projectileSpeed; const vx = robotVel.x; const vy = robotVel.y; - - // Initial guess: straight-line TOF - let t = D0 / vp; + const vToward = (dx0 * vx + dy0 * vy) / D0; + let t = vp + vToward > 1e-10 ? D0 / (vp + vToward) : D0 / vp; let prevTOF = null; for (let iter = 0; iter < maxIter; iter++) { @@ -99,8 +98,8 @@ class NewtonShootingVisualization extends DynamicShootingVisualization { const vy = robotVel.y; const vrMag = Math.sqrt(vx * vx + vy * vy); const tol = this.convergenceTolerance; - - let t = D0 / vp; + const vToward = (dx0 * vx + dy0 * vy) / D0; + let t = vp + vToward > 1e-10 ? D0 / (vp + vToward) : D0 / vp; for (let k = 1; k <= maxIter; k++) { const X = dx0 - vx * t; diff --git a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst index 16029a3bb8..5f4e08ebe1 100644 --- a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst @@ -26,9 +26,9 @@ If we did not record the time-of-flight measurements in the look-up table, we wo Interactive Visualization ------------------------- -Interact with the simulation below to see how the dynamic shooting recursion algorithm works. Use **Simulation** mode to drag the robot velocity and step through iterations; use **Fractal** mode to see a heatmap of iterations-to-convergence over velocity space (with the same geodesic and convergence envelope). +Interact with the simulation below to see how the dynamic shooting recursion algorithm works. Use **Simulation** mode to drag the robot velocity and step through iterations. Use **Fractal (Iterations)** to see a heatmap of iterations-to-convergence over velocity space, or **Fractal (Interaction)** to see the degree of interaction between platform error and shooter error (0 = good, 1 = bad) with the same geodesic and convergence envelope. -.. note:: The view is a top-down 2D game field: the robot is blue, the target orange. In **Simulation** mode the (draggable) robot velocity vector shows motion. For each iteration, the virtual target (green) is offset by time-of-flight times robot velocity; the actual trajectory (red) shows where the shot would land. In **Fractal** mode the same envelope and geodesic are overlaid on a heatmap of how many iterations until convergence at each velocity (green = fast, red = slow or no convergence). The purple geodesic is the "maximum stability" curve, showing velocity vectors that are instantaneously orbiting the virtual target. The dashed blue line shows the "convergence envelope" of velocities that converge within the chosen iteration count and tolerance. The solid blue line shows the "reachability boundary" of velocities for which the shot is geometrically possible - outside of this region, it does not matter *what* fire control solver you use, the shot simply cannot be made. +.. note:: The view is a top-down 2D game field: the robot is blue, the target orange. In **Simulation** mode the (draggable) robot velocity vector shows motion. For each iteration, the virtual target (green) is offset by time-of-flight times robot velocity; the actual trajectory (red) shows where the shot would land. In **Fractal (Iterations)** the same envelope and geodesic are overlaid on a heatmap of how many iterations until convergence at each velocity (green = fast, red = slow or no convergence). In **Fractal (Interaction)** the heatmap shows the contraction-based quality indicator (lighter = better). The purple geodesic is the "maximum stability" curve (orbiting the virtual target). The dashed blue line is the convergence envelope; the solid blue line is the reachability boundary — outside it the shot is geometrically impossible. .. raw:: html @@ -50,10 +50,18 @@ Convergence is worst in a direct sprint towards or away from the target - in the In "fractal" mode, we can see the region of poor convergence visually as a "Mach cone" in the direction of the target. This is much like the sonic boom of a supersonic aircraft, but in this case the "shock" is caused by the robot velocity exceeding the projectile speed (instead of the speed of sound). -Contraction Rate and Preventing Bad Shots ------------------------------------------ +Shot Quality in Practice +------------------------- + +While *eventual* convergence is theoretically guaranteed for any velocity vector within the reachability boundary, truncating the iteration in poorly conditioned regions can produce a qualitatively wrong firing solution (the turret points the wrong way entirely). You can use two complementary ideas to decide when a shot is trustworthy. + +**First-order platform miss.** The leading contribution to miss from platform velocity error is simply time-of-flight times the velocity error magnitude: :math:`\tau \times |\delta\mathbf{v}|`. You do not need to run extra iterations to estimate this — use your solved :math:`\tau` and an estimate of your velocity uncertainty (e.g. from odometry or a conservative bound). This gives a direct, parametric "how far could we miss from platform error alone?" in meters. + +**Interaction indicator (contraction rate).** The rate at which the fixed-point iteration is changing near the solution — the contraction factor :math:`|\phi'|` — tells you how much that first-order miss is *amplified* by the geometry, and how much platform error and shooter error *interact*. When :math:`|\phi'|` is close to 0 (e.g. along the geodesic), platform and shooter errors effectively decouple: range error is attributable to the shooter, angle/lead error to the platform. When :math:`|\phi'|` is close to 1, the same velocity error produces a larger TOF error, and platform and shooter errors couple. You can estimate :math:`|\phi'|` cheaply by running a short fixed-point sequence (e.g. :math:`1 + n` steps, where :math:`n` is your iteration budget), then forming the ratio of the last two TOF steps; the visualization's **Fractal (Interaction)** mode shows this value over velocity space (0 = good, 1 = bad). + +**Using both.** A practical hybrid is: (1) solve for the firing solution (e.g. run the recursion until converged or iteration limit). (2) Optionally run a few extra fixed-point steps from the same initial guess to get an interaction indicator :math:`|\phi'|`. (3) If you have a velocity uncertainty estimate, compute the first-order platform miss :math:`\tau \times |\delta\mathbf{v}|`. (4) Prefer approach velocities along or near the geodesic when possible. -While *eventual* convergence is theoretically guaranteed for any velocity vector within the reachability boundary - even in these regions of chaotic/poor convergence, the shot will eventually converge to the correct solution if you wait long enough. But, as we can see from the simulation,this iteration may take a very long time, and truncating it may produce a qualitatively wrong firing solution (the turret points the wrong way entirely). A good fire control system will check the contraction rate (the rate at which the time-of-flight is changing at the last iteration) and prevent firing if it is too large. +**Advisory UI.** Because the driver is aware of context that the algorithm is not, the shot-quality advisory should display *both* metrics separately (and optionally a combined warning), not only a single fused value. Show the first-order platform miss (e.g. in meters or "expected miss") and the interaction indicator :math:`|\phi'|` (e.g. 0–1 or "fragility") as distinct readouts. If the context dictates that the the operator *must* drive fast, then only the interaction indicator matters - the driver will want to pick the least-fragile shot that still satisfies the speed constraint. But if the operator is free to drive slower, then they will want to pick a shot that minimizes the first-order platform miss. Let the driver see both values and override when the situation warrants (e.g. a marginal shot with little time left). The Effect of Firing Strategy ----------------------------- diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst index 7baefbaa41..475d42eb19 100644 --- a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -105,14 +105,16 @@ A practical compromise: use the constant-velocity derivative :math:`1/v_p` as a The convergence rate of this proxy-Newton approach sits between linear (fixed-point) and quadratic (exact Newton), with the gap depending on how much drag distorts :math:`\operatorname{tof}'(D)` from :math:`1/v_p`. For FRC-class projectiles where drag is modest, the distortion is small and you get nearly the full Newton speedup for free. -Contraction Rate and Preventing Bad Shots, Revisited ----------------------------------------------------- +Shot Quality in Practice +------------------------- -It may seem at this point that we have "solved" the problem of the "mach cone" - by using Newton's method, we can converge to the correct solution in a few iterations, even in the troublesome region of sprinting directly towards the target. But remember, Newton's method does not change the physics of the problem - it only changes the numerics. The shot will still likely miss if the robot velocity is not estimated accurately enough. +Newton's method converges to the correct solution in a few iterations even in the Mach cone region, but it does not change the physics: the shot is still fragile there if the robot velocity is wrong. The fixed-point iteration's contraction rate gives you a *shot quality metric* that Newton alone does not. Because the extra work is cheap, use both. -So, while Newton's method gives us a very powerful tool for quickly finding the correct firing solution, it does so at the cost of erasing the convenient built-in "bad shot" warning system of the fixed-point iteration. Fortunately, because these computations are exceedingly cheap, we can just do both: +**In practice:** -1. **Newton's method** (with proxy derivative) produces the *firing solution*. It always converges quickly, even in the Mach cone region. -2. **The fixed-point iteration**, by means of its contraction rate, produces a *firing solution quality metric* from the same initial guess. +1. **Newton's method** (with proxy derivative) produces the *firing solution*. Use it so the solver always converges quickly. +2. **Fixed-point quality metric.** Run a short fixed-point sequence (e.g. :math:`1 + n` steps with your iteration budget :math:`n`) from the same initial guess. Form the ratio of the last two TOF steps to get the contraction factor :math:`|\phi'|` in :math:`[0,1]`. This is nonparametric: you do not need to know your velocity or shooter error; it tells you how fragile the shot is. When :math:`|\phi'| \approx 0` (e.g. along the geodesic), platform and shooter errors decouple; when :math:`|\phi'|` is large, they amplify and interact. +3. **First-order platform miss.** Combine with an estimate of velocity uncertainty :math:`|\delta\mathbf{v}|`: the leading miss from platform error is :math:`\tau \times |\delta\mathbf{v}|`. Use your solved :math:`\tau`; no extra iterations needed. +4. **Advisory UI.** Display both metrics separately (and optionally a combined warning), not only a single fused value. Show the first-order platform miss :math:`\tau \times |\delta\mathbf{v}|` (e.g. expected miss in meters) and the interaction indicator :math:`|\phi'|` (e.g. fragility 0–1) as distinct readouts. When the operator is constrained to move fast, they may care mainly about the margins (first-order); in other situations both matter. Suppress or warn when either exceeds a threshold, but let the operator see both values and override when the situation warrants (e.g. a marginal shot with little time left). Prefer approach velocities along or near the geodesic when possible. -This separates *solver convergence* from *shot quality*, turning convergence-based shot suppression from a hard limitation into an overridable advisory. The driver retains authority over the risk/reward tradeoff: a marginal-confidence shot with ten seconds left and down by one is a shot you take. The algorithm provides the information; the human makes the call. +This separates *solver convergence* from *shot quality*, so convergence-based shot suppression becomes an overridable advisory. The algorithm provides the information; the human makes the call. From 79f278bd57014041472aae59c6a19d3fc0f67f0a Mon Sep 17 00:00:00 2001 From: Oblarg Date: Thu, 19 Feb 2026 11:40:34 -0500 Subject: [PATCH 121/135] improve wording --- .../fire-control/newton-shooting.rst | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst index 475d42eb19..4ba85e1f79 100644 --- a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -22,7 +22,7 @@ As the robot moves, the *virtual target* shifts opposite to the robot's velocity with components :math:`d_x(\tau) = (g_x - r_x) - v_x \tau` and :math:`d_y(\tau) = (g_y - r_y) - v_y \tau`. The distance to the virtual target is :math:`D(\tau) = \lvert\mathbf{d}(\tau)\rvert = \sqrt{d_x^2 + d_y^2}`. -The firing table maps distance to time of flight. In the constant-velocity model this is simply :math:`\operatorname{tof}(D) = D / v_p`. The fixed-point iteration from the previous article is then :math:`\tau_{n+1} = \operatorname{tof}\!\bigl(D(\tau_n)\bigr)`. +The firing table maps distance to time of flight; call this mapping :math:`\operatorname{tof}(D)`. It may be the constant-velocity model :math:`\operatorname{tof}(D) = D / v_p`, or an empirical lookup table (LUT) that violates that assumption (e.g. due to drag). The fixed-point iteration from the previous article is :math:`\tau_{n+1} = \operatorname{tof}\!\bigl(D(\tau_n)\bigr)` — we converge to the TOF that the table implies for the current geometry. To apply Newton's method, we rewrite the fixed-point condition as a root-finding problem. Define the *TOF error*: @@ -30,7 +30,7 @@ To apply Newton's method, we rewrite the fixed-point condition as a root-finding E(\tau) \;=\; \tau \;-\; \operatorname{tof}\!\bigl(D(\tau)\bigr) -At the solution, :math:`E(\tau^*) = 0` — the guessed TOF equals the TOF the geometry demands. Newton's method iterates: +At the solution, :math:`E(\tau^*) = 0` — the guessed TOF equals the TOF the table demands for the virtual distance :math:`D(\tau^*)`. So **whatever** :math:`\operatorname{tof}` we use (constant-velocity or LUT), Newton will converge to *that* table's TOF if we use that same :math:`\operatorname{tof}` in the residual. Newton's method iterates: .. math:: @@ -42,23 +42,36 @@ The derivative :math:`E'` requires the chain rule through the distance function. \frac{dD}{d\tau} \;=\; \frac{\mathbf{d} \cdot (-\mathbf{v})}{D} \;=\; -\,\frac{d_x\, v_x + d_y\, v_y}{D} -This is the rate at which the virtual target distance changes per unit change in TOF guess; it is negative when the robot velocity has a component toward the target (increasing :math:`\tau` moves the virtual target closer). - -Using :math:`\operatorname{tof}'(D) = 1/v_p`, the error derivative becomes: +This is the rate at which the virtual target distance changes per unit change in TOF guess; it is negative when the robot velocity has a component toward the target (increasing :math:`\tau` moves the virtual target closer). By the chain rule, the error derivative is: .. math:: - E'(\tau) \;=\; 1 \;-\; \frac{1}{v_p}\,\frac{dD}{d\tau} \;=\; 1 \;+\; \frac{d_x\, v_x + d_y\, v_y}{v_p\; D} + E'(\tau) \;=\; 1 \;-\; \operatorname{tof}'(D)\,\frac{dD}{d\tau} + \;=\; 1 \;+\; \operatorname{tof}'(D)\;\frac{d_x\, v_x + d_y\, v_y}{D} + +(the two negatives — one from :math:`E = \tau - \operatorname{tof}`, one from :math:`dD/d\tau` — combine to a positive term.) So in general we need :math:`\operatorname{tof}'(D)` to form the Newton step. + +**Constant-velocity case.** When :math:`\operatorname{tof}(D) = D/v_p`, we have :math:`\operatorname{tof}'(D) = 1/v_p` exactly. Then: -(the two negatives — one from differentiating :math:`E = \tau - \operatorname{tof}`, one from :math:`dD/d\tau` — combine to a positive term.) +.. math:: + + E'(\tau) \;=\; 1 \;+\; \frac{d_x\, v_x + d_y\, v_y}{v_p\; D} -Substituting into the Newton update rule :math:`\tau_{n+1} = \tau_n - E/E'`: +and the Newton update is: .. math:: \tau_{n+1} \;=\; \tau_n \;-\; \frac{\tau_n - D / v_p}{\;1 \;+\; \dfrac{d_x\, v_x + d_y\, v_y}{v_p\; D}\;} -where :math:`d_x`, :math:`d_y`, and :math:`D` are all evaluated at :math:`\tau_n`. +with :math:`d_x`, :math:`d_y`, and :math:`D` evaluated at :math:`\tau_n`. + +**LUT / empirical table (middleground).** When the firing table is empirical, :math:`\operatorname{tof}(D)` is given by the table (e.g. interpolated), so the *true* TOF for a given distance is :math:`\operatorname{tof}_{\mathrm{LUT}}(D)`. We want the iteration to converge to that value — so we **use the LUT in the residual**: :math:`E(\tau) = \tau - \operatorname{tof}_{\mathrm{LUT}}(D(\tau))`. The derivative, however, would require :math:`\operatorname{tof}_{\mathrm{LUT}}'(D)`, which we do not have (differentiating a noisy table is undesirable). The practical middleground is to **keep the constant-velocity derivative** as a *proxy*: use the same :math:`E'(\tau)` as above (with :math:`1/v_p`), but in the Newton step use the LUT for the residual. That is: + +.. math:: + + \tau_{n+1} \;=\; \tau_n \;-\; \frac{\tau_n - \operatorname{tof}_{\mathrm{LUT}}(D)}{\;1 \;+\; \dfrac{d_x\, v_x + d_y\, v_y}{v_p\; D}\;} + +So the **residual** uses the empirical TOF (we converge to the correct table TOF); the **denominator** uses the theoretical :math:`1/v_p` (we get fast convergence without differentiating the table). The constant-velocity assumption guides the step direction; the LUT fixes the target TOF. Interactive Visualization ------------------------- @@ -95,9 +108,7 @@ Where Newton does genuinely help is in preventing a *bad failure mode*: in a rea Proxy Derivatives for Empirical Tables --------------------------------------- -In the constant-velocity model above, :math:`\operatorname{tof}'(D) = 1/v_p` is known exactly and Newton's method achieves quadratic convergence. With an empirical firing table (where :math:`\operatorname{tof}(D)` is a measured lookup rather than an analytical formula), the true derivative must be estimated numerically — and differentiating noisy data amplifies that noise. - -A practical compromise: use the constant-velocity derivative :math:`1/v_p` as a *proxy*, even when the firing table accounts for drag or other effects. This gives a quasi-Newton iteration that: +As derived above, the *middleground* for empirical tables is: residual :math:`E(\tau) = \tau - \operatorname{tof}_{\mathrm{LUT}}(D(\tau))` (so the fixed point is the table's TOF), derivative :math:`E'(\tau) = 1 + (d_x v_x + d_y v_y)/(v_p D)` using the constant-velocity proxy :math:`\operatorname{tof}'(D) \approx 1/v_p` (so the table is never differentiated). In the constant-velocity model, :math:`\operatorname{tof}'(D) = 1/v_p` is exact and Newton achieves quadratic convergence. With a LUT, using :math:`1/v_p` as a proxy gives a quasi-Newton iteration that: - Converges faster than fixed-point (the proxy provides a damped Newton correction) - Does not require differentiating the firing table (no noise amplification) From 52825902afbfbaf5df037099284d4c853f311a7d Mon Sep 17 00:00:00 2001 From: Oblarg Date: Thu, 19 Feb 2026 12:22:12 -0500 Subject: [PATCH 122/135] wording --- .../fire-control/newton-shooting.rst | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst index 4ba85e1f79..fdabcd2f62 100644 --- a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -22,15 +22,15 @@ As the robot moves, the *virtual target* shifts opposite to the robot's velocity with components :math:`d_x(\tau) = (g_x - r_x) - v_x \tau` and :math:`d_y(\tau) = (g_y - r_y) - v_y \tau`. The distance to the virtual target is :math:`D(\tau) = \lvert\mathbf{d}(\tau)\rvert = \sqrt{d_x^2 + d_y^2}`. -The firing table maps distance to time of flight; call this mapping :math:`\operatorname{tof}(D)`. It may be the constant-velocity model :math:`\operatorname{tof}(D) = D / v_p`, or an empirical lookup table (LUT) that violates that assumption (e.g. due to drag). The fixed-point iteration from the previous article is :math:`\tau_{n+1} = \operatorname{tof}\!\bigl(D(\tau_n)\bigr)` — we converge to the TOF that the table implies for the current geometry. +The firing table maps distance to time of flight; call this mapping :math:`\tau(D)`. It may be the constant-velocity model :math:`\tau(D) = D / v_p`, or an empirical lookup table (LUT) that violates that assumption (e.g. due to drag). The fixed-point iteration from the previous article is :math:`\tau_{n+1} = \tau(D(\tau_n))` — we converge to the TOF that the table implies for the current geometry. To apply Newton's method, we rewrite the fixed-point condition as a root-finding problem. Define the *TOF error*: .. math:: - E(\tau) \;=\; \tau \;-\; \operatorname{tof}\!\bigl(D(\tau)\bigr) + E(\tau) \;=\; \tau \;-\; \tau\!\bigl(D(\tau)\bigr) -At the solution, :math:`E(\tau^*) = 0` — the guessed TOF equals the TOF the table demands for the virtual distance :math:`D(\tau^*)`. So **whatever** :math:`\operatorname{tof}` we use (constant-velocity or LUT), Newton will converge to *that* table's TOF if we use that same :math:`\operatorname{tof}` in the residual. Newton's method iterates: +At the solution, :math:`E(\tau^*) = 0` — the guessed TOF equals the TOF the table demands for the virtual distance :math:`D(\tau^*)`. So **whatever** :math:`\tau(D)` we use (constant-velocity or LUT), Newton will converge to *that* table's TOF if we use that same :math:`\tau(D)` in the residual. Newton's method iterates: .. math:: @@ -46,12 +46,12 @@ This is the rate at which the virtual target distance changes per unit change in .. math:: - E'(\tau) \;=\; 1 \;-\; \operatorname{tof}'(D)\,\frac{dD}{d\tau} - \;=\; 1 \;+\; \operatorname{tof}'(D)\;\frac{d_x\, v_x + d_y\, v_y}{D} + E'(\tau) \;=\; 1 \;-\; \tau'(D)\,\frac{dD}{d\tau} + \;=\; 1 \;+\; \tau'(D)\;\frac{d_x\, v_x + d_y\, v_y}{D} -(the two negatives — one from :math:`E = \tau - \operatorname{tof}`, one from :math:`dD/d\tau` — combine to a positive term.) So in general we need :math:`\operatorname{tof}'(D)` to form the Newton step. +(the two negatives — one from :math:`E = \tau - \tau(D)`, one from :math:`dD/d\tau` — combine to a positive term.) So in general we need :math:`\tau'(D)` to form the Newton step. -**Constant-velocity case.** When :math:`\operatorname{tof}(D) = D/v_p`, we have :math:`\operatorname{tof}'(D) = 1/v_p` exactly. Then: +**Constant-velocity case.** When :math:`\tau(D) = D/v_p`, we have :math:`\tau'(D) = 1/v_p` exactly. Then: .. math:: @@ -65,11 +65,11 @@ and the Newton update is: with :math:`d_x`, :math:`d_y`, and :math:`D` evaluated at :math:`\tau_n`. -**LUT / empirical table (middleground).** When the firing table is empirical, :math:`\operatorname{tof}(D)` is given by the table (e.g. interpolated), so the *true* TOF for a given distance is :math:`\operatorname{tof}_{\mathrm{LUT}}(D)`. We want the iteration to converge to that value — so we **use the LUT in the residual**: :math:`E(\tau) = \tau - \operatorname{tof}_{\mathrm{LUT}}(D(\tau))`. The derivative, however, would require :math:`\operatorname{tof}_{\mathrm{LUT}}'(D)`, which we do not have (differentiating a noisy table is undesirable). The practical middleground is to **keep the constant-velocity derivative** as a *proxy*: use the same :math:`E'(\tau)` as above (with :math:`1/v_p`), but in the Newton step use the LUT for the residual. That is: +**LUT / empirical table (middleground).** When the firing table is empirical, :math:`\tau(D)` is given by the table (e.g. interpolated), so the *true* TOF for a given distance is :math:`\tau_{\mathrm{LUT}}(D)`. We want the iteration to converge to that value — so we **use the LUT in the residual**: :math:`E(\tau) = \tau - \tau_{\mathrm{LUT}}(D(\tau))`. The derivative, however, would require :math:`\tau_{\mathrm{LUT}}'(D)`, which we do not have (differentiating a noisy table is undesirable). The practical middleground is to **keep the constant-velocity derivative** as a *proxy*: use the same :math:`E'(\tau)` as above (with :math:`1/v_p`), but in the Newton step use the LUT for the residual. That is: .. math:: - \tau_{n+1} \;=\; \tau_n \;-\; \frac{\tau_n - \operatorname{tof}_{\mathrm{LUT}}(D)}{\;1 \;+\; \dfrac{d_x\, v_x + d_y\, v_y}{v_p\; D}\;} + \tau_{n+1} \;=\; \tau_n \;-\; \frac{\tau_n - \tau_{\mathrm{LUT}}(D)}{\;1 \;+\; \dfrac{d_x\, v_x + d_y\, v_y}{v_p\; D}\;} So the **residual** uses the empirical TOF (we converge to the correct table TOF); the **denominator** uses the theoretical :math:`1/v_p` (we get fast convergence without differentiating the table). The constant-velocity assumption guides the step direction; the LUT fixes the target TOF. @@ -108,13 +108,13 @@ Where Newton does genuinely help is in preventing a *bad failure mode*: in a rea Proxy Derivatives for Empirical Tables --------------------------------------- -As derived above, the *middleground* for empirical tables is: residual :math:`E(\tau) = \tau - \operatorname{tof}_{\mathrm{LUT}}(D(\tau))` (so the fixed point is the table's TOF), derivative :math:`E'(\tau) = 1 + (d_x v_x + d_y v_y)/(v_p D)` using the constant-velocity proxy :math:`\operatorname{tof}'(D) \approx 1/v_p` (so the table is never differentiated). In the constant-velocity model, :math:`\operatorname{tof}'(D) = 1/v_p` is exact and Newton achieves quadratic convergence. With a LUT, using :math:`1/v_p` as a proxy gives a quasi-Newton iteration that: +As derived above, the *middleground* for empirical tables is: residual :math:`E(\tau) = \tau - \tau_{\mathrm{LUT}}(D(\tau))` (so the fixed point is the table's TOF), derivative :math:`E'(\tau) = 1 + (d_x v_x + d_y v_y)/(v_p D)` using the constant-velocity proxy :math:`\tau'(D) \approx 1/v_p` (so the table is never differentiated). In the constant-velocity model, :math:`\tau'(D) = 1/v_p` is exact and Newton achieves quadratic convergence. With a LUT, using :math:`1/v_p` as a proxy gives a quasi-Newton iteration that: - Converges faster than fixed-point (the proxy provides a damped Newton correction) - Does not require differentiating the firing table (no noise amplification) -- Degrades gracefully: for drag, the true :math:`\operatorname{tof}'(D) > 1/v_p`, so the proxy undershoots the correction — a *stabilizing* error that slows convergence slightly but never causes divergence +- Degrades gracefully: for drag, the true :math:`\tau'(D) > 1/v_p`, so the proxy undershoots the correction — a *stabilizing* error that slows convergence slightly but never causes divergence -The convergence rate of this proxy-Newton approach sits between linear (fixed-point) and quadratic (exact Newton), with the gap depending on how much drag distorts :math:`\operatorname{tof}'(D)` from :math:`1/v_p`. For FRC-class projectiles where drag is modest, the distortion is small and you get nearly the full Newton speedup for free. +The convergence rate of this proxy-Newton approach sits between linear (fixed-point) and quadratic (exact Newton), with the gap depending on how much drag distorts :math:`\tau'(D)` from :math:`1/v_p`. For FRC-class projectiles where drag is modest, the distortion is small and you get nearly the full Newton speedup for free. Shot Quality in Practice ------------------------- From 1d541b6387585a7b3fea06cd1b910437d0b624d8 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Thu, 19 Feb 2026 12:43:15 -0500 Subject: [PATCH 123/135] describe initial guess sensitivity --- .../fire-control/newton-shooting.rst | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst index fdabcd2f62..88e58a29f4 100644 --- a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -73,12 +73,37 @@ with :math:`d_x`, :math:`d_y`, and :math:`D` evaluated at :math:`\tau_n`. So the **residual** uses the empirical TOF (we converge to the correct table TOF); the **denominator** uses the theoretical :math:`1/v_p` (we get fast convergence without differentiating the table). The constant-velocity assumption guides the step direction; the LUT fixes the target TOF. +Picking an Initial Guess +------------------------ + +Our fixed-point recursion started with a guess of the time of flight to the target from a non-moving platform. One benefit of the "naive" fixed-point recursion is that it is relatively insensitive to this initial guess; there's not much benefit to picking a better initial guess, because doing so would only help in regions where the convergence is garbage anyway. + +Newton's method is more powerful, but at a cost: it is more sensitive to the initial guess than the simpler fixed-point iteration. If the initial guess is too far from the true solution, the iteration may converge to an inappropriate solution. The time of flight error function above in fact has *two* roots (because there are two possible solutions to the shot-geometry problem); which one we converge to depends on the initial guess. + +For example, if we sprint towards the target at a speed greater than the projectile speed, the initial guess from our fixed-point recursion will force us to converge to a virtual target that is *behind* the platform. This is a "correct" solution, but it is not the one we want. + +To avoid this, we need to pick an initial guess that is close to the true solution. We can do this by using our constant-projectile-velocity model to direct-solve the case of motion directly towards or away from the target in terms of platform and projectile velocities: + +.. math:: + + \tau = \frac{D}{v_p + |\mathbf{v}|} + +We can use this formula for a general platform velocity by projecting the platform velocity onto the direction of the target: + +.. math:: + + \tau = \frac{D}{v_p + |\mathbf{v}|\cos(\theta)} + +where :math:`\theta` is the angle between the platform velocity and the target. + +This gives us an initial guess that is close to the desired solution regardless of the platform velocity, and guarantees good convergence behavior across the entire region of reachable velocity space. + Interactive Visualization ------------------------- Use the visualization below to compare Newton's method to the fixed-point iteration. The two **Simulation** modes let you drag the robot velocity vector and step through iterations for each solver; **Fractal (Newton)** and **Fractal (Fixed-Point)** show convergence heatmaps. -.. note:: The color scale differs between methods: Newton typically converges in 2–5 iterations, while the fixed-point iteration may take hundreds. The legend adjusts automatically. In both fractals, the same geodesic (purple) and convergence envelope (blue) are overlaid. +.. note:: The color scale differs between methods: Newton typically converges in 1-3 iterations, while the fixed-point iteration may take hundreds. The legend adjusts automatically. In both fractals, the same geodesic (purple) and convergence envelope (blue) are overlaid. .. raw:: html From 263c51a4f5987461b7d36a7116d0b89cb2a2ff44 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Thu, 19 Feb 2026 12:59:58 -0500 Subject: [PATCH 124/135] remove no-longer-present singularity mention --- .../software/advanced-controls/fire-control/newton-shooting.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst index 88e58a29f4..5dcc63f19a 100644 --- a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -119,8 +119,6 @@ Use the visualization below to compare Newton's method to the fixed-point iterat Toggle between **Fractal (Newton)** and **Fractal (Fixed-Point)** to see the dramatic reduction in iteration count. The fixed-point fractal's intricate banding structure — hundreds of iterations near the Mach cone boundary — collapses to a near-uniform 2–3 iterations under Newton's method. The convergence envelope (blue) also expands significantly: Newton converges in regions where fixed-point iteration fails entirely within the same iteration budget. -.. note:: In the Newton modes, the convergence envelope may show a narrow dip along the ray directly toward the target. This is a *point singularity* of :math:`E'(\tau)`: when the robot speed toward the target exactly equals :math:`v_p`, the virtual target distance :math:`D(\tau)` momentarily passes through zero, causing :math:`E'` to diverge. The envelope's ray-casting algorithm detects this as a convergence failure, but it is a measure-zero event — the heatmap's finite grid steps over it, and convergence recovers immediately on either side. The singularity is an artifact of the envelope search, not a practical concern for the algorithm. However, a robot moving directly towards the target at-or-above the projectile speed will collide with the target at or before the projectile lands. - Convergence Does Not Equal Quality ----------------------------------- From 6f70de30403812d63bfe2a21cbd523943bd7d241 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Thu, 19 Feb 2026 13:11:43 -0500 Subject: [PATCH 125/135] wording --- .../advanced-controls/fire-control/index.rst | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/index.rst b/source/docs/software/advanced-controls/fire-control/index.rst index 79f43b3680..60de0d6246 100644 --- a/source/docs/software/advanced-controls/fire-control/index.rst +++ b/source/docs/software/advanced-controls/fire-control/index.rst @@ -5,14 +5,17 @@ Fire Control This section describes software approaches for aiming a robot's shooting mechanism at a goal. Technical literature calls this "fire control", as it was first (and remains primarily) studied in the context of aiming artillery. -Fire control problems can be solved in one of two ways: +While it is possible to solve fire control problems directly from a mathematical model of the shooting mechanism and gamepiece, we do not cover that approach here. Instead, we cover a simpler approach that is more general and easier to understand, and which can be applied to many different shooting mechanisms and gamepieces: recursion. -1. Direct-solve -2. Recursion +Fire control by recursion follows the pattern of "lead-and-adjust": +1. We start with a guess at the time of flight to the target. +2. We use this guess to **lead** our shot by offsetting the target position by the predicted platform motion over the time of flight. +3. Our new 'virtual target' will have its own time of flight, so we need to **adjust** our lead accordingly. +4. We repeat this process until the time of flight stops changing; at this point, the shot solution has converged and shooting at the 'virtual target' should hit the real one. -This sequence of articles only covers recursion, because direct-solve methods depend much more heavily on the specifics of the shooting mechanism and gamepiece. Recursion is a general approach that can be applied to many different shooting mechanisms and gamepieces, and is relatively easy to understand, implement, and tune. +Chances are, if you've ever thrown a ball at a moving target, you've already done this kind of "lead-and-adjust" in your head. -Recursive approaches have another advantage: they are their own error analysis. By watching how the recursion converges, we can see how accurate the solution is likely to be. The interactive visualization in the dynamic shooting article allows you to explore this behavior graphically. +In addition to conceptual simplicity, recursion has another advantage: it provides its own error analysis. By watching how the recursion converges, we can see how accurate the solution is likely to be. The interactive visualization in the dynamic shooting article allows you to explore this behavior graphically. .. toctree:: :maxdepth: 1 From 4dab60545c7829b8e9d8dc7cb22e3e1d6463444b Mon Sep 17 00:00:00 2001 From: Oblarg Date: Fri, 20 Feb 2026 17:00:58 -0500 Subject: [PATCH 126/135] add linear drag adjustment page --- .../advanced-controls/fire-control/index.rst | 1 + .../fire-control/linear-drag.rst | 107 ++++++++++++++++++ .../fire-control/newton-shooting.rst | 2 +- 3 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 source/docs/software/advanced-controls/fire-control/linear-drag.rst diff --git a/source/docs/software/advanced-controls/fire-control/index.rst b/source/docs/software/advanced-controls/fire-control/index.rst index 60de0d6246..7c149d3ac0 100644 --- a/source/docs/software/advanced-controls/fire-control/index.rst +++ b/source/docs/software/advanced-controls/fire-control/index.rst @@ -23,3 +23,4 @@ In addition to conceptual simplicity, recursion has another advantage: it provid static-shooting dynamic-shooting newton-shooting + linear-drag diff --git a/source/docs/software/advanced-controls/fire-control/linear-drag.rst b/source/docs/software/advanced-controls/fire-control/linear-drag.rst new file mode 100644 index 0000000000..a6623327e2 --- /dev/null +++ b/source/docs/software/advanced-controls/fire-control/linear-drag.rst @@ -0,0 +1,107 @@ +Linear Drag (First-Order Air Friction) +====================================== + +.. note:: At higher velocities, drag force is better-modeled as including quadratic (squared) velocity term, in addition to the linear one. This is a more accurate model, but it is also more complex to compute. We will not cover that model here, but you can read more about it in the [Drag (physics)](https://en.wikipedia.org/wiki/Drag_%28physics%29#Low_Reynolds_numbers:_Stokes'_drag) article on Wikipedia. Most FRC game projectiles are small enough and slow enough that the linear drag model is a good approximation. + +The previous articles assumed that over a time interval :math:`\tau`, the platform (robot) displacement due to its velocity :math:`\mathbf{v}` is simply :math:`\mathbf{v}\,\tau` — Galilean relativity. That is exact in vacuum. If the projectile or the motion-adjustment is instead modeled with **linear drag** (Stokes drag), the effective displacement over time :math:`\tau` takes a different form. + +But Don't We Already Account for Drag? +-------------------------------------- + +One of the benefits of using a firing table rather than a mathematical model is that it automatically accounts for the effect of drag (so long as we have populated it by firing shots at different distances and tuning the table entries until the shots go in). You may then wonder - why do we need a drag adjustment at all? + +While the firing table accounts for the effect of drag induced by the motion of the projectile, it does *not* account for **induced windage** - the effect of the platform's motion on the projectile's drag. + +Fortunately, because we are only considering *linear* drag, the effect of the induced windage is strictly additive; it does not interact with the "free" drag adjustment that we already have implicit in our firing table. Since we are already displacing the target by a distance depending on our time of flight, it would be convenient if we could simply adjust that displacement in a simple way that correctly accounts for the induced windage without having to modify the firing table. + +It turns out, we can do exactly that - the adjustment is simple, elegant, and introduces only a single new parameter: the drag constant :math:`k`. + +Platform-Induced Motion under Linear Drag +----------------------------------------- + +Both of our methods for solving the dynamic shooting problem require us to compute the platform-induced displacement over time :math:`\tau`. Recall that, not taking into account the drag, the displacement is simply :math:`\mathbf{v}\,\tau`. + +Under linear drag, displacement over time is not simply linear; it decays exponentially at a rate determined by the drag constant :math:`k`: + +.. math:: + + \Delta\mathbf{x} \;=\; \mathbf{v}\;\frac{1 - e^{-k \tau}}{k} + +So instead of :math:`\mathbf{v}\,\tau`, we have :math:`\mathbf{v}\,\alpha(\tau)` with an **adjustment factor**: + +.. math:: + + \alpha(\tau) \;=\; \frac{1 - e^{-k \tau}}{k} + +Intuitively, as the platform moves, the projectile initially gets a boost from the platform, but drag decays that relative motion - so, for small :math:`\tau`, the displacement is approximately our original displacement :math:`\mathbf{v}\,\tau` as the velocity does not yet decay much; but for large :math:`\tau`, the displacement approaches an asymptote of :math:`\frac{\mathbf{v}}{k}` as the velocity induced by the platform's motion decays to zero. + +As :math:`k \to 0` (vacuum), :math:`\alpha(\tau) \to \tau`, and we recover simple Galilean displacement :math:`\mathbf{v}\,\tau`. + +This adjustment factor is easy to compute, and can be applied to both the fixed-point iteration and Newton's method. + +Fixed-Point Iteration with Linear Drag (TOF Recursion) +------------------------------------------------------ + +The recursion is unchanged in form: we repeatedly look up the TOF for the current virtual distance and use that TOF to update the virtual target. The only change is that the virtual target is now computed using :math:`\alpha(\tau)` instead of :math:`\tau`: + +1. Given a TOF guess :math:`\tau_n`, form :math:`\mathbf{d}(\tau_n) = (\mathbf{g} - \mathbf{r}) - \mathbf{v}\,\alpha(\tau_n)` and :math:`D(\tau_n) = \lvert\mathbf{d}(\tau_n)\rvert`. +2. Look up the time of flight for that distance: :math:`\tau_{n+1} = \tau(D(\tau_n))` (or :math:`\tau_{\mathrm{LUT}}(D(\tau_n))` with your table). +3. Repeat until converged. + +So the **fixed-point iteration** remains :math:`\tau_{n+1} = \tau(D(\tau_n))`; the geometry :math:`D(\tau)` now uses the drag-adjusted displacement :math:`\mathbf{v}\,\alpha(\tau)` instead of :math:`\mathbf{v}\,\tau`. If your LUT was built under the same linear-drag assumption (or you use a constant-velocity table as an approximation), this recursion converges to the correct lead for that model. + +Newton's Method with Linear Drag +-------------------------------- + +The same substitution applies, but we need to be intentional about where we apply it - we need to adjust both the residual (by computing it from the drag-adjusted virtual distance) and the derivative (by computing it from the drag-adjusted virtual distance's derivative). Define the TOF error as before, but with the drag-adjusted virtual distance: + +.. math:: + + E(\tau) \;=\; \tau \;-\; \tau\!\bigl(D(\tau)\bigr) + \qquad\text{where}\qquad + \mathbf{d}(\tau) \;=\; (\mathbf{g} - \mathbf{r}) \;-\; \mathbf{v}\,\alpha(\tau) + \,,\quad D(\tau) \;=\; \lvert\mathbf{d}(\tau)\rvert + +Newton's method still iterates :math:`\tau_{n+1} = \tau_n - E(\tau_n)/E'(\tau_n)`. The derivative :math:`E'(\tau)` now includes the effect of :math:`\alpha(\tau)`. Since :math:`d\mathbf{d}/d\tau = -\mathbf{v}\,\alpha'(\tau)`: + +.. math:: + + \frac{dD}{d\tau} + \;=\; \frac{\mathbf{d} \cdot (-\mathbf{v}\,\alpha'(\tau))}{D} + \;=\; -\alpha'(\tau)\;\frac{d_x\, v_x + d_y\, v_y}{D} + +So the error derivative is (chain rule, same as before but with the extra :math:`\alpha'(\tau)` factor): + +.. math:: + + E'(\tau) \;=\; 1 \;-\; \tau'(D)\,\frac{dD}{d\tau} + \;=\; 1 \;+\; \tau'(D)\,\alpha'(\tau)\;\frac{d_x\, v_x + d_y\, v_y}{D} + +With the constant-velocity proxy :math:`\tau'(D) \approx 1/v_p`: + +.. math:: + + E'(\tau) \;=\; 1 \;+\; \alpha'(\tau)\;\frac{d_x\, v_x + d_y\, v_y}{v_p\; D} + +For linear drag, :math:`\alpha(\tau) = (1 - e^{-k\tau})/k`, so: + +.. math:: + + \alpha'(\tau) \;=\; e^{-k\tau} + +and the Newton step is fully explicit: residual uses your LUT (and :math:`\alpha(\tau)` in :math:`D(\tau)`), denominator uses :math:`1/v_p` and :math:`\alpha'(\tau) = e^{-k\tau}`. + +This gives us a correct drag-adjusted convergence target (because our residual is computed from the drag-adjusted virtual distance) and a faster-converging Newton step (because the derivative is computed from the drag-adjusted virtual distance's derivative). + +The Drag Constant :math:`k` +--------------------------- + +Our linear drag adjustment in either case introduces a single new parameter: the drag constant :math:`k`. This corresponds to the "time constant" of the linear drag decay: after time :math:`\tau = 1/k`, the velocity has decayed to :math:`e^{-1} \approx 0.368` of its initial value (and the displacement over that time is :math:`\mathbf{v}\,\alpha(1/k) = \mathbf{v}\,(1 - e^{-1})/k`). + +For FRC gamepieces, which travel at low speed and typically have a fair amount of linear drag, it is pretty easy to "eyeball" the drag constant by simply counting the seconds for a launched projectile to lose a bit more than half its initial velocity. The reciprocal of this time is the drag constant :math:`k`. + +Alternatively, you can simply tune the drag constant until the shots go in at high platform speeds (remember, the firing table should already account for the effect of drag on stationary shots, so you are tuning for the induced windage effect alone). + + + + diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst index 5dcc63f19a..108568d966 100644 --- a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -88,7 +88,7 @@ To avoid this, we need to pick an initial guess that is close to the true soluti \tau = \frac{D}{v_p + |\mathbf{v}|} -We can use this formula for a general platform velocity by projecting the platform velocity onto the direction of the target: +We can use this formula for a general platform velocity by projecting the platform velocity onto the direction of the target: .. math:: From 3d5189c63617446f948896bfb22f8dea55905657 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Fri, 20 Feb 2026 22:47:16 -0500 Subject: [PATCH 127/135] wording --- .../advanced-controls/fire-control/linear-drag.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/linear-drag.rst b/source/docs/software/advanced-controls/fire-control/linear-drag.rst index a6623327e2..08ee6eb64a 100644 --- a/source/docs/software/advanced-controls/fire-control/linear-drag.rst +++ b/source/docs/software/advanced-controls/fire-control/linear-drag.rst @@ -27,17 +27,17 @@ Under linear drag, displacement over time is not simply linear; it decays expone \Delta\mathbf{x} \;=\; \mathbf{v}\;\frac{1 - e^{-k \tau}}{k} -So instead of :math:`\mathbf{v}\,\tau`, we have :math:`\mathbf{v}\,\alpha(\tau)` with an **adjustment factor**: +So instead of :math:`\mathbf{v}\,\tau`, we have :math:`\mathbf{v}\,\alpha(\tau)` with an **effective time-of-flight**: .. math:: \alpha(\tau) \;=\; \frac{1 - e^{-k \tau}}{k} -Intuitively, as the platform moves, the projectile initially gets a boost from the platform, but drag decays that relative motion - so, for small :math:`\tau`, the displacement is approximately our original displacement :math:`\mathbf{v}\,\tau` as the velocity does not yet decay much; but for large :math:`\tau`, the displacement approaches an asymptote of :math:`\frac{\mathbf{v}}{k}` as the velocity induced by the platform's motion decays to zero. +In the case of short flight times or low drag constants, :math:`\alpha(\tau) \approx \tau`, so the effective time-of-flight is approximately the original time-of-flight. This is our original Galilean displacement. -As :math:`k \to 0` (vacuum), :math:`\alpha(\tau) \to \tau`, and we recover simple Galilean displacement :math:`\mathbf{v}\,\tau`. +As :math:`\tau` increases, :math:`\alpha(\tau)` approaches :math:`\frac{1}{k}`. This asymptote represents the limit of the effect of the platform's motion on the projectile; once the platform-induced velocity has decayed to zero, further flight time does not cause any additional platform-induced displacement. -This adjustment factor is easy to compute, and can be applied to both the fixed-point iteration and Newton's method. +This effective time-of-flight is easy to compute, and can be applied to both the fixed-point iteration and Newton's method. Fixed-Point Iteration with Linear Drag (TOF Recursion) ------------------------------------------------------ From 2e67505f9048f1906eabc3898487c03ae6d89cd3 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Sat, 21 Feb 2026 14:59:24 -0500 Subject: [PATCH 128/135] wording --- .../advanced-controls/fire-control/linear-drag.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/linear-drag.rst b/source/docs/software/advanced-controls/fire-control/linear-drag.rst index 08ee6eb64a..1a48d2d001 100644 --- a/source/docs/software/advanced-controls/fire-control/linear-drag.rst +++ b/source/docs/software/advanced-controls/fire-control/linear-drag.rst @@ -42,13 +42,13 @@ This effective time-of-flight is easy to compute, and can be applied to both the Fixed-Point Iteration with Linear Drag (TOF Recursion) ------------------------------------------------------ -The recursion is unchanged in form: we repeatedly look up the TOF for the current virtual distance and use that TOF to update the virtual target. The only change is that the virtual target is now computed using :math:`\alpha(\tau)` instead of :math:`\tau`: +The recursion is unchanged in form: we repeatedly look up the TOF for the current virtual distance and use that TOF to update the virtual target: -1. Given a TOF guess :math:`\tau_n`, form :math:`\mathbf{d}(\tau_n) = (\mathbf{g} - \mathbf{r}) - \mathbf{v}\,\alpha(\tau_n)` and :math:`D(\tau_n) = \lvert\mathbf{d}(\tau_n)\rvert`. -2. Look up the time of flight for that distance: :math:`\tau_{n+1} = \tau(D(\tau_n))` (or :math:`\tau_{\mathrm{LUT}}(D(\tau_n))` with your table). -3. Repeat until converged. +1. Given a TOF guess :math:`\tau_n`, form the effective time-of-flight :math:`\alpha(\tau_n)` +2. Calculate the virtual target offset using the effective time-of-flight: :math:`\mathbf{v}\,\alpha(\tau_n)` +3. Look up the time-of-flight for the distance to the virtual target in the look-up table, and repeat until converged. -So the **fixed-point iteration** remains :math:`\tau_{n+1} = \tau(D(\tau_n))`; the geometry :math:`D(\tau)` now uses the drag-adjusted displacement :math:`\mathbf{v}\,\alpha(\tau)` instead of :math:`\mathbf{v}\,\tau`. If your LUT was built under the same linear-drag assumption (or you use a constant-velocity table as an approximation), this recursion converges to the correct lead for that model. +There's no need to modify the look-up table or change any other step in the recursion; the **only** change is to use the effective time-of-flight instead of the original time-of-flight when computing the virtual target offset. Newton's Method with Linear Drag -------------------------------- From 14c08089d0bb7c530574981b02b8bc204585ed61 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Sat, 21 Feb 2026 18:27:57 -0500 Subject: [PATCH 129/135] add drag constant determination method --- .../advanced-controls/fire-control/linear-drag.rst | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/linear-drag.rst b/source/docs/software/advanced-controls/fire-control/linear-drag.rst index 1a48d2d001..670b45586b 100644 --- a/source/docs/software/advanced-controls/fire-control/linear-drag.rst +++ b/source/docs/software/advanced-controls/fire-control/linear-drag.rst @@ -98,10 +98,14 @@ The Drag Constant :math:`k` Our linear drag adjustment in either case introduces a single new parameter: the drag constant :math:`k`. This corresponds to the "time constant" of the linear drag decay: after time :math:`\tau = 1/k`, the velocity has decayed to :math:`e^{-1} \approx 0.368` of its initial value (and the displacement over that time is :math:`\mathbf{v}\,\alpha(1/k) = \mathbf{v}\,(1 - e^{-1})/k`). -For FRC gamepieces, which travel at low speed and typically have a fair amount of linear drag, it is pretty easy to "eyeball" the drag constant by simply counting the seconds for a launched projectile to lose a bit more than half its initial velocity. The reciprocal of this time is the drag constant :math:`k`. +We can "eyeball" the drag constant by launching a gamepiece and counting the seconds for it to lose a bit more than half its initial velocity, and taking the reciprocal. However, if we want to do something a bit more rigorous, we can do a variable-shot-distance experiment. -Alternatively, you can simply tune the drag constant until the shots go in at high platform speeds (remember, the firing table should already account for the effect of drag on stationary shots, so you are tuning for the induced windage effect alone). +Alternatively, we can launch a projectile at a sufficiently high velocity that the drag brings it to a (horizontal) stop (meaning that it is falling vertically when it hits the ground). This is the "asymptote" case we discussed earlier, of :math:`\alpha(\tau) \to \frac{1}{k}` as :math:`\tau \to \infty`; noting that corresponding the displacement of this asymptote :math:`\frac{\mathbf{v}}{k}` depends only on the drag constant and the initial velocity, we can use the initial velocity and the measured shot distance :math:`d` to solve for the drag constant: +.. math:: + k = \frac{\mathbf{v}}{d} +This is, of course, only as accurate as the measurements of the initial velocity and the shot distance. +Or, ultimately, we can just tune the drag constant in the actual robot code until the shots go in at high platform speeds (remember, the firing table should already account for the effect of drag on stationary shots, so we are tuning for the induced windage effect alone). This is perfectly acceptable, and is the simplest method if we are not able to measure the drag constant experimentally. From 9c4f943d1ee877542efceb1b45aa82e51e167097 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Sun, 22 Feb 2026 16:47:19 -0500 Subject: [PATCH 130/135] small wording --- .../software/advanced-controls/fire-control/linear-drag.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/docs/software/advanced-controls/fire-control/linear-drag.rst b/source/docs/software/advanced-controls/fire-control/linear-drag.rst index 670b45586b..d18f95f8ca 100644 --- a/source/docs/software/advanced-controls/fire-control/linear-drag.rst +++ b/source/docs/software/advanced-controls/fire-control/linear-drag.rst @@ -98,7 +98,7 @@ The Drag Constant :math:`k` Our linear drag adjustment in either case introduces a single new parameter: the drag constant :math:`k`. This corresponds to the "time constant" of the linear drag decay: after time :math:`\tau = 1/k`, the velocity has decayed to :math:`e^{-1} \approx 0.368` of its initial value (and the displacement over that time is :math:`\mathbf{v}\,\alpha(1/k) = \mathbf{v}\,(1 - e^{-1})/k`). -We can "eyeball" the drag constant by launching a gamepiece and counting the seconds for it to lose a bit more than half its initial velocity, and taking the reciprocal. However, if we want to do something a bit more rigorous, we can do a variable-shot-distance experiment. +We can "eyeball" the drag constant by launching a gamepiece and counting the seconds for it to lose a bit more than half its initial velocity, and taking the reciprocal. Alternatively, we can launch a projectile at a sufficiently high velocity that the drag brings it to a (horizontal) stop (meaning that it is falling vertically when it hits the ground). This is the "asymptote" case we discussed earlier, of :math:`\alpha(\tau) \to \frac{1}{k}` as :math:`\tau \to \infty`; noting that corresponding the displacement of this asymptote :math:`\frac{\mathbf{v}}{k}` depends only on the drag constant and the initial velocity, we can use the initial velocity and the measured shot distance :math:`d` to solve for the drag constant: From 75060775df4d6f047f75a866d390cb0e82d1b83a Mon Sep 17 00:00:00 2001 From: Oblarg Date: Mon, 23 Feb 2026 15:35:11 -0500 Subject: [PATCH 131/135] improve newton's derivation per feedback --- .../fire-control/newton-shooting.rst | 62 +++++++++++-------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst index 108568d966..091443a21a 100644 --- a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -14,64 +14,76 @@ We first introduce notation. Let: - :math:`v_p` — projectile speed (constant) - :math:`\tau` — time of flight (the unknown we solve for) -As the robot moves, the *virtual target* shifts opposite to the robot's velocity. The displacement from the robot to the virtual target at a given TOF guess :math:`\tau` is: +As the robot moves, the *virtual target* shifts opposite to the robot's velocity. The firing table maps distance to time of flight; call this mapping :math:`\tau(D)`. It may be the constant-velocity model :math:`\tau(D) = D / v_p`, or an empirical lookup table (LUT). The fixed-point iteration is :math:`\tau_{n+1} = \tau(D(\tau_n))` — we converge to the TOF that the table implies for the current geometry. To use Newton's method instead, we define the *TOF error* :math:`E(\tau) = \tau - \tau(D(\tau))` and iterate: .. math:: - \mathbf{d}(\tau) \;=\; (\mathbf{g} - \mathbf{r}) \;-\; \mathbf{v}\,\tau + \tau_{n+1} \;=\; \tau_n \;-\; \frac{E(\tau_n)}{E'(\tau_n)} -with components :math:`d_x(\tau) = (g_x - r_x) - v_x \tau` and :math:`d_y(\tau) = (g_y - r_y) - v_y \tau`. The distance to the virtual target is :math:`D(\tau) = \lvert\mathbf{d}(\tau)\rvert = \sqrt{d_x^2 + d_y^2}`. +The rest of this section is a recipe for computing :math:`E` and :math:`E'` at the current guess :math:`\tau_n`, so you can plug them into the equation above. -The firing table maps distance to time of flight; call this mapping :math:`\tau(D)`. It may be the constant-velocity model :math:`\tau(D) = D / v_p`, or an empirical lookup table (LUT) that violates that assumption (e.g. due to drag). The fixed-point iteration from the previous article is :math:`\tau_{n+1} = \tau(D(\tau_n))` — we converge to the TOF that the table implies for the current geometry. +Step 1 — Geometry at the current guess +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -To apply Newton's method, we rewrite the fixed-point condition as a root-finding problem. Define the *TOF error*: +At the current TOF guess :math:`\tau_n`, compute the displacement to the virtual target and its distance: .. math:: - E(\tau) \;=\; \tau \;-\; \tau\!\bigl(D(\tau)\bigr) - -At the solution, :math:`E(\tau^*) = 0` — the guessed TOF equals the TOF the table demands for the virtual distance :math:`D(\tau^*)`. So **whatever** :math:`\tau(D)` we use (constant-velocity or LUT), Newton will converge to *that* table's TOF if we use that same :math:`\tau(D)` in the residual. Newton's method iterates: + d_x \;=\; (g_x - r_x) \;-\; v_x\,\tau_n + \qquad + d_y \;=\; (g_y - r_y) \;-\; v_y\,\tau_n + \qquad + D \;=\; \sqrt{d_x^2 + d_y^2} -.. math:: +(Equivalently, :math:`\mathbf{d} = (\mathbf{g} - \mathbf{r}) - \mathbf{v}\,\tau_n` and :math:`D = \lvert\mathbf{d}\rvert`.) - \tau_{n+1} \;=\; \tau_n \;-\; \frac{E(\tau_n)}{E'(\tau_n)} +Step 2 — The error (residual) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The derivative :math:`E'` requires the chain rule through the distance function. Differentiating :math:`D` with respect to :math:`\tau`: +Compute the TOF error. The table says that distance :math:`D` corresponds to time of flight :math:`\tau(D)`; we want that to equal our guess, so the error is: .. math:: - \frac{dD}{d\tau} \;=\; \frac{\mathbf{d} \cdot (-\mathbf{v})}{D} \;=\; -\,\frac{d_x\, v_x + d_y\, v_y}{D} + E \;=\; \tau_n \;-\; \tau(D) -This is the rate at which the virtual target distance changes per unit change in TOF guess; it is negative when the robot velocity has a component toward the target (increasing :math:`\tau` moves the virtual target closer). By the chain rule, the error derivative is: +- **Constant-velocity:** :math:`\tau(D) = D/v_p`, so :math:`E = \tau_n - D/v_p`. +- **LUT:** look up :math:`\tau(D)` in your table (or interpolate); :math:`E = \tau_n - \tau_{\mathrm{LUT}}(D)`. The residual uses the table so we converge to the table's TOF. + +Step 3 — Rate of change of distance with respect to :math:`\tau` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +As we increase the TOF guess, the virtual target moves; :math:`d_x` and :math:`d_y` each change by :math:`-v_x` and :math:`-v_y` per unit :math:`\tau`. So the rate at which :math:`D` changes is: .. math:: - E'(\tau) \;=\; 1 \;-\; \tau'(D)\,\frac{dD}{d\tau} - \;=\; 1 \;+\; \tau'(D)\;\frac{d_x\, v_x + d_y\, v_y}{D} + \frac{dD}{d\tau} \;=\; -\frac{d_x\, v_x + d_y\, v_y}{D} -(the two negatives — one from :math:`E = \tau - \tau(D)`, one from :math:`dD/d\tau` — combine to a positive term.) So in general we need :math:`\tau'(D)` to form the Newton step. +(This is negative when the robot has a component of velocity toward the target — increasing :math:`\tau` shortens the distance.) In vector form, the same quantity is :math:`\mathbf{d} \cdot (-\mathbf{v}) / D`. -**Constant-velocity case.** When :math:`\tau(D) = D/v_p`, we have :math:`\tau'(D) = 1/v_p` exactly. Then: +Step 4 — The error derivative :math:`E'` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -.. math:: +By the chain rule, :math:`E' = 1 - \tau'(D)\,(dD/d\tau)`. We need :math:`\tau'(D)`: - E'(\tau) \;=\; 1 \;+\; \frac{d_x\, v_x + d_y\, v_y}{v_p\; D} +- **Constant-velocity:** :math:`\tau(D) = D/v_p` gives :math:`\tau'(D) = 1/v_p` exactly. +- **LUT:** we do not differentiate the table. Use the constant-velocity proxy :math:`\tau'(D) \approx 1/v_p`; the residual still uses the LUT so we converge to the correct TOF. -and the Newton update is: +With :math:`\tau'(D) = 1/v_p` (exact or proxy), the two minus signs combine and: .. math:: - \tau_{n+1} \;=\; \tau_n \;-\; \frac{\tau_n - D / v_p}{\;1 \;+\; \dfrac{d_x\, v_x + d_y\, v_y}{v_p\; D}\;} + E' \;=\; 1 \;+\; \frac{d_x\, v_x + d_y\, v_y}{v_p\, D} -with :math:`d_x`, :math:`d_y`, and :math:`D` evaluated at :math:`\tau_n`. +Step 5 — Newton update +^^^^^^^^^^^^^^^^^^^^^^ -**LUT / empirical table (middleground).** When the firing table is empirical, :math:`\tau(D)` is given by the table (e.g. interpolated), so the *true* TOF for a given distance is :math:`\tau_{\mathrm{LUT}}(D)`. We want the iteration to converge to that value — so we **use the LUT in the residual**: :math:`E(\tau) = \tau - \tau_{\mathrm{LUT}}(D(\tau))`. The derivative, however, would require :math:`\tau_{\mathrm{LUT}}'(D)`, which we do not have (differentiating a noisy table is undesirable). The practical middleground is to **keep the constant-velocity derivative** as a *proxy*: use the same :math:`E'(\tau)` as above (with :math:`1/v_p`), but in the Newton step use the LUT for the residual. That is: +Using the values of :math:`E` and :math:`E'` from the steps above: .. math:: - \tau_{n+1} \;=\; \tau_n \;-\; \frac{\tau_n - \tau_{\mathrm{LUT}}(D)}{\;1 \;+\; \dfrac{d_x\, v_x + d_y\, v_y}{v_p\; D}\;} + \tau_{n+1} \;=\; \tau_n \;-\; \frac{E}{E'} -So the **residual** uses the empirical TOF (we converge to the correct table TOF); the **denominator** uses the theoretical :math:`1/v_p` (we get fast convergence without differentiating the table). The constant-velocity assumption guides the step direction; the LUT fixes the target TOF. +Repeat from Step 1 with :math:`\tau_{n+1}` as the new guess until converged. Picking an Initial Guess ------------------------ From 8abdc99df50ec4eb9da06d3c1eeca5df89ad7055 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Mon, 23 Feb 2026 16:31:00 -0500 Subject: [PATCH 132/135] lint --- source/_extensions/controls_js_sim/newton-shooting.js | 2 +- .../visualization/newton-shooting-visualization.js | 2 +- .../advanced-controls/fire-control/newton-shooting.rst | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_extensions/controls_js_sim/newton-shooting.js b/source/_extensions/controls_js_sim/newton-shooting.js index 5c95406411..41bc3ce58b 100644 --- a/source/_extensions/controls_js_sim/newton-shooting.js +++ b/source/_extensions/controls_js_sim/newton-shooting.js @@ -345,7 +345,7 @@ class NewtonShootingWidget { this.fixedBtn.style.fontWeight = mode === "fixed-point" ? "bold" : "normal"; - // Update visualisation mode and solver method + // Update visualization mode and solver method if (mode === "newton") { this.visualization.setSolverMethod("newton"); this.visualization.setMode("fractal"); diff --git a/source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js b/source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js index dd5a8d423b..1c2da184ab 100644 --- a/source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js +++ b/source/_extensions/controls_js_sim/visualization/newton-shooting-visualization.js @@ -83,7 +83,7 @@ class NewtonShootingVisualization extends DynamicShootingVisualization { return iterations; } - // ── Optimised convergence counter (no allocations, for heatmap) ─────────── + // ── Optimized convergence counter (no allocations, for heatmap) ─────────── getNewtonIterationsToConvergence(robotVel, maxIter) { if (!this.robotPos || !this.targetPos) return maxIter; diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst index 091443a21a..7c32a3e03c 100644 --- a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -50,7 +50,7 @@ Compute the TOF error. The table says that distance :math:`D` corresponds to ti - **LUT:** look up :math:`\tau(D)` in your table (or interpolate); :math:`E = \tau_n - \tau_{\mathrm{LUT}}(D)`. The residual uses the table so we converge to the table's TOF. Step 3 — Rate of change of distance with respect to :math:`\tau` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ As we increase the TOF guess, the virtual target moves; :math:`d_x` and :math:`d_y` each change by :math:`-v_x` and :math:`-v_y` per unit :math:`\tau`. So the rate at which :math:`D` changes is: @@ -61,7 +61,7 @@ As we increase the TOF guess, the virtual target moves; :math:`d_x` and :math:`d (This is negative when the robot has a component of velocity toward the target — increasing :math:`\tau` shortens the distance.) In vector form, the same quantity is :math:`\mathbf{d} \cdot (-\mathbf{v}) / D`. Step 4 — The error derivative :math:`E'` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ By the chain rule, :math:`E' = 1 - \tau'(D)\,(dD/d\tau)`. We need :math:`\tau'(D)`: From 7754878dc6250f7e6f9b6be707e08fc235248643 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Mon, 23 Feb 2026 16:55:50 -0500 Subject: [PATCH 133/135] more wording --- .../controls_js_sim/dynamic-shooting.js | 8 +++---- .../dynamic-shooting-visualization.js | 14 ++++++------- .../fire-control/dynamic-shooting.rst | 21 +++++++++++++------ 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/source/_extensions/controls_js_sim/dynamic-shooting.js b/source/_extensions/controls_js_sim/dynamic-shooting.js index b5cd19f97e..6a18b68a30 100644 --- a/source/_extensions/controls_js_sim/dynamic-shooting.js +++ b/source/_extensions/controls_js_sim/dynamic-shooting.js @@ -58,7 +58,7 @@ class DynamicShootingWidget { this.controlDrawDiv.style.position = "relative"; this.controlDrawDiv.style.zIndex = "10"; - // Row 1: Mode toggle (Simulation, Fractal iterations, Fractal interaction) + // Row 1: Mode toggle (Simulation, Fractal iterations, Fractal stability) const row1 = document.createElement("div"); row1.style.cssText = "display: flex; align-items: center; justify-content: center; gap: 6px;"; const simBtn = document.createElement("button"); @@ -78,11 +78,11 @@ class DynamicShootingWidget { }.bind(this); row1.appendChild(fractIterBtn); const fractInterBtn = document.createElement("button"); - fractInterBtn.innerHTML = "Fractal (Interaction)"; + fractInterBtn.innerHTML = "Fractal (Stability)"; fractInterBtn.setAttribute("id", divIdPrefix + "_mode_fractal_inter"); fractInterBtn.style.cssText = "padding: 2px 10px; font-size: 12px; cursor: pointer;"; fractInterBtn.onclick = function() { - this.visualization.setFractalVariant("interaction"); + this.visualization.setFractalVariant("stability"); this.setMode("fractal"); this.refreshModeButtons(); }.bind(this); @@ -154,7 +154,7 @@ class DynamicShootingWidget { const variant = this.visualization.fractalVariant || "convergence"; this.modeSimBtn.style.fontWeight = mode === "simulation" ? "bold" : "normal"; this.modeFractalIterBtn.style.fontWeight = (mode === "fractal" && variant === "convergence") ? "bold" : "normal"; - this.modeFractalInterBtn.style.fontWeight = (mode === "fractal" && variant === "interaction") ? "bold" : "normal"; + this.modeFractalInterBtn.style.fontWeight = (mode === "fractal" && variant === "stability") ? "bold" : "normal"; }.bind(this); this.setMode = function(mode) { diff --git a/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js b/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js index a4e0ccf11b..66921f2f13 100644 --- a/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js +++ b/source/_extensions/controls_js_sim/visualization/dynamic-shooting-visualization.js @@ -205,7 +205,7 @@ class DynamicShootingVisualization extends BaseVisualization { this.mode = "simulation"; // Fractal/heatmap state (velocity-space view) this.heatmapData = null; - this.fractalVariant = "convergence"; // "convergence" | "interaction" + this.fractalVariant = "convergence"; // "convergence" | "stability" this.heatmapMaxVel = 20.0; this.heatmapGrid = 200; this.iterationCap = 1000; @@ -308,11 +308,11 @@ class DynamicShootingVisualization extends BaseVisualization { const vx = bounds.vxMin + (i + 0.5) * stepX; const vy = bounds.vyMax - (j + 0.5) * stepY; if (!this.isInsideReachability(vx, vy)) { - row.push(variant === "interaction" ? NaN : -1); + row.push(variant === "stability" ? NaN : -1); continue; } const vel = { x: vx, y: vy }; - if (variant === "interaction") { + if (variant === "stability") { const phi = this.getInteractionIndicator(vel); row.push(phi); } else { @@ -481,7 +481,7 @@ class DynamicShootingVisualization extends BaseVisualization { // Run the dynamic shooting recursion algorithm iterations // Returns an array of iteration data objects. - // When allowEarlyTermination is false, never break on convergence (used for interaction heatmap). + // When allowEarlyTermination is false, never break on convergence (used for stability heatmap). runIterations(robotVel, maxIter, allowEarlyTermination = true) { const iterations = []; @@ -577,7 +577,7 @@ class DynamicShootingVisualization extends BaseVisualization { // Contraction factor |φ'| from the last two fixed-point steps after n iterations. // Uses 1 + n (n = this.currentIteration) so the converged-shot trace aligns with the // iteration control. - // Returns value in [0, 1] (0 = geodesic-like, 1 = bad). Used for interaction heatmap. + // Returns value in [0, 1] (0 = geodesic-like, 1 = bad). Used for stability heatmap. getInteractionIndicator(robotVel) { const maxIter = 1 + this.currentIteration; const iterations = this.runIterations(robotVel, maxIter, false); @@ -804,7 +804,7 @@ class DynamicShootingVisualization extends BaseVisualization { for (let j = 0; j < n; j++) { for (let i = 0; i < n; i++) { const v = this.heatmapData[j][i]; - const color = variant === "interaction" + const color = variant === "stability" ? DynamicShootingVisualization.interactionToColor(v) : DynamicShootingVisualization.iterationToColor(v, cap); ctx.fillStyle = color != null ? color : bg; @@ -1038,7 +1038,7 @@ class DynamicShootingVisualization extends BaseVisualization { ctx.fillStyle = "#000"; ctx.font = "11px Arial"; ctx.textAlign = "right"; - if (variant === "interaction") { + if (variant === "stability") { ctx.fillStyle = "#1a1a1a"; ctx.font = "11px Arial"; ctx.fillText("0 good → 1 bad", x0 + barWidth, y0 - 12); diff --git a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst index 5f4e08ebe1..8d57769ede 100644 --- a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst @@ -26,9 +26,9 @@ If we did not record the time-of-flight measurements in the look-up table, we wo Interactive Visualization ------------------------- -Interact with the simulation below to see how the dynamic shooting recursion algorithm works. Use **Simulation** mode to drag the robot velocity and step through iterations. Use **Fractal (Iterations)** to see a heatmap of iterations-to-convergence over velocity space, or **Fractal (Interaction)** to see the degree of interaction between platform error and shooter error (0 = good, 1 = bad) with the same geodesic and convergence envelope. +Interact with the simulation below to see how the dynamic shooting recursion algorithm works. Use **Simulation** mode to drag the robot velocity and step through iterations. Use **Fractal (Iterations)** to see a heatmap of iterations-to-convergence over velocity space, or **Fractal (Stability)** to see shot stability (0 = stable, 1 = fragile) with the same geodesic and convergence envelope. -.. note:: The view is a top-down 2D game field: the robot is blue, the target orange. In **Simulation** mode the (draggable) robot velocity vector shows motion. For each iteration, the virtual target (green) is offset by time-of-flight times robot velocity; the actual trajectory (red) shows where the shot would land. In **Fractal (Iterations)** the same envelope and geodesic are overlaid on a heatmap of how many iterations until convergence at each velocity (green = fast, red = slow or no convergence). In **Fractal (Interaction)** the heatmap shows the contraction-based quality indicator (lighter = better). The purple geodesic is the "maximum stability" curve (orbiting the virtual target). The dashed blue line is the convergence envelope; the solid blue line is the reachability boundary — outside it the shot is geometrically impossible. +.. note:: The view is a top-down 2D game field: the robot is blue, the target orange. In **Simulation** mode the (draggable) robot velocity vector shows motion. For each iteration, the virtual target (green) is offset by time-of-flight times robot velocity; the actual trajectory (red) shows where the shot would land. In **Fractal (Iterations)** the same envelope and geodesic are overlaid on a heatmap of how many iterations until convergence at each velocity (green = fast, red = slow or no convergence). In **Fractal (Stability)** the heatmap shows the contraction-based stability indicator (lighter = better). The purple geodesic is the "maximum stability" curve (orbiting the virtual target). The dashed blue line is the convergence envelope; the solid blue line is the reachability boundary — outside it the shot is geometrically impossible. .. raw:: html @@ -55,13 +55,22 @@ Shot Quality in Practice While *eventual* convergence is theoretically guaranteed for any velocity vector within the reachability boundary, truncating the iteration in poorly conditioned regions can produce a qualitatively wrong firing solution (the turret points the wrong way entirely). You can use two complementary ideas to decide when a shot is trustworthy. -**First-order platform miss.** The leading contribution to miss from platform velocity error is simply time-of-flight times the velocity error magnitude: :math:`\tau \times |\delta\mathbf{v}|`. You do not need to run extra iterations to estimate this — use your solved :math:`\tau` and an estimate of your velocity uncertainty (e.g. from odometry or a conservative bound). This gives a direct, parametric "how far could we miss from platform error alone?" in meters. +**Platform Velocity Magnitude** The biggest factor in shot quality while moving is, perhaps unsurprisingly, the magnitude of the platform velocity. When the platform velocity is large, there are two effects working against you: -**Interaction indicator (contraction rate).** The rate at which the fixed-point iteration is changing near the solution — the contraction factor :math:`|\phi'|` — tells you how much that first-order miss is *amplified* by the geometry, and how much platform error and shooter error *interact*. When :math:`|\phi'|` is close to 0 (e.g. along the geodesic), platform and shooter errors effectively decouple: range error is attributable to the shooter, angle/lead error to the platform. When :math:`|\phi'|` is close to 1, the same velocity error produces a larger TOF error, and platform and shooter errors couple. You can estimate :math:`|\phi'|` cheaply by running a short fixed-point sequence (e.g. :math:`1 + n` steps, where :math:`n` is your iteration budget), then forming the ratio of the last two TOF steps; the visualization's **Fractal (Interaction)** mode shows this value over velocity space (0 = good, 1 = bad). +- The faster the platform moves, the bigger the displacement error caused by a given time-of-flight error. +- The faster the platform moves, the higher the uncertainty in the platform velocity itself. -**Using both.** A practical hybrid is: (1) solve for the firing solution (e.g. run the recursion until converged or iteration limit). (2) Optionally run a few extra fixed-point steps from the same initial guess to get an interaction indicator :math:`|\phi'|`. (3) If you have a velocity uncertainty estimate, compute the first-order platform miss :math:`\tau \times |\delta\mathbf{v}|`. (4) Prefer approach velocities along or near the geodesic when possible. +**Shot Stability** A second-order effect that is still important to consider when making a shot is the "stability" of the shot solution - how sensitive the shot trajectory is to small changes in the platform velocity. You can estimate the shot stability by the "contraction rate of the fixed-point iteration": -**Advisory UI.** Because the driver is aware of context that the algorithm is not, the shot-quality advisory should display *both* metrics separately (and optionally a combined warning), not only a single fused value. Show the first-order platform miss (e.g. in meters or "expected miss") and the interaction indicator :math:`|\phi'|` (e.g. 0–1 or "fragility") as distinct readouts. If the context dictates that the the operator *must* drive fast, then only the interaction indicator matters - the driver will want to pick the least-fragile shot that still satisfies the speed constraint. But if the operator is free to drive slower, then they will want to pick a shot that minimizes the first-order platform miss. Let the driver see both values and override when the situation warrants (e.g. a marginal shot with little time left). +.. math:: + + |\phi'| = \left| \frac{\tau_{n} - \tau_{n-1}}{\tau_{n-1} - \tau_{n-2}} \right| + +.. note:: When computing this value from an actual iteration, it is easy to get a divide-by-zero error in this meta-calculation if we iterate too far (even though the iteration itself will still converge) - it is best to use the last two difference terms that are greater than the machine error. + +The contraction rate varies between 0 (stable, fast convergence) and 1 (fragile, slow convergence). We can see in the "stability" mode in the visualization how the most-stable shots are those that are along the "maximum stability" geodesic, and how the most-fragile shots are those that are directly towards or away from the target. This gives us a way to judge the appropriateness-for-shooting of our *approach angle*, independent of how fast we are moving. + +Both of these are **qualitative** metrics - turning them into explicit error bounds requires a physics model and a lot of additional computation. But they are still useful for guiding the driver's decision-making process, and can be used with tuned thresholds to trigger warnings or withhold shots entirely. There is no "correct" threshold for these metrics - they are dependent on the specific shooting mechanism and the desired risk tolerance. The Effect of Firing Strategy ----------------------------- From 080ce406d104c791ead403aa3322d45353304309 Mon Sep 17 00:00:00 2001 From: Oblarg Date: Mon, 23 Feb 2026 18:07:24 -0500 Subject: [PATCH 134/135] wording --- .../fire-control/dynamic-shooting.rst | 2 +- .../fire-control/newton-shooting.rst | 11 ++--------- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst index 8d57769ede..c01aeb6ea3 100644 --- a/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/dynamic-shooting.rst @@ -28,7 +28,7 @@ Interactive Visualization Interact with the simulation below to see how the dynamic shooting recursion algorithm works. Use **Simulation** mode to drag the robot velocity and step through iterations. Use **Fractal (Iterations)** to see a heatmap of iterations-to-convergence over velocity space, or **Fractal (Stability)** to see shot stability (0 = stable, 1 = fragile) with the same geodesic and convergence envelope. -.. note:: The view is a top-down 2D game field: the robot is blue, the target orange. In **Simulation** mode the (draggable) robot velocity vector shows motion. For each iteration, the virtual target (green) is offset by time-of-flight times robot velocity; the actual trajectory (red) shows where the shot would land. In **Fractal (Iterations)** the same envelope and geodesic are overlaid on a heatmap of how many iterations until convergence at each velocity (green = fast, red = slow or no convergence). In **Fractal (Stability)** the heatmap shows the contraction-based stability indicator (lighter = better). The purple geodesic is the "maximum stability" curve (orbiting the virtual target). The dashed blue line is the convergence envelope; the solid blue line is the reachability boundary — outside it the shot is geometrically impossible. +.. note:: The view is a top-down 2D game field: the robot is blue, the target orange. In **Simulation** mode the (draggable) robot velocity vector shows motion. For each iteration, the virtual target (green) is offset by time-of-flight times robot velocity; the actual trajectory (red) shows where the shot would land. In **Fractal (Iterations)** the same envelope and geodesic are overlaid on a heatmap of how many iterations until convergence at each velocity (green = fast, red = slow or no convergence). In **Fractal (Stability)** the heatmap shows the contraction-based stability indicator (darker = more stable). The purple geodesic is the "maximum stability" curve (orbiting the virtual target). The dashed blue line is the convergence envelope; the solid blue line is the reachability boundary — outside it the shot is geometrically impossible. .. raw:: html diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst index 7c32a3e03c..5f6f13c933 100644 --- a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -154,13 +154,6 @@ The convergence rate of this proxy-Newton approach sits between linear (fixed-po Shot Quality in Practice ------------------------- -Newton's method converges to the correct solution in a few iterations even in the Mach cone region, but it does not change the physics: the shot is still fragile there if the robot velocity is wrong. The fixed-point iteration's contraction rate gives you a *shot quality metric* that Newton alone does not. Because the extra work is cheap, use both. +Newton's method converges to the correct solution in a few iterations even in the Mach cone region, but it does not change the physics: the shot is still fragile there if the robot velocity is wrong. -**In practice:** - -1. **Newton's method** (with proxy derivative) produces the *firing solution*. Use it so the solver always converges quickly. -2. **Fixed-point quality metric.** Run a short fixed-point sequence (e.g. :math:`1 + n` steps with your iteration budget :math:`n`) from the same initial guess. Form the ratio of the last two TOF steps to get the contraction factor :math:`|\phi'|` in :math:`[0,1]`. This is nonparametric: you do not need to know your velocity or shooter error; it tells you how fragile the shot is. When :math:`|\phi'| \approx 0` (e.g. along the geodesic), platform and shooter errors decouple; when :math:`|\phi'|` is large, they amplify and interact. -3. **First-order platform miss.** Combine with an estimate of velocity uncertainty :math:`|\delta\mathbf{v}|`: the leading miss from platform error is :math:`\tau \times |\delta\mathbf{v}|`. Use your solved :math:`\tau`; no extra iterations needed. -4. **Advisory UI.** Display both metrics separately (and optionally a combined warning), not only a single fused value. Show the first-order platform miss :math:`\tau \times |\delta\mathbf{v}|` (e.g. expected miss in meters) and the interaction indicator :math:`|\phi'|` (e.g. fragility 0–1) as distinct readouts. When the operator is constrained to move fast, they may care mainly about the margins (first-order); in other situations both matter. Suppress or warn when either exceeds a threshold, but let the operator see both values and override when the situation warrants (e.g. a marginal shot with little time left). Prefer approach velocities along or near the geodesic when possible. - -This separates *solver convergence* from *shot quality*, so convergence-based shot suppression becomes an overridable advisory. The algorithm provides the information; the human makes the call. +Therefore, the shot quality metrics discussed in the previous article are still important to consider when making a shot, and it can be useful to run a few iterations of fixed-point iteration to get a sense of the shot stability, *even when your shot solution comes from Newton's method*. From 270460abbb3eaead1f648935b23b20ba3321ff3b Mon Sep 17 00:00:00 2001 From: Oblarg Date: Sun, 1 Mar 2026 13:02:49 -0500 Subject: [PATCH 135/135] improve newton shooting structure --- .../fire-control/newton-shooting.rst | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst index 5f6f13c933..4878d19cd7 100644 --- a/source/docs/software/advanced-controls/fire-control/newton-shooting.rst +++ b/source/docs/software/advanced-controls/fire-control/newton-shooting.rst @@ -11,8 +11,8 @@ We first introduce notation. Let: - :math:`\mathbf{r}` — robot position - :math:`\mathbf{g}` — goal (target) position - :math:`\mathbf{v} = (v_x,\; v_y)` — robot velocity -- :math:`v_p` — projectile speed (constant) -- :math:`\tau` — time of flight (the unknown we solve for) +- :math:`v_p` — horizontal projectile speed +- :math:`\tau` — time of flight As the robot moves, the *virtual target* shifts opposite to the robot's velocity. The firing table maps distance to time of flight; call this mapping :math:`\tau(D)`. It may be the constant-velocity model :math:`\tau(D) = D / v_p`, or an empirical lookup table (LUT). The fixed-point iteration is :math:`\tau_{n+1} = \tau(D(\tau_n))` — we converge to the TOF that the table implies for the current geometry. To use Newton's method instead, we define the *TOF error* :math:`E(\tau) = \tau - \tau(D(\tau))` and iterate: @@ -20,7 +20,7 @@ As the robot moves, the *virtual target* shifts opposite to the robot's velocity \tau_{n+1} \;=\; \tau_n \;-\; \frac{E(\tau_n)}{E'(\tau_n)} -The rest of this section is a recipe for computing :math:`E` and :math:`E'` at the current guess :math:`\tau_n`, so you can plug them into the equation above. +The rest of this section is a recipe for computing :math:`E` and :math:`E'` at the current guess :math:`\tau_n`, so you can plug them into the equation above. We will adopt the strategy of using the exact LUT residual :math:`E` and a constant-velocity approximation for the derivative :math:`E'`, as this gives us the best of both worlds: it converges quickly and is relatively insensitive to noise. Step 1 — Geometry at the current guess ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -46,12 +46,13 @@ Compute the TOF error. The table says that distance :math:`D` corresponds to ti E \;=\; \tau_n \;-\; \tau(D) -- **Constant-velocity:** :math:`\tau(D) = D/v_p`, so :math:`E = \tau_n - D/v_p`. -- **LUT:** look up :math:`\tau(D)` in your table (or interpolate); :math:`E = \tau_n - \tau_{\mathrm{LUT}}(D)`. The residual uses the table so we converge to the table's TOF. +- **Exact LUT residual:** We use the empirical residual at this step: look up :math:`\tau(D)` in your table (or interpolate); :math:`E = \tau_n - \tau_{\mathrm{LUT}}(D)`. This ensures that we converge to the correct (empirical) TOF, rather than the TOF implied by the constant-velocity model. Step 3 — Rate of change of distance with respect to :math:`\tau` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +In order to compute the error derivative, we need to know how the distance changes with respect to the TOF. + As we increase the TOF guess, the virtual target moves; :math:`d_x` and :math:`d_y` each change by :math:`-v_x` and :math:`-v_y` per unit :math:`\tau`. So the rate at which :math:`D` changes is: .. math:: @@ -63,16 +64,19 @@ As we increase the TOF guess, the virtual target moves; :math:`d_x` and :math:`d Step 4 — The error derivative :math:`E'` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -By the chain rule, :math:`E' = 1 - \tau'(D)\,(dD/d\tau)`. We need :math:`\tau'(D)`: +Now, to find the error derivative we can use the chain rule, :math:`E' = 1 - \tau'(D)\,(dD/d\tau)`. We need :math:`\tau'(D)`, which we can find by differentiating :math:`\tau(D) = D/v_p` with respect to :math:`D`: + +.. math:: -- **Constant-velocity:** :math:`\tau(D) = D/v_p` gives :math:`\tau'(D) = 1/v_p` exactly. -- **LUT:** we do not differentiate the table. Use the constant-velocity proxy :math:`\tau'(D) \approx 1/v_p`; the residual still uses the LUT so we converge to the correct TOF. + \tau'(D) \;=\; \frac{d}{dD} \left( \frac{D}{v_p} \right) \;=\; \frac{1}{v_p} -With :math:`\tau'(D) = 1/v_p` (exact or proxy), the two minus signs combine and: +So, the error derivative is: .. math:: - E' \;=\; 1 \;+\; \frac{d_x\, v_x + d_y\, v_y}{v_p\, D} + E' \;=\; 1 \;-\; \frac{1}{v_p} \cdot \left( -\frac{d_x\, v_x + d_y\, v_y}{D} \right) \;=\; 1 \;+\; \frac{d_x\, v_x + d_y\, v_y}{v_p\, D} + +- **Constant-velocity approximation:** The derivative is used to determine the step size for the Newton update; to reduce noise-sensitivity, we use an approximate derivative :math:`\tau'(D) \approx 1/v_p` instead of the exact derivative (which would require differentiating the firing table). Because we use the empirical residual, this approximation will still converge to the correct TOF; using the exact derivative would potentially speed up convergence slightly, but at the cost of introducing noise amplification. Step 5 — Newton update ^^^^^^^^^^^^^^^^^^^^^^