From dc2dcb6cf412b6d5cbe180166fe1b796c71797ea Mon Sep 17 00:00:00 2001
From: nate contino <nate.contino@raspberrypi.com>
Date: Wed, 9 Oct 2024 11:07:07 +0100
Subject: [PATCH 01/11] Fix subject-verb agreement

---
 .../asciidoc/accessories/ai-camera/getting-started.adoc         | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/documentation/asciidoc/accessories/ai-camera/getting-started.adoc b/documentation/asciidoc/accessories/ai-camera/getting-started.adoc
index 62ab967029..a629b8de8c 100644
--- a/documentation/asciidoc/accessories/ai-camera/getting-started.adoc
+++ b/documentation/asciidoc/accessories/ai-camera/getting-started.adoc
@@ -4,7 +4,7 @@ The instructions below describe how to run the pre-packaged MobileNet SSD and Po
 
 === Prerequisites
 
-These instructions assumes you are using the AI Camera attached to either a Raspberry Pi 4 Model B or Raspberry Pi 5 board. With minor changes, you can follow these instructions on other Raspberry Pi models with a camera connector, including the Raspberry Pi Zero 2 W and Raspberry Pi 3 Model B+.
+These instructions assume you are using the AI Camera attached to either a Raspberry Pi 4 Model B or Raspberry Pi 5 board. With minor changes, you can follow these instructions on other Raspberry Pi models with a camera connector, including the Raspberry Pi Zero 2 W and Raspberry Pi 3 Model B+.
 
 First, ensure that your Raspberry Pi runs the latest software. Run the following command to update:
 

From 41b751a3c73307b2207b0fe22a4628ea70fbd2c3 Mon Sep 17 00:00:00 2001
From: nate contino <ncontino@u.rochester.edu>
Date: Wed, 11 Dec 2024 13:25:54 +0000
Subject: [PATCH 02/11] Revert "Roll out latest updates to production"

---
 Gemfile                                       |    2 +-
 Gemfile.lock                                  |    4 +-
 Makefile                                      |    2 +-
 _config.yml                                   |    3 +-
 .../accessories/ai-hat-plus/about.adoc        |    2 +-
 .../asciidoc/accessories/ai-kit/about.adoc    |    2 +-
 .../accessories/sense-hat/software.adoc       |    2 +-
 .../computers/ai/getting-started.adoc         |   65 +-
 .../computers/getting-started/setting-up.adoc |   10 +-
 .../computers/raspberry-pi/boot-eeprom.adoc   |   12 +-
 .../computers/raspberry-pi/boot-nvme.adoc     |   26 +-
 .../computers/raspberry-pi/introduction.adoc  |    2 +-
 .../raspberry-pi/revision-codes.adoc          |   54 -
 .../microcontrollers/c_sdk/official_sdk.adoc  |    2 +-
 documentation/index.json                      |    2 +-
 jekyll-assets/_includes/contribute.html       |    5 +
 jekyll-assets/_includes/copyright.html        |    7 +
 jekyll-assets/_includes/footer.html           |   84 +-
 jekyll-assets/_includes/head.html             |    9 +-
 jekyll-assets/_includes/header.html           |   64 +-
 jekyll-assets/_includes/legal.html            |    9 -
 jekyll-assets/_includes/mobile_nav.html       |   40 +
 jekyll-assets/_includes/nav.html              |   56 +
 jekyll-assets/_includes/scripts.html          |   90 ++
 jekyll-assets/_includes/subtitle.html         |    3 +
 jekyll-assets/_includes/subtitle404.html      |    3 +
 jekyll-assets/_includes/theme.html            |    3 -
 jekyll-assets/_includes/toptitle.html         |    4 +
 jekyll-assets/_includes/toptitle404.html      |    4 +
 jekyll-assets/_layouts/boxes.html             |   30 +-
 jekyll-assets/_layouts/docs.html              |  208 +--
 jekyll-assets/css/asciidoctor-tabs.css        |   25 +-
 jekyll-assets/css/boxes.css                   |   83 ++
 jekyll-assets/css/search.svg                  |    2 +-
 jekyll-assets/css/style.css                   | 1110 +++------------
 jekyll-assets/css/syntax-highlighting.css     |   40 +-
 jekyll-assets/css/tabs.css                    |   82 ++
 jekyll-assets/css/tocbot.css                  |   67 -
 jekyll-assets/css/whitepaper_coverimage.png   |  Bin 0 -> 8440 bytes
 jekyll-assets/favicon.ico                     |  Bin 38292 -> 0 bytes
 jekyll-assets/scripts/jquery-1.12.4.min.js    |    5 +
 .../scripts/jquery-ui-1.13.0.custom.min.js    |    6 +
 jekyll-assets/scripts/jquery.tocify.js        |  984 ++++++++++++++
 jekyll-assets/scripts/nav.js                  |   83 ++
 .../scripts/noframework.waypoints.min.js      |    7 +
 jekyll-assets/scripts/theme.js                |   41 -
 jekyll-assets/scripts/toc.js                  |   98 --
 jekyll-assets/scripts/tocbot.js               | 1205 -----------------
 jekyll-assets/scripts/whitepaper.js           |   10 +
 .../microcontrollers/c_sdk/official_sdk.adoc  |    4 +-
 50 files changed, 1854 insertions(+), 2807 deletions(-)
 create mode 100644 jekyll-assets/_includes/contribute.html
 create mode 100644 jekyll-assets/_includes/copyright.html
 delete mode 100644 jekyll-assets/_includes/legal.html
 create mode 100644 jekyll-assets/_includes/mobile_nav.html
 create mode 100644 jekyll-assets/_includes/nav.html
 create mode 100644 jekyll-assets/_includes/scripts.html
 create mode 100644 jekyll-assets/_includes/subtitle.html
 create mode 100644 jekyll-assets/_includes/subtitle404.html
 delete mode 100644 jekyll-assets/_includes/theme.html
 create mode 100644 jekyll-assets/_includes/toptitle.html
 create mode 100644 jekyll-assets/_includes/toptitle404.html
 create mode 100644 jekyll-assets/css/boxes.css
 create mode 100644 jekyll-assets/css/tabs.css
 delete mode 100644 jekyll-assets/css/tocbot.css
 create mode 100644 jekyll-assets/css/whitepaper_coverimage.png
 delete mode 100644 jekyll-assets/favicon.ico
 create mode 100644 jekyll-assets/scripts/jquery-1.12.4.min.js
 create mode 100644 jekyll-assets/scripts/jquery-ui-1.13.0.custom.min.js
 create mode 100644 jekyll-assets/scripts/jquery.tocify.js
 create mode 100644 jekyll-assets/scripts/nav.js
 create mode 100644 jekyll-assets/scripts/noframework.waypoints.min.js
 delete mode 100644 jekyll-assets/scripts/theme.js
 delete mode 100644 jekyll-assets/scripts/toc.js
 delete mode 100644 jekyll-assets/scripts/tocbot.js
 create mode 100644 jekyll-assets/scripts/whitepaper.js

diff --git a/Gemfile b/Gemfile
index 5a5ccbb7f0..2b5e87b73a 100644
--- a/Gemfile
+++ b/Gemfile
@@ -35,7 +35,7 @@ end
 # Performance-booster for watching directories on Windows
 gem "wdm", "~> 0.2.0", :install_if => Gem.win_platform?
 
-gem "nokogiri", "~> 1.17"
+gem "nokogiri", "~> 1.16"
 
 # So we can add custom element templates
 gem 'slim', '~> 5.2.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index 6b325d2120..bff9fa60a0 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -62,7 +62,7 @@ GEM
       jekyll (>= 3.5, < 5.0)
       jekyll-feed (~> 0.9)
       jekyll-seo-tag (~> 2.1)
-    nokogiri (1.17.0)
+    nokogiri (1.16.8)
       mini_portile2 (~> 2.8.2)
       racc (~> 1.4)
     pathutil (0.16.2)
@@ -105,7 +105,7 @@ DEPENDENCIES
   jekyll-asciidoc
   jekyll-feed (~> 0.17)
   minima (~> 2.5)
-  nokogiri (~> 1.17)
+  nokogiri (~> 1.16)
   slim (~> 5.2.1)
   thread_safe (~> 0.3.5)
   tzinfo (~> 2.0)
diff --git a/Makefile b/Makefile
index 711219f453..e3a8c396e7 100644
--- a/Makefile
+++ b/Makefile
@@ -118,7 +118,7 @@ html: run_ninja
 
 # Build the html output files and additionally run a small webserver for local previews
 serve_html: run_ninja
-	$(JEKYLL_CMD) serve --watch
+	$(JEKYLL_CMD) serve
 
 # Delete all the files created by the 'html' target
 clean_html:
diff --git a/_config.yml b/_config.yml
index 4d740515b5..66a8c67ba3 100644
--- a/_config.yml
+++ b/_config.yml
@@ -17,9 +17,8 @@ title: Raspberry Pi Documentation
 description: >- # this means to ignore newlines until "baseurl:"
   Raspberry Pi Documentation.
 baseurl: "/documentation" # the subpath of your site, e.g. /blog
-url: "https://www.raspberrypi.com/documentation" # the base hostname & protocol for your site, e.g. http://example.com
+url: "" # the base hostname & protocol for your site, e.g. http://example.com
 githuburl: "https://github.com/raspberrypi/documentation/"
-mainsite: https://raspberrypi.com/
 githubbranch: master
 githubbranch_edit: develop
 
diff --git a/documentation/asciidoc/accessories/ai-hat-plus/about.adoc b/documentation/asciidoc/accessories/ai-hat-plus/about.adoc
index 98f1923bf5..be22d08694 100644
--- a/documentation/asciidoc/accessories/ai-hat-plus/about.adoc
+++ b/documentation/asciidoc/accessories/ai-hat-plus/about.adoc
@@ -72,4 +72,4 @@ image::images/ai-hat-plus-installation-02.png[width="60%"]
 
 == Get started with AI on your Raspberry Pi
 
-To start running AI accelerated applications on your Raspberry Pi, check out our xref:../computers/ai.adoc[Getting Started with the AI Kit and AI HAT+] guide.
+To start running AI accelerated applications on your Raspberry Pi, check out our xref:../computers/ai.adoc[Getting Started with AI] guide.
diff --git a/documentation/asciidoc/accessories/ai-kit/about.adoc b/documentation/asciidoc/accessories/ai-kit/about.adoc
index bc93a483f5..10b11f42af 100644
--- a/documentation/asciidoc/accessories/ai-kit/about.adoc
+++ b/documentation/asciidoc/accessories/ai-kit/about.adoc
@@ -90,4 +90,4 @@ WARNING: Always disconnect your Raspberry Pi from power before connecting or dis
 
 == Get started with AI on your Raspberry Pi
 
-To start running AI accelerated applications on your Raspberry Pi, check out our xref:../computers/ai.adoc[Getting Started with the AI Kit and AI HAT+] guide.
+To start running AI accelerated applications on your Raspberry Pi, check out our xref:../computers/ai.adoc[Getting Started with AI] guide.
diff --git a/documentation/asciidoc/accessories/sense-hat/software.adoc b/documentation/asciidoc/accessories/sense-hat/software.adoc
index 33261939a2..f4e7791c86 100644
--- a/documentation/asciidoc/accessories/sense-hat/software.adoc
+++ b/documentation/asciidoc/accessories/sense-hat/software.adoc
@@ -104,7 +104,7 @@ After installation, example code can be found under `/usr/src/sense-hat/examples
 
 Complete documentation for the library can be found at https://sense-hat.readthedocs.io/en/latest/[sense-hat.readthedocs.io].
 
-=== Use the Sense HAT with C++
+=== Use the Sense HAT with {cpp}
 
 https://github.com/RPi-Distro/RTIMULib[RTIMULib] is a {cpp} and Python library that makes it easy to use 9-dof and 10-dof IMUs with embedded Linux systems. A pre-calibrated settings file is provided in `/etc/RTIMULib.ini`, which is also copied and used by `sense-hat`. The included examples look for `RTIMULib.ini` in the current working directory, so you may wish to copy the file there to get more accurate data.
 
diff --git a/documentation/asciidoc/computers/ai/getting-started.adoc b/documentation/asciidoc/computers/ai/getting-started.adoc
index 30da7715f2..c3767bf77c 100644
--- a/documentation/asciidoc/computers/ai/getting-started.adoc
+++ b/documentation/asciidoc/computers/ai/getting-started.adoc
@@ -60,8 +60,6 @@ Serial Number: HLDDLBB234500054
 Part Number: HM21LB1C2LAE
 Product Name: HAILO-8L AI ACC M.2 B+M KEY MODULE EXT TMP
 ----
-
-NOTE: AI HAT+ devices may show `<N/A>` for `Serial Number`, `Part Number` and `Product Name`. This is expected, and does not impact functionality.
 +
 Additionally, you can run `dmesg | grep -i hailo` to check the kernel logs, which should yield output similar to the following:
 +
@@ -98,20 +96,24 @@ The `rpicam-apps` suite of camera applications implements a xref:camera_software
 
 The following demos use xref:camera_software.adoc#rpicam-hello[`rpicam-hello`], which by default displays a preview window. However, you can use other `rpicam-apps` instead, including xref:camera_software.adoc#rpicam-vid[`rpicam-vid`] and xref:camera_software.adoc#rpicam-still[`rpicam-still`]. You may need to add or modify some command line options to make the demo commands compatible with alternative applications.
 
-To begin, run the following command to install the latest `rpicam-apps` software package:
+To begin, download the post-processing JSON files required for the demos. These files determine which post-processing stages to run and configure the behaviour of each stage. For example, you can enable, disable, strengthen, or weaken the strength of the temporal filtering in the object detection demos. Or you could enable or disable the output mask drawing in the segmentation demo.
+
+To download the entire collection of post-processing JSON files, clone the `rpicam-apps` repo. Run the following command to clone only the most recent commit from the repo, saving space:
 
 [source,console]
 ----
-$ sudo apt update && sudo apt install rpicam-apps
+$ git clone --depth 1 https://github.com/raspberrypi/rpicam-apps.git ~/rpicam-apps
 ----
 
+TIP: The commands provided in subsequent sections use the JSON files in this repository. To make it easy to reference these files, this command creates the cloned `rpicam-apps` directory in your home folder. If you modify the location of this directory, you must also alter the demo commands below to reference the new location of the JSON files.
+
 ==== Object Detection
 
 This demo displays bounding boxes around objects detected by a neural network. To disable the viewfinder, use the xref:camera_software.adoc#nopreview[`-n`] flag. To return purely textual output describing the objects detected, add the `-v 2` option. Run the following command to try the demo on your Raspberry Pi:
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov6_inference.json
+$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov6_inference.json --lores-width 640 --lores-height 640
 ----
 
 Alternatively, you can try another model with different trade-offs in performance and efficiency.
@@ -120,21 +122,21 @@ To run the demo with the Yolov8 model, run the following command:
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov8_inference.json
+$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov8_inference.json --lores-width 640 --lores-height 640
 ----
 
 To run the demo with the YoloX model, run the following command:
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolox_inference.json
+$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolox_inference.json --lores-width 640 --lores-height 640
 ----
 
 To run the demo with the Yolov5 Person and Face model, run the following command:
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov5_personface.json
+$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov5_personface.json --lores-width 640 --lores-height 640
 ----
 
 ==== Image Segmentation
@@ -143,7 +145,7 @@ This demo performs object detection and segments the object by drawing a colour
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov5_segmentation.json --framerate 20
+$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov5_segmentation.json --lores-width 640 --lores-height 640 --framerate 20
 ----
 
 ==== Pose Estimation
@@ -152,51 +154,8 @@ This demo performs 17-point human pose estimation, drawing lines connecting the
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov8_pose.json
-----
-
-=== Alternative Package Versions
-
-The AI Kit and AI HAT+ do not function if there is a version mismatch between the Hailo software packages and device drivers. In addition, Hailo's neural network tooling may require a particular version for generated model files. If you require a specific version, complete the following steps to install the proper versions of all of the dependencies:
-
-. If you have previously used `apt-mark` to hold any of the relevant packages, you may need to unhold them:
-+
-[source,console]
-----
-$ sudo apt-mark unhold hailo-tappas-core hailort hailo-dkms
-----
-
-. Install the required version of the software packages:
-+
-[tabs%sync]
-======
-v4.18::
-To install version 4.18 of Hailo's neural network tooling:
-+
-+
-[source,console]
-----
-$ sudo apt install hailo-tappas-core=3.29.1 hailort=4.18.0 hailo-dkms=4.18.0-2
-----
-+
-[source,console]
-----
-$ sudo apt-mark hold hailo-tappas-core hailort hailo-dkms
-----
-
-v4.17::
-To install version 4.17 of Hailo's neural network tooling:
-+
-[source,console]
-----
-$ sudo apt install hailo-tappas-core-3.28.2 hailort=4.17.0 hailo-dkms=4.17.0-1
-----
-+
-[source,console]
-----
-$ sudo apt-mark hold hailo-tappas-core hailort hailo-dkms
+$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov8_pose.json --lores-width 640 --lores-height 640
 ----
-======
 
 === Further Resources
 
diff --git a/documentation/asciidoc/computers/getting-started/setting-up.adoc b/documentation/asciidoc/computers/getting-started/setting-up.adoc
index a1516a9918..60bf49c205 100644
--- a/documentation/asciidoc/computers/getting-started/setting-up.adoc
+++ b/documentation/asciidoc/computers/getting-started/setting-up.adoc
@@ -141,10 +141,12 @@ All variants of the Raspberry Pi 1, 2, 3, and 4 include a 3.5mm auxiliary http:/
 
 The following Raspberry Pi models come with Wi-Fi and Bluetooth connectivity:
 
-* Flagship models since Raspberry Pi 3 Model B
-* All Zero W models
-* All Pico W models
-* Compute Modules configured with wireless (available since CM4)
+* Raspberry Pi 5
+* Raspberry Pi 4
+* Raspberry Pi 3B+
+* Raspberry Pi 3
+* Raspberry Pi Zero W
+* Rsapberry Pi Zero 2 W
 
 The "Model B" suffix indicates variants with an Ethernet port; "Model A" indicates no Ethernet port. If your Raspberry Pi doesn't have an Ethernet port, you can still connect to a wired internet connection using a USB-to-Ethernet adapter.
 
diff --git a/documentation/asciidoc/computers/raspberry-pi/boot-eeprom.adoc b/documentation/asciidoc/computers/raspberry-pi/boot-eeprom.adoc
index 0e27031dc7..31266b4c58 100644
--- a/documentation/asciidoc/computers/raspberry-pi/boot-eeprom.adoc
+++ b/documentation/asciidoc/computers/raspberry-pi/boot-eeprom.adoc
@@ -68,22 +68,20 @@ The `latest` bootloader updates more often to include the latest fixes and impro
 
 Advanced users can switch to the `latest` bootloader to get the latest functionality.
 
-First, ensure that your Raspberry Pi runs the latest software. Run the following command to update:
+Run the following command to start `raspi-config`.
 
 [source,console]
 ----
-$ sudo apt update && sudo apt full-upgrade
+$ sudo raspi-config
 ----
 
-Next, run the following command to open `raspi-config`:
+Navigate to `Advanced Options` and then `Bootloader Version`. Select `Latest` and choose `Yes` to confirm. Select `Finish` and confirm you want to reboot. After the reboot, open a command prompt again and update your system:
 
 [source,console]
 ----
-$ sudo raspi-config
+$ sudo apt update
 ----
 
-Navigate to `Advanced Options` > `Bootloader Version`. Select `Latest`, then choose `Yes` to confirm. Select `Finish` and confirm that you want to reboot.
-
 If you run `sudo rpi-eeprom-update`, you should see that a more recent version of the bootloader is available and it's the `latest` release.
 
 ----
@@ -277,7 +275,7 @@ For more information, see xref:raspberry-pi.adoc#eeprom-boot-flow[EEPROM bootflo
 | Bootloader EEPROM image
 
 | `pieeprom.bin`
-| Bootloader EEPROM image - same as `pieeprom.upd` but changes `recovery.bin` behaviour to not rename itself to `RECOVERY.000`.
+| Bootloader EEPROM image - same as pieeprom.upd but changes recovery.bin behaviour
 
 | `pieeprom.sig`
 | The sha256 checksum of bootloader image (pieeprom.upd/pieeprom.bin)
diff --git a/documentation/asciidoc/computers/raspberry-pi/boot-nvme.adoc b/documentation/asciidoc/computers/raspberry-pi/boot-nvme.adoc
index 5660e75653..22951fd1b2 100644
--- a/documentation/asciidoc/computers/raspberry-pi/boot-nvme.adoc
+++ b/documentation/asciidoc/computers/raspberry-pi/boot-nvme.adoc
@@ -1,6 +1,6 @@
 == NVMe SSD boot
 
-NVMe (Non-Volatile Memory express) is a standard for external storage access over a PCIe bus. You can connect NVMe drives via the PCIe slot on a IO Boards since Compute Module 4 and or Raspberry Pi 5 using an M.2 HAT+. With some additional configuration, you can boot from an NVMe drive.
+NVMe (Non-Volatile Memory express) is a standard for external storage access over a PCIe bus. You can connect NVMe drives via the PCIe slot on a Compute Module 4 (CM4) IO board or Raspberry Pi 5. With some additional configuration, you can boot from an NVMe drive.
 
 === Prerequisites
 
@@ -20,14 +20,26 @@ brw-rw---- 1 root disk 259, 0 Mar  9 14:58 /dev/nvme0n1
 
 ==== Software
 
-First, ensure that your Raspberry Pi runs the latest software. Run the following command to update:
+Run the following command to see what firmware you're running:
 
 [source,console]
 ----
-$ sudo apt update && sudo apt full-upgrade
+$ sudo rpi-eeprom-update
 ----
 
-=== Edit the bootloader boot priority
+For Raspberry Pi 5, you need firmware released December 6, 2023 or later.
+
+For CM4, NVMe boot support was introduced in July 2021. You need a version of the following software released since that date:
+
+* the bootloader
+* VideoCore firmware
+* the Raspberry Pi OS Linux kernel
+
+The latest Raspberry Pi OS release has everything you need. Use  xref:getting-started.adoc#raspberry-pi-imager[Raspberry Pi Imager] to install a Raspberry Pi OS image onto your drive.
+
+=== Edit EEPROM boot order
+
+For Raspberry Pi 5, you need to boot Raspberry Pi OS to edit the boot order. You can boot your Raspberry Pi from an SD card or USB drive for this step. The EEPROM configuration persists even when you change the boot device, since the EEPROM configuration is stored on the board itself.
 
 Use the Raspberry Pi Configuration CLI to update the bootloader:
 
@@ -36,14 +48,16 @@ Use the Raspberry Pi Configuration CLI to update the bootloader:
 $ sudo raspi-config
 ----
 
-Under `Advanced Options` > `Bootloader Order`, specify that the bootloader should attempt to boot from `NVMe` first:
+Under `Advanced Options` > `Bootloader Version`, choose `Latest`. Then, exit `raspi-config` with `Finish` or the *Escape* key.
+
+Run the following command to update your firmware to the latest version:
 
 [source,console]
 ----
 $ sudo rpi-eeprom-update -a
 ----
 
-Then, reboot with `sudo reboot`. Your Raspberry Pi should boot from NVMe.
+Then, reboot with `sudo reboot`. Your Raspberry Pi 5 should boot from NVMe.
 
 For CM4, use `rpiboot` to update the bootloader. You can find instructions for building `rpiboot` and configuring the IO board to switch the ROM to usbboot mode in the https://github.com/raspberrypi/usbboot[USB boot GitHub repository].
 
diff --git a/documentation/asciidoc/computers/raspberry-pi/introduction.adoc b/documentation/asciidoc/computers/raspberry-pi/introduction.adoc
index 3642c520cf..ff8f11ea66 100644
--- a/documentation/asciidoc/computers/raspberry-pi/introduction.adoc
+++ b/documentation/asciidoc/computers/raspberry-pi/introduction.adoc
@@ -14,7 +14,7 @@ Additionally, Raspberry Pi makes the *Pico* series of tiny, versatile https://en
 *Model B* indicates the presence of an Ethernet port.
 *Model A* indicates a lower-cost model in a smaller form factor with no Ethernet port, reduced RAM, and fewer USB ports to limit board height.
 
-[cols="6a,2,2,3,5"]
+[cols="7a,1,2,3,5"]
 |===
 | Model | SoC | Memory | GPIO | Connectivity
 
diff --git a/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc b/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc
index 247929c4da..f871915ff6 100644
--- a/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc
+++ b/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc
@@ -342,18 +342,6 @@ NOQuuuWuFMMMCCCCPPPPTTTTTTTTRRRR
 |
 | 17: 5
 
-|
-|
-| 18: CM5
-
-|
-|
-| 19: 500
-
-|
-|
-| 1a: CM5 Lite
-
 | RRRR (bits 0-3)
 | Revision
 | 0, 1, 2, etc.
@@ -640,48 +628,6 @@ NOTE: This list is not exhaustive - there may be codes in use that are not in th
 | 8GB
 | Sony UK
 
-| b04180
-| CM5
-| 1.0
-| 2GB
-| Sony UK
-
-| c04180
-| CM5
-| 1.0
-| 4GB
-| Sony UK
-
-| d04180
-| CM5
-| 1.0
-| 8GB
-| Sony UK
-
-| d04190
-| 500
-| 1.0
-| 8GB
-| Sony UK
-
-| b041a0
-| CM5 Lite
-| 1.0
-| 2GB
-| Sony UK
-
-| c041a0
-| CM5 Lite
-| 1.0
-| 4GB
-| Sony UK
-
-| d041a0
-| CM5 Lite
-| 1.0
-| 8GB
-| Sony UK
-
 |===
 
 === Using revision codes for board identification
diff --git a/documentation/asciidoc/microcontrollers/c_sdk/official_sdk.adoc b/documentation/asciidoc/microcontrollers/c_sdk/official_sdk.adoc
index 691c6511a4..7a4a0d73d2 100644
--- a/documentation/asciidoc/microcontrollers/c_sdk/official_sdk.adoc
+++ b/documentation/asciidoc/microcontrollers/c_sdk/official_sdk.adoc
@@ -1,4 +1,4 @@
-== Raspberry Pi Pico C/C++ SDK
+== Raspberry Pi Pico C/{cpp} SDK
 
 Our official C SDK can be used from the command line, or from popular integrated development environments like Visual Studio Code, Eclipse, and CLion. To get started, download our C/{cpp} SDK and Examples, and take a look at our 'https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf[getting started]' documentation. Or for a quick setup see the next section.
 
diff --git a/documentation/index.json b/documentation/index.json
index d0000060fe..4b4e1833c9 100644
--- a/documentation/index.json
+++ b/documentation/index.json
@@ -54,7 +54,7 @@
                     "subpath": "camera_software.adoc"
                 },
                 {
-                    "title": "AI Kit and AI HAT+ software",
+                    "title": "AI software",
                     "description": "Software and libraries for artificial intelligence on a Raspberry Pi hardware",
                     "image": "full-sized/ai.png",
                     "subpath": "ai.adoc"
diff --git a/jekyll-assets/_includes/contribute.html b/jekyll-assets/_includes/contribute.html
new file mode 100644
index 0000000000..fc0aea05e6
--- /dev/null
+++ b/jekyll-assets/_includes/contribute.html
@@ -0,0 +1,5 @@
+<div class="contribute">
+  <div class="contribute-inner">
+    <p id="copyright">You can view and edit the Raspberry Pi documentation source <a href="{{ site.githuburl }}">on Github</a>. Please read our <a href="{{ site.githuburl }}blob/{{ site.githubbranch }}/CONTRIBUTING.md">usage and contributions policy</a> before you make a Pull Request.</p>
+  </div>
+</div>
diff --git a/jekyll-assets/_includes/copyright.html b/jekyll-assets/_includes/copyright.html
new file mode 100644
index 0000000000..9b00e43e68
--- /dev/null
+++ b/jekyll-assets/_includes/copyright.html
@@ -0,0 +1,7 @@
+<div class="legal">
+  <div class="legal-inner">
+    <p id="copyright">Raspberry Pi documentation is copyright &copy; 2012-{{ site.time | date: '%Y' }} Raspberry Pi Ltd and is licensed under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International</a> (CC BY-SA) licence.</p>
+    <p id="copyright">Some content originates from the <a href="http://elinux.org/">eLinux wiki</a>, and is licensed under a <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported</a> licence.</p>
+    <p id="copyright">The terms HDMI, HDMI High-Definition Multimedia Interface, HDMI trade dress and the HDMI Logos are trademarks or registered trademarks of HDMI Licensing Administrator, Inc</p>
+  </div>
+</div>
diff --git a/jekyll-assets/_includes/footer.html b/jekyll-assets/_includes/footer.html
index efe0c21972..9fd1d53c13 100644
--- a/jekyll-assets/_includes/footer.html
+++ b/jekyll-assets/_includes/footer.html
@@ -1,5 +1,4 @@
 <style>
-@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap");
 #__rptl-footer .__rptl-footer-link, #__rptl-footer .__rptl-footer-link--with-icon, #__rptl-footer .__rptl-footer-item, #__rptl-footer .__rptl-footer-list, #__rptl-footer .__rptl-footer-heading, #__rptl-footer .__rptl-footer-column, #__rptl-footer .__rptl-footer-row, #__rptl-footer .__rptl-footer-container, #__rptl-footer {
   box-sizing: border-box;
   margin: 0;
@@ -20,10 +19,9 @@
   -webkit-text-size-adjust: 100%;
      -moz-text-size-adjust: 100%;
           text-size-adjust: 100%;
-  letter-spacing: normal;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
-  background: var(--rptl-footer-background-color, #f5f6f9);
+  background: #f5f6f9;
   overflow: hidden;
 }
 #__rptl-footer .__rptl-footer-container {
@@ -65,7 +63,7 @@
 }
 #__rptl-footer .__rptl-footer-heading {
   font-weight: 700;
-  color: var(--rptl-footer-text-color, #333);
+  color: #333333;
   margin-bottom: 8px;
 }
 #__rptl-footer .__rptl-footer-list {
@@ -77,11 +75,11 @@
 }
 #__rptl-footer .__rptl-footer-icon {
   margin-right: 0.5em;
-  fill: var(--rptl-footer-text-color, #333);
+  fill: #333;
 }
 #__rptl-footer .__rptl-footer-link, #__rptl-footer .__rptl-footer-link--with-icon {
   font-weight: 400;
-  color: var(--rptl-footer-text-color, #333);
+  color: #333;
   text-decoration: none;
 }
 #__rptl-footer .__rptl-footer-link--with-icon {
@@ -99,7 +97,7 @@
         <div class="__rptl-footer-heading">Follow us</div>
         <ul class="__rptl-footer-list">
           <li class="__rptl-footer-item">
-            <a href="https://www.raspberrypi.com/weekly/" class="__rptl-footer-link--with-icon">
+            <a href="/weekly/" class="__rptl-footer-link--with-icon">
               <svg class="__rptl-footer-icon" aria-hidden="true" focusable="false" width="1.25em" height="1.25em" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M1 6v12a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2Zm19.707 10.293a1 1 0 1 1-1.414 1.414L15 13.414l-.515.515a3.518 3.518 0 0 1-4.97 0L9 13.414l-4.293 4.293a1 1 0 0 1-1.414-1.414L7.586 12 3.293 7.707a1 1 0 0 1 1.414-1.414l5 5 1.222 1.222a1.516 1.516 0 0 0 2.142 0l1.222-1.222 5-5a1 1 0 0 1 1.414 1.414L16.414 12Z"/></svg>
               Sign up to newsletter
             </a>
@@ -153,60 +151,60 @@
       <div class="__rptl-footer-column">
         <div class="__rptl-footer-heading">About Raspberry Pi</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/news/" class="__rptl-footer-link">News</a></li>
+          <li class="__rptl-footer-item"><a href="/news/" class="__rptl-footer-link">News</a></li>
           <li class="__rptl-footer-item"><a href="https://investors.raspberrypi.com/" class="__rptl-footer-link">Investor relations</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/contact/" class="__rptl-footer-link">Contact us</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/trademark-rules/" class="__rptl-footer-link">Trademark</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/about/" class="__rptl-footer-link">About us</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/resellers/" class="__rptl-footer-link">Our Approved Resellers</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/jobs/" class="__rptl-footer-link">Jobs</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/accessibility/" class="__rptl-footer-link">Accessibility</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/terms-and-conditions/" class="__rptl-footer-link">Site use terms and conditions</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/acceptable-use/" class="__rptl-footer-link">Acceptable use</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/cookies/" class="__rptl-footer-link">Cookies</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/licensing/" class="__rptl-footer-link">Licensing</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/terms-conditions-sale/" class="__rptl-footer-link">Terms and conditions of sale</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/privacy/" class="__rptl-footer-link">Privacy</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/contact/security/" class="__rptl-footer-link">Security</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/verify/" class="__rptl-footer-link">Verify our bank details</a></li>
+          <li class="__rptl-footer-item"><a href="/contact/" class="__rptl-footer-link">Contact us</a></li>
+          <li class="__rptl-footer-item"><a href="/trademark-rules/" class="__rptl-footer-link">Trademark</a></li>
+          <li class="__rptl-footer-item"><a href="/about/" class="__rptl-footer-link">About us</a></li>
+          <li class="__rptl-footer-item"><a href="/resellers/" class="__rptl-footer-link">Our Approved Resellers</a></li>
+          <li class="__rptl-footer-item"><a href="/jobs/" class="__rptl-footer-link">Jobs</a></li>
+          <li class="__rptl-footer-item"><a href="/accessibility/" class="__rptl-footer-link">Accessibility</a></li>
+          <li class="__rptl-footer-item"><a href="/terms-and-conditions/" class="__rptl-footer-link">Site use terms and conditions</a></li>
+          <li class="__rptl-footer-item"><a href="/acceptable-use/" class="__rptl-footer-link">Acceptable use</a></li>
+          <li class="__rptl-footer-item"><a href="/cookies/" class="__rptl-footer-link">Cookies</a></li>
+          <li class="__rptl-footer-item"><a href="/licensing/" class="__rptl-footer-link">Licensing</a></li>
+          <li class="__rptl-footer-item"><a href="/terms-conditions-sale/" class="__rptl-footer-link">Terms and conditions of sale</a></li>
+          <li class="__rptl-footer-item"><a href="/privacy/" class="__rptl-footer-link">Privacy</a></li>
+          <li class="__rptl-footer-item"><a href="/contact/security/" class="__rptl-footer-link">Security</a></li>
+          <li class="__rptl-footer-item"><a href="/verify/" class="__rptl-footer-link">Verify our bank details</a></li>
         </ul>
       </div>
       <div class="__rptl-footer-column">
         <div class="__rptl-footer-heading">For home</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-home/" class="__rptl-footer-link">Raspberry Pi for home</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/tutorials/" class="__rptl-footer-link">Tutorials</a></li>
+          <li class="__rptl-footer-item"><a href="/for-home/" class="__rptl-footer-link">Raspberry Pi for home</a></li>
+          <li class="__rptl-footer-item"><a href="/tutorials/" class="__rptl-footer-link">Tutorials</a></li>
         </ul>
         <div class="__rptl-footer-heading">For industry</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-industry/" class="__rptl-footer-link">Raspberry Pi for industry</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-industry/thin-clients/" class="__rptl-footer-link">Thin clients</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-industry/space/" class="__rptl-footer-link">Raspberry Pi in space</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-industry/powered-by/" class="__rptl-footer-link">Powered by Raspberry Pi</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-industry/design-partners/" class="__rptl-footer-link">Design partners</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/success-stories/" class="__rptl-footer-link">Success stories</a></li>
+          <li class="__rptl-footer-item"><a href="/for-industry/" class="__rptl-footer-link">Raspberry Pi for industry</a></li>
+          <li class="__rptl-footer-item"><a href="/for-industry/thin-clients/" class="__rptl-footer-link">Thin clients</a></li>
+          <li class="__rptl-footer-item"><a href="/for-industry/space/" class="__rptl-footer-link">Raspberry Pi in space</a></li>
+          <li class="__rptl-footer-item"><a href="/for-industry/powered-by/" class="__rptl-footer-link">Powered by Raspberry Pi</a></li>
+          <li class="__rptl-footer-item"><a href="/for-industry/design-partners/" class="__rptl-footer-link">Design partners</a></li>
+          <li class="__rptl-footer-item"><a href="/success-stories/" class="__rptl-footer-link">Success stories</a></li>
         </ul>
         <div class="__rptl-footer-heading">Hardware</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#raspberry-pi-computers-and-microcontrollers" class="__rptl-footer-link">Computers and microcontrollers</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#cameras-and-displays" class="__rptl-footer-link">Cameras and displays</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#add-on-boards" class="__rptl-footer-link">Add-on boards</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#power-supplies-and-cables" class="__rptl-footer-link">Power supplies and cables</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#cases" class="__rptl-footer-link">Cases</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#peripherals" class="__rptl-footer-link">Peripherals</a></li>
+          <li class="__rptl-footer-item"><a href="/products/#raspberry-pi-computers-and-microcontrollers" class="__rptl-footer-link">Computers and microcontrollers</a></li>
+          <li class="__rptl-footer-item"><a href="/products/#cameras-and-displays" class="__rptl-footer-link">Cameras and displays</a></li>
+          <li class="__rptl-footer-item"><a href="/products/#add-on-boards" class="__rptl-footer-link">Add-on boards</a></li>
+          <li class="__rptl-footer-item"><a href="/products/#power-supplies-and-cables" class="__rptl-footer-link">Power supplies and cables</a></li>
+          <li class="__rptl-footer-item"><a href="/products/#cases" class="__rptl-footer-link">Cases</a></li>
+          <li class="__rptl-footer-item"><a href="/products/#peripherals" class="__rptl-footer-link">Peripherals</a></li>
         </ul>
       </div>
       <div class="__rptl-footer-column">
         <div class="__rptl-footer-heading">Software</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/software/connect/" class="__rptl-footer-link">Raspberry Pi Connect</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/software/raspberry-pi-desktop/" class="__rptl-footer-link">Raspberry Pi Desktop</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/software/" class="__rptl-footer-link">Raspberry Pi Imager</a></li>
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-32-bit" class="__rptl-footer-link">Raspberry Pi OS</a></li>
+          <li class="__rptl-footer-item"><a href="/software/connect/" class="__rptl-footer-link">Raspberry Pi Connect</a></li>
+          <li class="__rptl-footer-item"><a href="/software/raspberry-pi-desktop/" class="__rptl-footer-link">Raspberry Pi Desktop</a></li>
+          <li class="__rptl-footer-item"><a href="/software/" class="__rptl-footer-link">Raspberry Pi Imager</a></li>
+          <li class="__rptl-footer-item"><a href="/software/operating-systems/#raspberry-pi-os-32-bit" class="__rptl-footer-link">Raspberry Pi OS</a></li>
         </ul>
         <div class="__rptl-footer-heading">Documentation</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/documentation/" class="__rptl-footer-link">All categories</a></li>
+          <li class="__rptl-footer-item"><a href="/documentation/" class="__rptl-footer-link">All categories</a></li>
           <li class="__rptl-footer-item"><a href="https://pip.raspberrypi.com" class="__rptl-footer-link">Product information portal</a></li>
           <li class="__rptl-footer-item"><a href="https://datasheets.raspberrypi.com" class="__rptl-footer-link">Datasheets</a></li>
         </ul>
@@ -217,11 +215,11 @@
         </ul>
         <div class="__rptl-footer-heading">Raspberry Pi Store</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/raspberry-pi-store/" class="__rptl-footer-link">Store information</a></li>
+          <li class="__rptl-footer-item"><a href="/raspberry-pi-store/" class="__rptl-footer-link">Store information</a></li>
         </ul>
         <div class="__rptl-footer-heading">Raspberry Pi Press</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/books-magazines/" class="__rptl-footer-link">About Raspberry Pi Press</a></li>
+          <li class="__rptl-footer-item"><a href="/books-magazines/" class="__rptl-footer-link">About Raspberry Pi Press</a></li>
           <li class="__rptl-footer-item"><a href="https://magpi.raspberrypi.com" class="__rptl-footer-link">The MagPi</a></li>
           <li class="__rptl-footer-item"><a href="https://hackspace.raspberrypi.com" class="__rptl-footer-link">HackSpace</a></li>
         </ul>
diff --git a/jekyll-assets/_includes/head.html b/jekyll-assets/_includes/head.html
index 93255f598a..d428ab9093 100644
--- a/jekyll-assets/_includes/head.html
+++ b/jekyll-assets/_includes/head.html
@@ -1,13 +1,12 @@
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
-<link rel="shortcut icon" href="{{ site.baseurl }}/favicon.ico">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <title>{{ page.title | strip_html}}</title>
 <meta name="description" content="The official documentation for Raspberry Pi computers and microcontrollers">
 <meta property="og:title" content="{{ page.title }}">
 <meta property="og:description" content="The official documentation for Raspberry Pi computers and microcontrollers">
 <meta property="og:url" content="https://www.raspberrypi.com{{ page.url | relative_url }}">
-<meta property="og:image" content="https://www.raspberrypi.com{{ '/images/opensocial.png' | relative_url }}">
+<meta property="og:image" content="https://www.raspberrypi.com{{ "/images/opensocial.png" | relative_url }}">
 <meta name="twitter:card" content="summary_large_image">
 <meta name="twitter:site" content="@Raspberry_Pi">
 <meta name="twitter:title" content="{{ page.title }}">
@@ -18,13 +17,9 @@
 <link rel="preconnect" href="https://IHWGNTJ1NP-dsn.algolia.net" crossorigin>
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@docsearch/css@3"/>
 <link rel="stylesheet" href="{{ site.baseurl }}/css/style.css?ver={{ site.time | date: '%s' }}">
+<link rel="stylesheet" href="{{ site.baseurl }}/css/tabs.css?ver={{ site.time | date: '%s' }}">
 <link rel="stylesheet" href="{{ site.baseurl }}/css/asciidoctor-tabs.css?ver={{ site.time | date: '%s' }}">
 <link rel="stylesheet" href="{{ site.baseurl }}/css/syntax-highlighting.css?ver={{ site.time | date: '%s' }}">
-<link rel="stylesheet" href="{{ site.baseurl }}/css/tocbot.css?ver={{ site.time | date: '%s' }}">
-<script type="text/javascript" src="{{ site.baseurl }}/scripts/theme.js?ver={{ site.time | date: '%s' }}"></script>
-<script type="text/javascript" src="{{ site.baseurl }}/scripts/tocbot.js?ver={{ site.time | date: '%s' }}"></script>
-<script type="text/javascript" src="{{ site.baseurl }}/scripts/toc.js?ver={{ site.time | date: '%s' }}"></script>
-<script async type="text/javascript" src="{{ site.baseurl }}/scripts/asciidoctor-tabs.js?ver={{ site.time | date: '%s' }}"></script>
 <script async src="https://www.googletagmanager.com/gtag/js?id=G-V8TFXM3BKJ"></script>
 <script>
   window.dataLayer = window.dataLayer || [];
diff --git a/jekyll-assets/_includes/header.html b/jekyll-assets/_includes/header.html
index bb88c8bd02..de4d50c668 100644
--- a/jekyll-assets/_includes/header.html
+++ b/jekyll-assets/_includes/header.html
@@ -1,5 +1,4 @@
 <style>
-@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap");
 #__rptl-header {
   margin: 0;
   padding: 0;
@@ -35,8 +34,8 @@
   box-sizing: border-box;
   position: relative;
   z-index: 1;
-  background-color: var(--rptl-header-background-color, #fff);
-  border-bottom: 1px solid var(--rptl-header-border-bottom-color, #dedede);
+  background-color: #fff;
+  border-bottom: 1px solid #dedede;
   width: 100%;
   padding: 16px;
 }
@@ -68,15 +67,6 @@
   display: block;
   vertical-align: middle;
 }
-#__rptl-header .__rptl-header-logo .__rptl-header-logo-text {
-  fill: var(--rptl-header-logo-text-fill, #000);
-}
-#__rptl-header .__rptl-header-logo .__rptl-header-logo-leaf {
-  fill: var(--rptl-header-logo-leaf-fill, #46af4b);
-}
-#__rptl-header .__rptl-header-logo .__rptl-header-logo-berry {
-  fill: var(--rptl-header-logo-berry-fill, #cd2355);
-}
 #__rptl-header .__rptl-header-burger {
   margin: 0;
   padding: 0;
@@ -112,7 +102,7 @@
   left: 0;
   height: 2px;
   width: 100%;
-  background: var(--rptl-header-burger-stroke-color, #707070);
+  background: #707070;
   border-radius: 9px;
   transform: rotate(0deg);
 }
@@ -165,9 +155,9 @@
   box-sizing: border-box;
   position: absolute;
   bottom: 0;
-  background-color: var(--rptl-header-background-color, #fff);
+  background-color: #fff;
   width: 100%;
-  border-bottom: 1px solid var(--rptl-header-border-bottom-color, #dedede);
+  border-bottom: 1px solid #dedede;
 }
 #__rptl-header .__rptl-header-nav:focus-within {
   transform: translateY(100%);
@@ -176,7 +166,7 @@
   #__rptl-header .__rptl-header-nav {
     position: static;
     padding: 0 84px;
-    background-color: var(--rptl-header-subnav-background-color, #f7f8fa);
+    background-color: #f7f8fa;
     transform: none !important;
     transition: none !important;
   }
@@ -223,7 +213,7 @@
   font-size: 100%;
   display: block;
   box-sizing: border-box;
-  border-top: 1px solid var(--rptl-header-border-bottom-color, #dedede);
+  border-top: 1px solid #dedede;
 }
 @media (min-width: 1200px) {
   #__rptl-header .__rptl-header-nav-list-item {
@@ -239,13 +229,13 @@
   display: block;
   text-decoration: none;
   box-sizing: border-box;
-  color: var(--rptl-header-text-color, #333);
+  color: #333;
   font-size: 1.65em;
   padding: 16px;
 }
 #__rptl-header .__rptl-header-nav-link:hover {
-  color: var(--rptl-header-background-color, #fff);
-  background-color: var(--rptl-header-text-color, #333);
+  color: #fff;
+  background-color: #333;
 }
 #__rptl-header .__rptl-header-nav-link--for-home, #__rptl-header .__rptl-header-nav-link--for-industry {
   font-weight: 700;
@@ -279,8 +269,8 @@
   -moz-osx-font-smoothing: grayscale;
   position: relative;
   z-index: 101;
-  background: var(--rptl-cookiebanner-background-color, #333);
-  color: var(--rptl-cookiebanner-text-color, #fff);
+  background: #333;
+  color: #fff;
 }
 #__rptl-cookiebanner.__rptl-cookiebanner-hidden {
   display: none;
@@ -350,16 +340,14 @@
 }
 #__rptl-cookiebanner .__rptl-cookiebanner-accept:focus, #__rptl-cookiebanner .__rptl-cookiebanner-reject:focus {
   box-shadow: rgb(255, 255, 255) 0px 0px 0px 0px, rgb(121, 167, 236) 0px 0px 0px 3px, rgba(0, 0, 0, 0) 0px 0px 0px 0px;
-  outline: 2px solid transparent;
-  outline-offset: 2px;
 }
 #__rptl-cookiebanner .__rptl-cookiebanner-accept {
-  color: var(--rptl-cookiebanner-background-color, #333);
-  background: var(--rptl-cookiebanner-text-color, #fff);
+  color: #333;
+  background: #fff;
 }
 #__rptl-cookiebanner .__rptl-cookiebanner-reject {
-  color: var(--rptl-cookiebanner-text-color, #fff);
-  background: var(--rptl-cookiebanner-background-color, #333);
+  color: #fff;
+  background: #333;
 }
 </style>
 <div id="__rptl-cookiebanner" class="__rptl-cookiebanner-hidden">
@@ -368,7 +356,7 @@
       We use some essential cookies to make our website work.
     </p>
     <p class="__rptl-cookiebanner-text">
-      We use optional cookies, as detailed in our <a href="https://www.raspberrypi.com/cookies/"
+      We use optional cookies, as detailed in our <a href="/cookies"
         class="__rptl-cookiebanner-link">cookie policy</a>, to remember your
       settings and understand how you use our website.
     </p>
@@ -387,8 +375,8 @@
 
   <div class="__rptl-header-navbar">
     <div class="__rptl-header-wrapper">
-      <a href="https://www.raspberrypi.com/" class="__rptl-header-brand">
-        <svg class="__rptl-header-logo" aria-hidden="true" focusable="false" height="44" viewBox="0 0 270 57" xmlns="http://www.w3.org/2000/svg" aria-labelledby="__rptl-header-logo"><title id="__rptl-header-logo">Raspberry Pi</title><g fill-rule="nonzero" fill="none"><path d="M65.275 33.317h-4.477v9.46c0 .29-.235.526-.525.526h-4.57a.525.525 0 0 1-.526-.525V16.55a.525.525 0 0 1 .525-.525h9.61c3.223 0 5.709.718 7.457 2.154a7.437 7.437 0 0 1 2.623 6.09 8.391 8.391 0 0 1-1.208 4.655 8.24 8.24 0 0 1-3.663 2.97l5.635 10.638a.525.525 0 0 1-.464.77h-4.917a.63.63 0 0 1-.56-.342l-4.94-9.643Zm-4.477-4.552h4.534a4.641 4.641 0 0 0 3.278-1.078 3.85 3.85 0 0 0 1.162-2.97 4.122 4.122 0 0 0-1.096-3.034 4.556 4.556 0 0 0-3.363-1.106h-4.515v8.188ZM90.426 42.997a6.562 6.562 0 0 1-.402-1.511 6.551 6.551 0 0 1-5.114 2.192 7.195 7.195 0 0 1-4.937-1.724 5.542 5.542 0 0 1-1.958-4.347 5.73 5.73 0 0 1 2.389-4.946c1.592-1.148 3.894-1.73 6.904-1.742h2.491v-1.162a3.342 3.342 0 0 0-.72-2.248 2.838 2.838 0 0 0-2.277-.843 3.226 3.226 0 0 0-2.145.656 2.13 2.13 0 0 0-.748 1.37.513.513 0 0 1-.513.428h-4.375a.533.533 0 0 1-.524-.596 5.494 5.494 0 0 1 1.054-2.663 7.184 7.184 0 0 1 3.073-2.352 11.2 11.2 0 0 1 4.459-.852 8.848 8.848 0 0 1 5.948 1.883 6.587 6.587 0 0 1 2.202 5.292v8.787a9.948 9.948 0 0 0 .629 3.93.525.525 0 0 1-.47.754h-4.485a.515.515 0 0 1-.48-.306Zm-4.336-3.46c.77.007 1.529-.176 2.21-.534a3.509 3.509 0 0 0 1.5-1.433v-3.485h-2.024c-2.71 0-4.153.937-4.328 2.81l-.019.319a2.166 2.166 0 0 0 .712 1.667 2.764 2.764 0 0 0 1.949.656ZM109.963 37.701a1.745 1.745 0 0 0-.983-1.564 11.18 11.18 0 0 0-3.157-1.021c-4.822-1.012-7.232-3.06-7.232-6.145a5.57 5.57 0 0 1 2.24-4.506 9.031 9.031 0 0 1 5.854-1.808 9.723 9.723 0 0 1 6.173 1.817 5.699 5.699 0 0 1 2.292 4.175.52.52 0 0 1-.525.546h-4.382a.514.514 0 0 1-.514-.435 2.538 2.538 0 0 0-.721-1.485 3.172 3.172 0 0 0-2.342-.759 3.24 3.24 0 0 0-2.117.619c-.483.377-.76.96-.75 1.573.001.603.327 1.158.853 1.452a8.76 8.76 0 0 0 2.876.956 23.54 23.54 0 0 1 3.41.908c2.86 1.05 4.29 2.867 4.29 5.452a5.288 5.288 0 0 1-2.38 4.487 10.264 10.264 0 0 1-6.145 1.715c-1.556.029-3.1-.281-4.524-.91a7.586 7.586 0 0 1-3.1-2.49 5.853 5.853 0 0 1-1.094-2.824.533.533 0 0 1 .523-.596h4.11a.513.513 0 0 1 .513.418c.091.71.46 1.354 1.024 1.793a4.233 4.233 0 0 0 2.66.768c.827.057 1.65-.15 2.352-.59.508-.35.807-.93.796-1.546ZM136.719 33.355a12.159 12.159 0 0 1-2.127 7.503 6.817 6.817 0 0 1-5.742 2.82 6.315 6.315 0 0 1-4.965-2.136v9.03c0 .29-.235.525-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.018c.27 0 .497.206.523.475l.142 1.51a6.363 6.363 0 0 1 5.134-2.36 6.865 6.865 0 0 1 5.826 2.773c1.387 1.848 2.08 4.396 2.08 7.644v.28Zm-5.415-.394a7.982 7.982 0 0 0-1.002-4.365 3.266 3.266 0 0 0-2.913-1.536 3.546 3.546 0 0 0-3.504 1.948v8.3a3.605 3.605 0 0 0 3.541 2.004c2.586 0 3.878-2.117 3.878-6.35ZM158.159 33.355c0 3.247-.694 5.78-2.08 7.597a6.889 6.889 0 0 1-5.808 2.726 6.329 6.329 0 0 1-5.264-2.53l-.191 1.689a.525.525 0 0 1-.522.466h-3.877a.525.525 0 0 1-.525-.525V15.05c0-.29.235-.525.525-.525h4.364a.525.525 0 0 1 .525.525v9.798a6.166 6.166 0 0 1 4.928-2.192 6.945 6.945 0 0 1 5.817 2.726c1.405 1.817 2.108 4.374 2.108 7.672v.3Zm-5.415-.394a8.068 8.068 0 0 0-.974-4.487 3.295 3.295 0 0 0-2.904-1.414 3.572 3.572 0 0 0-3.56 2.117v8a3.62 3.62 0 0 0 3.597 2.135c1.626.093 3.081-.999 3.448-2.585.31-1.23.442-2.498.393-3.766ZM170.555 43.678a9.95 9.95 0 0 1-7.26-2.736 9.722 9.722 0 0 1-2.8-7.288v-.524a12.247 12.247 0 0 1 1.18-5.461 8.666 8.666 0 0 1 3.344-3.71 9.387 9.387 0 0 1 4.936-1.302 8.413 8.413 0 0 1 6.548 2.623c1.593 1.749 2.39 4.228 2.39 7.438v1.685a.525.525 0 0 1-.526.525h-12.383a5.028 5.028 0 0 0 1.583 3.185 4.785 4.785 0 0 0 3.344 1.2 5.886 5.886 0 0 0 4.524-1.837.527.527 0 0 1 .773.026l1.964 2.198c.17.188.182.47.028.672a8.216 8.216 0 0 1-3.036 2.34 10.82 10.82 0 0 1-4.609.966Zm-.618-16.656a3.382 3.382 0 0 0-2.614 1.092 5.65 5.65 0 0 0-1.283 3.124h7.531v-.433a4.034 4.034 0 0 0-.974-2.795 3.492 3.492 0 0 0-2.66-.988ZM193.333 27.525a.523.523 0 0 1-.575.515c-.459-.051-.92-.078-1.382-.081-2.049 0-3.391.693-4.028 2.08v12.739a.525.525 0 0 1-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.096c.277 0 .507.215.524.492l.12 1.924a5.017 5.017 0 0 1 4.514-2.791c.434-.002.867.044 1.29.138a.515.515 0 0 1 .39.515l-.06 4.215ZM207.017 27.525a.523.523 0 0 1-.575.515c-.459-.051-.92-.078-1.382-.081-2.048 0-3.39.693-4.028 2.08v12.739a.525.525 0 0 1-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.096c.277 0 .507.215.524.492l.12 1.924a5.018 5.018 0 0 1 4.514-2.791c.434-.002.867.044 1.29.138a.515.515 0 0 1 .39.515l-.06 4.215ZM217.934 35.64l3.635-12.233a.525.525 0 0 1 .504-.375h4.677a.525.525 0 0 1 .496.697l-7.907 22.721-.45 1.068a6.18 6.18 0 0 1-5.995 3.972 8.368 8.368 0 0 1-2.003-.25.529.529 0 0 1-.395-.513v-3.15a.525.525 0 0 1 .546-.524l.538.02a3.442 3.442 0 0 0 2.035-.492 3.08 3.08 0 0 0 1.19-1.555l.637-1.667-6.857-19.63a.525.525 0 0 1 .496-.697h4.696c.232 0 .437.152.503.374l3.654 12.234ZM245.156 33.692v9.086c0 .29-.235.525-.525.525h-4.57a.525.525 0 0 1-.526-.525V16.55a.525.525 0 0 1 .525-.525h10.117a12.31 12.31 0 0 1 5.405 1.124 8.284 8.284 0 0 1 3.587 3.194 8.91 8.91 0 0 1 1.256 4.712 7.833 7.833 0 0 1-2.745 6.323c-1.83 1.543-4.362 2.314-7.597 2.314h-4.927Zm0-4.553h5.02a4.934 4.934 0 0 0 3.401-1.049 3.816 3.816 0 0 0 1.171-2.998 4.5 4.5 0 0 0-1.18-3.24 4.41 4.41 0 0 0-3.26-1.275h-5.152v8.562ZM263.081 17.786a2.666 2.666 0 0 1 .815-2.005 3.512 3.512 0 0 1 4.431 0 2.86 2.86 0 0 1-.01 4.028 3.473 3.473 0 0 1-4.402 0 2.66 2.66 0 0 1-.834-2.023Zm5.227 25.517h-4.383a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.383a.525.525 0 0 1 .525.525v19.22a.525.525 0 0 1-.525.526ZM45.008 32.949a8.74 8.74 0 0 0-3.104-6.182 7.664 7.664 0 0 0-1.44-2.801 8.594 8.594 0 0 0-3.058-5.777c.284-.244.524-.536.708-.862a6.186 6.186 0 0 0 3.63-4.23 5.558 5.558 0 0 0 1.755-3.64 3.481 3.481 0 0 0-.31-1.638 3.114 3.114 0 0 0 .81-3.215c-.606-1.756-2.73-2.896-5.584-3.017a4.497 4.497 0 0 0-3.11-1.065 7.188 7.188 0 0 0-1.678.207 3.821 3.821 0 0 0-1.65-.334 6.458 6.458 0 0 0-3.148.858 2.894 2.894 0 0 0-.38-.025 6.276 6.276 0 0 0-3.551 1.558 10.765 10.765 0 0 0-1.866 1.944 10.768 10.768 0 0 0-1.867-1.944 6.278 6.278 0 0 0-3.55-1.558c-.127 0-.254.008-.38.025a6.46 6.46 0 0 0-3.148-.858 3.822 3.822 0 0 0-1.65.334 7.188 7.188 0 0 0-1.68-.207 4.498 4.498 0 0 0-3.109 1.065c-2.854.12-4.978 1.261-5.585 3.018a3.114 3.114 0 0 0 .812 3.214 3.482 3.482 0 0 0-.31 1.639 5.557 5.557 0 0 0 1.755 3.64 6.186 6.186 0 0 0 3.63 4.229c.183.326.423.618.707.862A8.594 8.594 0 0 0 5.6 23.966a7.663 7.663 0 0 0-1.44 2.801 8.74 8.74 0 0 0-3.104 6.182 8.424 8.424 0 0 0 1.92 6.578c.26 1.31.8 2.549 1.581 3.632a9.452 9.452 0 0 0 2.386 5.514 9.768 9.768 0 0 0 5.262 3.126 12.74 12.74 0 0 0 4.208 2.605 9.763 9.763 0 0 0 13.24 0c1.559-.585 2.988-1.47 4.207-2.605a9.768 9.768 0 0 0 5.262-3.126 9.452 9.452 0 0 0 2.386-5.514 9.311 9.311 0 0 0 1.582-3.632 8.424 8.424 0 0 0 1.919-6.578Z" class="__rptl-header-logo-text"/><path d="M28.366 4.192a.225.225 0 0 1 .286.24c-.072.672.335.587.432.468a3.526 3.526 0 0 1 3.188-1.53.225.225 0 0 1 .154.363c-.4.593.03.706.19.6 1.631-1.02 3.187-1.023 3.785-.594a.225.225 0 0 1 .013.349c-.604.514-.266.77-.052.692a5.802 5.802 0 0 1 4.74.607.227.227 0 0 1 .006.343 4.493 4.493 0 0 0-1.73 3.018c-.045.396.614.313.891.241a.225.225 0 0 1 .28.21c.026.954-.876 2.002-2.218 2.898-.18.12-.154.408.256.42a.222.222 0 0 1 .191.334c-.478.888-1.13 1.724-3.345 2.298a.227.227 0 0 0-.032.429.217.217 0 0 1 .071.384c-2.207 1.896-7.8 1.148-8.51-2.043a.224.224 0 0 1 .04-.182 21.262 21.262 0 0 1 9.276-7.058.176.176 0 0 0-.087-.34 15.168 15.168 0 0 0-10.074 6.074.227.227 0 0 1-.289.065c-3.585-1.851-.64-7.317 2.538-8.286ZM7.285 12.85a.222.222 0 0 1 .191-.334c.41-.01.436-.299.256-.419C6.39 11.201 5.49 10.153 5.514 9.2a.225.225 0 0 1 .28-.21c.278.072.936.155.891-.241a4.493 4.493 0 0 0-1.73-3.017.227.227 0 0 1 .006-.344 5.802 5.802 0 0 1 4.74-.607c.214.079.552-.178-.052-.692a.225.225 0 0 1 .014-.35c.597-.428 2.153-.426 3.785.594.159.107.589-.006.19-.599a.225.225 0 0 1 .153-.363A3.526 3.526 0 0 1 16.98 4.9c.096.12.503.204.432-.469a.225.225 0 0 1 .286-.239c3.178.97 6.122 6.435 2.537 8.286a.227.227 0 0 1-.289-.065A15.168 15.168 0 0 0 9.873 6.34a.176.176 0 0 0-.088.34 21.262 21.262 0 0 1 9.276 7.057c.04.052.054.119.04.183-.71 3.19-6.303 3.938-8.51 2.042a.217.217 0 0 1 .071-.384.227.227 0 0 0-.031-.429c-2.216-.574-2.867-1.41-3.346-2.298Z" class="__rptl-header-logo-leaf"/><path d="M37.158 22.605c.92 2.446.203 3.622-1.978 2.377a15.632 15.632 0 0 1-4.58-3.84c-1.644-1.952-.576-2.821 2.012-2.352a6.985 6.985 0 0 1 4.546 3.815ZM27.375 19.853c3.12 2.593-.454 4.428-4.343 4.428-3.89 0-7.463-1.835-4.344-4.428a6.935 6.935 0 0 1 8.687 0ZM8.906 22.605a6.985 6.985 0 0 1 4.545-3.815c2.588-.47 3.656.4 2.013 2.352a15.632 15.632 0 0 1-4.58 3.84c-2.182 1.245-2.898.069-1.978-2.377ZM4.394 36.196a6.983 6.983 0 0 1 .518-5.942c1.153-1.96 2.313-1.883 2.773-.222.585 2.29.373 4.712-.6 6.867-.854 1.696-1.921 1.123-2.691-.703ZM12.704 48.896A6.942 6.942 0 0 1 7.482 42.7c.433-10.066 14.94 7.91 5.222 6.196ZM12.999 36.358c-2.433-1.404-3.077-4.844-1.438-7.682 1.639-2.839 4.94-4 7.372-2.596 2.433 1.404 3.077 4.844 1.438 7.682-1.639 2.839-4.94 4-7.372 2.596ZM27.091 52.737a6.947 6.947 0 0 1-8.119 0c-2.41-1.664.015-3.58 4.06-3.58s6.47 1.916 4.06 3.58Z" class="__rptl-header-logo-berry"/><ellipse class="__rptl-header-logo-berry" cx="23.032" cy="41.795" rx="5.647" ry="4.84"/><path d="M25.692 33.762c-1.639-2.838-.995-6.278 1.438-7.682 2.433-1.405 5.734-.243 7.372 2.596 1.64 2.838.995 6.278-1.438 7.682-2.432 1.405-5.733.243-7.372-2.596ZM33.36 48.896C23.64 50.61 38.149 32.634 38.58 42.7a6.941 6.941 0 0 1-5.221 6.196ZM41.67 36.196c-.77 1.826-1.838 2.399-2.691.703a10.417 10.417 0 0 1-.6-6.867c.46-1.66 1.62-1.739 2.772.222a6.983 6.983 0 0 1 .518 5.942Z" class="__rptl-header-logo-berry"/></g></svg>
+      <a href="/" class="__rptl-header-brand">
+        <svg class="__rptl-header-logo" aria-hidden="true" focusable="false" height="44" viewBox="0 0 270 57" xmlns="http://www.w3.org/2000/svg" aria-labelledby="__rptl-header-logo"><title id="__rptl-header-logo">Raspberry Pi</title><g fill-rule="nonzero" fill="none"><path d="M65.275 33.317h-4.477v9.46c0 .29-.235.526-.525.526h-4.57a.525.525 0 0 1-.526-.525V16.55a.525.525 0 0 1 .525-.525h9.61c3.223 0 5.709.718 7.457 2.154a7.437 7.437 0 0 1 2.623 6.09 8.391 8.391 0 0 1-1.208 4.655 8.24 8.24 0 0 1-3.663 2.97l5.635 10.638a.525.525 0 0 1-.464.77h-4.917a.63.63 0 0 1-.56-.342l-4.94-9.643Zm-4.477-4.552h4.534a4.641 4.641 0 0 0 3.278-1.078 3.85 3.85 0 0 0 1.162-2.97 4.122 4.122 0 0 0-1.096-3.034 4.556 4.556 0 0 0-3.363-1.106h-4.515v8.188ZM90.426 42.997a6.562 6.562 0 0 1-.402-1.511 6.551 6.551 0 0 1-5.114 2.192 7.195 7.195 0 0 1-4.937-1.724 5.542 5.542 0 0 1-1.958-4.347 5.73 5.73 0 0 1 2.389-4.946c1.592-1.148 3.894-1.73 6.904-1.742h2.491v-1.162a3.342 3.342 0 0 0-.72-2.248 2.838 2.838 0 0 0-2.277-.843 3.226 3.226 0 0 0-2.145.656 2.13 2.13 0 0 0-.748 1.37.513.513 0 0 1-.513.428h-4.375a.533.533 0 0 1-.524-.596 5.494 5.494 0 0 1 1.054-2.663 7.184 7.184 0 0 1 3.073-2.352 11.2 11.2 0 0 1 4.459-.852 8.848 8.848 0 0 1 5.948 1.883 6.587 6.587 0 0 1 2.202 5.292v8.787a9.948 9.948 0 0 0 .629 3.93.525.525 0 0 1-.47.754h-4.485a.515.515 0 0 1-.48-.306Zm-4.336-3.46c.77.007 1.529-.176 2.21-.534a3.509 3.509 0 0 0 1.5-1.433v-3.485h-2.024c-2.71 0-4.153.937-4.328 2.81l-.019.319a2.166 2.166 0 0 0 .712 1.667 2.764 2.764 0 0 0 1.949.656ZM109.963 37.701a1.745 1.745 0 0 0-.983-1.564 11.18 11.18 0 0 0-3.157-1.021c-4.822-1.012-7.232-3.06-7.232-6.145a5.57 5.57 0 0 1 2.24-4.506 9.031 9.031 0 0 1 5.854-1.808 9.723 9.723 0 0 1 6.173 1.817 5.699 5.699 0 0 1 2.292 4.175.52.52 0 0 1-.525.546h-4.382a.514.514 0 0 1-.514-.435 2.538 2.538 0 0 0-.721-1.485 3.172 3.172 0 0 0-2.342-.759 3.24 3.24 0 0 0-2.117.619c-.483.377-.76.96-.75 1.573.001.603.327 1.158.853 1.452a8.76 8.76 0 0 0 2.876.956 23.54 23.54 0 0 1 3.41.908c2.86 1.05 4.29 2.867 4.29 5.452a5.288 5.288 0 0 1-2.38 4.487 10.264 10.264 0 0 1-6.145 1.715c-1.556.029-3.1-.281-4.524-.91a7.586 7.586 0 0 1-3.1-2.49 5.853 5.853 0 0 1-1.094-2.824.533.533 0 0 1 .523-.596h4.11a.513.513 0 0 1 .513.418c.091.71.46 1.354 1.024 1.793a4.233 4.233 0 0 0 2.66.768c.827.057 1.65-.15 2.352-.59.508-.35.807-.93.796-1.546ZM136.719 33.355a12.159 12.159 0 0 1-2.127 7.503 6.817 6.817 0 0 1-5.742 2.82 6.315 6.315 0 0 1-4.965-2.136v9.03c0 .29-.235.525-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.018c.27 0 .497.206.523.475l.142 1.51a6.363 6.363 0 0 1 5.134-2.36 6.865 6.865 0 0 1 5.826 2.773c1.387 1.848 2.08 4.396 2.08 7.644v.28Zm-5.415-.394a7.982 7.982 0 0 0-1.002-4.365 3.266 3.266 0 0 0-2.913-1.536 3.546 3.546 0 0 0-3.504 1.948v8.3a3.605 3.605 0 0 0 3.541 2.004c2.586 0 3.878-2.117 3.878-6.35ZM158.159 33.355c0 3.247-.694 5.78-2.08 7.597a6.889 6.889 0 0 1-5.808 2.726 6.329 6.329 0 0 1-5.264-2.53l-.191 1.689a.525.525 0 0 1-.522.466h-3.877a.525.525 0 0 1-.525-.525V15.05c0-.29.235-.525.525-.525h4.364a.525.525 0 0 1 .525.525v9.798a6.166 6.166 0 0 1 4.928-2.192 6.945 6.945 0 0 1 5.817 2.726c1.405 1.817 2.108 4.374 2.108 7.672v.3Zm-5.415-.394a8.068 8.068 0 0 0-.974-4.487 3.295 3.295 0 0 0-2.904-1.414 3.572 3.572 0 0 0-3.56 2.117v8a3.62 3.62 0 0 0 3.597 2.135c1.626.093 3.081-.999 3.448-2.585.31-1.23.442-2.498.393-3.766ZM170.555 43.678a9.95 9.95 0 0 1-7.26-2.736 9.722 9.722 0 0 1-2.8-7.288v-.524a12.247 12.247 0 0 1 1.18-5.461 8.666 8.666 0 0 1 3.344-3.71 9.387 9.387 0 0 1 4.936-1.302 8.413 8.413 0 0 1 6.548 2.623c1.593 1.749 2.39 4.228 2.39 7.438v1.685a.525.525 0 0 1-.526.525h-12.383a5.028 5.028 0 0 0 1.583 3.185 4.785 4.785 0 0 0 3.344 1.2 5.886 5.886 0 0 0 4.524-1.837.527.527 0 0 1 .773.026l1.964 2.198c.17.188.182.47.028.672a8.216 8.216 0 0 1-3.036 2.34 10.82 10.82 0 0 1-4.609.966Zm-.618-16.656a3.382 3.382 0 0 0-2.614 1.092 5.65 5.65 0 0 0-1.283 3.124h7.531v-.433a4.034 4.034 0 0 0-.974-2.795 3.492 3.492 0 0 0-2.66-.988ZM193.333 27.525a.523.523 0 0 1-.575.515c-.459-.051-.92-.078-1.382-.081-2.049 0-3.391.693-4.028 2.08v12.739a.525.525 0 0 1-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.096c.277 0 .507.215.524.492l.12 1.924a5.017 5.017 0 0 1 4.514-2.791c.434-.002.867.044 1.29.138a.515.515 0 0 1 .39.515l-.06 4.215ZM207.017 27.525a.523.523 0 0 1-.575.515c-.459-.051-.92-.078-1.382-.081-2.048 0-3.39.693-4.028 2.08v12.739a.525.525 0 0 1-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.096c.277 0 .507.215.524.492l.12 1.924a5.018 5.018 0 0 1 4.514-2.791c.434-.002.867.044 1.29.138a.515.515 0 0 1 .39.515l-.06 4.215ZM217.934 35.64l3.635-12.233a.525.525 0 0 1 .504-.375h4.677a.525.525 0 0 1 .496.697l-7.907 22.721-.45 1.068a6.18 6.18 0 0 1-5.995 3.972 8.368 8.368 0 0 1-2.003-.25.529.529 0 0 1-.395-.513v-3.15a.525.525 0 0 1 .546-.524l.538.02a3.442 3.442 0 0 0 2.035-.492 3.08 3.08 0 0 0 1.19-1.555l.637-1.667-6.857-19.63a.525.525 0 0 1 .496-.697h4.696c.232 0 .437.152.503.374l3.654 12.234ZM245.156 33.692v9.086c0 .29-.235.525-.525.525h-4.57a.525.525 0 0 1-.526-.525V16.55a.525.525 0 0 1 .525-.525h10.117a12.31 12.31 0 0 1 5.405 1.124 8.284 8.284 0 0 1 3.587 3.194 8.91 8.91 0 0 1 1.256 4.712 7.833 7.833 0 0 1-2.745 6.323c-1.83 1.543-4.362 2.314-7.597 2.314h-4.927Zm0-4.553h5.02a4.934 4.934 0 0 0 3.401-1.049 3.816 3.816 0 0 0 1.171-2.998 4.5 4.5 0 0 0-1.18-3.24 4.41 4.41 0 0 0-3.26-1.275h-5.152v8.562ZM263.081 17.786a2.666 2.666 0 0 1 .815-2.005 3.512 3.512 0 0 1 4.431 0 2.86 2.86 0 0 1-.01 4.028 3.473 3.473 0 0 1-4.402 0 2.66 2.66 0 0 1-.834-2.023Zm5.227 25.517h-4.383a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.383a.525.525 0 0 1 .525.525v19.22a.525.525 0 0 1-.525.526ZM45.008 32.949a8.74 8.74 0 0 0-3.104-6.182 7.664 7.664 0 0 0-1.44-2.801 8.594 8.594 0 0 0-3.058-5.777c.284-.244.524-.536.708-.862a6.186 6.186 0 0 0 3.63-4.23 5.558 5.558 0 0 0 1.755-3.64 3.481 3.481 0 0 0-.31-1.638 3.114 3.114 0 0 0 .81-3.215c-.606-1.756-2.73-2.896-5.584-3.017a4.497 4.497 0 0 0-3.11-1.065 7.188 7.188 0 0 0-1.678.207 3.821 3.821 0 0 0-1.65-.334 6.458 6.458 0 0 0-3.148.858 2.894 2.894 0 0 0-.38-.025 6.276 6.276 0 0 0-3.551 1.558 10.765 10.765 0 0 0-1.866 1.944 10.768 10.768 0 0 0-1.867-1.944 6.278 6.278 0 0 0-3.55-1.558c-.127 0-.254.008-.38.025a6.46 6.46 0 0 0-3.148-.858 3.822 3.822 0 0 0-1.65.334 7.188 7.188 0 0 0-1.68-.207 4.498 4.498 0 0 0-3.109 1.065c-2.854.12-4.978 1.261-5.585 3.018a3.114 3.114 0 0 0 .812 3.214 3.482 3.482 0 0 0-.31 1.639 5.557 5.557 0 0 0 1.755 3.64 6.186 6.186 0 0 0 3.63 4.229c.183.326.423.618.707.862A8.594 8.594 0 0 0 5.6 23.966a7.663 7.663 0 0 0-1.44 2.801 8.74 8.74 0 0 0-3.104 6.182 8.424 8.424 0 0 0 1.92 6.578c.26 1.31.8 2.549 1.581 3.632a9.452 9.452 0 0 0 2.386 5.514 9.768 9.768 0 0 0 5.262 3.126 12.74 12.74 0 0 0 4.208 2.605 9.763 9.763 0 0 0 13.24 0c1.559-.585 2.988-1.47 4.207-2.605a9.768 9.768 0 0 0 5.262-3.126 9.452 9.452 0 0 0 2.386-5.514 9.311 9.311 0 0 0 1.582-3.632 8.424 8.424 0 0 0 1.919-6.578Z" fill="#000"/><path d="M28.366 4.192a.225.225 0 0 1 .286.24c-.072.672.335.587.432.468a3.526 3.526 0 0 1 3.188-1.53.225.225 0 0 1 .154.363c-.4.593.03.706.19.6 1.631-1.02 3.187-1.023 3.785-.594a.225.225 0 0 1 .013.349c-.604.514-.266.77-.052.692a5.802 5.802 0 0 1 4.74.607.227.227 0 0 1 .006.343 4.493 4.493 0 0 0-1.73 3.018c-.045.396.614.313.891.241a.225.225 0 0 1 .28.21c.026.954-.876 2.002-2.218 2.898-.18.12-.154.408.256.42a.222.222 0 0 1 .191.334c-.478.888-1.13 1.724-3.345 2.298a.227.227 0 0 0-.032.429.217.217 0 0 1 .071.384c-2.207 1.896-7.8 1.148-8.51-2.043a.224.224 0 0 1 .04-.182 21.262 21.262 0 0 1 9.276-7.058.176.176 0 0 0-.087-.34 15.168 15.168 0 0 0-10.074 6.074.227.227 0 0 1-.289.065c-3.585-1.851-.64-7.317 2.538-8.286ZM7.285 12.85a.222.222 0 0 1 .191-.334c.41-.01.436-.299.256-.419C6.39 11.201 5.49 10.153 5.514 9.2a.225.225 0 0 1 .28-.21c.278.072.936.155.891-.241a4.493 4.493 0 0 0-1.73-3.017.227.227 0 0 1 .006-.344 5.802 5.802 0 0 1 4.74-.607c.214.079.552-.178-.052-.692a.225.225 0 0 1 .014-.35c.597-.428 2.153-.426 3.785.594.159.107.589-.006.19-.599a.225.225 0 0 1 .153-.363A3.526 3.526 0 0 1 16.98 4.9c.096.12.503.204.432-.469a.225.225 0 0 1 .286-.239c3.178.97 6.122 6.435 2.537 8.286a.227.227 0 0 1-.289-.065A15.168 15.168 0 0 0 9.873 6.34a.176.176 0 0 0-.088.34 21.262 21.262 0 0 1 9.276 7.057c.04.052.054.119.04.183-.71 3.19-6.303 3.938-8.51 2.042a.217.217 0 0 1 .071-.384.227.227 0 0 0-.031-.429c-2.216-.574-2.867-1.41-3.346-2.298Z" fill="#46AF4B"/><path d="M37.158 22.605c.92 2.446.203 3.622-1.978 2.377a15.632 15.632 0 0 1-4.58-3.84c-1.644-1.952-.576-2.821 2.012-2.352a6.985 6.985 0 0 1 4.546 3.815ZM27.375 19.853c3.12 2.593-.454 4.428-4.343 4.428-3.89 0-7.463-1.835-4.344-4.428a6.935 6.935 0 0 1 8.687 0ZM8.906 22.605a6.985 6.985 0 0 1 4.545-3.815c2.588-.47 3.656.4 2.013 2.352a15.632 15.632 0 0 1-4.58 3.84c-2.182 1.245-2.898.069-1.978-2.377ZM4.394 36.196a6.983 6.983 0 0 1 .518-5.942c1.153-1.96 2.313-1.883 2.773-.222.585 2.29.373 4.712-.6 6.867-.854 1.696-1.921 1.123-2.691-.703ZM12.704 48.896A6.942 6.942 0 0 1 7.482 42.7c.433-10.066 14.94 7.91 5.222 6.196ZM12.999 36.358c-2.433-1.404-3.077-4.844-1.438-7.682 1.639-2.839 4.94-4 7.372-2.596 2.433 1.404 3.077 4.844 1.438 7.682-1.639 2.839-4.94 4-7.372 2.596ZM27.091 52.737a6.947 6.947 0 0 1-8.119 0c-2.41-1.664.015-3.58 4.06-3.58s6.47 1.916 4.06 3.58Z" fill="#CD2355"/><ellipse fill="#CD2355" cx="23.032" cy="41.795" rx="5.647" ry="4.84"/><path d="M25.692 33.762c-1.639-2.838-.995-6.278 1.438-7.682 2.433-1.405 5.734-.243 7.372 2.596 1.64 2.838.995 6.278-1.438 7.682-2.432 1.405-5.733.243-7.372-2.596ZM33.36 48.896C23.64 50.61 38.149 32.634 38.58 42.7a6.941 6.941 0 0 1-5.221 6.196ZM41.67 36.196c-.77 1.826-1.838 2.399-2.691.703a10.417 10.417 0 0 1-.6-6.867c.46-1.66 1.62-1.739 2.772.222a6.983 6.983 0 0 1 .518 5.942Z" fill="#CD2355"/></g></svg>
       </a>
 
       <label class="__rptl-header-burger" for="__rptl-header-burger-state">
@@ -403,17 +391,17 @@
     <div class="__rptl-header-wrapper">
       <div class="__rptl-header-nav-inner">
         <ul class="__rptl-header-nav-list">
-          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/for-industry/" class="__rptl-header-nav-link __rptl-header-nav-link--for-industry">For industry</a>
-          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/for-home/" class="__rptl-header-nav-link __rptl-header-nav-link--for-home">For home</a>
+          <li class="__rptl-header-nav-list-item"><a href="/for-industry/" class="__rptl-header-nav-link __rptl-header-nav-link--for-industry">For industry</a>
+          <li class="__rptl-header-nav-list-item"><a href="/for-home/" class="__rptl-header-nav-link __rptl-header-nav-link--for-home">For home</a>
         </ul>
         <ul class="__rptl-header-nav-list">
-          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/products/" class="__rptl-header-nav-link">Hardware</a>
-          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/software/" class="__rptl-header-nav-link">Software</a>
-          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/documentation/" class="__rptl-header-nav-link">Documentation</a>
-          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/news/" class="__rptl-header-nav-link">News</a>
+          <li class="__rptl-header-nav-list-item"><a href="/products/" class="__rptl-header-nav-link">Hardware</a>
+          <li class="__rptl-header-nav-list-item"><a href="/software/" class="__rptl-header-nav-link">Software</a>
+          <li class="__rptl-header-nav-list-item"><a href="/documentation/" class="__rptl-header-nav-link">Documentation</a>
+          <li class="__rptl-header-nav-list-item"><a href="/news/" class="__rptl-header-nav-link">News</a>
           <li class="__rptl-header-nav-list-item"><a href="https://forums.raspberrypi.com/" class="__rptl-header-nav-link">Forums</a>
           <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.org" class="__rptl-header-nav-link" rel="noopener">Foundation</a>
-          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/contact/" class="__rptl-header-nav-link">Contact</a>
+          <li class="__rptl-header-nav-list-item"><a href="/contact/" class="__rptl-header-nav-link">Contact</a>
         </ul>
       </div>
     </div>
diff --git a/jekyll-assets/_includes/legal.html b/jekyll-assets/_includes/legal.html
deleted file mode 100644
index 6778d30d0e..0000000000
--- a/jekyll-assets/_includes/legal.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-<div class="legal">
-  <div class="legal-inner">
-    <p>You can view and edit the Raspberry Pi documentation source <a href="{{ site.githuburl }}">on Github</a>. Please read our <a href="{{ site.githuburl }}blob/{{ site.githubbranch }}/CONTRIBUTING.md">usage and contributions policy</a> before you make a Pull Request.</p>
-    <p>Raspberry Pi documentation is copyright &copy; 2012-{{ site.time | date: '%Y' }} Raspberry Pi Ltd and is licensed under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International</a> (CC BY-SA) licence.</p>
-    <p>Some content originates from the <a href="http://elinux.org/">eLinux wiki</a>, and is licensed under a <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported</a> licence.</p>
-    <p>The terms HDMI, HDMI High-Definition Multimedia Interface, HDMI trade dress and the HDMI Logos are trademarks or registered trademarks of HDMI Licensing Administrator, Inc</p>
-  </div>
-</div>
\ No newline at end of file
diff --git a/jekyll-assets/_includes/mobile_nav.html b/jekyll-assets/_includes/mobile_nav.html
new file mode 100644
index 0000000000..66c1886939
--- /dev/null
+++ b/jekyll-assets/_includes/mobile_nav.html
@@ -0,0 +1,40 @@
+<nav id="mobile-contents">
+{% for subdir in site.data.nav %}
+{% if page.dir == subdir.path %}
+
+  {% if subdir.toc[0] %}
+    <div class="mobile-contents-menu" onclick="expandAndCollapseMobile(this)">
+      <span class="mobile-contents-line"></span>
+      <span class="mobile-contents-line"></span>
+      <span class="mobile-contents-line"></span>
+    </div>
+    <div class="contents-inner hidden">
+    {% for item in subdir.toc %}
+      <h3 class="contentshead">{{ item.title | markdownify }}</h3>
+      {% if item.sections[0] %}
+        <div class="itemcontents">
+          <ul class="sectlevel1">
+            {% for entry in item.sections %}
+              <li>
+                <a href="{{ site.baseurl }}{{ item.path }}#{{ entry.anchor }}">{{ entry.heading | markdownify }}</a>
+                {% if entry.subsections[0] %}
+                  <ul>
+                    {% for subentry in entry.subsections %}
+                      <li>
+                        <a href="{{ site.baseurl }}{{ item.path }}#{{ subentry.anchor }}">{{ subentry.heading | markdownify }}</a>
+                      </li>
+                    {% endfor %}
+                  </ul>
+                {% endif %}
+              </li>
+            {% endfor %}
+          </ul>
+        </div>
+      {% endif %}
+    {% endfor %}
+  </div>
+  {% endif %}
+
+{% endif %}
+{% endfor %}
+</nav>
\ No newline at end of file
diff --git a/jekyll-assets/_includes/nav.html b/jekyll-assets/_includes/nav.html
new file mode 100644
index 0000000000..e78a994fde
--- /dev/null
+++ b/jekyll-assets/_includes/nav.html
@@ -0,0 +1,56 @@
+<nav id="contents">
+{% for subdir in site.data.nav %}
+{% if page.dir == subdir.path %}
+
+  {% if subdir.toc[0] %}
+    <h2><a href="{{ site.baseurl }}{{ subdir.path }}">{{ subdir.title | markdownify }}</a></h2>
+    {% for item in subdir.toc %}
+      <h3 class="contentshead" onclick="expandAndCollapse(this)">{{ item.title | markdownify }}</h3>
+      {% if item.sections[0] %}
+        {% if page.url == item.path %}
+        <div class="itemcontents" id="toc"></div>
+        <div class="itemcontents noJS">
+          <ul class="sectlevel1">
+            {% for entry in item.sections %}
+              <li>
+                <a href="{{ site.baseurl }}{{ item.path }}#{{ entry.anchor }}">{{ entry.heading | markdownify }}</a>
+                {% if entry.subsections[0] %}
+                  <ul>
+                    {% for subentry in entry.subsections %}
+                      <li>
+                        <a href="{{ site.baseurl }}{{ item.path }}#{{ subentry.anchor }}">{{ subentry.heading | markdownify }}</a>
+                      </li>
+                    {% endfor %}
+                  </ul>
+                {% endif %}
+              </li>
+            {% endfor %}
+          </ul>
+        </div>
+        {% else %}
+        <div class="itemcontents">
+          <ul class="sectlevel1">
+            {% for entry in item.sections %}
+              <li>
+                <a href="{{ site.baseurl }}{{ item.path }}#{{ entry.anchor }}">{{ entry.heading | markdownify }}</a>
+                {% if entry.subsections[0] %}
+                  <ul>
+                    {% for subentry in entry.subsections %}
+                      <li>
+                        <a href="{{ site.baseurl }}{{ item.path }}#{{ subentry.anchor }}">{{ subentry.heading | markdownify }}</a>
+                      </li>
+                    {% endfor %}
+                  </ul>
+                {% endif %}
+              </li>
+            {% endfor %}
+          </ul>
+        </div>
+        {% endif %}
+      {% endif %}
+    {% endfor %}
+  {% endif %}
+
+{% endif %}
+{% endfor %}
+</nav>
diff --git a/jekyll-assets/_includes/scripts.html b/jekyll-assets/_includes/scripts.html
new file mode 100644
index 0000000000..66d2fdea65
--- /dev/null
+++ b/jekyll-assets/_includes/scripts.html
@@ -0,0 +1,90 @@
+<!-- Script for the TOC toggle -->
+<script src="{{ site.baseurl }}/scripts/nav.js?ver={{ site.time | date: '%s' }}" type="text/javascript"></script>
+
+<!-- Asciidoctor tabs -->
+<script src="{{ site.baseurl }}/scripts/asciidoctor-tabs.js?ver={{ site.time | date: '%s' }}" type="text/javascript"></script>
+
+<!-- TOCify scripts -->
+<script src="{{ site.baseurl }}/scripts/jquery-1.12.4.min.js"></script>
+<script src="{{ site.baseurl }}/scripts/jquery-ui-1.13.0.custom.min.js"></script>
+<script src="{{ site.baseurl }}/scripts/jquery.tocify.js?ver={{ site.time | date: '%s' }}"></script>
+
+<!-- Copy To Clipboard scripts -->
+<script src="{{ site.baseurl }}/scripts/clipboard.min.js"></script>
+<script src="{{ site.baseurl }}/scripts/copy-to-clipboard.js?ver={{ site.time | date: '%s' }}"></script>
+
+<!-- Some custom handling for whitepapers -->
+<script src="{{ site.baseurl }}/scripts/whitepaper.js?ver={{ site.time | date: '%s' }}"></script>
+
+<script>
+  function hasher(text, element) {
+    return text.toLowerCase().replace(/ /g, "-").replace(/\./g, "-").replace(/[^-\w]/g, "").replace(/-+/g, "-");
+  }
+
+  function waitForElementToDisplay(selector, checkFrequencyInMs, timeoutInMs) {
+    try {
+      // wait for all the content to load first...
+      var startTimeInMs = Date.now();
+      (function loopSearch() {
+        //  && document.querySelector(selector).getBoundingClientRect().top > 0
+        if (document.querySelector(selector) != null && document.querySelector(selector).getBoundingClientRect().top > 0) {
+          scrollToElement(selector);
+          return;
+        }
+        else {
+          setTimeout(function () {
+            if (timeoutInMs && Date.now() - startTimeInMs > timeoutInMs)
+              return;
+            loopSearch();
+          }, checkFrequencyInMs);
+        }
+      })();
+    } catch (e) {
+      console.log("there was an error in scrollToElement:");
+      console.log(e);
+    }
+  }
+
+  function scrollToElement(selector) {
+    try {
+      var target = document.querySelector(selector);
+      if (target) {
+        setTimeout(function () {
+          target.scrollIntoView({ behavior: "instant" });
+          setTimeout(function () {
+            target.scrollIntoView({ behavior: "instant" });
+          },100);
+        },1);
+        
+        
+      } else {
+        console.log("Target not found :(");
+      }
+    } catch (e) {
+      console.log("there was an error in scrollToElement:");
+      console.log(e);
+    }
+  }
+
+  $(function() {
+    $("#toc").tocify({ showAndHide: false, hashGenerator: hasher, extendPage: false, ignoreSelector: ".discrete" });
+    // special handling to scroll to tocify elements on the page
+    if (window.location.hasOwnProperty("hash") && window.location.hash.indexOf("#") > -1) {
+      var myhash = window.location.hash;
+      myhash = myhash.replace("#", "");
+      var selector = "div[data-unique="+myhash+"] + *";
+      waitForElementToDisplay(selector, 1000, 9000);
+    }
+  });
+</script>
+
+<script>
+  var contents = document.getElementById("contents");
+  contents.addEventListener('mouseenter', e => {
+    contents.style.overflowY = 'auto';
+  });
+
+  contents.addEventListener('mouseleave', e => {
+    contents.style.overflowY = 'hidden';
+  });
+</script>
diff --git a/jekyll-assets/_includes/subtitle.html b/jekyll-assets/_includes/subtitle.html
new file mode 100644
index 0000000000..9d09b295e3
--- /dev/null
+++ b/jekyll-assets/_includes/subtitle.html
@@ -0,0 +1,3 @@
+<div class="subtitle">
+  <p>The official documentation for<br /> Raspberry Pi computers and microcontrollers</p>
+</div>
\ No newline at end of file
diff --git a/jekyll-assets/_includes/subtitle404.html b/jekyll-assets/_includes/subtitle404.html
new file mode 100644
index 0000000000..f5c20144e9
--- /dev/null
+++ b/jekyll-assets/_includes/subtitle404.html
@@ -0,0 +1,3 @@
+<div class="subtitle error-message">
+  <p>We couldn't find what you were looking for. Please browse our updated <a href="{{ site.baseurl }}/"><strong>Raspberry Pi</strong> Documentation</a>.</p>
+</div>
diff --git a/jekyll-assets/_includes/theme.html b/jekyll-assets/_includes/theme.html
deleted file mode 100644
index 7f5f4add27..0000000000
--- a/jekyll-assets/_includes/theme.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div id="theme-toggle-container">
-	<a id="theme-toggle" alt="toggle site theme" title="toggle site theme" onclick="toggleTheme()"></a>
-</div>
\ No newline at end of file
diff --git a/jekyll-assets/_includes/toptitle.html b/jekyll-assets/_includes/toptitle.html
new file mode 100644
index 0000000000..b98cf33465
--- /dev/null
+++ b/jekyll-assets/_includes/toptitle.html
@@ -0,0 +1,4 @@
+<div class="toptitle">
+  <h1><a href="{{ site.baseurl }}/"><strong>Raspberry Pi</strong> Documentation</a></h1>
+  <div id="docsearch"></div>
+</div>
diff --git a/jekyll-assets/_includes/toptitle404.html b/jekyll-assets/_includes/toptitle404.html
new file mode 100644
index 0000000000..4d94ee4954
--- /dev/null
+++ b/jekyll-assets/_includes/toptitle404.html
@@ -0,0 +1,4 @@
+<div class="toptitle error-message">
+  <h1><strong>404</strong></h1>
+  <div id="docsearch"></div>
+</div>
diff --git a/jekyll-assets/_layouts/boxes.html b/jekyll-assets/_layouts/boxes.html
index e82849b15f..1a0c35a0e6 100644
--- a/jekyll-assets/_layouts/boxes.html
+++ b/jekyll-assets/_layouts/boxes.html
@@ -1,20 +1,19 @@
 <!doctype html>
 <html lang="en">
   <head>
-    {% include head.html %}
+    {% include head.html %} 
+    <link rel="stylesheet" href="{{ site.baseurl }}/css/boxes.css?ver={{ site.time | date: '%s' }}">
   </head>
-  <body onload="makeToc()">
-    <script type="text/javascript">initTheme()</script>
-    {% include header.html %}
-
-    <div class="toptitle">
-      <h1><a href="/documentation/"><b>Raspberry Pi</b> Documentation</a></h1>
-      <div id="search-theme-toggle-container">
-        <div id="docsearch"></div>
-        {% include theme.html %}
-      </div>
-      {% include tabs.html %}
-    </div>
+  <body>
+    {% include header.html %}      
+    {% if page.name == "404.adoc" %}
+      {% include toptitle404.html %}
+      {% include subtitle404.html %}
+    {% else %}
+      {% include toptitle.html %}
+      {% include subtitle.html %}
+    {% endif %}
+    {% include tabs.html %}
 
     <div id="container">
       <section id="box-content">
@@ -36,8 +35,9 @@ <h1><a href="/documentation/"><b>Raspberry Pi</b> Documentation</a></h1>
       </section>
     </div>
 
-    {% include legal.html %}
-    {% include footer.html %}
+    {% include contribute.html %} 
+    {% include copyright.html %} 
+    {% include footer.html %}  
     {% include search.html %}
 
   </body>
diff --git a/jekyll-assets/_layouts/docs.html b/jekyll-assets/_layouts/docs.html
index daae62b60d..ae4d626359 100644
--- a/jekyll-assets/_layouts/docs.html
+++ b/jekyll-assets/_layouts/docs.html
@@ -1,199 +1,27 @@
 <!doctype html>
 <html lang="en">
   <head>
-    {% include head.html %}
+    {% include head.html %} 
   </head>
-  <body onload="makeToc()">
-    <script type="text/javascript">initTheme()</script>
-    <input type="checkbox" id="mobile-toggle" />
-    {% include header.html %}
-    <div id="docs-content">
-      <div id="toc-container-container">
-        <div id="toc-container">
-          <div id="toc-inner">
-            <div id="docs-header">
-              <h1 id="docs-header-title">
-                <a href="/documentation">
-                  Documentation
-                </a>
-              </h1>
-              <label class="mobile-menu-toggle" for="mobile-toggle"><div>≣</div></label>
-              {% include theme.html %}
-            </div>
-            <div id="docsearch">
-            </div>
-          </div>
-          <div class="toc">
-          {% for subdir in site.data.nav %}
-          {% if subdir.toc[0] %}
-            <ul class="sectlevel1">
-              <input class="toc-toggle-box" type="checkbox" id="{{ subdir.path }}"
-                {% if page.url contains subdir.path %}
-                checked=true
-                {% endif %}
-              />
-              <li>
-                <span>
-                  <label class="toc-toggle" for="{{ subdir.path }}" onclick="event.stopPropagation()">
-                    <div class="toc-toggle-container">
-                      <a class="level1" href="{{ site.baseurl }}{{ subdir.path }}">
-                        <a title="expand {{ item.title | markdownify }}"
-                          {% if page.url contains subdir.path %}
-                          class="bold toc-item"
-                          {% else %}
-                          class="toc-item"
-                          {% endif %}
-                        >
-                          {{ subdir.title | markdownify }}
-                        </a>
-                      </a>
-                    </div>
-                  </label>
-                </span>
-              </li>
-              {% for item in subdir.toc %}
-              <div class="itemcontents">
-                <ul class="sectlevel1">
-                  <input class="toc-toggle-box" type="checkbox" id="{{ item.path }}"
-                    {% if page.url contains item.path %}
-                    checked=true
-                    {% endif %}
-                  />
-                  <li>
-                    <span>
-                      <label class="toc-toggle" for="{{ item.path }}">
-                        <div class="toc-toggle-container">
-                          <a class="level2" href="{{ site.baseurl }}{{ item.path }}">
-                            <a title="expand {{ item.title | strip_html }}"
-                              {% if page.url contains item.path %}
-                              class="bold toc-item"
-                              {% else %}
-                              class="toc-item" 
-                              {% endif %}
-                            >
-                            {{ item.title | markdownify }}
-                            </a>
-                          </a>
-                        </div>
-                      </label>
-                    </span>
-                  </li>
-                  {% if item.sections[0] %}
-                  {% for entry in item.sections %}
-                  <div class="itemcontents">
-                    <ul class="sectlevel1">
-                      <input class="toc-toggle-box" type="checkbox" id="{{ item.path }}#{{ entry.anchor }}"
-                        {% if endcapture contains entry.anchor %}
-                        checked=true
-                        {% endif %}
-                      />
-                      <li>
-                        <span>
-                          <label class="toc-toggle"
-                            {% if entry.subsections[0] %}
-                            for="{{ item.path }}#{{ entry.anchor }}"
-                            {% else %}
-                            {% endif %}>
-                            <div class="toc-toggle-container">
-                              {% if entry.subsections[0] %}
-                              <a class="level3">
-                                <a
-                                  id="{{ item.path }}#{{entry.anchor}}-toc"
-                                  href="{{ site.baseurl }}{{ item.path }}#{{ entry.anchor }}"
-                                  class="toc-item"
-                                  onclick="document.getElementById('mobile-toggle').checked = false; updateCurrentToc('{{ item.path }}#{{ entry.anchor }}-toc', '{{ item.path }}#{{ entry.anchor }}');"
-                                  title="expand {{ entry.heading | strip_html }}"
-                                >
-                                <script type="text/javascript">if (window.location.hash == '#{{ entry.anchor }}') initialiseCurrentToc('{{ item.path }}#{{entry.anchor}}-toc', '{{ item.path }}#{{ entry.anchor }}');
-                                </script>
-                                  {{ entry.heading | markdownify }}
-                                </a>
-                              </a>
-                              {% else %}
-                              <a class="level3">
-                                <a id="{{ item.path }}#{{entry.anchor}}-toc"
-                                  title="expand {{ entry.heading | strip_html }}"
-                                  href="{{ site.baseurl }}{{ item.path }}#{{ entry.anchor }}"
-                                  onclick="document.getElementById('mobile-toggle').checked = false; updateCurrentToc('{{ item.path }}#{{ entry.anchor }}-toc');"
-                                  class="toc-item no-dropdown"
-                                  >
-                                  <script type="text/javascript">if (window.location.hash == '#{{ entry.anchor }}')
-                                    initialiseCurrentToc('{{ item.path }}#{{entry.anchor}}-toc');
-                                  </script>
-                                  {{ entry.heading | markdownify }}
-                                </a>
-                              </a>
-                              {% endif %}
-                            </div>
-                          </label>
-                        </span>
-                      </li>
-                      {% if entry.subsections[0] %}
-                      {% for subentry in entry.subsections %}
-                      <div class="itemcontents">
-                        <ul class="sectlevel1">
-                          <li>
-                            <span>
-                              <label class="toc-toggle">
-                                <div class="toc-toggle-container">
-                                    <a class="level4">
-                                      <a class="toc-item no-dropdown"
-                                        href="{{ site.baseurl }}{{ item.path }}#{{ subentry.anchor }}"
-                                        onclick="document.getElementById('mobile-toggle').checked = false; updateCurrentToc('{{ item.path }}#{{ entry.anchor }}-toc', '{{ item.path }}#{{ entry.anchor }}', '{{ item.path }}#{{ subentry.anchor }}-toc');"
-                                        id="{{ item.path }}#{{subentry.anchor}}-toc"
-                                      >
-                                      <script type="text/javascript">if (window.location.hash == '#{{ subentry.anchor }}') initialiseCurrentToc('{{ item.path }}#{{ entry.anchor }}-toc', '{{ item.path }}#{{ entry.anchor }}', '{{ item.path }}#{{subentry.anchor}}-toc');
-                                      </script>
-                                        {{ subentry.heading | markdownify }}
-                                      </a>
-                                    </a>
-                                  </div>
-                              </label>
-                            </span>
-                          </li>
-                        </ul>
-                      </div>
-                      {% endfor %}
-                      {% endif %}
-                    </ul>
-                  </div>
-                  {% endfor %}
-                  {% endif %}
-                </ul>
-              </div>
-              {% endfor %}
-            </ul>
-            {% endif %}
-            {% endfor %}
-          </div>
-        </div>
-      </div>
-      <div id="docs-container">
-        <div id="main-window">
-          <section id="content">
-            <h1>{{ page.sub_title | markdownify | remove: '<p>' | remove: '</p>'}}</h1>
-            {{ content }}
-          </section>
+  <body>
+    {% include header.html %}      
+    {% include toptitle.html %}
+    {% include tabs.html %}
 
-          <div id="on-this-page">
-            <div id="on-this-page-inner">
-              <h5>On this page</h5>
-              <div id="toc">
-                {{ page.document | tocify_asciidoc: 3 }}
-              </div>
-              <div id="tocbot">
-              </div>
-            </div>
-          </div>
-        </div>
+    <div id="container">
+      {% include mobile_nav.html %}
+      {% include nav.html %}
 
-        {% include legal.html %}
-        {% include footer.html %}
-        {% include search.html %}
-
-        <script async src="{{ site.baseurl }}/scripts/clipboard.min.js?ver={{ site.time | date: '%s' }}"></script>
-        <script async src="{{ site.baseurl }}/scripts/copy-to-clipboard.js?ver={{ site.time | date: '%s' }}"></script>
-      </div>
+      <section id="content">
+        <h1>{{ page.sub_title | markdownify | remove: '<p>' | remove: '</p>'}}</h1>
+        {{ content }}
+      </section>
     </div>
+
+    {% include copyright.html %} 
+    {% include footer.html %}  
+    {% include scripts.html %}
+    {% include search.html %}
+
   </body>
 </html>
diff --git a/jekyll-assets/css/asciidoctor-tabs.css b/jekyll-assets/css/asciidoctor-tabs.css
index eb9ac32efc..1afbd9185a 100644
--- a/jekyll-assets/css/asciidoctor-tabs.css
+++ b/jekyll-assets/css/asciidoctor-tabs.css
@@ -1,3 +1,4 @@
+
 /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */
 .tabs {
   margin-bottom: 1.25em;
@@ -15,7 +16,7 @@
 
 .tablist > ul li {
   align-items: center;
-  background-color: var(--bg);
+  background-color: #eee;
   cursor: pointer;
   display: flex;
   font-weight: bold;
@@ -51,26 +52,18 @@
   right: 0;
 }
 
-.tabs:not(.is-loading) .tablist .is-selected {
-  background-color: var(--tab-bg-colour);
-  color: var(--textcolor);
-  border-left: 1px solid var(--tab-bg-colour);
-  border-right: 1px solid var(--tab-bg-colour);
-  border-top: 1px solid var(--tab-bg-colour);
-}
-
 .tabs.is-loading .tablist li:not(:first-child),
 .tabs:not(.is-loading) .tablist li:not(.is-selected) {
-  background-color: var(--bg);
-  color: var(--subtle-text);
-  border-left: 1px solid var(--tab-bg-colour);
-  border-right: 1px solid var(--tab-bg-colour);
-  border-top: 1px solid var(--tab-bg-colour);
+  background-color: initial;
+  border-left: 1px solid #eee;
+  border-right: 1px solid #eee;
+  border-top: 1px solid #eee;
 }
 
 .tabs.is-loading .tablist li:first-child::after,
 .tabs:not(.is-loading) .tablist li.is-selected::after {
-  border-top: 2px solid var(--accent) !important;
+  background-color: #eee;
+  border-top: 2px solid var(--red);
 }
 
 /*
@@ -86,7 +79,7 @@
 }
 
 .tabpanel {
-  background-color: var(--tab-bg-colour);
+  background-color: #eee;
   padding: 1.25em;
 }
 
diff --git a/jekyll-assets/css/boxes.css b/jekyll-assets/css/boxes.css
new file mode 100644
index 0000000000..8d98497369
--- /dev/null
+++ b/jekyll-assets/css/boxes.css
@@ -0,0 +1,83 @@
+* {
+  box-sizing: border-box;
+}
+
+section#box-content {
+  display: flex;
+  flex-wrap: wrap;
+  flex-direction: row;
+  justify-content: center;
+  max-width: 1200px;
+}
+
+a.box {
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-start;
+  align-items: center;
+  height: 275px;
+  width: 350px;
+  text-decoration: none;
+  background-color: #fff;
+  padding: 30px 30px;
+  margin-left: 15px;
+  margin-right: 15px;
+  margin-bottom: 30px;
+}
+
+a.box[href*='/pico-sdk/'] span:not(.title) {
+  font-size: 0.8em;
+}
+
+a.box span {
+  color: #343434;
+  display: block;
+  text-align: center;
+}
+
+a.box span.title, 
+a.box[href*='/pico-sdk/'] span.title {
+  color: #000;
+  font-size: 1.1em;
+  font-weight: bold;
+  margin-bottom: 20px;
+}
+
+a.box img {
+  max-height: 121px;
+}
+
+div.toptitle {
+  padding-top: 130px;
+  padding-bottom: 30px;
+}
+
+div.toptitle.error-message h1 {
+  font-size: 6.0em;
+}
+
+div.subtitle.error-message p {
+  max-width: 400px;
+}
+
+div.subtitle.error-message p a {
+  color: #fff;
+}
+
+#container {
+  justify-content: center;
+}
+
+@media screen and (max-width: 1219px) {
+  p#release {
+    width: 800px;
+  }
+}
+
+@media screen and (max-width: 889px) {
+  p#release {
+    text-align: center;
+    padding-right: 0px;
+    width: 100%;
+  }
+}
diff --git a/jekyll-assets/css/search.svg b/jekyll-assets/css/search.svg
index 09e605db61..e25221997a 100644
--- a/jekyll-assets/css/search.svg
+++ b/jekyll-assets/css/search.svg
@@ -5,7 +5,7 @@
 	 viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
 <g id="search_3_">
 	<g>
-		<path fill="var(--subtle)" fill-rule="evenodd" clip-rule="evenodd" d="M19.56,17.44l-4.94-4.94C15.49,11.21,16,9.67,16,8c0-4.42-3.58-8-8-8S0,3.58,0,8
+		<path fill="#ffffff" fill-rule="evenodd" clip-rule="evenodd" d="M19.56,17.44l-4.94-4.94C15.49,11.21,16,9.67,16,8c0-4.42-3.58-8-8-8S0,3.58,0,8
 			s3.58,8,8,8c1.67,0,3.21-0.51,4.5-1.38l4.94,4.94C17.71,19.83,18.09,20,18.5,20c0.83,0,1.5-0.67,1.5-1.5
 			C20,18.09,19.83,17.71,19.56,17.44z M8,14c-3.31,0-6-2.69-6-6s2.69-6,6-6s6,2.69,6,6S11.31,14,8,14z"/>
 	</g>
diff --git a/jekyll-assets/css/style.css b/jekyll-assets/css/style.css
index 4fb17f80aa..6f123e9bae 100644
--- a/jekyll-assets/css/style.css
+++ b/jekyll-assets/css/style.css
@@ -1,105 +1,35 @@
 :root {
-  --bg: #000000;
-  --near-bg: #111;
-  --top-title-colour: #343434;
+  --red: #cd2355;
   --red-tint: #d75a64;
-  --brand-colour: #cd2355;
-  --code-bg-colour: #121212;
-  --code-bg-colour-transparent: rgba(18, 18, 18, 0.9);
-  --tab-bg-colour: #252535;
-  --toc-hover-colour: #353545;
-  --subtle: #707070;
-  --less-subtle: #333;
-  --home: #cd2355;
-  --rp2040-context-tag: #50C878;
-  --accent: #d75a64;
-  --docsearch-primary-color: var(--accent);
+  --docsearch-primary-color: var(--red);
   --docsearch-logo-color: var(--red-tint);
-  --copy-button-bg: #707070;
-  --copy-button-text: #CCC;
-  --textcolor: white;
-  --subtle-text: #CCC;
-  --theme-toggle-label: "☀️";
-  --not-expanded-label: "▶";
-
-  /* header and footer styling */
-  --rptl-header-background-color: var(--bg);
-  --rptl-header-border-bottom-color: var(--code-bg-colour);
-  --rptl-header-text-color: var(--textcolor);
-  --rptl-header-burger-stroke-color: var(--textcolor);
-  --rptl-header-subnav-background-color: var(--near-bg);
-  --rptl-header-logo-text-fill: var(--textcolor);
-  --rptl-header-logo-leaf-fill: var(--bg);
-  --rptl-header-logo-berry-fill: var(--bg);
-  --rptl-cookiebanner-background-color: var(--code-bg-colour);
-  --rptl-cookiebanner-text-color: var(--textcolor);
-  --rptl-footer-background-color: #13131B;
-  --rptl-footer-text-color: var(--subtle-text);
-
-  color: var(--textcolor);
-}
-.light {
-  --bg: #fff;
-  --near-bg: #f6f6f6;
-  --red-tint: #d75a64;
-  --top-title-colour: #343434;
-  --brand-colour: #cd2355;
-  --code-bg-colour: #f7f8fa;
-  --code-bg-colour-transparent: rgba(247, 248, 250, 0.9);
-  --tab-bg-colour: #eff1f6;
-  --toc-hover-colour: #fff;
-  --subtle: #707070;
-  --less-subtle: #333;
-  --home: #cd2355;
-  --rp2040-context-tag: #50C878;
-  --accent: #cd2355;
-  --docsearch-primary-color: var(--accent);
-  --docsearch-logo-color: var(--red-tint);
-  --copy-button-bg: #f6f6f6;
-  --copy-button-text: #444;
-  --textcolor: black;
-  --subtle-text: #444;
-  --theme-toggle-label: "🌙";
-  --not-expanded-label: "▶";
-
-  /* header and footer styling */
-  --rptl-header-background-color: var(--bg);
-  --rptl-header-border-bottom-color: #dedede;
-  --rptl-header-text-color: var(--textcolor);
-  --rptl-header-burger-stroke-color: var(--subtle);
-  --rptl-header-subnav-background-color: #f7f8fa;
-  --rptl-header-logo-text-fill: var(--textcolor);
-  --rptl-header-logo-leaf-fill: #46af4b;
-  --rptl-header-logo-berry-fill: var(--brand-colour);
-  --rptl-cookiebanner-background-color: var(--less-subtle);
-  --rptl-cookiebanner-text-color: var(--bg);
-  --rptl-footer-background-color: #f5f6f9;
-  --rptl-footer-text-color: var(--less-subtle);
-
-  color: var(--textcolor);
-
 }
 
+/* overrides for the old theme */
 body {
-  font-family: initial;
-  font-weight: initial;
-  background: transparent;
-  color: var(--textcolor);
-  font-size: initial;
-  line-height: initial;
-  margin: 0;
-  background-color: var(--bg);
+    font-family: initial;
+    font-weight: initial;
+    background: transparent;
+    color: initial;
+    font-size: initial;
+    line-height: initial;
+    margin: 0;
 }
 
 h1 {
-  width: auto;
-  min-height: auto;
-  margin: 0;
-  padding: 0;
-  font-size: initial;
-  line-height: initial;
-  color: initial;
-  background: transparent;
+    width: auto;
+    min-height: auto;
+    margin: 0;
+    padding: 0;
+    font-size: initial;
+    line-height: initial;
+    color: initial;
+    background: transparent;
+}
+/* end overrides */
+
+* {
+  box-sizing: border-box;
 }
 
 body, article, div, nav, h1, h2, h3, h4, p { 
@@ -109,8 +39,12 @@ body, article, div, nav, h1, h2, h3, h4, p {
   padding: 0;
 }
 
+body {
+  background-color: #f6f6f6;
+}
+
 a {
-  color: var(--accent);
+  color: var(--red);
   text-decoration: none;
 }
 
@@ -118,48 +52,36 @@ a:hover {
   text-decoration: underline;
 }
 
-code {
-  color: var(--textcolor);
-}
-
 .toptitle {
+  color: #fff;
   text-align: center;
-  position: sticky;
-  padding-bottom: 10px;
+  width: 100%;
+  background-color: #343434;
+  position: relative;
+  padding-top: 50px;
+  padding-bottom: 20px;
   margin-bottom: 0px;
-  top: 0;
-  z-index: 99;
-  background-color: var(--bg);
 }
 
 .toptitle h1 {
   font-size: 2.5em;
-  font-weight: lighter;
+  font-weight: normal;
   letter-spacing: 1px;
-  color: var(--bg);
+  color: #fff;
   position: relative;
   margin-top: 0px;
-  text-align: center;
-  margin-top: 10px;
-  margin-left: 10px;
-  flex-grow: 1;
-}
-
-.toptitle div {
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
 }
 
 .toptitle h1 a {
-  color: var(--textcolor);
   text-decoration: none;
+  color: #fff;
 }
 
 div.subtitle {
-  color: var(--bg);
-  background-color: var(--top-title-colour);
+  color: #fff;
+  background-color: #343434;
   padding-top: 0;
+  padding-bottom: 80px;
   text-align: center;
 }
 
@@ -170,460 +92,40 @@ div.subtitle p {
   margin-right: auto;
 }
 
-#docs-header {
-  padding: 10px;
-  display: flex;
-  padding: 5px;
-  align-items: center;
-}
-
-#docs-header a:hover {
-  color: var(--brand-colour);
-  text-decoration: none;
-  background-color: var(--toc-hover-colour);
-}
-
-#docs-header a {
-  font-size: 1.9em;
-  font-weight: 400;
-  color: var(--textcolor);
-  border-radius: 3px;
-}
-
-#docs-header-title {
-  flex-grow: 1;
-}
-
-#docs-header-title a {
-  width: 100%;
-  display: inline-block;
-  padding: 5px;
-}
-
 #docsearch .DocSearch-Button {
-  margin-top: 6px;
+  margin-top: 30px;
   margin-left: auto;
   margin-right: auto;
-  width: 100%;
-  border: 1px solid var(--accent);
-}
-
-#main-window {
-  display: flex;
-  justify-content: center;
-}
-
-/* boxes page, constrain search bar/theme toggle line to a reasonable size */
-body > .toptitle > #search-theme-toggle-container {
-  width: 50%;
-  margin: auto;
-  max-width: 900px;
 }
 
-body > .toptitle > #search-theme-toggle-container > #theme-toggle-container {
-  flex-grow: 0;
-}
-
-#docs-container {
+#container {
   position: relative;
-  flex-grow: 1;
-  white-space: initial;
-  word-break: break-word;
-  overflow: wrap;
-  padding-right: 0px;
-  margin-right: 0px;
-}
-
-#container .section {
-  display: flex;
-  flex-direction: column;
-  width: 100%;
-}
-
-#docs-content #container {
-  align-items: start;
-}
-
-#docs-content ul {
-  padding-left: 20px;
-}
-
-#docs-content ol {
-  padding-left: 20px;
-}
-
-#docs-content #toc-container-container {
-  flex-grow: 0;
-  flex-basis: 250px;
-  background-color: var(--code-bg-colour);
-  top: 0;
-  position: sticky;
-}
-
-#docs-content #toc-container-container #toc-container {
-  position: sticky;
-  top: 0;
-  flex-grow: 0;
-}
-
-h1 code {
-  color: var(--accent);
-}
-
-pre {
-  color: var(--textcolor);
-}
-
-#toc-container code {
-  color: var(--subtle-text);
-}
-
-#toc-container #docsearch {
-  margin-left: 5px;
-  margin-right: 5px;
-  padding-bottom: 5px;
-  align-content: center;
-}
-
-#theme-toggle {
-  border-radius: 3px;
-  padding: 5px;
-}
-
-#theme-toggle:hover {
-  background-color: var(--toc-hover-colour);
-  text-decoration: none;
-}
-
-#search-theme-toggle-container {
   display: flex;
   flex-direction: row;
-  gap: 20px;
-  align-items: center;
   justify-content: center;
+  margin: 100px 100px 0px 100px;
 }
 
-#theme-toggle-container {
-  align-self: center;
-  align-items: start;
-}
-
-#docsearch {
-  flex-grow: 1;
-}
-
-#search-theme-toggle-container #theme-toggle-container::after {
-  height: 100%;
-}
-
-#theme-toggle-header {
-  font-family: monospace;
-}
-
-#theme-toggle-header:after {
-  content: var(--theme-toggle-label);
-}
-
-#theme-toggle span {
-  display: none;
-}
-#theme-toggle:after {
-  content: var(--theme-toggle-label);
-}
-
-.toc-toggle-container {
-  display: flex;
-  align-items: center;
-  width: 100%;
-}
-
-.toc-item {
-  color: var(--accent);
-  border-radius: 3px;
-  padding: 5px;
-  display: flex;
-  align-items: center;
-  width: 100%;
-}
-
-.toc-item p {
-  color: var(--subtle-text);
-  padding-right: 5px;
-}
-
-.toc-item:hover {
-  color: var(--accent);
-  background-color: var(--toc-hover-colour);
-  text-decoration: none;
-}
-
-#toc-toggle-header {
-  font-family: monospace;
-  color: var(--accent);
-}
-
-input:checked + li span label div .toc-item::before {
-  transform: rotate(90deg);
-}
-
-.toc-item.no-dropdown::before {
-  transition: .1s ease-in;
-  content: '';
-  width: 13px;
-  height: 13px;
-  clip-path: polygon(0% 0%);
-}
-
-.bold {
-  font-weight: bold;
-}
-
-.toc-item span {
-  display: none;
-}
-
-.toc-item::before {
-  transition: .1s ease-in;
-  content: '';
-  background-color: var(--accent);
-  width: 13px;
-  height: 13px;
-  clip-path: polygon(0% 0%, 100% 50%, 0% 100%);
-}
-
-#docs-content {
-  display: flex;
-  justify-content: left;
-  height: 100%;
-  width: 100%;
-}
-
-#on-this-page {
-  align-self: flex-start; /* otherwise, uses the same height as all other flex items -- including content! */
-  position: sticky;
-  top: 0;
-  flex-shrink: 0;
-  margin-left: 3px;
-}
-
-#on-this-page-inner {
-  padding-top: 10px;
-  margin-left: 10px;
-  color: var(--subtle);
-}
-
-#on-this-page-inner h5 {
-  margin-bottom: 6px;
+#container nav#contents {
+  width: 300px;
+  max-width: 400px;
 }
 
-/* hide the non-tocbot non-interactive toctree from view -- just needed to generate tocbot version */
-#on-this-page-inner #toc {
+nav#mobile-contents {
   display: none;
 }
 
-.sectlevel1 {
-  flex-grow: 0;
-  margin-right: 10px;
+nav#contents {
   --offset: 1rem;
   align-self: start;
+  position: -webkit-sticky;
+  position: sticky;
   top: var(--offset);
-  overflow-x: clip;
-  padding-left: 5px;
-  padding-right: 0px;
-  margin: 0px;
-  list-style-type: none;
-  background-color: var(--code-bg-colour);
-}
-
-.sectlevel1 li span {
-  display: flex;
-  align-items: center;
-}
-
-.sectlevel1 li span label {
-  display: flex;
-  align-items: center;
-  width: 100%;
-}
-
-a.level1 p::before {
-  content ">"
-}
-
-a.level1 ~ a p {
-  color: var(--subtle-text);
-  border-radius: 3px;
-  padding-top: 3px;
-  padding-left: 2px;
-  padding-bottom: 3px;
-  margin-left: 5px;
-  margin-right: 5px;
-  width: 100%;
-}
-
-a.level2 ~ a p {
-  color: var(--subtle-text);
-  border-radius: 3px;
-  padding-top: 3px;
-  padding-left: 2px;
-  padding-bottom: 3px;
-  margin-left: 15px;
-  margin-right: 5px;
-  width: 100%;
-}
-
-a.level3 ~ a p {
-  color: var(--subtle-text);
-  border-radius: 3px;
-  padding-top: 3px;
-  padding-left: 2px;
-  padding-bottom: 3px;
-  margin-left: 25px;
-  margin-right: 5px;
-  width: 100%;
-}
-
-a.level4 ~ a p {
-  color: var(--subtle-text);
-  border-radius: 3px;
-  padding-top: 3px;
-  padding-left: 2px;
-  padding-bottom: 3px;
-  margin-left: 25px;
-  margin-right: 5px;
-  width: 100%;
-}
-
-a.level1:hover {
-  text-decoration: none;
-}
-
-a.level1:hover p {
-  color: var(--brand-colour);
-  background-color: var(--toc-hover-colour);
-  padding-left: 1px;
-}
-
-a.level1:hover p code {
-  color: var(--brand-colour) !important;
-}
-
-a.level2:hover {
-  text-decoration: none;
-}
-
-a.level2:hover p {
-  color: var(--brand-colour);
-  background-color: var(--toc-hover-colour);
-  padding-left: 3px;
-  text-decoration: none;
-}
-
-a.level2:hover p code {
-  color: var(--brand-colour) !important;
-}
-
-a.level3:hover {
-  text-decoration: none;
-}
-
-a.level3:hover p {
-  color: var(--brand-colour);
-  background-color: var(--toc-hover-colour);
-  padding-left: 3px;
-  text-decoration: none;
-}
-
-a.level3:hover p code {
-  color: var(--brand-colour) !important;
-}
-
-a.level4:hover {
-  text-decoration: none;
-}
-
-a.level4:hover p {
-  color: var(--brand-colour);
-  background-color: var(--toc-hover-colour);
-  padding-left: 3px;
-  text-decoration: none;
-}
-
-a.level4:hover p code {
-  color: var(--brand-colour) !important;
-}
-
-.sectlevel1 > li > ul {
-  list-style-type: none;
-  padding-left: 0px;
+  max-height: calc(100vh - var(--offset));
 }
 
-.sectlevel1 > li > ul > li > ul {
-  list-style-type: none;
-  padding-left: 0px;
-}
-
-li > a {
-  color: var(--subtle-text);
-}
-
-#container section#content {
-  flex-grow: 1;
-}
-
-nav#mobile-contents {
-  display: none;
-}
-
-#tocbot a.toc-link.node-name--H1 {
-  display: none;
-}
-
-#tocbot > * {
-  list-style-type: none;
-  color: var(--subtle-text);
-}
-
-.category-list-item {
-  list-style-type: none;
-  padding-left: 20px;
-  padding-top: 10px;
-}
-
-.category-list-item a {
-  color: var(--textcolor);
-}
-
-@media screen{
-  #tocbot > ul.toc-list{
-    margin-bottom: 0.5em;
-    margin-left: 0.125em
-  }
-  #tocbot ul.sectlevel0, #tocbot a.toc-link.node-name--H1 + ul {
-    padding-left: 0;
-  }
-  #tocbot a.toc-link{
-    height:100%;
-  }
-  .is-collapsible{
-    max-height:3000px;
-    overflow:hidden;
-  }
-  .is-collapsed{
-    max-height:0;
-  }
-  .is-active-link{
-    font-weight:700;
-  }
-}
-@media print{
-  #tocbot a.toc-link.node-name--H4{
-    display:none;
-  }
-}
-
-#high-toc a {
-  color: var(--subtle-text);
+nav#contents {
+  overflow-y: auto;
 }
 
 nav#mobile-contents {
@@ -638,10 +140,10 @@ nav#mobile-contents {
 nav#contents h2 {
   font-weight: bold;
   font-size: 0.95em;
-  color: var(--textcolor);
+  color: #343434;
   margin-right: 30px;
   margin-bottom: 15px;
-  border-bottom: 1px solid var(--top-title-colour);
+  border-bottom: 1px solid #343434;
 }
 
 nav#contents h3,
@@ -649,20 +151,28 @@ nav#mobile-contents h3 {
   font-weight: bold;
   font-size: 0.85em;
   line-height: 1.5rem;
-  color: var(--textcolor);
+  color: #343434;
   cursor: pointer;
 }
 
 nav#contents ul,
 nav#mobile-contents ul {
-  color: var(--textcolor);
+  color: #343434;
   list-style-type: none;
 }
 
+nav#contents ul.sectlevel1,
+nav#mobile-contents ul.sectlevel1,
+.tocify-item {
+  font-size: 0.85em;
+  padding-left: 20px;
+  height: auto;
+}
+
 nav#contents .itemcontents,
 nav#mobile-contents .contents-inner {
   height: auto;
-  transition: height .1s;
+  transition: height 1s;
 }
 
 nav#contents .itemcontents.hidden,
@@ -673,7 +183,7 @@ nav#mobile-contents .contents-inner.hidden {
 
 nav#contents a,
 nav#mobile-contents a {
-  color: var(--textcolor);
+  color: #343434;
   text-decoration: none;
 }
 
@@ -687,24 +197,33 @@ nav#mobile-contents li {
   margin-bottom: 15px;
 }
 
+nav#contents .tocify-item.active {
+  text-decoration: underline;
+}
+
+ul#tocify-header0,
+ul#tocify-header1 > li:first-of-type {
+  display: none;
+}
+
+ul#tocify-header1,
+ul#tocify-header1 > ul.tocify-subheader {
+  margin-left: 0;
+  padding-left: 0;
+}
+
 #content {
+  width: 70%;
   min-width: 600px;
   max-width: 900px;
-  width: 100%;
-  margin-left: 0px;
-  margin-right: 0px;
-  padding-bottom: 10vh;
-  padding-right: 0px;
-  padding-left: 19px;
-  flex-grow: 0;
+  margin-left: 50px;
 }
 
 #content h1 {
   font-weight: 700;
   font-size: 34px;
-  color: var(--accent);
-  margin-top: 16px;
-  margin-bottom: 20px;
+  color: var(--red);
+  margin-bottom: 40px;
   position: relative;
   margin-left: -1rem;
   padding-left: 1rem;
@@ -713,8 +232,8 @@ nav#mobile-contents li {
 #content h2 {
   font-weight: 700;
   font-size: 30px;
-  color: var(--textcolor);
-  margin-top: 20px;
+  color: #343434;
+  margin-top: 40px;
   margin-bottom: 15px;
   position: relative;
   margin-left: -1rem;
@@ -724,8 +243,8 @@ nav#mobile-contents li {
 #content h3 {
   font-weight: 700;
   font-size: 24px;
-  color: var(--textcolor);
-  margin-top: 20px;
+  color: #343434;
+  margin-top: 40px;
   margin-bottom: 15px;
   position: relative;
   margin-left: -1rem;
@@ -735,8 +254,8 @@ nav#mobile-contents li {
 #content h4 {
   font-weight: 700;
   font-size: 16px;
-  color: var(--textcolor);
-  margin-top: 20px;
+  color: #343434;
+  margin-top: 40px;
   margin-bottom: 15px;
   position: relative;
   margin-left: -1rem;
@@ -792,7 +311,7 @@ h3:hover .anchor,
 h4:hover .anchor, 
 h5:hover .anchor, 
 h6:hover .anchor {
-  color: var(--accent);
+  color: var(--red);
   visibility: visible;
 }
 
@@ -828,8 +347,6 @@ h6 .anchor::before {
 #content div.listingblock {
   margin-bottom: 15px;
   position: relative;
-  width: 99%;
-  overflow-x: scroll;
 }
 
 #content div.admonitionblock div.listingblock {
@@ -840,11 +357,9 @@ h6 .anchor::before {
   position: absolute;
   top: 1px;
   right: 1px;
-  border: 1px solid var(--copy-button-border);
+  border: 1px solid #d8d8d8;
   min-width: 27px;
   padding: 3px;
-  background-color: var(--copy-button-bg);
-  color: var(--copy-button-text);
 }
 
 #content div.listingblock button.copy-button.hidden,
@@ -870,8 +385,8 @@ h6 .anchor::before {
 }
 
 #content div.listingblock div.content {
-  color: var(--bg);
-  background-color: var(--code-bg-colour);
+  color: #fff;
+  background-color: #343434;
   padding: 7px 15px 7px;
   overflow-x: auto !important;
   border-radius: 3px;
@@ -903,8 +418,8 @@ td.mlabels-right {
 
 span.mlabel {
   display: inline-block;
-  background-color: var(--accent);
-  color: var(--bg);
+  background-color: var(--red);
+  color: #ffffff;
   padding: 3px;
   border-radius: 2px;
   font-size: 0.8em;
@@ -921,21 +436,20 @@ span.mlabel {
 
 #content table.tableblock {
   border-collapse: collapse;
-  border: 1px solid var(--subtle);
 }
 
 #content table.tableblock th {
   font-size: 0.85em;
-  background-color: var(--code-bg-colour);
+  background-color: #d8d8d8;
   text-align: left;
   padding: 5px 7px 5px 7px;
-  border: 1px solid var(--subtle);
+  border: 1px solid #343434;
 }
 
 #content td.tableblock {
   border-collapse: collapse;
   padding: 5px 7px 5px 7px;
-  border: 1px solid var(--subtle);
+  border: 1px solid #343434;
 }
 
 #content td.tableblock p {
@@ -974,7 +488,7 @@ span.mlabel {
 
 #content td.icon {
   font-weight: bold;
-  color: var(--top-title-colour);
+  color: #343434;
   vertical-align: top;
   padding-right: 10px;
 }
@@ -986,7 +500,7 @@ span.mlabel {
 #content p > code,
 td code {
   font-size: 1.1em;
-  background-color: var(--code-bg-colour);
+  background-color: #dedede;
   border-radius: 3px;
 }
 
@@ -1006,7 +520,6 @@ td div.listingblock div.content code {
 }
 
 div.imageblock div.title {
-  color: var(--subtle);
   font-style: italic;
   font-weight: 300;
   font-size: 0.8em;
@@ -1046,10 +559,6 @@ div.imageblock div.title {
   max-width: 250px;
 }
 
-div.admonitionblock .content {
-  background-color: var(--near-bg);
-}
-
 div.admonitionblock table {
   display: flex;
   width: 100%;
@@ -1065,12 +574,12 @@ div.admonitionblock tr {
 }
 
 div.admonitionblock td div.title {
-  color: var(--accent);
+  color: var(--red);
   text-transform: uppercase;
 }
 
 div.admonitionblock td.content {
-  border: 2px solid var(--accent);
+  border: 2px solid var(--red);
   padding: 10px;
   margin-top: 10px;
   width: 100%;
@@ -1105,8 +614,7 @@ div.videoblock iframe {
 
 .whitepaper .content,
 .tutorial .content {
-  background-color: var(--near-bg);
-  border: 2px solid var(--accent);
+  border: 2px solid var(--red);
   padding: 10px;
 }
 
@@ -1114,7 +622,7 @@ div.videoblock iframe {
   content: "White paper";
   text-transform: uppercase;
   display: block;
-  color: var(--accent);
+  color: var(--red);
   margin-bottom: 10px;
   font-weight: bold;
 }
@@ -1127,18 +635,19 @@ div.videoblock iframe {
 }
 
 .whitepaper .coverimage {
-  background-color: white;
+  background-color: #fff;
   background-repeat: no-repeat;
+  background-image: url(whitepaper_coverimage.png);
   background-size: 100px 170px;
   flex: 0 0 auto;
   margin-right: 10px;
   height: 170px;
   width: 100px;
-  border: 1px solid var(--accent);
+  border: 1px solid #cecece;
   text-align: right;
   padding: 20px 15px 15px;
   font-family: monospace;
-  color: var(--accent);
+  color: var(--red);
   font-size: 10px;
   cursor: pointer;
 }
@@ -1158,14 +667,14 @@ div.videoblock iframe {
 
 #content .tutorial div.paragraph.tutorialdescription p {
   font-style: italic;
-  color: var(--accent);
+  color: var(--red);
 }
 
 /* TUTORIAL SECTIONS */
 
 #content .tutorialcard {
   max-width: 400px;
-  border: 1px solid var(--code-bg-colour);
+  border: 1px solid #dedede;
   border-radius: 5px;
 }
 
@@ -1204,7 +713,7 @@ div.videoblock iframe {
   line-height: 1em;
   font-weight: bold;
   background-color: orange;
-  color: var(--bg);
+  color: #ffffff;
   border-radius: 0.5em;
   padding-left: 0.5em;
   padding-right: 0.5em;
@@ -1213,7 +722,7 @@ div.videoblock iframe {
 }
 
 .contexttag.RP2040 {
-  background-color: var(--rp2040-context-tag);
+  background-color: #50C878;
 }
 
 div.listingblock pre.highlight {
@@ -1246,7 +755,7 @@ div.listingblock pre.highlight {
 /* OLD DOXYGEN ELEMENTS */
 
 div.memproto {
-  background-color: var(--code-bg-colour);
+  background-color: #dedede;
   padding: 7px;
   margin-bottom: 15px;
   position: relative;
@@ -1314,15 +823,13 @@ span.obfuscator {
 /* LEGAL */
 
 div.legal {
-  padding-left: 5%;
-  padding-right: 5%;
-  padding-top: 10px;
-  display: grid;
+  margin: 60px auto 0 auto;
+  max-width: 1200px;
+  display: flex;
   align-items: center;
   justify-content: center;
-  background-color: var(--rptl-footer-background-color);
-  width: 100%;
-  font-size: .7em;
+  flex-direction: column;
+  padding-bottom: 40px;
 }
 
 div.legal + div.legal {
@@ -1330,14 +837,9 @@ div.legal + div.legal {
 }
 
 div.legal-inner {
-  color: var(--subtle);
   width: 100%;
 }
 
-.legal-inner p {
-  padding-top: 10px;
-}
-
 div.contribute {
   margin: 60px auto 0 auto;
   max-width: 1200px;
@@ -1356,209 +858,134 @@ div.contribute-inner {
   width: 100%;
 }
 
+
+
 p#copyright {
   font-family: 'Roboto', sans-serif;
   font-weight: 300;
   font-size: 0.85em;
-  color: var(--subtle);
-  text-align: left;
-  padding-bottom: 10px;
+  color: #707070;
 }
 
 footer {
   margin-top: 30px;
 }
 
+.c-footer-social__link--facebook {
+    background-image: url(https://www.raspberrypi.com/app/themes/mind-control/images/application/footer/social/facebook.svg);
+}
+.c-footer-social__link--twitter {
+    background-image: url(https://www.raspberrypi.com/app/themes/mind-control/images/application/footer/social/twitter.svg);
+}
+.c-footer-social__link--instagram {
+    background-image: url(https://www.raspberrypi.com/app/themes/mind-control/images/application/footer/social/instagram.svg);
+}
+.c-footer-social__link--youtube {
+    background-image: url(https://www.raspberrypi.com/app/themes/mind-control/images/application/footer/social/youtube.svg);
+}
+
 @media screen and (max-width: 1350px) {
   div.contribute {
     padding-left: 50px;
     padding-right: 50px;
-    width: 100%;
   }
 
   .legal {
     padding-left: 50px;
     padding-right: 50px;
-    width: 100%;
   }
 }
 
-/* mobile menu controls and display */
-
-.mobile-menu-toggle {
-  display: none;
-}
-
-#mobile-toggle {
-  display:none;
-}
-
-.toc-toggle-box {
-  display:none;
-}
-
-input:checked + li ~ .itemcontents {
-  visibility: visible;
-  opacity: 1;
-  height: auto;
-}
-
-/* hide all sub-categories when top level collapses */
-input:not(:checked) ~ li ~ .itemcontents .sectlevel1 {
-  visibility: hidden !important;
-  height: 0;
-}
-
-.itemcontents {
-  visibility: hidden;
-  opacity: 0;
-  height: 0;
-}
-
-.toc {
-  overflow-y: scroll;
-  height: 90vh;
-  background-color: var(--code-bg-colour);
-  max-width: 25vw;
-}
-
-#toc-inner {
-  top: 0;
-  position: sticky;
-  background-color: var(--code-bg-colour);
-  z-index: 102;
-  box-shadow: var(--code-bg-colour-transparent) 0px 10px 15px -5px, var(--code-bg-colour-transparent) 0px 10px 10px -5px;
-}
-
 @media screen and (max-width: 1200px) {
- #content {
-  max-width: 73vw;
- }
-}
-
-@media screen and (max-width: 1024px) {
-  /* docs header always takes up space at page top for mobile screens
-  -- anchors should scroll down a little extra to accommodate */
-  :target::before {
-    content: "";
-    display: block;
-    height: 60px;
-    margin -60px 0 0;
-  }
-
-  /* when the mobile menu is visible, hide all page content so we don't end up with dueling scrollbars */
-  #mobile-toggle:checked ~ #docs-content #docs-container {
-    overflow: hidden;
-  }
-
-  /* when the mobile menu is visible, hide all page content so we don't end up with dueling scrollbars */
-  #mobile-toggle:checked ~ #__rptl-header {
-    display: none;
-  }
-
-  /* make the docs search button slightly less aggressively large */
-  #docsearch .DocSearch-Button {
-    max-width: 50%;
-    float: right;
-  }
-
-  /* no need for box shadow in mobile mode */
-  #toc-inner {
-    box-shadow: var(--code-bg-colour-transparent) 0px;
-  }
-
-  #mobile-toggle:checked ~ .legal {
-    visibility: hidden;
-    height: 0;
-  }
-
-  #mobile-toggle:checked ~ #__rptl-footer {
-    visibility: hidden;
-    height: 0;
+  #content {
+    width: 625px;
   }
+}
 
-  #mobile-toggle:checked ~ #docs-content .toc {
-    height: 100vh;
-    max-width: 100vw;
+@media screen and (max-width: 1149px) {
+  #container {
+    margin-left: 50px;
+    margin-right: 50px;
   }
+}
 
+@media screen and (max-width: 1024px) {
   #container {
     justify-content: center;
     flex-wrap: wrap;
-    margin-left: 3px;
-  }
-
-  .mobile-menu-toggle {
-    font-size: 3em;
-    display: block;
-    padding-left: 5px;
-    padding-right: 5px;
-  }
-
-  .toc {
-    height: auto;
-  }
-
-  .mobile-menu-toggle div {
-    transform: translateY(-3px);
-  }
-
-  .mobile-menu-toggle:hover {
-    color: var(--brand-colour);
-    text-decoration: none;
-    background-color: var(--toc-hover-colour);
+    margin-top: 50px;
   }
 
-  #mobile-toggle:not(:checked) ~ #docs-content .toc {
+  #container nav#contents {
     display: none;
   }
 
-  .itemcontents {
-    background-color: var(--near-bg);
+  nav#mobile-contents {
+    display: block;
   }
 
-  #docs-container {
-    max-width: 100vw;
+  nav#mobile-contents h2 {
+    font-size: 18px;
+    text-align: center;
+    font-weight: bold;
+    color: #343434;
+    margin-bottom: 15px;
   }
 
-  #docs-content {
+  nav#mobile-contents div.mobile-contents-menu {
+    display: flex;
     flex-direction: column;
+    align-items: center;
+    width: 30px;
+    margin-left: auto;
+    margin-right: auto;
   }
 
-  #content {
-    padding: 5px;
+  nav#mobile-contents span.mobile-contents-line {
+    width: 100%;
+    inline-size: 100%;
+    height: 4px;
+    block-size: 4px;
+    margin-bottom: 7px;
+    background-color: #000;
+    border-radius: 4px;
+    content: " ";
+    display: block;
+    transform-origin: left center;
+    transition-duration: .15s;
+    transition-property: background-color,opacity,transform;
+    transition-timing-function: cubic-bezier(.68,-.55,.265,1.55);
+    will-change: background-color,opacity,transform;
   }
 
-  #toc-container-container {
-    top: 0;
-    position: sticky;
-    background-color: var(--code-bg-colour);
-    z-index: 100;
-    max-height: 50px;
+  nav#mobile-contents.active span.mobile-contents-line {
+    opacity: 0;
   }
 
-  #docs-header {
-    position: relative;
+  nav#mobile-contents.active span.mobile-contents-line:first-child,
+  nav#mobile-contents.active span.mobile-contents-line:last-child {
+    opacity: 1;
+    width: 104%;
   }
 
-  #docs-header-title {
-    display: none;
+  nav#mobile-contents.active span.mobile-contents-line:first-child {
+    transform: rotate(45deg);
   }
 
-  #toc-inner {
-    display: flex;
+  nav#mobile-contents.active span.mobile-contents-line:last-child {
+    transform: rotate(-45deg);
   }
 
-  #docsearch {
-    flex-grow: 3;
+  nav#mobile-contents .contents-inner {
+    margin-top: 20px;
   }
 
-  #__rptl-header {
-    position: relative;
+  nav#mobile-contents .contents-inner.hidden {
+    margin-top: 0px;
   }
 
   #content {
-    max-width: 100%;
+    width: 100%;
     min-width: auto;
     margin-left: 0px;
   }
@@ -1590,6 +1017,8 @@ input:not(:checked) ~ li ~ .itemcontents .sectlevel1 {
     margin-left: 0px;
   }
   #container {
+    margin-left: 25px;
+    margin-right: 25px;
   }
 }
 
@@ -1619,154 +1048,3 @@ input:not(:checked) ~ li ~ .itemcontents .sectlevel1 {
     word-break: break-all;
   }
 }
-
-/* tab landing page boxes */
-
-* {
-  box-sizing: border-box;
-}
-
-section#box-content {
-  display: flex;
-  flex-wrap: wrap;
-  flex-direction: row;
-  justify-content: center;
-  max-width: 1200px;
-  padding-top: 30px;
-}
-
-a.box {
-  display: flex;
-  flex-direction: column;
-  justify-content: flex-start;
-  align-items: center;
-  height: 275px;
-  width: 350px;
-  text-decoration: none;
-  background-color: var(--code-bg-colour);
-  padding: 30px 30px;
-  margin-left: 15px;
-  margin-right: 15px;
-  margin-bottom: 30px;
-}
-
-a.box[href*='/pico-sdk/'] span:not(.title) {
-  font-size: 0.8em;
-}
-
-a.box span {
-  color: var(--textcolor);
-  display: block;
-  text-align: center;
-}
-
-a.box span.title, 
-a.box[href*='/pico-sdk/'] span.title {
-  color: var(--textcolor);
-  font-size: 1.1em;
-  font-weight: bold;
-  margin-bottom: 20px;
-}
-
-a.box img {
-  max-height: 121px;
-}
-
-div.toptitle.error-message h1 {
-  font-size: 6.0em;
-}
-
-div.subtitle.error-message p {
-  max-width: 400px;
-}
-
-div.subtitle.error-message p a {
-  color: var(--bg);
-}
-
-#container {
-  display: flex;
-  justify-content: center;
-  margin-right: 10px;
-  margin-left: 10px;
-  white-space: initial;
-  word-break: break-word;
-}
-
-@media screen and (max-width: 1460px) {
-  /* hide on this page if screen is too small to fit it */
-  #on-this-page {
-    display: none;
-  }
-}
-
-/* documentation category tabs */
-
-* {
-  box-sizing: border-box;
-}
-
-div#tab-menu {
-  width: 100%;
-  height: 80px;
-  margin-bottom: -28px;
-}
-
-ul#tab-container {
-  display: flex;
-  gap: 5px;
-  /* Set a maximum width to match the rest of the site and centre it horizontally. */
-  max-width: 1300px;
-  margin-left: auto;
-  margin-right: auto;
-  list-style-type: none;
-  margin-bottom: 15px;
-  margin-top: 15px;
-  padding-left: 0;
-  text-align: center;
-}
-
-ul#tab-container li {
-  /* Tell all tabs to be the same width and to grow and shrink as needed. */
-  flex: 1 1 0%;
-  border-bottom: 4px solid var(--bg);
-  padding-top: 10px;
-  padding-bottom: 5px;
-  text-align: center;
-  font-size: 20px;
-}
-
-ul#tab-container li.selected {
-  border-bottom-color: var(--accent);
-}
-
-ul#tab-container li a {
-  font-size: 19px;
-  font-weight: bold;
-  color: var(--subtle);
-  vertical-align: middle;
-  text-decoration: none;
-}
-
-ul#tab-container li.selected a {
-  color: var(--accent);
-}
-
-@media screen and (max-width: 1219px) {
-  ul#tab-container li {
-    width: 200px;
-  }
-}
-
-@media screen and (max-width: 912px) {
-  div#tab-menu {
-    height: auto;
-  }
-  ul#tab-container {
-    display: block;
-  }
-  ul#tab-container li {
-    display: block;
-    width: 100%;
-  }
-}
\ No newline at end of file
diff --git a/jekyll-assets/css/syntax-highlighting.css b/jekyll-assets/css/syntax-highlighting.css
index 4be9c404d7..7a47fc7c54 100644
--- a/jekyll-assets/css/syntax-highlighting.css
+++ b/jekyll-assets/css/syntax-highlighting.css
@@ -2,25 +2,25 @@
 .highlight .hll { background-color: #404040 }
 .highlight .c { color: #999999; font-style: italic } /* Comment */
 .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
-.highlight .g { color: var(--textcolor) } /* Generic */
+.highlight .g { color: #d0d0d0 } /* Generic */
 .highlight .k { color: #6ab825; font-weight: bold } /* Keyword */
-.highlight .l { color: var(--textcolor) } /* Literal */
-.highlight .n { color: var(--textcolor) } /* Name */
-.highlight .o { color: var(--textcolor) } /* Operator */
-.highlight .x { color: var(--textcolor) } /* Other */
-.highlight .p { color: var(--textcolor) } /* Punctuation */
+.highlight .l { color: #d0d0d0 } /* Literal */
+.highlight .n { color: #d0d0d0 } /* Name */
+.highlight .o { color: #d0d0d0 } /* Operator */
+.highlight .x { color: #d0d0d0 } /* Other */
+.highlight .p { color: #d0d0d0 } /* Punctuation */
 .highlight .cm { color: #999999; font-style: italic } /* Comment.Multiline */
 .highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
 .highlight .c1 { color: #999999; font-style: italic } /* Comment.Single */
 .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
 .highlight .gd { color: #d22323 } /* Generic.Deleted */
-.highlight .ge { color: var(--textcolor); font-style: italic } /* Generic.Emph */
+.highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
 .highlight .gr { color: #d22323 } /* Generic.Error */
 .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
 .highlight .gi { color: #589819 } /* Generic.Inserted */
-.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .go { color: #cccccc } /* Generic.Output */
 .highlight .gp { color: #aaaaaa } /* Generic.Prompt */
-.highlight .gs { color: var(--textcolor); font-weight: bold } /* Generic.Strong */
+.highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
 .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
 .highlight .gt { color: #d22323 } /* Generic.Traceback */
 .highlight .kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */
@@ -29,23 +29,23 @@
 .highlight .kp { color: #6ab825 } /* Keyword.Pseudo */
 .highlight .kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */
 .highlight .kt { color: #6ab825; font-weight: bold } /* Keyword.Type */
-.highlight .ld { color: var(--textcolor) } /* Literal.Date */
+.highlight .ld { color: #d0d0d0 } /* Literal.Date */
 .highlight .m { color: #3677a9 } /* Literal.Number */
 .highlight .s { color: #ed9d13 } /* Literal.String */
 .highlight .na { color: #bbbbbb } /* Name.Attribute */
-.highlight .nb { color: var(--brand-colour) } /* Name.Builtin */
+.highlight .nb { color: #24909d } /* Name.Builtin */
 .highlight .nc { color: #447fcf; text-decoration: underline } /* Name.Class */
-.highlight .no { color: #40aaaa } /* Name.Constant */
+.highlight .no { color: #40ffff } /* Name.Constant */
 .highlight .nd { color: #ffa500 } /* Name.Decorator */
-.highlight .ni { color: var(--textcolor) } /* Name.Entity */
+.highlight .ni { color: #d0d0d0 } /* Name.Entity */
 .highlight .ne { color: #bbbbbb } /* Name.Exception */
 .highlight .nf { color: #447fcf } /* Name.Function */
-.highlight .nl { color: var(--textcolor) } /* Name.Label */
+.highlight .nl { color: #d0d0d0 } /* Name.Label */
 .highlight .nn { color: #447fcf; text-decoration: underline } /* Name.Namespace */
-.highlight .nx { color: var(--textcolor) } /* Name.Other */
-.highlight .py { color: var(--textcolor) } /* Name.Property */
+.highlight .nx { color: #d0d0d0 } /* Name.Other */
+.highlight .py { color: #d0d0d0 } /* Name.Property */
 .highlight .nt { color: #6ab825; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #40aaaa } /* Name.Variable */
+.highlight .nv { color: #40ffff } /* Name.Variable */
 .highlight .ow { color: #6ab825; font-weight: bold } /* Operator.Word */
 .highlight .w { color: #666666 } /* Text.Whitespace */
 .highlight .mf { color: #3677a9 } /* Literal.Number.Float */
@@ -64,9 +64,9 @@
 .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
 .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
 .highlight .bp { color: #24909d } /* Name.Builtin.Pseudo */
-.highlight .vc { color: #40aaaa } /* Name.Variable.Class */
-.highlight .vg { color: #40aaaa } /* Name.Variable.Global */
-.highlight .vi { color: #40aaaa } /* Name.Variable.Instance */
+.highlight .vc { color: #40ffff } /* Name.Variable.Class */
+.highlight .vg { color: #40ffff } /* Name.Variable.Global */
+.highlight .vi { color: #40ffff } /* Name.Variable.Instance */
 .highlight .il { color: #3677a9 } /* Literal.Number.Integer.Long */
 
 .highlight .gp, .highlight .gp + .w {
diff --git a/jekyll-assets/css/tabs.css b/jekyll-assets/css/tabs.css
new file mode 100644
index 0000000000..b1880c02a6
--- /dev/null
+++ b/jekyll-assets/css/tabs.css
@@ -0,0 +1,82 @@
+* {
+  box-sizing: border-box;
+}
+
+div#tab-menu {
+  width: 100%;
+  height: 80px;
+  padding-top: 5px;
+  margin-top: 20px;
+}
+
+ul#tab-container {
+  display: flex;
+  gap: 5px;
+  /* Set a maximum width to match the rest of the site and centre it horizontally. */
+  max-width: 1300px;
+  margin-left: auto;
+  margin-right: auto;
+  list-style-type: none;
+  margin-bottom: 0;
+  padding-left: 0;
+  text-align: center;
+}
+
+ul#tab-container li {
+  /* Tell all tabs to be the same width and to grow and shrink as needed. */
+  flex: 1 1 0%;
+  border-bottom: 4px solid #fff;
+  padding-top: 20px;
+  padding-bottom: 12px;
+  text-align: center;
+  font-size: 20px;
+}
+
+ul#tab-container li.selected {
+  border-bottom-color: var(--red);
+}
+
+ul#tab-container li a {
+  font-size: 19px;
+  font-weight: bold;
+  color: #888888;
+  vertical-align: middle;
+  text-decoration: none;
+}
+
+ul#tab-container li.selected a {
+  color: #343434;
+}
+
+p#release {
+  text-align: right;
+  padding-top: 10px;
+  color: #888888;
+  font-size: 0.9em;
+  width: 1200px;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+p#release + #container {
+  margin-top: 75px;
+}
+
+@media screen and (max-width: 1219px) {
+  ul#tab-container li {
+    width: 200px;
+  }
+}
+
+@media screen and (max-width: 912px) {
+  div#tab-menu {
+    height: auto;
+  }
+  ul#tab-container {
+    display: block;
+  }
+  ul#tab-container li {
+    display: block;
+    width: 100%;
+  }
+}
\ No newline at end of file
diff --git a/jekyll-assets/css/tocbot.css b/jekyll-assets/css/tocbot.css
deleted file mode 100644
index 45be334aaa..0000000000
--- a/jekyll-assets/css/tocbot.css
+++ /dev/null
@@ -1,67 +0,0 @@
-.toc {
-	/*overflow-y: auto*/
-}
-
-.toc>.toc-list {
-	overflow: hidden;
-	position: relative;
-}
-
-.toc>.toc-list li {
-  list-style-type: none;
-}
-
-.toc-list-item {	
-  list-style-type: none;
-}
-
-.toc-list {
-	margin: 0;
-	padding-left: 10px;
-}
-
-a.toc-link {
-	color: var(--subtle-text);
-	height: 100%;
-	line-height: 2em;
-}
-
-.is-collapsible {
-	max-height: 1000px;
-	overflow: hidden;
-	transition: all 100ms ease-in-out;
-}
-
-.is-collapsed {
-	max-height: 0;
-}
-
-.is-position-fixed {
-	position: fixed !important;
-	top: 0;
-}
-
-.is-active-link {
-	font-weight: 700;
-}
-
-.toc-link::before {
-	background-color: var(--bg-colour);
-	content: " ";
-	display: inline-block;
-	height: inherit;
-	left: 0;
-	position: absolute;
-	width: 3px;
-}
-
-.is-active-link::before {
-	width: 3px;
-	height: 2em;
-	background-color: var(--brand-colour);
-}
-
-.js-toc {
-	font-size: .8em;
-	width: 200px;
-}
\ No newline at end of file
diff --git a/jekyll-assets/css/whitepaper_coverimage.png b/jekyll-assets/css/whitepaper_coverimage.png
new file mode 100644
index 0000000000000000000000000000000000000000..eca25ee376072f2643ea5297df9013cd04823a69
GIT binary patch
diff --git a/jekyll-assets/favicon.ico b/jekyll-assets/favicon.ico
deleted file mode 100644
index 52d2f3050f203a04a73fd06665d023aa6a0a2f8b..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/jekyll-assets/scripts/jquery-1.12.4.min.js b/jekyll-assets/scripts/jquery-1.12.4.min.js
new file mode 100644
index 0000000000..e836475870
--- /dev/null
+++ b/jekyll-assets/scripts/jquery-1.12.4.min.js
@@ -0,0 +1,5 @@
+/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
+}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
+marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
+padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
diff --git a/jekyll-assets/scripts/jquery-ui-1.13.0.custom.min.js b/jekyll-assets/scripts/jquery-ui-1.13.0.custom.min.js
new file mode 100644
index 0000000000..84ff0cb2b5
--- /dev/null
+++ b/jekyll-assets/scripts/jquery-ui-1.13.0.custom.min.js
@@ -0,0 +1,6 @@
+/*! jQuery UI - v1.13.0 - 2021-12-15
+* http://jqueryui.com
+* Includes: widget.js, jquery-patch.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(l){"use strict";l.ui=l.ui||{};l.ui.version="1.13.0";var s,i=0,r=Array.prototype.hasOwnProperty,a=Array.prototype.slice;l.cleanData=(s=l.cleanData,function(t){for(var e,i,n=0;null!=(i=t[n]);n++)(e=l._data(i,"events"))&&e.remove&&l(i).triggerHandler("remove");s(t)}),l.widget=function(t,i,e){var n,s,o,r={},a=t.split(".")[0],u=a+"-"+(t=t.split(".")[1]);return e||(e=i,i=l.Widget),Array.isArray(e)&&(e=l.extend.apply(null,[{}].concat(e))),l.expr.pseudos[u.toLowerCase()]=function(t){return!!l.data(t,u)},l[a]=l[a]||{},n=l[a][t],s=l[a][t]=function(t,e){if(!this._createWidget)return new s(t,e);arguments.length&&this._createWidget(t,e)},l.extend(s,n,{version:e.version,_proto:l.extend({},e),_childConstructors:[]}),(o=new i).options=l.widget.extend({},o.options),l.each(e,function(e,n){function s(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}r[e]="function"==typeof n?function(){var t,e=this._super,i=this._superApply;return this._super=s,this._superApply=o,t=n.apply(this,arguments),this._super=e,this._superApply=i,t}:n}),s.prototype=l.widget.extend(o,{widgetEventPrefix:n&&o.widgetEventPrefix||t},r,{constructor:s,namespace:a,widgetName:t,widgetFullName:u}),n?(l.each(n._childConstructors,function(t,e){var i=e.prototype;l.widget(i.namespace+"."+i.widgetName,s,e._proto)}),delete n._childConstructors):i._childConstructors.push(s),l.widget.bridge(t,s),s},l.widget.extend=function(t){for(var e,i,n=a.call(arguments,1),s=0,o=n.length;s<o;s++)for(e in n[s])i=n[s][e],r.call(n[s],e)&&void 0!==i&&(l.isPlainObject(i)?t[e]=l.isPlainObject(t[e])?l.widget.extend({},t[e],i):l.widget.extend({},i):t[e]=i);return t},l.widget.bridge=function(o,e){var r=e.prototype.widgetFullName||o;l.fn[o]=function(i){var t="string"==typeof i,n=a.call(arguments,1),s=this;return t?this.length||"instance"!==i?this.each(function(){var t,e=l.data(this,r);return"instance"===i?(s=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?l.error("no such method '"+i+"' for "+o+" widget instance"):(t=e[i].apply(e,n))!==e&&void 0!==t?(s=t&&t.jquery?s.pushStack(t.get()):t,!1):void 0:l.error("cannot call methods on "+o+" prior to initialization; attempted to call method '"+i+"'")}):s=void 0:(n.length&&(i=l.widget.extend.apply(null,[i].concat(n))),this.each(function(){var t=l.data(this,r);t?(t.option(i||{}),t._init&&t._init()):l.data(this,r,new e(i,this))})),s}},l.Widget=function(){},l.Widget._childConstructors=[],l.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=l(e||this.defaultElement||this)[0],this.element=l(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=l(),this.hoverable=l(),this.focusable=l(),this.classesElementLookup={},e!==this&&(l.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=l(e.style?e.ownerDocument:e.document||e),this.window=l(this.document[0].defaultView||this.document[0].parentWindow)),this.options=l.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:l.noop,_create:l.noop,_init:l.noop,destroy:function(){var i=this;this._destroy(),l.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:l.noop,widget:function(){return this.element},option:function(t,e){var i,n,s,o=t;if(0===arguments.length)return l.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(n=o[t]=l.widget.extend({},this.options[t]),s=0;s<i.length-1;s++)n[i[s]]=n[i[s]]||{},n=n[i[s]];if(t=i.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,n;for(e in t)n=this.classesElementLookup[e],t[e]!==this.options.classes[e]&&n&&n.length&&(i=l(n.get()),this._removeClass(n,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(s){var o=[],r=this;function t(t,e){for(var i,n=0;n<t.length;n++)i=r.classesElementLookup[t[n]]||l(),i=s.add?(s.element.each(function(t,e){l.map(r.classesElementLookup,function(t){return t}).some(function(t){return t.is(e)})||r._on(l(e),{remove:"_untrackClassesElement"})}),l(l.uniqueSort(i.get().concat(s.element.get())))):l(i.not(s.element).get()),r.classesElementLookup[t[n]]=i,o.push(t[n]),e&&s.classes[t[n]]&&o.push(s.classes[t[n]])}return(s=l.extend({element:this.element,classes:this.options.classes||{}},s)).keys&&t(s.keys.match(/\S+/g)||[],!0),s.extra&&t(s.extra.match(/\S+/g)||[]),o.join(" ")},_untrackClassesElement:function(i){var n=this;l.each(n.classesElementLookup,function(t,e){-1!==l.inArray(i.target,e)&&(n.classesElementLookup[t]=l(e.not(i.target).get()))}),this._off(l(i.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,n){var s="string"==typeof t||null===t,i={extra:s?e:i,keys:s?t:e,element:s?this.element:t,add:n="boolean"==typeof n?n:i};return i.element.toggleClass(this._classes(i),n),this},_on:function(s,o,t){var r,a=this;"boolean"!=typeof s&&(t=o,o=s,s=!1),t?(o=r=l(o),this.bindings=this.bindings.add(o)):(t=o,o=this.element,r=this.widget()),l.each(t,function(t,e){function i(){if(s||!0!==a.options.disabled&&!l(this).hasClass("ui-state-disabled"))return("string"==typeof e?a[e]:e).apply(a,arguments)}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||l.guid++);var n=t.match(/^([\w:-]*)\s*(.*)$/),t=n[1]+a.eventNamespace,n=n[2];n?r.on(t,n,i):o.on(t,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.off(e),this.bindings=l(this.bindings.not(t).get()),this.focusable=l(this.focusable.not(t).get()),this.hoverable=l(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(l(t.currentTarget),null,"ui-state-hover")},mouseleave:function(t){this._removeClass(l(t.currentTarget),null,"ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(l(t.currentTarget),null,"ui-state-focus")},focusout:function(t){this._removeClass(l(t.currentTarget),null,"ui-state-focus")}})},_trigger:function(t,e,i){var n,s,o=this.options[t];if(i=i||{},(e=l.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],s=e.originalEvent)for(n in s)n in e||(e[n]=s[n]);return this.element.trigger(e,i),!("function"==typeof o&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},l.each({show:"fadeIn",hide:"fadeOut"},function(o,r){l.Widget.prototype["_"+o]=function(e,t,i){var n,s=(t="string"==typeof t?{effect:t}:t)?!0!==t&&"number"!=typeof t&&t.effect||r:o;"number"==typeof(t=t||{})?t={duration:t}:!0===t&&(t={}),n=!l.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),n&&l.effects&&l.effects.effect[s]?e[o](t):s!==o&&e[s]?e[s](t.duration,t.easing,i):e.queue(function(t){l(this)[o](),i&&i.call(e[0]),t()})}});var e,n;l.widget;l.expr.pseudos||(l.expr.pseudos=l.expr[":"]),l.uniqueSort||(l.uniqueSort=l.unique),l.escapeSelector||(e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,n=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},l.escapeSelector=function(t){return(t+"").replace(e,n)}),l.fn.even&&l.fn.odd||l.fn.extend({even:function(){return this.filter(function(t){return t%2==0})},odd:function(){return this.filter(function(t){return t%2==1})}})});
\ No newline at end of file
diff --git a/jekyll-assets/scripts/jquery.tocify.js b/jekyll-assets/scripts/jquery.tocify.js
new file mode 100644
index 0000000000..5f6d4605ac
--- /dev/null
+++ b/jekyll-assets/scripts/jquery.tocify.js
@@ -0,0 +1,984 @@
+/* jquery Tocify - v1.9.0 - 2013-10-01
+* http://www.gregfranko.com/jquery.tocify.js/
+* Copyright (c) 2013 Greg Franko; Licensed MIT */
+
+// Immediately-Invoked Function Expression (IIFE) [Ben Alman Blog Post](http://benalman.com/news/2010/11/immediately-invoked-function-expression/) that calls another IIFE that contains all of the plugin logic.  I used this pattern so that anyone viewing this code would not have to scroll to the bottom of the page to view the local parameters that were passed to the main IIFE.
+(function(tocify) {
+
+    // ECMAScript 5 Strict Mode: [John Resig Blog Post](http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/)
+    "use strict";
+
+    // Calls the second IIFE and locally passes in the global jQuery, window, and document objects
+    tocify(window.jQuery, window, document);
+
+}
+
+// Locally passes in `jQuery`, the `window` object, the `document` object, and an `undefined` variable.  The `jQuery`, `window` and `document` objects are passed in locally, to improve performance, since javascript first searches for a variable match within the local variables set before searching the global variables set.  All of the global variables are also passed in locally to be minifier friendly. `undefined` can be passed in locally, because it is not a reserved word in JavaScript.
+(function($, window, document, undefined) {
+
+    // ECMAScript 5 Strict Mode: [John Resig Blog Post](http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/)
+    "use strict";
+
+    var tocClassName = "tocify",
+        tocClass = "." + tocClassName,
+        tocFocusClassName = "tocify-focus",
+        tocHoverClassName = "tocify-hover",
+        hideTocClassName = "tocify-hide",
+        hideTocClass = "." + hideTocClassName,
+        headerClassName = "tocify-header",
+        headerClass = "." + headerClassName,
+        subheaderClassName = "tocify-subheader",
+        subheaderClass = "." + subheaderClassName,
+        itemClassName = "tocify-item",
+        itemClass = "." + itemClassName,
+        extendPageClassName = "tocify-extend-page",
+        extendPageClass = "." + extendPageClassName;
+
+    // Calling the jQueryUI Widget Factory Method
+    $.widget("toc.tocify", {
+
+        //Plugin version
+        version: "1.9.0",
+
+        // These options will be used as defaults
+        options: {
+
+            // **context**: Accepts String: Any jQuery selector
+            // The container element that holds all of the elements used to generate the table of contents
+            context: "body",
+
+            // **ignoreSelector**: Accepts String: Any jQuery selector
+            // A selector to any element that would be matched by selectors that you wish to be ignored
+            ignoreSelector: null,
+
+            // **selectors**: Accepts an Array of Strings: Any jQuery selectors
+            // The element's used to generate the table of contents.  The order is very important since it will determine the table of content's nesting structure
+            selectors: "h1, h2, h3",
+
+            // **showAndHide**: Accepts a boolean: true or false
+            // Used to determine if elements should be shown and hidden
+            showAndHide: true,
+
+            // **showEffect**: Accepts String: "none", "fadeIn", "show", or "slideDown"
+            // Used to display any of the table of contents nested items
+            showEffect: "slideDown",
+
+            // **showEffectSpeed**: Accepts Number (milliseconds) or String: "slow", "medium", or "fast"
+            // The time duration of the show animation
+            showEffectSpeed: "medium",
+
+            // **hideEffect**: Accepts String: "none", "fadeOut", "hide", or "slideUp"
+            // Used to hide any of the table of contents nested items
+            hideEffect: "slideUp",
+
+            // **hideEffectSpeed**: Accepts Number (milliseconds) or String: "slow", "medium", or "fast"
+            // The time duration of the hide animation
+            hideEffectSpeed: "medium",
+
+            // **smoothScroll**: Accepts a boolean: true or false
+            // Determines if a jQuery animation should be used to scroll to specific table of contents items on the page
+            smoothScroll: true,
+
+            // **smoothScrollSpeed**: Accepts Number (milliseconds) or String: "slow", "medium", or "fast"
+            // The time duration of the smoothScroll animation
+            smoothScrollSpeed: "medium",
+
+            // **scrollTo**: Accepts Number (pixels)
+            // The amount of space between the top of page and the selected table of contents item after the page has been scrolled
+            scrollTo: 0,
+
+            // **showAndHideOnScroll**: Accepts a boolean: true or false
+            // Determines if table of contents nested items should be shown and hidden while scrolling
+            showAndHideOnScroll: true,
+
+            // **highlightOnScroll**: Accepts a boolean: true or false
+            // Determines if table of contents nested items should be highlighted (set to a different color) while scrolling
+            highlightOnScroll: true,
+
+            // **highlightOffset**: Accepts a number
+            // The offset distance in pixels to trigger the next active table of contents item
+            highlightOffset: 40,
+
+            // **theme**: Accepts a string: "bootstrap", "jqueryui", or "none"
+            // Determines if Twitter Bootstrap, jQueryUI, or Tocify classes should be added to the table of contents
+            theme: "bootstrap",
+
+            // **extendPage**: Accepts a boolean: true or false
+            // If a user scrolls to the bottom of the page and the page is not tall enough to scroll to the last table of contents item, then the page height is increased
+            extendPage: true,
+
+            // **extendPageOffset**: Accepts a number: pixels
+            // How close to the bottom of the page a user must scroll before the page is extended
+            extendPageOffset: 100,
+
+            // **history**: Accepts a boolean: true or false
+            // Adds a hash to the page url to maintain history
+            history: true,
+
+            // **scrollHistory**: Accepts a boolean: true or false
+            // Adds a hash to the page url, to maintain history, when scrolling to a TOC item
+            scrollHistory: false,
+
+            // **hashGenerator**: How the hash value (the anchor segment of the URL, following the
+            // # character) will be generated.
+            //
+            // "compact" (default) - #CompressesEverythingTogether
+            // "pretty" - #looks-like-a-nice-url-and-is-easily-readable
+            // function(text, element){} - Your own hash generation function that accepts the text as an
+            // argument, and returns the hash value.
+            hashGenerator: "compact",
+
+            // **highlightDefault**: Accepts a boolean: true or false
+            // Set's the first TOC item as active if no other TOC item is active.
+            highlightDefault: true
+
+        },
+
+        // _Create
+        // -------
+        //      Constructs the plugin.  Only called once.
+        _create: function() {
+
+            var self = this;
+
+            self.extendPageScroll = true;
+
+            // Internal array that keeps track of all TOC items (Helps to recognize if there are duplicate TOC item strings)
+            self.items = [];
+
+            // Generates the HTML for the dynamic table of contents
+            self._generateToc();
+
+            // Adds CSS classes to the newly generated table of contents HTML
+            self._addCSSClasses();
+
+            self.webkit = (function() {
+
+                for(var prop in window) {
+
+                    if(prop) {
+
+                        if(prop.toLowerCase().indexOf("webkit") !== -1) {
+
+                            return true;
+
+                        }
+
+                    }
+
+                }
+
+                return false;
+
+            }());
+
+            // Adds jQuery event handlers to the newly generated table of contents
+            self._setEventHandlers();
+
+            // Binding to the Window load event to make sure the correct scrollTop is calculated
+            $(window).load(function() {
+
+                // Sets the active TOC item
+                self._setActiveElement(true);
+
+                // Once all animations on the page are complete, this callback function will be called
+                $("html, body").promise().done(function() {
+
+                    setTimeout(function() {
+
+                        self.extendPageScroll = false;
+
+                    },0);
+
+                });
+
+            });
+
+        },
+
+        // _generateToc
+        // ------------
+        //      Generates the HTML for the dynamic table of contents
+        _generateToc: function() {
+
+            // _Local variables_
+
+            // Stores the plugin context in the self variable
+            var self = this,
+
+                // All of the HTML tags found within the context provided (i.e. body) that match the top level jQuery selector above
+                firstElem,
+
+                // Instantiated variable that will store the top level newly created unordered list DOM element
+                ul,
+                ignoreSelector = self.options.ignoreSelector;
+
+             // If the selectors option has a comma within the string
+             if(this.options.selectors.indexOf(",") !== -1) {
+
+                 // Grabs the first selector from the string
+                 firstElem = $(this.options.context).find(this.options.selectors.replace(/ /g,"").substr(0, this.options.selectors.indexOf(",")));
+
+             }
+
+             // If the selectors option does not have a comman within the string
+             else {
+
+                 // Grabs the first selector from the string and makes sure there are no spaces
+                 firstElem = $(this.options.context).find(this.options.selectors.replace(/ /g,""));
+
+             }
+
+            if(!firstElem.length) {
+
+                self.element.addClass(hideTocClassName);
+
+                return;
+
+            }
+
+            self.element.addClass(tocClassName);
+
+            // Loops through each top level selector
+            firstElem.each(function(index) {
+
+                //If the element matches the ignoreSelector then we skip it
+                if($(this).is(ignoreSelector)) {
+                    return;
+                }
+
+                // Creates an unordered list HTML element and adds a dynamic ID and standard class name
+                ul = $("<ul/>", {
+                    "id": headerClassName + index,
+                    "class": headerClassName
+                }).
+
+                // Appends a top level list item HTML element to the previously created HTML header
+                append(self._nestElements($(this), index));
+
+                // Add the created unordered list element to the HTML element calling the plugin
+                self.element.append(ul);
+
+                // Finds all of the HTML tags between the header and subheader elements
+                $(this).nextUntil(this.nodeName.toLowerCase()).each(function() {
+
+                    // If there are no nested subheader elemements
+                    if($(this).find(self.options.selectors).length === 0) {
+
+                        // Loops through all of the subheader elements
+                        $(this).filter(self.options.selectors).each(function() {
+
+                            //If the element matches the ignoreSelector then we skip it
+                            if($(this).is(ignoreSelector)) {
+                                return;
+                            }
+
+                            self._appendSubheaders.call(this, self, ul);
+
+                        });
+
+                    }
+
+                    // If there are nested subheader elements
+                    else {
+
+                        // Loops through all of the subheader elements
+                        $(this).find(self.options.selectors).each(function() {
+
+                            //If the element matches the ignoreSelector then we skip it
+                            if($(this).is(ignoreSelector)) {
+                                return;
+                            }
+
+                            self._appendSubheaders.call(this, self, ul);
+
+                        });
+
+                    }
+
+                });
+
+            });
+
+        },
+
+        _setActiveElement: function(pageload) {
+
+            var self = this,
+
+                hash = window.location.hash.substring(1),
+
+                elem = self.element.find('li[data-unique="' + hash + '"]');
+
+            if(hash.length) {
+
+                // Removes highlighting from all of the list item's
+                self.element.find("." + self.focusClass).removeClass(self.focusClass);
+
+                // Highlights the current list item that was clicked
+                elem.addClass(self.focusClass);
+
+                // If the showAndHide option is true
+                if(self.options.showAndHide) {
+
+                    // Triggers the click event on the currently focused TOC item
+                    elem.click();
+
+                }
+
+            }
+
+            else {
+
+                // Removes highlighting from all of the list item's
+                self.element.find("." + self.focusClass).removeClass(self.focusClass);
+
+                if(!hash.length && pageload && self.options.highlightDefault) {
+
+                    // Highlights the first TOC item if no other items are highlighted
+                    self.element.find(itemClass).first().addClass(self.focusClass);
+
+                }
+
+            }
+
+            return self;
+
+        },
+
+        // _nestElements
+        // -------------
+        //      Helps create the table of contents list by appending nested list items
+        _nestElements: function(self, index) {
+
+            var arr, item, hashValue;
+
+            arr = $.grep(this.items, function (item) {
+
+                return item === self.text();
+
+            });
+
+            // If there is already a duplicate TOC item
+            if(arr.length) {
+
+                // Adds the current TOC item text and index (for slight randomization) to the internal array
+                this.items.push(self.text() + index);
+
+            }
+
+            // If there not a duplicate TOC item
+            else {
+
+                // Adds the current TOC item text to the internal array
+                this.items.push(self.text());
+
+            }
+
+            hashValue = this._generateHashValue(arr, self, index);
+
+            // Appends a list item HTML element to the last unordered list HTML element found within the HTML element calling the plugin
+            item = $("<li/>", {
+
+                // Sets a common class name to the list item
+                "class": itemClassName,
+
+                "data-unique": hashValue
+
+            // Nate Contino modified this script to reuse the existing <a> link element instead of constructing a new one with reused text.
+            }).append(self.html());
+
+            // Adds an HTML anchor tag before the currently traversed HTML element
+            self.before($("<div/>", {
+
+                // Sets a name attribute on the anchor tag to the text of the currently traversed HTML element (also making sure that all whitespace is replaced with an underscore)
+                "name": hashValue,
+
+                "data-unique": hashValue
+
+            }));
+
+            return item;
+
+        },
+
+        // _generateHashValue
+        // ------------------
+        //      Generates the hash value that will be used to refer to each item.
+        _generateHashValue: function(arr, self, index) {
+
+            var hashValue = "",
+                hashGeneratorOption = this.options.hashGenerator;
+
+            if (hashGeneratorOption === "pretty") {
+
+                // prettify the text
+                hashValue = self.text().toLowerCase().replace(/\s/g, "-");
+
+                // fix double hyphens
+                while (hashValue.indexOf("--") > -1) {
+                    hashValue = hashValue.replace(/--/g, "-");
+                }
+
+                // fix colon-space instances
+                while (hashValue.indexOf(":-") > -1) {
+                    hashValue = hashValue.replace(/:-/g, "-");
+                }
+
+            } else if (typeof hashGeneratorOption === "function") {
+
+                // call the function
+                hashValue = hashGeneratorOption(self.text(), self);
+
+            } else {
+
+                // compact - the default
+                hashValue = self.text().replace(/\s/g, "");
+
+            }
+
+            // add the index if we need to
+            if (arr.length) { hashValue += ""+index; }
+
+            // return the value
+            return hashValue;
+
+        },
+
+        // _appendElements
+        // ---------------
+        //      Helps create the table of contents list by appending subheader elements
+
+        _appendSubheaders: function(self, ul) {
+
+            // The current element index
+            var index = $(this).index(self.options.selectors),
+
+                // Finds the previous header DOM element
+                previousHeader = $(self.options.selectors).eq(index - 1),
+
+                currentTagName = +$(this).prop("tagName").charAt(1),
+
+                previousTagName = +previousHeader.prop("tagName").charAt(1),
+
+                lastSubheader;
+
+            // If the current header DOM element is smaller than the previous header DOM element or the first subheader
+            if(currentTagName < previousTagName) {
+
+                // Selects the last unordered list HTML found within the HTML element calling the plugin
+                self.element.find(subheaderClass + "[data-tag=" + currentTagName + "]").last().append(self._nestElements($(this), index));
+
+            }
+
+            // If the current header DOM element is the same type of header(eg. h4) as the previous header DOM element
+            else if(currentTagName === previousTagName) {
+
+                ul.find(itemClass).last().after(self._nestElements($(this), index));
+
+            }
+
+            else {
+
+                // Selects the last unordered list HTML found within the HTML element calling the plugin
+                ul.find(itemClass).last().
+
+                // Appends an unorderedList HTML element to the dynamic `unorderedList` variable and sets a common class name
+                after($("<ul/>", {
+
+                    "class": subheaderClassName,
+
+                    "data-tag": currentTagName
+
+                })).next(subheaderClass).
+
+                // Appends a list item HTML element to the last unordered list HTML element found within the HTML element calling the plugin
+                append(self._nestElements($(this), index));
+            }
+
+        },
+
+       // _setEventHandlers
+        // ----------------
+        //      Adds jQuery event handlers to the newly generated table of contents
+        _setEventHandlers: function() {
+
+            // _Local variables_
+
+            // Stores the plugin context in the self variable
+            var self = this,
+
+                // Instantiates a new variable that will be used to hold a specific element's context
+                $self,
+
+                // Instantiates a new variable that will be used to determine the smoothScroll animation time duration
+                duration;
+
+            // Event delegation that looks for any clicks on list item elements inside of the HTML element calling the plugin
+            this.element.on("click.tocify", "li", function(event) {
+
+                if(self.options.history) {
+
+                    window.location.hash = $(this).attr("data-unique");
+
+                }
+
+                // Removes highlighting from all of the list item's
+                self.element.find("." + self.focusClass).removeClass(self.focusClass);
+
+                // Highlights the current list item that was clicked
+                $(this).addClass(self.focusClass);
+
+                // If the showAndHide option is true
+                if(self.options.showAndHide) {
+
+                    var elem = $('li[data-unique="' + $(this).attr("data-unique") + '"]');
+
+                    self._triggerShow(elem);
+
+                }
+
+                self._scrollTo($(this));
+
+            });
+
+            // Mouseenter and Mouseleave event handlers for the list item's within the HTML element calling the plugin
+            this.element.find("li").on({
+
+                // Mouseenter event handler
+                "mouseenter.tocify": function() {
+
+                    // Adds a hover CSS class to the current list item
+                    $(this).addClass(self.hoverClass);
+
+                    // Makes sure the cursor is set to the pointer icon
+                    $(this).css("cursor", "pointer");
+
+                },
+
+                // Mouseleave event handler
+                "mouseleave.tocify": function() {
+
+                    if(self.options.theme !== "bootstrap") {
+
+                        // Removes the hover CSS class from the current list item
+                        $(this).removeClass(self.hoverClass);
+
+                    }
+
+                }
+            });
+
+            // only attach handler if needed (expensive in IE)
+            if (self.options.extendPage || self.options.highlightOnScroll || self.options.scrollHistory || self.options.showAndHideOnScroll)
+            {
+            // Window scroll event handler
+                $(window).on("scroll.tocify", function() {
+
+                    // Once all animations on the page are complete, this callback function will be called
+                    $("html, body").promise().done(function() {
+
+                        // Local variables
+
+                        // Stores how far the user has scrolled
+                        var winScrollTop = $(window).scrollTop(),
+
+                            // Stores the height of the window
+                            winHeight = $(window).height(),
+
+                            // Stores the height of the document
+                            docHeight = $(document).height(),
+
+                            scrollHeight = $("body")[0].scrollHeight,
+
+                            // Instantiates a variable that will be used to hold a selected HTML element
+                            elem,
+
+                            lastElem,
+
+                            lastElemOffset,
+
+                            currentElem;
+
+                        if(self.options.extendPage) {
+
+                            // If the user has scrolled to the bottom of the page and the last toc item is not focused
+                            if((self.webkit && winScrollTop >= scrollHeight - winHeight - self.options.extendPageOffset) || (!self.webkit && winHeight + winScrollTop > docHeight - self.options.extendPageOffset)) {
+
+                                if(!$(extendPageClass).length) {
+
+                                    lastElem = $('div[data-unique="' + $(itemClass).last().attr("data-unique") + '"]');
+
+                                    if(!lastElem.length) return;
+
+                                    // Gets the top offset of the page header that is linked to the last toc item
+                                    lastElemOffset = lastElem.offset().top;
+
+                                    // Appends a div to the bottom of the page and sets the height to the difference of the window scrollTop and the last element's position top offset
+                                    $(self.options.context).append($("<div />", {
+
+                                        "class": extendPageClassName,
+
+                                        "height": Math.abs(lastElemOffset - winScrollTop) + "px",
+
+                                        "data-unique": extendPageClassName
+
+                                    }));
+
+                                    if(self.extendPageScroll) {
+
+                                        currentElem = self.element.find('li.active');
+
+                                        self._scrollTo($('div[data-unique="' + currentElem.attr("data-unique") + '"]'));
+
+                                    }
+
+                                }
+
+                            }
+
+                        }
+
+                        // The zero timeout ensures the following code is run after the scroll events
+                        setTimeout(function() {
+
+                            // _Local variables_
+
+                            // Stores the distance to the closest anchor
+                            var closestAnchorDistance = null,
+
+                                // Stores the index of the closest anchor
+                                closestAnchorIdx = null,
+
+                                // Keeps a reference to all anchors
+                                anchors = $(self.options.context).find("div[data-unique]"),
+
+                                anchorText;
+
+                            // Determines the index of the closest anchor
+                            anchors.each(function(idx) {
+                                var distance = Math.abs(($(this).next().length ? $(this).next() : $(this)).offset().top - winScrollTop - self.options.highlightOffset);
+                                if (closestAnchorDistance == null || distance < closestAnchorDistance) {
+                                    closestAnchorDistance = distance;
+                                    closestAnchorIdx = idx;
+                                } else {
+                                    return false;
+                                }
+                            });
+
+                            anchorText = $(anchors[closestAnchorIdx]).attr("data-unique");
+
+                            // Stores the list item HTML element that corresponds to the currently traversed anchor tag
+                            elem = $('li[data-unique="' + anchorText + '"]');
+
+                            // If the `highlightOnScroll` option is true and a next element is found
+                            if(self.options.highlightOnScroll && elem.length) {
+
+                                // Removes highlighting from all of the list item's
+                                self.element.find("." + self.focusClass).removeClass(self.focusClass);
+
+                                // Highlights the corresponding list item
+                                elem.addClass(self.focusClass);
+
+                            }
+
+                            if(self.options.scrollHistory) {
+
+                                if(window.location.hash !== "#" + anchorText) {
+
+                                    window.location.replace("#" + anchorText);
+
+                                }
+                            }
+
+                            // If the `showAndHideOnScroll` option is true
+                            if(self.options.showAndHideOnScroll && self.options.showAndHide) {
+
+                                self._triggerShow(elem, true);
+
+                            }
+
+                        }, 0);
+
+                    });
+
+                });
+            }
+
+        },
+
+        // Show
+        // ----
+        //      Opens the current sub-header
+        show: function(elem, scroll) {
+
+            // Stores the plugin context in the `self` variable
+            var self = this,
+                element = elem;
+
+            // If the sub-header is not already visible
+            if (!elem.is(":visible")) {
+
+                // If the current element does not have any nested subheaders, is not a header, and its parent is not visible
+                if(!elem.find(subheaderClass).length && !elem.parent().is(headerClass) && !elem.parent().is(":visible")) {
+
+                    // Sets the current element to all of the subheaders within the current header
+                    elem = elem.parents(subheaderClass).add(elem);
+
+                }
+
+                // If the current element does not have any nested subheaders and is not a header
+                else if(!elem.children(subheaderClass).length && !elem.parent().is(headerClass)) {
+
+                    // Sets the current element to the closest subheader
+                    elem = elem.closest(subheaderClass);
+
+                }
+
+                //Determines what jQuery effect to use
+                switch (self.options.showEffect) {
+
+                    //Uses `no effect`
+                    case "none":
+
+                        elem.show();
+
+                    break;
+
+                    //Uses the jQuery `show` special effect
+                    case "show":
+
+                        elem.show(self.options.showEffectSpeed);
+
+                    break;
+
+                    //Uses the jQuery `slideDown` special effect
+                    case "slideDown":
+
+                        elem.slideDown(self.options.showEffectSpeed);
+
+                    break;
+
+                    //Uses the jQuery `fadeIn` special effect
+                    case "fadeIn":
+
+                        elem.fadeIn(self.options.showEffectSpeed);
+
+                    break;
+
+                    //If none of the above options were passed, then a `jQueryUI show effect` is expected
+                    default:
+
+                        elem.show();
+
+                    break;
+
+                }
+
+            }
+
+            // If the current subheader parent element is a header
+            if(elem.parent().is(headerClass)) {
+
+                // Hides all non-active sub-headers
+                self.hide($(subheaderClass).not(elem));
+
+            }
+
+            // If the current subheader parent element is not a header
+            else {
+
+                // Hides all non-active sub-headers
+                self.hide($(subheaderClass).not(elem.closest(headerClass).find(subheaderClass).not(elem.siblings())));
+
+            }
+
+            // Maintains chainablity
+            return self;
+
+        },
+
+        // Hide
+        // ----
+        //      Closes the current sub-header
+        hide: function(elem) {
+
+            // Stores the plugin context in the `self` variable
+            var self = this;
+
+            //Determines what jQuery effect to use
+            switch (self.options.hideEffect) {
+
+                // Uses `no effect`
+                case "none":
+
+                    elem.hide();
+
+                break;
+
+                // Uses the jQuery `hide` special effect
+                case "hide":
+
+                    elem.hide(self.options.hideEffectSpeed);
+
+                break;
+
+                // Uses the jQuery `slideUp` special effect
+                case "slideUp":
+
+                    elem.slideUp(self.options.hideEffectSpeed);
+
+                break;
+
+                // Uses the jQuery `fadeOut` special effect
+                case "fadeOut":
+
+                    elem.fadeOut(self.options.hideEffectSpeed);
+
+                break;
+
+                // If none of the above options were passed, then a `jqueryUI hide effect` is expected
+                default:
+
+                    elem.hide();
+
+                break;
+
+            }
+
+            // Maintains chainablity
+            return self;
+        },
+
+        // _triggerShow
+        // ------------
+        //      Determines what elements get shown on scroll and click
+        _triggerShow: function(elem, scroll) {
+
+            var self = this;
+
+            // If the current element's parent is a header element or the next element is a nested subheader element
+            if(elem.parent().is(headerClass) || elem.next().is(subheaderClass)) {
+
+                // Shows the next sub-header element
+                self.show(elem.next(subheaderClass), scroll);
+
+            }
+
+            // If the current element's parent is a subheader element
+            else if(elem.parent().is(subheaderClass)) {
+
+                // Shows the parent sub-header element
+                self.show(elem.parent(), scroll);
+
+            }
+
+            // Maintains chainability
+            return self;
+
+        },
+
+        // _addCSSClasses
+        // --------------
+        //      Adds CSS classes to the newly generated table of contents HTML
+        _addCSSClasses: function() {
+
+            // If the user wants a jqueryUI theme
+            if(this.options.theme === "jqueryui") {
+
+                this.focusClass = "ui-state-default";
+
+                this.hoverClass = "ui-state-hover";
+
+                //Adds the default styling to the dropdown list
+                this.element.addClass("ui-widget").find(".toc-title").addClass("ui-widget-header").end().find("li").addClass("ui-widget-content");
+
+            }
+
+            // If the user wants a twitterBootstrap theme
+            else if(this.options.theme === "bootstrap") {
+
+                this.element.find(headerClass + "," + subheaderClass).addClass("nav nav-list");
+
+                this.focusClass = "active";
+
+            }
+
+            // If a user does not want a prebuilt theme
+            else {
+
+                // Adds more neutral classes (instead of jqueryui)
+
+                this.focusClass = tocFocusClassName;
+
+                this.hoverClass = tocHoverClassName;
+
+            }
+
+            //Maintains chainability
+            return this;
+
+        },
+
+        // setOption
+        // ---------
+        //      Sets a single Tocify option after the plugin is invoked
+        setOption: function() {
+
+            // Calls the jQueryUI Widget Factory setOption method
+            $.Widget.prototype._setOption.apply(this, arguments);
+
+        },
+
+        // setOptions
+        // ----------
+        //      Sets a single or multiple Tocify options after the plugin is invoked
+        setOptions: function() {
+
+            // Calls the jQueryUI Widget Factory setOptions method
+            $.Widget.prototype._setOptions.apply(this, arguments);
+
+        },
+
+        // _scrollTo
+        // ---------
+        //      Scrolls to a specific element
+        _scrollTo: function(elem) {
+
+            var self = this,
+                duration = self.options.smoothScroll || 0,
+                scrollTo = self.options.scrollTo,
+                currentDiv = $('div[data-unique="' + elem.attr("data-unique") + '"]');
+
+            if(!currentDiv.length) {
+
+                return self;
+
+            }
+
+            // Once all animations on the page are complete, this callback function will be called
+            $("html, body").promise().done(function() {
+
+                // Animates the html and body element scrolltops
+                $("html, body").animate({
+
+                    // Sets the jQuery `scrollTop` to the top offset of the HTML div tag that matches the current list item's `data-unique` tag
+                    "scrollTop": currentDiv.offset().top - ($.isFunction(scrollTo) ? scrollTo.call() : scrollTo) + "px"
+
+                }, {
+
+                    // Sets the smoothScroll animation time duration to the smoothScrollSpeed option
+                    "duration": duration
+
+                });
+
+            });
+
+            // Maintains chainability
+            return self;
+
+        }
+
+    });
+
+})); //end of plugin
diff --git a/jekyll-assets/scripts/nav.js b/jekyll-assets/scripts/nav.js
new file mode 100644
index 0000000000..df5b6202db
--- /dev/null
+++ b/jekyll-assets/scripts/nav.js
@@ -0,0 +1,83 @@
+function addClassJS(element, myclass) {
+  var classes = element.className;
+  if (classes) {
+    classes = classes.split(" ");
+  } else {
+    classes = [];
+  }
+  var i = classes.indexOf(myclass);
+  if (i < 0) {
+    classes.push(myclass);
+  }
+  element.className = classes.join(" ");
+}
+
+function removeClassJS(element, myclass) {
+  var classes = element.className;
+  if (classes) {
+    classes = classes.split(" ");
+  } else {
+    classes = [];
+  }
+  var i = classes.indexOf(myclass);
+  if (i >= 0) {
+    classes.splice(i, 1);
+  }
+  element.className = classes.join(" ");
+}
+
+function expandAndCollapse(e) {
+  var toExpand = e.nextElementSibling;
+  if (toExpand) {
+    var classes = toExpand.className;
+    if (classes) {
+      classes = classes.split(" ");
+    } else {
+      classes = [];
+    }
+    var currentState = classes.indexOf("hidden");
+
+    var expanded = document.querySelectorAll('div.itemcontents:not(.hidden)');
+    for (var i=0; i < expanded.length; i++) {
+      var element = expanded[i];
+      addClassJS(element, "hidden");
+    }
+
+    if (currentState > -1) {
+      removeClassJS(toExpand, "hidden");
+    }
+  }
+}
+
+function expandAndCollapseMobile(e) {
+  var toExpand = e.nextElementSibling;
+  var parent = e.parentNode;
+  if (toExpand) {
+    var classes = toExpand.className;
+    if (classes) {
+      classes = classes.split(" ");
+    } else {
+      classes = [];
+    }
+    var currentState = classes.indexOf("hidden");
+
+    if (currentState > -1) {
+      removeClassJS(toExpand, "hidden");
+      addClassJS(parent, "active");
+    } else {
+      addClassJS(toExpand, "hidden");
+      removeClassJS(parent, "active");
+    }
+  }
+}
+
+window.addEventListener('load', function() {
+  var tocitems = document.querySelectorAll("div.itemcontents:not(#toc)");
+  for (var i=0; i < tocitems.length; i++) {
+    addClassJS(tocitems[i], "hidden");
+  }
+  var currentItemNoJS = document.querySelectorAll("div.itemcontents.noJS");
+  addClassJS(currentItemNoJS, "hidden");
+  var contents = document.getElementById("contents");
+  contents.style.overflowY = 'hidden';
+});
diff --git a/jekyll-assets/scripts/noframework.waypoints.min.js b/jekyll-assets/scripts/noframework.waypoints.min.js
new file mode 100644
index 0000000000..edfacb57fe
--- /dev/null
+++ b/jekyll-assets/scripts/noframework.waypoints.min.js
@@ -0,0 +1,7 @@
+/*!
+Waypoints - 4.0.1
+Copyright © 2011-2016 Caleb Troughton
+Licensed under the MIT license.
+https://github.com/imakewebthings/waypoints/blob/master/licenses.txt
+*/
+!function(){"use strict";function t(n){if(!n)throw new Error("No options passed to Waypoint constructor");if(!n.element)throw new Error("No element option passed to Waypoint constructor");if(!n.handler)throw new Error("No handler option passed to Waypoint constructor");this.key="waypoint-"+e,this.options=t.Adapter.extend({},t.defaults,n),this.element=this.options.element,this.adapter=new t.Adapter(this.element),this.callback=n.handler,this.axis=this.options.horizontal?"horizontal":"vertical",this.enabled=this.options.enabled,this.triggerPoint=null,this.group=t.Group.findOrCreate({name:this.options.group,axis:this.axis}),this.context=t.Context.findOrCreateByElement(this.options.context),t.offsetAliases[this.options.offset]&&(this.options.offset=t.offsetAliases[this.options.offset]),this.group.add(this),this.context.add(this),i[this.key]=this,e+=1}var e=0,i={};t.prototype.queueTrigger=function(t){this.group.queueTrigger(this,t)},t.prototype.trigger=function(t){this.enabled&&this.callback&&this.callback.apply(this,t)},t.prototype.destroy=function(){this.context.remove(this),this.group.remove(this),delete i[this.key]},t.prototype.disable=function(){return this.enabled=!1,this},t.prototype.enable=function(){return this.context.refresh(),this.enabled=!0,this},t.prototype.next=function(){return this.group.next(this)},t.prototype.previous=function(){return this.group.previous(this)},t.invokeAll=function(t){var e=[];for(var n in i)e.push(i[n]);for(var o=0,r=e.length;r>o;o++)e[o][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.Context.refreshAll();for(var e in i)i[e].enabled=!0;return this},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=o.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+i,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,n[t.waypointContextKey]=this,i+=1,o.windowContext||(o.windowContext=!0,o.windowContext=new e(window)),this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var i=0,n={},o=window.Waypoint,r=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical),i=this.element==this.element.window;t&&e&&!i&&(this.adapter.off(".waypoints"),delete n[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",function(){e.didResize||(e.didResize=!0,o.requestAnimationFrame(t))})},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",function(){(!e.didScroll||o.isTouch)&&(e.didScroll=!0,o.requestAnimationFrame(t))})},e.prototype.handleResize=function(){o.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var i in e){var n=e[i],o=n.newScroll>n.oldScroll,r=o?n.forward:n.backward;for(var s in this.waypoints[i]){var l=this.waypoints[i][s];if(null!==l.triggerPoint){var a=n.oldScroll<l.triggerPoint,h=n.newScroll>=l.triggerPoint,p=a&&h,u=!a&&!h;(p||u)&&(l.queueTrigger(r),t[l.group.id]=l.group)}}}for(var d in t)t[d].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?o.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?o.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var n=0,o=t.length;o>n;n++)t[n].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,i=e?void 0:this.adapter.offset(),n={};this.handleScroll(),t={horizontal:{contextOffset:e?0:i.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:i.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};for(var r in t){var s=t[r];for(var l in this.waypoints[r]){var a,h,p,u,d,f=this.waypoints[r][l],c=f.options.offset,w=f.triggerPoint,y=0,g=null==w;f.element!==f.element.window&&(y=f.adapter.offset()[s.offsetProp]),"function"==typeof c?c=c.apply(f):"string"==typeof c&&(c=parseFloat(c),f.options.offset.indexOf("%")>-1&&(c=Math.ceil(s.contextDimension*c/100))),a=s.contextScroll-s.contextOffset,f.triggerPoint=Math.floor(y+a-c),h=w<s.oldScroll,p=f.triggerPoint>=s.oldScroll,u=h&&p,d=!h&&!p,!g&&u?(f.queueTrigger(s.backward),n[f.group.id]=f.group):!g&&d?(f.queueTrigger(s.forward),n[f.group.id]=f.group):g&&s.oldScroll>=f.triggerPoint&&(f.queueTrigger(s.forward),n[f.group.id]=f.group)}}return o.requestAnimationFrame(function(){for(var t in n)n[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in n)n[t].refresh()},e.findByElement=function(t){return n[t.waypointContextKey]},window.onload=function(){r&&r(),e.refreshAll()},o.requestAnimationFrame=function(e){var i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t;i.call(window,e)},o.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function i(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),n[this.axis][this.name]=this}var n={vertical:{},horizontal:{}},o=window.Waypoint;i.prototype.add=function(t){this.waypoints.push(t)},i.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},i.prototype.flushTriggers=function(){for(var i in this.triggerQueues){var n=this.triggerQueues[i],o="up"===i||"left"===i;n.sort(o?e:t);for(var r=0,s=n.length;s>r;r+=1){var l=n[r];(l.options.continuous||r===n.length-1)&&l.trigger([i])}}this.clearTriggerQueues()},i.prototype.next=function(e){this.waypoints.sort(t);var i=o.Adapter.inArray(e,this.waypoints),n=i===this.waypoints.length-1;return n?null:this.waypoints[i+1]},i.prototype.previous=function(e){this.waypoints.sort(t);var i=o.Adapter.inArray(e,this.waypoints);return i?this.waypoints[i-1]:null},i.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},i.prototype.remove=function(t){var e=o.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},i.prototype.first=function(){return this.waypoints[0]},i.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},i.findOrCreate=function(t){return n[t.axis][t.name]||new i(t)},o.Group=i}(),function(){"use strict";function t(t){return t===t.window}function e(e){return t(e)?e:e.defaultView}function i(t){this.element=t,this.handlers={}}var n=window.Waypoint;i.prototype.innerHeight=function(){var e=t(this.element);return e?this.element.innerHeight:this.element.clientHeight},i.prototype.innerWidth=function(){var e=t(this.element);return e?this.element.innerWidth:this.element.clientWidth},i.prototype.off=function(t,e){function i(t,e,i){for(var n=0,o=e.length-1;o>n;n++){var r=e[n];i&&i!==r||t.removeEventListener(r)}}var n=t.split("."),o=n[0],r=n[1],s=this.element;if(r&&this.handlers[r]&&o)i(s,this.handlers[r][o],e),this.handlers[r][o]=[];else if(o)for(var l in this.handlers)i(s,this.handlers[l][o]||[],e),this.handlers[l][o]=[];else if(r&&this.handlers[r]){for(var a in this.handlers[r])i(s,this.handlers[r][a],e);this.handlers[r]={}}},i.prototype.offset=function(){if(!this.element.ownerDocument)return null;var t=this.element.ownerDocument.documentElement,i=e(this.element.ownerDocument),n={top:0,left:0};return this.element.getBoundingClientRect&&(n=this.element.getBoundingClientRect()),{top:n.top+i.pageYOffset-t.clientTop,left:n.left+i.pageXOffset-t.clientLeft}},i.prototype.on=function(t,e){var i=t.split("."),n=i[0],o=i[1]||"__default",r=this.handlers[o]=this.handlers[o]||{},s=r[n]=r[n]||[];s.push(e),this.element.addEventListener(n,e)},i.prototype.outerHeight=function(e){var i,n=this.innerHeight();return e&&!t(this.element)&&(i=window.getComputedStyle(this.element),n+=parseInt(i.marginTop,10),n+=parseInt(i.marginBottom,10)),n},i.prototype.outerWidth=function(e){var i,n=this.innerWidth();return e&&!t(this.element)&&(i=window.getComputedStyle(this.element),n+=parseInt(i.marginLeft,10),n+=parseInt(i.marginRight,10)),n},i.prototype.scrollLeft=function(){var t=e(this.element);return t?t.pageXOffset:this.element.scrollLeft},i.prototype.scrollTop=function(){var t=e(this.element);return t?t.pageYOffset:this.element.scrollTop},i.extend=function(){function t(t,e){if("object"==typeof t&&"object"==typeof e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}for(var e=Array.prototype.slice.call(arguments),i=1,n=e.length;n>i;i++)t(e[0],e[i]);return e[0]},i.inArray=function(t,e,i){return null==e?-1:e.indexOf(t,i)},i.isEmptyObject=function(t){for(var e in t)return!1;return!0},n.adapters.push({name:"noframework",Adapter:i}),n.Adapter=i}();
\ No newline at end of file
diff --git a/jekyll-assets/scripts/theme.js b/jekyll-assets/scripts/theme.js
deleted file mode 100644
index 87bb2df9ab..0000000000
--- a/jekyll-assets/scripts/theme.js
+++ /dev/null
@@ -1,41 +0,0 @@
-// toggles the site theme between dark and light
-function toggleTheme() {
-  var cookiePermission = document.cookie.indexOf("cookiebanner_accepted");
-  
-  // fetch the theme from local storage (if it exists)
-  var theme = localStorage.getItem('theme');
-  // if the theme has never been set, or is light, set the theme to the dark symbol in local storage to change it
-  if (localStorage.getItem('theme') !== null && theme == '🌝' ) {
-    if (document.cookie.indexOf("cookiebanner_accepted") != -1) {
-      localStorage.setItem('theme', '🌚');
-    }
-  } else {
-    if (document.cookie.indexOf("cookiebanner_accepted") != -1) {
-      // otherwise, the theme is currently set to dark, so set the theme to the light symbol in local storage to change it
-      localStorage.setItem('theme', '🌝');
-    }
-  }
-  // finally, toggle the light option off or on the body to change the display of the theme
-  document.body.classList.toggle('light');
-}
-
-// initialises the site theme display
-// of key interest here: from the user's perspective, the site defaults to the light theme...
-// ...unless your browser uses prefers-color-scheme to ask for a dark theme
-// from the site's perspective, we default to a dark theme, but toggle it to a light theme on load if the user doesn't ask for dark.
-// why do this? To prevent an annoying light 'flash' for dark theme users. light theme users don't really notice or care if there's a dark anti-flash.
-function initTheme() {
-  var cookiePermission = document.cookie.indexOf("cookiebanner_accepted");
-  if (document.cookie.indexOf("cookiebanner_accepted") != -1) {
-    // fetch the theme from local storage (if it exists)
-    var theme = localStorage.getItem('theme');
-    // if the theme has been set to light (null check to short circuit if not set)
-    if(theme !== null && theme === '🌝'
-      // if we can use matchMedia and the browser supports the dark color scheme
-      || (window.matchMedia && !window.matchMedia('(prefers-color-scheme: dark)').matches)
-      && theme !== '🌚') {
-        // toggles the theme from the default dark mode to the light version (which actually _shows_ by default to many users)
-        document.body.classList.toggle('light');
-    }
-  }
-}
\ No newline at end of file
diff --git a/jekyll-assets/scripts/toc.js b/jekyll-assets/scripts/toc.js
deleted file mode 100644
index b0afa20179..0000000000
--- a/jekyll-assets/scripts/toc.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Trigger Tocbot dynamic TOC, works with tocbot 3.0.2 */
-function makeToc() {
-    var tocElement = document.getElementById('toc');
-    if (tocElement) { /* only run on pages that have a toc -- exclude boxes landing pages, for instance */
-        var oldtoc = tocElement.nextElementSibling;
-        var newtoc = document.getElementById('tocbot');
-        newtoc.setAttribute('id', 'tocbot');
-        newtoc.setAttribute('class', 'js-toc');
-        oldtoc.parentNode.replaceChild(newtoc, oldtoc);
-        tocbot.init({ contentSelector: '#content',
-            headingSelector: 'h1, h2, h3, h4',
-            smoothScroll: true,
-            includeHtml: true
-        });
-        var handleTocOnResize = function() {
-            var width = window.innerWidth
-                        || document.documentElement.clientWidth
-                        || document.body.clientWidth;
-            if (width < 768) {
-                tocbot.refresh({ contentSelector: '#content',
-                    headingSelector: 'h1, h2, h3, h4',
-                    collapseDepth: 6,
-                    activeLinkClass: 'ignoreactive',
-                    throttleTimeout: 1000,
-                    smoothScroll: true });
-            }
-            else {
-                tocbot.refresh({ contentSelector: '#content',
-                    headingSelector: 'h1, h2, h3, h4',
-                    smoothScroll: true });
-            }
-        };
-        window.addEventListener('resize', handleTocOnResize);
-        handleTocOnResize();
-    }
-}
-
-var currentParentID;
-var currentParentInputID;
-var currentChildID;
-
-function initialiseCurrentToc(parentID, parentInputID = null, childID = null) {
-    // highlight the new parent
-    var newParent = document.getElementById(parentID);
-    newParent.setAttribute('style', 'font-weight:bold');
-    currentParentID = parentID;
-
-    // if a parent input id is specified, expand the parent element
-    if (parentInputID) {
-        var newParentInput = document.getElementById(parentInputID);
-        newParentInput.click();
-        currentParentInputID = parentInputID;
-    }
-
-    // if a child is specified, highlight the child
-    if (childID) {
-        var newChild = document.getElementById(childID);
-        newChild.setAttribute('style', 'font-weight:bold');
-        currentChildID = childID;
-    }
-}
-
-function updateCurrentToc(parentID, parentInputID = null, childID = null) {
-    if (currentParentID == null && currentChildID == null) {
-        initialiseCurrentToc(parentID, parentInputID, childID)
-    } else {
-        // if a parent input id is specified, but no child, expand the parent element
-        // why no child? because if someone clicks the child within a parent, they don't want the parent section to collapse!
-        if (parentInputID && childID == null) {
-            var newParentInput = document.getElementById(parentInputID);
-            newParentInput.click();
-            currentParentInputID = parentInputID;
-        }
-
-        // if this is a new parent id, de-highlight the old parent and highlight the new one
-        if (currentParentID != parentID) {
-            var oldParent = document.getElementById(currentParentID);
-            oldParent.style.removeProperty('font-weight');
-            var newParent = document.getElementById(parentID);
-            newParent.setAttribute('style', 'font-weight:bold');
-            currentParentID = parentID;
-        }
-
-        // if there is an old child highlighted, un-highlight it
-        if (currentChildID) {
-            var oldChild = document.getElementById(currentChildID);
-            oldChild.style.removeProperty('font-weight');
-        }
-
-        // if there is a new child, highlight it
-        if (childID != null) {
-            var newChild = document.getElementById(childID);
-
-            newChild.setAttribute('style', 'font-weight:bold');
-        }
-        currentChildID = childID;
-    }
-}
\ No newline at end of file
diff --git a/jekyll-assets/scripts/tocbot.js b/jekyll-assets/scripts/tocbot.js
deleted file mode 100644
index d6c9e28920..0000000000
--- a/jekyll-assets/scripts/tocbot.js
+++ /dev/null
@@ -1,1205 +0,0 @@
-/******/ (() => { // webpackBootstrap
-/******/ 	"use strict";
-/******/ 	var __webpack_modules__ = ({
-
-/***/ "./src/js/build-html.js":
-/*!******************************!*\
-  !*** ./src/js/build-html.js ***!
-  \******************************/
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * This file is responsible for building the DOM and updating DOM state.
- *
- * @author Tim Scanlin
- */
-
-/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(options) {
-  const forEach = [].forEach
-  const some = [].some
-  const body = typeof window !== 'undefined' && document.body
-  const SPACE_CHAR = ' '
-  let tocElement
-  let currentlyHighlighting = true
-
-  /**
-   * Create link and list elements.
-   * @param {Object} d
-   * @param {HTMLElement} container
-   * @return {HTMLElement}
-   */
-  function createEl (d, container) {
-    const link = container.appendChild(createLink(d))
-    if (d.children.length) {
-      const list = createList(d.isCollapsed)
-      d.children.forEach((child) => {
-        createEl(child, list)
-      })
-      link.appendChild(list)
-    }
-  }
-
-  /**
-   * Render nested heading array data into a given element.
-   * @param {HTMLElement} parent Optional. If provided updates the {@see tocElement} to match.
-   * @param {Array} data
-   * @return {HTMLElement}
-   */
-  function render (parent, data) {
-    const collapsed = false
-    const container = createList(collapsed)
-
-    data.forEach((d) => {
-      createEl(d, container)
-    })
-
-    // Return if no TOC element is provided or known.
-    tocElement = parent || tocElement
-    if (tocElement === null) {
-      return
-    }
-
-    // Remove existing child if it exists.
-    if (tocElement.firstChild) {
-      tocElement.removeChild(tocElement.firstChild)
-    }
-
-    // Just return the parent and don't append the list if no links are found.
-    if (data.length === 0) {
-      return tocElement
-    }
-
-    // Append the Elements that have been created
-    return tocElement.appendChild(container)
-  }
-
-  /**
-   * Create link element.
-   * @param {Object} data
-   * @return {HTMLElement}
-   */
-  function createLink (data) {
-    const item = document.createElement('li')
-    const a = document.createElement('a')
-    if (options.listItemClass) {
-      item.setAttribute('class', options.listItemClass)
-    }
-
-    if (options.onClick) {
-      a.onclick = options.onClick
-    }
-
-    if (options.includeTitleTags) {
-      a.setAttribute('title', data.textContent)
-    }
-
-    if (options.includeHtml && data.childNodes.length) {
-      forEach.call(data.childNodes, (node) => {
-        a.appendChild(node.cloneNode(true))
-      })
-    } else {
-      // Default behavior. Set to textContent to keep tests happy.
-      a.textContent = data.textContent
-    }
-    a.setAttribute('href', `${options.basePath}#${data.id}`)
-    a.setAttribute('class', `${options.linkClass +
-      SPACE_CHAR}node-name--${data.nodeName}${SPACE_CHAR}${options.extraLinkClasses}`)
-    item.appendChild(a)
-    return item
-  }
-
-  /**
-   * Create list element.
-   * @param {Boolean} isCollapsed
-   * @return {HTMLElement}
-   */
-  function createList (isCollapsed) {
-    const listElement = (options.orderedList) ? 'ol' : 'ul'
-    const list = document.createElement(listElement)
-    let classes = options.listClass + SPACE_CHAR + options.extraListClasses
-    if (isCollapsed) {
-      // No plus/equals here fixes compilation issue.
-      classes = classes + SPACE_CHAR + options.collapsibleClass
-      classes = classes + SPACE_CHAR + options.isCollapsedClass
-    }
-    list.setAttribute('class', classes)
-    return list
-  }
-
-  /**
-   * Update fixed sidebar class.
-   * @return {HTMLElement}
-   */
-  function updateFixedSidebarClass () {
-    const scrollTop = getScrollTop()
-
-    const posFixedEl = document.querySelector(options.positionFixedSelector)
-    if (options.fixedSidebarOffset === 'auto') {
-      options.fixedSidebarOffset = tocElement.offsetTop
-    }
-
-    if (scrollTop > options.fixedSidebarOffset) {
-      if (posFixedEl.className.indexOf(options.positionFixedClass) === -1) {
-        posFixedEl.className += SPACE_CHAR + options.positionFixedClass
-      }
-    } else {
-      posFixedEl.className = posFixedEl.className.replace(SPACE_CHAR + options.positionFixedClass, '')
-    }
-  }
-
-  /**
-   * Get top position of heading
-   * @param {HTMLElement} obj
-   * @return {int} position
-   */
-  function getHeadingTopPos (obj) {
-    let position = 0
-    if (obj !== null) {
-      position = obj.offsetTop
-      if (options.hasInnerContainers) { position += getHeadingTopPos(obj.offsetParent) }
-    }
-    return position
-  }
-
-  /**
-   * Update className only when changed.
-   * @param {HTMLElement} obj
-   * @param {string} className
-   * @return {HTMLElement} obj
-   */
-  function updateClassname (obj, className) {
-    if (obj && obj.className !== className) {
-      obj.className = className
-    }
-    return obj
-  }
-
-  /**
-   * Update TOC highlighting and collapsed groupings.
-   */
-  function updateToc (headingsArray) {
-    // Add fixed class at offset
-    if (options.positionFixedSelector) {
-      updateFixedSidebarClass()
-    }
-
-    // Get the top most heading currently visible on the page so we know what to highlight.
-    const headings = headingsArray
-    // Using some instead of each so that we can escape early.
-    if (currentlyHighlighting &&
-      !!tocElement &&
-      headings.length > 0) {
-      const topHeader = getTopHeader(headings)
-
-      const oldActiveTocLink = tocElement.querySelector(`.${options.activeLinkClass}`)
-      const activeTocLink = tocElement
-        .querySelector(`.${options.linkClass}.node-name--${topHeader.nodeName}[href="${options.basePath}#${topHeader.id.replace(/([ #;&,.+*~':"!^$[\]()=>|/\\@])/g, '\\$1')}"]`)
-      // Performance improvement to only change the classes
-      // for the toc if a new link should be highlighted.
-      if (oldActiveTocLink === activeTocLink) {
-        return
-      }
-
-      // Remove the active class from the other tocLinks.
-      const tocLinks = tocElement
-        .querySelectorAll(`.${options.linkClass}`)
-      forEach.call(tocLinks, (tocLink) => {
-        updateClassname(tocLink, tocLink.className.replace(SPACE_CHAR + options.activeLinkClass, ''))
-      })
-      const tocLis = tocElement
-        .querySelectorAll(`.${options.listItemClass}`)
-      forEach.call(tocLis, (tocLi) => {
-        updateClassname(tocLi, tocLi.className.replace(SPACE_CHAR + options.activeListItemClass, ''))
-      })
-
-      // Add the active class to the active tocLink.
-      if (activeTocLink && activeTocLink.className.indexOf(options.activeLinkClass) === -1) {
-        activeTocLink.className += SPACE_CHAR + options.activeLinkClass
-      }
-      const li = activeTocLink?.parentNode
-      if (li && li.className.indexOf(options.activeListItemClass) === -1) {
-        li.className += SPACE_CHAR + options.activeListItemClass
-      }
-
-      const tocLists = tocElement
-        .querySelectorAll(`.${options.listClass}.${options.collapsibleClass}`)
-
-      // Collapse the other collapsible lists.
-      forEach.call(tocLists, (list) => {
-        if (list.className.indexOf(options.isCollapsedClass) === -1) {
-          list.className += SPACE_CHAR + options.isCollapsedClass
-        }
-      })
-
-      // Expand the active link's collapsible list and its sibling if applicable.
-      if (activeTocLink?.nextSibling && activeTocLink.nextSibling.className.indexOf(options.isCollapsedClass) !== -1) {
-        updateClassname(activeTocLink.nextSibling, activeTocLink.nextSibling.className.replace(SPACE_CHAR + options.isCollapsedClass, ''))
-      }
-      removeCollapsedFromParents(activeTocLink?.parentNode.parentNode)
-    }
-  }
-
-  /**
-   * Remove collapsed class from parent elements.
-   * @param {HTMLElement} element
-   * @return {HTMLElement}
-   */
-  function removeCollapsedFromParents (element) {
-    if (element && element.className.indexOf(options.collapsibleClass) !== -1 && element.className.indexOf(options.isCollapsedClass) !== -1) {
-      updateClassname(element, element.className.replace(SPACE_CHAR + options.isCollapsedClass, ''))
-      return removeCollapsedFromParents(element.parentNode.parentNode)
-    }
-    return element
-  }
-
-  /**
-   * Disable TOC Animation when a link is clicked.
-   * @param {Event} event
-   */
-  function disableTocAnimation (event) {
-    const target = event.target || event.srcElement
-    if (typeof target.className !== 'string' || target.className.indexOf(options.linkClass) === -1) {
-      return
-    }
-    // Bind to tocLink clicks to temporarily disable highlighting
-    // while smoothScroll is animating.
-    currentlyHighlighting = false
-  }
-
-  /**
-   * Enable TOC Animation.
-   */
-  function enableTocAnimation () {
-    currentlyHighlighting = true
-  }
-
-  /**
-   * Return currently highlighting status.
-   */
-  function getCurrentlyHighlighting () {
-    return currentlyHighlighting
-  }
-
-  function getScrollTop () {
-    // If a fixed content container was set
-    let top
-    if (options.scrollContainer && document.querySelector(options.scrollContainer)) {
-      top = document.querySelector(options.scrollContainer).scrollTop
-    } else {
-      top = document.documentElement.scrollTop || body.scrollTop
-    }
-    return top
-  }
-
-  function getTopHeader (headings, scrollTop = getScrollTop()) {
-    let topHeader
-    some.call(headings, (heading, i) => {
-      if (getHeadingTopPos(heading) > scrollTop + options.headingsOffset + 10) {
-        // Don't allow negative index value.
-        const index = (i === 0) ? i : i - 1
-        topHeader = headings[index]
-        return true
-      }
-      if (i === headings.length - 1) {
-        // This allows scrolling for the last heading on the page.
-        topHeader = headings[headings.length - 1]
-        return true
-      }
-    })
-    return topHeader
-  }
-
-  function updateUrlHashForHeader (headingsArray) {
-    const scrollTop = getScrollTop()
-    const topHeader = getTopHeader(headingsArray, scrollTop)
-    if (!topHeader || scrollTop < 5) {
-      if (!(window.location.hash === '#' || window.location.hash === '')) {
-        window.history.pushState(null, null, '#')
-      }
-    } else if (topHeader) {
-      const newHash = `#${topHeader.id}`
-      if (window.location.hash !== newHash) {
-        window.history.pushState(null, null, newHash)
-      }
-    }
-  }
-
-  return {
-    enableTocAnimation,
-    disableTocAnimation,
-    render,
-    updateToc,
-    getCurrentlyHighlighting,
-    getTopHeader,
-    getScrollTop,
-    updateUrlHashForHeader
-  }
-}
-
-
-/***/ }),
-
-/***/ "./src/js/default-options.js":
-/*!***********************************!*\
-  !*** ./src/js/default-options.js ***!
-  \***********************************/
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
-  // Where to render the table of contents.
-  tocSelector: '.js-toc',
-  // Or, you can pass in a DOM node instead
-  tocElement: null,
-  // Where to grab the headings to build the table of contents.
-  contentSelector: '.js-toc-content',
-  // Or, you can pass in a DOM node instead
-  contentElement: null,
-  // Which headings to grab inside of the contentSelector element.
-  headingSelector: 'h1, h2, h3',
-  // Headings that match the ignoreSelector will be skipped.
-  ignoreSelector: '.js-toc-ignore',
-  // For headings inside relative or absolute positioned
-  // containers within content.
-  hasInnerContainers: false,
-  // Main class to add to links.
-  linkClass: 'toc-link',
-  // Extra classes to add to links.
-  extraLinkClasses: '',
-  // Class to add to active links,
-  // the link corresponding to the top most heading on the page.
-  activeLinkClass: 'is-active-link',
-  // Main class to add to lists.
-  listClass: 'toc-list',
-  // Extra classes to add to lists.
-  extraListClasses: '',
-  // Class that gets added when a list should be collapsed.
-  isCollapsedClass: 'is-collapsed',
-  // Class that gets added when a list should be able
-  // to be collapsed but isn't necessarily collapsed.
-  collapsibleClass: 'is-collapsible',
-  // Class to add to list items.
-  listItemClass: 'toc-list-item',
-  // Class to add to active list items.
-  activeListItemClass: 'is-active-li',
-  // How many heading levels should not be collapsed.
-  // For example, number 6 will show everything since
-  // there are only 6 heading levels and number 0 will collapse them all.
-  // The sections that are hidden will open
-  // and close as you scroll to headings within them.
-  collapseDepth: 2,
-  // Smooth scrolling enabled.
-  scrollSmooth: true,
-  // Smooth scroll duration.
-  scrollSmoothDuration: 420,
-  // Smooth scroll offset.
-  scrollSmoothOffset: 0,
-  // Callback for scroll end.
-  scrollEndCallback: function (e) {},
-  // Headings offset between the headings and the top of
-  // the document (this is meant for minor adjustments).
-  headingsOffset: 2,
-  // Timeout between events firing to make sure it's
-  // not too rapid (for performance reasons).
-  throttleTimeout: 50,
-  // Element to add the positionFixedClass to.
-  positionFixedSelector: null,
-  // Fixed position class to add to make sidebar fixed after scrolling
-  // down past the fixedSidebarOffset.
-  positionFixedClass: 'is-position-fixed',
-  // fixedSidebarOffset can be any number but by default is set
-  // to auto which sets the fixedSidebarOffset to the sidebar
-  // element's offsetTop from the top of the document on init.
-  fixedSidebarOffset: 'auto',
-  // includeHtml can be set to true to include the HTML markup from the
-  // heading node instead of just including the innerText.
-  includeHtml: true,
-  // includeTitleTags automatically sets the html title tag of the link
-  // to match the title. This can be useful for SEO purposes or
-  // when truncating titles.
-  includeTitleTags: false,
-  // onclick function to apply to all links in toc. will be called with
-  // the event as the first parameter, and this can be used to stop,
-  // propagation, prevent default or perform action
-  onClick: function (e) {},
-  // orderedList can be set to false to generate unordered lists (ul)
-  // instead of ordered lists (ol)
-  orderedList: false,
-  // If there is a fixed article scroll container, set to calculate offset.
-  scrollContainer: null,
-  // prevent ToC DOM rendering if it's already rendered by an external system.
-  skipRendering: false,
-  // Optional callback to change heading labels.
-  // For example it can be used to cut down and put ellipses on multiline headings you deem too long.
-  // Called each time a heading is parsed. Expects a string and returns the modified label to display.
-  // Additionally, the attribute `data-heading-label` may be used on a heading to specify
-  // a shorter string to be used in the TOC.
-  // function (string) => string
-  headingLabelCallback: false,
-  // ignore headings that are hidden in DOM
-  ignoreHiddenElements: false,
-  // Optional callback to modify properties of parsed headings.
-  // The heading element is passed in node parameter and information
-  // parsed by default parser is provided in obj parameter.
-  // Function has to return the same or modified obj.
-  // The heading will be excluded from TOC if nothing is returned.
-  // function (object, HTMLElement) => object | void
-  headingObjectCallback: null,
-  // Set the base path, useful if you use a `base` tag in `head`.
-  basePath: '',
-  // Only takes affect when `tocSelector` is scrolling,
-  // keep the toc scroll position in sync with the content.
-  disableTocScrollSync: false,
-  // If this is null then just use `tocElement` or `tocSelector` instead
-  // assuming `disableTocScrollSync` is set to false. This allows for
-  // scrolling an outer element (like a nav panel w/ search) containing the toc.
-  tocScrollingWrapper: null,
-  // Offset for the toc scroll (top) position when scrolling the page.
-  // Only effective if `disableTocScrollSync` is false.
-  tocScrollOffset: 0,
-  // Enable the URL hash to update with the proper heading ID as
-  // a user scrolls the page.
-  enableUrlHashUpdateOnScroll: false
-});
-
-
-/***/ }),
-
-/***/ "./src/js/index-esm.js":
-/*!*****************************!*\
-  !*** ./src/js/index-esm.js ***!
-  \*****************************/
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "_buildHtml": () => (/* binding */ _buildHtml),
-/* harmony export */   "_headingsArray": () => (/* binding */ _headingsArray),
-/* harmony export */   "_options": () => (/* binding */ _options),
-/* harmony export */   "_parseContent": () => (/* binding */ _parseContent),
-/* harmony export */   "_scrollListener": () => (/* binding */ _scrollListener),
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__),
-/* harmony export */   "destroy": () => (/* binding */ destroy),
-/* harmony export */   "init": () => (/* binding */ init),
-/* harmony export */   "refresh": () => (/* binding */ refresh)
-/* harmony export */ });
-/* harmony import */ var _build_html_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./build-html.js */ "./src/js/build-html.js");
-/* harmony import */ var _default_options_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./default-options.js */ "./src/js/default-options.js");
-/* harmony import */ var _parse_content_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parse-content.js */ "./src/js/parse-content.js");
-/* harmony import */ var _scroll_smooth_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./scroll-smooth/index.js */ "./src/js/scroll-smooth/index.js");
-/* harmony import */ var _update_toc_scroll_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./update-toc-scroll.js */ "./src/js/update-toc-scroll.js");
-/* eslint no-var: off */
-/**
- * Tocbot
- * Tocbot creates a table of contents based on HTML headings on a page,
- * this allows users to easily jump to different sections of the document.
- * Tocbot was inspired by tocify (http://gregfranko.com/jquery.tocify.js/).
- * The main differences are that it works natively without any need for jquery or jquery UI).
- *
- * @author Tim Scanlin
- */
-
-
-
-
-
-
-
-// For testing purposes.
-let _options = {} // Object to store current options.
-let _buildHtml
-let _parseContent
-let _headingsArray
-let _scrollListener
-
-let clickListener
-
-/**
- * Initialize tocbot.
- * @param {object} customOptions
- */
-function init (customOptions) {
-  // Merge defaults with user options.
-  // Set to options variable at the top.
-  _options = extend(_default_options_js__WEBPACK_IMPORTED_MODULE_1__["default"], customOptions || {})
-
-  // Init smooth scroll if enabled (default).
-  if (_options.scrollSmooth) {
-    _options.duration = _options.scrollSmoothDuration
-    _options.offset = _options.scrollSmoothOffset
-
-    ;(0,_scroll_smooth_index_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_options)
-  }
-
-  // Pass options to these modules.
-  _buildHtml = (0,_build_html_js__WEBPACK_IMPORTED_MODULE_0__["default"])(_options)
-  _parseContent = (0,_parse_content_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_options)
-
-  // Destroy it if it exists first.
-  destroy()
-
-  const contentElement = getContentElement(_options)
-  if (contentElement === null) {
-    return
-  }
-
-  const tocElement = getTocElement(_options)
-  if (tocElement === null) {
-    return
-  }
-
-  // Get headings array.
-  _headingsArray = _parseContent.selectHeadings(
-    contentElement,
-    _options.headingSelector
-  )
-
-  // Return if no headings are found.
-  if (_headingsArray === null) {
-    return
-  }
-
-  // Build nested headings array.
-  const nestedHeadingsObj = _parseContent.nestHeadingsArray(_headingsArray)
-  const nestedHeadings = nestedHeadingsObj.nest
-
-  // Render.
-  if (!_options.skipRendering) {
-    _buildHtml.render(tocElement, nestedHeadings)
-  } else {
-    // No need to attach listeners if skipRendering is true, this was causing errors.
-    return this
-  }
-
-  // Update Sidebar and bind listeners.
-  _scrollListener = throttle((e) => {
-    _buildHtml.updateToc(_headingsArray)
-    !_options.disableTocScrollSync && (0,_update_toc_scroll_js__WEBPACK_IMPORTED_MODULE_4__["default"])(_options)
-
-    if (_options.enableUrlHashUpdateOnScroll) {
-      const enableUpdatingHash = _buildHtml.getCurrentlyHighlighting()
-      enableUpdatingHash && _buildHtml.updateUrlHashForHeader(_headingsArray)
-    }
-
-    const isTop =
-      e?.target?.scrollingElement &&
-      e.target.scrollingElement.scrollTop === 0
-    if ((e && (e.eventPhase === 0 || e.currentTarget === null)) || isTop) {
-      _buildHtml.updateToc(_headingsArray)
-      if (_options.scrollEndCallback) {
-        _options.scrollEndCallback(e)
-      }
-    }
-  }, _options.throttleTimeout)
-  _scrollListener()
-  if (
-    _options.scrollContainer &&
-    document.querySelector(_options.scrollContainer)
-  ) {
-    document
-      .querySelector(_options.scrollContainer)
-      .addEventListener('scroll', _scrollListener, false)
-    document
-      .querySelector(_options.scrollContainer)
-      .addEventListener('resize', _scrollListener, false)
-  } else {
-    document.addEventListener('scroll', _scrollListener, false)
-    document.addEventListener('resize', _scrollListener, false)
-  }
-
-  // Bind click listeners to disable animation.
-  let timeout = null
-  clickListener = throttle((event) => {
-    if (_options.scrollSmooth) {
-      _buildHtml.disableTocAnimation(event)
-    }
-    _buildHtml.updateToc(_headingsArray)
-    // Timeout to re-enable the animation.
-    timeout && clearTimeout(timeout)
-    timeout = setTimeout(() => {
-      _buildHtml.enableTocAnimation()
-    }, _options.scrollSmoothDuration)
-  }, _options.throttleTimeout)
-
-  if (
-    _options.scrollContainer &&
-    document.querySelector(_options.scrollContainer)
-  ) {
-    document
-      .querySelector(_options.scrollContainer)
-      .addEventListener('click', clickListener, false)
-  } else {
-    document.addEventListener('click', clickListener, false)
-  }
-}
-
-/**
- * Destroy tocbot.
- */
-function destroy () {
-  const tocElement = getTocElement(_options)
-  if (tocElement === null) {
-    return
-  }
-
-  if (!_options.skipRendering) {
-    // Clear HTML.
-    if (tocElement) {
-      tocElement.innerHTML = ''
-    }
-  }
-
-  // Remove event listeners.
-  if (
-    _options.scrollContainer &&
-    document.querySelector(_options.scrollContainer)
-  ) {
-    document
-      .querySelector(_options.scrollContainer)
-      .removeEventListener('scroll', _scrollListener, false)
-    document
-      .querySelector(_options.scrollContainer)
-      .removeEventListener('resize', _scrollListener, false)
-    if (_buildHtml) {
-      document
-        .querySelector(_options.scrollContainer)
-        .removeEventListener('click', clickListener, false)
-    }
-  } else {
-    document.removeEventListener('scroll', _scrollListener, false)
-    document.removeEventListener('resize', _scrollListener, false)
-    if (_buildHtml) {
-      document.removeEventListener('click', clickListener, false)
-    }
-  }
-}
-
-/**
- * Refresh tocbot.
- */
-function refresh (customOptions) {
-  destroy()
-  init(customOptions || _options)
-}
-
-// From: https://github.com/Raynos/xtend
-const hasOwnProp = Object.prototype.hasOwnProperty
-function extend (...args) {
-  const target = {}
-  for (let i = 0; i < args.length; i++) {
-    const source = args[i]
-    for (const key in source) {
-      if (hasOwnProp.call(source, key)) {
-        target[key] = source[key]
-      }
-    }
-  }
-  return target
-}
-
-// From: https://remysharp.com/2010/07/21/throttling-function-calls
-function throttle (fn, threshold, scope) {
-  threshold || (threshold = 250)
-  let last
-  let deferTimer
-  return function (...args) {
-    const context = scope || this
-    const now = +new Date()
-    if (last && now < last + threshold) {
-      // hold on to it
-      clearTimeout(deferTimer)
-      deferTimer = setTimeout(() => {
-        last = now
-        fn.apply(context, args)
-      }, threshold)
-    } else {
-      last = now
-      fn.apply(context, args)
-    }
-  }
-}
-
-function getContentElement (options) {
-  try {
-    return (
-      options.contentElement || document.querySelector(options.contentSelector)
-    )
-  } catch (e) {
-    console.warn(`Contents element not found: ${options.contentSelector}`) // eslint-disable-line
-    return null
-  }
-}
-
-function getTocElement (options) {
-  try {
-    return options.tocElement || document.querySelector(options.tocSelector)
-  } catch (e) {
-    console.warn(`TOC element not found: ${options.tocSelector}`) // eslint-disable-line
-    return null
-  }
-}
-
-// Add default export for easier use.
-const tocbot = {
-  _options,
-  _buildHtml,
-  _parseContent,
-  init,
-  destroy,
-  refresh
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (tocbot);
-
-
-/***/ }),
-
-/***/ "./src/js/parse-content.js":
-/*!*********************************!*\
-  !*** ./src/js/parse-content.js ***!
-  \*********************************/
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ parseContent)
-/* harmony export */ });
-/**
- * This file is responsible for parsing the content from the DOM and making
- * sure data is nested properly.
- *
- * @author Tim Scanlin
- */
-
-function parseContent (options) {
-  const reduce = [].reduce
-
-  /**
-   * Get the last item in an array and return a reference to it.
-   * @param {Array} array
-   * @return {Object}
-   */
-  function getLastItem (array) {
-    return array[array.length - 1]
-  }
-
-  /**
-   * Get heading level for a heading dom node.
-   * @param {HTMLElement} heading
-   * @return {Number}
-   */
-  function getHeadingLevel (heading) {
-    return +heading.nodeName.toUpperCase().replace('H', '')
-  }
-
-  /**
-   * Determine whether the object is an HTML Element.
-   * Also works inside iframes. HTML Elements might be created by the parent document.
-   * @param {Object} maybeElement
-   * @return {Number}
-   */
-  function isHTMLElement (maybeElement) {
-    try {
-      return (
-        maybeElement instanceof window.HTMLElement ||
-        maybeElement instanceof window.parent.HTMLElement
-      )
-    } catch (e) {
-      return maybeElement instanceof window.HTMLElement
-    }
-  }
-
-  /**
-   * Get important properties from a heading element and store in a plain object.
-   * @param {HTMLElement} heading
-   * @return {Object}
-   */
-  function getHeadingObject (heading) {
-    // each node is processed twice by this method because nestHeadingsArray() and addNode() calls it
-    // first time heading is real DOM node element, second time it is obj
-    // that is causing problem so I am processing only original DOM node
-    if (!isHTMLElement(heading)) return heading
-
-    if (options.ignoreHiddenElements && (!heading.offsetHeight || !heading.offsetParent)) {
-      return null
-    }
-
-    const headingLabel = heading.getAttribute('data-heading-label') ||
-      (options.headingLabelCallback ? String(options.headingLabelCallback(heading.innerText)) : (heading.innerText || heading.textContent).trim())
-    const obj = {
-      id: heading.id,
-      children: [],
-      nodeName: heading.nodeName,
-      headingLevel: getHeadingLevel(heading),
-      textContent: headingLabel
-    }
-
-    obj.childNodes = heading.childNodes
-
-    if (options.headingObjectCallback) {
-      return options.headingObjectCallback(obj, heading)
-    }
-
-    return obj
-  }
-
-  /**
-   * Add a node to the nested array.
-   * @param {Object} node
-   * @param {Array} nest
-   * @return {Array}
-   */
-  function addNode (node, nest) {
-    const obj = getHeadingObject(node)
-    const level = obj.headingLevel
-    let array = nest
-    let lastItem = getLastItem(array)
-    const lastItemLevel = lastItem
-      ? lastItem.headingLevel
-      : 0
-    let counter = level - lastItemLevel
-
-    while (counter > 0) {
-      lastItem = getLastItem(array)
-      // Handle case where there are multiple h5+ in a row.
-      if (lastItem && level === lastItem.headingLevel) {
-        break
-      } else if (lastItem && lastItem.children !== undefined) {
-        array = lastItem.children
-      }
-      counter--
-    }
-
-    if (level >= options.collapseDepth) {
-      obj.isCollapsed = true
-    }
-
-    array.push(obj)
-    return array
-  }
-
-  /**
-   * Select headings in content area, exclude any selector in options.ignoreSelector
-   * @param {HTMLElement} contentElement
-   * @param {Array} headingSelector
-   * @return {Array}
-   */
-  function selectHeadings (contentElement, headingSelector) {
-    let selectors = headingSelector
-    if (options.ignoreSelector) {
-      selectors = headingSelector.split(',')
-        .map(function mapSelectors (selector) {
-          return `${selector.trim()}:not(${options.ignoreSelector})`
-        })
-    }
-    try {
-      return contentElement.querySelectorAll(selectors)
-    } catch (e) {
-      console.warn(`Headers not found with selector: ${selectors}`); // eslint-disable-line
-      return null
-    }
-  }
-
-  /**
-   * Nest headings array into nested arrays with 'children' property.
-   * @param {Array} headingsArray
-   * @return {Object}
-   */
-  function nestHeadingsArray (headingsArray) {
-    return reduce.call(headingsArray, function reducer (prev, curr) {
-      const currentHeading = getHeadingObject(curr)
-      if (currentHeading) {
-        addNode(currentHeading, prev.nest)
-      }
-      return prev
-    }, {
-      nest: []
-    })
-  }
-
-  return {
-    nestHeadingsArray,
-    selectHeadings
-  }
-}
-
-
-/***/ }),
-
-/***/ "./src/js/scroll-smooth/index.js":
-/*!***************************************!*\
-  !*** ./src/js/scroll-smooth/index.js ***!
-  \***************************************/
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ initSmoothScrolling)
-/* harmony export */ });
-/* eslint no-var: off */
-/* globals location, requestAnimationFrame */
-
-function initSmoothScrolling (options) {
-  // if (isCssSmoothSCrollSupported()) { return }
-
-  var duration = options.duration
-  var offset = options.offset
-  if (typeof window === 'undefined' || typeof location === 'undefined') return
-
-  var pageUrl = location.hash
-    ? stripHash(location.href)
-    : location.href
-
-  delegatedLinkHijacking()
-
-  function delegatedLinkHijacking () {
-    document.body.addEventListener('click', onClick, false)
-
-    function onClick (e) {
-      if (
-        !isInPageLink(e.target) ||
-        e.target.className.indexOf('no-smooth-scroll') > -1 ||
-        (e.target.href.charAt(e.target.href.length - 2) === '#' &&
-        e.target.href.charAt(e.target.href.length - 1) === '!') ||
-        e.target.className.indexOf(options.linkClass) === -1) {
-        return
-      }
-
-      // Don't prevent default or hash doesn't change.
-      // e.preventDefault()
-
-      jump(e.target.hash, {
-        duration,
-        offset,
-        callback: function () {
-          setFocus(e.target.hash)
-        }
-      })
-    }
-  }
-
-  function isInPageLink (n) {
-    return n.tagName.toLowerCase() === 'a' &&
-      (n.hash.length > 0 || n.href.charAt(n.href.length - 1) === '#') &&
-      (stripHash(n.href) === pageUrl || stripHash(n.href) + '#' === pageUrl)
-  }
-
-  function stripHash (url) {
-    return url.slice(0, url.lastIndexOf('#'))
-  }
-
-  // function isCssSmoothSCrollSupported () {
-  //   return 'scrollBehavior' in document.documentElement.style
-  // }
-
-  // Adapted from:
-  // https://www.nczonline.net/blog/2013/01/15/fixing-skip-to-content-links/
-  function setFocus (hash) {
-    var element = document.getElementById(hash.substring(1))
-
-    if (element) {
-      if (!/^(?:a|select|input|button|textarea)$/i.test(element.tagName)) {
-        element.tabIndex = -1
-      }
-
-      element.focus()
-    }
-  }
-}
-
-function jump (target, options) {
-  var start = window.pageYOffset
-  var opt = {
-    duration: options.duration,
-    offset: options.offset || 0,
-    callback: options.callback,
-    easing: options.easing || easeInOutQuad
-  }
-  // This makes ids that start with a number work: ('[id="' + decodeURI(target).split('#').join('') + '"]')
-  // DecodeURI for nonASCII hashes, they was encoded, but id was not encoded, it lead to not finding the tgt element by id.
-  // And this is for IE: document.body.scrollTop
-  // Handle decoded and non-decoded URIs since sometimes URLs automatically transform them (support for internation chars).
-  var tgt = document.querySelector('[id="' + decodeURI(target).split('#').join('') + '"]') ||
-    document.querySelector('[id="' + (target).split('#').join('') + '"]')
-  var distance = typeof target === 'string'
-    ? opt.offset + (
-      target
-        ? (tgt && tgt.getBoundingClientRect().top) || 0 // handle non-existent links better.
-        : -(document.documentElement.scrollTop || document.body.scrollTop))
-    : target
-  var duration = typeof opt.duration === 'function'
-    ? opt.duration(distance)
-    : opt.duration
-  var timeStart
-  var timeElapsed
-
-  requestAnimationFrame(function (time) { timeStart = time; loop(time) })
-  function loop (time) {
-    timeElapsed = time - timeStart
-
-    window.scrollTo(0, opt.easing(timeElapsed, start, distance, duration))
-
-    if (timeElapsed < duration) { requestAnimationFrame(loop) } else { end() }
-  }
-
-  function end () {
-    window.scrollTo(0, start + distance)
-
-    if (typeof opt.callback === 'function') { opt.callback() }
-  }
-
-  // Robert Penner's easeInOutQuad - http://robertpenner.com/easing/
-  function easeInOutQuad (t, b, c, d) {
-    t /= d / 2
-    if (t < 1) return c / 2 * t * t + b
-    t--
-    return -c / 2 * (t * (t - 2) - 1) + b
-  }
-}
-
-
-/***/ }),
-
-/***/ "./src/js/update-toc-scroll.js":
-/*!*************************************!*\
-  !*** ./src/js/update-toc-scroll.js ***!
-  \*************************************/
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ updateTocScroll)
-/* harmony export */ });
-const SCROLL_LEEWAY = 30
-function updateTocScroll (options) {
-  const toc = options.tocScrollingWrapper || options.tocElement || document.querySelector(options.tocSelector)
-  if (toc && toc.scrollHeight > toc.clientHeight) {
-    const activeItem = toc.querySelector(`.${options.activeListItemClass}`)
-    if (activeItem) {
-      // Determine container top and bottom
-      const cTop = toc.scrollTop
-      const cBottom = cTop + toc.clientHeight
-
-      // Determine element top and bottom
-      const eTop = activeItem.offsetTop
-      const eBottom = eTop + activeItem.clientHeight
-
-      // Check if out of view
-      // Above scroll view
-      if (eTop < cTop + options.tocScrollOffset) {
-        toc.scrollTop -= (cTop - eTop) + options.tocScrollOffset
-      // Below scroll view
-      } else if (eBottom > cBottom - options.tocScrollOffset - SCROLL_LEEWAY) {
-        toc.scrollTop += (eBottom - cBottom) + options.tocScrollOffset + (2 * SCROLL_LEEWAY)
-      }
-    }
-  }
-}
-
-
-/***/ })
-
-/******/ 	});
-/************************************************************************/
-/******/ 	// The module cache
-/******/ 	var __webpack_module_cache__ = {};
-/******/ 	
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/ 		// Check if module is in cache
-/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
-/******/ 		if (cachedModule !== undefined) {
-/******/ 			return cachedModule.exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = __webpack_module_cache__[moduleId] = {
-/******/ 			// no module.id needed
-/******/ 			// no module.loaded needed
-/******/ 			exports: {}
-/******/ 		};
-/******/ 	
-/******/ 		// Execute the module function
-/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
-/******/ 	
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/ 	
-/************************************************************************/
-/******/ 	/* webpack/runtime/define property getters */
-/******/ 	(() => {
-/******/ 		// define getter functions for harmony exports
-/******/ 		__webpack_require__.d = (exports, definition) => {
-/******/ 			for(var key in definition) {
-/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
-/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
-/******/ 				}
-/******/ 			}
-/******/ 		};
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
-/******/ 	(() => {
-/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/make namespace object */
-/******/ 	(() => {
-/******/ 		// define __esModule on exports
-/******/ 		__webpack_require__.r = (exports) => {
-/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 			}
-/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 		};
-/******/ 	})();
-/******/ 	
-/************************************************************************/
-var __webpack_exports__ = {};
-// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
-(() => {
-/*!******************************!*\
-  !*** ./src/js/index-dist.js ***!
-  \******************************/
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _index_esm_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index-esm.js */ "./src/js/index-esm.js");
-/* globals define */
-
-(function (root, factory) {
-  if (typeof define === 'function' && define.amd) {
-    define([], factory(root))
-  } else if (typeof exports === 'object') {
-    module.exports = factory(root)
-  } else {
-    root.tocbot = factory(root)
-  }
-})(typeof global !== 'undefined' ? global : window || global, function (root) {
-  'use strict'
-
-  // Just return if its not a browser.
-  const supports =
-    !!root &&
-    !!root.document &&
-    !!root.document.querySelector &&
-    !!root.addEventListener // Feature test
-  if (typeof window === 'undefined' && !supports) {
-    return
-  }
-
-  // Make tocbot available globally.
-  root.tocbot = _index_esm_js__WEBPACK_IMPORTED_MODULE_0__
-
-  return _index_esm_js__WEBPACK_IMPORTED_MODULE_0__
-})
-
-})();
-
-/******/ })()
-;
\ No newline at end of file
diff --git a/jekyll-assets/scripts/whitepaper.js b/jekyll-assets/scripts/whitepaper.js
new file mode 100644
index 0000000000..2914be126f
--- /dev/null
+++ b/jekyll-assets/scripts/whitepaper.js
@@ -0,0 +1,10 @@
+var coverImages = document.querySelectorAll('.whitepaper div.coverimage');
+
+for (var i = 0; i < coverImages.length; i++) {
+  coverImages[i].addEventListener('click', clickCover, false);
+}
+
+function clickCover() {
+	var url = this.getAttribute("data-link");
+	window.open(url);
+}
\ No newline at end of file
diff --git a/tests/fixtures/microcontrollers/c_sdk/official_sdk.adoc b/tests/fixtures/microcontrollers/c_sdk/official_sdk.adoc
index faca0f709e..a2b4473029 100644
--- a/tests/fixtures/microcontrollers/c_sdk/official_sdk.adoc
+++ b/tests/fixtures/microcontrollers/c_sdk/official_sdk.adoc
@@ -1,4 +1,4 @@
-== Raspberry Pi Pico C/C++ SDK
+== Raspberry Pi Pico C/{cpp} SDK
 
 Our official C SDK can be used from the command line, or from popular integrated development environments like Visual Studio Code, Eclipse, and CLion. To get started, download our C/{cpp} SDK and Examples, and take a look at our 'https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf[getting started]' documentation to get going. Or for a quick setup see the next section.
 
@@ -29,4 +29,4 @@ Documentation introducing working with Wi-Fi and Bluetooth on Raspberry Pi Pico
 [NOTE]
 ====
 If you are building applications with the C/{cpp} SDK for Raspberry Pi Pico W and, to connect to a network you will need to pass `-DPICO_BOARD=pico_w -DWIFI_SSID="Your Network" -DWIFI_PASSWORD="Your Password"` to CMake. If you only need to enable Bluetooth support then you do not need to pass a SSID and password, but still need to pass the `-DPICO_BOARD=pico_w` string to CMake.
-====
+====
\ No newline at end of file

From fe9bf69ca0b0c6fb6d7cb7517d7df52e4569ba85 Mon Sep 17 00:00:00 2001
From: nate contino <ncontino@u.rochester.edu>
Date: Thu, 12 Dec 2024 10:21:35 +0000
Subject: [PATCH 03/11] Revert "Revert "Roll out latest updates to production"
 until CSS cache issue can be fixed"

---
 Gemfile                                       |    2 +-
 Gemfile.lock                                  |    4 +-
 Makefile                                      |    2 +-
 _config.yml                                   |    3 +-
 .../accessories/ai-hat-plus/about.adoc        |    2 +-
 .../asciidoc/accessories/ai-kit/about.adoc    |    2 +-
 .../accessories/sense-hat/software.adoc       |    2 +-
 .../computers/ai/getting-started.adoc         |   65 +-
 .../computers/getting-started/setting-up.adoc |   10 +-
 .../computers/raspberry-pi/boot-eeprom.adoc   |   12 +-
 .../computers/raspberry-pi/boot-nvme.adoc     |   26 +-
 .../computers/raspberry-pi/introduction.adoc  |    2 +-
 .../raspberry-pi/revision-codes.adoc          |   54 +
 .../microcontrollers/c_sdk/official_sdk.adoc  |    2 +-
 documentation/index.json                      |    2 +-
 jekyll-assets/_includes/contribute.html       |    5 -
 jekyll-assets/_includes/copyright.html        |    7 -
 jekyll-assets/_includes/footer.html           |   84 +-
 jekyll-assets/_includes/head.html             |    9 +-
 jekyll-assets/_includes/header.html           |   64 +-
 jekyll-assets/_includes/legal.html            |    9 +
 jekyll-assets/_includes/mobile_nav.html       |   40 -
 jekyll-assets/_includes/nav.html              |   56 -
 jekyll-assets/_includes/scripts.html          |   90 --
 jekyll-assets/_includes/subtitle.html         |    3 -
 jekyll-assets/_includes/subtitle404.html      |    3 -
 jekyll-assets/_includes/theme.html            |    3 +
 jekyll-assets/_includes/toptitle.html         |    4 -
 jekyll-assets/_includes/toptitle404.html      |    4 -
 jekyll-assets/_layouts/boxes.html             |   30 +-
 jekyll-assets/_layouts/docs.html              |  208 ++-
 jekyll-assets/css/asciidoctor-tabs.css        |   25 +-
 jekyll-assets/css/boxes.css                   |   83 --
 jekyll-assets/css/search.svg                  |    2 +-
 jekyll-assets/css/style.css                   | 1110 ++++++++++++---
 jekyll-assets/css/syntax-highlighting.css     |   40 +-
 jekyll-assets/css/tabs.css                    |   82 --
 jekyll-assets/css/tocbot.css                  |   67 +
 jekyll-assets/css/whitepaper_coverimage.png   |  Bin 8440 -> 0 bytes
 jekyll-assets/favicon.ico                     |  Bin 0 -> 38292 bytes
 jekyll-assets/scripts/jquery-1.12.4.min.js    |    5 -
 .../scripts/jquery-ui-1.13.0.custom.min.js    |    6 -
 jekyll-assets/scripts/jquery.tocify.js        |  984 --------------
 jekyll-assets/scripts/nav.js                  |   83 --
 .../scripts/noframework.waypoints.min.js      |    7 -
 jekyll-assets/scripts/theme.js                |   41 +
 jekyll-assets/scripts/toc.js                  |   98 ++
 jekyll-assets/scripts/tocbot.js               | 1205 +++++++++++++++++
 jekyll-assets/scripts/whitepaper.js           |   10 -
 .../microcontrollers/c_sdk/official_sdk.adoc  |    4 +-
 50 files changed, 2807 insertions(+), 1854 deletions(-)
 delete mode 100644 jekyll-assets/_includes/contribute.html
 delete mode 100644 jekyll-assets/_includes/copyright.html
 create mode 100644 jekyll-assets/_includes/legal.html
 delete mode 100644 jekyll-assets/_includes/mobile_nav.html
 delete mode 100644 jekyll-assets/_includes/nav.html
 delete mode 100644 jekyll-assets/_includes/scripts.html
 delete mode 100644 jekyll-assets/_includes/subtitle.html
 delete mode 100644 jekyll-assets/_includes/subtitle404.html
 create mode 100644 jekyll-assets/_includes/theme.html
 delete mode 100644 jekyll-assets/_includes/toptitle.html
 delete mode 100644 jekyll-assets/_includes/toptitle404.html
 delete mode 100644 jekyll-assets/css/boxes.css
 delete mode 100644 jekyll-assets/css/tabs.css
 create mode 100644 jekyll-assets/css/tocbot.css
 delete mode 100644 jekyll-assets/css/whitepaper_coverimage.png
 create mode 100644 jekyll-assets/favicon.ico
 delete mode 100644 jekyll-assets/scripts/jquery-1.12.4.min.js
 delete mode 100644 jekyll-assets/scripts/jquery-ui-1.13.0.custom.min.js
 delete mode 100644 jekyll-assets/scripts/jquery.tocify.js
 delete mode 100644 jekyll-assets/scripts/nav.js
 delete mode 100644 jekyll-assets/scripts/noframework.waypoints.min.js
 create mode 100644 jekyll-assets/scripts/theme.js
 create mode 100644 jekyll-assets/scripts/toc.js
 create mode 100644 jekyll-assets/scripts/tocbot.js
 delete mode 100644 jekyll-assets/scripts/whitepaper.js

diff --git a/Gemfile b/Gemfile
index 2b5e87b73a..5a5ccbb7f0 100644
--- a/Gemfile
+++ b/Gemfile
@@ -35,7 +35,7 @@ end
 # Performance-booster for watching directories on Windows
 gem "wdm", "~> 0.2.0", :install_if => Gem.win_platform?
 
-gem "nokogiri", "~> 1.16"
+gem "nokogiri", "~> 1.17"
 
 # So we can add custom element templates
 gem 'slim', '~> 5.2.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index bff9fa60a0..6b325d2120 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -62,7 +62,7 @@ GEM
       jekyll (>= 3.5, < 5.0)
       jekyll-feed (~> 0.9)
       jekyll-seo-tag (~> 2.1)
-    nokogiri (1.16.8)
+    nokogiri (1.17.0)
       mini_portile2 (~> 2.8.2)
       racc (~> 1.4)
     pathutil (0.16.2)
@@ -105,7 +105,7 @@ DEPENDENCIES
   jekyll-asciidoc
   jekyll-feed (~> 0.17)
   minima (~> 2.5)
-  nokogiri (~> 1.16)
+  nokogiri (~> 1.17)
   slim (~> 5.2.1)
   thread_safe (~> 0.3.5)
   tzinfo (~> 2.0)
diff --git a/Makefile b/Makefile
index e3a8c396e7..711219f453 100644
--- a/Makefile
+++ b/Makefile
@@ -118,7 +118,7 @@ html: run_ninja
 
 # Build the html output files and additionally run a small webserver for local previews
 serve_html: run_ninja
-	$(JEKYLL_CMD) serve
+	$(JEKYLL_CMD) serve --watch
 
 # Delete all the files created by the 'html' target
 clean_html:
diff --git a/_config.yml b/_config.yml
index 66a8c67ba3..4d740515b5 100644
--- a/_config.yml
+++ b/_config.yml
@@ -17,8 +17,9 @@ title: Raspberry Pi Documentation
 description: >- # this means to ignore newlines until "baseurl:"
   Raspberry Pi Documentation.
 baseurl: "/documentation" # the subpath of your site, e.g. /blog
-url: "" # the base hostname & protocol for your site, e.g. http://example.com
+url: "https://www.raspberrypi.com/documentation" # the base hostname & protocol for your site, e.g. http://example.com
 githuburl: "https://github.com/raspberrypi/documentation/"
+mainsite: https://raspberrypi.com/
 githubbranch: master
 githubbranch_edit: develop
 
diff --git a/documentation/asciidoc/accessories/ai-hat-plus/about.adoc b/documentation/asciidoc/accessories/ai-hat-plus/about.adoc
index be22d08694..98f1923bf5 100644
--- a/documentation/asciidoc/accessories/ai-hat-plus/about.adoc
+++ b/documentation/asciidoc/accessories/ai-hat-plus/about.adoc
@@ -72,4 +72,4 @@ image::images/ai-hat-plus-installation-02.png[width="60%"]
 
 == Get started with AI on your Raspberry Pi
 
-To start running AI accelerated applications on your Raspberry Pi, check out our xref:../computers/ai.adoc[Getting Started with AI] guide.
+To start running AI accelerated applications on your Raspberry Pi, check out our xref:../computers/ai.adoc[Getting Started with the AI Kit and AI HAT+] guide.
diff --git a/documentation/asciidoc/accessories/ai-kit/about.adoc b/documentation/asciidoc/accessories/ai-kit/about.adoc
index 10b11f42af..bc93a483f5 100644
--- a/documentation/asciidoc/accessories/ai-kit/about.adoc
+++ b/documentation/asciidoc/accessories/ai-kit/about.adoc
@@ -90,4 +90,4 @@ WARNING: Always disconnect your Raspberry Pi from power before connecting or dis
 
 == Get started with AI on your Raspberry Pi
 
-To start running AI accelerated applications on your Raspberry Pi, check out our xref:../computers/ai.adoc[Getting Started with AI] guide.
+To start running AI accelerated applications on your Raspberry Pi, check out our xref:../computers/ai.adoc[Getting Started with the AI Kit and AI HAT+] guide.
diff --git a/documentation/asciidoc/accessories/sense-hat/software.adoc b/documentation/asciidoc/accessories/sense-hat/software.adoc
index f4e7791c86..33261939a2 100644
--- a/documentation/asciidoc/accessories/sense-hat/software.adoc
+++ b/documentation/asciidoc/accessories/sense-hat/software.adoc
@@ -104,7 +104,7 @@ After installation, example code can be found under `/usr/src/sense-hat/examples
 
 Complete documentation for the library can be found at https://sense-hat.readthedocs.io/en/latest/[sense-hat.readthedocs.io].
 
-=== Use the Sense HAT with {cpp}
+=== Use the Sense HAT with C++
 
 https://github.com/RPi-Distro/RTIMULib[RTIMULib] is a {cpp} and Python library that makes it easy to use 9-dof and 10-dof IMUs with embedded Linux systems. A pre-calibrated settings file is provided in `/etc/RTIMULib.ini`, which is also copied and used by `sense-hat`. The included examples look for `RTIMULib.ini` in the current working directory, so you may wish to copy the file there to get more accurate data.
 
diff --git a/documentation/asciidoc/computers/ai/getting-started.adoc b/documentation/asciidoc/computers/ai/getting-started.adoc
index c3767bf77c..30da7715f2 100644
--- a/documentation/asciidoc/computers/ai/getting-started.adoc
+++ b/documentation/asciidoc/computers/ai/getting-started.adoc
@@ -60,6 +60,8 @@ Serial Number: HLDDLBB234500054
 Part Number: HM21LB1C2LAE
 Product Name: HAILO-8L AI ACC M.2 B+M KEY MODULE EXT TMP
 ----
+
+NOTE: AI HAT+ devices may show `<N/A>` for `Serial Number`, `Part Number` and `Product Name`. This is expected, and does not impact functionality.
 +
 Additionally, you can run `dmesg | grep -i hailo` to check the kernel logs, which should yield output similar to the following:
 +
@@ -96,24 +98,20 @@ The `rpicam-apps` suite of camera applications implements a xref:camera_software
 
 The following demos use xref:camera_software.adoc#rpicam-hello[`rpicam-hello`], which by default displays a preview window. However, you can use other `rpicam-apps` instead, including xref:camera_software.adoc#rpicam-vid[`rpicam-vid`] and xref:camera_software.adoc#rpicam-still[`rpicam-still`]. You may need to add or modify some command line options to make the demo commands compatible with alternative applications.
 
-To begin, download the post-processing JSON files required for the demos. These files determine which post-processing stages to run and configure the behaviour of each stage. For example, you can enable, disable, strengthen, or weaken the strength of the temporal filtering in the object detection demos. Or you could enable or disable the output mask drawing in the segmentation demo.
-
-To download the entire collection of post-processing JSON files, clone the `rpicam-apps` repo. Run the following command to clone only the most recent commit from the repo, saving space:
+To begin, run the following command to install the latest `rpicam-apps` software package:
 
 [source,console]
 ----
-$ git clone --depth 1 https://github.com/raspberrypi/rpicam-apps.git ~/rpicam-apps
+$ sudo apt update && sudo apt install rpicam-apps
 ----
 
-TIP: The commands provided in subsequent sections use the JSON files in this repository. To make it easy to reference these files, this command creates the cloned `rpicam-apps` directory in your home folder. If you modify the location of this directory, you must also alter the demo commands below to reference the new location of the JSON files.
-
 ==== Object Detection
 
 This demo displays bounding boxes around objects detected by a neural network. To disable the viewfinder, use the xref:camera_software.adoc#nopreview[`-n`] flag. To return purely textual output describing the objects detected, add the `-v 2` option. Run the following command to try the demo on your Raspberry Pi:
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov6_inference.json --lores-width 640 --lores-height 640
+$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov6_inference.json
 ----
 
 Alternatively, you can try another model with different trade-offs in performance and efficiency.
@@ -122,21 +120,21 @@ To run the demo with the Yolov8 model, run the following command:
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov8_inference.json --lores-width 640 --lores-height 640
+$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov8_inference.json
 ----
 
 To run the demo with the YoloX model, run the following command:
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolox_inference.json --lores-width 640 --lores-height 640
+$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolox_inference.json
 ----
 
 To run the demo with the Yolov5 Person and Face model, run the following command:
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov5_personface.json --lores-width 640 --lores-height 640
+$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov5_personface.json
 ----
 
 ==== Image Segmentation
@@ -145,7 +143,7 @@ This demo performs object detection and segments the object by drawing a colour
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov5_segmentation.json --lores-width 640 --lores-height 640 --framerate 20
+$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov5_segmentation.json --framerate 20
 ----
 
 ==== Pose Estimation
@@ -154,8 +152,51 @@ This demo performs 17-point human pose estimation, drawing lines connecting the
 
 [source,console]
 ----
-$ rpicam-hello -t 0 --post-process-file ~/rpicam-apps/assets/hailo_yolov8_pose.json --lores-width 640 --lores-height 640
+$ rpicam-hello -t 0 --post-process-file /usr/share/rpi-camera-assets/hailo_yolov8_pose.json
+----
+
+=== Alternative Package Versions
+
+The AI Kit and AI HAT+ do not function if there is a version mismatch between the Hailo software packages and device drivers. In addition, Hailo's neural network tooling may require a particular version for generated model files. If you require a specific version, complete the following steps to install the proper versions of all of the dependencies:
+
+. If you have previously used `apt-mark` to hold any of the relevant packages, you may need to unhold them:
++
+[source,console]
+----
+$ sudo apt-mark unhold hailo-tappas-core hailort hailo-dkms
+----
+
+. Install the required version of the software packages:
++
+[tabs%sync]
+======
+v4.18::
+To install version 4.18 of Hailo's neural network tooling:
++
++
+[source,console]
+----
+$ sudo apt install hailo-tappas-core=3.29.1 hailort=4.18.0 hailo-dkms=4.18.0-2
+----
++
+[source,console]
+----
+$ sudo apt-mark hold hailo-tappas-core hailort hailo-dkms
+----
+
+v4.17::
+To install version 4.17 of Hailo's neural network tooling:
++
+[source,console]
+----
+$ sudo apt install hailo-tappas-core-3.28.2 hailort=4.17.0 hailo-dkms=4.17.0-1
+----
++
+[source,console]
+----
+$ sudo apt-mark hold hailo-tappas-core hailort hailo-dkms
 ----
+======
 
 === Further Resources
 
diff --git a/documentation/asciidoc/computers/getting-started/setting-up.adoc b/documentation/asciidoc/computers/getting-started/setting-up.adoc
index 60bf49c205..a1516a9918 100644
--- a/documentation/asciidoc/computers/getting-started/setting-up.adoc
+++ b/documentation/asciidoc/computers/getting-started/setting-up.adoc
@@ -141,12 +141,10 @@ All variants of the Raspberry Pi 1, 2, 3, and 4 include a 3.5mm auxiliary http:/
 
 The following Raspberry Pi models come with Wi-Fi and Bluetooth connectivity:
 
-* Raspberry Pi 5
-* Raspberry Pi 4
-* Raspberry Pi 3B+
-* Raspberry Pi 3
-* Raspberry Pi Zero W
-* Rsapberry Pi Zero 2 W
+* Flagship models since Raspberry Pi 3 Model B
+* All Zero W models
+* All Pico W models
+* Compute Modules configured with wireless (available since CM4)
 
 The "Model B" suffix indicates variants with an Ethernet port; "Model A" indicates no Ethernet port. If your Raspberry Pi doesn't have an Ethernet port, you can still connect to a wired internet connection using a USB-to-Ethernet adapter.
 
diff --git a/documentation/asciidoc/computers/raspberry-pi/boot-eeprom.adoc b/documentation/asciidoc/computers/raspberry-pi/boot-eeprom.adoc
index 31266b4c58..0e27031dc7 100644
--- a/documentation/asciidoc/computers/raspberry-pi/boot-eeprom.adoc
+++ b/documentation/asciidoc/computers/raspberry-pi/boot-eeprom.adoc
@@ -68,20 +68,22 @@ The `latest` bootloader updates more often to include the latest fixes and impro
 
 Advanced users can switch to the `latest` bootloader to get the latest functionality.
 
-Run the following command to start `raspi-config`.
+First, ensure that your Raspberry Pi runs the latest software. Run the following command to update:
 
 [source,console]
 ----
-$ sudo raspi-config
+$ sudo apt update && sudo apt full-upgrade
 ----
 
-Navigate to `Advanced Options` and then `Bootloader Version`. Select `Latest` and choose `Yes` to confirm. Select `Finish` and confirm you want to reboot. After the reboot, open a command prompt again and update your system:
+Next, run the following command to open `raspi-config`:
 
 [source,console]
 ----
-$ sudo apt update
+$ sudo raspi-config
 ----
 
+Navigate to `Advanced Options` > `Bootloader Version`. Select `Latest`, then choose `Yes` to confirm. Select `Finish` and confirm that you want to reboot.
+
 If you run `sudo rpi-eeprom-update`, you should see that a more recent version of the bootloader is available and it's the `latest` release.
 
 ----
@@ -275,7 +277,7 @@ For more information, see xref:raspberry-pi.adoc#eeprom-boot-flow[EEPROM bootflo
 | Bootloader EEPROM image
 
 | `pieeprom.bin`
-| Bootloader EEPROM image - same as pieeprom.upd but changes recovery.bin behaviour
+| Bootloader EEPROM image - same as `pieeprom.upd` but changes `recovery.bin` behaviour to not rename itself to `RECOVERY.000`.
 
 | `pieeprom.sig`
 | The sha256 checksum of bootloader image (pieeprom.upd/pieeprom.bin)
diff --git a/documentation/asciidoc/computers/raspberry-pi/boot-nvme.adoc b/documentation/asciidoc/computers/raspberry-pi/boot-nvme.adoc
index 22951fd1b2..5660e75653 100644
--- a/documentation/asciidoc/computers/raspberry-pi/boot-nvme.adoc
+++ b/documentation/asciidoc/computers/raspberry-pi/boot-nvme.adoc
@@ -1,6 +1,6 @@
 == NVMe SSD boot
 
-NVMe (Non-Volatile Memory express) is a standard for external storage access over a PCIe bus. You can connect NVMe drives via the PCIe slot on a Compute Module 4 (CM4) IO board or Raspberry Pi 5. With some additional configuration, you can boot from an NVMe drive.
+NVMe (Non-Volatile Memory express) is a standard for external storage access over a PCIe bus. You can connect NVMe drives via the PCIe slot on a IO Boards since Compute Module 4 and or Raspberry Pi 5 using an M.2 HAT+. With some additional configuration, you can boot from an NVMe drive.
 
 === Prerequisites
 
@@ -20,26 +20,14 @@ brw-rw---- 1 root disk 259, 0 Mar  9 14:58 /dev/nvme0n1
 
 ==== Software
 
-Run the following command to see what firmware you're running:
+First, ensure that your Raspberry Pi runs the latest software. Run the following command to update:
 
 [source,console]
 ----
-$ sudo rpi-eeprom-update
+$ sudo apt update && sudo apt full-upgrade
 ----
 
-For Raspberry Pi 5, you need firmware released December 6, 2023 or later.
-
-For CM4, NVMe boot support was introduced in July 2021. You need a version of the following software released since that date:
-
-* the bootloader
-* VideoCore firmware
-* the Raspberry Pi OS Linux kernel
-
-The latest Raspberry Pi OS release has everything you need. Use  xref:getting-started.adoc#raspberry-pi-imager[Raspberry Pi Imager] to install a Raspberry Pi OS image onto your drive.
-
-=== Edit EEPROM boot order
-
-For Raspberry Pi 5, you need to boot Raspberry Pi OS to edit the boot order. You can boot your Raspberry Pi from an SD card or USB drive for this step. The EEPROM configuration persists even when you change the boot device, since the EEPROM configuration is stored on the board itself.
+=== Edit the bootloader boot priority
 
 Use the Raspberry Pi Configuration CLI to update the bootloader:
 
@@ -48,16 +36,14 @@ Use the Raspberry Pi Configuration CLI to update the bootloader:
 $ sudo raspi-config
 ----
 
-Under `Advanced Options` > `Bootloader Version`, choose `Latest`. Then, exit `raspi-config` with `Finish` or the *Escape* key.
-
-Run the following command to update your firmware to the latest version:
+Under `Advanced Options` > `Bootloader Order`, specify that the bootloader should attempt to boot from `NVMe` first:
 
 [source,console]
 ----
 $ sudo rpi-eeprom-update -a
 ----
 
-Then, reboot with `sudo reboot`. Your Raspberry Pi 5 should boot from NVMe.
+Then, reboot with `sudo reboot`. Your Raspberry Pi should boot from NVMe.
 
 For CM4, use `rpiboot` to update the bootloader. You can find instructions for building `rpiboot` and configuring the IO board to switch the ROM to usbboot mode in the https://github.com/raspberrypi/usbboot[USB boot GitHub repository].
 
diff --git a/documentation/asciidoc/computers/raspberry-pi/introduction.adoc b/documentation/asciidoc/computers/raspberry-pi/introduction.adoc
index ff8f11ea66..3642c520cf 100644
--- a/documentation/asciidoc/computers/raspberry-pi/introduction.adoc
+++ b/documentation/asciidoc/computers/raspberry-pi/introduction.adoc
@@ -14,7 +14,7 @@ Additionally, Raspberry Pi makes the *Pico* series of tiny, versatile https://en
 *Model B* indicates the presence of an Ethernet port.
 *Model A* indicates a lower-cost model in a smaller form factor with no Ethernet port, reduced RAM, and fewer USB ports to limit board height.
 
-[cols="7a,1,2,3,5"]
+[cols="6a,2,2,3,5"]
 |===
 | Model | SoC | Memory | GPIO | Connectivity
 
diff --git a/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc b/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc
index f871915ff6..247929c4da 100644
--- a/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc
+++ b/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc
@@ -342,6 +342,18 @@ NOQuuuWuFMMMCCCCPPPPTTTTTTTTRRRR
 |
 | 17: 5
 
+|
+|
+| 18: CM5
+
+|
+|
+| 19: 500
+
+|
+|
+| 1a: CM5 Lite
+
 | RRRR (bits 0-3)
 | Revision
 | 0, 1, 2, etc.
@@ -628,6 +640,48 @@ NOTE: This list is not exhaustive - there may be codes in use that are not in th
 | 8GB
 | Sony UK
 
+| b04180
+| CM5
+| 1.0
+| 2GB
+| Sony UK
+
+| c04180
+| CM5
+| 1.0
+| 4GB
+| Sony UK
+
+| d04180
+| CM5
+| 1.0
+| 8GB
+| Sony UK
+
+| d04190
+| 500
+| 1.0
+| 8GB
+| Sony UK
+
+| b041a0
+| CM5 Lite
+| 1.0
+| 2GB
+| Sony UK
+
+| c041a0
+| CM5 Lite
+| 1.0
+| 4GB
+| Sony UK
+
+| d041a0
+| CM5 Lite
+| 1.0
+| 8GB
+| Sony UK
+
 |===
 
 === Using revision codes for board identification
diff --git a/documentation/asciidoc/microcontrollers/c_sdk/official_sdk.adoc b/documentation/asciidoc/microcontrollers/c_sdk/official_sdk.adoc
index 7a4a0d73d2..691c6511a4 100644
--- a/documentation/asciidoc/microcontrollers/c_sdk/official_sdk.adoc
+++ b/documentation/asciidoc/microcontrollers/c_sdk/official_sdk.adoc
@@ -1,4 +1,4 @@
-== Raspberry Pi Pico C/{cpp} SDK
+== Raspberry Pi Pico C/C++ SDK
 
 Our official C SDK can be used from the command line, or from popular integrated development environments like Visual Studio Code, Eclipse, and CLion. To get started, download our C/{cpp} SDK and Examples, and take a look at our 'https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf[getting started]' documentation. Or for a quick setup see the next section.
 
diff --git a/documentation/index.json b/documentation/index.json
index 4b4e1833c9..d0000060fe 100644
--- a/documentation/index.json
+++ b/documentation/index.json
@@ -54,7 +54,7 @@
                     "subpath": "camera_software.adoc"
                 },
                 {
-                    "title": "AI software",
+                    "title": "AI Kit and AI HAT+ software",
                     "description": "Software and libraries for artificial intelligence on a Raspberry Pi hardware",
                     "image": "full-sized/ai.png",
                     "subpath": "ai.adoc"
diff --git a/jekyll-assets/_includes/contribute.html b/jekyll-assets/_includes/contribute.html
deleted file mode 100644
index fc0aea05e6..0000000000
--- a/jekyll-assets/_includes/contribute.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<div class="contribute">
-  <div class="contribute-inner">
-    <p id="copyright">You can view and edit the Raspberry Pi documentation source <a href="{{ site.githuburl }}">on Github</a>. Please read our <a href="{{ site.githuburl }}blob/{{ site.githubbranch }}/CONTRIBUTING.md">usage and contributions policy</a> before you make a Pull Request.</p>
-  </div>
-</div>
diff --git a/jekyll-assets/_includes/copyright.html b/jekyll-assets/_includes/copyright.html
deleted file mode 100644
index 9b00e43e68..0000000000
--- a/jekyll-assets/_includes/copyright.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="legal">
-  <div class="legal-inner">
-    <p id="copyright">Raspberry Pi documentation is copyright &copy; 2012-{{ site.time | date: '%Y' }} Raspberry Pi Ltd and is licensed under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International</a> (CC BY-SA) licence.</p>
-    <p id="copyright">Some content originates from the <a href="http://elinux.org/">eLinux wiki</a>, and is licensed under a <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported</a> licence.</p>
-    <p id="copyright">The terms HDMI, HDMI High-Definition Multimedia Interface, HDMI trade dress and the HDMI Logos are trademarks or registered trademarks of HDMI Licensing Administrator, Inc</p>
-  </div>
-</div>
diff --git a/jekyll-assets/_includes/footer.html b/jekyll-assets/_includes/footer.html
index 9fd1d53c13..efe0c21972 100644
--- a/jekyll-assets/_includes/footer.html
+++ b/jekyll-assets/_includes/footer.html
@@ -1,4 +1,5 @@
 <style>
+@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap");
 #__rptl-footer .__rptl-footer-link, #__rptl-footer .__rptl-footer-link--with-icon, #__rptl-footer .__rptl-footer-item, #__rptl-footer .__rptl-footer-list, #__rptl-footer .__rptl-footer-heading, #__rptl-footer .__rptl-footer-column, #__rptl-footer .__rptl-footer-row, #__rptl-footer .__rptl-footer-container, #__rptl-footer {
   box-sizing: border-box;
   margin: 0;
@@ -19,9 +20,10 @@
   -webkit-text-size-adjust: 100%;
      -moz-text-size-adjust: 100%;
           text-size-adjust: 100%;
+  letter-spacing: normal;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
-  background: #f5f6f9;
+  background: var(--rptl-footer-background-color, #f5f6f9);
   overflow: hidden;
 }
 #__rptl-footer .__rptl-footer-container {
@@ -63,7 +65,7 @@
 }
 #__rptl-footer .__rptl-footer-heading {
   font-weight: 700;
-  color: #333333;
+  color: var(--rptl-footer-text-color, #333);
   margin-bottom: 8px;
 }
 #__rptl-footer .__rptl-footer-list {
@@ -75,11 +77,11 @@
 }
 #__rptl-footer .__rptl-footer-icon {
   margin-right: 0.5em;
-  fill: #333;
+  fill: var(--rptl-footer-text-color, #333);
 }
 #__rptl-footer .__rptl-footer-link, #__rptl-footer .__rptl-footer-link--with-icon {
   font-weight: 400;
-  color: #333;
+  color: var(--rptl-footer-text-color, #333);
   text-decoration: none;
 }
 #__rptl-footer .__rptl-footer-link--with-icon {
@@ -97,7 +99,7 @@
         <div class="__rptl-footer-heading">Follow us</div>
         <ul class="__rptl-footer-list">
           <li class="__rptl-footer-item">
-            <a href="/weekly/" class="__rptl-footer-link--with-icon">
+            <a href="https://www.raspberrypi.com/weekly/" class="__rptl-footer-link--with-icon">
               <svg class="__rptl-footer-icon" aria-hidden="true" focusable="false" width="1.25em" height="1.25em" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M1 6v12a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2Zm19.707 10.293a1 1 0 1 1-1.414 1.414L15 13.414l-.515.515a3.518 3.518 0 0 1-4.97 0L9 13.414l-4.293 4.293a1 1 0 0 1-1.414-1.414L7.586 12 3.293 7.707a1 1 0 0 1 1.414-1.414l5 5 1.222 1.222a1.516 1.516 0 0 0 2.142 0l1.222-1.222 5-5a1 1 0 0 1 1.414 1.414L16.414 12Z"/></svg>
               Sign up to newsletter
             </a>
@@ -151,60 +153,60 @@
       <div class="__rptl-footer-column">
         <div class="__rptl-footer-heading">About Raspberry Pi</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="/news/" class="__rptl-footer-link">News</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/news/" class="__rptl-footer-link">News</a></li>
           <li class="__rptl-footer-item"><a href="https://investors.raspberrypi.com/" class="__rptl-footer-link">Investor relations</a></li>
-          <li class="__rptl-footer-item"><a href="/contact/" class="__rptl-footer-link">Contact us</a></li>
-          <li class="__rptl-footer-item"><a href="/trademark-rules/" class="__rptl-footer-link">Trademark</a></li>
-          <li class="__rptl-footer-item"><a href="/about/" class="__rptl-footer-link">About us</a></li>
-          <li class="__rptl-footer-item"><a href="/resellers/" class="__rptl-footer-link">Our Approved Resellers</a></li>
-          <li class="__rptl-footer-item"><a href="/jobs/" class="__rptl-footer-link">Jobs</a></li>
-          <li class="__rptl-footer-item"><a href="/accessibility/" class="__rptl-footer-link">Accessibility</a></li>
-          <li class="__rptl-footer-item"><a href="/terms-and-conditions/" class="__rptl-footer-link">Site use terms and conditions</a></li>
-          <li class="__rptl-footer-item"><a href="/acceptable-use/" class="__rptl-footer-link">Acceptable use</a></li>
-          <li class="__rptl-footer-item"><a href="/cookies/" class="__rptl-footer-link">Cookies</a></li>
-          <li class="__rptl-footer-item"><a href="/licensing/" class="__rptl-footer-link">Licensing</a></li>
-          <li class="__rptl-footer-item"><a href="/terms-conditions-sale/" class="__rptl-footer-link">Terms and conditions of sale</a></li>
-          <li class="__rptl-footer-item"><a href="/privacy/" class="__rptl-footer-link">Privacy</a></li>
-          <li class="__rptl-footer-item"><a href="/contact/security/" class="__rptl-footer-link">Security</a></li>
-          <li class="__rptl-footer-item"><a href="/verify/" class="__rptl-footer-link">Verify our bank details</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/contact/" class="__rptl-footer-link">Contact us</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/trademark-rules/" class="__rptl-footer-link">Trademark</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/about/" class="__rptl-footer-link">About us</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/resellers/" class="__rptl-footer-link">Our Approved Resellers</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/jobs/" class="__rptl-footer-link">Jobs</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/accessibility/" class="__rptl-footer-link">Accessibility</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/terms-and-conditions/" class="__rptl-footer-link">Site use terms and conditions</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/acceptable-use/" class="__rptl-footer-link">Acceptable use</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/cookies/" class="__rptl-footer-link">Cookies</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/licensing/" class="__rptl-footer-link">Licensing</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/terms-conditions-sale/" class="__rptl-footer-link">Terms and conditions of sale</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/privacy/" class="__rptl-footer-link">Privacy</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/contact/security/" class="__rptl-footer-link">Security</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/verify/" class="__rptl-footer-link">Verify our bank details</a></li>
         </ul>
       </div>
       <div class="__rptl-footer-column">
         <div class="__rptl-footer-heading">For home</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="/for-home/" class="__rptl-footer-link">Raspberry Pi for home</a></li>
-          <li class="__rptl-footer-item"><a href="/tutorials/" class="__rptl-footer-link">Tutorials</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-home/" class="__rptl-footer-link">Raspberry Pi for home</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/tutorials/" class="__rptl-footer-link">Tutorials</a></li>
         </ul>
         <div class="__rptl-footer-heading">For industry</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="/for-industry/" class="__rptl-footer-link">Raspberry Pi for industry</a></li>
-          <li class="__rptl-footer-item"><a href="/for-industry/thin-clients/" class="__rptl-footer-link">Thin clients</a></li>
-          <li class="__rptl-footer-item"><a href="/for-industry/space/" class="__rptl-footer-link">Raspberry Pi in space</a></li>
-          <li class="__rptl-footer-item"><a href="/for-industry/powered-by/" class="__rptl-footer-link">Powered by Raspberry Pi</a></li>
-          <li class="__rptl-footer-item"><a href="/for-industry/design-partners/" class="__rptl-footer-link">Design partners</a></li>
-          <li class="__rptl-footer-item"><a href="/success-stories/" class="__rptl-footer-link">Success stories</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-industry/" class="__rptl-footer-link">Raspberry Pi for industry</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-industry/thin-clients/" class="__rptl-footer-link">Thin clients</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-industry/space/" class="__rptl-footer-link">Raspberry Pi in space</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-industry/powered-by/" class="__rptl-footer-link">Powered by Raspberry Pi</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/for-industry/design-partners/" class="__rptl-footer-link">Design partners</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/success-stories/" class="__rptl-footer-link">Success stories</a></li>
         </ul>
         <div class="__rptl-footer-heading">Hardware</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="/products/#raspberry-pi-computers-and-microcontrollers" class="__rptl-footer-link">Computers and microcontrollers</a></li>
-          <li class="__rptl-footer-item"><a href="/products/#cameras-and-displays" class="__rptl-footer-link">Cameras and displays</a></li>
-          <li class="__rptl-footer-item"><a href="/products/#add-on-boards" class="__rptl-footer-link">Add-on boards</a></li>
-          <li class="__rptl-footer-item"><a href="/products/#power-supplies-and-cables" class="__rptl-footer-link">Power supplies and cables</a></li>
-          <li class="__rptl-footer-item"><a href="/products/#cases" class="__rptl-footer-link">Cases</a></li>
-          <li class="__rptl-footer-item"><a href="/products/#peripherals" class="__rptl-footer-link">Peripherals</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#raspberry-pi-computers-and-microcontrollers" class="__rptl-footer-link">Computers and microcontrollers</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#cameras-and-displays" class="__rptl-footer-link">Cameras and displays</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#add-on-boards" class="__rptl-footer-link">Add-on boards</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#power-supplies-and-cables" class="__rptl-footer-link">Power supplies and cables</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#cases" class="__rptl-footer-link">Cases</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/products/#peripherals" class="__rptl-footer-link">Peripherals</a></li>
         </ul>
       </div>
       <div class="__rptl-footer-column">
         <div class="__rptl-footer-heading">Software</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="/software/connect/" class="__rptl-footer-link">Raspberry Pi Connect</a></li>
-          <li class="__rptl-footer-item"><a href="/software/raspberry-pi-desktop/" class="__rptl-footer-link">Raspberry Pi Desktop</a></li>
-          <li class="__rptl-footer-item"><a href="/software/" class="__rptl-footer-link">Raspberry Pi Imager</a></li>
-          <li class="__rptl-footer-item"><a href="/software/operating-systems/#raspberry-pi-os-32-bit" class="__rptl-footer-link">Raspberry Pi OS</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/software/connect/" class="__rptl-footer-link">Raspberry Pi Connect</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/software/raspberry-pi-desktop/" class="__rptl-footer-link">Raspberry Pi Desktop</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/software/" class="__rptl-footer-link">Raspberry Pi Imager</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/software/operating-systems/#raspberry-pi-os-32-bit" class="__rptl-footer-link">Raspberry Pi OS</a></li>
         </ul>
         <div class="__rptl-footer-heading">Documentation</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="/documentation/" class="__rptl-footer-link">All categories</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/documentation/" class="__rptl-footer-link">All categories</a></li>
           <li class="__rptl-footer-item"><a href="https://pip.raspberrypi.com" class="__rptl-footer-link">Product information portal</a></li>
           <li class="__rptl-footer-item"><a href="https://datasheets.raspberrypi.com" class="__rptl-footer-link">Datasheets</a></li>
         </ul>
@@ -215,11 +217,11 @@
         </ul>
         <div class="__rptl-footer-heading">Raspberry Pi Store</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="/raspberry-pi-store/" class="__rptl-footer-link">Store information</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/raspberry-pi-store/" class="__rptl-footer-link">Store information</a></li>
         </ul>
         <div class="__rptl-footer-heading">Raspberry Pi Press</div>
         <ul class="__rptl-footer-list">
-          <li class="__rptl-footer-item"><a href="/books-magazines/" class="__rptl-footer-link">About Raspberry Pi Press</a></li>
+          <li class="__rptl-footer-item"><a href="https://www.raspberrypi.com/books-magazines/" class="__rptl-footer-link">About Raspberry Pi Press</a></li>
           <li class="__rptl-footer-item"><a href="https://magpi.raspberrypi.com" class="__rptl-footer-link">The MagPi</a></li>
           <li class="__rptl-footer-item"><a href="https://hackspace.raspberrypi.com" class="__rptl-footer-link">HackSpace</a></li>
         </ul>
diff --git a/jekyll-assets/_includes/head.html b/jekyll-assets/_includes/head.html
index d428ab9093..93255f598a 100644
--- a/jekyll-assets/_includes/head.html
+++ b/jekyll-assets/_includes/head.html
@@ -1,12 +1,13 @@
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
+<link rel="shortcut icon" href="{{ site.baseurl }}/favicon.ico">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <title>{{ page.title | strip_html}}</title>
 <meta name="description" content="The official documentation for Raspberry Pi computers and microcontrollers">
 <meta property="og:title" content="{{ page.title }}">
 <meta property="og:description" content="The official documentation for Raspberry Pi computers and microcontrollers">
 <meta property="og:url" content="https://www.raspberrypi.com{{ page.url | relative_url }}">
-<meta property="og:image" content="https://www.raspberrypi.com{{ "/images/opensocial.png" | relative_url }}">
+<meta property="og:image" content="https://www.raspberrypi.com{{ '/images/opensocial.png' | relative_url }}">
 <meta name="twitter:card" content="summary_large_image">
 <meta name="twitter:site" content="@Raspberry_Pi">
 <meta name="twitter:title" content="{{ page.title }}">
@@ -17,9 +18,13 @@
 <link rel="preconnect" href="https://IHWGNTJ1NP-dsn.algolia.net" crossorigin>
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@docsearch/css@3"/>
 <link rel="stylesheet" href="{{ site.baseurl }}/css/style.css?ver={{ site.time | date: '%s' }}">
-<link rel="stylesheet" href="{{ site.baseurl }}/css/tabs.css?ver={{ site.time | date: '%s' }}">
 <link rel="stylesheet" href="{{ site.baseurl }}/css/asciidoctor-tabs.css?ver={{ site.time | date: '%s' }}">
 <link rel="stylesheet" href="{{ site.baseurl }}/css/syntax-highlighting.css?ver={{ site.time | date: '%s' }}">
+<link rel="stylesheet" href="{{ site.baseurl }}/css/tocbot.css?ver={{ site.time | date: '%s' }}">
+<script type="text/javascript" src="{{ site.baseurl }}/scripts/theme.js?ver={{ site.time | date: '%s' }}"></script>
+<script type="text/javascript" src="{{ site.baseurl }}/scripts/tocbot.js?ver={{ site.time | date: '%s' }}"></script>
+<script type="text/javascript" src="{{ site.baseurl }}/scripts/toc.js?ver={{ site.time | date: '%s' }}"></script>
+<script async type="text/javascript" src="{{ site.baseurl }}/scripts/asciidoctor-tabs.js?ver={{ site.time | date: '%s' }}"></script>
 <script async src="https://www.googletagmanager.com/gtag/js?id=G-V8TFXM3BKJ"></script>
 <script>
   window.dataLayer = window.dataLayer || [];
diff --git a/jekyll-assets/_includes/header.html b/jekyll-assets/_includes/header.html
index de4d50c668..bb88c8bd02 100644
--- a/jekyll-assets/_includes/header.html
+++ b/jekyll-assets/_includes/header.html
@@ -1,4 +1,5 @@
 <style>
+@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap");
 #__rptl-header {
   margin: 0;
   padding: 0;
@@ -34,8 +35,8 @@
   box-sizing: border-box;
   position: relative;
   z-index: 1;
-  background-color: #fff;
-  border-bottom: 1px solid #dedede;
+  background-color: var(--rptl-header-background-color, #fff);
+  border-bottom: 1px solid var(--rptl-header-border-bottom-color, #dedede);
   width: 100%;
   padding: 16px;
 }
@@ -67,6 +68,15 @@
   display: block;
   vertical-align: middle;
 }
+#__rptl-header .__rptl-header-logo .__rptl-header-logo-text {
+  fill: var(--rptl-header-logo-text-fill, #000);
+}
+#__rptl-header .__rptl-header-logo .__rptl-header-logo-leaf {
+  fill: var(--rptl-header-logo-leaf-fill, #46af4b);
+}
+#__rptl-header .__rptl-header-logo .__rptl-header-logo-berry {
+  fill: var(--rptl-header-logo-berry-fill, #cd2355);
+}
 #__rptl-header .__rptl-header-burger {
   margin: 0;
   padding: 0;
@@ -102,7 +112,7 @@
   left: 0;
   height: 2px;
   width: 100%;
-  background: #707070;
+  background: var(--rptl-header-burger-stroke-color, #707070);
   border-radius: 9px;
   transform: rotate(0deg);
 }
@@ -155,9 +165,9 @@
   box-sizing: border-box;
   position: absolute;
   bottom: 0;
-  background-color: #fff;
+  background-color: var(--rptl-header-background-color, #fff);
   width: 100%;
-  border-bottom: 1px solid #dedede;
+  border-bottom: 1px solid var(--rptl-header-border-bottom-color, #dedede);
 }
 #__rptl-header .__rptl-header-nav:focus-within {
   transform: translateY(100%);
@@ -166,7 +176,7 @@
   #__rptl-header .__rptl-header-nav {
     position: static;
     padding: 0 84px;
-    background-color: #f7f8fa;
+    background-color: var(--rptl-header-subnav-background-color, #f7f8fa);
     transform: none !important;
     transition: none !important;
   }
@@ -213,7 +223,7 @@
   font-size: 100%;
   display: block;
   box-sizing: border-box;
-  border-top: 1px solid #dedede;
+  border-top: 1px solid var(--rptl-header-border-bottom-color, #dedede);
 }
 @media (min-width: 1200px) {
   #__rptl-header .__rptl-header-nav-list-item {
@@ -229,13 +239,13 @@
   display: block;
   text-decoration: none;
   box-sizing: border-box;
-  color: #333;
+  color: var(--rptl-header-text-color, #333);
   font-size: 1.65em;
   padding: 16px;
 }
 #__rptl-header .__rptl-header-nav-link:hover {
-  color: #fff;
-  background-color: #333;
+  color: var(--rptl-header-background-color, #fff);
+  background-color: var(--rptl-header-text-color, #333);
 }
 #__rptl-header .__rptl-header-nav-link--for-home, #__rptl-header .__rptl-header-nav-link--for-industry {
   font-weight: 700;
@@ -269,8 +279,8 @@
   -moz-osx-font-smoothing: grayscale;
   position: relative;
   z-index: 101;
-  background: #333;
-  color: #fff;
+  background: var(--rptl-cookiebanner-background-color, #333);
+  color: var(--rptl-cookiebanner-text-color, #fff);
 }
 #__rptl-cookiebanner.__rptl-cookiebanner-hidden {
   display: none;
@@ -340,14 +350,16 @@
 }
 #__rptl-cookiebanner .__rptl-cookiebanner-accept:focus, #__rptl-cookiebanner .__rptl-cookiebanner-reject:focus {
   box-shadow: rgb(255, 255, 255) 0px 0px 0px 0px, rgb(121, 167, 236) 0px 0px 0px 3px, rgba(0, 0, 0, 0) 0px 0px 0px 0px;
+  outline: 2px solid transparent;
+  outline-offset: 2px;
 }
 #__rptl-cookiebanner .__rptl-cookiebanner-accept {
-  color: #333;
-  background: #fff;
+  color: var(--rptl-cookiebanner-background-color, #333);
+  background: var(--rptl-cookiebanner-text-color, #fff);
 }
 #__rptl-cookiebanner .__rptl-cookiebanner-reject {
-  color: #fff;
-  background: #333;
+  color: var(--rptl-cookiebanner-text-color, #fff);
+  background: var(--rptl-cookiebanner-background-color, #333);
 }
 </style>
 <div id="__rptl-cookiebanner" class="__rptl-cookiebanner-hidden">
@@ -356,7 +368,7 @@
       We use some essential cookies to make our website work.
     </p>
     <p class="__rptl-cookiebanner-text">
-      We use optional cookies, as detailed in our <a href="/cookies"
+      We use optional cookies, as detailed in our <a href="https://www.raspberrypi.com/cookies/"
         class="__rptl-cookiebanner-link">cookie policy</a>, to remember your
       settings and understand how you use our website.
     </p>
@@ -375,8 +387,8 @@
 
   <div class="__rptl-header-navbar">
     <div class="__rptl-header-wrapper">
-      <a href="/" class="__rptl-header-brand">
-        <svg class="__rptl-header-logo" aria-hidden="true" focusable="false" height="44" viewBox="0 0 270 57" xmlns="http://www.w3.org/2000/svg" aria-labelledby="__rptl-header-logo"><title id="__rptl-header-logo">Raspberry Pi</title><g fill-rule="nonzero" fill="none"><path d="M65.275 33.317h-4.477v9.46c0 .29-.235.526-.525.526h-4.57a.525.525 0 0 1-.526-.525V16.55a.525.525 0 0 1 .525-.525h9.61c3.223 0 5.709.718 7.457 2.154a7.437 7.437 0 0 1 2.623 6.09 8.391 8.391 0 0 1-1.208 4.655 8.24 8.24 0 0 1-3.663 2.97l5.635 10.638a.525.525 0 0 1-.464.77h-4.917a.63.63 0 0 1-.56-.342l-4.94-9.643Zm-4.477-4.552h4.534a4.641 4.641 0 0 0 3.278-1.078 3.85 3.85 0 0 0 1.162-2.97 4.122 4.122 0 0 0-1.096-3.034 4.556 4.556 0 0 0-3.363-1.106h-4.515v8.188ZM90.426 42.997a6.562 6.562 0 0 1-.402-1.511 6.551 6.551 0 0 1-5.114 2.192 7.195 7.195 0 0 1-4.937-1.724 5.542 5.542 0 0 1-1.958-4.347 5.73 5.73 0 0 1 2.389-4.946c1.592-1.148 3.894-1.73 6.904-1.742h2.491v-1.162a3.342 3.342 0 0 0-.72-2.248 2.838 2.838 0 0 0-2.277-.843 3.226 3.226 0 0 0-2.145.656 2.13 2.13 0 0 0-.748 1.37.513.513 0 0 1-.513.428h-4.375a.533.533 0 0 1-.524-.596 5.494 5.494 0 0 1 1.054-2.663 7.184 7.184 0 0 1 3.073-2.352 11.2 11.2 0 0 1 4.459-.852 8.848 8.848 0 0 1 5.948 1.883 6.587 6.587 0 0 1 2.202 5.292v8.787a9.948 9.948 0 0 0 .629 3.93.525.525 0 0 1-.47.754h-4.485a.515.515 0 0 1-.48-.306Zm-4.336-3.46c.77.007 1.529-.176 2.21-.534a3.509 3.509 0 0 0 1.5-1.433v-3.485h-2.024c-2.71 0-4.153.937-4.328 2.81l-.019.319a2.166 2.166 0 0 0 .712 1.667 2.764 2.764 0 0 0 1.949.656ZM109.963 37.701a1.745 1.745 0 0 0-.983-1.564 11.18 11.18 0 0 0-3.157-1.021c-4.822-1.012-7.232-3.06-7.232-6.145a5.57 5.57 0 0 1 2.24-4.506 9.031 9.031 0 0 1 5.854-1.808 9.723 9.723 0 0 1 6.173 1.817 5.699 5.699 0 0 1 2.292 4.175.52.52 0 0 1-.525.546h-4.382a.514.514 0 0 1-.514-.435 2.538 2.538 0 0 0-.721-1.485 3.172 3.172 0 0 0-2.342-.759 3.24 3.24 0 0 0-2.117.619c-.483.377-.76.96-.75 1.573.001.603.327 1.158.853 1.452a8.76 8.76 0 0 0 2.876.956 23.54 23.54 0 0 1 3.41.908c2.86 1.05 4.29 2.867 4.29 5.452a5.288 5.288 0 0 1-2.38 4.487 10.264 10.264 0 0 1-6.145 1.715c-1.556.029-3.1-.281-4.524-.91a7.586 7.586 0 0 1-3.1-2.49 5.853 5.853 0 0 1-1.094-2.824.533.533 0 0 1 .523-.596h4.11a.513.513 0 0 1 .513.418c.091.71.46 1.354 1.024 1.793a4.233 4.233 0 0 0 2.66.768c.827.057 1.65-.15 2.352-.59.508-.35.807-.93.796-1.546ZM136.719 33.355a12.159 12.159 0 0 1-2.127 7.503 6.817 6.817 0 0 1-5.742 2.82 6.315 6.315 0 0 1-4.965-2.136v9.03c0 .29-.235.525-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.018c.27 0 .497.206.523.475l.142 1.51a6.363 6.363 0 0 1 5.134-2.36 6.865 6.865 0 0 1 5.826 2.773c1.387 1.848 2.08 4.396 2.08 7.644v.28Zm-5.415-.394a7.982 7.982 0 0 0-1.002-4.365 3.266 3.266 0 0 0-2.913-1.536 3.546 3.546 0 0 0-3.504 1.948v8.3a3.605 3.605 0 0 0 3.541 2.004c2.586 0 3.878-2.117 3.878-6.35ZM158.159 33.355c0 3.247-.694 5.78-2.08 7.597a6.889 6.889 0 0 1-5.808 2.726 6.329 6.329 0 0 1-5.264-2.53l-.191 1.689a.525.525 0 0 1-.522.466h-3.877a.525.525 0 0 1-.525-.525V15.05c0-.29.235-.525.525-.525h4.364a.525.525 0 0 1 .525.525v9.798a6.166 6.166 0 0 1 4.928-2.192 6.945 6.945 0 0 1 5.817 2.726c1.405 1.817 2.108 4.374 2.108 7.672v.3Zm-5.415-.394a8.068 8.068 0 0 0-.974-4.487 3.295 3.295 0 0 0-2.904-1.414 3.572 3.572 0 0 0-3.56 2.117v8a3.62 3.62 0 0 0 3.597 2.135c1.626.093 3.081-.999 3.448-2.585.31-1.23.442-2.498.393-3.766ZM170.555 43.678a9.95 9.95 0 0 1-7.26-2.736 9.722 9.722 0 0 1-2.8-7.288v-.524a12.247 12.247 0 0 1 1.18-5.461 8.666 8.666 0 0 1 3.344-3.71 9.387 9.387 0 0 1 4.936-1.302 8.413 8.413 0 0 1 6.548 2.623c1.593 1.749 2.39 4.228 2.39 7.438v1.685a.525.525 0 0 1-.526.525h-12.383a5.028 5.028 0 0 0 1.583 3.185 4.785 4.785 0 0 0 3.344 1.2 5.886 5.886 0 0 0 4.524-1.837.527.527 0 0 1 .773.026l1.964 2.198c.17.188.182.47.028.672a8.216 8.216 0 0 1-3.036 2.34 10.82 10.82 0 0 1-4.609.966Zm-.618-16.656a3.382 3.382 0 0 0-2.614 1.092 5.65 5.65 0 0 0-1.283 3.124h7.531v-.433a4.034 4.034 0 0 0-.974-2.795 3.492 3.492 0 0 0-2.66-.988ZM193.333 27.525a.523.523 0 0 1-.575.515c-.459-.051-.92-.078-1.382-.081-2.049 0-3.391.693-4.028 2.08v12.739a.525.525 0 0 1-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.096c.277 0 .507.215.524.492l.12 1.924a5.017 5.017 0 0 1 4.514-2.791c.434-.002.867.044 1.29.138a.515.515 0 0 1 .39.515l-.06 4.215ZM207.017 27.525a.523.523 0 0 1-.575.515c-.459-.051-.92-.078-1.382-.081-2.048 0-3.39.693-4.028 2.08v12.739a.525.525 0 0 1-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.096c.277 0 .507.215.524.492l.12 1.924a5.018 5.018 0 0 1 4.514-2.791c.434-.002.867.044 1.29.138a.515.515 0 0 1 .39.515l-.06 4.215ZM217.934 35.64l3.635-12.233a.525.525 0 0 1 .504-.375h4.677a.525.525 0 0 1 .496.697l-7.907 22.721-.45 1.068a6.18 6.18 0 0 1-5.995 3.972 8.368 8.368 0 0 1-2.003-.25.529.529 0 0 1-.395-.513v-3.15a.525.525 0 0 1 .546-.524l.538.02a3.442 3.442 0 0 0 2.035-.492 3.08 3.08 0 0 0 1.19-1.555l.637-1.667-6.857-19.63a.525.525 0 0 1 .496-.697h4.696c.232 0 .437.152.503.374l3.654 12.234ZM245.156 33.692v9.086c0 .29-.235.525-.525.525h-4.57a.525.525 0 0 1-.526-.525V16.55a.525.525 0 0 1 .525-.525h10.117a12.31 12.31 0 0 1 5.405 1.124 8.284 8.284 0 0 1 3.587 3.194 8.91 8.91 0 0 1 1.256 4.712 7.833 7.833 0 0 1-2.745 6.323c-1.83 1.543-4.362 2.314-7.597 2.314h-4.927Zm0-4.553h5.02a4.934 4.934 0 0 0 3.401-1.049 3.816 3.816 0 0 0 1.171-2.998 4.5 4.5 0 0 0-1.18-3.24 4.41 4.41 0 0 0-3.26-1.275h-5.152v8.562ZM263.081 17.786a2.666 2.666 0 0 1 .815-2.005 3.512 3.512 0 0 1 4.431 0 2.86 2.86 0 0 1-.01 4.028 3.473 3.473 0 0 1-4.402 0 2.66 2.66 0 0 1-.834-2.023Zm5.227 25.517h-4.383a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.383a.525.525 0 0 1 .525.525v19.22a.525.525 0 0 1-.525.526ZM45.008 32.949a8.74 8.74 0 0 0-3.104-6.182 7.664 7.664 0 0 0-1.44-2.801 8.594 8.594 0 0 0-3.058-5.777c.284-.244.524-.536.708-.862a6.186 6.186 0 0 0 3.63-4.23 5.558 5.558 0 0 0 1.755-3.64 3.481 3.481 0 0 0-.31-1.638 3.114 3.114 0 0 0 .81-3.215c-.606-1.756-2.73-2.896-5.584-3.017a4.497 4.497 0 0 0-3.11-1.065 7.188 7.188 0 0 0-1.678.207 3.821 3.821 0 0 0-1.65-.334 6.458 6.458 0 0 0-3.148.858 2.894 2.894 0 0 0-.38-.025 6.276 6.276 0 0 0-3.551 1.558 10.765 10.765 0 0 0-1.866 1.944 10.768 10.768 0 0 0-1.867-1.944 6.278 6.278 0 0 0-3.55-1.558c-.127 0-.254.008-.38.025a6.46 6.46 0 0 0-3.148-.858 3.822 3.822 0 0 0-1.65.334 7.188 7.188 0 0 0-1.68-.207 4.498 4.498 0 0 0-3.109 1.065c-2.854.12-4.978 1.261-5.585 3.018a3.114 3.114 0 0 0 .812 3.214 3.482 3.482 0 0 0-.31 1.639 5.557 5.557 0 0 0 1.755 3.64 6.186 6.186 0 0 0 3.63 4.229c.183.326.423.618.707.862A8.594 8.594 0 0 0 5.6 23.966a7.663 7.663 0 0 0-1.44 2.801 8.74 8.74 0 0 0-3.104 6.182 8.424 8.424 0 0 0 1.92 6.578c.26 1.31.8 2.549 1.581 3.632a9.452 9.452 0 0 0 2.386 5.514 9.768 9.768 0 0 0 5.262 3.126 12.74 12.74 0 0 0 4.208 2.605 9.763 9.763 0 0 0 13.24 0c1.559-.585 2.988-1.47 4.207-2.605a9.768 9.768 0 0 0 5.262-3.126 9.452 9.452 0 0 0 2.386-5.514 9.311 9.311 0 0 0 1.582-3.632 8.424 8.424 0 0 0 1.919-6.578Z" fill="#000"/><path d="M28.366 4.192a.225.225 0 0 1 .286.24c-.072.672.335.587.432.468a3.526 3.526 0 0 1 3.188-1.53.225.225 0 0 1 .154.363c-.4.593.03.706.19.6 1.631-1.02 3.187-1.023 3.785-.594a.225.225 0 0 1 .013.349c-.604.514-.266.77-.052.692a5.802 5.802 0 0 1 4.74.607.227.227 0 0 1 .006.343 4.493 4.493 0 0 0-1.73 3.018c-.045.396.614.313.891.241a.225.225 0 0 1 .28.21c.026.954-.876 2.002-2.218 2.898-.18.12-.154.408.256.42a.222.222 0 0 1 .191.334c-.478.888-1.13 1.724-3.345 2.298a.227.227 0 0 0-.032.429.217.217 0 0 1 .071.384c-2.207 1.896-7.8 1.148-8.51-2.043a.224.224 0 0 1 .04-.182 21.262 21.262 0 0 1 9.276-7.058.176.176 0 0 0-.087-.34 15.168 15.168 0 0 0-10.074 6.074.227.227 0 0 1-.289.065c-3.585-1.851-.64-7.317 2.538-8.286ZM7.285 12.85a.222.222 0 0 1 .191-.334c.41-.01.436-.299.256-.419C6.39 11.201 5.49 10.153 5.514 9.2a.225.225 0 0 1 .28-.21c.278.072.936.155.891-.241a4.493 4.493 0 0 0-1.73-3.017.227.227 0 0 1 .006-.344 5.802 5.802 0 0 1 4.74-.607c.214.079.552-.178-.052-.692a.225.225 0 0 1 .014-.35c.597-.428 2.153-.426 3.785.594.159.107.589-.006.19-.599a.225.225 0 0 1 .153-.363A3.526 3.526 0 0 1 16.98 4.9c.096.12.503.204.432-.469a.225.225 0 0 1 .286-.239c3.178.97 6.122 6.435 2.537 8.286a.227.227 0 0 1-.289-.065A15.168 15.168 0 0 0 9.873 6.34a.176.176 0 0 0-.088.34 21.262 21.262 0 0 1 9.276 7.057c.04.052.054.119.04.183-.71 3.19-6.303 3.938-8.51 2.042a.217.217 0 0 1 .071-.384.227.227 0 0 0-.031-.429c-2.216-.574-2.867-1.41-3.346-2.298Z" fill="#46AF4B"/><path d="M37.158 22.605c.92 2.446.203 3.622-1.978 2.377a15.632 15.632 0 0 1-4.58-3.84c-1.644-1.952-.576-2.821 2.012-2.352a6.985 6.985 0 0 1 4.546 3.815ZM27.375 19.853c3.12 2.593-.454 4.428-4.343 4.428-3.89 0-7.463-1.835-4.344-4.428a6.935 6.935 0 0 1 8.687 0ZM8.906 22.605a6.985 6.985 0 0 1 4.545-3.815c2.588-.47 3.656.4 2.013 2.352a15.632 15.632 0 0 1-4.58 3.84c-2.182 1.245-2.898.069-1.978-2.377ZM4.394 36.196a6.983 6.983 0 0 1 .518-5.942c1.153-1.96 2.313-1.883 2.773-.222.585 2.29.373 4.712-.6 6.867-.854 1.696-1.921 1.123-2.691-.703ZM12.704 48.896A6.942 6.942 0 0 1 7.482 42.7c.433-10.066 14.94 7.91 5.222 6.196ZM12.999 36.358c-2.433-1.404-3.077-4.844-1.438-7.682 1.639-2.839 4.94-4 7.372-2.596 2.433 1.404 3.077 4.844 1.438 7.682-1.639 2.839-4.94 4-7.372 2.596ZM27.091 52.737a6.947 6.947 0 0 1-8.119 0c-2.41-1.664.015-3.58 4.06-3.58s6.47 1.916 4.06 3.58Z" fill="#CD2355"/><ellipse fill="#CD2355" cx="23.032" cy="41.795" rx="5.647" ry="4.84"/><path d="M25.692 33.762c-1.639-2.838-.995-6.278 1.438-7.682 2.433-1.405 5.734-.243 7.372 2.596 1.64 2.838.995 6.278-1.438 7.682-2.432 1.405-5.733.243-7.372-2.596ZM33.36 48.896C23.64 50.61 38.149 32.634 38.58 42.7a6.941 6.941 0 0 1-5.221 6.196ZM41.67 36.196c-.77 1.826-1.838 2.399-2.691.703a10.417 10.417 0 0 1-.6-6.867c.46-1.66 1.62-1.739 2.772.222a6.983 6.983 0 0 1 .518 5.942Z" fill="#CD2355"/></g></svg>
+      <a href="https://www.raspberrypi.com/" class="__rptl-header-brand">
+        <svg class="__rptl-header-logo" aria-hidden="true" focusable="false" height="44" viewBox="0 0 270 57" xmlns="http://www.w3.org/2000/svg" aria-labelledby="__rptl-header-logo"><title id="__rptl-header-logo">Raspberry Pi</title><g fill-rule="nonzero" fill="none"><path d="M65.275 33.317h-4.477v9.46c0 .29-.235.526-.525.526h-4.57a.525.525 0 0 1-.526-.525V16.55a.525.525 0 0 1 .525-.525h9.61c3.223 0 5.709.718 7.457 2.154a7.437 7.437 0 0 1 2.623 6.09 8.391 8.391 0 0 1-1.208 4.655 8.24 8.24 0 0 1-3.663 2.97l5.635 10.638a.525.525 0 0 1-.464.77h-4.917a.63.63 0 0 1-.56-.342l-4.94-9.643Zm-4.477-4.552h4.534a4.641 4.641 0 0 0 3.278-1.078 3.85 3.85 0 0 0 1.162-2.97 4.122 4.122 0 0 0-1.096-3.034 4.556 4.556 0 0 0-3.363-1.106h-4.515v8.188ZM90.426 42.997a6.562 6.562 0 0 1-.402-1.511 6.551 6.551 0 0 1-5.114 2.192 7.195 7.195 0 0 1-4.937-1.724 5.542 5.542 0 0 1-1.958-4.347 5.73 5.73 0 0 1 2.389-4.946c1.592-1.148 3.894-1.73 6.904-1.742h2.491v-1.162a3.342 3.342 0 0 0-.72-2.248 2.838 2.838 0 0 0-2.277-.843 3.226 3.226 0 0 0-2.145.656 2.13 2.13 0 0 0-.748 1.37.513.513 0 0 1-.513.428h-4.375a.533.533 0 0 1-.524-.596 5.494 5.494 0 0 1 1.054-2.663 7.184 7.184 0 0 1 3.073-2.352 11.2 11.2 0 0 1 4.459-.852 8.848 8.848 0 0 1 5.948 1.883 6.587 6.587 0 0 1 2.202 5.292v8.787a9.948 9.948 0 0 0 .629 3.93.525.525 0 0 1-.47.754h-4.485a.515.515 0 0 1-.48-.306Zm-4.336-3.46c.77.007 1.529-.176 2.21-.534a3.509 3.509 0 0 0 1.5-1.433v-3.485h-2.024c-2.71 0-4.153.937-4.328 2.81l-.019.319a2.166 2.166 0 0 0 .712 1.667 2.764 2.764 0 0 0 1.949.656ZM109.963 37.701a1.745 1.745 0 0 0-.983-1.564 11.18 11.18 0 0 0-3.157-1.021c-4.822-1.012-7.232-3.06-7.232-6.145a5.57 5.57 0 0 1 2.24-4.506 9.031 9.031 0 0 1 5.854-1.808 9.723 9.723 0 0 1 6.173 1.817 5.699 5.699 0 0 1 2.292 4.175.52.52 0 0 1-.525.546h-4.382a.514.514 0 0 1-.514-.435 2.538 2.538 0 0 0-.721-1.485 3.172 3.172 0 0 0-2.342-.759 3.24 3.24 0 0 0-2.117.619c-.483.377-.76.96-.75 1.573.001.603.327 1.158.853 1.452a8.76 8.76 0 0 0 2.876.956 23.54 23.54 0 0 1 3.41.908c2.86 1.05 4.29 2.867 4.29 5.452a5.288 5.288 0 0 1-2.38 4.487 10.264 10.264 0 0 1-6.145 1.715c-1.556.029-3.1-.281-4.524-.91a7.586 7.586 0 0 1-3.1-2.49 5.853 5.853 0 0 1-1.094-2.824.533.533 0 0 1 .523-.596h4.11a.513.513 0 0 1 .513.418c.091.71.46 1.354 1.024 1.793a4.233 4.233 0 0 0 2.66.768c.827.057 1.65-.15 2.352-.59.508-.35.807-.93.796-1.546ZM136.719 33.355a12.159 12.159 0 0 1-2.127 7.503 6.817 6.817 0 0 1-5.742 2.82 6.315 6.315 0 0 1-4.965-2.136v9.03c0 .29-.235.525-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.018c.27 0 .497.206.523.475l.142 1.51a6.363 6.363 0 0 1 5.134-2.36 6.865 6.865 0 0 1 5.826 2.773c1.387 1.848 2.08 4.396 2.08 7.644v.28Zm-5.415-.394a7.982 7.982 0 0 0-1.002-4.365 3.266 3.266 0 0 0-2.913-1.536 3.546 3.546 0 0 0-3.504 1.948v8.3a3.605 3.605 0 0 0 3.541 2.004c2.586 0 3.878-2.117 3.878-6.35ZM158.159 33.355c0 3.247-.694 5.78-2.08 7.597a6.889 6.889 0 0 1-5.808 2.726 6.329 6.329 0 0 1-5.264-2.53l-.191 1.689a.525.525 0 0 1-.522.466h-3.877a.525.525 0 0 1-.525-.525V15.05c0-.29.235-.525.525-.525h4.364a.525.525 0 0 1 .525.525v9.798a6.166 6.166 0 0 1 4.928-2.192 6.945 6.945 0 0 1 5.817 2.726c1.405 1.817 2.108 4.374 2.108 7.672v.3Zm-5.415-.394a8.068 8.068 0 0 0-.974-4.487 3.295 3.295 0 0 0-2.904-1.414 3.572 3.572 0 0 0-3.56 2.117v8a3.62 3.62 0 0 0 3.597 2.135c1.626.093 3.081-.999 3.448-2.585.31-1.23.442-2.498.393-3.766ZM170.555 43.678a9.95 9.95 0 0 1-7.26-2.736 9.722 9.722 0 0 1-2.8-7.288v-.524a12.247 12.247 0 0 1 1.18-5.461 8.666 8.666 0 0 1 3.344-3.71 9.387 9.387 0 0 1 4.936-1.302 8.413 8.413 0 0 1 6.548 2.623c1.593 1.749 2.39 4.228 2.39 7.438v1.685a.525.525 0 0 1-.526.525h-12.383a5.028 5.028 0 0 0 1.583 3.185 4.785 4.785 0 0 0 3.344 1.2 5.886 5.886 0 0 0 4.524-1.837.527.527 0 0 1 .773.026l1.964 2.198c.17.188.182.47.028.672a8.216 8.216 0 0 1-3.036 2.34 10.82 10.82 0 0 1-4.609.966Zm-.618-16.656a3.382 3.382 0 0 0-2.614 1.092 5.65 5.65 0 0 0-1.283 3.124h7.531v-.433a4.034 4.034 0 0 0-.974-2.795 3.492 3.492 0 0 0-2.66-.988ZM193.333 27.525a.523.523 0 0 1-.575.515c-.459-.051-.92-.078-1.382-.081-2.049 0-3.391.693-4.028 2.08v12.739a.525.525 0 0 1-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.096c.277 0 .507.215.524.492l.12 1.924a5.017 5.017 0 0 1 4.514-2.791c.434-.002.867.044 1.29.138a.515.515 0 0 1 .39.515l-.06 4.215ZM207.017 27.525a.523.523 0 0 1-.575.515c-.459-.051-.92-.078-1.382-.081-2.048 0-3.39.693-4.028 2.08v12.739a.525.525 0 0 1-.525.525h-4.364a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.096c.277 0 .507.215.524.492l.12 1.924a5.018 5.018 0 0 1 4.514-2.791c.434-.002.867.044 1.29.138a.515.515 0 0 1 .39.515l-.06 4.215ZM217.934 35.64l3.635-12.233a.525.525 0 0 1 .504-.375h4.677a.525.525 0 0 1 .496.697l-7.907 22.721-.45 1.068a6.18 6.18 0 0 1-5.995 3.972 8.368 8.368 0 0 1-2.003-.25.529.529 0 0 1-.395-.513v-3.15a.525.525 0 0 1 .546-.524l.538.02a3.442 3.442 0 0 0 2.035-.492 3.08 3.08 0 0 0 1.19-1.555l.637-1.667-6.857-19.63a.525.525 0 0 1 .496-.697h4.696c.232 0 .437.152.503.374l3.654 12.234ZM245.156 33.692v9.086c0 .29-.235.525-.525.525h-4.57a.525.525 0 0 1-.526-.525V16.55a.525.525 0 0 1 .525-.525h10.117a12.31 12.31 0 0 1 5.405 1.124 8.284 8.284 0 0 1 3.587 3.194 8.91 8.91 0 0 1 1.256 4.712 7.833 7.833 0 0 1-2.745 6.323c-1.83 1.543-4.362 2.314-7.597 2.314h-4.927Zm0-4.553h5.02a4.934 4.934 0 0 0 3.401-1.049 3.816 3.816 0 0 0 1.171-2.998 4.5 4.5 0 0 0-1.18-3.24 4.41 4.41 0 0 0-3.26-1.275h-5.152v8.562ZM263.081 17.786a2.666 2.666 0 0 1 .815-2.005 3.512 3.512 0 0 1 4.431 0 2.86 2.86 0 0 1-.01 4.028 3.473 3.473 0 0 1-4.402 0 2.66 2.66 0 0 1-.834-2.023Zm5.227 25.517h-4.383a.525.525 0 0 1-.525-.525V23.557a.525.525 0 0 1 .525-.525h4.383a.525.525 0 0 1 .525.525v19.22a.525.525 0 0 1-.525.526ZM45.008 32.949a8.74 8.74 0 0 0-3.104-6.182 7.664 7.664 0 0 0-1.44-2.801 8.594 8.594 0 0 0-3.058-5.777c.284-.244.524-.536.708-.862a6.186 6.186 0 0 0 3.63-4.23 5.558 5.558 0 0 0 1.755-3.64 3.481 3.481 0 0 0-.31-1.638 3.114 3.114 0 0 0 .81-3.215c-.606-1.756-2.73-2.896-5.584-3.017a4.497 4.497 0 0 0-3.11-1.065 7.188 7.188 0 0 0-1.678.207 3.821 3.821 0 0 0-1.65-.334 6.458 6.458 0 0 0-3.148.858 2.894 2.894 0 0 0-.38-.025 6.276 6.276 0 0 0-3.551 1.558 10.765 10.765 0 0 0-1.866 1.944 10.768 10.768 0 0 0-1.867-1.944 6.278 6.278 0 0 0-3.55-1.558c-.127 0-.254.008-.38.025a6.46 6.46 0 0 0-3.148-.858 3.822 3.822 0 0 0-1.65.334 7.188 7.188 0 0 0-1.68-.207 4.498 4.498 0 0 0-3.109 1.065c-2.854.12-4.978 1.261-5.585 3.018a3.114 3.114 0 0 0 .812 3.214 3.482 3.482 0 0 0-.31 1.639 5.557 5.557 0 0 0 1.755 3.64 6.186 6.186 0 0 0 3.63 4.229c.183.326.423.618.707.862A8.594 8.594 0 0 0 5.6 23.966a7.663 7.663 0 0 0-1.44 2.801 8.74 8.74 0 0 0-3.104 6.182 8.424 8.424 0 0 0 1.92 6.578c.26 1.31.8 2.549 1.581 3.632a9.452 9.452 0 0 0 2.386 5.514 9.768 9.768 0 0 0 5.262 3.126 12.74 12.74 0 0 0 4.208 2.605 9.763 9.763 0 0 0 13.24 0c1.559-.585 2.988-1.47 4.207-2.605a9.768 9.768 0 0 0 5.262-3.126 9.452 9.452 0 0 0 2.386-5.514 9.311 9.311 0 0 0 1.582-3.632 8.424 8.424 0 0 0 1.919-6.578Z" class="__rptl-header-logo-text"/><path d="M28.366 4.192a.225.225 0 0 1 .286.24c-.072.672.335.587.432.468a3.526 3.526 0 0 1 3.188-1.53.225.225 0 0 1 .154.363c-.4.593.03.706.19.6 1.631-1.02 3.187-1.023 3.785-.594a.225.225 0 0 1 .013.349c-.604.514-.266.77-.052.692a5.802 5.802 0 0 1 4.74.607.227.227 0 0 1 .006.343 4.493 4.493 0 0 0-1.73 3.018c-.045.396.614.313.891.241a.225.225 0 0 1 .28.21c.026.954-.876 2.002-2.218 2.898-.18.12-.154.408.256.42a.222.222 0 0 1 .191.334c-.478.888-1.13 1.724-3.345 2.298a.227.227 0 0 0-.032.429.217.217 0 0 1 .071.384c-2.207 1.896-7.8 1.148-8.51-2.043a.224.224 0 0 1 .04-.182 21.262 21.262 0 0 1 9.276-7.058.176.176 0 0 0-.087-.34 15.168 15.168 0 0 0-10.074 6.074.227.227 0 0 1-.289.065c-3.585-1.851-.64-7.317 2.538-8.286ZM7.285 12.85a.222.222 0 0 1 .191-.334c.41-.01.436-.299.256-.419C6.39 11.201 5.49 10.153 5.514 9.2a.225.225 0 0 1 .28-.21c.278.072.936.155.891-.241a4.493 4.493 0 0 0-1.73-3.017.227.227 0 0 1 .006-.344 5.802 5.802 0 0 1 4.74-.607c.214.079.552-.178-.052-.692a.225.225 0 0 1 .014-.35c.597-.428 2.153-.426 3.785.594.159.107.589-.006.19-.599a.225.225 0 0 1 .153-.363A3.526 3.526 0 0 1 16.98 4.9c.096.12.503.204.432-.469a.225.225 0 0 1 .286-.239c3.178.97 6.122 6.435 2.537 8.286a.227.227 0 0 1-.289-.065A15.168 15.168 0 0 0 9.873 6.34a.176.176 0 0 0-.088.34 21.262 21.262 0 0 1 9.276 7.057c.04.052.054.119.04.183-.71 3.19-6.303 3.938-8.51 2.042a.217.217 0 0 1 .071-.384.227.227 0 0 0-.031-.429c-2.216-.574-2.867-1.41-3.346-2.298Z" class="__rptl-header-logo-leaf"/><path d="M37.158 22.605c.92 2.446.203 3.622-1.978 2.377a15.632 15.632 0 0 1-4.58-3.84c-1.644-1.952-.576-2.821 2.012-2.352a6.985 6.985 0 0 1 4.546 3.815ZM27.375 19.853c3.12 2.593-.454 4.428-4.343 4.428-3.89 0-7.463-1.835-4.344-4.428a6.935 6.935 0 0 1 8.687 0ZM8.906 22.605a6.985 6.985 0 0 1 4.545-3.815c2.588-.47 3.656.4 2.013 2.352a15.632 15.632 0 0 1-4.58 3.84c-2.182 1.245-2.898.069-1.978-2.377ZM4.394 36.196a6.983 6.983 0 0 1 .518-5.942c1.153-1.96 2.313-1.883 2.773-.222.585 2.29.373 4.712-.6 6.867-.854 1.696-1.921 1.123-2.691-.703ZM12.704 48.896A6.942 6.942 0 0 1 7.482 42.7c.433-10.066 14.94 7.91 5.222 6.196ZM12.999 36.358c-2.433-1.404-3.077-4.844-1.438-7.682 1.639-2.839 4.94-4 7.372-2.596 2.433 1.404 3.077 4.844 1.438 7.682-1.639 2.839-4.94 4-7.372 2.596ZM27.091 52.737a6.947 6.947 0 0 1-8.119 0c-2.41-1.664.015-3.58 4.06-3.58s6.47 1.916 4.06 3.58Z" class="__rptl-header-logo-berry"/><ellipse class="__rptl-header-logo-berry" cx="23.032" cy="41.795" rx="5.647" ry="4.84"/><path d="M25.692 33.762c-1.639-2.838-.995-6.278 1.438-7.682 2.433-1.405 5.734-.243 7.372 2.596 1.64 2.838.995 6.278-1.438 7.682-2.432 1.405-5.733.243-7.372-2.596ZM33.36 48.896C23.64 50.61 38.149 32.634 38.58 42.7a6.941 6.941 0 0 1-5.221 6.196ZM41.67 36.196c-.77 1.826-1.838 2.399-2.691.703a10.417 10.417 0 0 1-.6-6.867c.46-1.66 1.62-1.739 2.772.222a6.983 6.983 0 0 1 .518 5.942Z" class="__rptl-header-logo-berry"/></g></svg>
       </a>
 
       <label class="__rptl-header-burger" for="__rptl-header-burger-state">
@@ -391,17 +403,17 @@
     <div class="__rptl-header-wrapper">
       <div class="__rptl-header-nav-inner">
         <ul class="__rptl-header-nav-list">
-          <li class="__rptl-header-nav-list-item"><a href="/for-industry/" class="__rptl-header-nav-link __rptl-header-nav-link--for-industry">For industry</a>
-          <li class="__rptl-header-nav-list-item"><a href="/for-home/" class="__rptl-header-nav-link __rptl-header-nav-link--for-home">For home</a>
+          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/for-industry/" class="__rptl-header-nav-link __rptl-header-nav-link--for-industry">For industry</a>
+          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/for-home/" class="__rptl-header-nav-link __rptl-header-nav-link--for-home">For home</a>
         </ul>
         <ul class="__rptl-header-nav-list">
-          <li class="__rptl-header-nav-list-item"><a href="/products/" class="__rptl-header-nav-link">Hardware</a>
-          <li class="__rptl-header-nav-list-item"><a href="/software/" class="__rptl-header-nav-link">Software</a>
-          <li class="__rptl-header-nav-list-item"><a href="/documentation/" class="__rptl-header-nav-link">Documentation</a>
-          <li class="__rptl-header-nav-list-item"><a href="/news/" class="__rptl-header-nav-link">News</a>
+          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/products/" class="__rptl-header-nav-link">Hardware</a>
+          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/software/" class="__rptl-header-nav-link">Software</a>
+          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/documentation/" class="__rptl-header-nav-link">Documentation</a>
+          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/news/" class="__rptl-header-nav-link">News</a>
           <li class="__rptl-header-nav-list-item"><a href="https://forums.raspberrypi.com/" class="__rptl-header-nav-link">Forums</a>
           <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.org" class="__rptl-header-nav-link" rel="noopener">Foundation</a>
-          <li class="__rptl-header-nav-list-item"><a href="/contact/" class="__rptl-header-nav-link">Contact</a>
+          <li class="__rptl-header-nav-list-item"><a href="https://www.raspberrypi.com/contact/" class="__rptl-header-nav-link">Contact</a>
         </ul>
       </div>
     </div>
diff --git a/jekyll-assets/_includes/legal.html b/jekyll-assets/_includes/legal.html
new file mode 100644
index 0000000000..6778d30d0e
--- /dev/null
+++ b/jekyll-assets/_includes/legal.html
@@ -0,0 +1,9 @@
+
+<div class="legal">
+  <div class="legal-inner">
+    <p>You can view and edit the Raspberry Pi documentation source <a href="{{ site.githuburl }}">on Github</a>. Please read our <a href="{{ site.githuburl }}blob/{{ site.githubbranch }}/CONTRIBUTING.md">usage and contributions policy</a> before you make a Pull Request.</p>
+    <p>Raspberry Pi documentation is copyright &copy; 2012-{{ site.time | date: '%Y' }} Raspberry Pi Ltd and is licensed under a <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International</a> (CC BY-SA) licence.</p>
+    <p>Some content originates from the <a href="http://elinux.org/">eLinux wiki</a>, and is licensed under a <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported</a> licence.</p>
+    <p>The terms HDMI, HDMI High-Definition Multimedia Interface, HDMI trade dress and the HDMI Logos are trademarks or registered trademarks of HDMI Licensing Administrator, Inc</p>
+  </div>
+</div>
\ No newline at end of file
diff --git a/jekyll-assets/_includes/mobile_nav.html b/jekyll-assets/_includes/mobile_nav.html
deleted file mode 100644
index 66c1886939..0000000000
--- a/jekyll-assets/_includes/mobile_nav.html
+++ /dev/null
@@ -1,40 +0,0 @@
-<nav id="mobile-contents">
-{% for subdir in site.data.nav %}
-{% if page.dir == subdir.path %}
-
-  {% if subdir.toc[0] %}
-    <div class="mobile-contents-menu" onclick="expandAndCollapseMobile(this)">
-      <span class="mobile-contents-line"></span>
-      <span class="mobile-contents-line"></span>
-      <span class="mobile-contents-line"></span>
-    </div>
-    <div class="contents-inner hidden">
-    {% for item in subdir.toc %}
-      <h3 class="contentshead">{{ item.title | markdownify }}</h3>
-      {% if item.sections[0] %}
-        <div class="itemcontents">
-          <ul class="sectlevel1">
-            {% for entry in item.sections %}
-              <li>
-                <a href="{{ site.baseurl }}{{ item.path }}#{{ entry.anchor }}">{{ entry.heading | markdownify }}</a>
-                {% if entry.subsections[0] %}
-                  <ul>
-                    {% for subentry in entry.subsections %}
-                      <li>
-                        <a href="{{ site.baseurl }}{{ item.path }}#{{ subentry.anchor }}">{{ subentry.heading | markdownify }}</a>
-                      </li>
-                    {% endfor %}
-                  </ul>
-                {% endif %}
-              </li>
-            {% endfor %}
-          </ul>
-        </div>
-      {% endif %}
-    {% endfor %}
-  </div>
-  {% endif %}
-
-{% endif %}
-{% endfor %}
-</nav>
\ No newline at end of file
diff --git a/jekyll-assets/_includes/nav.html b/jekyll-assets/_includes/nav.html
deleted file mode 100644
index e78a994fde..0000000000
--- a/jekyll-assets/_includes/nav.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<nav id="contents">
-{% for subdir in site.data.nav %}
-{% if page.dir == subdir.path %}
-
-  {% if subdir.toc[0] %}
-    <h2><a href="{{ site.baseurl }}{{ subdir.path }}">{{ subdir.title | markdownify }}</a></h2>
-    {% for item in subdir.toc %}
-      <h3 class="contentshead" onclick="expandAndCollapse(this)">{{ item.title | markdownify }}</h3>
-      {% if item.sections[0] %}
-        {% if page.url == item.path %}
-        <div class="itemcontents" id="toc"></div>
-        <div class="itemcontents noJS">
-          <ul class="sectlevel1">
-            {% for entry in item.sections %}
-              <li>
-                <a href="{{ site.baseurl }}{{ item.path }}#{{ entry.anchor }}">{{ entry.heading | markdownify }}</a>
-                {% if entry.subsections[0] %}
-                  <ul>
-                    {% for subentry in entry.subsections %}
-                      <li>
-                        <a href="{{ site.baseurl }}{{ item.path }}#{{ subentry.anchor }}">{{ subentry.heading | markdownify }}</a>
-                      </li>
-                    {% endfor %}
-                  </ul>
-                {% endif %}
-              </li>
-            {% endfor %}
-          </ul>
-        </div>
-        {% else %}
-        <div class="itemcontents">
-          <ul class="sectlevel1">
-            {% for entry in item.sections %}
-              <li>
-                <a href="{{ site.baseurl }}{{ item.path }}#{{ entry.anchor }}">{{ entry.heading | markdownify }}</a>
-                {% if entry.subsections[0] %}
-                  <ul>
-                    {% for subentry in entry.subsections %}
-                      <li>
-                        <a href="{{ site.baseurl }}{{ item.path }}#{{ subentry.anchor }}">{{ subentry.heading | markdownify }}</a>
-                      </li>
-                    {% endfor %}
-                  </ul>
-                {% endif %}
-              </li>
-            {% endfor %}
-          </ul>
-        </div>
-        {% endif %}
-      {% endif %}
-    {% endfor %}
-  {% endif %}
-
-{% endif %}
-{% endfor %}
-</nav>
diff --git a/jekyll-assets/_includes/scripts.html b/jekyll-assets/_includes/scripts.html
deleted file mode 100644
index 66d2fdea65..0000000000
--- a/jekyll-assets/_includes/scripts.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!-- Script for the TOC toggle -->
-<script src="{{ site.baseurl }}/scripts/nav.js?ver={{ site.time | date: '%s' }}" type="text/javascript"></script>
-
-<!-- Asciidoctor tabs -->
-<script src="{{ site.baseurl }}/scripts/asciidoctor-tabs.js?ver={{ site.time | date: '%s' }}" type="text/javascript"></script>
-
-<!-- TOCify scripts -->
-<script src="{{ site.baseurl }}/scripts/jquery-1.12.4.min.js"></script>
-<script src="{{ site.baseurl }}/scripts/jquery-ui-1.13.0.custom.min.js"></script>
-<script src="{{ site.baseurl }}/scripts/jquery.tocify.js?ver={{ site.time | date: '%s' }}"></script>
-
-<!-- Copy To Clipboard scripts -->
-<script src="{{ site.baseurl }}/scripts/clipboard.min.js"></script>
-<script src="{{ site.baseurl }}/scripts/copy-to-clipboard.js?ver={{ site.time | date: '%s' }}"></script>
-
-<!-- Some custom handling for whitepapers -->
-<script src="{{ site.baseurl }}/scripts/whitepaper.js?ver={{ site.time | date: '%s' }}"></script>
-
-<script>
-  function hasher(text, element) {
-    return text.toLowerCase().replace(/ /g, "-").replace(/\./g, "-").replace(/[^-\w]/g, "").replace(/-+/g, "-");
-  }
-
-  function waitForElementToDisplay(selector, checkFrequencyInMs, timeoutInMs) {
-    try {
-      // wait for all the content to load first...
-      var startTimeInMs = Date.now();
-      (function loopSearch() {
-        //  && document.querySelector(selector).getBoundingClientRect().top > 0
-        if (document.querySelector(selector) != null && document.querySelector(selector).getBoundingClientRect().top > 0) {
-          scrollToElement(selector);
-          return;
-        }
-        else {
-          setTimeout(function () {
-            if (timeoutInMs && Date.now() - startTimeInMs > timeoutInMs)
-              return;
-            loopSearch();
-          }, checkFrequencyInMs);
-        }
-      })();
-    } catch (e) {
-      console.log("there was an error in scrollToElement:");
-      console.log(e);
-    }
-  }
-
-  function scrollToElement(selector) {
-    try {
-      var target = document.querySelector(selector);
-      if (target) {
-        setTimeout(function () {
-          target.scrollIntoView({ behavior: "instant" });
-          setTimeout(function () {
-            target.scrollIntoView({ behavior: "instant" });
-          },100);
-        },1);
-        
-        
-      } else {
-        console.log("Target not found :(");
-      }
-    } catch (e) {
-      console.log("there was an error in scrollToElement:");
-      console.log(e);
-    }
-  }
-
-  $(function() {
-    $("#toc").tocify({ showAndHide: false, hashGenerator: hasher, extendPage: false, ignoreSelector: ".discrete" });
-    // special handling to scroll to tocify elements on the page
-    if (window.location.hasOwnProperty("hash") && window.location.hash.indexOf("#") > -1) {
-      var myhash = window.location.hash;
-      myhash = myhash.replace("#", "");
-      var selector = "div[data-unique="+myhash+"] + *";
-      waitForElementToDisplay(selector, 1000, 9000);
-    }
-  });
-</script>
-
-<script>
-  var contents = document.getElementById("contents");
-  contents.addEventListener('mouseenter', e => {
-    contents.style.overflowY = 'auto';
-  });
-
-  contents.addEventListener('mouseleave', e => {
-    contents.style.overflowY = 'hidden';
-  });
-</script>
diff --git a/jekyll-assets/_includes/subtitle.html b/jekyll-assets/_includes/subtitle.html
deleted file mode 100644
index 9d09b295e3..0000000000
--- a/jekyll-assets/_includes/subtitle.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div class="subtitle">
-  <p>The official documentation for<br /> Raspberry Pi computers and microcontrollers</p>
-</div>
\ No newline at end of file
diff --git a/jekyll-assets/_includes/subtitle404.html b/jekyll-assets/_includes/subtitle404.html
deleted file mode 100644
index f5c20144e9..0000000000
--- a/jekyll-assets/_includes/subtitle404.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div class="subtitle error-message">
-  <p>We couldn't find what you were looking for. Please browse our updated <a href="{{ site.baseurl }}/"><strong>Raspberry Pi</strong> Documentation</a>.</p>
-</div>
diff --git a/jekyll-assets/_includes/theme.html b/jekyll-assets/_includes/theme.html
new file mode 100644
index 0000000000..7f5f4add27
--- /dev/null
+++ b/jekyll-assets/_includes/theme.html
@@ -0,0 +1,3 @@
+<div id="theme-toggle-container">
+	<a id="theme-toggle" alt="toggle site theme" title="toggle site theme" onclick="toggleTheme()"></a>
+</div>
\ No newline at end of file
diff --git a/jekyll-assets/_includes/toptitle.html b/jekyll-assets/_includes/toptitle.html
deleted file mode 100644
index b98cf33465..0000000000
--- a/jekyll-assets/_includes/toptitle.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="toptitle">
-  <h1><a href="{{ site.baseurl }}/"><strong>Raspberry Pi</strong> Documentation</a></h1>
-  <div id="docsearch"></div>
-</div>
diff --git a/jekyll-assets/_includes/toptitle404.html b/jekyll-assets/_includes/toptitle404.html
deleted file mode 100644
index 4d94ee4954..0000000000
--- a/jekyll-assets/_includes/toptitle404.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div class="toptitle error-message">
-  <h1><strong>404</strong></h1>
-  <div id="docsearch"></div>
-</div>
diff --git a/jekyll-assets/_layouts/boxes.html b/jekyll-assets/_layouts/boxes.html
index 1a0c35a0e6..e82849b15f 100644
--- a/jekyll-assets/_layouts/boxes.html
+++ b/jekyll-assets/_layouts/boxes.html
@@ -1,19 +1,20 @@
 <!doctype html>
 <html lang="en">
   <head>
-    {% include head.html %} 
-    <link rel="stylesheet" href="{{ site.baseurl }}/css/boxes.css?ver={{ site.time | date: '%s' }}">
+    {% include head.html %}
   </head>
-  <body>
-    {% include header.html %}      
-    {% if page.name == "404.adoc" %}
-      {% include toptitle404.html %}
-      {% include subtitle404.html %}
-    {% else %}
-      {% include toptitle.html %}
-      {% include subtitle.html %}
-    {% endif %}
-    {% include tabs.html %}
+  <body onload="makeToc()">
+    <script type="text/javascript">initTheme()</script>
+    {% include header.html %}
+
+    <div class="toptitle">
+      <h1><a href="/documentation/"><b>Raspberry Pi</b> Documentation</a></h1>
+      <div id="search-theme-toggle-container">
+        <div id="docsearch"></div>
+        {% include theme.html %}
+      </div>
+      {% include tabs.html %}
+    </div>
 
     <div id="container">
       <section id="box-content">
@@ -35,9 +36,8 @@
       </section>
     </div>
 
-    {% include contribute.html %} 
-    {% include copyright.html %} 
-    {% include footer.html %}  
+    {% include legal.html %}
+    {% include footer.html %}
     {% include search.html %}
 
   </body>
diff --git a/jekyll-assets/_layouts/docs.html b/jekyll-assets/_layouts/docs.html
index ae4d626359..daae62b60d 100644
--- a/jekyll-assets/_layouts/docs.html
+++ b/jekyll-assets/_layouts/docs.html
@@ -1,27 +1,199 @@
 <!doctype html>
 <html lang="en">
   <head>
-    {% include head.html %} 
+    {% include head.html %}
   </head>
-  <body>
-    {% include header.html %}      
-    {% include toptitle.html %}
-    {% include tabs.html %}
+  <body onload="makeToc()">
+    <script type="text/javascript">initTheme()</script>
+    <input type="checkbox" id="mobile-toggle" />
+    {% include header.html %}
+    <div id="docs-content">
+      <div id="toc-container-container">
+        <div id="toc-container">
+          <div id="toc-inner">
+            <div id="docs-header">
+              <h1 id="docs-header-title">
+                <a href="/documentation">
+                  Documentation
+                </a>
+              </h1>
+              <label class="mobile-menu-toggle" for="mobile-toggle"><div>≣</div></label>
+              {% include theme.html %}
+            </div>
+            <div id="docsearch">
+            </div>
+          </div>
+          <div class="toc">
+          {% for subdir in site.data.nav %}
+          {% if subdir.toc[0] %}
+            <ul class="sectlevel1">
+              <input class="toc-toggle-box" type="checkbox" id="{{ subdir.path }}"
+                {% if page.url contains subdir.path %}
+                checked=true
+                {% endif %}
+              />
+              <li>
+                <span>
+                  <label class="toc-toggle" for="{{ subdir.path }}" onclick="event.stopPropagation()">
+                    <div class="toc-toggle-container">
+                      <a class="level1" href="{{ site.baseurl }}{{ subdir.path }}">
+                        <a title="expand {{ item.title | markdownify }}"
+                          {% if page.url contains subdir.path %}
+                          class="bold toc-item"
+                          {% else %}
+                          class="toc-item"
+                          {% endif %}
+                        >
+                          {{ subdir.title | markdownify }}
+                        </a>
+                      </a>
+                    </div>
+                  </label>
+                </span>
+              </li>
+              {% for item in subdir.toc %}
+              <div class="itemcontents">
+                <ul class="sectlevel1">
+                  <input class="toc-toggle-box" type="checkbox" id="{{ item.path }}"
+                    {% if page.url contains item.path %}
+                    checked=true
+                    {% endif %}
+                  />
+                  <li>
+                    <span>
+                      <label class="toc-toggle" for="{{ item.path }}">
+                        <div class="toc-toggle-container">
+                          <a class="level2" href="{{ site.baseurl }}{{ item.path }}">
+                            <a title="expand {{ item.title | strip_html }}"
+                              {% if page.url contains item.path %}
+                              class="bold toc-item"
+                              {% else %}
+                              class="toc-item" 
+                              {% endif %}
+                            >
+                            {{ item.title | markdownify }}
+                            </a>
+                          </a>
+                        </div>
+                      </label>
+                    </span>
+                  </li>
+                  {% if item.sections[0] %}
+                  {% for entry in item.sections %}
+                  <div class="itemcontents">
+                    <ul class="sectlevel1">
+                      <input class="toc-toggle-box" type="checkbox" id="{{ item.path }}#{{ entry.anchor }}"
+                        {% if endcapture contains entry.anchor %}
+                        checked=true
+                        {% endif %}
+                      />
+                      <li>
+                        <span>
+                          <label class="toc-toggle"
+                            {% if entry.subsections[0] %}
+                            for="{{ item.path }}#{{ entry.anchor }}"
+                            {% else %}
+                            {% endif %}>
+                            <div class="toc-toggle-container">
+                              {% if entry.subsections[0] %}
+                              <a class="level3">
+                                <a
+                                  id="{{ item.path }}#{{entry.anchor}}-toc"
+                                  href="{{ site.baseurl }}{{ item.path }}#{{ entry.anchor }}"
+                                  class="toc-item"
+                                  onclick="document.getElementById('mobile-toggle').checked = false; updateCurrentToc('{{ item.path }}#{{ entry.anchor }}-toc', '{{ item.path }}#{{ entry.anchor }}');"
+                                  title="expand {{ entry.heading | strip_html }}"
+                                >
+                                <script type="text/javascript">if (window.location.hash == '#{{ entry.anchor }}') initialiseCurrentToc('{{ item.path }}#{{entry.anchor}}-toc', '{{ item.path }}#{{ entry.anchor }}');
+                                </script>
+                                  {{ entry.heading | markdownify }}
+                                </a>
+                              </a>
+                              {% else %}
+                              <a class="level3">
+                                <a id="{{ item.path }}#{{entry.anchor}}-toc"
+                                  title="expand {{ entry.heading | strip_html }}"
+                                  href="{{ site.baseurl }}{{ item.path }}#{{ entry.anchor }}"
+                                  onclick="document.getElementById('mobile-toggle').checked = false; updateCurrentToc('{{ item.path }}#{{ entry.anchor }}-toc');"
+                                  class="toc-item no-dropdown"
+                                  >
+                                  <script type="text/javascript">if (window.location.hash == '#{{ entry.anchor }}')
+                                    initialiseCurrentToc('{{ item.path }}#{{entry.anchor}}-toc');
+                                  </script>
+                                  {{ entry.heading | markdownify }}
+                                </a>
+                              </a>
+                              {% endif %}
+                            </div>
+                          </label>
+                        </span>
+                      </li>
+                      {% if entry.subsections[0] %}
+                      {% for subentry in entry.subsections %}
+                      <div class="itemcontents">
+                        <ul class="sectlevel1">
+                          <li>
+                            <span>
+                              <label class="toc-toggle">
+                                <div class="toc-toggle-container">
+                                    <a class="level4">
+                                      <a class="toc-item no-dropdown"
+                                        href="{{ site.baseurl }}{{ item.path }}#{{ subentry.anchor }}"
+                                        onclick="document.getElementById('mobile-toggle').checked = false; updateCurrentToc('{{ item.path }}#{{ entry.anchor }}-toc', '{{ item.path }}#{{ entry.anchor }}', '{{ item.path }}#{{ subentry.anchor }}-toc');"
+                                        id="{{ item.path }}#{{subentry.anchor}}-toc"
+                                      >
+                                      <script type="text/javascript">if (window.location.hash == '#{{ subentry.anchor }}') initialiseCurrentToc('{{ item.path }}#{{ entry.anchor }}-toc', '{{ item.path }}#{{ entry.anchor }}', '{{ item.path }}#{{subentry.anchor}}-toc');
+                                      </script>
+                                        {{ subentry.heading | markdownify }}
+                                      </a>
+                                    </a>
+                                  </div>
+                              </label>
+                            </span>
+                          </li>
+                        </ul>
+                      </div>
+                      {% endfor %}
+                      {% endif %}
+                    </ul>
+                  </div>
+                  {% endfor %}
+                  {% endif %}
+                </ul>
+              </div>
+              {% endfor %}
+            </ul>
+            {% endif %}
+            {% endfor %}
+          </div>
+        </div>
+      </div>
+      <div id="docs-container">
+        <div id="main-window">
+          <section id="content">
+            <h1>{{ page.sub_title | markdownify | remove: '<p>' | remove: '</p>'}}</h1>
+            {{ content }}
+          </section>
 
-    <div id="container">
-      {% include mobile_nav.html %}
-      {% include nav.html %}
+          <div id="on-this-page">
+            <div id="on-this-page-inner">
+              <h5>On this page</h5>
+              <div id="toc">
+                {{ page.document | tocify_asciidoc: 3 }}
+              </div>
+              <div id="tocbot">
+              </div>
+            </div>
+          </div>
+        </div>
 
-      <section id="content">
-        <h1>{{ page.sub_title | markdownify | remove: '<p>' | remove: '</p>'}}</h1>
-        {{ content }}
-      </section>
-    </div>
-
-    {% include copyright.html %} 
-    {% include footer.html %}  
-    {% include scripts.html %}
-    {% include search.html %}
+        {% include legal.html %}
+        {% include footer.html %}
+        {% include search.html %}
 
+        <script async src="{{ site.baseurl }}/scripts/clipboard.min.js?ver={{ site.time | date: '%s' }}"></script>
+        <script async src="{{ site.baseurl }}/scripts/copy-to-clipboard.js?ver={{ site.time | date: '%s' }}"></script>
+      </div>
+    </div>
   </body>
 </html>
diff --git a/jekyll-assets/css/asciidoctor-tabs.css b/jekyll-assets/css/asciidoctor-tabs.css
index 1afbd9185a..eb9ac32efc 100644
--- a/jekyll-assets/css/asciidoctor-tabs.css
+++ b/jekyll-assets/css/asciidoctor-tabs.css
@@ -1,4 +1,3 @@
-
 /*! Asciidoctor Tabs | Copyright (c) 2018-present Dan Allen | MIT License */
 .tabs {
   margin-bottom: 1.25em;
@@ -16,7 +15,7 @@
 
 .tablist > ul li {
   align-items: center;
-  background-color: #eee;
+  background-color: var(--bg);
   cursor: pointer;
   display: flex;
   font-weight: bold;
@@ -52,18 +51,26 @@
   right: 0;
 }
 
+.tabs:not(.is-loading) .tablist .is-selected {
+  background-color: var(--tab-bg-colour);
+  color: var(--textcolor);
+  border-left: 1px solid var(--tab-bg-colour);
+  border-right: 1px solid var(--tab-bg-colour);
+  border-top: 1px solid var(--tab-bg-colour);
+}
+
 .tabs.is-loading .tablist li:not(:first-child),
 .tabs:not(.is-loading) .tablist li:not(.is-selected) {
-  background-color: initial;
-  border-left: 1px solid #eee;
-  border-right: 1px solid #eee;
-  border-top: 1px solid #eee;
+  background-color: var(--bg);
+  color: var(--subtle-text);
+  border-left: 1px solid var(--tab-bg-colour);
+  border-right: 1px solid var(--tab-bg-colour);
+  border-top: 1px solid var(--tab-bg-colour);
 }
 
 .tabs.is-loading .tablist li:first-child::after,
 .tabs:not(.is-loading) .tablist li.is-selected::after {
-  background-color: #eee;
-  border-top: 2px solid var(--red);
+  border-top: 2px solid var(--accent) !important;
 }
 
 /*
@@ -79,7 +86,7 @@
 }
 
 .tabpanel {
-  background-color: #eee;
+  background-color: var(--tab-bg-colour);
   padding: 1.25em;
 }
 
diff --git a/jekyll-assets/css/boxes.css b/jekyll-assets/css/boxes.css
deleted file mode 100644
index 8d98497369..0000000000
--- a/jekyll-assets/css/boxes.css
+++ /dev/null
@@ -1,83 +0,0 @@
-* {
-  box-sizing: border-box;
-}
-
-section#box-content {
-  display: flex;
-  flex-wrap: wrap;
-  flex-direction: row;
-  justify-content: center;
-  max-width: 1200px;
-}
-
-a.box {
-  display: flex;
-  flex-direction: column;
-  justify-content: flex-start;
-  align-items: center;
-  height: 275px;
-  width: 350px;
-  text-decoration: none;
-  background-color: #fff;
-  padding: 30px 30px;
-  margin-left: 15px;
-  margin-right: 15px;
-  margin-bottom: 30px;
-}
-
-a.box[href*='/pico-sdk/'] span:not(.title) {
-  font-size: 0.8em;
-}
-
-a.box span {
-  color: #343434;
-  display: block;
-  text-align: center;
-}
-
-a.box span.title, 
-a.box[href*='/pico-sdk/'] span.title {
-  color: #000;
-  font-size: 1.1em;
-  font-weight: bold;
-  margin-bottom: 20px;
-}
-
-a.box img {
-  max-height: 121px;
-}
-
-div.toptitle {
-  padding-top: 130px;
-  padding-bottom: 30px;
-}
-
-div.toptitle.error-message h1 {
-  font-size: 6.0em;
-}
-
-div.subtitle.error-message p {
-  max-width: 400px;
-}
-
-div.subtitle.error-message p a {
-  color: #fff;
-}
-
-#container {
-  justify-content: center;
-}
-
-@media screen and (max-width: 1219px) {
-  p#release {
-    width: 800px;
-  }
-}
-
-@media screen and (max-width: 889px) {
-  p#release {
-    text-align: center;
-    padding-right: 0px;
-    width: 100%;
-  }
-}
diff --git a/jekyll-assets/css/search.svg b/jekyll-assets/css/search.svg
index e25221997a..09e605db61 100644
--- a/jekyll-assets/css/search.svg
+++ b/jekyll-assets/css/search.svg
@@ -5,7 +5,7 @@
 	 viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
 <g id="search_3_">
 	<g>
-		<path fill="#ffffff" fill-rule="evenodd" clip-rule="evenodd" d="M19.56,17.44l-4.94-4.94C15.49,11.21,16,9.67,16,8c0-4.42-3.58-8-8-8S0,3.58,0,8
+		<path fill="var(--subtle)" fill-rule="evenodd" clip-rule="evenodd" d="M19.56,17.44l-4.94-4.94C15.49,11.21,16,9.67,16,8c0-4.42-3.58-8-8-8S0,3.58,0,8
 			s3.58,8,8,8c1.67,0,3.21-0.51,4.5-1.38l4.94,4.94C17.71,19.83,18.09,20,18.5,20c0.83,0,1.5-0.67,1.5-1.5
 			C20,18.09,19.83,17.71,19.56,17.44z M8,14c-3.31,0-6-2.69-6-6s2.69-6,6-6s6,2.69,6,6S11.31,14,8,14z"/>
 	</g>
diff --git a/jekyll-assets/css/style.css b/jekyll-assets/css/style.css
index 6f123e9bae..4fb17f80aa 100644
--- a/jekyll-assets/css/style.css
+++ b/jekyll-assets/css/style.css
@@ -1,35 +1,105 @@
 :root {
-  --red: #cd2355;
+  --bg: #000000;
+  --near-bg: #111;
+  --top-title-colour: #343434;
   --red-tint: #d75a64;
-  --docsearch-primary-color: var(--red);
+  --brand-colour: #cd2355;
+  --code-bg-colour: #121212;
+  --code-bg-colour-transparent: rgba(18, 18, 18, 0.9);
+  --tab-bg-colour: #252535;
+  --toc-hover-colour: #353545;
+  --subtle: #707070;
+  --less-subtle: #333;
+  --home: #cd2355;
+  --rp2040-context-tag: #50C878;
+  --accent: #d75a64;
+  --docsearch-primary-color: var(--accent);
   --docsearch-logo-color: var(--red-tint);
+  --copy-button-bg: #707070;
+  --copy-button-text: #CCC;
+  --textcolor: white;
+  --subtle-text: #CCC;
+  --theme-toggle-label: "☀️";
+  --not-expanded-label: "▶";
+
+  /* header and footer styling */
+  --rptl-header-background-color: var(--bg);
+  --rptl-header-border-bottom-color: var(--code-bg-colour);
+  --rptl-header-text-color: var(--textcolor);
+  --rptl-header-burger-stroke-color: var(--textcolor);
+  --rptl-header-subnav-background-color: var(--near-bg);
+  --rptl-header-logo-text-fill: var(--textcolor);
+  --rptl-header-logo-leaf-fill: var(--bg);
+  --rptl-header-logo-berry-fill: var(--bg);
+  --rptl-cookiebanner-background-color: var(--code-bg-colour);
+  --rptl-cookiebanner-text-color: var(--textcolor);
+  --rptl-footer-background-color: #13131B;
+  --rptl-footer-text-color: var(--subtle-text);
+
+  color: var(--textcolor);
+}
+.light {
+  --bg: #fff;
+  --near-bg: #f6f6f6;
+  --red-tint: #d75a64;
+  --top-title-colour: #343434;
+  --brand-colour: #cd2355;
+  --code-bg-colour: #f7f8fa;
+  --code-bg-colour-transparent: rgba(247, 248, 250, 0.9);
+  --tab-bg-colour: #eff1f6;
+  --toc-hover-colour: #fff;
+  --subtle: #707070;
+  --less-subtle: #333;
+  --home: #cd2355;
+  --rp2040-context-tag: #50C878;
+  --accent: #cd2355;
+  --docsearch-primary-color: var(--accent);
+  --docsearch-logo-color: var(--red-tint);
+  --copy-button-bg: #f6f6f6;
+  --copy-button-text: #444;
+  --textcolor: black;
+  --subtle-text: #444;
+  --theme-toggle-label: "🌙";
+  --not-expanded-label: "▶";
+
+  /* header and footer styling */
+  --rptl-header-background-color: var(--bg);
+  --rptl-header-border-bottom-color: #dedede;
+  --rptl-header-text-color: var(--textcolor);
+  --rptl-header-burger-stroke-color: var(--subtle);
+  --rptl-header-subnav-background-color: #f7f8fa;
+  --rptl-header-logo-text-fill: var(--textcolor);
+  --rptl-header-logo-leaf-fill: #46af4b;
+  --rptl-header-logo-berry-fill: var(--brand-colour);
+  --rptl-cookiebanner-background-color: var(--less-subtle);
+  --rptl-cookiebanner-text-color: var(--bg);
+  --rptl-footer-background-color: #f5f6f9;
+  --rptl-footer-text-color: var(--less-subtle);
+
+  color: var(--textcolor);
+
 }
 
-/* overrides for the old theme */
 body {
-    font-family: initial;
-    font-weight: initial;
-    background: transparent;
-    color: initial;
-    font-size: initial;
-    line-height: initial;
-    margin: 0;
+  font-family: initial;
+  font-weight: initial;
+  background: transparent;
+  color: var(--textcolor);
+  font-size: initial;
+  line-height: initial;
+  margin: 0;
+  background-color: var(--bg);
 }
 
 h1 {
-    width: auto;
-    min-height: auto;
-    margin: 0;
-    padding: 0;
-    font-size: initial;
-    line-height: initial;
-    color: initial;
-    background: transparent;
-}
-/* end overrides */
-
-* {
-  box-sizing: border-box;
+  width: auto;
+  min-height: auto;
+  margin: 0;
+  padding: 0;
+  font-size: initial;
+  line-height: initial;
+  color: initial;
+  background: transparent;
 }
 
 body, article, div, nav, h1, h2, h3, h4, p { 
@@ -39,12 +109,8 @@ body, article, div, nav, h1, h2, h3, h4, p {
   padding: 0;
 }
 
-body {
-  background-color: #f6f6f6;
-}
-
 a {
-  color: var(--red);
+  color: var(--accent);
   text-decoration: none;
 }
 
@@ -52,36 +118,48 @@ a:hover {
   text-decoration: underline;
 }
 
+code {
+  color: var(--textcolor);
+}
+
 .toptitle {
-  color: #fff;
   text-align: center;
-  width: 100%;
-  background-color: #343434;
-  position: relative;
-  padding-top: 50px;
-  padding-bottom: 20px;
+  position: sticky;
+  padding-bottom: 10px;
   margin-bottom: 0px;
+  top: 0;
+  z-index: 99;
+  background-color: var(--bg);
 }
 
 .toptitle h1 {
   font-size: 2.5em;
-  font-weight: normal;
+  font-weight: lighter;
   letter-spacing: 1px;
-  color: #fff;
+  color: var(--bg);
   position: relative;
   margin-top: 0px;
+  text-align: center;
+  margin-top: 10px;
+  margin-left: 10px;
+  flex-grow: 1;
+}
+
+.toptitle div {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
 }
 
 .toptitle h1 a {
+  color: var(--textcolor);
   text-decoration: none;
-  color: #fff;
 }
 
 div.subtitle {
-  color: #fff;
-  background-color: #343434;
+  color: var(--bg);
+  background-color: var(--top-title-colour);
   padding-top: 0;
-  padding-bottom: 80px;
   text-align: center;
 }
 
@@ -92,40 +170,460 @@ div.subtitle p {
   margin-right: auto;
 }
 
+#docs-header {
+  padding: 10px;
+  display: flex;
+  padding: 5px;
+  align-items: center;
+}
+
+#docs-header a:hover {
+  color: var(--brand-colour);
+  text-decoration: none;
+  background-color: var(--toc-hover-colour);
+}
+
+#docs-header a {
+  font-size: 1.9em;
+  font-weight: 400;
+  color: var(--textcolor);
+  border-radius: 3px;
+}
+
+#docs-header-title {
+  flex-grow: 1;
+}
+
+#docs-header-title a {
+  width: 100%;
+  display: inline-block;
+  padding: 5px;
+}
+
 #docsearch .DocSearch-Button {
-  margin-top: 30px;
+  margin-top: 6px;
   margin-left: auto;
   margin-right: auto;
+  width: 100%;
+  border: 1px solid var(--accent);
 }
 
-#container {
+#main-window {
+  display: flex;
+  justify-content: center;
+}
+
+/* boxes page, constrain search bar/theme toggle line to a reasonable size */
+body > .toptitle > #search-theme-toggle-container {
+  width: 50%;
+  margin: auto;
+  max-width: 900px;
+}
+
+body > .toptitle > #search-theme-toggle-container > #theme-toggle-container {
+  flex-grow: 0;
+}
+
+#docs-container {
   position: relative;
+  flex-grow: 1;
+  white-space: initial;
+  word-break: break-word;
+  overflow: wrap;
+  padding-right: 0px;
+  margin-right: 0px;
+}
+
+#container .section {
+  display: flex;
+  flex-direction: column;
+  width: 100%;
+}
+
+#docs-content #container {
+  align-items: start;
+}
+
+#docs-content ul {
+  padding-left: 20px;
+}
+
+#docs-content ol {
+  padding-left: 20px;
+}
+
+#docs-content #toc-container-container {
+  flex-grow: 0;
+  flex-basis: 250px;
+  background-color: var(--code-bg-colour);
+  top: 0;
+  position: sticky;
+}
+
+#docs-content #toc-container-container #toc-container {
+  position: sticky;
+  top: 0;
+  flex-grow: 0;
+}
+
+h1 code {
+  color: var(--accent);
+}
+
+pre {
+  color: var(--textcolor);
+}
+
+#toc-container code {
+  color: var(--subtle-text);
+}
+
+#toc-container #docsearch {
+  margin-left: 5px;
+  margin-right: 5px;
+  padding-bottom: 5px;
+  align-content: center;
+}
+
+#theme-toggle {
+  border-radius: 3px;
+  padding: 5px;
+}
+
+#theme-toggle:hover {
+  background-color: var(--toc-hover-colour);
+  text-decoration: none;
+}
+
+#search-theme-toggle-container {
   display: flex;
   flex-direction: row;
+  gap: 20px;
+  align-items: center;
   justify-content: center;
-  margin: 100px 100px 0px 100px;
 }
 
-#container nav#contents {
-  width: 300px;
-  max-width: 400px;
+#theme-toggle-container {
+  align-self: center;
+  align-items: start;
 }
 
-nav#mobile-contents {
+#docsearch {
+  flex-grow: 1;
+}
+
+#search-theme-toggle-container #theme-toggle-container::after {
+  height: 100%;
+}
+
+#theme-toggle-header {
+  font-family: monospace;
+}
+
+#theme-toggle-header:after {
+  content: var(--theme-toggle-label);
+}
+
+#theme-toggle span {
+  display: none;
+}
+#theme-toggle:after {
+  content: var(--theme-toggle-label);
+}
+
+.toc-toggle-container {
+  display: flex;
+  align-items: center;
+  width: 100%;
+}
+
+.toc-item {
+  color: var(--accent);
+  border-radius: 3px;
+  padding: 5px;
+  display: flex;
+  align-items: center;
+  width: 100%;
+}
+
+.toc-item p {
+  color: var(--subtle-text);
+  padding-right: 5px;
+}
+
+.toc-item:hover {
+  color: var(--accent);
+  background-color: var(--toc-hover-colour);
+  text-decoration: none;
+}
+
+#toc-toggle-header {
+  font-family: monospace;
+  color: var(--accent);
+}
+
+input:checked + li span label div .toc-item::before {
+  transform: rotate(90deg);
+}
+
+.toc-item.no-dropdown::before {
+  transition: .1s ease-in;
+  content: '';
+  width: 13px;
+  height: 13px;
+  clip-path: polygon(0% 0%);
+}
+
+.bold {
+  font-weight: bold;
+}
+
+.toc-item span {
   display: none;
 }
 
-nav#contents {
+.toc-item::before {
+  transition: .1s ease-in;
+  content: '';
+  background-color: var(--accent);
+  width: 13px;
+  height: 13px;
+  clip-path: polygon(0% 0%, 100% 50%, 0% 100%);
+}
+
+#docs-content {
+  display: flex;
+  justify-content: left;
+  height: 100%;
+  width: 100%;
+}
+
+#on-this-page {
+  align-self: flex-start; /* otherwise, uses the same height as all other flex items -- including content! */
+  position: sticky;
+  top: 0;
+  flex-shrink: 0;
+  margin-left: 3px;
+}
+
+#on-this-page-inner {
+  padding-top: 10px;
+  margin-left: 10px;
+  color: var(--subtle);
+}
+
+#on-this-page-inner h5 {
+  margin-bottom: 6px;
+}
+
+/* hide the non-tocbot non-interactive toctree from view -- just needed to generate tocbot version */
+#on-this-page-inner #toc {
+  display: none;
+}
+
+.sectlevel1 {
+  flex-grow: 0;
+  margin-right: 10px;
   --offset: 1rem;
   align-self: start;
-  position: -webkit-sticky;
-  position: sticky;
   top: var(--offset);
-  max-height: calc(100vh - var(--offset));
+  overflow-x: clip;
+  padding-left: 5px;
+  padding-right: 0px;
+  margin: 0px;
+  list-style-type: none;
+  background-color: var(--code-bg-colour);
 }
 
-nav#contents {
-  overflow-y: auto;
+.sectlevel1 li span {
+  display: flex;
+  align-items: center;
+}
+
+.sectlevel1 li span label {
+  display: flex;
+  align-items: center;
+  width: 100%;
+}
+
+a.level1 p::before {
+  content ">"
+}
+
+a.level1 ~ a p {
+  color: var(--subtle-text);
+  border-radius: 3px;
+  padding-top: 3px;
+  padding-left: 2px;
+  padding-bottom: 3px;
+  margin-left: 5px;
+  margin-right: 5px;
+  width: 100%;
+}
+
+a.level2 ~ a p {
+  color: var(--subtle-text);
+  border-radius: 3px;
+  padding-top: 3px;
+  padding-left: 2px;
+  padding-bottom: 3px;
+  margin-left: 15px;
+  margin-right: 5px;
+  width: 100%;
+}
+
+a.level3 ~ a p {
+  color: var(--subtle-text);
+  border-radius: 3px;
+  padding-top: 3px;
+  padding-left: 2px;
+  padding-bottom: 3px;
+  margin-left: 25px;
+  margin-right: 5px;
+  width: 100%;
+}
+
+a.level4 ~ a p {
+  color: var(--subtle-text);
+  border-radius: 3px;
+  padding-top: 3px;
+  padding-left: 2px;
+  padding-bottom: 3px;
+  margin-left: 25px;
+  margin-right: 5px;
+  width: 100%;
+}
+
+a.level1:hover {
+  text-decoration: none;
+}
+
+a.level1:hover p {
+  color: var(--brand-colour);
+  background-color: var(--toc-hover-colour);
+  padding-left: 1px;
+}
+
+a.level1:hover p code {
+  color: var(--brand-colour) !important;
+}
+
+a.level2:hover {
+  text-decoration: none;
+}
+
+a.level2:hover p {
+  color: var(--brand-colour);
+  background-color: var(--toc-hover-colour);
+  padding-left: 3px;
+  text-decoration: none;
+}
+
+a.level2:hover p code {
+  color: var(--brand-colour) !important;
+}
+
+a.level3:hover {
+  text-decoration: none;
+}
+
+a.level3:hover p {
+  color: var(--brand-colour);
+  background-color: var(--toc-hover-colour);
+  padding-left: 3px;
+  text-decoration: none;
+}
+
+a.level3:hover p code {
+  color: var(--brand-colour) !important;
+}
+
+a.level4:hover {
+  text-decoration: none;
+}
+
+a.level4:hover p {
+  color: var(--brand-colour);
+  background-color: var(--toc-hover-colour);
+  padding-left: 3px;
+  text-decoration: none;
+}
+
+a.level4:hover p code {
+  color: var(--brand-colour) !important;
+}
+
+.sectlevel1 > li > ul {
+  list-style-type: none;
+  padding-left: 0px;
+}
+
+.sectlevel1 > li > ul > li > ul {
+  list-style-type: none;
+  padding-left: 0px;
+}
+
+li > a {
+  color: var(--subtle-text);
+}
+
+#container section#content {
+  flex-grow: 1;
+}
+
+nav#mobile-contents {
+  display: none;
+}
+
+#tocbot a.toc-link.node-name--H1 {
+  display: none;
+}
+
+#tocbot > * {
+  list-style-type: none;
+  color: var(--subtle-text);
+}
+
+.category-list-item {
+  list-style-type: none;
+  padding-left: 20px;
+  padding-top: 10px;
+}
+
+.category-list-item a {
+  color: var(--textcolor);
+}
+
+@media screen{
+  #tocbot > ul.toc-list{
+    margin-bottom: 0.5em;
+    margin-left: 0.125em
+  }
+  #tocbot ul.sectlevel0, #tocbot a.toc-link.node-name--H1 + ul {
+    padding-left: 0;
+  }
+  #tocbot a.toc-link{
+    height:100%;
+  }
+  .is-collapsible{
+    max-height:3000px;
+    overflow:hidden;
+  }
+  .is-collapsed{
+    max-height:0;
+  }
+  .is-active-link{
+    font-weight:700;
+  }
+}
+@media print{
+  #tocbot a.toc-link.node-name--H4{
+    display:none;
+  }
+}
+
+#high-toc a {
+  color: var(--subtle-text);
 }
 
 nav#mobile-contents {
@@ -140,10 +638,10 @@ nav#mobile-contents {
 nav#contents h2 {
   font-weight: bold;
   font-size: 0.95em;
-  color: #343434;
+  color: var(--textcolor);
   margin-right: 30px;
   margin-bottom: 15px;
-  border-bottom: 1px solid #343434;
+  border-bottom: 1px solid var(--top-title-colour);
 }
 
 nav#contents h3,
@@ -151,28 +649,20 @@ nav#mobile-contents h3 {
   font-weight: bold;
   font-size: 0.85em;
   line-height: 1.5rem;
-  color: #343434;
+  color: var(--textcolor);
   cursor: pointer;
 }
 
 nav#contents ul,
 nav#mobile-contents ul {
-  color: #343434;
+  color: var(--textcolor);
   list-style-type: none;
 }
 
-nav#contents ul.sectlevel1,
-nav#mobile-contents ul.sectlevel1,
-.tocify-item {
-  font-size: 0.85em;
-  padding-left: 20px;
-  height: auto;
-}
-
 nav#contents .itemcontents,
 nav#mobile-contents .contents-inner {
   height: auto;
-  transition: height 1s;
+  transition: height .1s;
 }
 
 nav#contents .itemcontents.hidden,
@@ -183,7 +673,7 @@ nav#mobile-contents .contents-inner.hidden {
 
 nav#contents a,
 nav#mobile-contents a {
-  color: #343434;
+  color: var(--textcolor);
   text-decoration: none;
 }
 
@@ -197,33 +687,24 @@ nav#mobile-contents li {
   margin-bottom: 15px;
 }
 
-nav#contents .tocify-item.active {
-  text-decoration: underline;
-}
-
-ul#tocify-header0,
-ul#tocify-header1 > li:first-of-type {
-  display: none;
-}
-
-ul#tocify-header1,
-ul#tocify-header1 > ul.tocify-subheader {
-  margin-left: 0;
-  padding-left: 0;
-}
-
 #content {
-  width: 70%;
   min-width: 600px;
   max-width: 900px;
-  margin-left: 50px;
+  width: 100%;
+  margin-left: 0px;
+  margin-right: 0px;
+  padding-bottom: 10vh;
+  padding-right: 0px;
+  padding-left: 19px;
+  flex-grow: 0;
 }
 
 #content h1 {
   font-weight: 700;
   font-size: 34px;
-  color: var(--red);
-  margin-bottom: 40px;
+  color: var(--accent);
+  margin-top: 16px;
+  margin-bottom: 20px;
   position: relative;
   margin-left: -1rem;
   padding-left: 1rem;
@@ -232,8 +713,8 @@ ul#tocify-header1 > ul.tocify-subheader {
 #content h2 {
   font-weight: 700;
   font-size: 30px;
-  color: #343434;
-  margin-top: 40px;
+  color: var(--textcolor);
+  margin-top: 20px;
   margin-bottom: 15px;
   position: relative;
   margin-left: -1rem;
@@ -243,8 +724,8 @@ ul#tocify-header1 > ul.tocify-subheader {
 #content h3 {
   font-weight: 700;
   font-size: 24px;
-  color: #343434;
-  margin-top: 40px;
+  color: var(--textcolor);
+  margin-top: 20px;
   margin-bottom: 15px;
   position: relative;
   margin-left: -1rem;
@@ -254,8 +735,8 @@ ul#tocify-header1 > ul.tocify-subheader {
 #content h4 {
   font-weight: 700;
   font-size: 16px;
-  color: #343434;
-  margin-top: 40px;
+  color: var(--textcolor);
+  margin-top: 20px;
   margin-bottom: 15px;
   position: relative;
   margin-left: -1rem;
@@ -311,7 +792,7 @@ h3:hover .anchor,
 h4:hover .anchor, 
 h5:hover .anchor, 
 h6:hover .anchor {
-  color: var(--red);
+  color: var(--accent);
   visibility: visible;
 }
 
@@ -347,6 +828,8 @@ h6 .anchor::before {
 #content div.listingblock {
   margin-bottom: 15px;
   position: relative;
+  width: 99%;
+  overflow-x: scroll;
 }
 
 #content div.admonitionblock div.listingblock {
@@ -357,9 +840,11 @@ h6 .anchor::before {
   position: absolute;
   top: 1px;
   right: 1px;
-  border: 1px solid #d8d8d8;
+  border: 1px solid var(--copy-button-border);
   min-width: 27px;
   padding: 3px;
+  background-color: var(--copy-button-bg);
+  color: var(--copy-button-text);
 }
 
 #content div.listingblock button.copy-button.hidden,
@@ -385,8 +870,8 @@ h6 .anchor::before {
 }
 
 #content div.listingblock div.content {
-  color: #fff;
-  background-color: #343434;
+  color: var(--bg);
+  background-color: var(--code-bg-colour);
   padding: 7px 15px 7px;
   overflow-x: auto !important;
   border-radius: 3px;
@@ -418,8 +903,8 @@ td.mlabels-right {
 
 span.mlabel {
   display: inline-block;
-  background-color: var(--red);
-  color: #ffffff;
+  background-color: var(--accent);
+  color: var(--bg);
   padding: 3px;
   border-radius: 2px;
   font-size: 0.8em;
@@ -436,20 +921,21 @@ span.mlabel {
 
 #content table.tableblock {
   border-collapse: collapse;
+  border: 1px solid var(--subtle);
 }
 
 #content table.tableblock th {
   font-size: 0.85em;
-  background-color: #d8d8d8;
+  background-color: var(--code-bg-colour);
   text-align: left;
   padding: 5px 7px 5px 7px;
-  border: 1px solid #343434;
+  border: 1px solid var(--subtle);
 }
 
 #content td.tableblock {
   border-collapse: collapse;
   padding: 5px 7px 5px 7px;
-  border: 1px solid #343434;
+  border: 1px solid var(--subtle);
 }
 
 #content td.tableblock p {
@@ -488,7 +974,7 @@ span.mlabel {
 
 #content td.icon {
   font-weight: bold;
-  color: #343434;
+  color: var(--top-title-colour);
   vertical-align: top;
   padding-right: 10px;
 }
@@ -500,7 +986,7 @@ span.mlabel {
 #content p > code,
 td code {
   font-size: 1.1em;
-  background-color: #dedede;
+  background-color: var(--code-bg-colour);
   border-radius: 3px;
 }
 
@@ -520,6 +1006,7 @@ td div.listingblock div.content code {
 }
 
 div.imageblock div.title {
+  color: var(--subtle);
   font-style: italic;
   font-weight: 300;
   font-size: 0.8em;
@@ -559,6 +1046,10 @@ div.imageblock div.title {
   max-width: 250px;
 }
 
+div.admonitionblock .content {
+  background-color: var(--near-bg);
+}
+
 div.admonitionblock table {
   display: flex;
   width: 100%;
@@ -574,12 +1065,12 @@ div.admonitionblock tr {
 }
 
 div.admonitionblock td div.title {
-  color: var(--red);
+  color: var(--accent);
   text-transform: uppercase;
 }
 
 div.admonitionblock td.content {
-  border: 2px solid var(--red);
+  border: 2px solid var(--accent);
   padding: 10px;
   margin-top: 10px;
   width: 100%;
@@ -614,7 +1105,8 @@ div.videoblock iframe {
 
 .whitepaper .content,
 .tutorial .content {
-  border: 2px solid var(--red);
+  background-color: var(--near-bg);
+  border: 2px solid var(--accent);
   padding: 10px;
 }
 
@@ -622,7 +1114,7 @@ div.videoblock iframe {
   content: "White paper";
   text-transform: uppercase;
   display: block;
-  color: var(--red);
+  color: var(--accent);
   margin-bottom: 10px;
   font-weight: bold;
 }
@@ -635,19 +1127,18 @@ div.videoblock iframe {
 }
 
 .whitepaper .coverimage {
-  background-color: #fff;
+  background-color: white;
   background-repeat: no-repeat;
-  background-image: url(whitepaper_coverimage.png);
   background-size: 100px 170px;
   flex: 0 0 auto;
   margin-right: 10px;
   height: 170px;
   width: 100px;
-  border: 1px solid #cecece;
+  border: 1px solid var(--accent);
   text-align: right;
   padding: 20px 15px 15px;
   font-family: monospace;
-  color: var(--red);
+  color: var(--accent);
   font-size: 10px;
   cursor: pointer;
 }
@@ -667,14 +1158,14 @@ div.videoblock iframe {
 
 #content .tutorial div.paragraph.tutorialdescription p {
   font-style: italic;
-  color: var(--red);
+  color: var(--accent);
 }
 
 /* TUTORIAL SECTIONS */
 
 #content .tutorialcard {
   max-width: 400px;
-  border: 1px solid #dedede;
+  border: 1px solid var(--code-bg-colour);
   border-radius: 5px;
 }
 
@@ -713,7 +1204,7 @@ div.videoblock iframe {
   line-height: 1em;
   font-weight: bold;
   background-color: orange;
-  color: #ffffff;
+  color: var(--bg);
   border-radius: 0.5em;
   padding-left: 0.5em;
   padding-right: 0.5em;
@@ -722,7 +1213,7 @@ div.videoblock iframe {
 }
 
 .contexttag.RP2040 {
-  background-color: #50C878;
+  background-color: var(--rp2040-context-tag);
 }
 
 div.listingblock pre.highlight {
@@ -755,7 +1246,7 @@ div.listingblock pre.highlight {
 /* OLD DOXYGEN ELEMENTS */
 
 div.memproto {
-  background-color: #dedede;
+  background-color: var(--code-bg-colour);
   padding: 7px;
   margin-bottom: 15px;
   position: relative;
@@ -823,13 +1314,15 @@ span.obfuscator {
 /* LEGAL */
 
 div.legal {
-  margin: 60px auto 0 auto;
-  max-width: 1200px;
-  display: flex;
+  padding-left: 5%;
+  padding-right: 5%;
+  padding-top: 10px;
+  display: grid;
   align-items: center;
   justify-content: center;
-  flex-direction: column;
-  padding-bottom: 40px;
+  background-color: var(--rptl-footer-background-color);
+  width: 100%;
+  font-size: .7em;
 }
 
 div.legal + div.legal {
@@ -837,9 +1330,14 @@ div.legal + div.legal {
 }
 
 div.legal-inner {
+  color: var(--subtle);
   width: 100%;
 }
 
+.legal-inner p {
+  padding-top: 10px;
+}
+
 div.contribute {
   margin: 60px auto 0 auto;
   max-width: 1200px;
@@ -858,134 +1356,209 @@ div.contribute-inner {
   width: 100%;
 }
 
-
-
 p#copyright {
   font-family: 'Roboto', sans-serif;
   font-weight: 300;
   font-size: 0.85em;
-  color: #707070;
+  color: var(--subtle);
+  text-align: left;
+  padding-bottom: 10px;
 }
 
 footer {
   margin-top: 30px;
 }
 
-.c-footer-social__link--facebook {
-    background-image: url(https://www.raspberrypi.com/app/themes/mind-control/images/application/footer/social/facebook.svg);
-}
-.c-footer-social__link--twitter {
-    background-image: url(https://www.raspberrypi.com/app/themes/mind-control/images/application/footer/social/twitter.svg);
-}
-.c-footer-social__link--instagram {
-    background-image: url(https://www.raspberrypi.com/app/themes/mind-control/images/application/footer/social/instagram.svg);
-}
-.c-footer-social__link--youtube {
-    background-image: url(https://www.raspberrypi.com/app/themes/mind-control/images/application/footer/social/youtube.svg);
-}
-
 @media screen and (max-width: 1350px) {
   div.contribute {
     padding-left: 50px;
     padding-right: 50px;
+    width: 100%;
   }
 
   .legal {
     padding-left: 50px;
     padding-right: 50px;
+    width: 100%;
   }
 }
 
-@media screen and (max-width: 1200px) {
-  #content {
-    width: 625px;
-  }
+/* mobile menu controls and display */
+
+.mobile-menu-toggle {
+  display: none;
 }
 
-@media screen and (max-width: 1149px) {
-  #container {
-    margin-left: 50px;
-    margin-right: 50px;
-  }
+#mobile-toggle {
+  display:none;
+}
+
+.toc-toggle-box {
+  display:none;
+}
+
+input:checked + li ~ .itemcontents {
+  visibility: visible;
+  opacity: 1;
+  height: auto;
+}
+
+/* hide all sub-categories when top level collapses */
+input:not(:checked) ~ li ~ .itemcontents .sectlevel1 {
+  visibility: hidden !important;
+  height: 0;
+}
+
+.itemcontents {
+  visibility: hidden;
+  opacity: 0;
+  height: 0;
+}
+
+.toc {
+  overflow-y: scroll;
+  height: 90vh;
+  background-color: var(--code-bg-colour);
+  max-width: 25vw;
+}
+
+#toc-inner {
+  top: 0;
+  position: sticky;
+  background-color: var(--code-bg-colour);
+  z-index: 102;
+  box-shadow: var(--code-bg-colour-transparent) 0px 10px 15px -5px, var(--code-bg-colour-transparent) 0px 10px 10px -5px;
+}
+
+@media screen and (max-width: 1200px) {
+ #content {
+  max-width: 73vw;
+ }
 }
 
 @media screen and (max-width: 1024px) {
+  /* docs header always takes up space at page top for mobile screens
+  -- anchors should scroll down a little extra to accommodate */
+  :target::before {
+    content: "";
+    display: block;
+    height: 60px;
+    margin -60px 0 0;
+  }
+
+  /* when the mobile menu is visible, hide all page content so we don't end up with dueling scrollbars */
+  #mobile-toggle:checked ~ #docs-content #docs-container {
+    overflow: hidden;
+  }
+
+  /* when the mobile menu is visible, hide all page content so we don't end up with dueling scrollbars */
+  #mobile-toggle:checked ~ #__rptl-header {
+    display: none;
+  }
+
+  /* make the docs search button slightly less aggressively large */
+  #docsearch .DocSearch-Button {
+    max-width: 50%;
+    float: right;
+  }
+
+  /* no need for box shadow in mobile mode */
+  #toc-inner {
+    box-shadow: var(--code-bg-colour-transparent) 0px;
+  }
+
+  #mobile-toggle:checked ~ .legal {
+    visibility: hidden;
+    height: 0;
+  }
+
+  #mobile-toggle:checked ~ #__rptl-footer {
+    visibility: hidden;
+    height: 0;
+  }
+
+  #mobile-toggle:checked ~ #docs-content .toc {
+    height: 100vh;
+    max-width: 100vw;
+  }
+
   #container {
     justify-content: center;
     flex-wrap: wrap;
-    margin-top: 50px;
+    margin-left: 3px;
+  }
+
+  .mobile-menu-toggle {
+    font-size: 3em;
+    display: block;
+    padding-left: 5px;
+    padding-right: 5px;
+  }
+
+  .toc {
+    height: auto;
+  }
+
+  .mobile-menu-toggle div {
+    transform: translateY(-3px);
+  }
+
+  .mobile-menu-toggle:hover {
+    color: var(--brand-colour);
+    text-decoration: none;
+    background-color: var(--toc-hover-colour);
   }
 
-  #container nav#contents {
+  #mobile-toggle:not(:checked) ~ #docs-content .toc {
     display: none;
   }
 
-  nav#mobile-contents {
-    display: block;
+  .itemcontents {
+    background-color: var(--near-bg);
   }
 
-  nav#mobile-contents h2 {
-    font-size: 18px;
-    text-align: center;
-    font-weight: bold;
-    color: #343434;
-    margin-bottom: 15px;
+  #docs-container {
+    max-width: 100vw;
   }
 
-  nav#mobile-contents div.mobile-contents-menu {
-    display: flex;
+  #docs-content {
     flex-direction: column;
-    align-items: center;
-    width: 30px;
-    margin-left: auto;
-    margin-right: auto;
   }
 
-  nav#mobile-contents span.mobile-contents-line {
-    width: 100%;
-    inline-size: 100%;
-    height: 4px;
-    block-size: 4px;
-    margin-bottom: 7px;
-    background-color: #000;
-    border-radius: 4px;
-    content: " ";
-    display: block;
-    transform-origin: left center;
-    transition-duration: .15s;
-    transition-property: background-color,opacity,transform;
-    transition-timing-function: cubic-bezier(.68,-.55,.265,1.55);
-    will-change: background-color,opacity,transform;
+  #content {
+    padding: 5px;
   }
 
-  nav#mobile-contents.active span.mobile-contents-line {
-    opacity: 0;
+  #toc-container-container {
+    top: 0;
+    position: sticky;
+    background-color: var(--code-bg-colour);
+    z-index: 100;
+    max-height: 50px;
   }
 
-  nav#mobile-contents.active span.mobile-contents-line:first-child,
-  nav#mobile-contents.active span.mobile-contents-line:last-child {
-    opacity: 1;
-    width: 104%;
+  #docs-header {
+    position: relative;
   }
 
-  nav#mobile-contents.active span.mobile-contents-line:first-child {
-    transform: rotate(45deg);
+  #docs-header-title {
+    display: none;
   }
 
-  nav#mobile-contents.active span.mobile-contents-line:last-child {
-    transform: rotate(-45deg);
+  #toc-inner {
+    display: flex;
   }
 
-  nav#mobile-contents .contents-inner {
-    margin-top: 20px;
+  #docsearch {
+    flex-grow: 3;
   }
 
-  nav#mobile-contents .contents-inner.hidden {
-    margin-top: 0px;
+  #__rptl-header {
+    position: relative;
   }
 
   #content {
-    width: 100%;
+    max-width: 100%;
     min-width: auto;
     margin-left: 0px;
   }
@@ -1017,8 +1590,6 @@ footer {
     margin-left: 0px;
   }
   #container {
-    margin-left: 25px;
-    margin-right: 25px;
   }
 }
 
@@ -1048,3 +1619,154 @@ footer {
     word-break: break-all;
   }
 }
+
+/* tab landing page boxes */
+
+* {
+  box-sizing: border-box;
+}
+
+section#box-content {
+  display: flex;
+  flex-wrap: wrap;
+  flex-direction: row;
+  justify-content: center;
+  max-width: 1200px;
+  padding-top: 30px;
+}
+
+a.box {
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-start;
+  align-items: center;
+  height: 275px;
+  width: 350px;
+  text-decoration: none;
+  background-color: var(--code-bg-colour);
+  padding: 30px 30px;
+  margin-left: 15px;
+  margin-right: 15px;
+  margin-bottom: 30px;
+}
+
+a.box[href*='/pico-sdk/'] span:not(.title) {
+  font-size: 0.8em;
+}
+
+a.box span {
+  color: var(--textcolor);
+  display: block;
+  text-align: center;
+}
+
+a.box span.title, 
+a.box[href*='/pico-sdk/'] span.title {
+  color: var(--textcolor);
+  font-size: 1.1em;
+  font-weight: bold;
+  margin-bottom: 20px;
+}
+
+a.box img {
+  max-height: 121px;
+}
+
+div.toptitle.error-message h1 {
+  font-size: 6.0em;
+}
+
+div.subtitle.error-message p {
+  max-width: 400px;
+}
+
+div.subtitle.error-message p a {
+  color: var(--bg);
+}
+
+#container {
+  display: flex;
+  justify-content: center;
+  margin-right: 10px;
+  margin-left: 10px;
+  white-space: initial;
+  word-break: break-word;
+}
+
+@media screen and (max-width: 1460px) {
+  /* hide on this page if screen is too small to fit it */
+  #on-this-page {
+    display: none;
+  }
+}
+
+/* documentation category tabs */
+
+* {
+  box-sizing: border-box;
+}
+
+div#tab-menu {
+  width: 100%;
+  height: 80px;
+  margin-bottom: -28px;
+}
+
+ul#tab-container {
+  display: flex;
+  gap: 5px;
+  /* Set a maximum width to match the rest of the site and centre it horizontally. */
+  max-width: 1300px;
+  margin-left: auto;
+  margin-right: auto;
+  list-style-type: none;
+  margin-bottom: 15px;
+  margin-top: 15px;
+  padding-left: 0;
+  text-align: center;
+}
+
+ul#tab-container li {
+  /* Tell all tabs to be the same width and to grow and shrink as needed. */
+  flex: 1 1 0%;
+  border-bottom: 4px solid var(--bg);
+  padding-top: 10px;
+  padding-bottom: 5px;
+  text-align: center;
+  font-size: 20px;
+}
+
+ul#tab-container li.selected {
+  border-bottom-color: var(--accent);
+}
+
+ul#tab-container li a {
+  font-size: 19px;
+  font-weight: bold;
+  color: var(--subtle);
+  vertical-align: middle;
+  text-decoration: none;
+}
+
+ul#tab-container li.selected a {
+  color: var(--accent);
+}
+
+@media screen and (max-width: 1219px) {
+  ul#tab-container li {
+    width: 200px;
+  }
+}
+
+@media screen and (max-width: 912px) {
+  div#tab-menu {
+    height: auto;
+  }
+  ul#tab-container {
+    display: block;
+  }
+  ul#tab-container li {
+    display: block;
+    width: 100%;
+  }
+}
\ No newline at end of file
diff --git a/jekyll-assets/css/syntax-highlighting.css b/jekyll-assets/css/syntax-highlighting.css
index 7a47fc7c54..4be9c404d7 100644
--- a/jekyll-assets/css/syntax-highlighting.css
+++ b/jekyll-assets/css/syntax-highlighting.css
@@ -2,25 +2,25 @@
 .highlight .hll { background-color: #404040 }
 .highlight .c { color: #999999; font-style: italic } /* Comment */
 .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
-.highlight .g { color: #d0d0d0 } /* Generic */
+.highlight .g { color: var(--textcolor) } /* Generic */
 .highlight .k { color: #6ab825; font-weight: bold } /* Keyword */
-.highlight .l { color: #d0d0d0 } /* Literal */
-.highlight .n { color: #d0d0d0 } /* Name */
-.highlight .o { color: #d0d0d0 } /* Operator */
-.highlight .x { color: #d0d0d0 } /* Other */
-.highlight .p { color: #d0d0d0 } /* Punctuation */
+.highlight .l { color: var(--textcolor) } /* Literal */
+.highlight .n { color: var(--textcolor) } /* Name */
+.highlight .o { color: var(--textcolor) } /* Operator */
+.highlight .x { color: var(--textcolor) } /* Other */
+.highlight .p { color: var(--textcolor) } /* Punctuation */
 .highlight .cm { color: #999999; font-style: italic } /* Comment.Multiline */
 .highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
 .highlight .c1 { color: #999999; font-style: italic } /* Comment.Single */
 .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
 .highlight .gd { color: #d22323 } /* Generic.Deleted */
-.highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
+.highlight .ge { color: var(--textcolor); font-style: italic } /* Generic.Emph */
 .highlight .gr { color: #d22323 } /* Generic.Error */
 .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
 .highlight .gi { color: #589819 } /* Generic.Inserted */
-.highlight .go { color: #cccccc } /* Generic.Output */
+.highlight .go { color: #888888 } /* Generic.Output */
 .highlight .gp { color: #aaaaaa } /* Generic.Prompt */
-.highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
+.highlight .gs { color: var(--textcolor); font-weight: bold } /* Generic.Strong */
 .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
 .highlight .gt { color: #d22323 } /* Generic.Traceback */
 .highlight .kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */
@@ -29,23 +29,23 @@
 .highlight .kp { color: #6ab825 } /* Keyword.Pseudo */
 .highlight .kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */
 .highlight .kt { color: #6ab825; font-weight: bold } /* Keyword.Type */
-.highlight .ld { color: #d0d0d0 } /* Literal.Date */
+.highlight .ld { color: var(--textcolor) } /* Literal.Date */
 .highlight .m { color: #3677a9 } /* Literal.Number */
 .highlight .s { color: #ed9d13 } /* Literal.String */
 .highlight .na { color: #bbbbbb } /* Name.Attribute */
-.highlight .nb { color: #24909d } /* Name.Builtin */
+.highlight .nb { color: var(--brand-colour) } /* Name.Builtin */
 .highlight .nc { color: #447fcf; text-decoration: underline } /* Name.Class */
-.highlight .no { color: #40ffff } /* Name.Constant */
+.highlight .no { color: #40aaaa } /* Name.Constant */
 .highlight .nd { color: #ffa500 } /* Name.Decorator */
-.highlight .ni { color: #d0d0d0 } /* Name.Entity */
+.highlight .ni { color: var(--textcolor) } /* Name.Entity */
 .highlight .ne { color: #bbbbbb } /* Name.Exception */
 .highlight .nf { color: #447fcf } /* Name.Function */
-.highlight .nl { color: #d0d0d0 } /* Name.Label */
+.highlight .nl { color: var(--textcolor) } /* Name.Label */
 .highlight .nn { color: #447fcf; text-decoration: underline } /* Name.Namespace */
-.highlight .nx { color: #d0d0d0 } /* Name.Other */
-.highlight .py { color: #d0d0d0 } /* Name.Property */
+.highlight .nx { color: var(--textcolor) } /* Name.Other */
+.highlight .py { color: var(--textcolor) } /* Name.Property */
 .highlight .nt { color: #6ab825; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #40ffff } /* Name.Variable */
+.highlight .nv { color: #40aaaa } /* Name.Variable */
 .highlight .ow { color: #6ab825; font-weight: bold } /* Operator.Word */
 .highlight .w { color: #666666 } /* Text.Whitespace */
 .highlight .mf { color: #3677a9 } /* Literal.Number.Float */
@@ -64,9 +64,9 @@
 .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
 .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
 .highlight .bp { color: #24909d } /* Name.Builtin.Pseudo */
-.highlight .vc { color: #40ffff } /* Name.Variable.Class */
-.highlight .vg { color: #40ffff } /* Name.Variable.Global */
-.highlight .vi { color: #40ffff } /* Name.Variable.Instance */
+.highlight .vc { color: #40aaaa } /* Name.Variable.Class */
+.highlight .vg { color: #40aaaa } /* Name.Variable.Global */
+.highlight .vi { color: #40aaaa } /* Name.Variable.Instance */
 .highlight .il { color: #3677a9 } /* Literal.Number.Integer.Long */
 
 .highlight .gp, .highlight .gp + .w {
diff --git a/jekyll-assets/css/tabs.css b/jekyll-assets/css/tabs.css
deleted file mode 100644
index b1880c02a6..0000000000
--- a/jekyll-assets/css/tabs.css
+++ /dev/null
@@ -1,82 +0,0 @@
-* {
-  box-sizing: border-box;
-}
-
-div#tab-menu {
-  width: 100%;
-  height: 80px;
-  padding-top: 5px;
-  margin-top: 20px;
-}
-
-ul#tab-container {
-  display: flex;
-  gap: 5px;
-  /* Set a maximum width to match the rest of the site and centre it horizontally. */
-  max-width: 1300px;
-  margin-left: auto;
-  margin-right: auto;
-  list-style-type: none;
-  margin-bottom: 0;
-  padding-left: 0;
-  text-align: center;
-}
-
-ul#tab-container li {
-  /* Tell all tabs to be the same width and to grow and shrink as needed. */
-  flex: 1 1 0%;
-  border-bottom: 4px solid #fff;
-  padding-top: 20px;
-  padding-bottom: 12px;
-  text-align: center;
-  font-size: 20px;
-}
-
-ul#tab-container li.selected {
-  border-bottom-color: var(--red);
-}
-
-ul#tab-container li a {
-  font-size: 19px;
-  font-weight: bold;
-  color: #888888;
-  vertical-align: middle;
-  text-decoration: none;
-}
-
-ul#tab-container li.selected a {
-  color: #343434;
-}
-
-p#release {
-  text-align: right;
-  padding-top: 10px;
-  color: #888888;
-  font-size: 0.9em;
-  width: 1200px;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-p#release + #container {
-  margin-top: 75px;
-}
-
-@media screen and (max-width: 1219px) {
-  ul#tab-container li {
-    width: 200px;
-  }
-}
-
-@media screen and (max-width: 912px) {
-  div#tab-menu {
-    height: auto;
-  }
-  ul#tab-container {
-    display: block;
-  }
-  ul#tab-container li {
-    display: block;
-    width: 100%;
-  }
-}
\ No newline at end of file
diff --git a/jekyll-assets/css/tocbot.css b/jekyll-assets/css/tocbot.css
new file mode 100644
index 0000000000..45be334aaa
--- /dev/null
+++ b/jekyll-assets/css/tocbot.css
@@ -0,0 +1,67 @@
+.toc {
+	/*overflow-y: auto*/
+}
+
+.toc>.toc-list {
+	overflow: hidden;
+	position: relative;
+}
+
+.toc>.toc-list li {
+  list-style-type: none;
+}
+
+.toc-list-item {	
+  list-style-type: none;
+}
+
+.toc-list {
+	margin: 0;
+	padding-left: 10px;
+}
+
+a.toc-link {
+	color: var(--subtle-text);
+	height: 100%;
+	line-height: 2em;
+}
+
+.is-collapsible {
+	max-height: 1000px;
+	overflow: hidden;
+	transition: all 100ms ease-in-out;
+}
+
+.is-collapsed {
+	max-height: 0;
+}
+
+.is-position-fixed {
+	position: fixed !important;
+	top: 0;
+}
+
+.is-active-link {
+	font-weight: 700;
+}
+
+.toc-link::before {
+	background-color: var(--bg-colour);
+	content: " ";
+	display: inline-block;
+	height: inherit;
+	left: 0;
+	position: absolute;
+	width: 3px;
+}
+
+.is-active-link::before {
+	width: 3px;
+	height: 2em;
+	background-color: var(--brand-colour);
+}
+
+.js-toc {
+	font-size: .8em;
+	width: 200px;
+}
\ No newline at end of file
diff --git a/jekyll-assets/css/whitepaper_coverimage.png b/jekyll-assets/css/whitepaper_coverimage.png
deleted file mode 100644
index eca25ee376072f2643ea5297df9013cd04823a69..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/jekyll-assets/favicon.ico b/jekyll-assets/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..52d2f3050f203a04a73fd06665d023aa6a0a2f8b
GIT binary patch
diff --git a/jekyll-assets/scripts/jquery-1.12.4.min.js b/jekyll-assets/scripts/jquery-1.12.4.min.js
deleted file mode 100644
index e836475870..0000000000
--- a/jekyll-assets/scripts/jquery-1.12.4.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
-}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
-marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
-padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
diff --git a/jekyll-assets/scripts/jquery-ui-1.13.0.custom.min.js b/jekyll-assets/scripts/jquery-ui-1.13.0.custom.min.js
deleted file mode 100644
index 84ff0cb2b5..0000000000
--- a/jekyll-assets/scripts/jquery-ui-1.13.0.custom.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery UI - v1.13.0 - 2021-12-15
-* http://jqueryui.com
-* Includes: widget.js, jquery-patch.js
-* Copyright jQuery Foundation and other contributors; Licensed MIT */
-
-!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(l){"use strict";l.ui=l.ui||{};l.ui.version="1.13.0";var s,i=0,r=Array.prototype.hasOwnProperty,a=Array.prototype.slice;l.cleanData=(s=l.cleanData,function(t){for(var e,i,n=0;null!=(i=t[n]);n++)(e=l._data(i,"events"))&&e.remove&&l(i).triggerHandler("remove");s(t)}),l.widget=function(t,i,e){var n,s,o,r={},a=t.split(".")[0],u=a+"-"+(t=t.split(".")[1]);return e||(e=i,i=l.Widget),Array.isArray(e)&&(e=l.extend.apply(null,[{}].concat(e))),l.expr.pseudos[u.toLowerCase()]=function(t){return!!l.data(t,u)},l[a]=l[a]||{},n=l[a][t],s=l[a][t]=function(t,e){if(!this._createWidget)return new s(t,e);arguments.length&&this._createWidget(t,e)},l.extend(s,n,{version:e.version,_proto:l.extend({},e),_childConstructors:[]}),(o=new i).options=l.widget.extend({},o.options),l.each(e,function(e,n){function s(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}r[e]="function"==typeof n?function(){var t,e=this._super,i=this._superApply;return this._super=s,this._superApply=o,t=n.apply(this,arguments),this._super=e,this._superApply=i,t}:n}),s.prototype=l.widget.extend(o,{widgetEventPrefix:n&&o.widgetEventPrefix||t},r,{constructor:s,namespace:a,widgetName:t,widgetFullName:u}),n?(l.each(n._childConstructors,function(t,e){var i=e.prototype;l.widget(i.namespace+"."+i.widgetName,s,e._proto)}),delete n._childConstructors):i._childConstructors.push(s),l.widget.bridge(t,s),s},l.widget.extend=function(t){for(var e,i,n=a.call(arguments,1),s=0,o=n.length;s<o;s++)for(e in n[s])i=n[s][e],r.call(n[s],e)&&void 0!==i&&(l.isPlainObject(i)?t[e]=l.isPlainObject(t[e])?l.widget.extend({},t[e],i):l.widget.extend({},i):t[e]=i);return t},l.widget.bridge=function(o,e){var r=e.prototype.widgetFullName||o;l.fn[o]=function(i){var t="string"==typeof i,n=a.call(arguments,1),s=this;return t?this.length||"instance"!==i?this.each(function(){var t,e=l.data(this,r);return"instance"===i?(s=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?l.error("no such method '"+i+"' for "+o+" widget instance"):(t=e[i].apply(e,n))!==e&&void 0!==t?(s=t&&t.jquery?s.pushStack(t.get()):t,!1):void 0:l.error("cannot call methods on "+o+" prior to initialization; attempted to call method '"+i+"'")}):s=void 0:(n.length&&(i=l.widget.extend.apply(null,[i].concat(n))),this.each(function(){var t=l.data(this,r);t?(t.option(i||{}),t._init&&t._init()):l.data(this,r,new e(i,this))})),s}},l.Widget=function(){},l.Widget._childConstructors=[],l.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=l(e||this.defaultElement||this)[0],this.element=l(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=l(),this.hoverable=l(),this.focusable=l(),this.classesElementLookup={},e!==this&&(l.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=l(e.style?e.ownerDocument:e.document||e),this.window=l(this.document[0].defaultView||this.document[0].parentWindow)),this.options=l.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:l.noop,_create:l.noop,_init:l.noop,destroy:function(){var i=this;this._destroy(),l.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:l.noop,widget:function(){return this.element},option:function(t,e){var i,n,s,o=t;if(0===arguments.length)return l.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(n=o[t]=l.widget.extend({},this.options[t]),s=0;s<i.length-1;s++)n[i[s]]=n[i[s]]||{},n=n[i[s]];if(t=i.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,n;for(e in t)n=this.classesElementLookup[e],t[e]!==this.options.classes[e]&&n&&n.length&&(i=l(n.get()),this._removeClass(n,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(s){var o=[],r=this;function t(t,e){for(var i,n=0;n<t.length;n++)i=r.classesElementLookup[t[n]]||l(),i=s.add?(s.element.each(function(t,e){l.map(r.classesElementLookup,function(t){return t}).some(function(t){return t.is(e)})||r._on(l(e),{remove:"_untrackClassesElement"})}),l(l.uniqueSort(i.get().concat(s.element.get())))):l(i.not(s.element).get()),r.classesElementLookup[t[n]]=i,o.push(t[n]),e&&s.classes[t[n]]&&o.push(s.classes[t[n]])}return(s=l.extend({element:this.element,classes:this.options.classes||{}},s)).keys&&t(s.keys.match(/\S+/g)||[],!0),s.extra&&t(s.extra.match(/\S+/g)||[]),o.join(" ")},_untrackClassesElement:function(i){var n=this;l.each(n.classesElementLookup,function(t,e){-1!==l.inArray(i.target,e)&&(n.classesElementLookup[t]=l(e.not(i.target).get()))}),this._off(l(i.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,n){var s="string"==typeof t||null===t,i={extra:s?e:i,keys:s?t:e,element:s?this.element:t,add:n="boolean"==typeof n?n:i};return i.element.toggleClass(this._classes(i),n),this},_on:function(s,o,t){var r,a=this;"boolean"!=typeof s&&(t=o,o=s,s=!1),t?(o=r=l(o),this.bindings=this.bindings.add(o)):(t=o,o=this.element,r=this.widget()),l.each(t,function(t,e){function i(){if(s||!0!==a.options.disabled&&!l(this).hasClass("ui-state-disabled"))return("string"==typeof e?a[e]:e).apply(a,arguments)}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||l.guid++);var n=t.match(/^([\w:-]*)\s*(.*)$/),t=n[1]+a.eventNamespace,n=n[2];n?r.on(t,n,i):o.on(t,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.off(e),this.bindings=l(this.bindings.not(t).get()),this.focusable=l(this.focusable.not(t).get()),this.hoverable=l(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(l(t.currentTarget),null,"ui-state-hover")},mouseleave:function(t){this._removeClass(l(t.currentTarget),null,"ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(l(t.currentTarget),null,"ui-state-focus")},focusout:function(t){this._removeClass(l(t.currentTarget),null,"ui-state-focus")}})},_trigger:function(t,e,i){var n,s,o=this.options[t];if(i=i||{},(e=l.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],s=e.originalEvent)for(n in s)n in e||(e[n]=s[n]);return this.element.trigger(e,i),!("function"==typeof o&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},l.each({show:"fadeIn",hide:"fadeOut"},function(o,r){l.Widget.prototype["_"+o]=function(e,t,i){var n,s=(t="string"==typeof t?{effect:t}:t)?!0!==t&&"number"!=typeof t&&t.effect||r:o;"number"==typeof(t=t||{})?t={duration:t}:!0===t&&(t={}),n=!l.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),n&&l.effects&&l.effects.effect[s]?e[o](t):s!==o&&e[s]?e[s](t.duration,t.easing,i):e.queue(function(t){l(this)[o](),i&&i.call(e[0]),t()})}});var e,n;l.widget;l.expr.pseudos||(l.expr.pseudos=l.expr[":"]),l.uniqueSort||(l.uniqueSort=l.unique),l.escapeSelector||(e=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,n=function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},l.escapeSelector=function(t){return(t+"").replace(e,n)}),l.fn.even&&l.fn.odd||l.fn.extend({even:function(){return this.filter(function(t){return t%2==0})},odd:function(){return this.filter(function(t){return t%2==1})}})});
\ No newline at end of file
diff --git a/jekyll-assets/scripts/jquery.tocify.js b/jekyll-assets/scripts/jquery.tocify.js
deleted file mode 100644
index 5f6d4605ac..0000000000
--- a/jekyll-assets/scripts/jquery.tocify.js
+++ /dev/null
@@ -1,984 +0,0 @@
-/* jquery Tocify - v1.9.0 - 2013-10-01
-* http://www.gregfranko.com/jquery.tocify.js/
-* Copyright (c) 2013 Greg Franko; Licensed MIT */
-
-// Immediately-Invoked Function Expression (IIFE) [Ben Alman Blog Post](http://benalman.com/news/2010/11/immediately-invoked-function-expression/) that calls another IIFE that contains all of the plugin logic.  I used this pattern so that anyone viewing this code would not have to scroll to the bottom of the page to view the local parameters that were passed to the main IIFE.
-(function(tocify) {
-
-    // ECMAScript 5 Strict Mode: [John Resig Blog Post](http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/)
-    "use strict";
-
-    // Calls the second IIFE and locally passes in the global jQuery, window, and document objects
-    tocify(window.jQuery, window, document);
-
-}
-
-// Locally passes in `jQuery`, the `window` object, the `document` object, and an `undefined` variable.  The `jQuery`, `window` and `document` objects are passed in locally, to improve performance, since javascript first searches for a variable match within the local variables set before searching the global variables set.  All of the global variables are also passed in locally to be minifier friendly. `undefined` can be passed in locally, because it is not a reserved word in JavaScript.
-(function($, window, document, undefined) {
-
-    // ECMAScript 5 Strict Mode: [John Resig Blog Post](http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/)
-    "use strict";
-
-    var tocClassName = "tocify",
-        tocClass = "." + tocClassName,
-        tocFocusClassName = "tocify-focus",
-        tocHoverClassName = "tocify-hover",
-        hideTocClassName = "tocify-hide",
-        hideTocClass = "." + hideTocClassName,
-        headerClassName = "tocify-header",
-        headerClass = "." + headerClassName,
-        subheaderClassName = "tocify-subheader",
-        subheaderClass = "." + subheaderClassName,
-        itemClassName = "tocify-item",
-        itemClass = "." + itemClassName,
-        extendPageClassName = "tocify-extend-page",
-        extendPageClass = "." + extendPageClassName;
-
-    // Calling the jQueryUI Widget Factory Method
-    $.widget("toc.tocify", {
-
-        //Plugin version
-        version: "1.9.0",
-
-        // These options will be used as defaults
-        options: {
-
-            // **context**: Accepts String: Any jQuery selector
-            // The container element that holds all of the elements used to generate the table of contents
-            context: "body",
-
-            // **ignoreSelector**: Accepts String: Any jQuery selector
-            // A selector to any element that would be matched by selectors that you wish to be ignored
-            ignoreSelector: null,
-
-            // **selectors**: Accepts an Array of Strings: Any jQuery selectors
-            // The element's used to generate the table of contents.  The order is very important since it will determine the table of content's nesting structure
-            selectors: "h1, h2, h3",
-
-            // **showAndHide**: Accepts a boolean: true or false
-            // Used to determine if elements should be shown and hidden
-            showAndHide: true,
-
-            // **showEffect**: Accepts String: "none", "fadeIn", "show", or "slideDown"
-            // Used to display any of the table of contents nested items
-            showEffect: "slideDown",
-
-            // **showEffectSpeed**: Accepts Number (milliseconds) or String: "slow", "medium", or "fast"
-            // The time duration of the show animation
-            showEffectSpeed: "medium",
-
-            // **hideEffect**: Accepts String: "none", "fadeOut", "hide", or "slideUp"
-            // Used to hide any of the table of contents nested items
-            hideEffect: "slideUp",
-
-            // **hideEffectSpeed**: Accepts Number (milliseconds) or String: "slow", "medium", or "fast"
-            // The time duration of the hide animation
-            hideEffectSpeed: "medium",
-
-            // **smoothScroll**: Accepts a boolean: true or false
-            // Determines if a jQuery animation should be used to scroll to specific table of contents items on the page
-            smoothScroll: true,
-
-            // **smoothScrollSpeed**: Accepts Number (milliseconds) or String: "slow", "medium", or "fast"
-            // The time duration of the smoothScroll animation
-            smoothScrollSpeed: "medium",
-
-            // **scrollTo**: Accepts Number (pixels)
-            // The amount of space between the top of page and the selected table of contents item after the page has been scrolled
-            scrollTo: 0,
-
-            // **showAndHideOnScroll**: Accepts a boolean: true or false
-            // Determines if table of contents nested items should be shown and hidden while scrolling
-            showAndHideOnScroll: true,
-
-            // **highlightOnScroll**: Accepts a boolean: true or false
-            // Determines if table of contents nested items should be highlighted (set to a different color) while scrolling
-            highlightOnScroll: true,
-
-            // **highlightOffset**: Accepts a number
-            // The offset distance in pixels to trigger the next active table of contents item
-            highlightOffset: 40,
-
-            // **theme**: Accepts a string: "bootstrap", "jqueryui", or "none"
-            // Determines if Twitter Bootstrap, jQueryUI, or Tocify classes should be added to the table of contents
-            theme: "bootstrap",
-
-            // **extendPage**: Accepts a boolean: true or false
-            // If a user scrolls to the bottom of the page and the page is not tall enough to scroll to the last table of contents item, then the page height is increased
-            extendPage: true,
-
-            // **extendPageOffset**: Accepts a number: pixels
-            // How close to the bottom of the page a user must scroll before the page is extended
-            extendPageOffset: 100,
-
-            // **history**: Accepts a boolean: true or false
-            // Adds a hash to the page url to maintain history
-            history: true,
-
-            // **scrollHistory**: Accepts a boolean: true or false
-            // Adds a hash to the page url, to maintain history, when scrolling to a TOC item
-            scrollHistory: false,
-
-            // **hashGenerator**: How the hash value (the anchor segment of the URL, following the
-            // # character) will be generated.
-            //
-            // "compact" (default) - #CompressesEverythingTogether
-            // "pretty" - #looks-like-a-nice-url-and-is-easily-readable
-            // function(text, element){} - Your own hash generation function that accepts the text as an
-            // argument, and returns the hash value.
-            hashGenerator: "compact",
-
-            // **highlightDefault**: Accepts a boolean: true or false
-            // Set's the first TOC item as active if no other TOC item is active.
-            highlightDefault: true
-
-        },
-
-        // _Create
-        // -------
-        //      Constructs the plugin.  Only called once.
-        _create: function() {
-
-            var self = this;
-
-            self.extendPageScroll = true;
-
-            // Internal array that keeps track of all TOC items (Helps to recognize if there are duplicate TOC item strings)
-            self.items = [];
-
-            // Generates the HTML for the dynamic table of contents
-            self._generateToc();
-
-            // Adds CSS classes to the newly generated table of contents HTML
-            self._addCSSClasses();
-
-            self.webkit = (function() {
-
-                for(var prop in window) {
-
-                    if(prop) {
-
-                        if(prop.toLowerCase().indexOf("webkit") !== -1) {
-
-                            return true;
-
-                        }
-
-                    }
-
-                }
-
-                return false;
-
-            }());
-
-            // Adds jQuery event handlers to the newly generated table of contents
-            self._setEventHandlers();
-
-            // Binding to the Window load event to make sure the correct scrollTop is calculated
-            $(window).load(function() {
-
-                // Sets the active TOC item
-                self._setActiveElement(true);
-
-                // Once all animations on the page are complete, this callback function will be called
-                $("html, body").promise().done(function() {
-
-                    setTimeout(function() {
-
-                        self.extendPageScroll = false;
-
-                    },0);
-
-                });
-
-            });
-
-        },
-
-        // _generateToc
-        // ------------
-        //      Generates the HTML for the dynamic table of contents
-        _generateToc: function() {
-
-            // _Local variables_
-
-            // Stores the plugin context in the self variable
-            var self = this,
-
-                // All of the HTML tags found within the context provided (i.e. body) that match the top level jQuery selector above
-                firstElem,
-
-                // Instantiated variable that will store the top level newly created unordered list DOM element
-                ul,
-                ignoreSelector = self.options.ignoreSelector;
-
-             // If the selectors option has a comma within the string
-             if(this.options.selectors.indexOf(",") !== -1) {
-
-                 // Grabs the first selector from the string
-                 firstElem = $(this.options.context).find(this.options.selectors.replace(/ /g,"").substr(0, this.options.selectors.indexOf(",")));
-
-             }
-
-             // If the selectors option does not have a comman within the string
-             else {
-
-                 // Grabs the first selector from the string and makes sure there are no spaces
-                 firstElem = $(this.options.context).find(this.options.selectors.replace(/ /g,""));
-
-             }
-
-            if(!firstElem.length) {
-
-                self.element.addClass(hideTocClassName);
-
-                return;
-
-            }
-
-            self.element.addClass(tocClassName);
-
-            // Loops through each top level selector
-            firstElem.each(function(index) {
-
-                //If the element matches the ignoreSelector then we skip it
-                if($(this).is(ignoreSelector)) {
-                    return;
-                }
-
-                // Creates an unordered list HTML element and adds a dynamic ID and standard class name
-                ul = $("<ul/>", {
-                    "id": headerClassName + index,
-                    "class": headerClassName
-                }).
-
-                // Appends a top level list item HTML element to the previously created HTML header
-                append(self._nestElements($(this), index));
-
-                // Add the created unordered list element to the HTML element calling the plugin
-                self.element.append(ul);
-
-                // Finds all of the HTML tags between the header and subheader elements
-                $(this).nextUntil(this.nodeName.toLowerCase()).each(function() {
-
-                    // If there are no nested subheader elemements
-                    if($(this).find(self.options.selectors).length === 0) {
-
-                        // Loops through all of the subheader elements
-                        $(this).filter(self.options.selectors).each(function() {
-
-                            //If the element matches the ignoreSelector then we skip it
-                            if($(this).is(ignoreSelector)) {
-                                return;
-                            }
-
-                            self._appendSubheaders.call(this, self, ul);
-
-                        });
-
-                    }
-
-                    // If there are nested subheader elements
-                    else {
-
-                        // Loops through all of the subheader elements
-                        $(this).find(self.options.selectors).each(function() {
-
-                            //If the element matches the ignoreSelector then we skip it
-                            if($(this).is(ignoreSelector)) {
-                                return;
-                            }
-
-                            self._appendSubheaders.call(this, self, ul);
-
-                        });
-
-                    }
-
-                });
-
-            });
-
-        },
-
-        _setActiveElement: function(pageload) {
-
-            var self = this,
-
-                hash = window.location.hash.substring(1),
-
-                elem = self.element.find('li[data-unique="' + hash + '"]');
-
-            if(hash.length) {
-
-                // Removes highlighting from all of the list item's
-                self.element.find("." + self.focusClass).removeClass(self.focusClass);
-
-                // Highlights the current list item that was clicked
-                elem.addClass(self.focusClass);
-
-                // If the showAndHide option is true
-                if(self.options.showAndHide) {
-
-                    // Triggers the click event on the currently focused TOC item
-                    elem.click();
-
-                }
-
-            }
-
-            else {
-
-                // Removes highlighting from all of the list item's
-                self.element.find("." + self.focusClass).removeClass(self.focusClass);
-
-                if(!hash.length && pageload && self.options.highlightDefault) {
-
-                    // Highlights the first TOC item if no other items are highlighted
-                    self.element.find(itemClass).first().addClass(self.focusClass);
-
-                }
-
-            }
-
-            return self;
-
-        },
-
-        // _nestElements
-        // -------------
-        //      Helps create the table of contents list by appending nested list items
-        _nestElements: function(self, index) {
-
-            var arr, item, hashValue;
-
-            arr = $.grep(this.items, function (item) {
-
-                return item === self.text();
-
-            });
-
-            // If there is already a duplicate TOC item
-            if(arr.length) {
-
-                // Adds the current TOC item text and index (for slight randomization) to the internal array
-                this.items.push(self.text() + index);
-
-            }
-
-            // If there not a duplicate TOC item
-            else {
-
-                // Adds the current TOC item text to the internal array
-                this.items.push(self.text());
-
-            }
-
-            hashValue = this._generateHashValue(arr, self, index);
-
-            // Appends a list item HTML element to the last unordered list HTML element found within the HTML element calling the plugin
-            item = $("<li/>", {
-
-                // Sets a common class name to the list item
-                "class": itemClassName,
-
-                "data-unique": hashValue
-
-            // Nate Contino modified this script to reuse the existing <a> link element instead of constructing a new one with reused text.
-            }).append(self.html());
-
-            // Adds an HTML anchor tag before the currently traversed HTML element
-            self.before($("<div/>", {
-
-                // Sets a name attribute on the anchor tag to the text of the currently traversed HTML element (also making sure that all whitespace is replaced with an underscore)
-                "name": hashValue,
-
-                "data-unique": hashValue
-
-            }));
-
-            return item;
-
-        },
-
-        // _generateHashValue
-        // ------------------
-        //      Generates the hash value that will be used to refer to each item.
-        _generateHashValue: function(arr, self, index) {
-
-            var hashValue = "",
-                hashGeneratorOption = this.options.hashGenerator;
-
-            if (hashGeneratorOption === "pretty") {
-
-                // prettify the text
-                hashValue = self.text().toLowerCase().replace(/\s/g, "-");
-
-                // fix double hyphens
-                while (hashValue.indexOf("--") > -1) {
-                    hashValue = hashValue.replace(/--/g, "-");
-                }
-
-                // fix colon-space instances
-                while (hashValue.indexOf(":-") > -1) {
-                    hashValue = hashValue.replace(/:-/g, "-");
-                }
-
-            } else if (typeof hashGeneratorOption === "function") {
-
-                // call the function
-                hashValue = hashGeneratorOption(self.text(), self);
-
-            } else {
-
-                // compact - the default
-                hashValue = self.text().replace(/\s/g, "");
-
-            }
-
-            // add the index if we need to
-            if (arr.length) { hashValue += ""+index; }
-
-            // return the value
-            return hashValue;
-
-        },
-
-        // _appendElements
-        // ---------------
-        //      Helps create the table of contents list by appending subheader elements
-
-        _appendSubheaders: function(self, ul) {
-
-            // The current element index
-            var index = $(this).index(self.options.selectors),
-
-                // Finds the previous header DOM element
-                previousHeader = $(self.options.selectors).eq(index - 1),
-
-                currentTagName = +$(this).prop("tagName").charAt(1),
-
-                previousTagName = +previousHeader.prop("tagName").charAt(1),
-
-                lastSubheader;
-
-            // If the current header DOM element is smaller than the previous header DOM element or the first subheader
-            if(currentTagName < previousTagName) {
-
-                // Selects the last unordered list HTML found within the HTML element calling the plugin
-                self.element.find(subheaderClass + "[data-tag=" + currentTagName + "]").last().append(self._nestElements($(this), index));
-
-            }
-
-            // If the current header DOM element is the same type of header(eg. h4) as the previous header DOM element
-            else if(currentTagName === previousTagName) {
-
-                ul.find(itemClass).last().after(self._nestElements($(this), index));
-
-            }
-
-            else {
-
-                // Selects the last unordered list HTML found within the HTML element calling the plugin
-                ul.find(itemClass).last().
-
-                // Appends an unorderedList HTML element to the dynamic `unorderedList` variable and sets a common class name
-                after($("<ul/>", {
-
-                    "class": subheaderClassName,
-
-                    "data-tag": currentTagName
-
-                })).next(subheaderClass).
-
-                // Appends a list item HTML element to the last unordered list HTML element found within the HTML element calling the plugin
-                append(self._nestElements($(this), index));
-            }
-
-        },
-
-       // _setEventHandlers
-        // ----------------
-        //      Adds jQuery event handlers to the newly generated table of contents
-        _setEventHandlers: function() {
-
-            // _Local variables_
-
-            // Stores the plugin context in the self variable
-            var self = this,
-
-                // Instantiates a new variable that will be used to hold a specific element's context
-                $self,
-
-                // Instantiates a new variable that will be used to determine the smoothScroll animation time duration
-                duration;
-
-            // Event delegation that looks for any clicks on list item elements inside of the HTML element calling the plugin
-            this.element.on("click.tocify", "li", function(event) {
-
-                if(self.options.history) {
-
-                    window.location.hash = $(this).attr("data-unique");
-
-                }
-
-                // Removes highlighting from all of the list item's
-                self.element.find("." + self.focusClass).removeClass(self.focusClass);
-
-                // Highlights the current list item that was clicked
-                $(this).addClass(self.focusClass);
-
-                // If the showAndHide option is true
-                if(self.options.showAndHide) {
-
-                    var elem = $('li[data-unique="' + $(this).attr("data-unique") + '"]');
-
-                    self._triggerShow(elem);
-
-                }
-
-                self._scrollTo($(this));
-
-            });
-
-            // Mouseenter and Mouseleave event handlers for the list item's within the HTML element calling the plugin
-            this.element.find("li").on({
-
-                // Mouseenter event handler
-                "mouseenter.tocify": function() {
-
-                    // Adds a hover CSS class to the current list item
-                    $(this).addClass(self.hoverClass);
-
-                    // Makes sure the cursor is set to the pointer icon
-                    $(this).css("cursor", "pointer");
-
-                },
-
-                // Mouseleave event handler
-                "mouseleave.tocify": function() {
-
-                    if(self.options.theme !== "bootstrap") {
-
-                        // Removes the hover CSS class from the current list item
-                        $(this).removeClass(self.hoverClass);
-
-                    }
-
-                }
-            });
-
-            // only attach handler if needed (expensive in IE)
-            if (self.options.extendPage || self.options.highlightOnScroll || self.options.scrollHistory || self.options.showAndHideOnScroll)
-            {
-            // Window scroll event handler
-                $(window).on("scroll.tocify", function() {
-
-                    // Once all animations on the page are complete, this callback function will be called
-                    $("html, body").promise().done(function() {
-
-                        // Local variables
-
-                        // Stores how far the user has scrolled
-                        var winScrollTop = $(window).scrollTop(),
-
-                            // Stores the height of the window
-                            winHeight = $(window).height(),
-
-                            // Stores the height of the document
-                            docHeight = $(document).height(),
-
-                            scrollHeight = $("body")[0].scrollHeight,
-
-                            // Instantiates a variable that will be used to hold a selected HTML element
-                            elem,
-
-                            lastElem,
-
-                            lastElemOffset,
-
-                            currentElem;
-
-                        if(self.options.extendPage) {
-
-                            // If the user has scrolled to the bottom of the page and the last toc item is not focused
-                            if((self.webkit && winScrollTop >= scrollHeight - winHeight - self.options.extendPageOffset) || (!self.webkit && winHeight + winScrollTop > docHeight - self.options.extendPageOffset)) {
-
-                                if(!$(extendPageClass).length) {
-
-                                    lastElem = $('div[data-unique="' + $(itemClass).last().attr("data-unique") + '"]');
-
-                                    if(!lastElem.length) return;
-
-                                    // Gets the top offset of the page header that is linked to the last toc item
-                                    lastElemOffset = lastElem.offset().top;
-
-                                    // Appends a div to the bottom of the page and sets the height to the difference of the window scrollTop and the last element's position top offset
-                                    $(self.options.context).append($("<div />", {
-
-                                        "class": extendPageClassName,
-
-                                        "height": Math.abs(lastElemOffset - winScrollTop) + "px",
-
-                                        "data-unique": extendPageClassName
-
-                                    }));
-
-                                    if(self.extendPageScroll) {
-
-                                        currentElem = self.element.find('li.active');
-
-                                        self._scrollTo($('div[data-unique="' + currentElem.attr("data-unique") + '"]'));
-
-                                    }
-
-                                }
-
-                            }
-
-                        }
-
-                        // The zero timeout ensures the following code is run after the scroll events
-                        setTimeout(function() {
-
-                            // _Local variables_
-
-                            // Stores the distance to the closest anchor
-                            var closestAnchorDistance = null,
-
-                                // Stores the index of the closest anchor
-                                closestAnchorIdx = null,
-
-                                // Keeps a reference to all anchors
-                                anchors = $(self.options.context).find("div[data-unique]"),
-
-                                anchorText;
-
-                            // Determines the index of the closest anchor
-                            anchors.each(function(idx) {
-                                var distance = Math.abs(($(this).next().length ? $(this).next() : $(this)).offset().top - winScrollTop - self.options.highlightOffset);
-                                if (closestAnchorDistance == null || distance < closestAnchorDistance) {
-                                    closestAnchorDistance = distance;
-                                    closestAnchorIdx = idx;
-                                } else {
-                                    return false;
-                                }
-                            });
-
-                            anchorText = $(anchors[closestAnchorIdx]).attr("data-unique");
-
-                            // Stores the list item HTML element that corresponds to the currently traversed anchor tag
-                            elem = $('li[data-unique="' + anchorText + '"]');
-
-                            // If the `highlightOnScroll` option is true and a next element is found
-                            if(self.options.highlightOnScroll && elem.length) {
-
-                                // Removes highlighting from all of the list item's
-                                self.element.find("." + self.focusClass).removeClass(self.focusClass);
-
-                                // Highlights the corresponding list item
-                                elem.addClass(self.focusClass);
-
-                            }
-
-                            if(self.options.scrollHistory) {
-
-                                if(window.location.hash !== "#" + anchorText) {
-
-                                    window.location.replace("#" + anchorText);
-
-                                }
-                            }
-
-                            // If the `showAndHideOnScroll` option is true
-                            if(self.options.showAndHideOnScroll && self.options.showAndHide) {
-
-                                self._triggerShow(elem, true);
-
-                            }
-
-                        }, 0);
-
-                    });
-
-                });
-            }
-
-        },
-
-        // Show
-        // ----
-        //      Opens the current sub-header
-        show: function(elem, scroll) {
-
-            // Stores the plugin context in the `self` variable
-            var self = this,
-                element = elem;
-
-            // If the sub-header is not already visible
-            if (!elem.is(":visible")) {
-
-                // If the current element does not have any nested subheaders, is not a header, and its parent is not visible
-                if(!elem.find(subheaderClass).length && !elem.parent().is(headerClass) && !elem.parent().is(":visible")) {
-
-                    // Sets the current element to all of the subheaders within the current header
-                    elem = elem.parents(subheaderClass).add(elem);
-
-                }
-
-                // If the current element does not have any nested subheaders and is not a header
-                else if(!elem.children(subheaderClass).length && !elem.parent().is(headerClass)) {
-
-                    // Sets the current element to the closest subheader
-                    elem = elem.closest(subheaderClass);
-
-                }
-
-                //Determines what jQuery effect to use
-                switch (self.options.showEffect) {
-
-                    //Uses `no effect`
-                    case "none":
-
-                        elem.show();
-
-                    break;
-
-                    //Uses the jQuery `show` special effect
-                    case "show":
-
-                        elem.show(self.options.showEffectSpeed);
-
-                    break;
-
-                    //Uses the jQuery `slideDown` special effect
-                    case "slideDown":
-
-                        elem.slideDown(self.options.showEffectSpeed);
-
-                    break;
-
-                    //Uses the jQuery `fadeIn` special effect
-                    case "fadeIn":
-
-                        elem.fadeIn(self.options.showEffectSpeed);
-
-                    break;
-
-                    //If none of the above options were passed, then a `jQueryUI show effect` is expected
-                    default:
-
-                        elem.show();
-
-                    break;
-
-                }
-
-            }
-
-            // If the current subheader parent element is a header
-            if(elem.parent().is(headerClass)) {
-
-                // Hides all non-active sub-headers
-                self.hide($(subheaderClass).not(elem));
-
-            }
-
-            // If the current subheader parent element is not a header
-            else {
-
-                // Hides all non-active sub-headers
-                self.hide($(subheaderClass).not(elem.closest(headerClass).find(subheaderClass).not(elem.siblings())));
-
-            }
-
-            // Maintains chainablity
-            return self;
-
-        },
-
-        // Hide
-        // ----
-        //      Closes the current sub-header
-        hide: function(elem) {
-
-            // Stores the plugin context in the `self` variable
-            var self = this;
-
-            //Determines what jQuery effect to use
-            switch (self.options.hideEffect) {
-
-                // Uses `no effect`
-                case "none":
-
-                    elem.hide();
-
-                break;
-
-                // Uses the jQuery `hide` special effect
-                case "hide":
-
-                    elem.hide(self.options.hideEffectSpeed);
-
-                break;
-
-                // Uses the jQuery `slideUp` special effect
-                case "slideUp":
-
-                    elem.slideUp(self.options.hideEffectSpeed);
-
-                break;
-
-                // Uses the jQuery `fadeOut` special effect
-                case "fadeOut":
-
-                    elem.fadeOut(self.options.hideEffectSpeed);
-
-                break;
-
-                // If none of the above options were passed, then a `jqueryUI hide effect` is expected
-                default:
-
-                    elem.hide();
-
-                break;
-
-            }
-
-            // Maintains chainablity
-            return self;
-        },
-
-        // _triggerShow
-        // ------------
-        //      Determines what elements get shown on scroll and click
-        _triggerShow: function(elem, scroll) {
-
-            var self = this;
-
-            // If the current element's parent is a header element or the next element is a nested subheader element
-            if(elem.parent().is(headerClass) || elem.next().is(subheaderClass)) {
-
-                // Shows the next sub-header element
-                self.show(elem.next(subheaderClass), scroll);
-
-            }
-
-            // If the current element's parent is a subheader element
-            else if(elem.parent().is(subheaderClass)) {
-
-                // Shows the parent sub-header element
-                self.show(elem.parent(), scroll);
-
-            }
-
-            // Maintains chainability
-            return self;
-
-        },
-
-        // _addCSSClasses
-        // --------------
-        //      Adds CSS classes to the newly generated table of contents HTML
-        _addCSSClasses: function() {
-
-            // If the user wants a jqueryUI theme
-            if(this.options.theme === "jqueryui") {
-
-                this.focusClass = "ui-state-default";
-
-                this.hoverClass = "ui-state-hover";
-
-                //Adds the default styling to the dropdown list
-                this.element.addClass("ui-widget").find(".toc-title").addClass("ui-widget-header").end().find("li").addClass("ui-widget-content");
-
-            }
-
-            // If the user wants a twitterBootstrap theme
-            else if(this.options.theme === "bootstrap") {
-
-                this.element.find(headerClass + "," + subheaderClass).addClass("nav nav-list");
-
-                this.focusClass = "active";
-
-            }
-
-            // If a user does not want a prebuilt theme
-            else {
-
-                // Adds more neutral classes (instead of jqueryui)
-
-                this.focusClass = tocFocusClassName;
-
-                this.hoverClass = tocHoverClassName;
-
-            }
-
-            //Maintains chainability
-            return this;
-
-        },
-
-        // setOption
-        // ---------
-        //      Sets a single Tocify option after the plugin is invoked
-        setOption: function() {
-
-            // Calls the jQueryUI Widget Factory setOption method
-            $.Widget.prototype._setOption.apply(this, arguments);
-
-        },
-
-        // setOptions
-        // ----------
-        //      Sets a single or multiple Tocify options after the plugin is invoked
-        setOptions: function() {
-
-            // Calls the jQueryUI Widget Factory setOptions method
-            $.Widget.prototype._setOptions.apply(this, arguments);
-
-        },
-
-        // _scrollTo
-        // ---------
-        //      Scrolls to a specific element
-        _scrollTo: function(elem) {
-
-            var self = this,
-                duration = self.options.smoothScroll || 0,
-                scrollTo = self.options.scrollTo,
-                currentDiv = $('div[data-unique="' + elem.attr("data-unique") + '"]');
-
-            if(!currentDiv.length) {
-
-                return self;
-
-            }
-
-            // Once all animations on the page are complete, this callback function will be called
-            $("html, body").promise().done(function() {
-
-                // Animates the html and body element scrolltops
-                $("html, body").animate({
-
-                    // Sets the jQuery `scrollTop` to the top offset of the HTML div tag that matches the current list item's `data-unique` tag
-                    "scrollTop": currentDiv.offset().top - ($.isFunction(scrollTo) ? scrollTo.call() : scrollTo) + "px"
-
-                }, {
-
-                    // Sets the smoothScroll animation time duration to the smoothScrollSpeed option
-                    "duration": duration
-
-                });
-
-            });
-
-            // Maintains chainability
-            return self;
-
-        }
-
-    });
-
-})); //end of plugin
diff --git a/jekyll-assets/scripts/nav.js b/jekyll-assets/scripts/nav.js
deleted file mode 100644
index df5b6202db..0000000000
--- a/jekyll-assets/scripts/nav.js
+++ /dev/null
@@ -1,83 +0,0 @@
-function addClassJS(element, myclass) {
-  var classes = element.className;
-  if (classes) {
-    classes = classes.split(" ");
-  } else {
-    classes = [];
-  }
-  var i = classes.indexOf(myclass);
-  if (i < 0) {
-    classes.push(myclass);
-  }
-  element.className = classes.join(" ");
-}
-
-function removeClassJS(element, myclass) {
-  var classes = element.className;
-  if (classes) {
-    classes = classes.split(" ");
-  } else {
-    classes = [];
-  }
-  var i = classes.indexOf(myclass);
-  if (i >= 0) {
-    classes.splice(i, 1);
-  }
-  element.className = classes.join(" ");
-}
-
-function expandAndCollapse(e) {
-  var toExpand = e.nextElementSibling;
-  if (toExpand) {
-    var classes = toExpand.className;
-    if (classes) {
-      classes = classes.split(" ");
-    } else {
-      classes = [];
-    }
-    var currentState = classes.indexOf("hidden");
-
-    var expanded = document.querySelectorAll('div.itemcontents:not(.hidden)');
-    for (var i=0; i < expanded.length; i++) {
-      var element = expanded[i];
-      addClassJS(element, "hidden");
-    }
-
-    if (currentState > -1) {
-      removeClassJS(toExpand, "hidden");
-    }
-  }
-}
-
-function expandAndCollapseMobile(e) {
-  var toExpand = e.nextElementSibling;
-  var parent = e.parentNode;
-  if (toExpand) {
-    var classes = toExpand.className;
-    if (classes) {
-      classes = classes.split(" ");
-    } else {
-      classes = [];
-    }
-    var currentState = classes.indexOf("hidden");
-
-    if (currentState > -1) {
-      removeClassJS(toExpand, "hidden");
-      addClassJS(parent, "active");
-    } else {
-      addClassJS(toExpand, "hidden");
-      removeClassJS(parent, "active");
-    }
-  }
-}
-
-window.addEventListener('load', function() {
-  var tocitems = document.querySelectorAll("div.itemcontents:not(#toc)");
-  for (var i=0; i < tocitems.length; i++) {
-    addClassJS(tocitems[i], "hidden");
-  }
-  var currentItemNoJS = document.querySelectorAll("div.itemcontents.noJS");
-  addClassJS(currentItemNoJS, "hidden");
-  var contents = document.getElementById("contents");
-  contents.style.overflowY = 'hidden';
-});
diff --git a/jekyll-assets/scripts/noframework.waypoints.min.js b/jekyll-assets/scripts/noframework.waypoints.min.js
deleted file mode 100644
index edfacb57fe..0000000000
--- a/jekyll-assets/scripts/noframework.waypoints.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
-Waypoints - 4.0.1
-Copyright © 2011-2016 Caleb Troughton
-Licensed under the MIT license.
-https://github.com/imakewebthings/waypoints/blob/master/licenses.txt
-*/
-!function(){"use strict";function t(n){if(!n)throw new Error("No options passed to Waypoint constructor");if(!n.element)throw new Error("No element option passed to Waypoint constructor");if(!n.handler)throw new Error("No handler option passed to Waypoint constructor");this.key="waypoint-"+e,this.options=t.Adapter.extend({},t.defaults,n),this.element=this.options.element,this.adapter=new t.Adapter(this.element),this.callback=n.handler,this.axis=this.options.horizontal?"horizontal":"vertical",this.enabled=this.options.enabled,this.triggerPoint=null,this.group=t.Group.findOrCreate({name:this.options.group,axis:this.axis}),this.context=t.Context.findOrCreateByElement(this.options.context),t.offsetAliases[this.options.offset]&&(this.options.offset=t.offsetAliases[this.options.offset]),this.group.add(this),this.context.add(this),i[this.key]=this,e+=1}var e=0,i={};t.prototype.queueTrigger=function(t){this.group.queueTrigger(this,t)},t.prototype.trigger=function(t){this.enabled&&this.callback&&this.callback.apply(this,t)},t.prototype.destroy=function(){this.context.remove(this),this.group.remove(this),delete i[this.key]},t.prototype.disable=function(){return this.enabled=!1,this},t.prototype.enable=function(){return this.context.refresh(),this.enabled=!0,this},t.prototype.next=function(){return this.group.next(this)},t.prototype.previous=function(){return this.group.previous(this)},t.invokeAll=function(t){var e=[];for(var n in i)e.push(i[n]);for(var o=0,r=e.length;r>o;o++)e[o][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.Context.refreshAll();for(var e in i)i[e].enabled=!0;return this},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=o.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+i,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,n[t.waypointContextKey]=this,i+=1,o.windowContext||(o.windowContext=!0,o.windowContext=new e(window)),this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var i=0,n={},o=window.Waypoint,r=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical),i=this.element==this.element.window;t&&e&&!i&&(this.adapter.off(".waypoints"),delete n[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",function(){e.didResize||(e.didResize=!0,o.requestAnimationFrame(t))})},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",function(){(!e.didScroll||o.isTouch)&&(e.didScroll=!0,o.requestAnimationFrame(t))})},e.prototype.handleResize=function(){o.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var i in e){var n=e[i],o=n.newScroll>n.oldScroll,r=o?n.forward:n.backward;for(var s in this.waypoints[i]){var l=this.waypoints[i][s];if(null!==l.triggerPoint){var a=n.oldScroll<l.triggerPoint,h=n.newScroll>=l.triggerPoint,p=a&&h,u=!a&&!h;(p||u)&&(l.queueTrigger(r),t[l.group.id]=l.group)}}}for(var d in t)t[d].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?o.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?o.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var n=0,o=t.length;o>n;n++)t[n].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,i=e?void 0:this.adapter.offset(),n={};this.handleScroll(),t={horizontal:{contextOffset:e?0:i.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:i.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};for(var r in t){var s=t[r];for(var l in this.waypoints[r]){var a,h,p,u,d,f=this.waypoints[r][l],c=f.options.offset,w=f.triggerPoint,y=0,g=null==w;f.element!==f.element.window&&(y=f.adapter.offset()[s.offsetProp]),"function"==typeof c?c=c.apply(f):"string"==typeof c&&(c=parseFloat(c),f.options.offset.indexOf("%")>-1&&(c=Math.ceil(s.contextDimension*c/100))),a=s.contextScroll-s.contextOffset,f.triggerPoint=Math.floor(y+a-c),h=w<s.oldScroll,p=f.triggerPoint>=s.oldScroll,u=h&&p,d=!h&&!p,!g&&u?(f.queueTrigger(s.backward),n[f.group.id]=f.group):!g&&d?(f.queueTrigger(s.forward),n[f.group.id]=f.group):g&&s.oldScroll>=f.triggerPoint&&(f.queueTrigger(s.forward),n[f.group.id]=f.group)}}return o.requestAnimationFrame(function(){for(var t in n)n[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in n)n[t].refresh()},e.findByElement=function(t){return n[t.waypointContextKey]},window.onload=function(){r&&r(),e.refreshAll()},o.requestAnimationFrame=function(e){var i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t;i.call(window,e)},o.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function i(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),n[this.axis][this.name]=this}var n={vertical:{},horizontal:{}},o=window.Waypoint;i.prototype.add=function(t){this.waypoints.push(t)},i.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},i.prototype.flushTriggers=function(){for(var i in this.triggerQueues){var n=this.triggerQueues[i],o="up"===i||"left"===i;n.sort(o?e:t);for(var r=0,s=n.length;s>r;r+=1){var l=n[r];(l.options.continuous||r===n.length-1)&&l.trigger([i])}}this.clearTriggerQueues()},i.prototype.next=function(e){this.waypoints.sort(t);var i=o.Adapter.inArray(e,this.waypoints),n=i===this.waypoints.length-1;return n?null:this.waypoints[i+1]},i.prototype.previous=function(e){this.waypoints.sort(t);var i=o.Adapter.inArray(e,this.waypoints);return i?this.waypoints[i-1]:null},i.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},i.prototype.remove=function(t){var e=o.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},i.prototype.first=function(){return this.waypoints[0]},i.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},i.findOrCreate=function(t){return n[t.axis][t.name]||new i(t)},o.Group=i}(),function(){"use strict";function t(t){return t===t.window}function e(e){return t(e)?e:e.defaultView}function i(t){this.element=t,this.handlers={}}var n=window.Waypoint;i.prototype.innerHeight=function(){var e=t(this.element);return e?this.element.innerHeight:this.element.clientHeight},i.prototype.innerWidth=function(){var e=t(this.element);return e?this.element.innerWidth:this.element.clientWidth},i.prototype.off=function(t,e){function i(t,e,i){for(var n=0,o=e.length-1;o>n;n++){var r=e[n];i&&i!==r||t.removeEventListener(r)}}var n=t.split("."),o=n[0],r=n[1],s=this.element;if(r&&this.handlers[r]&&o)i(s,this.handlers[r][o],e),this.handlers[r][o]=[];else if(o)for(var l in this.handlers)i(s,this.handlers[l][o]||[],e),this.handlers[l][o]=[];else if(r&&this.handlers[r]){for(var a in this.handlers[r])i(s,this.handlers[r][a],e);this.handlers[r]={}}},i.prototype.offset=function(){if(!this.element.ownerDocument)return null;var t=this.element.ownerDocument.documentElement,i=e(this.element.ownerDocument),n={top:0,left:0};return this.element.getBoundingClientRect&&(n=this.element.getBoundingClientRect()),{top:n.top+i.pageYOffset-t.clientTop,left:n.left+i.pageXOffset-t.clientLeft}},i.prototype.on=function(t,e){var i=t.split("."),n=i[0],o=i[1]||"__default",r=this.handlers[o]=this.handlers[o]||{},s=r[n]=r[n]||[];s.push(e),this.element.addEventListener(n,e)},i.prototype.outerHeight=function(e){var i,n=this.innerHeight();return e&&!t(this.element)&&(i=window.getComputedStyle(this.element),n+=parseInt(i.marginTop,10),n+=parseInt(i.marginBottom,10)),n},i.prototype.outerWidth=function(e){var i,n=this.innerWidth();return e&&!t(this.element)&&(i=window.getComputedStyle(this.element),n+=parseInt(i.marginLeft,10),n+=parseInt(i.marginRight,10)),n},i.prototype.scrollLeft=function(){var t=e(this.element);return t?t.pageXOffset:this.element.scrollLeft},i.prototype.scrollTop=function(){var t=e(this.element);return t?t.pageYOffset:this.element.scrollTop},i.extend=function(){function t(t,e){if("object"==typeof t&&"object"==typeof e)for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}for(var e=Array.prototype.slice.call(arguments),i=1,n=e.length;n>i;i++)t(e[0],e[i]);return e[0]},i.inArray=function(t,e,i){return null==e?-1:e.indexOf(t,i)},i.isEmptyObject=function(t){for(var e in t)return!1;return!0},n.adapters.push({name:"noframework",Adapter:i}),n.Adapter=i}();
\ No newline at end of file
diff --git a/jekyll-assets/scripts/theme.js b/jekyll-assets/scripts/theme.js
new file mode 100644
index 0000000000..87bb2df9ab
--- /dev/null
+++ b/jekyll-assets/scripts/theme.js
@@ -0,0 +1,41 @@
+// toggles the site theme between dark and light
+function toggleTheme() {
+  var cookiePermission = document.cookie.indexOf("cookiebanner_accepted");
+  
+  // fetch the theme from local storage (if it exists)
+  var theme = localStorage.getItem('theme');
+  // if the theme has never been set, or is light, set the theme to the dark symbol in local storage to change it
+  if (localStorage.getItem('theme') !== null && theme == '🌝' ) {
+    if (document.cookie.indexOf("cookiebanner_accepted") != -1) {
+      localStorage.setItem('theme', '🌚');
+    }
+  } else {
+    if (document.cookie.indexOf("cookiebanner_accepted") != -1) {
+      // otherwise, the theme is currently set to dark, so set the theme to the light symbol in local storage to change it
+      localStorage.setItem('theme', '🌝');
+    }
+  }
+  // finally, toggle the light option off or on the body to change the display of the theme
+  document.body.classList.toggle('light');
+}
+
+// initialises the site theme display
+// of key interest here: from the user's perspective, the site defaults to the light theme...
+// ...unless your browser uses prefers-color-scheme to ask for a dark theme
+// from the site's perspective, we default to a dark theme, but toggle it to a light theme on load if the user doesn't ask for dark.
+// why do this? To prevent an annoying light 'flash' for dark theme users. light theme users don't really notice or care if there's a dark anti-flash.
+function initTheme() {
+  var cookiePermission = document.cookie.indexOf("cookiebanner_accepted");
+  if (document.cookie.indexOf("cookiebanner_accepted") != -1) {
+    // fetch the theme from local storage (if it exists)
+    var theme = localStorage.getItem('theme');
+    // if the theme has been set to light (null check to short circuit if not set)
+    if(theme !== null && theme === '🌝'
+      // if we can use matchMedia and the browser supports the dark color scheme
+      || (window.matchMedia && !window.matchMedia('(prefers-color-scheme: dark)').matches)
+      && theme !== '🌚') {
+        // toggles the theme from the default dark mode to the light version (which actually _shows_ by default to many users)
+        document.body.classList.toggle('light');
+    }
+  }
+}
\ No newline at end of file
diff --git a/jekyll-assets/scripts/toc.js b/jekyll-assets/scripts/toc.js
new file mode 100644
index 0000000000..b0afa20179
--- /dev/null
+++ b/jekyll-assets/scripts/toc.js
@@ -0,0 +1,98 @@
+/* Trigger Tocbot dynamic TOC, works with tocbot 3.0.2 */
+function makeToc() {
+    var tocElement = document.getElementById('toc');
+    if (tocElement) { /* only run on pages that have a toc -- exclude boxes landing pages, for instance */
+        var oldtoc = tocElement.nextElementSibling;
+        var newtoc = document.getElementById('tocbot');
+        newtoc.setAttribute('id', 'tocbot');
+        newtoc.setAttribute('class', 'js-toc');
+        oldtoc.parentNode.replaceChild(newtoc, oldtoc);
+        tocbot.init({ contentSelector: '#content',
+            headingSelector: 'h1, h2, h3, h4',
+            smoothScroll: true,
+            includeHtml: true
+        });
+        var handleTocOnResize = function() {
+            var width = window.innerWidth
+                        || document.documentElement.clientWidth
+                        || document.body.clientWidth;
+            if (width < 768) {
+                tocbot.refresh({ contentSelector: '#content',
+                    headingSelector: 'h1, h2, h3, h4',
+                    collapseDepth: 6,
+                    activeLinkClass: 'ignoreactive',
+                    throttleTimeout: 1000,
+                    smoothScroll: true });
+            }
+            else {
+                tocbot.refresh({ contentSelector: '#content',
+                    headingSelector: 'h1, h2, h3, h4',
+                    smoothScroll: true });
+            }
+        };
+        window.addEventListener('resize', handleTocOnResize);
+        handleTocOnResize();
+    }
+}
+
+var currentParentID;
+var currentParentInputID;
+var currentChildID;
+
+function initialiseCurrentToc(parentID, parentInputID = null, childID = null) {
+    // highlight the new parent
+    var newParent = document.getElementById(parentID);
+    newParent.setAttribute('style', 'font-weight:bold');
+    currentParentID = parentID;
+
+    // if a parent input id is specified, expand the parent element
+    if (parentInputID) {
+        var newParentInput = document.getElementById(parentInputID);
+        newParentInput.click();
+        currentParentInputID = parentInputID;
+    }
+
+    // if a child is specified, highlight the child
+    if (childID) {
+        var newChild = document.getElementById(childID);
+        newChild.setAttribute('style', 'font-weight:bold');
+        currentChildID = childID;
+    }
+}
+
+function updateCurrentToc(parentID, parentInputID = null, childID = null) {
+    if (currentParentID == null && currentChildID == null) {
+        initialiseCurrentToc(parentID, parentInputID, childID)
+    } else {
+        // if a parent input id is specified, but no child, expand the parent element
+        // why no child? because if someone clicks the child within a parent, they don't want the parent section to collapse!
+        if (parentInputID && childID == null) {
+            var newParentInput = document.getElementById(parentInputID);
+            newParentInput.click();
+            currentParentInputID = parentInputID;
+        }
+
+        // if this is a new parent id, de-highlight the old parent and highlight the new one
+        if (currentParentID != parentID) {
+            var oldParent = document.getElementById(currentParentID);
+            oldParent.style.removeProperty('font-weight');
+            var newParent = document.getElementById(parentID);
+            newParent.setAttribute('style', 'font-weight:bold');
+            currentParentID = parentID;
+        }
+
+        // if there is an old child highlighted, un-highlight it
+        if (currentChildID) {
+            var oldChild = document.getElementById(currentChildID);
+            oldChild.style.removeProperty('font-weight');
+        }
+
+        // if there is a new child, highlight it
+        if (childID != null) {
+            var newChild = document.getElementById(childID);
+
+            newChild.setAttribute('style', 'font-weight:bold');
+        }
+        currentChildID = childID;
+    }
+}
\ No newline at end of file
diff --git a/jekyll-assets/scripts/tocbot.js b/jekyll-assets/scripts/tocbot.js
new file mode 100644
index 0000000000..d6c9e28920
--- /dev/null
+++ b/jekyll-assets/scripts/tocbot.js
@@ -0,0 +1,1205 @@
+/******/ (() => { // webpackBootstrap
+/******/ 	"use strict";
+/******/ 	var __webpack_modules__ = ({
+
+/***/ "./src/js/build-html.js":
+/*!******************************!*\
+  !*** ./src/js/build-html.js ***!
+  \******************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
+/* harmony export */ });
+/**
+ * This file is responsible for building the DOM and updating DOM state.
+ *
+ * @author Tim Scanlin
+ */
+
+/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(options) {
+  const forEach = [].forEach
+  const some = [].some
+  const body = typeof window !== 'undefined' && document.body
+  const SPACE_CHAR = ' '
+  let tocElement
+  let currentlyHighlighting = true
+
+  /**
+   * Create link and list elements.
+   * @param {Object} d
+   * @param {HTMLElement} container
+   * @return {HTMLElement}
+   */
+  function createEl (d, container) {
+    const link = container.appendChild(createLink(d))
+    if (d.children.length) {
+      const list = createList(d.isCollapsed)
+      d.children.forEach((child) => {
+        createEl(child, list)
+      })
+      link.appendChild(list)
+    }
+  }
+
+  /**
+   * Render nested heading array data into a given element.
+   * @param {HTMLElement} parent Optional. If provided updates the {@see tocElement} to match.
+   * @param {Array} data
+   * @return {HTMLElement}
+   */
+  function render (parent, data) {
+    const collapsed = false
+    const container = createList(collapsed)
+
+    data.forEach((d) => {
+      createEl(d, container)
+    })
+
+    // Return if no TOC element is provided or known.
+    tocElement = parent || tocElement
+    if (tocElement === null) {
+      return
+    }
+
+    // Remove existing child if it exists.
+    if (tocElement.firstChild) {
+      tocElement.removeChild(tocElement.firstChild)
+    }
+
+    // Just return the parent and don't append the list if no links are found.
+    if (data.length === 0) {
+      return tocElement
+    }
+
+    // Append the Elements that have been created
+    return tocElement.appendChild(container)
+  }
+
+  /**
+   * Create link element.
+   * @param {Object} data
+   * @return {HTMLElement}
+   */
+  function createLink (data) {
+    const item = document.createElement('li')
+    const a = document.createElement('a')
+    if (options.listItemClass) {
+      item.setAttribute('class', options.listItemClass)
+    }
+
+    if (options.onClick) {
+      a.onclick = options.onClick
+    }
+
+    if (options.includeTitleTags) {
+      a.setAttribute('title', data.textContent)
+    }
+
+    if (options.includeHtml && data.childNodes.length) {
+      forEach.call(data.childNodes, (node) => {
+        a.appendChild(node.cloneNode(true))
+      })
+    } else {
+      // Default behavior. Set to textContent to keep tests happy.
+      a.textContent = data.textContent
+    }
+    a.setAttribute('href', `${options.basePath}#${data.id}`)
+    a.setAttribute('class', `${options.linkClass +
+      SPACE_CHAR}node-name--${data.nodeName}${SPACE_CHAR}${options.extraLinkClasses}`)
+    item.appendChild(a)
+    return item
+  }
+
+  /**
+   * Create list element.
+   * @param {Boolean} isCollapsed
+   * @return {HTMLElement}
+   */
+  function createList (isCollapsed) {
+    const listElement = (options.orderedList) ? 'ol' : 'ul'
+    const list = document.createElement(listElement)
+    let classes = options.listClass + SPACE_CHAR + options.extraListClasses
+    if (isCollapsed) {
+      // No plus/equals here fixes compilation issue.
+      classes = classes + SPACE_CHAR + options.collapsibleClass
+      classes = classes + SPACE_CHAR + options.isCollapsedClass
+    }
+    list.setAttribute('class', classes)
+    return list
+  }
+
+  /**
+   * Update fixed sidebar class.
+   * @return {HTMLElement}
+   */
+  function updateFixedSidebarClass () {
+    const scrollTop = getScrollTop()
+
+    const posFixedEl = document.querySelector(options.positionFixedSelector)
+    if (options.fixedSidebarOffset === 'auto') {
+      options.fixedSidebarOffset = tocElement.offsetTop
+    }
+
+    if (scrollTop > options.fixedSidebarOffset) {
+      if (posFixedEl.className.indexOf(options.positionFixedClass) === -1) {
+        posFixedEl.className += SPACE_CHAR + options.positionFixedClass
+      }
+    } else {
+      posFixedEl.className = posFixedEl.className.replace(SPACE_CHAR + options.positionFixedClass, '')
+    }
+  }
+
+  /**
+   * Get top position of heading
+   * @param {HTMLElement} obj
+   * @return {int} position
+   */
+  function getHeadingTopPos (obj) {
+    let position = 0
+    if (obj !== null) {
+      position = obj.offsetTop
+      if (options.hasInnerContainers) { position += getHeadingTopPos(obj.offsetParent) }
+    }
+    return position
+  }
+
+  /**
+   * Update className only when changed.
+   * @param {HTMLElement} obj
+   * @param {string} className
+   * @return {HTMLElement} obj
+   */
+  function updateClassname (obj, className) {
+    if (obj && obj.className !== className) {
+      obj.className = className
+    }
+    return obj
+  }
+
+  /**
+   * Update TOC highlighting and collapsed groupings.
+   */
+  function updateToc (headingsArray) {
+    // Add fixed class at offset
+    if (options.positionFixedSelector) {
+      updateFixedSidebarClass()
+    }
+
+    // Get the top most heading currently visible on the page so we know what to highlight.
+    const headings = headingsArray
+    // Using some instead of each so that we can escape early.
+    if (currentlyHighlighting &&
+      !!tocElement &&
+      headings.length > 0) {
+      const topHeader = getTopHeader(headings)
+
+      const oldActiveTocLink = tocElement.querySelector(`.${options.activeLinkClass}`)
+      const activeTocLink = tocElement
+        .querySelector(`.${options.linkClass}.node-name--${topHeader.nodeName}[href="${options.basePath}#${topHeader.id.replace(/([ #;&,.+*~':"!^$[\]()=>|/\\@])/g, '\\$1')}"]`)
+      // Performance improvement to only change the classes
+      // for the toc if a new link should be highlighted.
+      if (oldActiveTocLink === activeTocLink) {
+        return
+      }
+
+      // Remove the active class from the other tocLinks.
+      const tocLinks = tocElement
+        .querySelectorAll(`.${options.linkClass}`)
+      forEach.call(tocLinks, (tocLink) => {
+        updateClassname(tocLink, tocLink.className.replace(SPACE_CHAR + options.activeLinkClass, ''))
+      })
+      const tocLis = tocElement
+        .querySelectorAll(`.${options.listItemClass}`)
+      forEach.call(tocLis, (tocLi) => {
+        updateClassname(tocLi, tocLi.className.replace(SPACE_CHAR + options.activeListItemClass, ''))
+      })
+
+      // Add the active class to the active tocLink.
+      if (activeTocLink && activeTocLink.className.indexOf(options.activeLinkClass) === -1) {
+        activeTocLink.className += SPACE_CHAR + options.activeLinkClass
+      }
+      const li = activeTocLink?.parentNode
+      if (li && li.className.indexOf(options.activeListItemClass) === -1) {
+        li.className += SPACE_CHAR + options.activeListItemClass
+      }
+
+      const tocLists = tocElement
+        .querySelectorAll(`.${options.listClass}.${options.collapsibleClass}`)
+
+      // Collapse the other collapsible lists.
+      forEach.call(tocLists, (list) => {
+        if (list.className.indexOf(options.isCollapsedClass) === -1) {
+          list.className += SPACE_CHAR + options.isCollapsedClass
+        }
+      })
+
+      // Expand the active link's collapsible list and its sibling if applicable.
+      if (activeTocLink?.nextSibling && activeTocLink.nextSibling.className.indexOf(options.isCollapsedClass) !== -1) {
+        updateClassname(activeTocLink.nextSibling, activeTocLink.nextSibling.className.replace(SPACE_CHAR + options.isCollapsedClass, ''))
+      }
+      removeCollapsedFromParents(activeTocLink?.parentNode.parentNode)
+    }
+  }
+
+  /**
+   * Remove collapsed class from parent elements.
+   * @param {HTMLElement} element
+   * @return {HTMLElement}
+   */
+  function removeCollapsedFromParents (element) {
+    if (element && element.className.indexOf(options.collapsibleClass) !== -1 && element.className.indexOf(options.isCollapsedClass) !== -1) {
+      updateClassname(element, element.className.replace(SPACE_CHAR + options.isCollapsedClass, ''))
+      return removeCollapsedFromParents(element.parentNode.parentNode)
+    }
+    return element
+  }
+
+  /**
+   * Disable TOC Animation when a link is clicked.
+   * @param {Event} event
+   */
+  function disableTocAnimation (event) {
+    const target = event.target || event.srcElement
+    if (typeof target.className !== 'string' || target.className.indexOf(options.linkClass) === -1) {
+      return
+    }
+    // Bind to tocLink clicks to temporarily disable highlighting
+    // while smoothScroll is animating.
+    currentlyHighlighting = false
+  }
+
+  /**
+   * Enable TOC Animation.
+   */
+  function enableTocAnimation () {
+    currentlyHighlighting = true
+  }
+
+  /**
+   * Return currently highlighting status.
+   */
+  function getCurrentlyHighlighting () {
+    return currentlyHighlighting
+  }
+
+  function getScrollTop () {
+    // If a fixed content container was set
+    let top
+    if (options.scrollContainer && document.querySelector(options.scrollContainer)) {
+      top = document.querySelector(options.scrollContainer).scrollTop
+    } else {
+      top = document.documentElement.scrollTop || body.scrollTop
+    }
+    return top
+  }
+
+  function getTopHeader (headings, scrollTop = getScrollTop()) {
+    let topHeader
+    some.call(headings, (heading, i) => {
+      if (getHeadingTopPos(heading) > scrollTop + options.headingsOffset + 10) {
+        // Don't allow negative index value.
+        const index = (i === 0) ? i : i - 1
+        topHeader = headings[index]
+        return true
+      }
+      if (i === headings.length - 1) {
+        // This allows scrolling for the last heading on the page.
+        topHeader = headings[headings.length - 1]
+        return true
+      }
+    })
+    return topHeader
+  }
+
+  function updateUrlHashForHeader (headingsArray) {
+    const scrollTop = getScrollTop()
+    const topHeader = getTopHeader(headingsArray, scrollTop)
+    if (!topHeader || scrollTop < 5) {
+      if (!(window.location.hash === '#' || window.location.hash === '')) {
+        window.history.pushState(null, null, '#')
+      }
+    } else if (topHeader) {
+      const newHash = `#${topHeader.id}`
+      if (window.location.hash !== newHash) {
+        window.history.pushState(null, null, newHash)
+      }
+    }
+  }
+
+  return {
+    enableTocAnimation,
+    disableTocAnimation,
+    render,
+    updateToc,
+    getCurrentlyHighlighting,
+    getTopHeader,
+    getScrollTop,
+    updateUrlHashForHeader
+  }
+}
+
+
+/***/ }),
+
+/***/ "./src/js/default-options.js":
+/*!***********************************!*\
+  !*** ./src/js/default-options.js ***!
+  \***********************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
+/* harmony export */ });
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
+  // Where to render the table of contents.
+  tocSelector: '.js-toc',
+  // Or, you can pass in a DOM node instead
+  tocElement: null,
+  // Where to grab the headings to build the table of contents.
+  contentSelector: '.js-toc-content',
+  // Or, you can pass in a DOM node instead
+  contentElement: null,
+  // Which headings to grab inside of the contentSelector element.
+  headingSelector: 'h1, h2, h3',
+  // Headings that match the ignoreSelector will be skipped.
+  ignoreSelector: '.js-toc-ignore',
+  // For headings inside relative or absolute positioned
+  // containers within content.
+  hasInnerContainers: false,
+  // Main class to add to links.
+  linkClass: 'toc-link',
+  // Extra classes to add to links.
+  extraLinkClasses: '',
+  // Class to add to active links,
+  // the link corresponding to the top most heading on the page.
+  activeLinkClass: 'is-active-link',
+  // Main class to add to lists.
+  listClass: 'toc-list',
+  // Extra classes to add to lists.
+  extraListClasses: '',
+  // Class that gets added when a list should be collapsed.
+  isCollapsedClass: 'is-collapsed',
+  // Class that gets added when a list should be able
+  // to be collapsed but isn't necessarily collapsed.
+  collapsibleClass: 'is-collapsible',
+  // Class to add to list items.
+  listItemClass: 'toc-list-item',
+  // Class to add to active list items.
+  activeListItemClass: 'is-active-li',
+  // How many heading levels should not be collapsed.
+  // For example, number 6 will show everything since
+  // there are only 6 heading levels and number 0 will collapse them all.
+  // The sections that are hidden will open
+  // and close as you scroll to headings within them.
+  collapseDepth: 2,
+  // Smooth scrolling enabled.
+  scrollSmooth: true,
+  // Smooth scroll duration.
+  scrollSmoothDuration: 420,
+  // Smooth scroll offset.
+  scrollSmoothOffset: 0,
+  // Callback for scroll end.
+  scrollEndCallback: function (e) {},
+  // Headings offset between the headings and the top of
+  // the document (this is meant for minor adjustments).
+  headingsOffset: 2,
+  // Timeout between events firing to make sure it's
+  // not too rapid (for performance reasons).
+  throttleTimeout: 50,
+  // Element to add the positionFixedClass to.
+  positionFixedSelector: null,
+  // Fixed position class to add to make sidebar fixed after scrolling
+  // down past the fixedSidebarOffset.
+  positionFixedClass: 'is-position-fixed',
+  // fixedSidebarOffset can be any number but by default is set
+  // to auto which sets the fixedSidebarOffset to the sidebar
+  // element's offsetTop from the top of the document on init.
+  fixedSidebarOffset: 'auto',
+  // includeHtml can be set to true to include the HTML markup from the
+  // heading node instead of just including the innerText.
+  includeHtml: true,
+  // includeTitleTags automatically sets the html title tag of the link
+  // to match the title. This can be useful for SEO purposes or
+  // when truncating titles.
+  includeTitleTags: false,
+  // onclick function to apply to all links in toc. will be called with
+  // the event as the first parameter, and this can be used to stop,
+  // propagation, prevent default or perform action
+  onClick: function (e) {},
+  // orderedList can be set to false to generate unordered lists (ul)
+  // instead of ordered lists (ol)
+  orderedList: false,
+  // If there is a fixed article scroll container, set to calculate offset.
+  scrollContainer: null,
+  // prevent ToC DOM rendering if it's already rendered by an external system.
+  skipRendering: false,
+  // Optional callback to change heading labels.
+  // For example it can be used to cut down and put ellipses on multiline headings you deem too long.
+  // Called each time a heading is parsed. Expects a string and returns the modified label to display.
+  // Additionally, the attribute `data-heading-label` may be used on a heading to specify
+  // a shorter string to be used in the TOC.
+  // function (string) => string
+  headingLabelCallback: false,
+  // ignore headings that are hidden in DOM
+  ignoreHiddenElements: false,
+  // Optional callback to modify properties of parsed headings.
+  // The heading element is passed in node parameter and information
+  // parsed by default parser is provided in obj parameter.
+  // Function has to return the same or modified obj.
+  // The heading will be excluded from TOC if nothing is returned.
+  // function (object, HTMLElement) => object | void
+  headingObjectCallback: null,
+  // Set the base path, useful if you use a `base` tag in `head`.
+  basePath: '',
+  // Only takes affect when `tocSelector` is scrolling,
+  // keep the toc scroll position in sync with the content.
+  disableTocScrollSync: false,
+  // If this is null then just use `tocElement` or `tocSelector` instead
+  // assuming `disableTocScrollSync` is set to false. This allows for
+  // scrolling an outer element (like a nav panel w/ search) containing the toc.
+  tocScrollingWrapper: null,
+  // Offset for the toc scroll (top) position when scrolling the page.
+  // Only effective if `disableTocScrollSync` is false.
+  tocScrollOffset: 0,
+  // Enable the URL hash to update with the proper heading ID as
+  // a user scrolls the page.
+  enableUrlHashUpdateOnScroll: false
+});
+
+
+/***/ }),
+
+/***/ "./src/js/index-esm.js":
+/*!*****************************!*\
+  !*** ./src/js/index-esm.js ***!
+  \*****************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   "_buildHtml": () => (/* binding */ _buildHtml),
+/* harmony export */   "_headingsArray": () => (/* binding */ _headingsArray),
+/* harmony export */   "_options": () => (/* binding */ _options),
+/* harmony export */   "_parseContent": () => (/* binding */ _parseContent),
+/* harmony export */   "_scrollListener": () => (/* binding */ _scrollListener),
+/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__),
+/* harmony export */   "destroy": () => (/* binding */ destroy),
+/* harmony export */   "init": () => (/* binding */ init),
+/* harmony export */   "refresh": () => (/* binding */ refresh)
+/* harmony export */ });
+/* harmony import */ var _build_html_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./build-html.js */ "./src/js/build-html.js");
+/* harmony import */ var _default_options_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./default-options.js */ "./src/js/default-options.js");
+/* harmony import */ var _parse_content_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parse-content.js */ "./src/js/parse-content.js");
+/* harmony import */ var _scroll_smooth_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./scroll-smooth/index.js */ "./src/js/scroll-smooth/index.js");
+/* harmony import */ var _update_toc_scroll_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./update-toc-scroll.js */ "./src/js/update-toc-scroll.js");
+/* eslint no-var: off */
+/**
+ * Tocbot
+ * Tocbot creates a table of contents based on HTML headings on a page,
+ * this allows users to easily jump to different sections of the document.
+ * Tocbot was inspired by tocify (http://gregfranko.com/jquery.tocify.js/).
+ * The main differences are that it works natively without any need for jquery or jquery UI).
+ *
+ * @author Tim Scanlin
+ */
+
+
+
+
+
+
+
+// For testing purposes.
+let _options = {} // Object to store current options.
+let _buildHtml
+let _parseContent
+let _headingsArray
+let _scrollListener
+
+let clickListener
+
+/**
+ * Initialize tocbot.
+ * @param {object} customOptions
+ */
+function init (customOptions) {
+  // Merge defaults with user options.
+  // Set to options variable at the top.
+  _options = extend(_default_options_js__WEBPACK_IMPORTED_MODULE_1__["default"], customOptions || {})
+
+  // Init smooth scroll if enabled (default).
+  if (_options.scrollSmooth) {
+    _options.duration = _options.scrollSmoothDuration
+    _options.offset = _options.scrollSmoothOffset
+
+    ;(0,_scroll_smooth_index_js__WEBPACK_IMPORTED_MODULE_3__["default"])(_options)
+  }
+
+  // Pass options to these modules.
+  _buildHtml = (0,_build_html_js__WEBPACK_IMPORTED_MODULE_0__["default"])(_options)
+  _parseContent = (0,_parse_content_js__WEBPACK_IMPORTED_MODULE_2__["default"])(_options)
+
+  // Destroy it if it exists first.
+  destroy()
+
+  const contentElement = getContentElement(_options)
+  if (contentElement === null) {
+    return
+  }
+
+  const tocElement = getTocElement(_options)
+  if (tocElement === null) {
+    return
+  }
+
+  // Get headings array.
+  _headingsArray = _parseContent.selectHeadings(
+    contentElement,
+    _options.headingSelector
+  )
+
+  // Return if no headings are found.
+  if (_headingsArray === null) {
+    return
+  }
+
+  // Build nested headings array.
+  const nestedHeadingsObj = _parseContent.nestHeadingsArray(_headingsArray)
+  const nestedHeadings = nestedHeadingsObj.nest
+
+  // Render.
+  if (!_options.skipRendering) {
+    _buildHtml.render(tocElement, nestedHeadings)
+  } else {
+    // No need to attach listeners if skipRendering is true, this was causing errors.
+    return this
+  }
+
+  // Update Sidebar and bind listeners.
+  _scrollListener = throttle((e) => {
+    _buildHtml.updateToc(_headingsArray)
+    !_options.disableTocScrollSync && (0,_update_toc_scroll_js__WEBPACK_IMPORTED_MODULE_4__["default"])(_options)
+
+    if (_options.enableUrlHashUpdateOnScroll) {
+      const enableUpdatingHash = _buildHtml.getCurrentlyHighlighting()
+      enableUpdatingHash && _buildHtml.updateUrlHashForHeader(_headingsArray)
+    }
+
+    const isTop =
+      e?.target?.scrollingElement &&
+      e.target.scrollingElement.scrollTop === 0
+    if ((e && (e.eventPhase === 0 || e.currentTarget === null)) || isTop) {
+      _buildHtml.updateToc(_headingsArray)
+      if (_options.scrollEndCallback) {
+        _options.scrollEndCallback(e)
+      }
+    }
+  }, _options.throttleTimeout)
+  _scrollListener()
+  if (
+    _options.scrollContainer &&
+    document.querySelector(_options.scrollContainer)
+  ) {
+    document
+      .querySelector(_options.scrollContainer)
+      .addEventListener('scroll', _scrollListener, false)
+    document
+      .querySelector(_options.scrollContainer)
+      .addEventListener('resize', _scrollListener, false)
+  } else {
+    document.addEventListener('scroll', _scrollListener, false)
+    document.addEventListener('resize', _scrollListener, false)
+  }
+
+  // Bind click listeners to disable animation.
+  let timeout = null
+  clickListener = throttle((event) => {
+    if (_options.scrollSmooth) {
+      _buildHtml.disableTocAnimation(event)
+    }
+    _buildHtml.updateToc(_headingsArray)
+    // Timeout to re-enable the animation.
+    timeout && clearTimeout(timeout)
+    timeout = setTimeout(() => {
+      _buildHtml.enableTocAnimation()
+    }, _options.scrollSmoothDuration)
+  }, _options.throttleTimeout)
+
+  if (
+    _options.scrollContainer &&
+    document.querySelector(_options.scrollContainer)
+  ) {
+    document
+      .querySelector(_options.scrollContainer)
+      .addEventListener('click', clickListener, false)
+  } else {
+    document.addEventListener('click', clickListener, false)
+  }
+}
+
+/**
+ * Destroy tocbot.
+ */
+function destroy () {
+  const tocElement = getTocElement(_options)
+  if (tocElement === null) {
+    return
+  }
+
+  if (!_options.skipRendering) {
+    // Clear HTML.
+    if (tocElement) {
+      tocElement.innerHTML = ''
+    }
+  }
+
+  // Remove event listeners.
+  if (
+    _options.scrollContainer &&
+    document.querySelector(_options.scrollContainer)
+  ) {
+    document
+      .querySelector(_options.scrollContainer)
+      .removeEventListener('scroll', _scrollListener, false)
+    document
+      .querySelector(_options.scrollContainer)
+      .removeEventListener('resize', _scrollListener, false)
+    if (_buildHtml) {
+      document
+        .querySelector(_options.scrollContainer)
+        .removeEventListener('click', clickListener, false)
+    }
+  } else {
+    document.removeEventListener('scroll', _scrollListener, false)
+    document.removeEventListener('resize', _scrollListener, false)
+    if (_buildHtml) {
+      document.removeEventListener('click', clickListener, false)
+    }
+  }
+}
+
+/**
+ * Refresh tocbot.
+ */
+function refresh (customOptions) {
+  destroy()
+  init(customOptions || _options)
+}
+
+// From: https://github.com/Raynos/xtend
+const hasOwnProp = Object.prototype.hasOwnProperty
+function extend (...args) {
+  const target = {}
+  for (let i = 0; i < args.length; i++) {
+    const source = args[i]
+    for (const key in source) {
+      if (hasOwnProp.call(source, key)) {
+        target[key] = source[key]
+      }
+    }
+  }
+  return target
+}
+
+// From: https://remysharp.com/2010/07/21/throttling-function-calls
+function throttle (fn, threshold, scope) {
+  threshold || (threshold = 250)
+  let last
+  let deferTimer
+  return function (...args) {
+    const context = scope || this
+    const now = +new Date()
+    if (last && now < last + threshold) {
+      // hold on to it
+      clearTimeout(deferTimer)
+      deferTimer = setTimeout(() => {
+        last = now
+        fn.apply(context, args)
+      }, threshold)
+    } else {
+      last = now
+      fn.apply(context, args)
+    }
+  }
+}
+
+function getContentElement (options) {
+  try {
+    return (
+      options.contentElement || document.querySelector(options.contentSelector)
+    )
+  } catch (e) {
+    console.warn(`Contents element not found: ${options.contentSelector}`) // eslint-disable-line
+    return null
+  }
+}
+
+function getTocElement (options) {
+  try {
+    return options.tocElement || document.querySelector(options.tocSelector)
+  } catch (e) {
+    console.warn(`TOC element not found: ${options.tocSelector}`) // eslint-disable-line
+    return null
+  }
+}
+
+// Add default export for easier use.
+const tocbot = {
+  _options,
+  _buildHtml,
+  _parseContent,
+  init,
+  destroy,
+  refresh
+}
+
+/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (tocbot);
+
+
+/***/ }),
+
+/***/ "./src/js/parse-content.js":
+/*!*********************************!*\
+  !*** ./src/js/parse-content.js ***!
+  \*********************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   "default": () => (/* binding */ parseContent)
+/* harmony export */ });
+/**
+ * This file is responsible for parsing the content from the DOM and making
+ * sure data is nested properly.
+ *
+ * @author Tim Scanlin
+ */
+
+function parseContent (options) {
+  const reduce = [].reduce
+
+  /**
+   * Get the last item in an array and return a reference to it.
+   * @param {Array} array
+   * @return {Object}
+   */
+  function getLastItem (array) {
+    return array[array.length - 1]
+  }
+
+  /**
+   * Get heading level for a heading dom node.
+   * @param {HTMLElement} heading
+   * @return {Number}
+   */
+  function getHeadingLevel (heading) {
+    return +heading.nodeName.toUpperCase().replace('H', '')
+  }
+
+  /**
+   * Determine whether the object is an HTML Element.
+   * Also works inside iframes. HTML Elements might be created by the parent document.
+   * @param {Object} maybeElement
+   * @return {Number}
+   */
+  function isHTMLElement (maybeElement) {
+    try {
+      return (
+        maybeElement instanceof window.HTMLElement ||
+        maybeElement instanceof window.parent.HTMLElement
+      )
+    } catch (e) {
+      return maybeElement instanceof window.HTMLElement
+    }
+  }
+
+  /**
+   * Get important properties from a heading element and store in a plain object.
+   * @param {HTMLElement} heading
+   * @return {Object}
+   */
+  function getHeadingObject (heading) {
+    // each node is processed twice by this method because nestHeadingsArray() and addNode() calls it
+    // first time heading is real DOM node element, second time it is obj
+    // that is causing problem so I am processing only original DOM node
+    if (!isHTMLElement(heading)) return heading
+
+    if (options.ignoreHiddenElements && (!heading.offsetHeight || !heading.offsetParent)) {
+      return null
+    }
+
+    const headingLabel = heading.getAttribute('data-heading-label') ||
+      (options.headingLabelCallback ? String(options.headingLabelCallback(heading.innerText)) : (heading.innerText || heading.textContent).trim())
+    const obj = {
+      id: heading.id,
+      children: [],
+      nodeName: heading.nodeName,
+      headingLevel: getHeadingLevel(heading),
+      textContent: headingLabel
+    }
+
+    obj.childNodes = heading.childNodes
+
+    if (options.headingObjectCallback) {
+      return options.headingObjectCallback(obj, heading)
+    }
+
+    return obj
+  }
+
+  /**
+   * Add a node to the nested array.
+   * @param {Object} node
+   * @param {Array} nest
+   * @return {Array}
+   */
+  function addNode (node, nest) {
+    const obj = getHeadingObject(node)
+    const level = obj.headingLevel
+    let array = nest
+    let lastItem = getLastItem(array)
+    const lastItemLevel = lastItem
+      ? lastItem.headingLevel
+      : 0
+    let counter = level - lastItemLevel
+
+    while (counter > 0) {
+      lastItem = getLastItem(array)
+      // Handle case where there are multiple h5+ in a row.
+      if (lastItem && level === lastItem.headingLevel) {
+        break
+      } else if (lastItem && lastItem.children !== undefined) {
+        array = lastItem.children
+      }
+      counter--
+    }
+
+    if (level >= options.collapseDepth) {
+      obj.isCollapsed = true
+    }
+
+    array.push(obj)
+    return array
+  }
+
+  /**
+   * Select headings in content area, exclude any selector in options.ignoreSelector
+   * @param {HTMLElement} contentElement
+   * @param {Array} headingSelector
+   * @return {Array}
+   */
+  function selectHeadings (contentElement, headingSelector) {
+    let selectors = headingSelector
+    if (options.ignoreSelector) {
+      selectors = headingSelector.split(',')
+        .map(function mapSelectors (selector) {
+          return `${selector.trim()}:not(${options.ignoreSelector})`
+        })
+    }
+    try {
+      return contentElement.querySelectorAll(selectors)
+    } catch (e) {
+      console.warn(`Headers not found with selector: ${selectors}`); // eslint-disable-line
+      return null
+    }
+  }
+
+  /**
+   * Nest headings array into nested arrays with 'children' property.
+   * @param {Array} headingsArray
+   * @return {Object}
+   */
+  function nestHeadingsArray (headingsArray) {
+    return reduce.call(headingsArray, function reducer (prev, curr) {
+      const currentHeading = getHeadingObject(curr)
+      if (currentHeading) {
+        addNode(currentHeading, prev.nest)
+      }
+      return prev
+    }, {
+      nest: []
+    })
+  }
+
+  return {
+    nestHeadingsArray,
+    selectHeadings
+  }
+}
+
+
+/***/ }),
+
+/***/ "./src/js/scroll-smooth/index.js":
+/*!***************************************!*\
+  !*** ./src/js/scroll-smooth/index.js ***!
+  \***************************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   "default": () => (/* binding */ initSmoothScrolling)
+/* harmony export */ });
+/* eslint no-var: off */
+/* globals location, requestAnimationFrame */
+
+function initSmoothScrolling (options) {
+  // if (isCssSmoothSCrollSupported()) { return }
+
+  var duration = options.duration
+  var offset = options.offset
+  if (typeof window === 'undefined' || typeof location === 'undefined') return
+
+  var pageUrl = location.hash
+    ? stripHash(location.href)
+    : location.href
+
+  delegatedLinkHijacking()
+
+  function delegatedLinkHijacking () {
+    document.body.addEventListener('click', onClick, false)
+
+    function onClick (e) {
+      if (
+        !isInPageLink(e.target) ||
+        e.target.className.indexOf('no-smooth-scroll') > -1 ||
+        (e.target.href.charAt(e.target.href.length - 2) === '#' &&
+        e.target.href.charAt(e.target.href.length - 1) === '!') ||
+        e.target.className.indexOf(options.linkClass) === -1) {
+        return
+      }
+
+      // Don't prevent default or hash doesn't change.
+      // e.preventDefault()
+
+      jump(e.target.hash, {
+        duration,
+        offset,
+        callback: function () {
+          setFocus(e.target.hash)
+        }
+      })
+    }
+  }
+
+  function isInPageLink (n) {
+    return n.tagName.toLowerCase() === 'a' &&
+      (n.hash.length > 0 || n.href.charAt(n.href.length - 1) === '#') &&
+      (stripHash(n.href) === pageUrl || stripHash(n.href) + '#' === pageUrl)
+  }
+
+  function stripHash (url) {
+    return url.slice(0, url.lastIndexOf('#'))
+  }
+
+  // function isCssSmoothSCrollSupported () {
+  //   return 'scrollBehavior' in document.documentElement.style
+  // }
+
+  // Adapted from:
+  // https://www.nczonline.net/blog/2013/01/15/fixing-skip-to-content-links/
+  function setFocus (hash) {
+    var element = document.getElementById(hash.substring(1))
+
+    if (element) {
+      if (!/^(?:a|select|input|button|textarea)$/i.test(element.tagName)) {
+        element.tabIndex = -1
+      }
+
+      element.focus()
+    }
+  }
+}
+
+function jump (target, options) {
+  var start = window.pageYOffset
+  var opt = {
+    duration: options.duration,
+    offset: options.offset || 0,
+    callback: options.callback,
+    easing: options.easing || easeInOutQuad
+  }
+  // This makes ids that start with a number work: ('[id="' + decodeURI(target).split('#').join('') + '"]')
+  // DecodeURI for nonASCII hashes, they was encoded, but id was not encoded, it lead to not finding the tgt element by id.
+  // And this is for IE: document.body.scrollTop
+  // Handle decoded and non-decoded URIs since sometimes URLs automatically transform them (support for internation chars).
+  var tgt = document.querySelector('[id="' + decodeURI(target).split('#').join('') + '"]') ||
+    document.querySelector('[id="' + (target).split('#').join('') + '"]')
+  var distance = typeof target === 'string'
+    ? opt.offset + (
+      target
+        ? (tgt && tgt.getBoundingClientRect().top) || 0 // handle non-existent links better.
+        : -(document.documentElement.scrollTop || document.body.scrollTop))
+    : target
+  var duration = typeof opt.duration === 'function'
+    ? opt.duration(distance)
+    : opt.duration
+  var timeStart
+  var timeElapsed
+
+  requestAnimationFrame(function (time) { timeStart = time; loop(time) })
+  function loop (time) {
+    timeElapsed = time - timeStart
+
+    window.scrollTo(0, opt.easing(timeElapsed, start, distance, duration))
+
+    if (timeElapsed < duration) { requestAnimationFrame(loop) } else { end() }
+  }
+
+  function end () {
+    window.scrollTo(0, start + distance)
+
+    if (typeof opt.callback === 'function') { opt.callback() }
+  }
+
+  // Robert Penner's easeInOutQuad - http://robertpenner.com/easing/
+  function easeInOutQuad (t, b, c, d) {
+    t /= d / 2
+    if (t < 1) return c / 2 * t * t + b
+    t--
+    return -c / 2 * (t * (t - 2) - 1) + b
+  }
+}
+
+
+/***/ }),
+
+/***/ "./src/js/update-toc-scroll.js":
+/*!*************************************!*\
+  !*** ./src/js/update-toc-scroll.js ***!
+  \*************************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */   "default": () => (/* binding */ updateTocScroll)
+/* harmony export */ });
+const SCROLL_LEEWAY = 30
+function updateTocScroll (options) {
+  const toc = options.tocScrollingWrapper || options.tocElement || document.querySelector(options.tocSelector)
+  if (toc && toc.scrollHeight > toc.clientHeight) {
+    const activeItem = toc.querySelector(`.${options.activeListItemClass}`)
+    if (activeItem) {
+      // Determine container top and bottom
+      const cTop = toc.scrollTop
+      const cBottom = cTop + toc.clientHeight
+
+      // Determine element top and bottom
+      const eTop = activeItem.offsetTop
+      const eBottom = eTop + activeItem.clientHeight
+
+      // Check if out of view
+      // Above scroll view
+      if (eTop < cTop + options.tocScrollOffset) {
+        toc.scrollTop -= (cTop - eTop) + options.tocScrollOffset
+      // Below scroll view
+      } else if (eBottom > cBottom - options.tocScrollOffset - SCROLL_LEEWAY) {
+        toc.scrollTop += (eBottom - cBottom) + options.tocScrollOffset + (2 * SCROLL_LEEWAY)
+      }
+    }
+  }
+}
+
+
+/***/ })
+
+/******/ 	});
+/************************************************************************/
+/******/ 	// The module cache
+/******/ 	var __webpack_module_cache__ = {};
+/******/ 	
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/ 		// Check if module is in cache
+/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
+/******/ 		if (cachedModule !== undefined) {
+/******/ 			return cachedModule.exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = __webpack_module_cache__[moduleId] = {
+/******/ 			// no module.id needed
+/******/ 			// no module.loaded needed
+/******/ 			exports: {}
+/******/ 		};
+/******/ 	
+/******/ 		// Execute the module function
+/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/ 	
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/ 	
+/************************************************************************/
+/******/ 	/* webpack/runtime/define property getters */
+/******/ 	(() => {
+/******/ 		// define getter functions for harmony exports
+/******/ 		__webpack_require__.d = (exports, definition) => {
+/******/ 			for(var key in definition) {
+/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ 				}
+/******/ 			}
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
+/******/ 	(() => {
+/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ 	})();
+/******/ 	
+/******/ 	/* webpack/runtime/make namespace object */
+/******/ 	(() => {
+/******/ 		// define __esModule on exports
+/******/ 		__webpack_require__.r = (exports) => {
+/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 			}
+/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 		};
+/******/ 	})();
+/******/ 	
+/************************************************************************/
+var __webpack_exports__ = {};
+// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
+(() => {
+/*!******************************!*\
+  !*** ./src/js/index-dist.js ***!
+  \******************************/
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _index_esm_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index-esm.js */ "./src/js/index-esm.js");
+/* globals define */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    define([], factory(root))
+  } else if (typeof exports === 'object') {
+    module.exports = factory(root)
+  } else {
+    root.tocbot = factory(root)
+  }
+})(typeof global !== 'undefined' ? global : window || global, function (root) {
+  'use strict'
+
+  // Just return if its not a browser.
+  const supports =
+    !!root &&
+    !!root.document &&
+    !!root.document.querySelector &&
+    !!root.addEventListener // Feature test
+  if (typeof window === 'undefined' && !supports) {
+    return
+  }
+
+  // Make tocbot available globally.
+  root.tocbot = _index_esm_js__WEBPACK_IMPORTED_MODULE_0__
+
+  return _index_esm_js__WEBPACK_IMPORTED_MODULE_0__
+})
+
+})();
+
+/******/ })()
+;
\ No newline at end of file
diff --git a/jekyll-assets/scripts/whitepaper.js b/jekyll-assets/scripts/whitepaper.js
deleted file mode 100644
index 2914be126f..0000000000
--- a/jekyll-assets/scripts/whitepaper.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var coverImages = document.querySelectorAll('.whitepaper div.coverimage');
-
-for (var i = 0; i < coverImages.length; i++) {
-  coverImages[i].addEventListener('click', clickCover, false);
-}
-
-function clickCover() {
-	var url = this.getAttribute("data-link");
-	window.open(url);
-}
\ No newline at end of file
diff --git a/tests/fixtures/microcontrollers/c_sdk/official_sdk.adoc b/tests/fixtures/microcontrollers/c_sdk/official_sdk.adoc
index a2b4473029..faca0f709e 100644
--- a/tests/fixtures/microcontrollers/c_sdk/official_sdk.adoc
+++ b/tests/fixtures/microcontrollers/c_sdk/official_sdk.adoc
@@ -1,4 +1,4 @@
-== Raspberry Pi Pico C/{cpp} SDK
+== Raspberry Pi Pico C/C++ SDK
 
 Our official C SDK can be used from the command line, or from popular integrated development environments like Visual Studio Code, Eclipse, and CLion. To get started, download our C/{cpp} SDK and Examples, and take a look at our 'https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf[getting started]' documentation to get going. Or for a quick setup see the next section.
 
@@ -29,4 +29,4 @@ Documentation introducing working with Wi-Fi and Bluetooth on Raspberry Pi Pico
 [NOTE]
 ====
 If you are building applications with the C/{cpp} SDK for Raspberry Pi Pico W and, to connect to a network you will need to pass `-DPICO_BOARD=pico_w -DWIFI_SSID="Your Network" -DWIFI_PASSWORD="Your Password"` to CMake. If you only need to enable Bluetooth support then you do not need to pass a SSID and password, but still need to pass the `-DPICO_BOARD=pico_w` string to CMake.
-====
\ No newline at end of file
+====

From d4106d18b1d941c4ad9f4a15bd78ebaa6de784a7 Mon Sep 17 00:00:00 2001
From: Andrew Scheller <andrew.scheller@raspberrypi.com>
Date: Tue, 1 Jul 2025 16:34:42 +0100
Subject: [PATCH 04/11] Add description of new LED blink error code (#4134)

See https://github.com/raspberrypi/rpi-eeprom/pull/721
---
 .../asciidoc/computers/configuration/led_blink_warnings.adoc  | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/documentation/asciidoc/computers/configuration/led_blink_warnings.adoc b/documentation/asciidoc/computers/configuration/led_blink_warnings.adoc
index 10eb1c2517..5eebc6d7c1 100644
--- a/documentation/asciidoc/computers/configuration/led_blink_warnings.adoc
+++ b/documentation/asciidoc/computers/configuration/led_blink_warnings.adoc
@@ -30,6 +30,10 @@ If a Raspberry Pi fails to boot for some reason, or has to shut down, in many ca
 | 10
 | In HALT state
 
+| 1
+| 2
+| SD card overcurrent detected
+
 | 2
 | 1
 | Partition not FAT

From 1bed77866d2f997f0298454068f1047d273b0906 Mon Sep 17 00:00:00 2001
From: Naushir Patuck <naush@raspberrypi.com>
Date: Thu, 3 Jul 2025 08:13:15 +0100
Subject: [PATCH 05/11] imx500: Swap pytorch/tf tab ordering. Pytorch is
 preferred.

---
 .../ai-camera/model-conversion.adoc           | 20 +++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/documentation/asciidoc/accessories/ai-camera/model-conversion.adoc b/documentation/asciidoc/accessories/ai-camera/model-conversion.adoc
index 3465a6d364..f449476c62 100644
--- a/documentation/asciidoc/accessories/ai-camera/model-conversion.adoc
+++ b/documentation/asciidoc/accessories/ai-camera/model-conversion.adoc
@@ -26,21 +26,21 @@ The Edge-MDT package takes a parameter to select between installing the PyTorch
 
 [tabs]
 ======
-TensorFlow::
+PyTorch::
 +
 [source,console]
 ----
-$ pip install edge-mdt[tf]
+$ pip install edge-mdt[pt]
 ----
-+
-TIP: Always use the same version of TensorFlow you used to compress your model.
 
-PyTorch::
+TensorFlow::
 +
 [source,console]
 ----
-$ pip install edge-mdt[pt]
+$ pip install edge-mdt[tf]
 ----
++
+TIP: Always use the same version of TensorFlow you used to compress your model.
 ======
 
 If you need to install both packages, use two separate Python virtual environments. This prevents TensorFlow and PyTorch from causing conflicts with each other.
@@ -62,18 +62,18 @@ To convert a model model:
 
 [tabs]
 ======
-TensorFlow::
+PyTorch::
 +
 [source,console]
 ----
-$ imxconv-tf -i <compressed Keras model> -o <output folder>
+$ imxconv-pt -i <compressed ONNX model> -o <output folder>
 ----
 
-PyTorch::
+TensorFlow::
 +
 [source,console]
 ----
-$ imxconv-pt -i <compressed ONNX model> -o <output folder>
+$ imxconv-tf -i <compressed Keras model> -o <output folder>
 ----
 ======
 

From b17b3056e6f185f62f56626a4efc887380d716c2 Mon Sep 17 00:00:00 2001
From: Naushir Patuck <naush@raspberrypi.com>
Date: Mon, 21 Jul 2025 10:23:21 +0100
Subject: [PATCH 06/11] camera: Add libopencv-dev package to installation
 instructions

---
 .../asciidoc/computers/camera/rpicam_apps_building.adoc         | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/documentation/asciidoc/computers/camera/rpicam_apps_building.adoc b/documentation/asciidoc/computers/camera/rpicam_apps_building.adoc
index 306e9cfb84..9fe1ea10ad 100644
--- a/documentation/asciidoc/computers/camera/rpicam_apps_building.adoc
+++ b/documentation/asciidoc/computers/camera/rpicam_apps_building.adoc
@@ -27,7 +27,7 @@ To build `rpicam-apps` without first rebuilding `libcamera` and `libepoxy`, inst
 
 [source,console]
 ----
-$ sudo apt install -y libcamera-dev libepoxy-dev libjpeg-dev libtiff5-dev libpng-dev
+$ sudo apt install -y libcamera-dev libepoxy-dev libjpeg-dev libtiff5-dev libpng-dev libopencv-dev
 ----
 
 TIP: If you do not need support for the GLES/EGL preview window, omit `libepoxy-dev`.

From 480b0eebd26f1c3100448b88fc2fe85966e42b82 Mon Sep 17 00:00:00 2001
From: Andrew Scheller <andrew.scheller@raspberrypi.com>
Date: Thu, 24 Jul 2025 16:37:18 +0100
Subject: [PATCH 07/11] Tweak revision-codes Note (#4120)

Fixes #4119
---
 .../asciidoc/computers/raspberry-pi/revision-codes.adoc         | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc b/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc
index 79e929dbe4..c960c67071 100644
--- a/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc
+++ b/documentation/asciidoc/computers/raspberry-pi/revision-codes.adoc
@@ -15,7 +15,7 @@ Revision    : a02082
 Serial      : 00000000765fc593
 ----
 
-NOTE: All Raspberry Pi computers report `BCM2835`, even those with BCM2836, BCM2837, BCM2711, and BCM2712 processors. You should not use this string to detect the processor. Decode the revision code using the information below, or `cat /sys/firmware/devicetree/base/model`.
+NOTE: All Raspberry Pi computers report `BCM2835`, even those with BCM2836, BCM2837, BCM2711, and BCM2712 processors. You should not use this string to detect the processor. Decode the revision code using the information below, or `cat /sys/firmware/devicetree/base/model`. Depending on which kernel you're running, your `cpuinfo` might also have a "Model" line, and might not have a "Hardware" line.
 
 === Old-style revision codes
 

From c534360c03ff22877fe31d34e2e896798c999ea4 Mon Sep 17 00:00:00 2001
From: Andrew Scheller <andrew.scheller@raspberrypi.com>
Date: Thu, 24 Jul 2025 16:37:55 +0100
Subject: [PATCH 08/11] Update list of groups to reflect default user's groups
 in Bookworm (#4139)

---
 documentation/asciidoc/computers/configuration/users.adoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/documentation/asciidoc/computers/configuration/users.adoc b/documentation/asciidoc/computers/configuration/users.adoc
index d9f45c13dc..4c170a3317 100644
--- a/documentation/asciidoc/computers/configuration/users.adoc
+++ b/documentation/asciidoc/computers/configuration/users.adoc
@@ -36,7 +36,7 @@ To grant the new user necessary permissions, like `sudo`, run the following comm
 
 [source,console]
 ----
-$ sudo usermod -a -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi <username>
+$ sudo usermod -a -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,render,netdev,lpadmin,gpio,i2c,spi <username>
 ----
 
 To check that the permissions were successfully granted, run the following command, replacing the `<username>` placeholder with the username for the new user:

From 403e5bcf383dc7e18cf392b019b83ddde8f507c9 Mon Sep 17 00:00:00 2001
From: Andrew Scheller <andrew.scheller@raspberrypi.com>
Date: Thu, 24 Jul 2025 16:41:14 +0100
Subject: [PATCH 09/11] Add note about adjusting Pi5 fan speeds (#4121)

---
 .../asciidoc/computers/raspberry-pi/frequency-management.adoc   | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/documentation/asciidoc/computers/raspberry-pi/frequency-management.adoc b/documentation/asciidoc/computers/raspberry-pi/frequency-management.adoc
index cb57b7099e..d8baf8c40a 100644
--- a/documentation/asciidoc/computers/raspberry-pi/frequency-management.adoc
+++ b/documentation/asciidoc/computers/raspberry-pi/frequency-management.adoc
@@ -84,6 +84,8 @@ As the temperature of the Raspberry Pi 5 increases, the fan reacts in the follow
 
 Temperature decreases use the same mapping with a 5°C **hysteresis**; fan speed decreases when the temperature drops to 5°C below each of the above thresholds.
 
+NOTE: The temperature, hysteresis and speed figures given above can be adjusted by using the various `fan_tempN`, `fan_tempN_hyst` and `fan_tempN_speed` dtoverlay settings (where `N` is 0, 1, 2 or 3). See https://github.com/raspberrypi/linux/blob/rpi-6.12.y/arch/arm/boot/dts/overlays/README[the overlays README] for full details. For example, adding `dtparam=fan_temp0=55000` to `/boot/firmware/config.txt` will cause the fan to remain off until the Raspberry Pi 5's temperature reaches 55°C.
+
 At boot the fan is turned on, and the tachometer input is checked to see if the fan is spinning. If it is, then the `cooling_fan` device tree overlay is enabled. This overlay is in `bcm2712-rpi-5-b.dtb` by default, but with `status=disabled`.
 
 ==== Raspberry Pi 5 fan connector pinout

From e25fe023bca392ff4da048275f68e40de7235c12 Mon Sep 17 00:00:00 2001
From: James Hughes <JamesH65@users.noreply.github.com>
Date: Tue, 29 Jul 2025 11:58:13 +0100
Subject: [PATCH 10/11] Update the audio board pinout diagram (#4146)

---
 .../accessories/audio/hardware-info.adoc       |   2 +-
 .../images/all_audio_boards_gpio_pinouts.png   | Bin 0 -> 218781 bytes
 .../accessories/audio/images/pin_table_new.jpg | Bin 676698 -> 0 bytes
 3 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 documentation/asciidoc/accessories/audio/images/all_audio_boards_gpio_pinouts.png
 delete mode 100644 documentation/asciidoc/accessories/audio/images/pin_table_new.jpg

diff --git a/documentation/asciidoc/accessories/audio/hardware-info.adoc b/documentation/asciidoc/accessories/audio/hardware-info.adoc
index c7d445d64b..240c9fd0f9 100644
--- a/documentation/asciidoc/accessories/audio/hardware-info.adoc
+++ b/documentation/asciidoc/accessories/audio/hardware-info.adoc
@@ -39,7 +39,7 @@ If appropriate then the following are also used:
 
 === DAC PRO, DAC{plus}, DigiAMP{plus}, Codec Zero
 
-image::images/pin_table_new.jpg[width="80%"]
+image::images/all_audio_boards_gpio_pinouts.png[width="80%"]
 
 The DAC PRO, DAC{plus} and DigiAMP{plus} re-expose the Raspberry Pi signals, allowing additional sensors and peripherals
 to be added easily. Please note that some signals are for exclusive use (I2S and EEPROM) by some
diff --git a/documentation/asciidoc/accessories/audio/images/all_audio_boards_gpio_pinouts.png b/documentation/asciidoc/accessories/audio/images/all_audio_boards_gpio_pinouts.png
new file mode 100644
index 0000000000000000000000000000000000000000..48783e9cd476e9d33532619ae5602fda065fa7ac
GIT binary patch
diff --git a/documentation/asciidoc/accessories/audio/images/pin_table_new.jpg b/documentation/asciidoc/accessories/audio/images/pin_table_new.jpg
deleted file mode 100644
index b9ca1a8bc53d52ae70f6e38249282950b251add6..0000000000000000000000000000000000000000
GIT binary patch

From 904b755ee067aa2018a9569716596d1920ad08c1 Mon Sep 17 00:00:00 2001
From: Andrew Scheller <lurch@durge.org>
Date: Tue, 29 Jul 2025 13:51:05 +0100
Subject: [PATCH 11/11] Update submodules for pico-sdk 2.2.0

---
 lib/pico-examples | 2 +-
 lib/pico-sdk      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/pico-examples b/lib/pico-examples
index 7fe60d6b40..4c3a3dc019 160000
--- a/lib/pico-examples
+++ b/lib/pico-examples
@@ -1 +1 @@
-Subproject commit 7fe60d6b4027771e45d97f207532c41b1d8c5418
+Subproject commit 4c3a3dc0196dd426fddd709616d0da984e027bab
diff --git a/lib/pico-sdk b/lib/pico-sdk
index ee68c78d0a..a1438dff1d 160000
--- a/lib/pico-sdk
+++ b/lib/pico-sdk
@@ -1 +1 @@
-Subproject commit ee68c78d0afae2b69c03ae1a72bf5cc267a2d94c
+Subproject commit a1438dff1d38bd9c65dbd693f0e5db4b9ae91779
