diff --git a/web/config.toml b/web/config.toml
index bbb89c09a56ce33b5c910bf3c5147c7912197d83..c927a13473fbb7fce748333fd7ae45fb5bb749b6 100644
--- a/web/config.toml
+++ b/web/config.toml
@@ -1,8 +1,10 @@
 baseURL = "http://alexandre.meyer.pages.univ-lyon1.fr/m1if37-animation/"
 title = "M1if37"
-theme = "etch"
+#theme = "etch"
 #theme = "ucax"
+#theme = "paige"
 #theme = "hugo-flex"
+theme = "congo"
 languageCode = "fr-FR"
 enableInlineShortcodes = true
 pygmentsCodeFences = true
@@ -10,18 +12,31 @@ pygmentsUseClasses = true
 
 publishDir = "public"
 
+
+# [author]
+#   name = "Alexandre Meyer"
+#   image = "img/author.jpg"
+#   headline = "M1if37"
+#   bio = ""
+
+
 [params]
   description = "Animation en synthèse d'images"
   copyright = ""
   dark = "auto"
   highlight = true
-  mainSections = "personnage;controle"
-  # color = "gray"           # Any color in CSS syntax
-  # width = "42rem"          # Any length in CSS syntax
+  mainSections = "personnage;controle;posts"
+  #color = "gray"           # Any color in CSS syntax
+  #width = "52rem"          # Any length in CSS syntax
+  colorScheme = "fire"
   # footer= ""
   # rss = "" 
+  article.showDate = false
 
 
+# [[footer]]
+#   name = "Privacy"
+#   url = "https://external-link"
 #   - name: Aboutaaa
 #     url: about/
 #     weight: 1
@@ -38,7 +53,7 @@ publishDir = "public"
         identifier = "Personnage"
         name = "Personnage"
         title = "Personnage"
-        url = "/personnage/cours/"
+        url = "/personnage/"
         weight = 2
 
     [[menu.main]]
@@ -49,8 +64,8 @@ publishDir = "public"
         weight = 3
 
   
-# [permalinks]
-#   posts = "/:title/"
+[permalinks]
+  posts = "/:title/"
 
 [markup.goldmark.renderer]
   # Allow HTML in Markdown
diff --git a/web/content/_index.md b/web/content/index.md
similarity index 100%
rename from web/content/_index.md
rename to web/content/index.md
diff --git a/web/content/pages/aboutee.md b/web/content/pages/aboutee.md
new file mode 100644
index 0000000000000000000000000000000000000000..2d00b2116a55d53a027e38fcc291f634eb28b6cc
--- /dev/null
+++ b/web/content/pages/aboutee.md
@@ -0,0 +1,5 @@
+---
+draft: false
+---
+
+pages/aboutee
\ No newline at end of file
diff --git a/web/content/pages/personnage/_index.md b/web/content/pages/personnage/_index.md
new file mode 100644
index 0000000000000000000000000000000000000000..7a5063dc8203384f824e88147e88beb8321de3d8
--- /dev/null
+++ b/web/content/pages/personnage/_index.md
@@ -0,0 +1,47 @@
+## Partie Animation de personnage (A. Meyer) - 4h30 CM, 6h30 TP
+![](blender_charanim9.jpg)
+
+
+  * Animation basée squelette
+  * Déformation de maillage (skinning)
+  * Capture de mouvements
+  * [La page de cette partie](https://perso.liris.cnrs.fr/alexandre.meyer/public_html/www/doku.php?id=charanim_m1#master_1_informatique_-_ue_m1if37_animation_en_synthese_d_image)
+
+
+## Les vidéos des 3 CM (2020)
+  * [[https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_1_SkeletonBasedAnimation.pdf|(PDF) Systèmes articulés : cinématique directe]];
+  * [[https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_2_MotionControlAndEditing.pdf|(PDF) Edition d'animations, Graphe d'animations]];
+  * [[https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_3_MotionCapture.pdf|(PDF) Capture de mouvements]];
+
+\
+
+  * [Sujet de TP pour la partie Animation de personnage virtuel](tp)
+
+\
+\
+
+## Le TPs
+
+#### Le code initial
+
+     * [[master_charanim_code|Le code initial]]
+
+#### Rendu de TP
+Les archives sont à rendre sur TOMUSS
+
+  * TP Animation de personnage virtuel
+    * vous devez rendre une archive avec un readme.txt ou readme.md expliquant ce que vous avez fait et comment lancer le programme
+    * une VIDEO de DEMO ou une démo en LIVE
+  * Barème "Personnage" 
+    * (5 points) TP 1ère partie : affichage d'une animation BVH
+    * (3 points) Contrôleur d'animation :  la base (pilotage au clavier d'un déplacement)
+    * Machine à état (4 points maximum)
+      * basique : pour une machine à état de base avec 4 animations : iddle, marcher, courir, sauter ou kick
+      * avancé : une machine à état plus complète avec de nombreuses animations (une dizaine) : voir celles du répertoire motionGraph_second_life, etc.
+    * Motion Graphe (6 points max)
+      * basique : transition vers un autre animation en cherchant à la volée une transition compatible
+      * avancé : un motion graph construit automatiquement en pré-calcul (voir la fin de l'énoncé qui pointe vers un complément de sujet).
+    * (3 points) Interpolation entre 2 frames, à utilise pour les transitions ou pour une bonne gestion du temps
+    * (1 points) Collision entre personnage et sphères (voir le code PhysicalWorld)
+    * (1 points) bonus de qualité/cohérence de la scène
+    * Le total fait plus que 20 car les points FSM/graphe d'animation sont à comprendre avec un OU : la machine à état rapporte moins de points, car bien moins difficile.
diff --git a/web/content/pages/personnage/tp.md b/web/content/pages/personnage/tp.md
new file mode 100644
index 0000000000000000000000000000000000000000..37863bc396efd169387eda4ff6d59fabb53b6dfa
--- /dev/null
+++ b/web/content/pages/personnage/tp.md
@@ -0,0 +1 @@
+content/personnage/TP ...
\ No newline at end of file
diff --git a/web/content/pages/tp.md b/web/content/pages/tp.md
new file mode 100644
index 0000000000000000000000000000000000000000..e8ad7ae8a9558d30cd54dc50f9fc9fc8d44be7cf
--- /dev/null
+++ b/web/content/pages/tp.md
@@ -0,0 +1 @@
+content/pages/TP
diff --git a/web/content/personnage/_index.md b/web/content/personnage/_index.md
new file mode 100644
index 0000000000000000000000000000000000000000..ee1c20ffc2e08a8b7890288b0ba862a8fd69250f
--- /dev/null
+++ b/web/content/personnage/_index.md
@@ -0,0 +1,48 @@
+
+---
+title: ""
+description: "Partie Animation de personnage"
+---
+
+
+
+# Partie Animation de personnage  (A. Meyer) - 4h30 CM, 6h30 TP
+![](blender_charanim9.jpg)
+
+
+  * [L'ancienne page de cette partie](https://perso.liris.cnrs.fr/alexandre.meyer/public_html/www/doku.php?id=charanim_m1#master_1_informatique_-_ue_m1if37_animation_en_synthese_d_image)
+
+
+## Cours
+  * [Systèmes articulés : cinématique directe](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_1_SkeletonBasedAnimation.pdf)
+  * [Edition d'animations, Graphe d'animations](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_2_MotionControlAndEditing.pdf)
+  * [Capture de mouvements](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_3_MotionCapture.pdf)
+
+
+## Les vidéos des 3 CM (2020)
+[Les vidéos](video)
+
+
+
+## Le TP
+  * [TP animation de personnage virtuel](tp)
+  * [[master_charanim_code|Le code initial]]
+
+#### Rendu
+Les archives sont à rendre sur TOMUSS
+  * TP Animation de personnage virtuel
+    * vous devez rendre une archive avec un readme.txt ou readme.md expliquant ce que vous avez fait et comment lancer le programme
+    * une VIDEO de DEMO ou une démo en LIVE
+  * Barème "Personnage" 
+    * (5 points) TP 1ère partie : affichage d'une animation BVH
+    * (3 points) Contrôleur d'animation :  la base (pilotage au clavier d'un déplacement)
+    * Machine à état (4 points maximum)
+      * basique : pour une machine à état de base avec 4 animations : iddle, marcher, courir, sauter ou kick
+      * avancé : une machine à état plus complète avec de nombreuses animations (une dizaine) : voir celles du répertoire motionGraph_second_life, etc.
+    * Motion Graphe (6 points max)
+      * basique : transition vers un autre animation en cherchant à la volée une transition compatible
+      * avancé : un motion graph construit automatiquement en pré-calcul (voir la fin de l'énoncé qui pointe vers un complément de sujet).
+    * (3 points) Interpolation entre 2 frames, à utilise pour les transitions ou pour une bonne gestion du temps
+    * (1 points) Collision entre personnage et sphères (voir le code PhysicalWorld)
+    * (1 points) bonus de qualité/cohérence de la scène
+    * Le total fait plus que 20 car les points FSM/graphe d'animation sont à comprendre avec un OU : la machine à état rapporte moins de points, car bien moins difficile.
diff --git a/web/content/personnage/tp.md b/web/content/personnage/tp.md
new file mode 100644
index 0000000000000000000000000000000000000000..8da0040e58e3c2d3d2f35956294291b721bb4741
--- /dev/null
+++ b/web/content/personnage/tp.md
@@ -0,0 +1,309 @@
+  
+
+# TP d'Animation de personnage (M1)
+
+  
+  
+
+## TP partie 1 : affichage
+
+![](/charanim_interpolation.png)  
+Vous allez créer un module Skeleton.h/.cpp (ce code n'est qu'indicatif, vous êtes libre de vos structures de données). Cette classe va stocker un tableau de toutes les articulations (SkeletonJoint) du squelette et pour chaque articulation stocke l'identifiant de l'articulation parent et la matrice de passage de l'articulation vers le monde.
+
+Le fichier est déjà présent dans le code départ avec des TODO à compléter :
+
+``` 
+
+class Skeleton
+{
+public:
+
+   struct SkeletonJoint
+   {
+      int m_parentId;    // Le numéro du père dans le tableau de CAJoint de CASkeleton
+      Transform m_l2w;  // La matrice passant du repère de l'articulation vers le monde
+   };
+
+   Skeleton() {}
+
+   //! Créer un squelette ayant la même structure que définit dans le BVH c'est à dire
+   //! creer le tableau de SkeletonJoint à la bonne taille, avec les parentId initialsé pour chaque case
+   void init(const BVH& bvh);
+
+   //! Renvoie la position de l'articulation i en multipliant le m_l2w par le Point(0,0,0)
+   Point getJointPosition(int i) const;
+
+   //! Renvoie l'identifiant de l'articulation père de l'articulation numéro i
+   int getParentId(const int i) const;
+   
+   //! Renvoie le nombre d'articulation
+   int numberOfJoint() const;
+
+   //! Positionne ce squelette dans la position n du BVH. 
+   //! Assez proche de la fonction récursive (question 1), mais range la matrice (Transform)
+   //! dans la case du tableau. Pour obtenir la matrice allant de l'articulation local vers le monde,
+   //! il faut multiplier la matrice allant de l'articulation vers son père à la matrice du père allant de
+   //! l'articulation du père vers le monde.
+   void setPose(const BVH& bvh, int frameNumber);
+
+
+protected:
+   //! L'ensemble des articulations.
+   //! Remarque : la notion de hiérarchie (arbre) n'est plus nécessaire ici,
+   //! pour tracer les os on utilise l'information "parentID" de la class CAJoint
+   std::vector<SkeletonJoint> m_joint;
+};
+
+```
+
+  
+Dans le Viewer vous devez :
+ * Déclarer un Skeleton en variable de la classe
+ * écrire une fonction qui fait l'affichage
+
+``` 
+    void CharAnimViewer::skeletonDraw(const Skeleton& ske);
+```
+
+ * initaliser l'instance de Skeleton dans la fonction init
+ * Appeler setPose dans la fonction update
+
+  
+Remarques :
+ * On sépare bien l'affichage de la gestion du squelette pour pouvoir réutiliser le code Skeleton avec une autre librairie d'affichage.
+ * On ne s'occupe pas du temps pour l'instant mais uniquement du numéro de la posture.\\
+ * Vous pouvez trouvez des BVH dans le répertoire data du code de départ. Notamment le fichier robot.bvh pour debuguer.
+
+  
+  
+## TP partie 2 : Contrôleur d'animation
+
+##### Déplacer une sphère au clavier
+
+Ecrivez une class CharacterControler qui à partir des touches claviers contrôlera le déplacement d'un personnage. Dans une 1er temps faites juste déplacer une boule : accélérer, freiner, tourner à droite, tourner à gauche, sauter. Ce contrôleur comportera une position et une vitesse. La vitesse sera modifiée par les flèches (ou un pad) et la position sera mise à jour dans la fonction update du Viewer en utilisant le paramètre "delta" recu par la fonction update.
+
+Une classe de Controller peut ressembler à ceci.
+
+``` 
+    class CharacterController
+    {
+    public:
+        CharacterController() : ... {}
+
+        void update(const float dt);
+
+        void turnXZ(const float& rot_angle_v);
+        void accelerate(const float& speed_inc);
+        void setVelocityMax(const float vmax);
+
+        const Point position() const;
+        const Vector direction() const;
+        float velocity() const;
+                const Transform& controller2world() const { return m_ch2w; }
+
+    protected:
+                Transform m_ch2w;   // matrice du character vers le monde
+                                    // le personnage se déplace vers X
+                                    // il tourne autour de Y
+                                    // Z est sa direction droite
+                                    
+        float m_v;          // le vecteur vitesse est m_v * m_ch2w * Vector(1,0,0)
+        float m_vMax;       // ne peut pas accélérer plus que m_vMax
+    };
+```
+
+  
+
+##### Déplacer un personnage au clavier
+
+Dans un 2e temps, votre contrôleur comportera également une série
+d'animation bvh : attendre, marcher, courir, et donner un coup de pied.
+En fonction de l'action que veut faire le joueur appuyant sur des
+touches vous changerez d'animation. Vous coderez la machine à états
+finis (FiniteStateMachine) de l'image ci-dessous. Les cercles sont les
+états (l'animation en train d'être jouée), les rectangles rouges sont
+les éventements et les carrés bleus sont les actions à effectuer
+(fonction de la classe). Ce changement se fera brutalement. Ne vous
+occupez pas non plus des pieds qui glissent sur le sol. Un meilleur
+contrôle peut-être fait la construction d'un graphe d'animation.
+
+![](/fsm.png)
+
+  
+  
+
+## TP partie 3 : Transition et plus
+
+a) Pour améliorer le réalisme, il serait bon de faire les transitions
+entre deux animations en choisissant deux poses des animations qui sont
+proches. Pour cela il faut calculer la distance entre deux poses
+d'animations (Voir les infos dans le sujet Graphe d'animation).  
+  
+
+b) Pour aller encore plus loin, on peut construire un automate de
+manière complètement automatique, on appelle alors ceci un graphe
+d'animation. [Voir le sujets de TP
+suivants.](https://perso.liris.cnrs.fr/alexandre.meyer/public_html/www/doku.php?id=master_charanim_tp_m2_cpp&s[]=graphe#tp_3e_partiegraphe_d_animation)  
+  
+
+a.bis) Indépendamment de la machine à état ou du graphe, si vous voulez
+gérer le temps de manière plus juste, il faudrait récupérer le temps
+réellement écoulé depuis l'affichage précédent. Ceci vous fera ne vous
+fera pas tomber précisément sur une frame stocké dans le clip (BVH). Il
+faudra donc interpoler entre les 2 frames. Le résultat sera de l'ordre
+du détail lors de l'affichage mais si vous voulez que votre moteur
+d'animation tourne sur toutes les machines indépendamment du CPU, il
+faut le faire. Cette interpolation peut également servir pour passer
+d'un clip à un autre.
+
+  
+  
+  
+
+## TP partie 3.PLUS : graphe d'animation
+
+*  -* [Motion Graph de l'article original](http://www.cs.wisc.edu/graphics/Gallery/kovar.vol/MoGraphs/);
+* Des BVH avec squelette compatible pour le graphe sont donné dans le git, répertoire Second\_Life.  
+
+Nous avons remarqué dans la partie 1 que la transition d'animation ne fonctionne bien que lorsque les deux poses du squelette sont assez proches (il faut bien sûr également que les deux squelettes aient la même topologie). L'idée d'un graphe d'animation est de construire un graphe où chaque noeud correspond à une pose d'une animation et où chaque arrête définit qu'une transition est possible entre les deux poses.
+
+  
+
+#### Comparaison de deux poses d'animation
+
+Pour construire un graphe d'animation à partir d'une ou plusieurs animations, on doit être capable de comparer deux poses d'animation. Une distance de 0 indique que les deux poses sont identiques. Une distance grande indique que les 2 poses sont très différentes.
+
+A partir de la classe Skeleton, écrivez la fonction de calcul de distance entre deux poses de squelette. Cette fonction est déjà présente dans la classe Skeleton plus haut mais en commentaire. Cette fonction calcule itérativement sur toutes les articulations la somme des distances euclidienne entre chaque articulation de deux squelettes aillant la même topologie mais dans des poses différentes.
+
+```
+    friend float Skeleton::Distance(const Skeleton& a, const Skeleton& b);
+```
+
+  
+Remarque : il est important de ne pas tenir compte de la translation et de la rotation de l'articulation racine. Une même pose a deux endroits du monde doit donner une distance de 0. Dans un 1er temps, votre personnage aura son noeud root centré en (0,0,0), puis dans la dernière partie de cette question, vous traiterez le centre de gravité.
+
+  
+  
+
+#### Construction du graphe
+
+Ecrivez un module MotionGraph qui contiendra un ensemble de BVH et le graphe d'animation définissant des transitions dans cette ensemble d'animation.
+ * Un noeud du graphe=(Identifiant d'une animation + un numéro de pose); 
+ * un arc du graphe entre deux poses indique la transition possible entre ces deux poses. Deux poses sont compatibles à la transition quand la distance entre les deux squelettes sont inférieurs à un certain seuil fixé empiriquement.
+
+  
+Vous pouvez créer un module CACore/CAMotionGraph.h/.cpp
+
+```
+    class MotionGraph
+    {
+       ...
+    protected:
+       //! L'ensemble des BVH du graphe d'animation
+       std::vector<BVH> m_BVH;
+    
+       //! Un noeud du graphe d'animation est repéré par un entier=un identifiant
+       typedef int GrapheNodeID;
+    
+       //! Une animation BVH est repérée par un identifiant=un entier 
+       typedef int BVH_ID;
+       
+       //! Un noeud du graphe contient l'identifiant de l'animation, le numéro 
+       //! de la frame et les identifiants des noeuds successeurs 
+       //! Remarque : du code plus "joli" aurait créer une classe CAGrapheNode
+       struct GrapheNode
+       {
+         BVH_ID id_bvh;
+         int frame;
+         std::vector<GrapheNodeID> ids_next;     //! Liste des nœuds successeurs 
+       };
+    
+    
+       //! Tous les noeuds du graphe d'animation
+       std::vector<GrapheNode> m_GrapheNode;
+    
+    };
+```
+  
+  
+
+#### Navigation dans le graphe
+
+Une fois ce graphe construit, on peut définir différente manière de naviguer dedans :
+   * Un parcours aléatoire dans le graphe (juste pour vérifier que le graphe est ok);
+   * L'utilisateur donne des directions au clavier => le parcours dans le graphe est conditionné par ces contraintes.
+
+
+#### Gestion correcte du centre de gravité
+
+Pour chaque arc du graphe, vous devez stocker la transformation (soit une matrice 4x4, soit un quaternion et une translation) du noeud root (souvent le centre de gravité) entre la pose i et la pose i+1. Cette transformation sera appliqué au noeud root de votre personnage quand il empruntera l'arc.
+
+  
+  
+  
+
+## NON DEMANDE CETTE ANNEE : Animation physique (voir la partie de F. Zara à la place)
+
+#### Particules
+
+![](/charanim_ball.png)
+
+Dans la fonction init de la class CharAnimViewer indiquez un nombre de particules non nul :
+
+``` 
+    m_world.setParticlesCount( 10 );
+```
+
+Dans la fonction render, il faut afficher les particules en dé-commentant cette ligne :
+
+``` 
+    m_world.draw();
+```
+
+Vous verrez alors les particules s'afficher, mais elles ne seront pas animées. Pour calculer la physique sur les particules, il y a deux
+classes **PhysicalWorld** et **Particle**. Regardez le fichier Particles.h. Il faudra compléter les fonctions update, collision et groundCollision :
+
+``` 
+    void update(const float dt = 0.1f)
+    void groundCollision()
+    void collision(const Point& p, const float radius)
+```
+
+Le code de update doit mettre à jour la vitesse avec l'équation F=m.a où a = dv/dt  
+Et mettre à jour la position avec l'équation habituelle p = p + v.t  
+
+[Regardez les explications dans la vidéo de cours ou ici](https://perso.liris.cnrs.fr/alexandre.meyer/teaching/master_charanim/aPDF_COURS_M1/M1_TP_PhysicsAnimation_ParticulesMassesRessorts.pdf).
+
+  
+
+#### Interaction personnage/particules
+
+Pour ajouter l'interaction entre votre personnage et des boules/sphères se trouvant dans l'environnement, il faut appeler PhysicalWorld::collision depuis CharAnimViewer::update en parcourant toutes les articulations du personnage. Dans un 1er temps, vous pouvez juste faire disparaitre les particules touchées en faisant passer le rayon de la particule à -1 et faire en sorte que les particules de rayon négatif ne soient pas affichées. Puis ajoutez dans Particle::collision du code pour déplacer les particules en collisions (résoudre les collisions) et changer leur vecteur vitesse.
+
+#### Tissus
+
+Un tissu est composé d'un maillage de Masses/Ressorts. Ajoutez une classe Spring qui va comporter :
+ * la raideur du ressort
+ * la longueur au repos du ressort
+ * idA et idB : l'identifiant des 2 particules aux extrémités du ressort. Ces 2 identifiants sont l'indices de deux particules dans le tableau de particules stocké dans la classe PhysicalWorld.
+
+Munissez cette classe d'une fonction *addForce* qui calcule les forces qu'applique le ressort sur les 2 particules.
+```
+    void Spring::addForce(vector<Particles>& part, const float dt)
+```
+
+
+Dans la classe PhysicalWorld, ajoutez un tableau de ressort :
+
+``` 
+   std::vector<Spring> m_springs;
+```
+
+Le constructeur de PhysicalWorld créera un tissu avec des masses ressorts sous la forme de l'image ci-dessous. La génération se fera procéduralement.
+
+![](/mass-spring.jpg)
+
+
+#### Interaction avec le personnage
+
+Normalement, le personnage va pouvoir interagir avec le tissu en passant dessous ...
diff --git a/web/content/personnage/video.md b/web/content/personnage/video.md
new file mode 100644
index 0000000000000000000000000000000000000000..1f445f9aebcfb47cd6ac969f0c88dc2f309feeb3
--- /dev/null
+++ b/web/content/personnage/video.md
@@ -0,0 +1,35 @@
+
+# CM Animation de personnages virtuels (Master 1ère année)
+
+  * CM = Cours Magistral
+  * Vous pouvez très facilement faire une pause au moment des
+    exercices, revenir en arrière et/ou accélérer la vitesse de la vidéo
+    depuis les options de YouTube (x 1.50 ou plus vite)
+
+
+## CM1 : Animation basée squelette
+Il y a 3 vidéos pour le CM1 :
+     * L'introduction
+     * Un exercice d'affichage de squelette animé très simple
+     * Afficage récursif d'un squelette à partir de la structure de données, présentation du format BVH, prise en main du code du TP
+
+#### CM1.a Introduction
+
+<iframe width="560" height="315" src="//www.youtube.com/embed/TNSesEPrAn0 " frameborder="0" allowfullscreen></iframe>
+
+#### CM1.b Exercice
+
+<iframe width="560" height="315" src="//www.youtube.com/embed/1Js-9r28T-c" frameborder="0" allowfullscreen></iframe>
+
+#### CM1.c Arbre/Squelette, Affichage récursif et BVH
+
+<iframe width="560" height="315" src="//www.youtube.com/embed/1Y8VE9WrSfw" frameborder="0" allowfullscreen></iframe>
+
+
+## CM2 : Edition d\'animations et Contrôle d\'un Personnage Virtuel
+
+<iframe width="560" height="315" src="//www.youtube.com/embed/DfsH9bIIisA" frameborder="0" allowfullscreen></iframe>
+
+## CM3 : Animation et Capture de Mouvements
+
+<iframe width="560" height="315" src="//www.youtube.com/embed/7t98WLxikOo" frameborder="0" allowfullscreen></iframe>
diff --git a/web/themes/congo/.github/FUNDING.yml b/web/themes/congo/.github/FUNDING.yml
new file mode 100644
index 0000000000000000000000000000000000000000..819db0c0108982d1b33481af10daa6c5b06542ae
--- /dev/null
+++ b/web/themes/congo/.github/FUNDING.yml
@@ -0,0 +1 @@
+github: jpanther
diff --git a/web/themes/congo/.github/ISSUE_TEMPLATE/bug-report.yml b/web/themes/congo/.github/ISSUE_TEMPLATE/bug-report.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2c256a81e70541b5e0ca15c78e536ee1c8762bbc
--- /dev/null
+++ b/web/themes/congo/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -0,0 +1,47 @@
+name: 🐛 Bug Report
+description: Report a new problem encountered using the theme
+labels: [bug]
+body:
+  - type: markdown
+    attributes:
+      value: |
+        Thanks for taking the time to fill out this bug report! Before proceeding, please check that a similar issue has not already been reported. [View open issues](https://github.com/jpanther/congo/issues)
+  - type: textarea
+    id: what-happened
+    attributes:
+      label: What happened?
+      description: Describe the issue and how to reproduce it, including what you expected to happen.
+    validations:
+      required: true
+  - type: input
+    id: theme-version
+    attributes:
+      label: Theme version
+      description: What version of the theme are you using?
+      placeholder: eg. v1.1.0
+    validations:
+      required: true
+  - type: input
+    id: hugo-version
+    attributes:
+      label: Hugo version
+      description: What version of Hugo are you using?
+      placeholder: eg. v0.86.1
+    validations:
+      required: true
+  - type: dropdown
+    id: browsers
+    attributes:
+      label: What browsers are you seeing the problem on?
+      multiple: true
+      options:
+        - Firefox
+        - Chrome
+        - Safari
+        - Microsoft Edge
+  - type: textarea
+    id: logs
+    attributes:
+      label: Relevant Hugo log output
+      description: Please copy and paste any relevant Hugo log output. This will be automatically formatted into code, so no need for backticks.
+      render: shell
diff --git a/web/themes/congo/.github/ISSUE_TEMPLATE/config.yml b/web/themes/congo/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2c5ac2b2a48808709fc0ef943422358a3784c11d
--- /dev/null
+++ b/web/themes/congo/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,8 @@
+blank_issues_enabled: true
+contact_links:
+  - name: 💡 Feature Request
+    url: https://github.com/jpanther/congo/discussions
+    about: Request and discuss enhancements using GitHub Discussions
+  - name: 🙋‍♀️ Question
+    url: https://github.com/jpanther/congo/discussions
+    about: Please ask and answer general questions using GitHub Discussions
diff --git a/web/themes/congo/.github/ISSUE_TEMPLATE/i18n-issue.yml b/web/themes/congo/.github/ISSUE_TEMPLATE/i18n-issue.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1a4dd5e463fda799e1daeb579ee71797320e9576
--- /dev/null
+++ b/web/themes/congo/.github/ISSUE_TEMPLATE/i18n-issue.yml
@@ -0,0 +1,45 @@
+name: 💬 i18n Issue
+description: Report an issue with i18n or translations
+labels: [i18n]
+body:
+  - type: markdown
+    attributes:
+      value: |
+        Thanks for taking the time to fill out this issue report!
+  - type: input
+    id: language
+    attributes:
+      label: Language
+      description: Which language are you using?
+      placeholder: eg. English
+    validations:
+      required: true
+  - type: textarea
+    id: issue
+    attributes:
+      label: What's the issue?
+      description: Describe the translation issue and how to reproduce it.
+    validations:
+      required: true
+  - type: input
+    id: theme-version
+    attributes:
+      label: Theme version
+      description: What version of the theme are you using?
+      placeholder: eg. v1.1.0
+    validations:
+      required: true
+  - type: input
+    id: hugo-version
+    attributes:
+      label: Hugo version
+      description: What version of Hugo are you using?
+      placeholder: eg. v0.86.1
+    validations:
+      required: true
+  - type: textarea
+    id: logs
+    attributes:
+      label: Relevant Hugo log output
+      description: Please copy and paste any relevant Hugo log output. This will be automatically formatted into code, so no need for backticks.
+      render: shell
diff --git a/web/themes/congo/.github/dependabot.yml b/web/themes/congo/.github/dependabot.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3d12432fda9214e0693ca800bc3f232ce1b132b2
--- /dev/null
+++ b/web/themes/congo/.github/dependabot.yml
@@ -0,0 +1,26 @@
+# GitHub Dependabot
+# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
+
+version: 2
+updates:
+  - package-ecosystem: "npm"
+    directory: "/"
+    schedule:
+      interval: "daily"
+      time: "09:00"
+      timezone: "Australia/Melbourne"
+    commit-message:
+      prefix: "📌"
+    labels:
+      - "dependencies"
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "weekly"
+      day: "sunday"
+      time: "09:00"
+      timezone: "Australia/Melbourne"
+    commit-message:
+      prefix: "👷"
+    labels:
+      - "dependencies"
diff --git a/web/themes/congo/.github/labeller.yml b/web/themes/congo/.github/labeller.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0d55a674c345b480483fde4027f61364e8e0daed
--- /dev/null
+++ b/web/themes/congo/.github/labeller.yml
@@ -0,0 +1,6 @@
+i18n:
+  - i18n/*
+
+documentation:
+  - "*.md"
+  - exampleSite/content/*
diff --git a/web/themes/congo/.github/pull_request_template.md b/web/themes/congo/.github/pull_request_template.md
new file mode 100644
index 0000000000000000000000000000000000000000..95dc0ada3b7a33d5e50b34875bc1a6e62e1960ed
--- /dev/null
+++ b/web/themes/congo/.github/pull_request_template.md
@@ -0,0 +1,2 @@
+<!-- IMPORTANT! Before submitting, ensure you have followed the Contributing guidelines. -->
+<!-- https://github.com/jpanther/congo/blob/dev/CONTRIBUTING.md -->
diff --git a/web/themes/congo/.github/workflows/build-theme.yml b/web/themes/congo/.github/workflows/build-theme.yml
new file mode 100644
index 0000000000000000000000000000000000000000..905709a578d3589842efdd0a06600aef2310b25c
--- /dev/null
+++ b/web/themes/congo/.github/workflows/build-theme.yml
@@ -0,0 +1,54 @@
+name: Build Theme
+
+on: [pull_request_target]
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    if: ${{ github.actor == 'dependabot[bot]' }}
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+        with:
+          ref: "${{ github.head_ref }}"
+      - name: Install dependencies and Build Theme
+        uses: actions/setup-node@v3
+      - run: npm install
+      - run: npm run assets
+      - name: Commit and push Chart.js changes
+        uses: stefanzweifel/git-auto-commit-action@v4
+        with:
+          branch: "${{ github.head_ref }}"
+          push_options: "--dry-run"
+          file_pattern: "assets/lib/chart/*"
+          commit_message: "📦 Update packaged ChartJS"
+      - name: Commit Fuse changes
+        uses: stefanzweifel/git-auto-commit-action@v4
+        with:
+          branch: "${{ github.head_ref }}"
+          push_options: "--dry-run"
+          file_pattern: "assets/lib/fuse/*"
+          commit_message: "📦 Update packaged FuseJS"
+      - name: Commit KaTeX changes
+        uses: stefanzweifel/git-auto-commit-action@v4
+        with:
+          branch: "${{ github.head_ref }}"
+          push_options: "--dry-run"
+          file_pattern: "assets/lib/katex/*"
+          commit_message: "📦 Update packaged KaTeX"
+      - name: Commit Mermaid changes
+        uses: stefanzweifel/git-auto-commit-action@v4
+        with:
+          branch: "${{ github.head_ref }}"
+          push_options: "--dry-run"
+          file_pattern: "assets/lib/mermaid/*"
+          commit_message: "📦 Update packaged Mermaid"
+      - run: npm run build
+      - name: Commit CSS changes
+        uses: stefanzweifel/git-auto-commit-action@v4
+        with:
+          branch: "${{ github.head_ref }}"
+          push_options: "--dry-run"
+          file_pattern: "assets/css/compiled/main.css"
+          commit_message: "💄 Rebuild CSS"
+      - run: git push
diff --git a/web/themes/congo/.github/workflows/gh-pages.yml b/web/themes/congo/.github/workflows/gh-pages.yml
new file mode 100644
index 0000000000000000000000000000000000000000..079e1824f80a9991dd973fe3c4ba7d2cd834e669
--- /dev/null
+++ b/web/themes/congo/.github/workflows/gh-pages.yml
@@ -0,0 +1,36 @@
+name: GitHub Pages
+
+on:
+  push:
+    branches:
+      - stable
+
+jobs:
+  build-deploy:
+    name: Build and Deploy
+    runs-on: ubuntu-latest
+    concurrency:
+      group: ${{ github.workflow }}-${{ github.ref }}
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+        with:
+          submodules: true
+          fetch-depth: 0
+
+      - name: Setup Hugo
+        uses: peaceiris/actions-hugo@v2
+        with:
+          hugo-version: "latest"
+
+      - name: Build
+        working-directory: ./exampleSite
+        run: hugo --minify --themesDir ../.. --buildDrafts --baseURL https://jpanther.github.io/congo/
+
+      - name: Deploy
+        uses: peaceiris/actions-gh-pages@v3
+        if: ${{ github.ref == 'refs/heads/stable' }}
+        with:
+          github_token: ${{ secrets.GITHUB_TOKEN }}
+          publish_branch: gh-pages
+          publish_dir: ./exampleSite/public
diff --git a/web/themes/congo/.github/workflows/label.yml b/web/themes/congo/.github/workflows/label.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8fb77bf9f0e7ff637b67f4b9f378ccf5789481ca
--- /dev/null
+++ b/web/themes/congo/.github/workflows/label.yml
@@ -0,0 +1,18 @@
+name: Labeller
+
+on: [pull_request_target]
+
+jobs:
+  label:
+    name: Label
+    runs-on: ubuntu-latest
+    permissions:
+      contents: read
+      pull-requests: write
+
+    steps:
+      - name: Label
+        uses: actions/labeler@v4
+        with:
+          repo-token: "${{ secrets.GITHUB_TOKEN }}"
+          configuration-path: .github/labeller.yml
diff --git a/web/themes/congo/.github/workflows/stale.yml b/web/themes/congo/.github/workflows/stale.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ed75a8c1c43112b0296fe6513ddbaaf6003c79e5
--- /dev/null
+++ b/web/themes/congo/.github/workflows/stale.yml
@@ -0,0 +1,32 @@
+name: "Close stale issues and PRs"
+on:
+  schedule:
+    - cron: "30 1 * * *"
+
+jobs:
+  stale:
+    runs-on: ubuntu-latest
+    permissions:
+      issues: write
+      pull-requests: write
+    steps:
+      - uses: actions/stale@v6
+        with:
+          days-before-stale: 30
+          days-before-close: 14
+          stale-issue-label: "stale"
+          exempt-issue-labels: "wip"
+          stale-pr-label: "stale"
+          exempt-pr-labels: "wip"
+          stale-issue-message: >
+            This issue has been automatically marked as stale because it has not had any recent activity.
+
+            If you are still experiencing this issue, please review the issue history and add a reply with any requested and/or additional information in order to keep the issue open.
+
+            This issue will automactically close in 14 days if no further activity occurs.
+          stale-pr-message: >
+            This pull request has been automatically marked as stale because it has not had any recent activity.
+
+            Please review the PR history and add a reply with any requested information. If no information has been requested, it may be that this contribution does not fit with the project objectives, or does not adhere to the [contributing guidelines](https://github.com/jpanther/congo/blob/dev/CONTRIBUTING.md). If this is in error, please add a reply with further details.
+
+            This PR will automactically close in 14 days if no further activity occurs.
diff --git a/web/themes/congo/.github/workflows/test-build.yml b/web/themes/congo/.github/workflows/test-build.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b287bb86eee7818de5f409e67651baabc7603564
--- /dev/null
+++ b/web/themes/congo/.github/workflows/test-build.yml
@@ -0,0 +1,25 @@
+name: Test Build
+
+on: [push]
+
+jobs:
+  build:
+    name: Build Example Site
+    runs-on: ubuntu-latest
+    concurrency:
+      group: ${{ github.workflow }}-${{ github.ref }}
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+        with:
+          submodules: true
+          fetch-depth: 0
+
+      - name: Setup Hugo
+        uses: peaceiris/actions-hugo@v2
+        with:
+          hugo-version: "latest"
+
+      - name: Build
+        working-directory: ./exampleSite
+        run: hugo --minify --themesDir ../.. --baseURL https://jpanther.github.io/congo/
diff --git a/web/themes/congo/.github/workflows/unlabel.yml b/web/themes/congo/.github/workflows/unlabel.yml
new file mode 100644
index 0000000000000000000000000000000000000000..94a64e57cf358314fa7110625d7fea5ef1b73f8a
--- /dev/null
+++ b/web/themes/congo/.github/workflows/unlabel.yml
@@ -0,0 +1,16 @@
+name: Unlabeller
+
+on:
+  issues:
+    types: [closed]
+  pull_request:
+    types: [closed]
+
+jobs:
+  unlabel:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Remove labels
+        uses: andymckay/labeler@master
+        with:
+          remove-labels: "wip"
diff --git a/web/themes/congo/.gitignore b/web/themes/congo/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..935cec0de4ce6db10e608da553e33f1bd1402cf2
--- /dev/null
+++ b/web/themes/congo/.gitignore
@@ -0,0 +1,23 @@
+### Node ###
+# Dependency directories
+node_modules/
+
+### Hugo ###
+# Generated files by hugo
+**/public/
+**/resources/_gen/
+
+# Executable may be added to repository
+hugo.exe
+hugo.darwin
+hugo.linux
+
+# Temporary lock file while building
+.hugo_build.lock
+
+### Congo ###
+# Lighthouse generated output
+.lighthouseci
+
+# Project specific files
+TODO
diff --git a/web/themes/congo/.prettierrc b/web/themes/congo/.prettierrc
new file mode 100644
index 0000000000000000000000000000000000000000..d884083f4fe442f8a33c716846ad530cfb073320
--- /dev/null
+++ b/web/themes/congo/.prettierrc
@@ -0,0 +1,16 @@
+{
+  "goTemplateBracketSpacing": true,
+  "htmlWhitespaceSensitivity": "css",
+  "printWidth": 100,
+  "singleQuote": false,
+  "tabWidth": 2,
+  "trailingComma": "es5",
+  "overrides": [
+    {
+      "files": ["*.html"],
+      "options": {
+        "parser": "go-template"
+      }
+    }
+  ]
+}
diff --git a/web/themes/congo/CHANGELOG.md b/web/themes/congo/CHANGELOG.md
new file mode 100644
index 0000000000000000000000000000000000000000..d828422e02d8a40099ba0d192017446e9b0e5e15
--- /dev/null
+++ b/web/themes/congo/CHANGELOG.md
@@ -0,0 +1,594 @@
+# Changelog
+
+All notable changes to Congo will be documented in this file. Things that need particular attention when upgrading from a prior version are marked ⚠️.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [Unreleased]
+
+### Added
+
+- Dutch translation ([#371](https://github.com/jpanther/congo/pull/371))
+
+## [2.4.1] - 2022-11-14
+
+### Changed
+
+- Upgrade to Tailwind v3.2.4 ([#368](https://github.com/jpanther/congo/pull/368))
+
+### Fixed
+
+- List page doesn't render nested list pages ([#365](https://github.com/jpanther/congo/issues/365))
+- Pagination is duplicated on term pages ([#366](https://github.com/jpanther/congo/issues/366))
+- Link to last pagination page sometimes displays twice
+- Recent articles would sometimes display less than five articles
+
+## [2.4.0] - 2022-11-10
+
+### Added
+
+- Support for article thumbnails, covers and featured images
+- Hybrid header layout that switches between the hamburger and basic menus at appropriate viewport sizes
+- Traditional Chinese (Taiwan) translation ([#262](https://github.com/jpanther/congo/pull/262))
+- New `list.paginationWidth` parameter to specify how many pagination links are generated before they are truncated
+- Site title display can be toggled on or off independently, allowing for it to be displayed alongside the site logo or removed entirely
+- Tailwind plugin for Prettier to standardise the order of CSS classes ([#268](https://github.com/jpanther/congo/pull/268))
+- External links in article content will now open in a new browser tab ([#312](https://github.com/jpanther/congo/pull/312))
+- Independent control over the display of taxonomy listings on article and list pages ([#326](https://github.com/jpanther/congo/pull/326))
+- Button shortcode now supports an optional `download` parameter to instruct browsers to directly download resources rather than navigate to a URL ([#349](https://github.com/jpanther/congo/pull/349))
+- Minor style and layout improvements
+
+### Changed
+
+- ⚠️ The `logo` parameter has moved under the `header` group and is now set using `header.logo`
+- ⚠️ Simplified Chinese (China) language code has changed from `zh` to `zh-cn`
+- Site logo is now in its own `logo.html` partial to allow it to be easily overridden ([#322](https://github.com/jpanther/congo/pull/322))
+- Upgrade to Chart.js v3.9.1 ([#261](https://github.com/jpanther/congo/pull/261))
+- Upgrade to Tailwind v3.2.2 ([#265](https://github.com/jpanther/congo/pull/265), [#333](https://github.com/jpanther/congo/pull/333), [#352](https://github.com/jpanther/congo/pull/352))
+- Upgrade to Mermaid v9.2.2 ([#272](https://github.com/jpanther/congo/pull/272), [#279](https://github.com/jpanther/congo/pull/279), [#296](https://github.com/jpanther/congo/pull/296), [#339](https://github.com/jpanther/congo/pull/339), [#360](https://github.com/jpanther/congo/pull/360))
+- Upgrade to KaTeX v0.16.3 ([#284](https://github.com/jpanther/congo/pull/284), [#334](https://github.com/jpanther/congo/pull/334))
+- Upgrade to Typography v0.5.8 ([#287](https://github.com/jpanther/congo/pull/287), [#292](https://github.com/jpanther/congo/pull/292), [#353](https://github.com/jpanther/congo/pull/353))
+
+### Fixed
+
+- Appearance switcher title doesn't update when switching appearance ([#235](https://github.com/jpanther/congo/issues/235))
+- Article updated date logic doesn't consider formatted date values ([#259](https://github.com/jpanther/congo/issues/259))
+- Error calling Paginate when attempting to generate a site with no taxonomies ([#289](https://github.com/jpanther/congo/issues/289))
+- Multilingual links are spaced incorrectly when using Hugo minify ([#298](https://github.com/jpanther/congo/issues/298))
+- Pagination links overflow the page area on large datasets ([#299](https://github.com/jpanther/congo/issues/299))
+- Embedded content disappears when displayed at certain viewport sizes ([#302](https://github.com/jpanther/congo/issues/302), [#335](https://github.com/jpanther/congo/issues/335))
+- Order of articles on list pages would not follow Hugo conventions when grouped by year ([#313](https://github.com/jpanther/congo/issues/313))
+- Button shortcode overlaps table of contents when at the top of the article content ([#337](https://github.com/jpanther/congo/issues/337))
+- Providing a `colorScheme` value containing uppercase characters breaks some deployments ([#347](https://github.com/jpanther/congo/issues/347))
+
+## [2.3.1] - 2022-07-30
+
+### Added
+
+- Japanese translation ([#234](https://github.com/jpanther/congo/pull/234))
+
+### Changed
+
+- Upgrade to Mermaid v9.1.3 ([#233](https://github.com/jpanther/congo/pull/233))
+- Upgrade to Tailwind v3.1.6 ([#245](https://github.com/jpanther/congo/pull/245))
+- Upgrade to Typography v0.5.4 ([#246](https://github.com/jpanther/congo/pull/246))
+- Upgrade to Chart.js v3.8.2 ([#247](https://github.com/jpanther/congo/pull/247))
+
+### Fixed
+
+- Main content misaligned when hamburger menu is opened at large viewport sizes
+
+## [2.3.0] - 2022-06-27
+
+### Added
+
+- Header layouts for selecting a preferred header style
+- Hamburger menu header layout with popover main menu ([#167](https://github.com/jpanther/congo/discussions/167), [#88](https://github.com/jpanther/congo/discussions/88), [#43](https://github.com/jpanther/congo/discussions/43), [#29](https://github.com/jpanther/congo/discussions/29))
+- Front matter support for showing or hiding comments on a per article basis ([#207](https://github.com/jpanther/congo/discussions/207))
+- `showCopyright` and `showThemeAttribution` parameters that allow more control over how the site footer is displayed ([#192](https://github.com/jpanther/congo/discussions/192))
+- `bars` SVG icon
+
+### Changed
+
+- ⚠️ Footer configuration parameters are now in their own `footer` sub-group
+- Search will now return results for all page types, including lists and taxonomies
+- Comments partials are now better considered within the page layout
+- Reduced whitespace at the top of the main content block ([#226](https://github.com/jpanther/congo/discussions/226))
+- Upgrade to Tailwind v3.1.4 ([#225](https://github.com/jpanther/congo/pull/225))
+
+### Fixed
+
+- Hugo v0.101.0 breaks the link to the homepage ([#230](https://github.com/jpanther/congo/issues/230))
+- Search link does not appear in header if main menu has no items to display
+- Search only returns results in the primary language when multiple languages are available ([#229](https://github.com/jpanther/congo/issues/229))
+- Arrow on external article links not aligned correctly when title wraps onto multiple lines
+- Arrow on external article links points the wrong direction for RTL languages
+- Scroll to top misaligned with the footer at small viewport heights
+- Link to homepage would be incorrect in some deployments if `baseURL` contained sub-directories in the path
+
+## [2.2.3] - 2022-06-22
+
+### Changed
+
+- Profile image alt text now uses author name when available
+
+### Fixed
+
+- Search not working when `baseURL` does not end with a forward slash ([#224](https://github.com/jpanther/congo/pull/224))
+- Author `headline` parameter not correctly displaying Markdown or Emoji content
+
+## [2.2.2] - 2022-06-16
+
+### Added
+
+- Breadcrumb display can now be can now be specificed in front matter for articles and list pages
+- Italian translation ([#209](https://github.com/jpanther/congo/pull/209))
+
+### Changed
+
+- Upgrade to Chart.js v3.8.0 ([#204](https://github.com/jpanther/congo/pull/204))
+- Upgrade to KaTeX v0.16.0 ([#208](https://github.com/jpanther/congo/pull/208))
+- Upgrade to Mermaid v9.1.2 ([#214](https://github.com/jpanther/congo/pull/214))
+
+## [2.2.1] - 2022-05-25
+
+### Changed
+
+- Upgrade to Mermaid v9.1.1 ([#194](https://github.com/jpanther/congo/pull/194))
+- Upgrade to Fuse.js v6.6.2 ([#195](https://github.com/jpanther/congo/pull/195))
+- Upgrade KaTeX to v0.15.6 ([#202](https://github.com/jpanther/congo/pull/202))
+
+### Fixed
+
+- Main content area doesn't grow to window height ([#201](https://github.com/jpanther/congo/issues/201))
+
+## [2.2.0] - 2022-05-09
+
+### Added
+
+- Finnish translation ([#185](https://github.com/jpanther/congo/pull/185))
+
+### Changed
+
+- Updated French translation ([#178](https://github.com/jpanther/congo/pull/178))
+- Analytics partial now checks `hugo.IsProduction` instead of `.Site.IsServer` before including scripts ([#179](https://github.com/jpanther/congo/issues/179))
+- Upgrade to Tailwind v3.0.24 ([#176](https://github.com/jpanther/congo/pull/176))
+- Upgrade to Mermaid v9.0.1 ([#183](https://github.com/jpanther/congo/pull/183))
+- Upgrade to Fuse.js v6.6.1 ([#189](https://github.com/jpanther/congo/pull/189))
+
+### Fixed
+
+- Code blocks are rendered incorrectly in RTL languages ([#164](https://github.com/jpanther/congo/issues/164))
+- Scroll to top link overlaps footer menu on mobile devices when there are several links ([#172](https://github.com/jpanther/congo/issues/172))
+
+### Removed
+
+- `hugo.Generator` from HTML `<head>` so that the [default Hugo generator behaviour](https://gohugo.io/getting-started/configuration/#disablehugogeneratorinject) works as expected ([#179](https://github.com/jpanther/congo/issues/179))
+
+## [2.1.3] - 2022-04-12
+
+### Added
+
+- Hungarian translation ([#170](https://github.com/jpanther/congo/pull/170))
+
+### Fixed
+
+- Scroll to top link overlaps footer menu on mobile devices ([#172](https://github.com/jpanther/congo/issues/172))
+
+## [2.1.2] - 2022-04-08
+
+### Added
+
+- Romanian translation ([#168](https://github.com/jpanther/congo/pull/168))
+
+### Changed
+
+- Upgrade to Mermaid v9.0.0
+
+## [2.1.1] - 2022-04-03
+
+### Added
+
+- Print styles to hide unnecessary elements when printing ([#155](https://github.com/jpanther/congo/pull/155))
+- Hebrew translation ([#163](https://github.com/jpanther/congo/pull/163))
+
+### Fixed
+
+- Footer menu displays incorrectly in RTL languages ([#165](https://github.com/jpanther/congo/pull/165))
+
+## [2.1.0] - 2022-03-14
+
+### Added
+
+- Simple page layout for creating full-width content ([#139](https://github.com/jpanther/congo/issues/139))
+- Portuguese (Portugal) translation ([#144](https://github.com/jpanther/congo/pull/144))
+
+### Changed
+
+- Upgrade SVG icons to FontAwesome 6:
+  - New icons for Hashnode, bug, check, comment, light bulb, list, pencil, skull, tag, and information. ([#136](https://github.com/jpanther/congo/discussions/136))
+  - ⚠️ The `exclamation-triangle` icon has been renamed `triangle-exclamation`
+  - ⚠️ The `times` icon has been renamed `xmark`
+  - ⚠️ The `stackoverflow` icon has been renamed `stack-overflow`
+- Upgrade KaTeX to v0.15.3
+- Markdown images and `figure` shortcode now search the `assets/` directory if an image cannot be found in page bundle ([#126](https://github.com/jpanther/congo/issues/126))
+- Markdown images and `figure` shortcode now fallback to static assets if an image is not provided as a Hugo resource ([#126](https://github.com/jpanther/congo/issues/126))
+- Taxonomy term listings now honour the `groupByYear` parameter ([#145](https://github.com/jpanther/congo/pull/145))
+- The `alert` shortcode now allows its icon to be specified as a parameter
+
+### Fixed
+
+- Dark appearance shown even when default appearance set to light and auto switching is disabled ([#149](https://github.com/jpanther/congo/issues/149))
+
+## [2.0.5] - 2022-02-20
+
+### Added
+
+- Bengali translation ([#115](https://github.com/jpanther/congo/pull/115))
+
+### Changed
+
+- Upgrade to Tailwind v3.0.23 and Typography v0.5.2
+- Upgrade to Mermaid v8.14.0
+- Upgrade to Chart.js v3.7.1
+
+### Fixed
+
+- Updated date is displayed even when it is the same as published date
+- Structured data on homepage unparsable by Google ([#113](https://github.com/jpanther/congo/issues/113))
+- Underline styles not displaying correctly in some browsers ([#125](https://github.com/jpanther/congo/issues/125))
+
+## [2.0.4] - 2022-02-09
+
+### Changed
+
+- Updated German translation ([#110](https://github.com/jpanther/congo/pull/110))
+- Upgrade to Tailwind v3.0.19
+
+### Fixed
+
+- Main content area not growing to fill screen vertically
+- Search results not cleared when search is dismissed ([#109](https://github.com/jpanther/congo/pull/109))
+- Emoji strings not displaying in search results
+
+## [2.0.3] - 2022-02-07
+
+### Changed
+
+- Updated Turkish translation ([#105](https://github.com/jpanther/congo/pull/105))
+- Updated Spanish translation ([#106](https://github.com/jpanther/congo/pull/106))
+
+### Fixed
+
+- Markdown images and `figure` shortcode fail to load resource when providing an external URL source
+- HTML `figcaption` tags are output for Markdown images even when a caption is not provided
+- Light appearance briefly appears on page load before switching to dark appearance ([#102](https://github.com/jpanther/congo/issues/102))
+
+## [2.0.2] - 2022-02-05
+
+### Changed
+
+- Updated French translation ([#100](https://github.com/jpanther/congo/pull/100))
+
+### Fixed
+
+- User's appearance preference is lost on page load when default appearance is dark ([#102](https://github.com/jpanther/congo/issues/102))
+- JavaScript warning when appearance switcher is disabled
+
+## [2.0.1] - 2022-02-03
+
+### Fixed
+
+- Hugo module error when downloading version 2
+- Emoji strings not displaying in table of contents
+
+## [2.0.0] - 2022-02-03
+
+### Added
+
+- Multilingual support
+- Right-to-left (RTL) language support
+- Site search powered by Fuse.js
+- Automatic Markdown image resizing and srcset generation
+- Performance and Accessibility improvements to achieve perfect Lighthouse scores
+- Tables of contents on article pages ([#47](https://github.com/jpanther/congo/discussions/47))
+- Code copy buttons in article content
+- Taxonomy and term listings now support Markdown content
+- Taxonomies on article and list pages
+- Article pagination direction can be inverted
+- Author `headline` parameter
+- Skip to content and Scroll to top links
+- Archetype for generating links to external articles
+
+### Changed
+
+- ⚠️ Required Hugo version is now 0.87.0 or later
+- ⚠️ Complete rewrite of dark mode to allow more flexibile configuration
+- ⚠️ All theme images are now Hugo assets
+- ⚠️ Overhauled `figure` shortcode which now resizes images
+- Upgrade to Tailwind v3.0.18
+- Inline JavaScript moved to external files
+- Improved JSON-LD structured data
+- Breadcrumbs now fallback to section name when `title` is not provided
+- Minor style and layout improvements
+
+## [1.6.4] - 2022-01-24
+
+### Added
+
+- Turkish translation ([#90](https://github.com/jpanther/congo/pull/90))
+
+### Changed
+
+- Article updated date formatting and i18n ([#91](https://github.com/jpanther/congo/pull/91))
+- Upgrade to Mermaid v8.13.10
+
+### Fixed
+
+- Article metadata not wrapping at small viewports ([#91](https://github.com/jpanther/congo/pull/91))
+
+## [1.6.3] - 2022-01-19
+
+### Added
+
+- Icon for Stack Overflow ([#82](https://github.com/jpanther/congo/pull/82))
+
+### Changed
+
+- Upgrade to Mermaid v8.13.9
+- Upgrade to KaTeX v0.15.2
+
+### Fixed
+
+- Emoji characters in article titles not appearing on list pages and in HTML metadata ([#84](https://github.com/jpanther/congo/pull/84))
+
+## [1.6.2] - 2022-01-07
+
+### Changed
+
+- Upgrade to Chart.js v3.7.0
+- Upgrade to Mermaid v8.13.8
+
+### Fixed
+
+- `lead` shortcode not rendering Markdown formatted text ([#73](https://github.com/jpanther/congo/issues/73))
+- JSON-LD keywords data not structured correctly ([#74](https://github.com/jpanther/congo/issues/74))
+
+## [1.6.1] - 2021-12-31
+
+### Added
+
+- Icon for Blogger ([#71](https://github.com/jpanther/congo/pull/71))
+
+### Fixed
+
+- Error when building using older Hugo versions ([#65](https://github.com/jpanther/congo/pull/65))
+- Error when serving sites using blogdown ([#66](https://github.com/jpanther/congo/pull/66))
+
+## [1.6.0] - 2021-12-21
+
+### Added
+
+- Article word counts ([#57](https://github.com/jpanther/congo/pull/57))
+- Last updated dates on articles
+- Icons for Amazon, Apple, Flickr, Google, Kickstarter, Microsoft, Patreon, Telegram, Tumblr and WhatsApp
+
+### Changed
+
+- Adjusted contrast of some items to improve accessibility
+- Upgrade to Chart.js v3.6.2
+- Upgrade to Mermaid v8.13.6
+
+### Fixed
+
+- Missing ARIA descriptions and alt tags on some images and links
+
+## [1.5.3] - 2021-11-18
+
+### Changed
+
+- Updated Chinese translation ([#32](https://github.com/jpanther/congo/pull/32))
+
+### Fixed
+
+- Article pagination uses date of current article ([#32](https://github.com/jpanther/congo/pull/32))
+
+## [1.5.2] - 2021-11-10
+
+### Added
+
+- German translation ([#27](https://github.com/jpanther/congo/pull/27))
+- Portuguese (Brazil) translation ([#28](https://github.com/jpanther/congo/pull/28))
+- Spanish translation ([#30](https://github.com/jpanther/congo/pull/30))
+
+### Fixed
+
+- Article pagination link spacing ([#26](https://github.com/jpanther/congo/pull/26))
+- Minor icon style issues
+
+## [1.5.1] - 2021-11-04
+
+### Fixed
+
+- Hugo failing to build site when deploying as a module
+
+## [1.5.0] - 2021-11-04
+
+### Added
+
+- Chart.js support using `chart` shortcode
+- KaTeX support using `katex` shortcode
+- Dark mode toggle with new theme parameters for managing light/dark appearance
+- French translation ([#18](https://github.com/jpanther/congo/pull/18))
+- Author bio in article footer
+- Grouping by year can now be specificed in front matter on list pages
+
+### Changed
+
+- Site name, author and menus will now render Markdown and Emoji
+- Bundled Mermaid for better vendor dependency management
+- Mermaid diagrams are now themed to match the configured colour scheme
+- Upgrade to Tailwind v2.2.19
+
+### Fixed
+
+- Site logo image dimensions are unconstrained ([#19](https://github.com/jpanther/congo/issues/19))
+- Article summary styled incorrectly in dark mode
+- Links containing `code` blocks styled incorrectly
+
+## [1.4.0] - 2021-10-20
+
+### Added
+
+- Footer menu
+- Article summary support
+- Slate colour scheme ([#9](https://github.com/jpanther/congo/pull/9))
+- Icons for ORCID and ResearchGate ([#9](https://github.com/jpanther/congo/pull/9))
+- Pinterest sharing links
+- Sharing links can now be specified in front matter
+
+### Changed
+
+- Main menu is now optional
+- Upgrade to Mermaid v8.13.3
+- Upgrade to Tailwind v2.2.17
+
+### Fixed
+
+- Site logo not linked to home page ([#13](https://github.com/jpanther/congo/issues/13))
+
+## [1.3.0] - 2021-09-29
+
+### Added
+
+- Site logo support
+- Chinese translation ([#2](https://github.com/jpanther/congo/pull/2))
+
+### Changed
+
+- Upgrade to Tailwind v2.2.16
+
+## [1.2.1] - 2021-08-26
+
+### Added
+
+- New `robots` parameter to add metadata to guide robots on how to handle specific content
+
+### Changed
+
+- URLs are relative by default which allows the theme to be more flexible in different deployment scenarios
+
+### Fixed
+
+- Missing dark style for group subheadings on article listings
+- Fathom Analytics script included twice when using custom domain
+- Recent heading on homepage profile layout misaligned
+
+## [1.2.0] - 2021-08-22
+
+### Added
+
+- Multiple colour schemes
+- Edit links on article pages
+- Icons for Foursquare and Pinterest
+- Asset fingerprinting and SRI
+- CSS minification for custom stylesheets
+
+### Changed
+
+- Static assets are now managed through Hugo Pipelines
+
+### Fixed
+
+- Minor style issue with `button` shortcode
+- Hugo Modules would fail when using default theme config file
+- Some content not centred correctly on the profile homepage layout
+- Some links missing the correct styles when in Firefox
+- `externalUrl` front matter not working on some list pages
+
+## [1.1.1] - 2021-08-19
+
+### Fixed
+
+- Hotfix for exampleSite and GitHub configuration
+
+## [1.1.0] - 2021-08-18
+
+### Added
+
+- Breadcrumbs
+- i18n support
+- Recent articles partial
+- CSS transitions
+- Hugo module support
+- JSON-LD structured metadata
+
+### Changed
+
+- ⚠️ Renamed parameter: `homepage.showList` -> `homepage.showRecent`
+- ⚠️ Renamed parameter: `homepage.listSections` -> `mainSections`
+- ⚠️ Consolidated author configuration parameters into `config.toml`
+- General style tweaks to enhance design consistency
+
+### Fixed
+
+- URLs being incorrect in some cases when the site is deployed in a subfolder
+
+## [1.0.0] - 2021-08-16
+
+### Added
+
+- Built with Tailwind CSS JIT for minified stylesheets without any excess code
+- Fully responsive layout
+- Dark mode (auto-switching based upon browser)
+- Highly customisable configuration
+- Multiple homepage layouts
+- Flexible with any content types, taxonomies and menus
+- Ability to link to posts on third-party websites
+- Diagrams and visualisations using Mermaid JS
+- SVG icons from FontAwesome 5
+- Heading anchors, Buttons, Badges and more
+- HTML and Emoji support in articles
+- SEO friendly with links for sharing to social media
+- RSS feeds
+- Fathom Analytics and Google Analytics support
+- Favicons support
+- Comments support
+- Advanced customisation using simple Tailwind colour definitions and styles
+- Fully documented
+
+[unreleased]: https://github.com/jpanther/congo/compare/v2.4.1...HEAD
+[2.4.1]: https://github.com/jpanther/congo/compare/v2.4.0...v2.4.1
+[2.4.0]: https://github.com/jpanther/congo/compare/v2.3.1...v2.4.0
+[2.3.1]: https://github.com/jpanther/congo/compare/v2.3.0...v2.3.1
+[2.3.0]: https://github.com/jpanther/congo/compare/v2.2.3...v2.3.0
+[2.2.3]: https://github.com/jpanther/congo/compare/v2.2.2...v2.2.3
+[2.2.2]: https://github.com/jpanther/congo/compare/v2.2.1...v2.2.2
+[2.2.1]: https://github.com/jpanther/congo/compare/v2.2.0...v2.2.1
+[2.2.0]: https://github.com/jpanther/congo/compare/v2.1.3...v2.2.0
+[2.1.3]: https://github.com/jpanther/congo/compare/v2.1.2...v2.1.3
+[2.1.2]: https://github.com/jpanther/congo/compare/v2.1.1...v2.1.2
+[2.1.1]: https://github.com/jpanther/congo/compare/v2.1.0...v2.1.1
+[2.1.0]: https://github.com/jpanther/congo/compare/v2.0.5...v2.1.0
+[2.0.5]: https://github.com/jpanther/congo/compare/v2.0.4...v2.0.5
+[2.0.4]: https://github.com/jpanther/congo/compare/v2.0.3...v2.0.4
+[2.0.3]: https://github.com/jpanther/congo/compare/v2.0.2...v2.0.3
+[2.0.2]: https://github.com/jpanther/congo/compare/v2.0.1...v2.0.2
+[2.0.1]: https://github.com/jpanther/congo/compare/v2.0.0...v2.0.1
+[2.0.0]: https://github.com/jpanther/congo/compare/v1.6.4...v2.0.0
+[1.6.4]: https://github.com/jpanther/congo/compare/v1.6.3...v1.6.4
+[1.6.3]: https://github.com/jpanther/congo/compare/v1.6.2...v1.6.3
+[1.6.2]: https://github.com/jpanther/congo/compare/v1.6.1...v1.6.2
+[1.6.1]: https://github.com/jpanther/congo/compare/v1.6.0...v1.6.1
+[1.6.0]: https://github.com/jpanther/congo/compare/v1.5.3...v1.6.0
+[1.5.3]: https://github.com/jpanther/congo/compare/v1.5.2...v1.5.3
+[1.5.2]: https://github.com/jpanther/Congo/compare/v1.5.1...v1.5.2
+[1.5.1]: https://github.com/jpanther/Congo/compare/v1.5.0...v1.5.1
+[1.5.0]: https://github.com/jpanther/Congo/compare/v1.4.0...v1.5.0
+[1.4.0]: https://github.com/jpanther/Congo/compare/v1.3.0...v1.4.0
+[1.3.0]: https://github.com/jpanther/Congo/compare/v1.2.1...v1.3.0
+[1.2.1]: https://github.com/jpanther/Congo/compare/v1.2.0...v1.2.1
+[1.2.0]: https://github.com/jpanther/Congo/compare/v1.1.1...v1.2.0
+[1.1.1]: https://github.com/jpanther/congo/compare/v1.1.0...v1.1.1
+[1.1.0]: https://github.com/jpanther/congo/compare/v1.0.0...v1.1.0
+[1.0.0]: https://github.com/jpanther/congo/releases/tag/v1.0.0
diff --git a/web/themes/congo/CONTRIBUTING.md b/web/themes/congo/CONTRIBUTING.md
new file mode 100644
index 0000000000000000000000000000000000000000..b9c26a307e36b57f3f620e39fe2d09df8a940e08
--- /dev/null
+++ b/web/themes/congo/CONTRIBUTING.md
@@ -0,0 +1,53 @@
+## How to contribute to Congo
+
+### Bugs & other issues
+
+#### Found a bug? 🐛
+
+- **Ensure the bug has not already been reported** by searching [GitHub Issues](https://github.com/jpanther/congo/issues). If there's already an open issue, feel free to add any extra information you might have about the issue.
+- If you're unable to find an open issue matching the problem, [open a new one](https://github.com/jpanther/congo/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample**, **screenshot**, or a **test case** demonstrating the expected behavior that is not occurring.
+- Where possible, use the bug report templates to create the issue. Avoid including descriptions like "bug", "feature", etc in the issue title as these will be handled by labels.
+
+#### Have a patch that fixes an issue?
+
+- Great! Open a new GitHub pull request with the patch.
+- All development occurs on the `dev` branch and new PRs should be forked from here.
+- The command `npm run example` can be used to test local changes using the example site.
+- Ensure the PR description clearly describes the problem and solution. Include the relevant issue number, if applicable.
+- **Before submitting**, check the [coding conventions](#coding-conventions) section below to learn more about coding and commit message expectations.
+
+### New features & enhancements
+
+#### Do you intend to add a new feature, or change an existing one?
+
+- Enhancements are welcome but before implementing any features, be sure to suggest your change by opening a [new discussion](https://github.com/jpanther/congo/discussions/new) about your idea. Enhancements are discussed to ensure they fit with the project's design intent and overall roadmap.
+- Before opening a discussion, [check to see](https://github.com/jpanther/congo/discussions/categories/ideas) if a similar idea is already being discussed.
+- All ideas and suggestions are welcome and will be judged on their merits.
+- If the community supports your idea, go ahead and submit a PR with the implemented feature.
+
+### Questions? 🙋‍♀️
+
+- If you have a general question, these should be asked using [GitHub Discussions](https://github.com/jpanther/congo/discussions). Feel free to open a [new discussion](https://github.com/jpanther/congo/discussions/new) to ask your question using the "Q&A" category.
+- Be sure to check if your question has already been answered by searching [existing Q&A discussions](https://github.com/jpanther/congo/discussions/categories/q-a).
+
+### Coding conventions
+
+- Indent using 2 spaces (soft tabs).
+- Put spaces between list items (ie. `[1, 2, 3]`, not `[1,2,3]`), around operators (ie. `1 + 1`, not `1+1`) and inside go templating tags (ie. `{{< alert >}}`, not `{{<alert>}}`).
+- Avoid code reuse in templates by extracting components into partials.
+- Layout code in a logical manner that prioritises readibility.
+- Add comments when the intent of the code isn't immediately apparent or to break up large blocks of logic.
+- Use relative paths to assets without including the preceeding slash but, when referring to a folder, including a trailing slash (ie. `static/img/`, not `/static/img/` or `/static/img`).
+- Any static text must be referenced using the `i18n` methods and included in the localisation assets.
+- Commit often, preferring incremental changes rather than bundling everything into a single, large commit.
+
+The project includes a Prettier config that helps to format code in line with these guidelines.
+
+#### Commit message guidelines
+
+- Use [Gitmoji](https://gitmoji.dev) in commit messages to provide context.
+- Clearly describe the change with a short summary in the first 72 characters.
+- Place more detailed explanations in paragraphs below the summary, separated by a blank line.
+- Use imperative language (ie. "Fix bug", not "Fixed bug" or "Fixes bug").
+- Do not end the summary line with a period.
+- Reference any issues fixed using their GitHub issue number.
diff --git a/web/themes/congo/LICENSE b/web/themes/congo/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..37b1ead4e66264c7412e64285e9d139f3aef0819
--- /dev/null
+++ b/web/themes/congo/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2021 James Panther (https://jamespanther.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/web/themes/congo/README.md b/web/themes/congo/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..e29878aae0c95ff1393980c6c9abd98663c7fd41
--- /dev/null
+++ b/web/themes/congo/README.md
@@ -0,0 +1,96 @@
+# Congo
+
+Congo is designed to be a powerful, lightweight theme for [Hugo](https://gohugo.io). It's built using Tailwind CSS with a clean and minimalist design that prioritises to your content.
+
+🌏 [Demo site](https://jpanther.github.io/congo/)  
+📑 [Theme documentation](https://jpanther.github.io/congo/docs/)  
+🐛 [Bug reports & issues](https://github.com/jpanther/congo/issues)  
+💡 [Questions & feature requests](https://github.com/jpanther/congo/discussions)
+
+![Screenshot](https://raw.githubusercontent.com/jpanther/congo/stable/images/screenshot.png)
+
+## Features
+
+- Fully responsive layout built with Tailwind CSS 3.0
+- Multiple colour schemes (or fully customise your own)
+- Dark mode (forced on/off or auto-switching with user toggle)
+- Highly customisable configuration
+- Multiple homepage layouts
+- Flexible with any content types, taxonomies and menus
+- Multilingual content support inlcuding support for RTL languages
+- Ability to link to posts on third-party websites
+- Client-side site search powered by Fuse.js
+- Diagrams and visualisations using Mermaid
+- Charts using Chart.js
+- Mathematical notation using KaTeX
+- SVG icons from FontAwesome 6
+- Automatic image resizing using Hugo Pipes
+- Heading anchors, Tables of Contents, Code copy, Buttons, Badges and more
+- HTML and Emoji support in articles 🎉
+- SEO friendly with links for sharing to social media
+- Fathom Analytics and Google Analytics support
+- RSS feeds, Favicons and comments support
+- Advanced customisation using simple Tailwind colour definitions and styles
+- Optimised for performance and accessibility with perfect Lighthouse scores
+- Fully documented with regular updates
+
+---
+
+## Documentation
+
+Congo has [extensive documentation](https://jpanther.github.io/congo/docs/) that covers all aspects of the theme. Be sure to [read the docs](https://jpanther.github.io/congo/docs/) to learn more about how to use the theme and its features.
+
+---
+
+## Installation
+
+Congo supports several installation methods - as a Hugo Module (easiest), a git submodule, or as a completely manual install.
+
+Detailed instructions for each method can be found in the [Installation](https://jpanther.github.io/congo/docs/installation) docs. You should consult the documentation for the simplest setup experience. Below is a quick start guide using Hugo modules if you're already confident installing Hugo themes.
+
+### Quick start using Hugo
+
+> **Note:** Ensure you have **Go** and **Hugo** installed, and that you have created a new Hugo project before proceeding.
+
+1. From your project directory, initialise Hugo Modules:
+
+   ```shell
+   hugo mod init github.com/<username>/<repo-name>
+   ```
+
+2. Create `config/_default/module.toml` and add the following:
+
+   ```toml
+   [[imports]]
+   path = "github.com/jpanther/congo/v2"
+   ```
+
+3. Start your server using `hugo server` and the theme will be downloaded automatically.
+
+4. In the root folder of your website, delete the `config.toml` file that was generated by Hugo. Copy the `*.toml` config files from the theme into your `config/_default/` folder.
+
+   > **Note:** Do not overwrite the `module.toml` file you created above!
+
+   You will find these theme config files in the Hugo cache directory, or [download a copy](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/jpanther/congo/tree/stable/config/_default) from GitHub.
+
+5. Follow the [Getting Started](https://jpanther.github.io/congo/docs/getting-started/) instructions to configure your website.
+
+### Installing theme updates
+
+As new releases are posted, you can update the theme using Hugo. Simply run `hugo mod get -u` from your project directory and the theme will automatically update to the latest release.
+
+Detailed [update instructions](https://jpanther.github.io/congo/docs/installation/#installing-updates) are available in the docs.
+
+---
+
+## Contributing
+
+Congo is expected to evolve over time. I intend to keep adding features and making changes as required.
+
+Feel free to get in touch with any issues or suggestions for new features you'd like to see.
+
+- 🐛 **Bug reports & issues:** Use [GitHub Issues](https://github.com/jpanther/congo/issues)
+- 💡 **Ideas for new features:** Open a discussion on [GitHub Discussions](https://github.com/jpanther/congo/discussions)
+- 🙋‍♀️ **General questions:** Head to [GitHub Discussions](https://github.com/jpanther/congo/discussions)
+
+If you're able to fix a bug or implement a new feature, I welcome PRs for this purpose. Learn more in the [contributing guidelines](https://github.com/jpanther/congo/blob/dev/CONTRIBUTING.md).
diff --git a/web/themes/congo/archetypes/default.md b/web/themes/congo/archetypes/default.md
new file mode 100644
index 0000000000000000000000000000000000000000..97f90a6bc234bd590fc4a6ecb65d0647c452fad5
--- /dev/null
+++ b/web/themes/congo/archetypes/default.md
@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+description: ""
+---
diff --git a/web/themes/congo/archetypes/external.md b/web/themes/congo/archetypes/external.md
new file mode 100644
index 0000000000000000000000000000000000000000..80f16dc829338163b27e1fbab516eaa8b7f4edcd
--- /dev/null
+++ b/web/themes/congo/archetypes/external.md
@@ -0,0 +1,10 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+externalUrl: ""
+summary: ""
+showReadingTime: false
+_build:
+  render: "false"
+  list: "local"
+---
diff --git a/web/themes/congo/assets/css/compiled/main.css b/web/themes/congo/assets/css/compiled/main.css
new file mode 100644
index 0000000000000000000000000000000000000000..18c42d8eccbc8029d79fb1bcbdff0aaf1439b5fe
--- /dev/null
+++ b/web/themes/congo/assets/css/compiled/main.css
@@ -0,0 +1,3017 @@
+/*! Congo v2.4.1 | MIT License | https://github.com/jpanther/congo */
+
+/*! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com */
+
+/*
+1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
+2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
+*/
+
+*,
+::before,
+::after {
+  box-sizing: border-box;
+  /* 1 */
+  border-width: 0;
+  /* 2 */
+  border-style: solid;
+  /* 2 */
+  border-color: currentColor;
+  /* 2 */
+}
+
+::before,
+::after {
+  --tw-content: '';
+}
+
+/*
+1. Use a consistent sensible line-height in all browsers.
+2. Prevent adjustments of font size after orientation changes in iOS.
+3. Use a more readable tab size.
+4. Use the user's configured `sans` font-family by default.
+5. Use the user's configured `sans` font-feature-settings by default.
+*/
+
+html {
+  line-height: 1.5;
+  /* 1 */
+  -webkit-text-size-adjust: 100%;
+  /* 2 */
+  -moz-tab-size: 4;
+  /* 3 */
+  -o-tab-size: 4;
+     tab-size: 4;
+  /* 3 */
+  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+  /* 4 */
+  font-feature-settings: normal;
+  /* 5 */
+}
+
+/*
+1. Remove the margin in all browsers.
+2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
+*/
+
+body {
+  margin: 0;
+  /* 1 */
+  line-height: inherit;
+  /* 2 */
+}
+
+/*
+1. Add the correct height in Firefox.
+2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
+3. Ensure horizontal rules are visible by default.
+*/
+
+hr {
+  height: 0;
+  /* 1 */
+  color: inherit;
+  /* 2 */
+  border-top-width: 1px;
+  /* 3 */
+}
+
+/*
+Add the correct text decoration in Chrome, Edge, and Safari.
+*/
+
+abbr:where([title]) {
+  -webkit-text-decoration: underline dotted;
+          text-decoration: underline dotted;
+}
+
+/*
+Remove the default font size and weight for headings.
+*/
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  font-size: inherit;
+  font-weight: inherit;
+}
+
+/*
+Reset links to optimize for opt-in styling instead of opt-out.
+*/
+
+a {
+  color: inherit;
+  text-decoration: inherit;
+}
+
+/*
+Add the correct font weight in Edge and Safari.
+*/
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+/*
+1. Use the user's configured `mono` font family by default.
+2. Correct the odd `em` font sizing in all browsers.
+*/
+
+code,
+kbd,
+samp,
+pre {
+  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+  /* 1 */
+  font-size: 1em;
+  /* 2 */
+}
+
+/*
+Add the correct font size in all browsers.
+*/
+
+small {
+  font-size: 80%;
+}
+
+/*
+Prevent `sub` and `sup` elements from affecting the line height in all browsers.
+*/
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+/*
+1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
+2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
+3. Remove gaps between table borders by default.
+*/
+
+table {
+  text-indent: 0;
+  /* 1 */
+  border-color: inherit;
+  /* 2 */
+  border-collapse: collapse;
+  /* 3 */
+}
+
+/*
+1. Change the font styles in all browsers.
+2. Remove the margin in Firefox and Safari.
+3. Remove default padding in all browsers.
+*/
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  font-family: inherit;
+  /* 1 */
+  font-size: 100%;
+  /* 1 */
+  font-weight: inherit;
+  /* 1 */
+  line-height: inherit;
+  /* 1 */
+  color: inherit;
+  /* 1 */
+  margin: 0;
+  /* 2 */
+  padding: 0;
+  /* 3 */
+}
+
+/*
+Remove the inheritance of text transform in Edge and Firefox.
+*/
+
+button,
+select {
+  text-transform: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Remove default button styles.
+*/
+
+button,
+[type='button'],
+[type='reset'],
+[type='submit'] {
+  -webkit-appearance: button;
+  /* 1 */
+  background-color: transparent;
+  /* 2 */
+  background-image: none;
+  /* 2 */
+}
+
+/*
+Use the modern Firefox focus style for all focusable elements.
+*/
+
+:-moz-focusring {
+  outline: auto;
+}
+
+/*
+Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
+*/
+
+:-moz-ui-invalid {
+  box-shadow: none;
+}
+
+/*
+Add the correct vertical alignment in Chrome and Firefox.
+*/
+
+progress {
+  vertical-align: baseline;
+}
+
+/*
+Correct the cursor style of increment and decrement buttons in Safari.
+*/
+
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/*
+1. Correct the odd appearance in Chrome and Safari.
+2. Correct the outline style in Safari.
+*/
+
+[type='search'] {
+  -webkit-appearance: textfield;
+  /* 1 */
+  outline-offset: -2px;
+  /* 2 */
+}
+
+/*
+Remove the inner padding in Chrome and Safari on macOS.
+*/
+
+::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/*
+1. Correct the inability to style clickable types in iOS and Safari.
+2. Change font properties to `inherit` in Safari.
+*/
+
+::-webkit-file-upload-button {
+  -webkit-appearance: button;
+  /* 1 */
+  font: inherit;
+  /* 2 */
+}
+
+/*
+Add the correct display in Chrome and Safari.
+*/
+
+summary {
+  display: list-item;
+}
+
+/*
+Removes the default spacing and border for appropriate elements.
+*/
+
+blockquote,
+dl,
+dd,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+hr,
+figure,
+p,
+pre {
+  margin: 0;
+}
+
+fieldset {
+  margin: 0;
+  padding: 0;
+}
+
+legend {
+  padding: 0;
+}
+
+ol,
+ul,
+menu {
+  list-style: none;
+  margin: 0;
+  padding: 0;
+}
+
+/*
+Prevent resizing textareas horizontally by default.
+*/
+
+textarea {
+  resize: vertical;
+}
+
+/*
+1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
+2. Set the default placeholder color to the user's configured gray 400 color.
+*/
+
+input::-moz-placeholder, textarea::-moz-placeholder {
+  opacity: 1;
+  /* 1 */
+  color: #9ca3af;
+  /* 2 */
+}
+
+input::placeholder,
+textarea::placeholder {
+  opacity: 1;
+  /* 1 */
+  color: #9ca3af;
+  /* 2 */
+}
+
+/*
+Set the default cursor for buttons.
+*/
+
+button,
+[role="button"] {
+  cursor: pointer;
+}
+
+/*
+Make sure disabled buttons don't get the pointer cursor.
+*/
+
+:disabled {
+  cursor: default;
+}
+
+/*
+1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
+2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
+   This can trigger a poorly considered lint error in some tools but is included by design.
+*/
+
+img,
+svg,
+video,
+canvas,
+audio,
+iframe,
+embed,
+object {
+  display: block;
+  /* 1 */
+  vertical-align: middle;
+  /* 2 */
+}
+
+/*
+Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
+*/
+
+img,
+video {
+  max-width: 100%;
+  height: auto;
+}
+
+/* Make elements with the HTML hidden attribute stay hidden by default */
+
+[hidden] {
+  display: none;
+}
+
+*, ::before, ::after {
+  --tw-border-spacing-x: 0;
+  --tw-border-spacing-y: 0;
+  --tw-translate-x: 0;
+  --tw-translate-y: 0;
+  --tw-rotate: 0;
+  --tw-skew-x: 0;
+  --tw-skew-y: 0;
+  --tw-scale-x: 1;
+  --tw-scale-y: 1;
+  --tw-pan-x:  ;
+  --tw-pan-y:  ;
+  --tw-pinch-zoom:  ;
+  --tw-scroll-snap-strictness: proximity;
+  --tw-ordinal:  ;
+  --tw-slashed-zero:  ;
+  --tw-numeric-figure:  ;
+  --tw-numeric-spacing:  ;
+  --tw-numeric-fraction:  ;
+  --tw-ring-inset:  ;
+  --tw-ring-offset-width: 0px;
+  --tw-ring-offset-color: #fff;
+  --tw-ring-color: rgb(59 130 246 / 0.5);
+  --tw-ring-offset-shadow: 0 0 #0000;
+  --tw-ring-shadow: 0 0 #0000;
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  --tw-blur:  ;
+  --tw-brightness:  ;
+  --tw-contrast:  ;
+  --tw-grayscale:  ;
+  --tw-hue-rotate:  ;
+  --tw-invert:  ;
+  --tw-saturate:  ;
+  --tw-sepia:  ;
+  --tw-drop-shadow:  ;
+  --tw-backdrop-blur:  ;
+  --tw-backdrop-brightness:  ;
+  --tw-backdrop-contrast:  ;
+  --tw-backdrop-grayscale:  ;
+  --tw-backdrop-hue-rotate:  ;
+  --tw-backdrop-invert:  ;
+  --tw-backdrop-opacity:  ;
+  --tw-backdrop-saturate:  ;
+  --tw-backdrop-sepia:  ;
+}
+
+::backdrop {
+  --tw-border-spacing-x: 0;
+  --tw-border-spacing-y: 0;
+  --tw-translate-x: 0;
+  --tw-translate-y: 0;
+  --tw-rotate: 0;
+  --tw-skew-x: 0;
+  --tw-skew-y: 0;
+  --tw-scale-x: 1;
+  --tw-scale-y: 1;
+  --tw-pan-x:  ;
+  --tw-pan-y:  ;
+  --tw-pinch-zoom:  ;
+  --tw-scroll-snap-strictness: proximity;
+  --tw-ordinal:  ;
+  --tw-slashed-zero:  ;
+  --tw-numeric-figure:  ;
+  --tw-numeric-spacing:  ;
+  --tw-numeric-fraction:  ;
+  --tw-ring-inset:  ;
+  --tw-ring-offset-width: 0px;
+  --tw-ring-offset-color: #fff;
+  --tw-ring-color: rgb(59 130 246 / 0.5);
+  --tw-ring-offset-shadow: 0 0 #0000;
+  --tw-ring-shadow: 0 0 #0000;
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  --tw-blur:  ;
+  --tw-brightness:  ;
+  --tw-contrast:  ;
+  --tw-grayscale:  ;
+  --tw-hue-rotate:  ;
+  --tw-invert:  ;
+  --tw-saturate:  ;
+  --tw-sepia:  ;
+  --tw-drop-shadow:  ;
+  --tw-backdrop-blur:  ;
+  --tw-backdrop-brightness:  ;
+  --tw-backdrop-contrast:  ;
+  --tw-backdrop-grayscale:  ;
+  --tw-backdrop-hue-rotate:  ;
+  --tw-backdrop-invert:  ;
+  --tw-backdrop-opacity:  ;
+  --tw-backdrop-saturate:  ;
+  --tw-backdrop-sepia:  ;
+}
+
+.prose {
+  color: var(--tw-prose-body);
+  max-width: 65ch;
+}
+
+.prose :where([class~="lead"]):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-lead);
+  font-size: 1.25em;
+  line-height: 1.6;
+  margin-top: 1.2em;
+  margin-bottom: 1.2em;
+}
+
+.prose :where(a):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-links);
+  text-decoration: underline;
+  font-weight: 500;
+  text-decoration-color: rgba(var(--color-primary-300), 1);
+}
+
+.prose :where(a):not(:where([class~="not-prose"] *)):hover {
+  color: rgba(var(--color-neutral), 1);
+  text-decoration: none;
+  background-color: rgba(var(--color-primary-600), 1);
+  border-radius: 0.09rem;
+}
+
+.prose :where(strong):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-bold);
+  font-weight: 600;
+}
+
+.prose :where(a strong):not(:where([class~="not-prose"] *)) {
+  color: inherit;
+}
+
+.prose :where(blockquote strong):not(:where([class~="not-prose"] *)) {
+  color: inherit;
+}
+
+.prose :where(thead th strong):not(:where([class~="not-prose"] *)) {
+  color: inherit;
+}
+
+.prose :where(ol):not(:where([class~="not-prose"] *)) {
+  list-style-type: decimal;
+  margin-top: 1.25em;
+  margin-bottom: 1.25em;
+  padding-left: 1.625em;
+}
+
+.prose :where(ol[type="A"]):not(:where([class~="not-prose"] *)) {
+  list-style-type: upper-alpha;
+}
+
+.prose :where(ol[type="a"]):not(:where([class~="not-prose"] *)) {
+  list-style-type: lower-alpha;
+}
+
+.prose :where(ol[type="A" s]):not(:where([class~="not-prose"] *)) {
+  list-style-type: upper-alpha;
+}
+
+.prose :where(ol[type="a" s]):not(:where([class~="not-prose"] *)) {
+  list-style-type: lower-alpha;
+}
+
+.prose :where(ol[type="I"]):not(:where([class~="not-prose"] *)) {
+  list-style-type: upper-roman;
+}
+
+.prose :where(ol[type="i"]):not(:where([class~="not-prose"] *)) {
+  list-style-type: lower-roman;
+}
+
+.prose :where(ol[type="I" s]):not(:where([class~="not-prose"] *)) {
+  list-style-type: upper-roman;
+}
+
+.prose :where(ol[type="i" s]):not(:where([class~="not-prose"] *)) {
+  list-style-type: lower-roman;
+}
+
+.prose :where(ol[type="1"]):not(:where([class~="not-prose"] *)) {
+  list-style-type: decimal;
+}
+
+.prose :where(ul):not(:where([class~="not-prose"] *)) {
+  list-style-type: disc;
+  margin-top: 1.25em;
+  margin-bottom: 1.25em;
+  padding-left: 1.625em;
+}
+
+.prose :where(ol > li):not(:where([class~="not-prose"] *))::marker {
+  font-weight: 400;
+  color: var(--tw-prose-counters);
+}
+
+.prose :where(ul > li):not(:where([class~="not-prose"] *))::marker {
+  color: var(--tw-prose-bullets);
+}
+
+.prose :where(hr):not(:where([class~="not-prose"] *)) {
+  border-color: var(--tw-prose-hr);
+  border-top-width: 1px;
+  margin-top: 3em;
+  margin-bottom: 3em;
+}
+
+.prose :where(blockquote):not(:where([class~="not-prose"] *)) {
+  font-weight: 500;
+  font-style: italic;
+  color: var(--tw-prose-quotes);
+  border-left-width: 0.25rem;
+  border-left-color: var(--tw-prose-quote-borders);
+  quotes: "\201C""\201D""\2018""\2019";
+  margin-top: 1.6em;
+  margin-bottom: 1.6em;
+  padding-left: 1em;
+}
+
+.prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"] *))::before {
+  content: open-quote;
+}
+
+.prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"] *))::after {
+  content: close-quote;
+}
+
+.prose :where(h1):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-headings);
+  font-weight: 800;
+  font-size: 2.25em;
+  margin-top: 0;
+  margin-bottom: 0.8888889em;
+  line-height: 1.1111111;
+}
+
+.prose :where(h1 strong):not(:where([class~="not-prose"] *)) {
+  font-weight: 900;
+  color: inherit;
+}
+
+.prose :where(h2):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-headings);
+  font-weight: 700;
+  font-size: 1.5em;
+  margin-top: 2em;
+  margin-bottom: 1em;
+  line-height: 1.3333333;
+}
+
+.prose :where(h2 strong):not(:where([class~="not-prose"] *)) {
+  font-weight: 800;
+  color: inherit;
+}
+
+.prose :where(h3):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-headings);
+  font-weight: 600;
+  font-size: 1.25em;
+  margin-top: 1.6em;
+  margin-bottom: 0.6em;
+  line-height: 1.6;
+}
+
+.prose :where(h3 strong):not(:where([class~="not-prose"] *)) {
+  font-weight: 700;
+  color: inherit;
+}
+
+.prose :where(h4):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-headings);
+  font-weight: 600;
+  margin-top: 1.5em;
+  margin-bottom: 0.5em;
+  line-height: 1.5;
+}
+
+.prose :where(h4 strong):not(:where([class~="not-prose"] *)) {
+  font-weight: 700;
+  color: inherit;
+}
+
+.prose :where(img):not(:where([class~="not-prose"] *)) {
+  margin-top: 2em;
+  margin-bottom: 2em;
+}
+
+.prose :where(figure > *):not(:where([class~="not-prose"] *)) {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+
+.prose :where(figcaption):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-captions);
+  font-size: 0.875em;
+  line-height: 1.4285714;
+  margin-top: 0.8571429em;
+}
+
+.prose :where(code):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-code);
+  font-weight: 600;
+  font-size: 0.875em;
+}
+
+.prose :where(code):not(:where([class~="not-prose"] *))::before {
+  content: "`";
+}
+
+.prose :where(code):not(:where([class~="not-prose"] *))::after {
+  content: "`";
+}
+
+.prose :where(a code):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-code);
+}
+
+.prose :where(h1 code):not(:where([class~="not-prose"] *)) {
+  color: inherit;
+}
+
+.prose :where(h2 code):not(:where([class~="not-prose"] *)) {
+  color: inherit;
+  font-size: 0.875em;
+}
+
+.prose :where(h3 code):not(:where([class~="not-prose"] *)) {
+  color: inherit;
+  font-size: 0.9em;
+}
+
+.prose :where(h4 code):not(:where([class~="not-prose"] *)) {
+  color: inherit;
+}
+
+.prose :where(blockquote code):not(:where([class~="not-prose"] *)) {
+  color: inherit;
+}
+
+.prose :where(thead th code):not(:where([class~="not-prose"] *)) {
+  color: inherit;
+}
+
+.prose :where(pre):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-pre-code);
+  background-color: var(--tw-prose-pre-bg);
+  overflow-x: auto;
+  font-weight: 400;
+  font-size: 0.875em;
+  line-height: 1.7142857;
+  margin-top: 1.7142857em;
+  margin-bottom: 1.7142857em;
+  border-radius: 0.375rem;
+  padding-top: 0.8571429em;
+  padding-right: 1.1428571em;
+  padding-bottom: 0.8571429em;
+  padding-left: 1.1428571em;
+}
+
+.prose :where(pre code):not(:where([class~="not-prose"] *)) {
+  background-color: transparent;
+  border-width: 0;
+  border-radius: 0;
+  padding: 0;
+  font-weight: inherit;
+  color: inherit;
+  font-size: inherit;
+  font-family: inherit;
+  line-height: inherit;
+}
+
+.prose :where(pre code):not(:where([class~="not-prose"] *))::before {
+  content: none;
+}
+
+.prose :where(pre code):not(:where([class~="not-prose"] *))::after {
+  content: none;
+}
+
+.prose :where(table):not(:where([class~="not-prose"] *)) {
+  width: 100%;
+  table-layout: auto;
+  text-align: left;
+  margin-top: 2em;
+  margin-bottom: 2em;
+  font-size: 0.875em;
+  line-height: 1.7142857;
+}
+
+.prose :where(thead):not(:where([class~="not-prose"] *)) {
+  border-bottom-width: 1px;
+  border-bottom-color: var(--tw-prose-th-borders);
+}
+
+.prose :where(thead th):not(:where([class~="not-prose"] *)) {
+  color: var(--tw-prose-headings);
+  font-weight: 600;
+  vertical-align: bottom;
+  padding-right: 0.5714286em;
+  padding-bottom: 0.5714286em;
+  padding-left: 0.5714286em;
+}
+
+.prose :where(tbody tr):not(:where([class~="not-prose"] *)) {
+  border-bottom-width: 1px;
+  border-bottom-color: var(--tw-prose-td-borders);
+}
+
+.prose :where(tbody tr:last-child):not(:where([class~="not-prose"] *)) {
+  border-bottom-width: 0;
+}
+
+.prose :where(tbody td):not(:where([class~="not-prose"] *)) {
+  vertical-align: baseline;
+}
+
+.prose :where(tfoot):not(:where([class~="not-prose"] *)) {
+  border-top-width: 1px;
+  border-top-color: var(--tw-prose-th-borders);
+}
+
+.prose :where(tfoot td):not(:where([class~="not-prose"] *)) {
+  vertical-align: top;
+}
+
+.prose {
+  --tw-prose-body: rgba(var(--color-neutral-700), 1);
+  --tw-prose-headings: rgba(var(--color-neutral-800), 1);
+  --tw-prose-lead: rgba(var(--color-neutral-500), 1);
+  --tw-prose-links: rgba(var(--color-primary-700), 1);
+  --tw-prose-bold: rgba(var(--color-neutral-900), 1);
+  --tw-prose-counters: rgba(var(--color-neutral-800), 1);
+  --tw-prose-bullets: rgba(var(--color-neutral-500), 1);
+  --tw-prose-hr: rgba(var(--color-neutral-200), 1);
+  --tw-prose-quotes: rgba(var(--color-neutral-700), 1);
+  --tw-prose-quote-borders: rgba(var(--color-primary-200), 1);
+  --tw-prose-captions: rgba(var(--color-neutral-500), 1);
+  --tw-prose-code: rgba(var(--color-secondary-700), 1);
+  --tw-prose-pre-code: rgba(var(--color-neutral-700), 1);
+  --tw-prose-pre-bg: rgba(var(--color-neutral-50), 1);
+  --tw-prose-th-borders: rgba(var(--color-neutral-500), 1);
+  --tw-prose-td-borders: rgba(var(--color-neutral-300), 1);
+  --tw-prose-invert-body: rgba(var(--color-neutral-300), 1);
+  --tw-prose-invert-headings: rgba(var(--color-neutral-50), 1);
+  --tw-prose-invert-lead: rgba(var(--color-neutral-500), 1);
+  --tw-prose-invert-links: rgba(var(--color-primary-400), 1);
+  --tw-prose-invert-bold: rgba(var(--color-neutral), 1);
+  --tw-prose-invert-counters: rgba(var(--color-neutral-400), 1);
+  --tw-prose-invert-bullets: rgba(var(--color-neutral-600), 1);
+  --tw-prose-invert-hr: rgba(var(--color-neutral-500), 1);
+  --tw-prose-invert-quotes: rgba(var(--color-neutral-200), 1);
+  --tw-prose-invert-quote-borders: rgba(var(--color-primary-900), 1);
+  --tw-prose-invert-captions: rgba(var(--color-neutral-400), 1);
+  --tw-prose-invert-code: rgba(var(--color-secondary-400), 1);
+  --tw-prose-invert-pre-code: rgba(var(--color-neutral-200), 1);
+  --tw-prose-invert-pre-bg: rgba(var(--color-neutral-700), 1);
+  --tw-prose-invert-th-borders: rgba(var(--color-neutral-500), 1);
+  --tw-prose-invert-td-borders: rgba(var(--color-neutral-700), 1);
+  font-size: 1rem;
+  line-height: 1.1;
+}
+
+.prose :where(p):not(:where([class~="not-prose"] *)) {
+  margin-top: 1.25em;
+  margin-bottom: 1.25em;
+}
+
+.prose :where(video):not(:where([class~="not-prose"] *)) {
+  margin-top: 2em;
+  margin-bottom: 2em;
+}
+
+.prose :where(figure):not(:where([class~="not-prose"] *)) {
+  margin-top: 2em;
+  margin-bottom: 2em;
+}
+
+.prose :where(li):not(:where([class~="not-prose"] *)) {
+  margin-top: 0.5em;
+  margin-bottom: 0.5em;
+}
+
+.prose :where(ol > li):not(:where([class~="not-prose"] *)) {
+  padding-left: 0.375em;
+}
+
+.prose :where(ul > li):not(:where([class~="not-prose"] *)) {
+  padding-left: 0.375em;
+}
+
+.prose :where(.prose > ul > li p):not(:where([class~="not-prose"] *)) {
+  margin-top: 0.75em;
+  margin-bottom: 0.75em;
+}
+
+.prose :where(.prose > ul > li > *:first-child):not(:where([class~="not-prose"] *)) {
+  margin-top: 1.25em;
+}
+
+.prose :where(.prose > ul > li > *:last-child):not(:where([class~="not-prose"] *)) {
+  margin-bottom: 1.25em;
+}
+
+.prose :where(.prose > ol > li > *:first-child):not(:where([class~="not-prose"] *)) {
+  margin-top: 1.25em;
+}
+
+.prose :where(.prose > ol > li > *:last-child):not(:where([class~="not-prose"] *)) {
+  margin-bottom: 1.25em;
+}
+
+.prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"] *)) {
+  margin-top: 0.75em;
+  margin-bottom: 0.75em;
+}
+
+.prose :where(hr + *):not(:where([class~="not-prose"] *)) {
+  margin-top: 0;
+}
+
+.prose :where(h2 + *):not(:where([class~="not-prose"] *)) {
+  margin-top: 0;
+}
+
+.prose :where(h3 + *):not(:where([class~="not-prose"] *)) {
+  margin-top: 0;
+}
+
+.prose :where(h4 + *):not(:where([class~="not-prose"] *)) {
+  margin-top: 0;
+}
+
+.prose :where(thead th:first-child):not(:where([class~="not-prose"] *)) {
+  padding-left: 0;
+}
+
+.prose :where(thead th:last-child):not(:where([class~="not-prose"] *)) {
+  padding-right: 0;
+}
+
+.prose :where(tbody td, tfoot td):not(:where([class~="not-prose"] *)) {
+  padding-top: 0.5714286em;
+  padding-right: 0.5714286em;
+  padding-bottom: 0.5714286em;
+  padding-left: 0.5714286em;
+}
+
+.prose :where(tbody td:first-child, tfoot td:first-child):not(:where([class~="not-prose"] *)) {
+  padding-left: 0;
+}
+
+.prose :where(tbody td:last-child, tfoot td:last-child):not(:where([class~="not-prose"] *)) {
+  padding-right: 0;
+}
+
+.prose :where(.prose > :first-child):not(:where([class~="not-prose"] *)) {
+  margin-top: 0;
+}
+
+.prose :where(.prose > :last-child):not(:where([class~="not-prose"] *)) {
+  margin-bottom: 0;
+}
+
+.prose :where(kbd):not(:where([class~="not-prose"] *)) {
+  background-color: rgba(var(--color-neutral-200), 1);
+  padding: 0.1rem 0.4rem;
+  border-radius: 0.25rem;
+  font-size: 0.9rem;
+  font-weight: 600;
+}
+
+.prose :where(mark):not(:where([class~="not-prose"] *)) {
+  color: rgba(var(--color-neutral-800), 1);
+  background-color: rgba(var(--color-secondary-200), 1);
+  padding: 0.1rem 0.2rem;
+  border-radius: 0.12rem;
+}
+
+body a,
+body button {
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+/* Scale SVG icons to text size */
+
+.icon svg {
+  height: 1em;
+  width: 1em;
+}
+
+/* Search */
+
+#search-query::-webkit-search-cancel-button,
+#search-query::-webkit-search-decoration,
+#search-query::-webkit-search-results-button,
+#search-query::-webkit-search-results-decoration {
+  display: none;
+}
+
+/* Hamburger menu */
+
+body:has(#menu-controller:checked) {
+  overflow-y: hidden;
+}
+
+#menu-button:has(#menu-controller:checked) {
+  visibility: hidden;
+}
+
+#menu-controller:checked ~ #menu-wrapper {
+  visibility: visible;
+  opacity: 1;
+}
+
+/* RTL support */
+
+[dir="rtl"] .prose blockquote {
+  border-left-width: 0px;
+  border-right-width: 4px;
+  padding-right: 1rem;
+}
+
+[dir="rtl"] .prose ul > li,[dir="rtl"] 
+.prose ol > li {
+  margin-right: 1.75rem;
+  padding-left: 0px;
+  padding-right: 0.5rem;
+}
+
+[dir="rtl"] .prose ol > li:before,[dir="rtl"] 
+.prose ul > li:before {
+  left: auto;
+  right: 0.25rem;
+}
+
+[dir="rtl"] .prose thead td:first-child,[dir="rtl"] 
+.prose thead th:first-child {
+  padding-right: 0px;
+}
+
+[dir="rtl"] .prose thead td:last-child,[dir="rtl"] 
+.prose thead th:last-child {
+  padding-left: 0px;
+}
+
+/* Adjust first child within prose */
+
+.prose div.min-w-0.max-w-prose > *:first-child {
+  margin-top: 0.75rem;
+}
+
+/* Table of Contents */
+
+.toc ul,
+.toc li {
+  list-style-type: none;
+  padding-left: 0px;
+  padding-right: 0px;
+  line-height: 1.375;
+}
+
+[dir="ltr"] .toc ul ul {
+  padding-left: 1rem;
+}
+
+[dir="rtl"] .toc ul ul {
+  padding-right: 1rem;
+}
+
+.toc a {
+  font-weight: 400;
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-700), var(--tw-text-opacity));
+}
+
+.dark .toc a {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-400), var(--tw-text-opacity));
+}
+
+[dir="rtl"] .toc ul > li {
+  margin-right: 0px;
+}
+
+/* Code Copy */
+
+.highlight-wrapper {
+  display: block;
+}
+
+.highlight {
+  position: relative;
+  z-index: 0;
+}
+
+.highlight:hover > .copy-button {
+  visibility: visible;
+}
+
+.copy-button {
+  visibility: hidden;
+  position: absolute;
+  top: 0px;
+  right: 0px;
+  z-index: 10;
+  width: 5rem;
+  cursor: pointer;
+  white-space: nowrap;
+  border-bottom-left-radius: 0.375rem;
+  border-top-right-radius: 0.375rem;
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-neutral-200), var(--tw-bg-opacity));
+  padding-top: 0.25rem;
+  padding-bottom: 0.25rem;
+  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+  font-size: 0.875rem;
+  line-height: 1.25rem;
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-700), var(--tw-text-opacity));
+  opacity: 0.9;
+}
+
+.dark .copy-button {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-neutral-600), var(--tw-bg-opacity));
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-200), var(--tw-text-opacity));
+}
+
+.copy-button:hover,
+.copy-button:focus,
+.copy-button:active,
+.copy-button:active:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-100), var(--tw-bg-opacity));
+}
+
+.dark .copy-button:hover,.dark 
+.copy-button:focus,.dark 
+.copy-button:active,.dark 
+.copy-button:active:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-600), var(--tw-bg-opacity));
+}
+
+.copy-textarea {
+  position: absolute;
+  z-index: -10;
+  opacity: 0.05;
+}
+
+/* -- Chroma Highlight -- */
+
+/* Background */
+
+.prose .chroma {
+  position: static;
+  border-radius: 0.375rem;
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-neutral-50), var(--tw-bg-opacity));
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-700), var(--tw-text-opacity));
+}
+
+.dark .prose .chroma {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-neutral-700), var(--tw-bg-opacity));
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-200), var(--tw-text-opacity));
+}
+
+/* LineTableTD */
+
+.chroma .lntd,
+.chroma .lntd pre {
+  margin: 0px;
+  border-style: none;
+  padding: 0px;
+  vertical-align: top;
+}
+
+/* LineTable */
+
+.chroma .lntable {
+  display: block;
+  width: auto;
+  overflow: hidden;
+  padding-left: 1rem;
+  padding-right: 1rem;
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+  font-size: 1rem;
+  line-height: 1.5rem;
+  border-spacing: 0;
+}
+
+/* LineHighlight */
+
+.chroma .hl {
+  margin-left: -1rem;
+  margin-right: -1rem;
+  display: block;
+  width: auto;
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-100), var(--tw-bg-opacity));
+  padding-left: 1rem;
+  padding-right: 1rem;
+}
+
+.dark .chroma .hl {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-900), var(--tw-bg-opacity));
+}
+
+.chroma .lntd .hl {
+  margin: 0px;
+  padding: 0px;
+}
+
+/* LineNumbersTable */
+
+/* LineNumbers */
+
+.chroma .lnt,
+.chroma .ln {
+  margin-right: 0.4em;
+  padding-left: 0.4em;
+  padding-right: 0.4em;
+  padding-top: 0px;
+  padding-bottom: 0px;
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-600), var(--tw-text-opacity));
+}
+
+.dark .chroma .lnt,.dark 
+.chroma .ln {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-300), var(--tw-text-opacity));
+}
+
+/* Keyword */
+
+/* KeywordDeclaration */
+
+/* KeywordNamespace */
+
+/* KeywordPseudo */
+
+/* KeywordReserved */
+
+/* NameClass */
+
+/* NameFunctionMagic */
+
+/* NameNamespace */
+
+/* NameVariableClass */
+
+/* Operator */
+
+.chroma .k,
+.chroma .kd,
+.chroma .kn,
+.chroma .kp,
+.chroma .kr,
+.chroma .nc,
+.chroma .fm,
+.chroma .nn,
+.chroma .vc,
+.chroma .o {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-600), var(--tw-text-opacity));
+}
+
+.dark .chroma .k,.dark 
+.chroma .kd,.dark 
+.chroma .kn,.dark 
+.chroma .kp,.dark 
+.chroma .kr,.dark 
+.chroma .nc,.dark 
+.chroma .fm,.dark 
+.chroma .nn,.dark 
+.chroma .vc,.dark 
+.chroma .o {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-300), var(--tw-text-opacity));
+}
+
+/* KeywordConstant */
+
+.chroma .kc {
+  font-weight: 600;
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-400), var(--tw-text-opacity));
+}
+
+.dark .chroma .kc {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-500), var(--tw-text-opacity));
+}
+
+/* KeywordType */
+
+/* NameVariable */
+
+/* NameVariableInstance */
+
+/* NameVariableMagic */
+
+/* LiteralNumber */
+
+/* LiteralNumberBin */
+
+/* LiteralNumberFloat */
+
+/* LiteralNumberHex */
+
+/* LiteralNumberInteger */
+
+/* LiteralNumberIntegerLong */
+
+/* LiteralNumberOct */
+
+.chroma .kt,
+.chroma .nv,
+.chroma .vi,
+.chroma .vm,
+.chroma .m,
+.chroma .mb,
+.chroma .mf,
+.chroma .mh,
+.chroma .mi,
+.chroma .il,
+.chroma .mo {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-400), var(--tw-text-opacity));
+}
+
+.dark .chroma .kt,.dark 
+.chroma .nv,.dark 
+.chroma .vi,.dark 
+.chroma .vm,.dark 
+.chroma .m,.dark 
+.chroma .mb,.dark 
+.chroma .mf,.dark 
+.chroma .mh,.dark 
+.chroma .mi,.dark 
+.chroma .il,.dark 
+.chroma .mo {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-600), var(--tw-text-opacity));
+}
+
+/* Name */
+
+/* NameDecorator */
+
+/* NameEntity */
+
+/* NameLabel */
+
+.chroma .n,
+.chroma .nd,
+.chroma .ni,
+.chroma .nl {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-900), var(--tw-text-opacity));
+}
+
+.dark .chroma .n,.dark 
+.chroma .nd,.dark 
+.chroma .ni,.dark 
+.chroma .nl {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-200), var(--tw-text-opacity));
+}
+
+/* NameAttribute */
+
+/* NameBuiltin */
+
+/* NameBuiltinPseudo */
+
+/* NameOther */
+
+/* NameProperty */
+
+/* NameTag */
+
+.chroma .na,
+.chroma .nb,
+.chroma .bp,
+.chroma .nx,
+.chroma .py,
+.chroma .nt {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-800), var(--tw-text-opacity));
+}
+
+.dark .chroma .na,.dark 
+.chroma .nb,.dark 
+.chroma .bp,.dark 
+.chroma .nx,.dark 
+.chroma .py,.dark 
+.chroma .nt {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-300), var(--tw-text-opacity));
+}
+
+/* NameConstant */
+
+/* NameException */
+
+/* NameVariableGlobal */
+
+.chroma .no,
+.chroma .ne,
+.chroma .vg {
+  font-weight: 600;
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-400), var(--tw-text-opacity));
+}
+
+.dark .chroma .no,.dark 
+.chroma .ne,.dark 
+.chroma .vg {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-500), var(--tw-text-opacity));
+}
+
+/* NameFunction */
+
+.chroma .nf {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-600), var(--tw-text-opacity));
+}
+
+.dark .chroma .nf {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-500), var(--tw-text-opacity));
+}
+
+/* Literal */
+
+/* LiteralDate */
+
+/* LiteralString */
+
+/* LiteralStringAffix */
+
+/* LiteralStringBacktick */
+
+/* LiteralStringChar */
+
+/* LiteralStringDelimiter */
+
+/* LiteralStringDoc */
+
+/* LiteralStringDouble */
+
+/* LiteralStringHeredoc */
+
+/* LiteralStringInterpol */
+
+/* LiteralStringOther */
+
+/* LiteralStringSingle */
+
+/* GenericInserted */
+
+/* GenericOutput */
+
+/* GenericPrompt */
+
+.chroma .l,
+.chroma .ld,
+.chroma .s,
+.chroma .sa,
+.chroma .sb,
+.chroma .sc,
+.chroma .dl,
+.chroma .sd,
+.chroma .s2,
+.chroma .sh,
+.chroma .si,
+.chroma .sx,
+.chroma .s1,
+.chroma .gi,
+.chroma .go,
+.chroma .gp {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-800), var(--tw-text-opacity));
+}
+
+.dark .chroma .l,.dark 
+.chroma .ld,.dark 
+.chroma .s,.dark 
+.chroma .sa,.dark 
+.chroma .sb,.dark 
+.chroma .sc,.dark 
+.chroma .dl,.dark 
+.chroma .sd,.dark 
+.chroma .s2,.dark 
+.chroma .sh,.dark 
+.chroma .si,.dark 
+.chroma .sx,.dark 
+.chroma .s1,.dark 
+.chroma .gi,.dark 
+.chroma .go,.dark 
+.chroma .gp {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-400), var(--tw-text-opacity));
+}
+
+/* LiteralStringEscape */
+
+.chroma .se {
+  font-weight: 600;
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-400), var(--tw-text-opacity));
+}
+
+.dark .chroma .se {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-secondary-500), var(--tw-text-opacity));
+}
+
+/* LiteralStringRegex */
+
+/* LiteralStringSymbol */
+
+.chroma .sr,
+.chroma .ss {
+  font-weight: 600;
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-800), var(--tw-text-opacity));
+}
+
+.dark .chroma .sr,.dark 
+.chroma .ss {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-400), var(--tw-text-opacity));
+}
+
+/* OperatorWord */
+
+.chroma .ow {
+  font-weight: 600;
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-400), var(--tw-text-opacity));
+}
+
+.dark .chroma .ow {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-600), var(--tw-text-opacity));
+}
+
+/* Comment */
+
+/* CommentMultiline */
+
+/* CommentSingle */
+
+/* CommentSpecial */
+
+/* CommentPreproc */
+
+/* CommentPreprocFile */
+
+.chroma .c,
+.chroma .cm,
+.chroma .c1,
+.chroma .cs,
+.chroma .cp,
+.chroma .cpf {
+  font-style: italic;
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-500), var(--tw-text-opacity));
+}
+
+.dark .chroma .c,.dark 
+.chroma .cm,.dark 
+.chroma .c1,.dark 
+.chroma .cs,.dark 
+.chroma .cp,.dark 
+.chroma .cpf {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-400), var(--tw-text-opacity));
+}
+
+/* CommentHashbang */
+
+.chroma .ch {
+  font-weight: 600;
+  font-style: italic;
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-500), var(--tw-text-opacity));
+}
+
+.dark .chroma .ch {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-400), var(--tw-text-opacity));
+}
+
+/* GenericEmph */
+
+.chroma .ge {
+  font-style: italic;
+}
+
+/* GenericHeading */
+
+.chroma .gh {
+  font-weight: 600;
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-500), var(--tw-text-opacity));
+}
+
+/* GenericStrong */
+
+.chroma .gs {
+  font-weight: 600;
+}
+
+/* GenericSubheading */
+
+/* GenericTraceback */
+
+.chroma .gu,
+.chroma .gt {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-500), var(--tw-text-opacity));
+}
+
+/* GenericUnderline */
+
+.chroma .gl {
+  text-decoration-line: underline;
+}
+
+.pointer-events-none {
+  pointer-events: none;
+}
+
+.pointer-events-auto {
+  pointer-events: auto;
+}
+
+.invisible {
+  visibility: hidden;
+}
+
+.fixed {
+  position: fixed;
+}
+
+.absolute {
+  position: absolute;
+}
+
+.relative {
+  position: relative;
+}
+
+.sticky {
+  position: sticky;
+}
+
+.inset-0 {
+  top: 0px;
+  right: 0px;
+  bottom: 0px;
+  left: 0px;
+}
+
+.top-\[100vh\] {
+  top: 100vh;
+}
+
+.bottom-0 {
+  bottom: 0px;
+}
+
+.top-\[calc\(100vh-5\.5rem\)\] {
+  top: calc(100vh - 5.5rem);
+}
+
+.top-20 {
+  top: 5rem;
+}
+
+.top-0 {
+  top: 0px;
+}
+
+.z-50 {
+  z-index: 50;
+}
+
+.z-10 {
+  z-index: 10;
+}
+
+.z-40 {
+  z-index: 40;
+}
+
+.z-30 {
+  z-index: 30;
+}
+
+.order-first {
+  order: -9999;
+}
+
+.m-auto {
+  margin: auto;
+}
+
+.m-1 {
+  margin: 0.25rem;
+}
+
+.-mx-2 {
+  margin-left: -0.5rem;
+  margin-right: -0.5rem;
+}
+
+.my-3 {
+  margin-top: 0.75rem;
+  margin-bottom: 0.75rem;
+}
+
+.my-1 {
+  margin-top: 0.25rem;
+  margin-bottom: 0.25rem;
+}
+
+.mx-1 {
+  margin-left: 0.25rem;
+  margin-right: 0.25rem;
+}
+
+.mx-auto {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.my-0 {
+  margin-top: 0px;
+  margin-bottom: 0px;
+}
+
+.mb-3 {
+  margin-bottom: 0.75rem;
+}
+
+.mt-8 {
+  margin-top: 2rem;
+}
+
+.mb-12 {
+  margin-bottom: 3rem;
+}
+
+.mt-0 {
+  margin-top: 0px;
+}
+
+.mt-12 {
+  margin-top: 3rem;
+}
+
+.mt-10 {
+  margin-top: 2.5rem;
+}
+
+.mt-6 {
+  margin-top: 1.5rem;
+}
+
+.mb-6 {
+  margin-bottom: 1.5rem;
+}
+
+.-mt-4 {
+  margin-top: -1rem;
+}
+
+.mr-2 {
+  margin-right: 0.5rem;
+}
+
+.ml-2 {
+  margin-left: 0.5rem;
+}
+
+.mt-\[0\.1rem\] {
+  margin-top: 0.1rem;
+}
+
+.\!mt-0 {
+  margin-top: 0px !important;
+}
+
+.\!mb-0 {
+  margin-bottom: 0px !important;
+}
+
+.mb-1 {
+  margin-bottom: 0.25rem;
+}
+
+.mb-2 {
+  margin-bottom: 0.5rem;
+}
+
+.-mb-1 {
+  margin-bottom: -0.25rem;
+}
+
+.\!mb-9 {
+  margin-bottom: 2.25rem !important;
+}
+
+.mt-1 {
+  margin-top: 0.25rem;
+}
+
+.mb-\[2px\] {
+  margin-bottom: 2px;
+}
+
+.block {
+  display: block;
+}
+
+.inline-block {
+  display: inline-block;
+}
+
+.inline {
+  display: inline;
+}
+
+.flex {
+  display: flex;
+}
+
+.hidden {
+  display: none;
+}
+
+.h-screen {
+  height: 100vh;
+}
+
+.h-12 {
+  height: 3rem;
+}
+
+.h-24 {
+  height: 6rem;
+}
+
+.h-8 {
+  height: 2rem;
+}
+
+.h-full {
+  height: 100%;
+}
+
+.h-36 {
+  height: 9rem;
+}
+
+.max-h-\[10rem\] {
+  max-height: 10rem;
+}
+
+.min-h-0 {
+  min-height: 0px;
+}
+
+.w-12 {
+  width: 3rem;
+}
+
+.w-36 {
+  width: 9rem;
+}
+
+.w-full {
+  width: 100%;
+}
+
+.w-24 {
+  width: 6rem;
+}
+
+.w-screen {
+  width: 100vw;
+}
+
+.w-8 {
+  width: 2rem;
+}
+
+.w-6 {
+  width: 1.5rem;
+}
+
+.min-w-0 {
+  min-width: 0px;
+}
+
+.min-w-\[1\.8rem\] {
+  min-width: 1.8rem;
+}
+
+.min-w-\[2\.4rem\] {
+  min-width: 2.4rem;
+}
+
+.max-w-7xl {
+  max-width: 80rem;
+}
+
+.max-w-full {
+  max-width: 100%;
+}
+
+.max-w-prose {
+  max-width: 65ch;
+}
+
+.max-w-\[10rem\] {
+  max-width: 10rem;
+}
+
+.max-w-3xl {
+  max-width: 48rem;
+}
+
+.flex-none {
+  flex: none;
+}
+
+.flex-auto {
+  flex: 1 1 auto;
+}
+
+.grow {
+  flex-grow: 1;
+}
+
+.-translate-y-8 {
+  --tw-translate-y: -2rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.cursor-default {
+  cursor: default;
+}
+
+.cursor-pointer {
+  cursor: pointer;
+}
+
+.list-none {
+  list-style-type: none;
+}
+
+.appearance-none {
+  -webkit-appearance: none;
+     -moz-appearance: none;
+          appearance: none;
+}
+
+.flex-row {
+  flex-direction: row;
+}
+
+.flex-col {
+  flex-direction: column;
+}
+
+.flex-wrap {
+  flex-wrap: wrap;
+}
+
+.items-start {
+  align-items: flex-start;
+}
+
+.items-center {
+  align-items: center;
+}
+
+.justify-center {
+  justify-content: center;
+}
+
+.justify-between {
+  justify-content: space-between;
+}
+
+.place-self-center {
+  place-self: center;
+}
+
+.self-center {
+  align-self: center;
+}
+
+.overflow-auto {
+  overflow: auto;
+}
+
+.overflow-hidden {
+  overflow: hidden;
+}
+
+.overflow-visible {
+  overflow: visible;
+}
+
+.scroll-smooth {
+  scroll-behavior: smooth;
+}
+
+.rounded-full {
+  border-radius: 9999px;
+}
+
+.rounded-md {
+  border-radius: 0.375rem;
+}
+
+.rounded {
+  border-radius: 0.25rem;
+}
+
+.rounded-lg {
+  border-radius: 0.5rem;
+}
+
+.\!rounded-md {
+  border-radius: 0.375rem !important;
+}
+
+.rounded-b-lg {
+  border-bottom-right-radius: 0.5rem;
+  border-bottom-left-radius: 0.5rem;
+}
+
+.border {
+  border-width: 1px;
+}
+
+.border-t {
+  border-top-width: 1px;
+}
+
+.border-dotted {
+  border-style: dotted;
+}
+
+.border-neutral-400 {
+  --tw-border-opacity: 1;
+  border-color: rgba(var(--color-neutral-400), var(--tw-border-opacity));
+}
+
+.border-neutral-300 {
+  --tw-border-opacity: 1;
+  border-color: rgba(var(--color-neutral-300), var(--tw-border-opacity));
+}
+
+.border-neutral-200 {
+  --tw-border-opacity: 1;
+  border-color: rgba(var(--color-neutral-200), var(--tw-border-opacity));
+}
+
+.border-primary-400 {
+  --tw-border-opacity: 1;
+  border-color: rgba(var(--color-primary-400), var(--tw-border-opacity));
+}
+
+.bg-neutral {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-neutral), var(--tw-bg-opacity));
+}
+
+.bg-primary-200 {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-200), var(--tw-bg-opacity));
+}
+
+.bg-neutral\/50 {
+  background-color: rgba(var(--color-neutral), 0.5);
+}
+
+.bg-neutral-500\/50 {
+  background-color: rgba(var(--color-neutral-500), 0.5);
+}
+
+.bg-transparent {
+  background-color: transparent;
+}
+
+.bg-neutral-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-neutral-100), var(--tw-bg-opacity));
+}
+
+.bg-neutral-300 {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-neutral-300), var(--tw-bg-opacity));
+}
+
+.bg-primary-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-100), var(--tw-bg-opacity));
+}
+
+.bg-primary-600 {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-600), var(--tw-bg-opacity));
+}
+
+.bg-neutral-100\/50 {
+  background-color: rgba(var(--color-neutral-100), 0.5);
+}
+
+.object-scale-down {
+  -o-object-fit: scale-down;
+     object-fit: scale-down;
+}
+
+.object-left {
+  -o-object-position: left;
+     object-position: left;
+}
+
+.p-4 {
+  padding: 1rem;
+}
+
+.p-1 {
+  padding: 0.25rem;
+}
+
+.px-6 {
+  padding-left: 1.5rem;
+  padding-right: 1.5rem;
+}
+
+.px-3 {
+  padding-left: 0.75rem;
+  padding-right: 0.75rem;
+}
+
+.py-1 {
+  padding-top: 0.25rem;
+  padding-bottom: 0.25rem;
+}
+
+.px-0 {
+  padding-left: 0px;
+  padding-right: 0px;
+}
+
+.py-8 {
+  padding-top: 2rem;
+  padding-bottom: 2rem;
+}
+
+.px-2 {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.px-1 {
+  padding-left: 0.25rem;
+  padding-right: 0.25rem;
+}
+
+.py-\[1px\] {
+  padding-top: 1px;
+  padding-bottom: 1px;
+}
+
+.py-10 {
+  padding-top: 2.5rem;
+  padding-bottom: 2.5rem;
+}
+
+.py-2 {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+}
+
+.px-4 {
+  padding-left: 1rem;
+  padding-right: 1rem;
+}
+
+.py-3 {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+}
+
+.py-6 {
+  padding-top: 1.5rem;
+  padding-bottom: 1.5rem;
+}
+
+.pt-8 {
+  padding-top: 2rem;
+}
+
+.pt-3 {
+  padding-top: 0.75rem;
+}
+
+.pr-4 {
+  padding-right: 1rem;
+}
+
+.pl-2 {
+  padding-left: 0.5rem;
+}
+
+.pb-4 {
+  padding-bottom: 1rem;
+}
+
+.pt-4 {
+  padding-top: 1rem;
+}
+
+.text-center {
+  text-align: center;
+}
+
+.text-right {
+  text-align: right;
+}
+
+.align-top {
+  vertical-align: top;
+}
+
+.align-text-bottom {
+  vertical-align: text-bottom;
+}
+
+.text-4xl {
+  font-size: 2.25rem;
+  line-height: 2.5rem;
+}
+
+.text-lg {
+  font-size: 1.125rem;
+  line-height: 1.75rem;
+}
+
+.text-sm {
+  font-size: 0.875rem;
+  line-height: 1.25rem;
+}
+
+.text-xl {
+  font-size: 1.25rem;
+  line-height: 1.75rem;
+}
+
+.text-2xl {
+  font-size: 1.5rem;
+  line-height: 2rem;
+}
+
+.text-base {
+  font-size: 1rem;
+  line-height: 1.5rem;
+}
+
+.text-xs {
+  font-size: 0.75rem;
+  line-height: 1rem;
+}
+
+.text-\[0\.6rem\] {
+  font-size: 0.6rem;
+}
+
+.font-extrabold {
+  font-weight: 800;
+}
+
+.font-bold {
+  font-weight: 700;
+}
+
+.font-medium {
+  font-weight: 500;
+}
+
+.font-semibold {
+  font-weight: 600;
+}
+
+.font-normal {
+  font-weight: 400;
+}
+
+.uppercase {
+  text-transform: uppercase;
+}
+
+.italic {
+  font-style: italic;
+}
+
+.leading-7 {
+  line-height: 1.75rem;
+}
+
+.leading-6 {
+  line-height: 1.5rem;
+}
+
+.leading-3 {
+  line-height: .75rem;
+}
+
+.text-neutral-400 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-400), var(--tw-text-opacity));
+}
+
+.text-neutral-900 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-900), var(--tw-text-opacity));
+}
+
+.text-primary-600 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-600), var(--tw-text-opacity));
+}
+
+.text-neutral-700 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-700), var(--tw-text-opacity));
+}
+
+.text-neutral-500 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-500), var(--tw-text-opacity));
+}
+
+.text-primary-500 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-500), var(--tw-text-opacity));
+}
+
+.text-neutral-800 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-800), var(--tw-text-opacity));
+}
+
+.text-primary-700 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-700), var(--tw-text-opacity));
+}
+
+.text-primary-400 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-400), var(--tw-text-opacity));
+}
+
+.\!text-neutral {
+  --tw-text-opacity: 1 !important;
+  color: rgba(var(--color-neutral), var(--tw-text-opacity)) !important;
+}
+
+.\!no-underline {
+  text-decoration-line: none !important;
+}
+
+.decoration-primary-500 {
+  text-decoration-color: rgba(var(--color-primary-500), 1);
+}
+
+.decoration-neutral-300 {
+  text-decoration-color: rgba(var(--color-neutral-300), 1);
+}
+
+.opacity-0 {
+  opacity: 0;
+}
+
+.shadow-lg {
+  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.backdrop-blur {
+  --tw-backdrop-blur: blur(8px);
+  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.backdrop-blur-sm {
+  --tw-backdrop-blur: blur(4px);
+  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
+}
+
+.transition-transform {
+  transition-property: transform;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-opacity {
+  transition-property: opacity;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.first\:mt-8:first-child {
+  margin-top: 2rem;
+}
+
+.hover\:scale-125:hover {
+  --tw-scale-x: 1.25;
+  --tw-scale-y: 1.25;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.hover\:border-primary-300:hover {
+  --tw-border-opacity: 1;
+  border-color: rgba(var(--color-primary-300), var(--tw-border-opacity));
+}
+
+.hover\:bg-primary-600:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-600), var(--tw-bg-opacity));
+}
+
+.hover\:bg-primary-100:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-100), var(--tw-bg-opacity));
+}
+
+.hover\:bg-primary-500:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-500), var(--tw-bg-opacity));
+}
+
+.hover\:\!bg-primary-500:hover {
+  --tw-bg-opacity: 1 !important;
+  background-color: rgba(var(--color-primary-500), var(--tw-bg-opacity)) !important;
+}
+
+.hover\:text-primary-600:hover {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-600), var(--tw-text-opacity));
+}
+
+.hover\:text-primary-700:hover {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-700), var(--tw-text-opacity));
+}
+
+.hover\:text-primary-500:hover {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-500), var(--tw-text-opacity));
+}
+
+.hover\:text-neutral:hover {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral), var(--tw-text-opacity));
+}
+
+.hover\:underline:hover {
+  text-decoration-line: underline;
+}
+
+.hover\:decoration-primary-400:hover {
+  text-decoration-color: rgba(var(--color-primary-400), 1);
+}
+
+.hover\:decoration-2:hover {
+  text-decoration-thickness: 2px;
+}
+
+.hover\:underline-offset-2:hover {
+  text-underline-offset: 2px;
+}
+
+.focus\:translate-y-0:focus {
+  --tw-translate-y: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.focus\:bg-primary-100:focus {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-100), var(--tw-bg-opacity));
+}
+
+.focus\:outline-dotted:focus {
+  outline-style: dotted;
+}
+
+.focus\:outline-2:focus {
+  outline-width: 2px;
+}
+
+.focus\:outline-transparent:focus {
+  outline-color: transparent;
+}
+
+.group:hover .group-hover\:-translate-x-\[2px\] {
+  --tw-translate-x: -2px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group:hover .group-hover\:translate-x-\[2px\] {
+  --tw-translate-x: 2px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group:hover .group-hover\:text-primary-600 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-600), var(--tw-text-opacity));
+}
+
+.group:hover .group-hover\:text-primary-300 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-300), var(--tw-text-opacity));
+}
+
+.group:hover .group-hover\:underline {
+  text-decoration-line: underline;
+}
+
+.group:hover .group-hover\:decoration-primary-500 {
+  text-decoration-color: rgba(var(--color-primary-500), 1);
+}
+
+.group:hover .group-hover\:opacity-100 {
+  opacity: 1;
+}
+
+[dir="ltr"] .ltr\:right-0 {
+  right: 0px;
+}
+
+[dir="ltr"] .ltr\:-left-6 {
+  left: -1.5rem;
+}
+
+[dir="ltr"] .ltr\:ml-2 {
+  margin-left: 0.5rem;
+}
+
+[dir="ltr"] .ltr\:mr-4 {
+  margin-right: 1rem;
+}
+
+[dir="ltr"] .ltr\:ml-1 {
+  margin-left: 0.25rem;
+}
+
+[dir="ltr"] .ltr\:mr-14 {
+  margin-right: 3.5rem;
+}
+
+[dir="ltr"] .ltr\:-ml-5 {
+  margin-left: -1.25rem;
+}
+
+[dir="ltr"] .ltr\:block {
+  display: block;
+}
+
+[dir="ltr"] .ltr\:inline {
+  display: inline;
+}
+
+[dir="ltr"] .ltr\:hidden {
+  display: none;
+}
+
+[dir="ltr"] .ltr\:border-l {
+  border-left-width: 1px;
+}
+
+[dir="ltr"] .ltr\:pr-2 {
+  padding-right: 0.5rem;
+}
+
+[dir="ltr"] .ltr\:pl-5 {
+  padding-left: 1.25rem;
+}
+
+[dir="ltr"] .ltr\:pr-3 {
+  padding-right: 0.75rem;
+}
+
+[dir="ltr"] .ltr\:text-right {
+  text-align: right;
+}
+
+[dir="rtl"] .rtl\:left-0 {
+  left: 0px;
+}
+
+[dir="rtl"] .rtl\:-right-6 {
+  right: -1.5rem;
+}
+
+[dir="rtl"] .rtl\:mr-2 {
+  margin-right: 0.5rem;
+}
+
+[dir="rtl"] .rtl\:ml-4 {
+  margin-left: 1rem;
+}
+
+[dir="rtl"] .rtl\:mr-1 {
+  margin-right: 0.25rem;
+}
+
+[dir="rtl"] .rtl\:ml-14 {
+  margin-left: 3.5rem;
+}
+
+[dir="rtl"] .rtl\:-mr-5 {
+  margin-right: -1.25rem;
+}
+
+[dir="rtl"] .rtl\:block {
+  display: block;
+}
+
+[dir="rtl"] .rtl\:inline {
+  display: inline;
+}
+
+[dir="rtl"] .rtl\:hidden {
+  display: none;
+}
+
+[dir="rtl"] .rtl\:border-r {
+  border-right-width: 1px;
+}
+
+[dir="rtl"] .rtl\:pl-2 {
+  padding-left: 0.5rem;
+}
+
+[dir="rtl"] .rtl\:pr-5 {
+  padding-right: 1.25rem;
+}
+
+[dir="rtl"] .rtl\:pl-3 {
+  padding-left: 0.75rem;
+}
+
+[dir="rtl"] .rtl\:text-left {
+  text-align: left;
+}
+
+.dark .dark\:flex {
+  display: flex;
+}
+
+.dark .dark\:hidden {
+  display: none;
+}
+
+.dark .dark\:border-neutral-600 {
+  --tw-border-opacity: 1;
+  border-color: rgba(var(--color-neutral-600), var(--tw-border-opacity));
+}
+
+.dark .dark\:border-primary-600 {
+  --tw-border-opacity: 1;
+  border-color: rgba(var(--color-primary-600), var(--tw-border-opacity));
+}
+
+.dark .dark\:border-neutral-700 {
+  --tw-border-opacity: 1;
+  border-color: rgba(var(--color-neutral-700), var(--tw-border-opacity));
+}
+
+.dark .dark\:bg-neutral-800 {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-neutral-800), var(--tw-bg-opacity));
+}
+
+.dark .dark\:bg-neutral-600 {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-neutral-600), var(--tw-bg-opacity));
+}
+
+.dark .dark\:bg-neutral-800\/50 {
+  background-color: rgba(var(--color-neutral-800), 0.5);
+}
+
+.dark .dark\:bg-primary-400 {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-400), var(--tw-bg-opacity));
+}
+
+.dark .dark\:bg-neutral-900\/50 {
+  background-color: rgba(var(--color-neutral-900), 0.5);
+}
+
+.dark .dark\:bg-neutral-700 {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-neutral-700), var(--tw-bg-opacity));
+}
+
+.dark .dark\:bg-primary-900 {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-900), var(--tw-bg-opacity));
+}
+
+.dark .dark\:bg-primary-800 {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-800), var(--tw-bg-opacity));
+}
+
+.dark .dark\:prose-invert {
+  --tw-prose-body: var(--tw-prose-invert-body);
+  --tw-prose-headings: var(--tw-prose-invert-headings);
+  --tw-prose-lead: var(--tw-prose-invert-lead);
+  --tw-prose-links: var(--tw-prose-invert-links);
+  --tw-prose-bold: var(--tw-prose-invert-bold);
+  --tw-prose-counters: var(--tw-prose-invert-counters);
+  --tw-prose-bullets: var(--tw-prose-invert-bullets);
+  --tw-prose-hr: var(--tw-prose-invert-hr);
+  --tw-prose-quotes: var(--tw-prose-invert-quotes);
+  --tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);
+  --tw-prose-captions: var(--tw-prose-invert-captions);
+  --tw-prose-code: var(--tw-prose-invert-code);
+  --tw-prose-pre-code: var(--tw-prose-invert-pre-code);
+  --tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);
+  --tw-prose-th-borders: var(--tw-prose-invert-th-borders);
+  --tw-prose-td-borders: var(--tw-prose-invert-td-borders);
+}
+
+.dark .dark\:prose-invert :where(a):not(:where([class~="not-prose"] *)) {
+  text-decoration-color: rgba(var(--color-neutral-600), 1);
+}
+
+.dark .dark\:prose-invert :where(kbd):not(:where([class~="not-prose"] *)) {
+  color: rgba(var(--color-neutral-200), 1);
+  background-color: rgba(var(--color-neutral-700), 1);
+}
+
+.dark .dark\:prose-invert :where(mark):not(:where([class~="not-prose"] *)) {
+  background-color: rgba(var(--color-secondary-400), 1);
+}
+
+.dark .dark\:text-neutral-500 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-500), var(--tw-text-opacity));
+}
+
+.dark .dark\:text-neutral {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral), var(--tw-text-opacity));
+}
+
+.dark .dark\:text-primary-400 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-400), var(--tw-text-opacity));
+}
+
+.dark .dark\:text-neutral-300 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-300), var(--tw-text-opacity));
+}
+
+.dark .dark\:text-neutral-400 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-400), var(--tw-text-opacity));
+}
+
+.dark .dark\:text-neutral-800 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-800), var(--tw-text-opacity));
+}
+
+.dark .dark\:text-neutral-100 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-100), var(--tw-text-opacity));
+}
+
+.dark .dark\:hover\:border-primary-600:hover {
+  --tw-border-opacity: 1;
+  border-color: rgba(var(--color-primary-600), var(--tw-border-opacity));
+}
+
+.dark .dark\:hover\:bg-primary-900:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-900), var(--tw-bg-opacity));
+}
+
+.dark .dark\:hover\:bg-primary-400:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-400), var(--tw-bg-opacity));
+}
+
+.dark .dark\:hover\:\!bg-primary-700:hover {
+  --tw-bg-opacity: 1 !important;
+  background-color: rgba(var(--color-primary-700), var(--tw-bg-opacity)) !important;
+}
+
+.dark .dark\:hover\:text-primary-400:hover {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-400), var(--tw-text-opacity));
+}
+
+.dark .dark\:hover\:text-neutral-800:hover {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-800), var(--tw-text-opacity));
+}
+
+.dark .dark\:focus\:bg-primary-900:focus {
+  --tw-bg-opacity: 1;
+  background-color: rgba(var(--color-primary-900), var(--tw-bg-opacity));
+}
+
+.dark .group:hover .dark\:group-hover\:text-primary-400 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-primary-400), var(--tw-text-opacity));
+}
+
+.dark .group:hover .dark\:group-hover\:text-neutral-700 {
+  --tw-text-opacity: 1;
+  color: rgba(var(--color-neutral-700), var(--tw-text-opacity));
+}
+
+@media print {
+  .print\:hidden {
+    display: none;
+  }
+}
+
+@media (min-width: 640px) {
+  .sm\:mb-0 {
+    margin-bottom: 0px;
+  }
+
+  .sm\:flex {
+    display: flex;
+  }
+
+  .sm\:hidden {
+    display: none;
+  }
+
+  .sm\:w-1\/2 {
+    width: 50%;
+  }
+
+  .sm\:w-40 {
+    width: 10rem;
+  }
+
+  .sm\:flex-row {
+    flex-direction: row;
+  }
+
+  .sm\:items-center {
+    align-items: center;
+  }
+
+  .sm\:p-6 {
+    padding: 1.5rem;
+  }
+
+  .sm\:px-14 {
+    padding-left: 3.5rem;
+    padding-right: 3.5rem;
+  }
+
+  .sm\:py-10 {
+    padding-top: 2.5rem;
+    padding-bottom: 2.5rem;
+  }
+
+  .sm\:pr-6 {
+    padding-right: 1.5rem;
+  }
+
+  .sm\:pt-10 {
+    padding-top: 2.5rem;
+  }
+
+  .sm\:text-lg {
+    font-size: 1.125rem;
+    line-height: 1.75rem;
+  }
+
+  [dir="ltr"] .ltr\:sm\:mr-7 {
+    margin-right: 1.75rem;
+  }
+
+  [dir="ltr"] .ltr\:sm\:last\:mr-0:last-child {
+    margin-right: 0px;
+  }
+
+  [dir="rtl"] .rtl\:sm\:ml-7 {
+    margin-left: 1.75rem;
+  }
+
+  [dir="rtl"] .rtl\:sm\:last\:ml-0:last-child {
+    margin-left: 0px;
+  }
+}
+
+@media (min-width: 768px) {
+  .md\:w-1\/3 {
+    width: 33.333333%;
+  }
+
+  .md\:p-\[10vh\] {
+    padding: 10vh;
+  }
+
+  .md\:px-24 {
+    padding-left: 6rem;
+    padding-right: 6rem;
+  }
+}
+
+@media (min-width: 1024px) {
+  .lg\:sticky {
+    position: sticky;
+  }
+
+  .lg\:top-10 {
+    top: 2.5rem;
+  }
+
+  .lg\:order-last {
+    order: 9999;
+  }
+
+  .lg\:hidden {
+    display: none;
+  }
+
+  .lg\:w-1\/4 {
+    width: 25%;
+  }
+
+  .lg\:max-w-xs {
+    max-width: 20rem;
+  }
+
+  .lg\:flex-row {
+    flex-direction: row;
+  }
+
+  .lg\:p-\[12vh\] {
+    padding: 12vh;
+  }
+
+  .lg\:px-32 {
+    padding-left: 8rem;
+    padding-right: 8rem;
+  }
+
+  [dir="ltr"] .ltr\:lg\:pl-8 {
+    padding-left: 2rem;
+  }
+
+  [dir="rtl"] .rtl\:lg\:pr-8 {
+    padding-right: 2rem;
+  }
+}
+
+@media (min-width: 1280px) {
+  .xl\:w-1\/5 {
+    width: 20%;
+  }
+}
diff --git a/web/themes/congo/assets/css/main.css b/web/themes/congo/assets/css/main.css
new file mode 100644
index 0000000000000000000000000000000000000000..ffb5a8da26f97a047a2584cd6dd05a81373da942
--- /dev/null
+++ b/web/themes/congo/assets/css/main.css
@@ -0,0 +1,302 @@
+/*! Congo v2.4.1 | MIT License | https://github.com/jpanther/congo */
+
+@tailwind base;
+@tailwind components;
+
+body a,
+body button {
+  @apply transition-colors;
+}
+
+/* Scale SVG icons to text size */
+.icon svg {
+  @apply h-[1em] w-[1em];
+}
+
+/* Search */
+#search-query::-webkit-search-cancel-button,
+#search-query::-webkit-search-decoration,
+#search-query::-webkit-search-results-button,
+#search-query::-webkit-search-results-decoration {
+  @apply hidden;
+}
+
+/* Hamburger menu */
+body:has(#menu-controller:checked) {
+  @apply overflow-y-hidden;
+}
+#menu-button:has(#menu-controller:checked) {
+  @apply invisible;
+}
+#menu-controller:checked ~ #menu-wrapper {
+  @apply visible opacity-100;
+}
+
+/* RTL support */
+.prose blockquote {
+  @apply rtl:pr-4 rtl:border-l-0 rtl:border-r-4;
+}
+.prose ul > li,
+.prose ol > li {
+  @apply rtl:pl-0 rtl:pr-2 rtl:mr-7;
+}
+.prose ol > li:before,
+.prose ul > li:before {
+  @apply rtl:left-auto rtl:right-1;
+}
+.prose thead td:first-child,
+.prose thead th:first-child {
+  @apply rtl:pr-0;
+}
+.prose thead td:last-child,
+.prose thead th:last-child {
+  @apply rtl:pl-0;
+}
+
+/* Adjust first child within prose */
+.prose div.min-w-0.max-w-prose > *:first-child {
+  @apply mt-3;
+}
+
+/* Table of Contents */
+.toc ul,
+.toc li {
+  @apply px-0 leading-snug list-none;
+}
+.toc ul ul {
+  @apply ltr:pl-4 rtl:pr-4;
+}
+.toc a {
+  @apply font-normal text-neutral-700 dark:text-neutral-400;
+}
+.toc ul > li {
+  @apply rtl:mr-0;
+}
+
+/* Code Copy */
+.highlight-wrapper {
+  @apply block;
+}
+.highlight {
+  @apply relative z-0;
+}
+.highlight:hover > .copy-button {
+  @apply visible;
+}
+.copy-button {
+  @apply absolute top-0 right-0 z-10 invisible w-20 py-1 font-mono text-sm cursor-pointer opacity-90 bg-neutral-200 whitespace-nowrap rounded-bl-md rounded-tr-md text-neutral-700 dark:bg-neutral-600 dark:text-neutral-200;
+}
+.copy-button:hover,
+.copy-button:focus,
+.copy-button:active,
+.copy-button:active:hover {
+  @apply bg-primary-100 dark:bg-primary-600;
+}
+.copy-textarea {
+  @apply absolute opacity-5 -z-10;
+}
+
+/* -- Chroma Highlight -- */
+/* Background */
+.prose .chroma {
+  @apply static rounded-md text-neutral-700 bg-neutral-50 dark:bg-neutral-700 dark:text-neutral-200;
+}
+/* LineTableTD */
+.chroma .lntd,
+.chroma .lntd pre {
+  @apply p-0 m-0 align-top border-none;
+}
+/* LineTable */
+.chroma .lntable {
+  @apply block w-auto px-4 py-3 overflow-hidden text-base;
+  border-spacing: 0;
+}
+/* LineHighlight */
+.chroma .hl {
+  @apply block w-auto px-4 -mx-4 bg-primary-100 dark:bg-primary-900;
+}
+.chroma .lntd .hl {
+  @apply p-0 m-0;
+}
+/* LineNumbersTable */
+/* LineNumbers */
+.chroma .lnt,
+.chroma .ln {
+  @apply text-neutral-600 dark:text-neutral-300  mr-[0.4em] px-[0.4em] py-0;
+}
+/* Keyword */
+/* KeywordDeclaration */
+/* KeywordNamespace */
+/* KeywordPseudo */
+/* KeywordReserved */
+/* NameClass */
+/* NameFunctionMagic */
+/* NameNamespace */
+/* NameVariableClass */
+/* Operator */
+.chroma .k,
+.chroma .kd,
+.chroma .kn,
+.chroma .kp,
+.chroma .kr,
+.chroma .nc,
+.chroma .fm,
+.chroma .nn,
+.chroma .vc,
+.chroma .o {
+  @apply text-primary-600 dark:text-primary-300;
+}
+/* KeywordConstant */
+.chroma .kc {
+  @apply font-semibold text-secondary-400 dark:text-secondary-500;
+}
+/* KeywordType */
+/* NameVariable */
+/* NameVariableInstance */
+/* NameVariableMagic */
+/* LiteralNumber */
+/* LiteralNumberBin */
+/* LiteralNumberFloat */
+/* LiteralNumberHex */
+/* LiteralNumberInteger */
+/* LiteralNumberIntegerLong */
+/* LiteralNumberOct */
+.chroma .kt,
+.chroma .nv,
+.chroma .vi,
+.chroma .vm,
+.chroma .m,
+.chroma .mb,
+.chroma .mf,
+.chroma .mh,
+.chroma .mi,
+.chroma .il,
+.chroma .mo {
+  @apply text-secondary-400 dark:text-secondary-600;
+}
+/* Name */
+/* NameDecorator */
+/* NameEntity */
+/* NameLabel */
+.chroma .n,
+.chroma .nd,
+.chroma .ni,
+.chroma .nl {
+  @apply text-secondary-900 dark:text-secondary-200;
+}
+/* NameAttribute */
+/* NameBuiltin */
+/* NameBuiltinPseudo */
+/* NameOther */
+/* NameProperty */
+/* NameTag */
+.chroma .na,
+.chroma .nb,
+.chroma .bp,
+.chroma .nx,
+.chroma .py,
+.chroma .nt {
+  @apply text-secondary-800 dark:text-secondary-300;
+}
+/* NameConstant */
+/* NameException */
+/* NameVariableGlobal */
+.chroma .no,
+.chroma .ne,
+.chroma .vg {
+  @apply font-semibold text-secondary-400 dark:text-secondary-500;
+}
+/* NameFunction */
+.chroma .nf {
+  @apply text-secondary-600 dark:text-secondary-500;
+}
+/* Literal */
+/* LiteralDate */
+/* LiteralString */
+/* LiteralStringAffix */
+/* LiteralStringBacktick */
+/* LiteralStringChar */
+/* LiteralStringDelimiter */
+/* LiteralStringDoc */
+/* LiteralStringDouble */
+/* LiteralStringHeredoc */
+/* LiteralStringInterpol */
+/* LiteralStringOther */
+/* LiteralStringSingle */
+/* GenericInserted */
+/* GenericOutput */
+/* GenericPrompt */
+.chroma .l,
+.chroma .ld,
+.chroma .s,
+.chroma .sa,
+.chroma .sb,
+.chroma .sc,
+.chroma .dl,
+.chroma .sd,
+.chroma .s2,
+.chroma .sh,
+.chroma .si,
+.chroma .sx,
+.chroma .s1,
+.chroma .gi,
+.chroma .go,
+.chroma .gp {
+  @apply text-primary-800 dark:text-primary-400;
+}
+/* LiteralStringEscape */
+.chroma .se {
+  @apply font-semibold text-secondary-400 dark:text-secondary-500;
+}
+/* LiteralStringRegex */
+/* LiteralStringSymbol */
+.chroma .sr,
+.chroma .ss {
+  @apply font-semibold text-primary-800 dark:text-primary-400;
+}
+/* OperatorWord */
+.chroma .ow {
+  @apply font-semibold text-primary-400 dark:text-primary-600;
+}
+/* Comment */
+/* CommentMultiline */
+/* CommentSingle */
+/* CommentSpecial */
+/* CommentPreproc */
+/* CommentPreprocFile */
+.chroma .c,
+.chroma .cm,
+.chroma .c1,
+.chroma .cs,
+.chroma .cp,
+.chroma .cpf {
+  @apply italic text-neutral-500 dark:text-neutral-400;
+}
+/* CommentHashbang */
+.chroma .ch {
+  @apply italic font-semibold text-neutral-500 dark:text-neutral-400;
+}
+/* GenericEmph */
+.chroma .ge {
+  @apply italic;
+}
+/* GenericHeading */
+.chroma .gh {
+  @apply font-semibold text-neutral-500;
+}
+/* GenericStrong */
+.chroma .gs {
+  @apply font-semibold;
+}
+/* GenericSubheading */
+/* GenericTraceback */
+.chroma .gu,
+.chroma .gt {
+  @apply text-neutral-500;
+}
+/* GenericUnderline */
+.chroma .gl {
+  @apply underline;
+}
+
+@tailwind utilities;
diff --git a/web/themes/congo/assets/css/schemes/avocado.css b/web/themes/congo/assets/css/schemes/avocado.css
new file mode 100644
index 0000000000000000000000000000000000000000..911e895de750d344939e3e7683685b56d82b4819
--- /dev/null
+++ b/web/themes/congo/assets/css/schemes/avocado.css
@@ -0,0 +1,37 @@
+/* Avocado scheme */
+:root {
+  --color-neutral: 255, 255, 255;
+  /* Stone */
+  --color-neutral-50: 250, 250, 249;
+  --color-neutral-100: 245, 245, 244;
+  --color-neutral-200: 231, 229, 228;
+  --color-neutral-300: 214, 211, 209;
+  --color-neutral-400: 168, 162, 158;
+  --color-neutral-500: 120, 113, 108;
+  --color-neutral-600: 87, 83, 78;
+  --color-neutral-700: 68, 64, 60;
+  --color-neutral-800: 41, 37, 36;
+  --color-neutral-900: 28, 25, 23;
+  /* Lime */
+  --color-primary-50: 247, 254, 231;
+  --color-primary-100: 236, 252, 203;
+  --color-primary-200: 217, 249, 157;
+  --color-primary-300: 190, 242, 100;
+  --color-primary-400: 163, 230, 53;
+  --color-primary-500: 132, 204, 22;
+  --color-primary-600: 101, 163, 13;
+  --color-primary-700: 77, 124, 15;
+  --color-primary-800: 63, 98, 18;
+  --color-primary-900: 54, 83, 20;
+  /* Emerald */
+  --color-secondary-50: 236, 253, 245;
+  --color-secondary-100: 209, 250, 229;
+  --color-secondary-200: 167, 243, 208;
+  --color-secondary-300: 110, 231, 183;
+  --color-secondary-400: 52, 211, 153;
+  --color-secondary-500: 16, 185, 129;
+  --color-secondary-600: 5, 150, 105;
+  --color-secondary-700: 4, 120, 87;
+  --color-secondary-800: 6, 95, 70;
+  --color-secondary-900: 6, 78, 59;
+}
diff --git a/web/themes/congo/assets/css/schemes/congo.css b/web/themes/congo/assets/css/schemes/congo.css
new file mode 100644
index 0000000000000000000000000000000000000000..375ef7b3802c6c370eca1eef7e6015ac56b82ebb
--- /dev/null
+++ b/web/themes/congo/assets/css/schemes/congo.css
@@ -0,0 +1,37 @@
+/* Congo scheme */
+:root {
+  --color-neutral: 255, 255, 255;
+  /* Gray */
+  --color-neutral-50: 250, 250, 250;
+  --color-neutral-100: 244, 244, 245;
+  --color-neutral-200: 228, 228, 231;
+  --color-neutral-300: 212, 212, 216;
+  --color-neutral-400: 161, 161, 170;
+  --color-neutral-500: 113, 113, 122;
+  --color-neutral-600: 82, 82, 91;
+  --color-neutral-700: 63, 63, 70;
+  --color-neutral-800: 39, 39, 42;
+  --color-neutral-900: 24, 24, 27;
+  /* Violet */
+  --color-primary-50: 245, 243, 255;
+  --color-primary-100: 237, 233, 254;
+  --color-primary-200: 221, 214, 254;
+  --color-primary-300: 196, 181, 253;
+  --color-primary-400: 167, 139, 250;
+  --color-primary-500: 139, 92, 246;
+  --color-primary-600: 124, 58, 237;
+  --color-primary-700: 109, 40, 217;
+  --color-primary-800: 91, 33, 182;
+  --color-primary-900: 76, 29, 149;
+  /* Fuchsia */
+  --color-secondary-50: 253, 244, 255;
+  --color-secondary-100: 250, 232, 255;
+  --color-secondary-200: 245, 208, 254;
+  --color-secondary-300: 240, 171, 252;
+  --color-secondary-400: 232, 121, 249;
+  --color-secondary-500: 217, 70, 239;
+  --color-secondary-600: 192, 38, 211;
+  --color-secondary-700: 162, 28, 175;
+  --color-secondary-800: 134, 25, 143;
+  --color-secondary-900: 112, 26, 117;
+}
diff --git a/web/themes/congo/assets/css/schemes/fire.css b/web/themes/congo/assets/css/schemes/fire.css
new file mode 100644
index 0000000000000000000000000000000000000000..ed69d5cb5c39873d9c4994b50438afb69504d5b8
--- /dev/null
+++ b/web/themes/congo/assets/css/schemes/fire.css
@@ -0,0 +1,37 @@
+/* Fire scheme */
+:root {
+  --color-neutral: 255, 255, 255;
+  /* Stone */
+  --color-neutral-50: 250, 250, 249;
+  --color-neutral-100: 245, 245, 244;
+  --color-neutral-200: 231, 229, 228;
+  --color-neutral-300: 214, 211, 209;
+  --color-neutral-400: 168, 162, 158;
+  --color-neutral-500: 120, 113, 108;
+  --color-neutral-600: 87, 83, 78;
+  --color-neutral-700: 68, 64, 60;
+  --color-neutral-800: 41, 37, 36;
+  --color-neutral-900: 28, 25, 23;
+  /* Orange */
+  --color-primary-50: 255, 247, 237;
+  --color-primary-100: 255, 237, 213;
+  --color-primary-200: 254, 215, 170;
+  --color-primary-300: 253, 186, 116;
+  --color-primary-400: 251, 146, 60;
+  --color-primary-500: 249, 115, 22;
+  --color-primary-600: 234, 88, 12;
+  --color-primary-700: 194, 65, 12;
+  --color-primary-800: 154, 52, 18;
+  --color-primary-900: 124, 45, 18;
+  /* Rose */
+  --color-secondary-50: 255, 241, 242;
+  --color-secondary-100: 255, 228, 230;
+  --color-secondary-200: 254, 205, 211;
+  --color-secondary-300: 253, 164, 175;
+  --color-secondary-400: 251, 113, 133;
+  --color-secondary-500: 244, 63, 94;
+  --color-secondary-600: 225, 29, 72;
+  --color-secondary-700: 190, 18, 60;
+  --color-secondary-800: 159, 18, 57;
+  --color-secondary-900: 136, 19, 55;
+}
diff --git a/web/themes/congo/assets/css/schemes/ocean.css b/web/themes/congo/assets/css/schemes/ocean.css
new file mode 100644
index 0000000000000000000000000000000000000000..cc6d2d6d694a9d682f24322c7b0f2282427e7a9e
--- /dev/null
+++ b/web/themes/congo/assets/css/schemes/ocean.css
@@ -0,0 +1,37 @@
+/* Ocean scheme */
+:root {
+  --color-neutral: 255, 255, 255;
+  /* Gray */
+  --color-neutral-50: 248, 250, 252;
+  --color-neutral-100: 241, 245, 249;
+  --color-neutral-200: 226, 232, 240;
+  --color-neutral-300: 203, 213, 225;
+  --color-neutral-400: 148, 163, 184;
+  --color-neutral-500: 100, 116, 139;
+  --color-neutral-600: 71, 85, 105;
+  --color-neutral-700: 51, 65, 85;
+  --color-neutral-800: 30, 41, 59;
+  --color-neutral-900: 15, 23, 42;
+  /* Blue */
+  --color-primary-50: 239, 246, 255;
+  --color-primary-100: 219, 234, 254;
+  --color-primary-200: 191, 219, 254;
+  --color-primary-300: 147, 197, 253;
+  --color-primary-400: 96, 165, 250;
+  --color-primary-500: 59, 130, 246;
+  --color-primary-600: 37, 99, 235;
+  --color-primary-700: 29, 78, 216;
+  --color-primary-800: 30, 64, 175;
+  --color-primary-900: 30, 58, 138;
+  /* Cyan */
+  --color-secondary-50: 236, 254, 255;
+  --color-secondary-100: 207, 250, 254;
+  --color-secondary-200: 165, 243, 252;
+  --color-secondary-300: 103, 232, 249;
+  --color-secondary-400: 34, 211, 238;
+  --color-secondary-500: 6, 182, 212;
+  --color-secondary-600: 8, 145, 178;
+  --color-secondary-700: 14, 116, 144;
+  --color-secondary-800: 21, 94, 117;
+  --color-secondary-900: 22, 78, 99;
+}
diff --git a/web/themes/congo/assets/css/schemes/slate.css b/web/themes/congo/assets/css/schemes/slate.css
new file mode 100644
index 0000000000000000000000000000000000000000..54831e86e50270872f7f76b49e2e834bbf5b9cfc
--- /dev/null
+++ b/web/themes/congo/assets/css/schemes/slate.css
@@ -0,0 +1,37 @@
+/* Slate scheme */
+:root {
+  --color-neutral: 255, 255, 255;
+  /* Gray */
+  --color-neutral-50: 249, 250, 251;
+  --color-neutral-100: 243, 244, 246;
+  --color-neutral-200: 229, 231, 235;
+  --color-neutral-300: 209, 213, 219;
+  --color-neutral-400: 156, 163, 175;
+  --color-neutral-500: 107, 114, 128;
+  --color-neutral-600: 75, 85, 99;
+  --color-neutral-700: 55, 65, 81;
+  --color-neutral-800: 31, 41, 55;
+  --color-neutral-900: 17, 24, 39;
+  /* Slate */
+  --color-primary-50: 248, 250, 252;
+  --color-primary-100: 241, 245, 249;
+  --color-primary-200: 226, 232, 240;
+  --color-primary-300: 203, 213, 225;
+  --color-primary-400: 148, 163, 184;
+  --color-primary-500: 100, 116, 139;
+  --color-primary-600: 71, 85, 105;
+  --color-primary-700: 51, 65, 85;
+  --color-primary-800: 30, 41, 59;
+  --color-primary-900: 15, 23, 42;
+  /* Gray */
+  --color-secondary-50: 249, 250, 251;
+  --color-secondary-100: 243, 244, 246;
+  --color-secondary-200: 229, 231, 235;
+  --color-secondary-300: 209, 213, 219;
+  --color-secondary-400: 156, 163, 175;
+  --color-secondary-500: 107, 114, 128;
+  --color-secondary-600: 75, 85, 99;
+  --color-secondary-700: 55, 65, 81;
+  --color-secondary-800: 31, 41, 55;
+  --color-secondary-900: 17, 24, 39;
+}
diff --git a/web/themes/congo/assets/icons/amazon.svg b/web/themes/congo/assets/icons/amazon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..32047db587b0779bd129dcadf68a5c17c7c13604
--- /dev/null
+++ b/web/themes/congo/assets/icons/amazon.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z"/></svg>
diff --git a/web/themes/congo/assets/icons/apple.svg b/web/themes/congo/assets/icons/apple.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d1c2233de4ff129221102c76de7c89c08a9c4d09
--- /dev/null
+++ b/web/themes/congo/assets/icons/apple.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/></svg>
diff --git a/web/themes/congo/assets/icons/bars.svg b/web/themes/congo/assets/icons/bars.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6e5941dab12bcb2c404629ad37df01ed52db099f
--- /dev/null
+++ b/web/themes/congo/assets/icons/bars.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.33 14.33 64 32 64H416C433.7 64 448 78.33 448 96C448 113.7 433.7 128 416 128H32C14.33 128 0 113.7 0 96zM0 256C0 238.3 14.33 224 32 224H416C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288H32C14.33 288 0 273.7 0 256zM416 448H32C14.33 448 0 433.7 0 416C0 398.3 14.33 384 32 384H416C433.7 384 448 398.3 448 416C448 433.7 433.7 448 416 448z"/></svg>
diff --git a/web/themes/congo/assets/icons/blogger.svg b/web/themes/congo/assets/icons/blogger.svg
new file mode 100644
index 0000000000000000000000000000000000000000..194dd9b9876cd5371eedf127b7dd7a179113c3d7
--- /dev/null
+++ b/web/themes/congo/assets/icons/blogger.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M446.6 222.7c-1.8-8-6.8-15.4-12.5-18.5-1.8-1-13-2.2-25-2.7-20.1-.9-22.3-1.3-28.7-5-10.1-5.9-12.8-12.3-12.9-29.5-.1-33-13.8-63.7-40.9-91.3-19.3-19.7-40.9-33-65.5-40.5-5.9-1.8-19.1-2.4-63.3-2.9-69.4-.8-84.8.6-108.4 10C45.9 59.5 14.7 96.1 3.3 142.9 1.2 151.7.7 165.8.2 246.8c-.6 101.5.1 116.4 6.4 136.5 15.6 49.6 59.9 86.3 104.4 94.3 14.8 2.7 197.3 3.3 216 .8 32.5-4.4 58-17.5 81.9-41.9 17.3-17.7 28.1-36.8 35.2-62.1 4.9-17.6 4.5-142.8 2.5-151.7zm-322.1-63.6c7.8-7.9 10-8.2 58.8-8.2 43.9 0 45.4.1 51.8 3.4 9.3 4.7 13.4 11.3 13.4 21.9 0 9.5-3.8 16.2-12.3 21.6-4.6 2.9-7.3 3.1-50.3 3.3-26.5.2-47.7-.4-50.8-1.2-16.6-4.7-22.8-28.5-10.6-40.8zm191.8 199.8l-14.9 2.4-77.5.9c-68.1.8-87.3-.4-90.9-2-7.1-3.1-13.8-11.7-14.9-19.4-1.1-7.3 2.6-17.3 8.2-22.4 7.1-6.4 10.2-6.6 97.3-6.7 89.6-.1 89.1-.1 97.6 7.8 12.1 11.3 9.5 31.2-4.9 39.4z"/></svg>
diff --git a/web/themes/congo/assets/icons/bug.svg b/web/themes/congo/assets/icons/bug.svg
new file mode 100644
index 0000000000000000000000000000000000000000..97cae6eaf30b474c56be6a39e492777720c02558
--- /dev/null
+++ b/web/themes/congo/assets/icons/bug.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M352 96V99.56C352 115.3 339.3 128 323.6 128H188.4C172.7 128 159.1 115.3 159.1 99.56V96C159.1 42.98 202.1 0 255.1 0C309 0 352 42.98 352 96zM41.37 105.4C53.87 92.88 74.13 92.88 86.63 105.4L150.6 169.4C151.3 170 151.9 170.7 152.5 171.4C166.8 164.1 182.9 160 199.1 160H312C329.1 160 345.2 164.1 359.5 171.4C360.1 170.7 360.7 170 361.4 169.4L425.4 105.4C437.9 92.88 458.1 92.88 470.6 105.4C483.1 117.9 483.1 138.1 470.6 150.6L406.6 214.6C405.1 215.3 405.3 215.9 404.6 216.5C410.7 228.5 414.6 241.9 415.7 256H480C497.7 256 512 270.3 512 288C512 305.7 497.7 320 480 320H416C416 344.6 410.5 367.8 400.6 388.6C402.7 389.9 404.8 391.5 406.6 393.4L470.6 457.4C483.1 469.9 483.1 490.1 470.6 502.6C458.1 515.1 437.9 515.1 425.4 502.6L362.3 439.6C337.8 461.4 306.5 475.8 272 479.2V240C272 231.2 264.8 224 255.1 224C247.2 224 239.1 231.2 239.1 240V479.2C205.5 475.8 174.2 461.4 149.7 439.6L86.63 502.6C74.13 515.1 53.87 515.1 41.37 502.6C28.88 490.1 28.88 469.9 41.37 457.4L105.4 393.4C107.2 391.5 109.3 389.9 111.4 388.6C101.5 367.8 96 344.6 96 320H32C14.33 320 0 305.7 0 288C0 270.3 14.33 256 32 256H96.3C97.38 241.9 101.3 228.5 107.4 216.5C106.7 215.9 106 215.3 105.4 214.6L41.37 150.6C28.88 138.1 28.88 117.9 41.37 105.4H41.37z"/></svg>
diff --git a/web/themes/congo/assets/icons/check.svg b/web/themes/congo/assets/icons/check.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a6938bd8108a03f746db0ed520fe3f47a20b4fcd
--- /dev/null
+++ b/web/themes/congo/assets/icons/check.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M438.6 105.4C451.1 117.9 451.1 138.1 438.6 150.6L182.6 406.6C170.1 419.1 149.9 419.1 137.4 406.6L9.372 278.6C-3.124 266.1-3.124 245.9 9.372 233.4C21.87 220.9 42.13 220.9 54.63 233.4L159.1 338.7L393.4 105.4C405.9 92.88 426.1 92.88 438.6 105.4H438.6z"/></svg>
diff --git a/web/themes/congo/assets/icons/circle-info.svg b/web/themes/congo/assets/icons/circle-info.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bd32225a1c2ee8c02730fbfc66bec2f19e4aa248
--- /dev/null
+++ b/web/themes/congo/assets/icons/circle-info.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 0C114.6 0 0 114.6 0 256s114.6 256 256 256s256-114.6 256-256S397.4 0 256 0zM256 128c17.67 0 32 14.33 32 32c0 17.67-14.33 32-32 32S224 177.7 224 160C224 142.3 238.3 128 256 128zM296 384h-80C202.8 384 192 373.3 192 360s10.75-24 24-24h16v-64H224c-13.25 0-24-10.75-24-24S210.8 224 224 224h32c13.25 0 24 10.75 24 24v88h16c13.25 0 24 10.75 24 24S309.3 384 296 384z"/></svg>
diff --git a/web/themes/congo/assets/icons/codepen.svg b/web/themes/congo/assets/icons/codepen.svg
new file mode 100644
index 0000000000000000000000000000000000000000..52ec58aedbc6e5ec9d0669d96b4f2911e05c4b2e
--- /dev/null
+++ b/web/themes/congo/assets/icons/codepen.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z"/></svg>
diff --git a/web/themes/congo/assets/icons/comment.svg b/web/themes/congo/assets/icons/comment.svg
new file mode 100644
index 0000000000000000000000000000000000000000..23050411253ab9a53d87f2fd8f90122556f7c2c7
--- /dev/null
+++ b/web/themes/congo/assets/icons/comment.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 32C114.6 32 .0272 125.1 .0272 240c0 49.63 21.35 94.98 56.97 130.7c-12.5 50.37-54.27 95.27-54.77 95.77c-2.25 2.25-2.875 5.734-1.5 8.734C1.979 478.2 4.75 480 8 480c66.25 0 115.1-31.76 140.6-51.39C181.2 440.9 217.6 448 256 448c141.4 0 255.1-93.13 255.1-208S397.4 32 256 32z"/></svg>
diff --git a/web/themes/congo/assets/icons/dev.svg b/web/themes/congo/assets/icons/dev.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7311e842d6ab44a316ac6cf87acc57fd83f2592c
--- /dev/null
+++ b/web/themes/congo/assets/icons/dev.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M120.12 208.29c-3.88-2.9-7.77-4.35-11.65-4.35H91.03v104.47h17.45c3.88 0 7.77-1.45 11.65-4.35 3.88-2.9 5.82-7.25 5.82-13.06v-69.65c-.01-5.8-1.96-10.16-5.83-13.06zM404.1 32H43.9C19.7 32 .06 51.59 0 75.8v360.4C.06 460.41 19.7 480 43.9 480h360.2c24.21 0 43.84-19.59 43.9-43.8V75.8c-.06-24.21-19.7-43.8-43.9-43.8zM154.2 291.19c0 18.81-11.61 47.31-48.36 47.25h-46.4V172.98h47.38c35.44 0 47.36 28.46 47.37 47.28l.01 70.93zm100.68-88.66H201.6v38.42h32.57v29.57H201.6v38.41h53.29v29.57h-62.18c-11.16.29-20.44-8.53-20.72-19.69V193.7c-.27-11.15 8.56-20.41 19.71-20.69h63.19l-.01 29.52zm103.64 115.29c-13.2 30.75-36.85 24.63-47.44 0l-38.53-144.8h32.57l29.71 113.72 29.57-113.72h32.58l-38.46 144.8z"/></svg>
diff --git a/web/themes/congo/assets/icons/discord.svg b/web/themes/congo/assets/icons/discord.svg
new file mode 100644
index 0000000000000000000000000000000000000000..75f1fc71baeb06fd98a1fe1d4c8a232b1a494d9f
--- /dev/null
+++ b/web/themes/congo/assets/icons/discord.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"/></svg>
diff --git a/web/themes/congo/assets/icons/dribbble.svg b/web/themes/congo/assets/icons/dribbble.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c2613fedc9ef9b7305b5dfc1bf93682dd0a44c8d
--- /dev/null
+++ b/web/themes/congo/assets/icons/dribbble.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 8C119.252 8 8 119.252 8 256s111.252 248 248 248 248-111.252 248-248S392.748 8 256 8zm163.97 114.366c29.503 36.046 47.369 81.957 47.835 131.955-6.984-1.477-77.018-15.682-147.502-6.818-5.752-14.041-11.181-26.393-18.617-41.614 78.321-31.977 113.818-77.482 118.284-83.523zM396.421 97.87c-3.81 5.427-35.697 48.286-111.021 76.519-34.712-63.776-73.185-116.168-79.04-124.008 67.176-16.193 137.966 1.27 190.061 47.489zm-230.48-33.25c5.585 7.659 43.438 60.116 78.537 122.509-99.087 26.313-186.36 25.934-195.834 25.809C62.38 147.205 106.678 92.573 165.941 64.62zM44.17 256.323c0-2.166.043-4.322.108-6.473 9.268.19 111.92 1.513 217.706-30.146 6.064 11.868 11.857 23.915 17.174 35.949-76.599 21.575-146.194 83.527-180.531 142.306C64.794 360.405 44.17 310.73 44.17 256.323zm81.807 167.113c22.127-45.233 82.178-103.622 167.579-132.756 29.74 77.283 42.039 142.053 45.189 160.638-68.112 29.013-150.015 21.053-212.768-27.882zm248.38 8.489c-2.171-12.886-13.446-74.897-41.152-151.033 66.38-10.626 124.7 6.768 131.947 9.055-9.442 58.941-43.273 109.844-90.795 141.978z"/></svg>
diff --git a/web/themes/congo/assets/icons/edit.svg b/web/themes/congo/assets/icons/edit.svg
new file mode 100644
index 0000000000000000000000000000000000000000..82a60358bf2d2709e5023aed263ce66c8118ca3c
--- /dev/null
+++ b/web/themes/congo/assets/icons/edit.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M490.3 40.4C512.2 62.27 512.2 97.73 490.3 119.6L460.3 149.7L362.3 51.72L392.4 21.66C414.3-.2135 449.7-.2135 471.6 21.66L490.3 40.4zM172.4 241.7L339.7 74.34L437.7 172.3L270.3 339.6C264.2 345.8 256.7 350.4 248.4 353.2L159.6 382.8C150.1 385.6 141.5 383.4 135 376.1C128.6 370.5 126.4 361 129.2 352.4L158.8 263.6C161.6 255.3 166.2 247.8 172.4 241.7V241.7zM192 63.1C209.7 63.1 224 78.33 224 95.1C224 113.7 209.7 127.1 192 127.1H96C78.33 127.1 64 142.3 64 159.1V416C64 433.7 78.33 448 96 448H352C369.7 448 384 433.7 384 416V319.1C384 302.3 398.3 287.1 416 287.1C433.7 287.1 448 302.3 448 319.1V416C448 469 405 512 352 512H96C42.98 512 0 469 0 416V159.1C0 106.1 42.98 63.1 96 63.1H192z"/></svg>
diff --git a/web/themes/congo/assets/icons/email.svg b/web/themes/congo/assets/icons/email.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fa215c60e20ec6a541506e5c20758e48a14522d3
--- /dev/null
+++ b/web/themes/congo/assets/icons/email.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M207.8 20.73c-93.45 18.32-168.7 93.66-187 187.1c-27.64 140.9 68.65 266.2 199.1 285.1c19.01 2.888 36.17-12.26 36.17-31.49l.0001-.6631c0-15.74-11.44-28.88-26.84-31.24c-84.35-12.98-149.2-86.13-149.2-174.2c0-102.9 88.61-185.5 193.4-175.4c91.54 8.869 158.6 91.25 158.6 183.2l0 16.16c0 22.09-17.94 40.05-40 40.05s-40.01-17.96-40.01-40.05v-120.1c0-8.847-7.161-16.02-16.01-16.02l-31.98 .0036c-7.299 0-13.2 4.992-15.12 11.68c-24.85-12.15-54.24-16.38-86.06-5.106c-38.75 13.73-68.12 48.91-73.72 89.64c-9.483 69.01 43.81 128 110.9 128c26.44 0 50.43-9.544 69.59-24.88c24 31.3 65.23 48.69 109.4 37.49C465.2 369.3 496 324.1 495.1 277.2V256.3C495.1 107.1 361.2-9.332 207.8 20.73zM239.1 304.3c-26.47 0-48-21.56-48-48.05s21.53-48.05 48-48.05s48 21.56 48 48.05S266.5 304.3 239.1 304.3z"/></svg>
diff --git a/web/themes/congo/assets/icons/facebook.svg b/web/themes/congo/assets/icons/facebook.svg
new file mode 100644
index 0000000000000000000000000000000000000000..15358317ddd9b962998b709c7729c5c0210bee2b
--- /dev/null
+++ b/web/themes/congo/assets/icons/facebook.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z"/></svg>
diff --git a/web/themes/congo/assets/icons/flickr.svg b/web/themes/congo/assets/icons/flickr.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fcd57c4c8c5ccfaf64b9ef7ac9fadb7cf2431210
--- /dev/null
+++ b/web/themes/congo/assets/icons/flickr.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z"/></svg>
diff --git a/web/themes/congo/assets/icons/foursquare.svg b/web/themes/congo/assets/icons/foursquare.svg
new file mode 100644
index 0000000000000000000000000000000000000000..74c28e678f3a1385691a3daacdaf39dfd629fff7
--- /dev/null
+++ b/web/themes/congo/assets/icons/foursquare.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 368 512"><path fill="currentColor" d="M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z"/></svg>
diff --git a/web/themes/congo/assets/icons/github.svg b/web/themes/congo/assets/icons/github.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ed8c470fe0d977de392bcfb6209163a0c62128e2
--- /dev/null
+++ b/web/themes/congo/assets/icons/github.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
diff --git a/web/themes/congo/assets/icons/gitlab.svg b/web/themes/congo/assets/icons/gitlab.svg
new file mode 100644
index 0000000000000000000000000000000000000000..998e306de9c1fd3eac8a8f088b7d8e86242cae50
--- /dev/null
+++ b/web/themes/congo/assets/icons/gitlab.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M510.486,284.482l-27.262-83.963c.012.038.016.077.028.115-.013-.044-.021-.088-.033-.132v-.01L429.1,33.871a21.328,21.328,0,0,0-20.445-14.6A21.038,21.038,0,0,0,388.466,34L337.094,192.154H175L123.533,33.989A21.033,21.033,0,0,0,103.35,19.274h-.113A21.467,21.467,0,0,0,82.86,34L28.888,200.475l-.008.021v0c-.013.042-.019.084-.033.127.012-.038.017-.077.029-.115L1.514,284.482a30.6,30.6,0,0,0,11.117,34.283L248.893,490.427c.035.026.074.041.109.067.1.072.2.146.3.214-.1-.065-.187-.136-.282-.2l0,0c.015.012.033.02.05.031s.027.015.041.024l.006,0a11.992,11.992,0,0,0,1.137.7c.054.03.1.068.157.1l0,0c.033.016.064.038.1.054s.053.02.077.032.038.015.056.023c.044.021.092.034.136.057.205.1.421.178.633.264.2.082.389.177.592.248l.025.011c.034.012.064.028.1.04s.083.032.125.046l.05.012c.053.016.11.024.163.039.019.006.042.009.063.015.284.086.579.148.872.213.115.026.225.062.341.083.017,0,.032.009.05.012.038.008.073.021.112.027.062.011.122.031.186.04.049.007.1,0,.151.012h.033a11.918,11.918,0,0,0,1.7.136h.019a11.971,11.971,0,0,0,1.7-.136h.033c.05-.008.1,0,.153-.012s.124-.029.187-.04c.038-.006.073-.019.11-.027.017,0,.032-.009.049-.012.118-.023.231-.059.349-.084.288-.064.578-.126.861-.21.019-.006.039-.008.059-.014.055-.017.113-.024.169-.041.016-.006.035-.007.051-.012.044-.013.086-.032.129-.047s.063-.028.1-.041l.026-.01c.214-.076.417-.175.627-.261s.394-.154.584-.245c.047-.023.1-.036.142-.059.018-.009.04-.015.058-.024s.053-.02.078-.033.068-.04.1-.056l0,0c.056-.028.106-.069.161-.1a12.341,12.341,0,0,0,1.132-.695c.029-.02.062-.035.092-.056.008-.006.017-.009.024-.015.035-.026.076-.043.11-.068l236.3-171.666A30.6,30.6,0,0,0,510.486,284.482ZM408.8,49.48l46.342,142.674H362.46Zm-305.6,0,46.428,142.675H56.948ZM26.817,299.251a6.526,6.526,0,0,1-2.361-7.308l20.34-62.42L193.835,420.6Zm38.245-82.972h92.411L223.354,419.22Zm183.416,273.83c-.047-.038-.092-.079-.138-.118-.009-.008-.018-.018-.028-.026-.091-.075-.18-.152-.268-.231-.172-.15-.341-.3-.5-.462.014.012.029.022.043.035l.055.046a12.191,12.191,0,0,0,1.091.929l.012.011c.018.013.033.03.051.045C248.689,490.263,248.58,490.19,248.478,490.109Zm7.514-48.482L217.226,322.21,182.839,216.279H329.253Zm7.935,48.107c-.091.079-.178.157-.27.233l-.032.028c-.047.038-.091.079-.136.117-.1.08-.209.152-.313.229.018-.013.033-.032.053-.044l.009-.009a11.69,11.69,0,0,0,1.086-.926c.014-.013.03-.024.044-.036s.038-.03.054-.047C264.262,489.435,264.1,489.586,263.927,489.734Zm90.7-273.455h92.4l-18.91,24.23-139.468,178.7Zm130.567,82.967L318.2,420.563,467.284,229.538l20.258,62.393A6.528,6.528,0,0,1,485.189,299.246Z"/></svg>
diff --git a/web/themes/congo/assets/icons/google.svg b/web/themes/congo/assets/icons/google.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7e10132bd0c9cd5a5598f3cd9399c35114066607
--- /dev/null
+++ b/web/themes/congo/assets/icons/google.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 488 512"><path fill="currentColor" d="M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z"/></svg>
diff --git a/web/themes/congo/assets/icons/hashnode.svg b/web/themes/congo/assets/icons/hashnode.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6ebe2db87f0acd07fd39871e0cc2a168cafbb06b
--- /dev/null
+++ b/web/themes/congo/assets/icons/hashnode.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M35.19 171.1C-11.72 217.1-11.72 294 35.19 340.9L171.1 476.8C217.1 523.7 294 523.7 340.9 476.8L476.8 340.9C523.7 294 523.7 217.1 476.8 171.1L340.9 35.19C294-11.72 217.1-11.72 171.1 35.19L35.19 171.1zM315.5 315.5C282.6 348.3 229.4 348.3 196.6 315.5C163.7 282.6 163.7 229.4 196.6 196.6C229.4 163.7 282.6 163.7 315.5 196.6C348.3 229.4 348.3 282.6 315.5 315.5z"/></svg>
diff --git a/web/themes/congo/assets/icons/instagram.svg b/web/themes/congo/assets/icons/instagram.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3cd3d33c7a80d0f9308de3bfb13707dd58ca3a78
--- /dev/null
+++ b/web/themes/congo/assets/icons/instagram.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z"/></svg>
diff --git a/web/themes/congo/assets/icons/keybase.svg b/web/themes/congo/assets/icons/keybase.svg
new file mode 100644
index 0000000000000000000000000000000000000000..998110e24390f310864849e1701b3345b0caf45d
--- /dev/null
+++ b/web/themes/congo/assets/icons/keybase.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.38-61.76 236.25-38.59 34.2 10.05 67.45.69 84.74-23.84.72-1 1.2-2.16 1.85-3.22a156.09 156.09 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.32c0-38.58-13-77.46-35.91-110.92zM142.37 128.58l-15.7-.93-1.39 21.79 13.13.78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1-11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.35 144.35 0 0 0-7 19.17zm148.42 172.18a10.51 10.51 0 0 1-14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1-11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1-10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.19s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1-1.74 13.44zM187.44 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18z"/></svg>
diff --git a/web/themes/congo/assets/icons/kickstarter.svg b/web/themes/congo/assets/icons/kickstarter.svg
new file mode 100644
index 0000000000000000000000000000000000000000..449698198ee168b5f73cb0a77890b32d55a1a23e
--- /dev/null
+++ b/web/themes/congo/assets/icons/kickstarter.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M147.3 114.4c0-56.2-32.5-82.4-73.4-82.4C26.2 32 0 68.2 0 113.4v283c0 47.3 25.3 83.4 74.9 83.4 39.8 0 72.4-25.6 72.4-83.4v-76.5l112.1 138.3c22.7 27.2 72.1 30.7 103.2 0 27-27.6 27.3-67.4 7.4-92.2l-90.8-114.8 74.9-107.4c17.4-24.7 17.5-63.1-10.4-89.8-30.3-29-82.4-31.6-113.6 12.8L147.3 185v-70.6z"/></svg>
diff --git a/web/themes/congo/assets/icons/lastfm.svg b/web/themes/congo/assets/icons/lastfm.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2b533418ae9c891b53eca419f9c532d5ed71caf9
--- /dev/null
+++ b/web/themes/congo/assets/icons/lastfm.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5 0-69.2-35.2-69.2-91.5 0-72.1 36.4-97.9 72.1-97.9 66.5 0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7 0 122-22.3 122-80.9 0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2 0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8 0-104.4 19.9-104.4 83.9 0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7 0 21.7-21.1 30.5-61 30.5-59.2 0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8 0 168.3 0 261c0 89.1 45.7 137.2 127.9 137.2 66.2 0 97.9-31.1 97.9-31.1z"/></svg>
diff --git a/web/themes/congo/assets/icons/lightbulb.svg b/web/themes/congo/assets/icons/lightbulb.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5ffc710ee42c38bbfa88b033dad2a032e068ee17
--- /dev/null
+++ b/web/themes/congo/assets/icons/lightbulb.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z"/></svg>
diff --git a/web/themes/congo/assets/icons/link.svg b/web/themes/congo/assets/icons/link.svg
new file mode 100644
index 0000000000000000000000000000000000000000..eb283c25d870c2657772b65768dd008b528544ef
--- /dev/null
+++ b/web/themes/congo/assets/icons/link.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M172.5 131.1C228.1 75.51 320.5 75.51 376.1 131.1C426.1 181.1 433.5 260.8 392.4 318.3L391.3 319.9C381 334.2 361 337.6 346.7 327.3C332.3 317 328.9 297 339.2 282.7L340.3 281.1C363.2 249 359.6 205.1 331.7 177.2C300.3 145.8 249.2 145.8 217.7 177.2L105.5 289.5C73.99 320.1 73.99 372 105.5 403.5C133.3 431.4 177.3 435 209.3 412.1L210.9 410.1C225.3 400.7 245.3 404 255.5 418.4C265.8 432.8 262.5 452.8 248.1 463.1L246.5 464.2C188.1 505.3 110.2 498.7 60.21 448.8C3.741 392.3 3.741 300.7 60.21 244.3L172.5 131.1zM467.5 380C411 436.5 319.5 436.5 263 380C213 330 206.5 251.2 247.6 193.7L248.7 192.1C258.1 177.8 278.1 174.4 293.3 184.7C307.7 194.1 311.1 214.1 300.8 229.3L299.7 230.9C276.8 262.1 280.4 306.9 308.3 334.8C339.7 366.2 390.8 366.2 422.3 334.8L534.5 222.5C566 191 566 139.1 534.5 108.5C506.7 80.63 462.7 76.99 430.7 99.9L429.1 101C414.7 111.3 394.7 107.1 384.5 93.58C374.2 79.2 377.5 59.21 391.9 48.94L393.5 47.82C451 6.731 529.8 13.25 579.8 63.24C636.3 119.7 636.3 211.3 579.8 267.7L467.5 380z"/></svg>
diff --git a/web/themes/congo/assets/icons/linkedin.svg b/web/themes/congo/assets/icons/linkedin.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4e3948b4261e0533499ef37f5b73c8b69383b287
--- /dev/null
+++ b/web/themes/congo/assets/icons/linkedin.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
diff --git a/web/themes/congo/assets/icons/list.svg b/web/themes/congo/assets/icons/list.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f7a7df4e0ed6b3699624ac4ca732dfc89f26b77d
--- /dev/null
+++ b/web/themes/congo/assets/icons/list.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M88 48C101.3 48 112 58.75 112 72V120C112 133.3 101.3 144 88 144H40C26.75 144 16 133.3 16 120V72C16 58.75 26.75 48 40 48H88zM480 64C497.7 64 512 78.33 512 96C512 113.7 497.7 128 480 128H192C174.3 128 160 113.7 160 96C160 78.33 174.3 64 192 64H480zM480 224C497.7 224 512 238.3 512 256C512 273.7 497.7 288 480 288H192C174.3 288 160 273.7 160 256C160 238.3 174.3 224 192 224H480zM480 384C497.7 384 512 398.3 512 416C512 433.7 497.7 448 480 448H192C174.3 448 160 433.7 160 416C160 398.3 174.3 384 192 384H480zM16 232C16 218.7 26.75 208 40 208H88C101.3 208 112 218.7 112 232V280C112 293.3 101.3 304 88 304H40C26.75 304 16 293.3 16 280V232zM88 368C101.3 368 112 378.7 112 392V440C112 453.3 101.3 464 88 464H40C26.75 464 16 453.3 16 440V392C16 378.7 26.75 368 40 368H88z"/></svg>
diff --git a/web/themes/congo/assets/icons/mastodon.svg b/web/themes/congo/assets/icons/mastodon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2c9db56bfc806979facfd2246ba6a812273e3684
--- /dev/null
+++ b/web/themes/congo/assets/icons/mastodon.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg>
diff --git a/web/themes/congo/assets/icons/medium.svg b/web/themes/congo/assets/icons/medium.svg
new file mode 100644
index 0000000000000000000000000000000000000000..07d095dec98850966b87a74c38ffa32ac9dcba29
--- /dev/null
+++ b/web/themes/congo/assets/icons/medium.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M180.5,74.262C80.813,74.262,0,155.633,0,256S80.819,437.738,180.5,437.738,361,356.373,361,256,280.191,74.262,180.5,74.262Zm288.25,10.646c-49.845,0-90.245,76.619-90.245,171.095s40.406,171.1,90.251,171.1,90.251-76.619,90.251-171.1H559C559,161.5,518.6,84.908,468.752,84.908Zm139.506,17.821c-17.526,0-31.735,68.628-31.735,153.274s14.2,153.274,31.735,153.274S640,340.631,640,256C640,171.351,625.785,102.729,608.258,102.729Z"/></svg>
diff --git a/web/themes/congo/assets/icons/microsoft.svg b/web/themes/congo/assets/icons/microsoft.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1bdb0c25b502290978badde3002c89fc7d06feff
--- /dev/null
+++ b/web/themes/congo/assets/icons/microsoft.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z"/></svg>
diff --git a/web/themes/congo/assets/icons/moon.svg b/web/themes/congo/assets/icons/moon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8356307aeb505d471ae39b4f65c2243a13d56e96
--- /dev/null
+++ b/web/themes/congo/assets/icons/moon.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M32 256c0-123.8 100.3-224 223.8-224c11.36 0 29.7 1.668 40.9 3.746c9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3c9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480C132.1 480 32 379.6 32 256z"/></svg>
diff --git a/web/themes/congo/assets/icons/orcid.svg b/web/themes/congo/assets/icons/orcid.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b7f1b25091048732558615d72c15949f8add43a9
--- /dev/null
+++ b/web/themes/congo/assets/icons/orcid.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M294.75 188.19h-45.92V342h47.47c67.62 0 83.12-51.34 83.12-76.91 0-41.64-26.54-76.9-84.67-76.9zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm-80.79 360.76h-29.84v-207.5h29.84zm-14.92-231.14a19.57 19.57 0 1 1 19.57-19.57 19.64 19.64 0 0 1-19.57 19.57zM300 369h-81V161.26h80.6c76.73 0 110.44 54.83 110.44 103.85C410 318.39 368.38 369 300 369z"/></svg>
diff --git a/web/themes/congo/assets/icons/patreon.svg b/web/themes/congo/assets/icons/patreon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bd2e99436de15e375ee7428bf36ad314210d892e
--- /dev/null
+++ b/web/themes/congo/assets/icons/patreon.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z"/></svg>
diff --git a/web/themes/congo/assets/icons/pencil.svg b/web/themes/congo/assets/icons/pencil.svg
new file mode 100644
index 0000000000000000000000000000000000000000..29bd52583facaf7e45f9566532d33fb8c31a242b
--- /dev/null
+++ b/web/themes/congo/assets/icons/pencil.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M421.7 220.3L188.5 453.4L154.6 419.5L158.1 416H112C103.2 416 96 408.8 96 400V353.9L92.51 357.4C87.78 362.2 84.31 368 82.42 374.4L59.44 452.6L137.6 429.6C143.1 427.7 149.8 424.2 154.6 419.5L188.5 453.4C178.1 463.8 165.2 471.5 151.1 475.6L30.77 511C22.35 513.5 13.24 511.2 7.03 504.1C.8198 498.8-1.502 489.7 .976 481.2L36.37 360.9C40.53 346.8 48.16 333.9 58.57 323.5L291.7 90.34L421.7 220.3zM492.7 58.75C517.7 83.74 517.7 124.3 492.7 149.3L444.3 197.7L314.3 67.72L362.7 19.32C387.7-5.678 428.3-5.678 453.3 19.32L492.7 58.75z"/></svg>
diff --git a/web/themes/congo/assets/icons/pinterest.svg b/web/themes/congo/assets/icons/pinterest.svg
new file mode 100644
index 0000000000000000000000000000000000000000..386481c04c3f0417b37f61d35c2fc92d931b0513
--- /dev/null
+++ b/web/themes/congo/assets/icons/pinterest.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z"/></svg>
diff --git a/web/themes/congo/assets/icons/reddit.svg b/web/themes/congo/assets/icons/reddit.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bb55eb544cb1498d21c68f440dc0b147cc1d75a1
--- /dev/null
+++ b/web/themes/congo/assets/icons/reddit.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z"/></svg>
diff --git a/web/themes/congo/assets/icons/researchgate.svg b/web/themes/congo/assets/icons/researchgate.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ad176db207105587c8f555dc69c9d415a9d46b7a
--- /dev/null
+++ b/web/themes/congo/assets/icons/researchgate.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 32v448h448V32H0zm262.2 334.4c-6.6 3-33.2 6-50-14.2-9.2-10.6-25.3-33.3-42.2-63.6-8.9 0-14.7 0-21.4-.6v46.4c0 23.5 6 21.2 25.8 23.9v8.1c-6.9-.3-23.1-.8-35.6-.8-13.1 0-26.1.6-33.6.8v-8.1c15.5-2.9 22-1.3 22-23.9V225c0-22.6-6.4-21-22-23.9V193c25.8 1 53.1-.6 70.9-.6 31.7 0 55.9 14.4 55.9 45.6 0 21.1-16.7 42.2-39.2 47.5 13.6 24.2 30 45.6 42.2 58.9 7.2 7.8 17.2 14.7 27.2 14.7v7.3zm22.9-135c-23.3 0-32.2-15.7-32.2-32.2V167c0-12.2 8.8-30.4 34-30.4s30.4 17.9 30.4 17.9l-10.7 7.2s-5.5-12.5-19.7-12.5c-7.9 0-19.7 7.3-19.7 19.7v26.8c0 13.4 6.6 23.3 17.9 23.3 14.1 0 21.5-10.9 21.5-26.8h-17.9v-10.7h30.4c0 20.5 4.7 49.9-34 49.9zm-116.5 44.7c-9.4 0-13.6-.3-20-.8v-69.7c6.4-.6 15-.6 22.5-.6 23.3 0 37.2 12.2 37.2 34.5 0 21.9-15 36.6-39.7 36.6z"/></svg>
diff --git a/web/themes/congo/assets/icons/search.svg b/web/themes/congo/assets/icons/search.svg
new file mode 100644
index 0000000000000000000000000000000000000000..15fe8928a02281ea164a15825459c3831043516c
--- /dev/null
+++ b/web/themes/congo/assets/icons/search.svg
@@ -0,0 +1 @@
+<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
diff --git a/web/themes/congo/assets/icons/skull-crossbones.svg b/web/themes/congo/assets/icons/skull-crossbones.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4e19f6e7b6c07b235c25293314a0dc3894299972
--- /dev/null
+++ b/web/themes/congo/assets/icons/skull-crossbones.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M368 128C368 172.4 342.6 211.5 304 234.4V256C304 273.7 289.7 288 272 288H176C158.3 288 144 273.7 144 256V234.4C105.4 211.5 80 172.4 80 128C80 57.31 144.5 0 224 0C303.5 0 368 57.31 368 128V128zM168 176C185.7 176 200 161.7 200 144C200 126.3 185.7 112 168 112C150.3 112 136 126.3 136 144C136 161.7 150.3 176 168 176zM280 112C262.3 112 248 126.3 248 144C248 161.7 262.3 176 280 176C297.7 176 312 161.7 312 144C312 126.3 297.7 112 280 112zM3.379 273.7C11.28 257.9 30.5 251.5 46.31 259.4L224 348.2L401.7 259.4C417.5 251.5 436.7 257.9 444.6 273.7C452.5 289.5 446.1 308.7 430.3 316.6L295.6 384L430.3 451.4C446.1 459.3 452.5 478.5 444.6 494.3C436.7 510.1 417.5 516.5 401.7 508.6L224 419.8L46.31 508.6C30.5 516.5 11.28 510.1 3.379 494.3C-4.525 478.5 1.882 459.3 17.69 451.4L152.4 384L17.69 316.6C1.882 308.7-4.525 289.5 3.379 273.7V273.7z"/></svg>
diff --git a/web/themes/congo/assets/icons/slack.svg b/web/themes/congo/assets/icons/slack.svg
new file mode 100644
index 0000000000000000000000000000000000000000..69909d8b3292638cb85c63a0f5b83310fdb6eca4
--- /dev/null
+++ b/web/themes/congo/assets/icons/slack.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1c0-25.9 21.16-47.06 47.06-47.06h47.06v47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V315.1zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06H164.9zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06H164.9zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06h-47.06V196.9zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06 25.9 0 47.06 21.16 47.06 47.06V196.9zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06-25.9 0-47.06-21.16-47.06-47.06v-47.06h47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06 0-25.9 21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06 0 25.9-21.16 47.06-47.06 47.06H283.1z"/></svg>
diff --git a/web/themes/congo/assets/icons/snapchat.svg b/web/themes/congo/assets/icons/snapchat.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b6efeef1b0c62a8091b7d19f88e06f683ae4353d
--- /dev/null
+++ b/web/themes/congo/assets/icons/snapchat.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M496.926,366.6c-3.373-9.176-9.8-14.086-17.112-18.153-1.376-.806-2.641-1.451-3.72-1.947-2.182-1.128-4.414-2.22-6.634-3.373-22.8-12.09-40.609-27.341-52.959-45.42a102.889,102.889,0,0,1-9.089-16.12c-1.054-3.013-1-4.724-.248-6.287a10.221,10.221,0,0,1,2.914-3.038c3.918-2.591,7.96-5.22,10.7-6.993,4.885-3.162,8.754-5.667,11.246-7.44,9.362-6.547,15.909-13.5,20-21.278a42.371,42.371,0,0,0,2.1-35.191c-6.2-16.318-21.613-26.449-40.287-26.449a55.543,55.543,0,0,0-11.718,1.24c-1.029.224-2.059.459-3.063.72.174-11.16-.074-22.94-1.066-34.534-3.522-40.758-17.794-62.123-32.674-79.16A130.167,130.167,0,0,0,332.1,36.443C309.515,23.547,283.91,17,256,17S202.6,23.547,180,36.443a129.735,129.735,0,0,0-33.281,26.783c-14.88,17.038-29.152,38.44-32.673,79.161-.992,11.594-1.24,23.435-1.079,34.533-1-.26-2.021-.5-3.051-.719a55.461,55.461,0,0,0-11.717-1.24c-18.687,0-34.125,10.131-40.3,26.449a42.423,42.423,0,0,0,2.046,35.228c4.105,7.774,10.652,14.731,20.014,21.278,2.48,1.736,6.361,4.24,11.246,7.44,2.641,1.711,6.5,4.216,10.28,6.72a11.054,11.054,0,0,1,3.3,3.311c.794,1.624.818,3.373-.36,6.6a102.02,102.02,0,0,1-8.94,15.785c-12.077,17.669-29.363,32.648-51.434,44.639C32.355,348.608,20.2,352.75,15.069,366.7c-3.868,10.528-1.339,22.506,8.494,32.6a49.137,49.137,0,0,0,12.4,9.387,134.337,134.337,0,0,0,30.342,12.139,20.024,20.024,0,0,1,6.126,2.741c3.583,3.137,3.075,7.861,7.849,14.78a34.468,34.468,0,0,0,8.977,9.127c10.019,6.919,21.278,7.353,33.207,7.811,10.776.41,22.989.881,36.939,5.481,5.778,1.91,11.78,5.605,18.736,9.92C194.842,480.951,217.707,495,255.973,495s61.292-14.123,78.118-24.428c6.907-4.24,12.872-7.9,18.489-9.758,13.949-4.613,26.163-5.072,36.939-5.481,11.928-.459,23.187-.893,33.206-7.812a34.584,34.584,0,0,0,10.218-11.16c3.434-5.84,3.348-9.919,6.572-12.771a18.971,18.971,0,0,1,5.753-2.629A134.893,134.893,0,0,0,476.02,408.71a48.344,48.344,0,0,0,13.019-10.193l.124-.149C498.389,388.5,500.708,376.867,496.926,366.6Zm-34.013,18.277c-20.745,11.458-34.533,10.23-45.259,17.137-9.114,5.865-3.72,18.513-10.342,23.076-8.134,5.617-32.177-.4-63.239,9.858-25.618,8.469-41.961,32.822-88.038,32.822s-62.036-24.3-88.076-32.884c-31-10.255-55.092-4.241-63.239-9.858-6.609-4.563-1.24-17.211-10.341-23.076-10.739-6.907-24.527-5.679-45.26-17.075-13.206-7.291-5.716-11.8-1.314-13.937,75.143-36.381,87.133-92.552,87.666-96.719.645-5.046,1.364-9.014-4.191-14.148-5.369-4.96-29.189-19.7-35.8-24.316-10.937-7.638-15.748-15.264-12.2-24.638,2.48-6.485,8.531-8.928,14.879-8.928a27.643,27.643,0,0,1,5.965.67c12,2.6,23.659,8.617,30.392,10.242a10.749,10.749,0,0,0,2.48.335c3.6,0,4.86-1.811,4.612-5.927-.768-13.132-2.628-38.725-.558-62.644,2.84-32.909,13.442-49.215,26.04-63.636,6.051-6.932,34.484-36.976,88.857-36.976s82.88,29.92,88.931,36.827c12.611,14.421,23.225,30.727,26.04,63.636,2.071,23.919.285,49.525-.558,62.644-.285,4.327,1.017,5.927,4.613,5.927a10.648,10.648,0,0,0,2.48-.335c6.745-1.624,18.4-7.638,30.4-10.242a27.641,27.641,0,0,1,5.964-.67c6.386,0,12.4,2.48,14.88,8.928,3.546,9.374-1.24,17-12.189,24.639-6.609,4.612-30.429,19.343-35.8,24.315-5.568,5.134-4.836,9.1-4.191,14.149.533,4.228,12.511,60.4,87.666,96.718C468.629,373.011,476.119,377.524,462.913,384.877Z"/></svg>
diff --git a/web/themes/congo/assets/icons/soundcloud.svg b/web/themes/congo/assets/icons/soundcloud.svg
new file mode 100644
index 0000000000000000000000000000000000000000..301c3d13861551ffc15874496269992eb69e79cd
--- /dev/null
+++ b/web/themes/congo/assets/icons/soundcloud.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M111.4 256.3l5.8 65-5.8 68.3c-.3 2.5-2.2 4.4-4.4 4.4s-4.2-1.9-4.2-4.4l-5.6-68.3 5.6-65c0-2.2 1.9-4.2 4.2-4.2 2.2 0 4.1 2 4.4 4.2zm21.4-45.6c-2.8 0-4.7 2.2-5 5l-5 105.6 5 68.3c.3 2.8 2.2 5 5 5 2.5 0 4.7-2.2 4.7-5l5.8-68.3-5.8-105.6c0-2.8-2.2-5-4.7-5zm25.5-24.1c-3.1 0-5.3 2.2-5.6 5.3l-4.4 130 4.4 67.8c.3 3.1 2.5 5.3 5.6 5.3 2.8 0 5.3-2.2 5.3-5.3l5.3-67.8-5.3-130c0-3.1-2.5-5.3-5.3-5.3zM7.2 283.2c-1.4 0-2.2 1.1-2.5 2.5L0 321.3l4.7 35c.3 1.4 1.1 2.5 2.5 2.5s2.2-1.1 2.5-2.5l5.6-35-5.6-35.6c-.3-1.4-1.1-2.5-2.5-2.5zm23.6-21.9c-1.4 0-2.5 1.1-2.5 2.5l-6.4 57.5 6.4 56.1c0 1.7 1.1 2.8 2.5 2.8s2.5-1.1 2.8-2.5l7.2-56.4-7.2-57.5c-.3-1.4-1.4-2.5-2.8-2.5zm25.3-11.4c-1.7 0-3.1 1.4-3.3 3.3L47 321.3l5.8 65.8c.3 1.7 1.7 3.1 3.3 3.1 1.7 0 3.1-1.4 3.1-3.1l6.9-65.8-6.9-68.1c0-1.9-1.4-3.3-3.1-3.3zm25.3-2.2c-1.9 0-3.6 1.4-3.6 3.6l-5.8 70 5.8 67.8c0 2.2 1.7 3.6 3.6 3.6s3.6-1.4 3.9-3.6l6.4-67.8-6.4-70c-.3-2.2-2-3.6-3.9-3.6zm241.4-110.9c-1.1-.8-2.8-1.4-4.2-1.4-2.2 0-4.2.8-5.6 1.9-1.9 1.7-3.1 4.2-3.3 6.7v.8l-3.3 176.7 1.7 32.5 1.7 31.7c.3 4.7 4.2 8.6 8.9 8.6s8.6-3.9 8.6-8.6l3.9-64.2-3.9-177.5c-.4-3-2-5.8-4.5-7.2zm-26.7 15.3c-1.4-.8-2.8-1.4-4.4-1.4s-3.1.6-4.4 1.4c-2.2 1.4-3.6 3.9-3.6 6.7l-.3 1.7-2.8 160.8s0 .3 3.1 65.6v.3c0 1.7.6 3.3 1.7 4.7 1.7 1.9 3.9 3.1 6.4 3.1 2.2 0 4.2-1.1 5.6-2.5 1.7-1.4 2.5-3.3 2.5-5.6l.3-6.7 3.1-58.6-3.3-162.8c-.3-2.8-1.7-5.3-3.9-6.7zm-111.4 22.5c-3.1 0-5.8 2.8-5.8 6.1l-4.4 140.6 4.4 67.2c.3 3.3 2.8 5.8 5.8 5.8 3.3 0 5.8-2.5 6.1-5.8l5-67.2-5-140.6c-.2-3.3-2.7-6.1-6.1-6.1zm376.7 62.8c-10.8 0-21.1 2.2-30.6 6.1-6.4-70.8-65.8-126.4-138.3-126.4-17.8 0-35 3.3-50.3 9.4-6.1 2.2-7.8 4.4-7.8 9.2v249.7c0 5 3.9 8.6 8.6 9.2h218.3c43.3 0 78.6-35 78.6-78.3.1-43.6-35.2-78.9-78.5-78.9zm-296.7-60.3c-4.2 0-7.5 3.3-7.8 7.8l-3.3 136.7 3.3 65.6c.3 4.2 3.6 7.5 7.8 7.5 4.2 0 7.5-3.3 7.5-7.5l3.9-65.6-3.9-136.7c-.3-4.5-3.3-7.8-7.5-7.8zm-53.6-7.8c-3.3 0-6.4 3.1-6.4 6.7l-3.9 145.3 3.9 66.9c.3 3.6 3.1 6.4 6.4 6.4 3.6 0 6.4-2.8 6.7-6.4l4.4-66.9-4.4-145.3c-.3-3.6-3.1-6.7-6.7-6.7zm26.7 3.4c-3.9 0-6.9 3.1-6.9 6.9L227 321.3l3.9 66.4c.3 3.9 3.1 6.9 6.9 6.9s6.9-3.1 6.9-6.9l4.2-66.4-4.2-141.7c0-3.9-3-6.9-6.9-6.9z"/></svg>
diff --git a/web/themes/congo/assets/icons/stack-overflow.svg b/web/themes/congo/assets/icons/stack-overflow.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bba4159862c26a05f17ab763d925bd1e3e8dc984
--- /dev/null
+++ b/web/themes/congo/assets/icons/stack-overflow.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M290.7 311L95 269.7 86.8 309l195.7 41zm51-87L188.2 95.7l-25.5 30.8 153.5 128.3zm-31.2 39.7L129.2 179l-16.7 36.5L293.7 300zM262 32l-32 24 119.3 160.3 32-24zm20.5 328h-200v39.7h200zm39.7 80H42.7V320h-40v160h359.5V320h-40z"/></svg>
diff --git a/web/themes/congo/assets/icons/steam.svg b/web/themes/congo/assets/icons/steam.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6efd1fd3f0b169e9ce90d98420600f21ff6b8358
--- /dev/null
+++ b/web/themes/congo/assets/icons/steam.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M496 256c0 137-111.2 248-248.4 248-113.8 0-209.6-76.3-239-180.4l95.2 39.3c6.4 32.1 34.9 56.4 68.9 56.4 39.2 0 71.9-32.4 70.2-73.5l84.5-60.2c52.1 1.3 95.8-40.9 95.8-93.5 0-51.6-42-93.5-93.7-93.5s-93.7 42-93.7 93.5v1.2L176.6 279c-15.5-.9-30.7 3.4-43.5 12.1L0 236.1C10.2 108.4 117.1 8 247.6 8 384.8 8 496 119 496 256zM155.7 384.3l-30.5-12.6a52.79 52.79 0 0 0 27.2 25.8c26.9 11.2 57.8-1.6 69-28.4 5.4-13 5.5-27.3.1-40.3-5.4-13-15.5-23.2-28.5-28.6-12.9-5.4-26.7-5.2-38.9-.6l31.5 13c19.8 8.2 29.2 30.9 20.9 50.7-8.3 19.9-31 29.2-50.8 21zm173.8-129.9c-34.4 0-62.4-28-62.4-62.3s28-62.3 62.4-62.3 62.4 28 62.4 62.3-27.9 62.3-62.4 62.3zm.1-15.6c25.9 0 46.9-21 46.9-46.8 0-25.9-21-46.8-46.9-46.8s-46.9 21-46.9 46.8c.1 25.8 21.1 46.8 46.9 46.8z"/></svg>
diff --git a/web/themes/congo/assets/icons/sun.svg b/web/themes/congo/assets/icons/sun.svg
new file mode 100644
index 0000000000000000000000000000000000000000..34a57ec55b6ec41553ee2d043a245d31d372a8e0
--- /dev/null
+++ b/web/themes/congo/assets/icons/sun.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 159.1c-53.02 0-95.1 42.98-95.1 95.1S202.1 351.1 256 351.1s95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347L446.1 255.1l63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7l-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89L164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6L12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256l-63.15 91.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7l19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109l109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69 0-127.1-57.31-127.1-127.1c0-70.69 57.31-127.1 127.1-127.1s127.1 57.3 127.1 127.1C383.1 326.7 326.7 383.1 256 383.1z"/></svg>
diff --git a/web/themes/congo/assets/icons/tag.svg b/web/themes/congo/assets/icons/tag.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c78e65b4a542fab9da6e8c674fdc3dce1a5fd9da
--- /dev/null
+++ b/web/themes/congo/assets/icons/tag.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M48 32H197.5C214.5 32 230.7 38.74 242.7 50.75L418.7 226.7C443.7 251.7 443.7 292.3 418.7 317.3L285.3 450.7C260.3 475.7 219.7 475.7 194.7 450.7L18.75 274.7C6.743 262.7 0 246.5 0 229.5V80C0 53.49 21.49 32 48 32L48 32zM112 176C129.7 176 144 161.7 144 144C144 126.3 129.7 112 112 112C94.33 112 80 126.3 80 144C80 161.7 94.33 176 112 176z"/></svg>
diff --git a/web/themes/congo/assets/icons/telegram.svg b/web/themes/congo/assets/icons/telegram.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4101aef1c06fb9827c47757cd0da9e24d385e5a7
--- /dev/null
+++ b/web/themes/congo/assets/icons/telegram.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M248,8C111.033,8,0,119.033,0,256S111.033,504,248,504,496,392.967,496,256,384.967,8,248,8ZM362.952,176.66c-3.732,39.215-19.881,134.378-28.1,178.3-3.476,18.584-10.322,24.816-16.948,25.425-14.4,1.326-25.338-9.517-39.287-18.661-21.827-14.308-34.158-23.215-55.346-37.177-24.485-16.135-8.612-25,5.342-39.5,3.652-3.793,67.107-61.51,68.335-66.746.153-.655.3-3.1-1.154-4.384s-3.59-.849-5.135-.5q-3.283.746-104.608,69.142-14.845,10.194-26.894,9.934c-8.855-.191-25.888-5.006-38.551-9.123-15.531-5.048-27.875-7.717-26.8-16.291q.84-6.7,18.45-13.7,108.446-47.248,144.628-62.3c68.872-28.647,83.183-33.623,92.511-33.789,2.052-.034,6.639.474,9.61,2.885a10.452,10.452,0,0,1,3.53,6.716A43.765,43.765,0,0,1,362.952,176.66Z"/></svg>
diff --git a/web/themes/congo/assets/icons/tiktok.svg b/web/themes/congo/assets/icons/tiktok.svg
new file mode 100644
index 0000000000000000000000000000000000000000..792a850d0dd3bc027061cccb03687ed34c53bccd
--- /dev/null
+++ b/web/themes/congo/assets/icons/tiktok.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M448,209.91a210.06,210.06,0,0,1-122.77-39.25V349.38A162.55,162.55,0,1,1,185,188.31V278.2a74.62,74.62,0,1,0,52.23,71.18V0l88,0a121.18,121.18,0,0,0,1.86,22.17h0A122.18,122.18,0,0,0,381,102.39a121.43,121.43,0,0,0,67,20.14Z"/></svg>
diff --git a/web/themes/congo/assets/icons/triangle-exclamation.svg b/web/themes/congo/assets/icons/triangle-exclamation.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f501ce96f685e539c881fbf69cbbe134a8fd1f23
--- /dev/null
+++ b/web/themes/congo/assets/icons/triangle-exclamation.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M506.3 417l-213.3-364c-16.33-28-57.54-28-73.98 0l-213.2 364C-10.59 444.9 9.849 480 42.74 480h426.6C502.1 480 522.6 445 506.3 417zM232 168c0-13.25 10.75-24 24-24S280 154.8 280 168v128c0 13.25-10.75 24-23.1 24S232 309.3 232 296V168zM256 416c-17.36 0-31.44-14.08-31.44-31.44c0-17.36 14.07-31.44 31.44-31.44s31.44 14.08 31.44 31.44C287.4 401.9 273.4 416 256 416z"/></svg>
diff --git a/web/themes/congo/assets/icons/tumblr.svg b/web/themes/congo/assets/icons/tumblr.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1457d68b9b1185c30086592d14c8e12b55fd5c9c
--- /dev/null
+++ b/web/themes/congo/assets/icons/tumblr.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z"/></svg>
diff --git a/web/themes/congo/assets/icons/twitch.svg b/web/themes/congo/assets/icons/twitch.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a35fa557c657c0e0a0723c91ff994ab6946572a6
--- /dev/null
+++ b/web/themes/congo/assets/icons/twitch.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z"/></svg>
diff --git a/web/themes/congo/assets/icons/twitter.svg b/web/themes/congo/assets/icons/twitter.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3ab4c1cb4135dfbb44061cd35b58bcbc00848e39
--- /dev/null
+++ b/web/themes/congo/assets/icons/twitter.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
diff --git a/web/themes/congo/assets/icons/whatsapp.svg b/web/themes/congo/assets/icons/whatsapp.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c1df9660bb0ee26851f62b7f995454fcdb184210
--- /dev/null
+++ b/web/themes/congo/assets/icons/whatsapp.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z"/></svg>
diff --git a/web/themes/congo/assets/icons/xmark.svg b/web/themes/congo/assets/icons/xmark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a4c5121ffe1dd0ff3173c798e9637e92f6e00eb8
--- /dev/null
+++ b/web/themes/congo/assets/icons/xmark.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z"/></svg>
diff --git a/web/themes/congo/assets/icons/youtube.svg b/web/themes/congo/assets/icons/youtube.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3fa4dade6269e5391dffa6b30babcc899ab5795d
--- /dev/null
+++ b/web/themes/congo/assets/icons/youtube.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
diff --git a/web/themes/congo/assets/js/appearance.js b/web/themes/congo/assets/js/appearance.js
new file mode 100644
index 0000000000000000000000000000000000000000..417b1a4a24e7667c82d552113426a26b07e1e918
--- /dev/null
+++ b/web/themes/congo/assets/js/appearance.js
@@ -0,0 +1,40 @@
+const sitePreference = document.documentElement.getAttribute("data-default-appearance");
+const userPreference = localStorage.getItem("appearance");
+
+if ((sitePreference === "dark" && userPreference === null) || userPreference === "dark") {
+  document.documentElement.classList.add("dark");
+}
+
+if (document.documentElement.getAttribute("data-auto-appearance") === "true") {
+  if (
+    window.matchMedia &&
+    window.matchMedia("(prefers-color-scheme: dark)").matches &&
+    userPreference !== "light"
+  ) {
+    document.documentElement.classList.add("dark");
+  }
+  window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", (event) => {
+    if (event.matches) {
+      document.documentElement.classList.add("dark");
+    } else {
+      document.documentElement.classList.remove("dark");
+    }
+  });
+}
+
+window.addEventListener("DOMContentLoaded", (event) => {
+  const switcher = document.getElementById("appearance-switcher");
+  if (switcher) {
+    switcher.addEventListener("click", () => {
+      document.documentElement.classList.toggle("dark");
+      localStorage.setItem(
+        "appearance",
+        document.documentElement.classList.contains("dark") ? "dark" : "light"
+      );
+    });
+    switcher.addEventListener("contextmenu", (event) => {
+      event.preventDefault();
+      localStorage.removeItem("appearance");
+    });
+  }
+});
diff --git a/web/themes/congo/assets/js/chart.js b/web/themes/congo/assets/js/chart.js
new file mode 100644
index 0000000000000000000000000000000000000000..ccf950d46421cc5dfac3dbea027bb1a86cc74ddc
--- /dev/null
+++ b/web/themes/congo/assets/js/chart.js
@@ -0,0 +1,13 @@
+function css(name) {
+  return "rgb(" + getComputedStyle(document.documentElement).getPropertyValue(name) + ")";
+}
+
+Chart.defaults.font.size = 14;
+Chart.defaults.backgroundColor = css("--color-primary-300");
+Chart.defaults.elements.point.borderColor = css("--color-primary-400");
+Chart.defaults.elements.bar.borderColor = css("--color-primary-500");
+Chart.defaults.elements.bar.borderWidth = 1;
+Chart.defaults.elements.line.borderColor = css("--color-primary-400");
+Chart.defaults.elements.arc.backgroundColor = css("--color-primary-200");
+Chart.defaults.elements.arc.borderColor = css("--color-primary-500");
+Chart.defaults.elements.arc.borderWidth = 1;
diff --git a/web/themes/congo/assets/js/code.js b/web/themes/congo/assets/js/code.js
new file mode 100644
index 0000000000000000000000000000000000000000..a41fb8b1702753a71c5807a74c165e65e3e483c9
--- /dev/null
+++ b/web/themes/congo/assets/js/code.js
@@ -0,0 +1,66 @@
+var scriptBundle = document.getElementById("script-bundle");
+var copyText = scriptBundle ? scriptBundle.getAttribute("data-copy") : "Copy";
+var copiedText = scriptBundle ? scriptBundle.getAttribute("data-copied") : "Copied";
+
+function createCopyButton(highlightDiv) {
+  const button = document.createElement("button");
+  button.className = "copy-button";
+  button.type = "button";
+  button.ariaLabel = copyText;
+  button.innerText = copyText;
+  button.addEventListener("click", () => copyCodeToClipboard(button, highlightDiv));
+  addCopyButtonToDom(button, highlightDiv);
+}
+
+async function copyCodeToClipboard(button, highlightDiv) {
+  const codeToCopy = highlightDiv.querySelector(":last-child > .chroma > code").innerText;
+  try {
+    result = await navigator.permissions.query({ name: "clipboard-write" });
+    if (result.state == "granted" || result.state == "prompt") {
+      await navigator.clipboard.writeText(codeToCopy);
+    } else {
+      copyCodeBlockExecCommand(codeToCopy, highlightDiv);
+    }
+  } catch (_) {
+    copyCodeBlockExecCommand(codeToCopy, highlightDiv);
+  } finally {
+    codeWasCopied(button);
+  }
+}
+
+function copyCodeBlockExecCommand(codeToCopy, highlightDiv) {
+  const textArea = document.createElement("textArea");
+  textArea.contentEditable = "true";
+  textArea.readOnly = "false";
+  textArea.className = "copy-textarea";
+  textArea.value = codeToCopy;
+  highlightDiv.insertBefore(textArea, highlightDiv.firstChild);
+  const range = document.createRange();
+  range.selectNodeContents(textArea);
+  const sel = window.getSelection();
+  sel.removeAllRanges();
+  sel.addRange(range);
+  textArea.setSelectionRange(0, 999999);
+  document.execCommand("copy");
+  highlightDiv.removeChild(textArea);
+}
+
+function codeWasCopied(button) {
+  button.blur();
+  button.innerText = copiedText;
+  setTimeout(function () {
+    button.innerText = copyText;
+  }, 2000);
+}
+
+function addCopyButtonToDom(button, highlightDiv) {
+  highlightDiv.insertBefore(button, highlightDiv.firstChild);
+  const wrapper = document.createElement("div");
+  wrapper.className = "highlight-wrapper";
+  highlightDiv.parentNode.insertBefore(wrapper, highlightDiv);
+  wrapper.appendChild(highlightDiv);
+}
+
+window.addEventListener("DOMContentLoaded", (event) => {
+  document.querySelectorAll(".highlight").forEach((highlightDiv) => createCopyButton(highlightDiv));
+});
diff --git a/web/themes/congo/assets/js/mermaid.js b/web/themes/congo/assets/js/mermaid.js
new file mode 100644
index 0000000000000000000000000000000000000000..94795fe449d86d3a3ac6259e851a7ad427bdcc8c
--- /dev/null
+++ b/web/themes/congo/assets/js/mermaid.js
@@ -0,0 +1,20 @@
+function css(name) {
+  return "rgb(" + getComputedStyle(document.documentElement).getPropertyValue(name) + ")";
+}
+
+mermaid.initialize({
+  theme: "base",
+  themeVariables: {
+    background: css("--color-neutral"),
+    primaryColor: css("--color-primary-200"),
+    secondaryColor: css("--color-secondary-200"),
+    tertiaryColor: css("--color-neutral-100"),
+    primaryBorderColor: css("--color-primary-400"),
+    secondaryBorderColor: css("--color-secondary-400"),
+    tertiaryBorderColor: css("--color-neutral-400"),
+    lineColor: css("--color-neutral-600"),
+    fontFamily:
+      "ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif",
+    fontSize: "16px",
+  },
+});
diff --git a/web/themes/congo/assets/js/rtl.js b/web/themes/congo/assets/js/rtl.js
new file mode 100644
index 0000000000000000000000000000000000000000..26852d47af9e41d121cb78b88307ee990f0ba3fe
--- /dev/null
+++ b/web/themes/congo/assets/js/rtl.js
@@ -0,0 +1,3 @@
+window.addEventListener("DOMContentLoaded", (event) => {
+  document.querySelectorAll("pre, .highlight-wrapper").forEach((tag) => (tag.dir = "auto"));
+});
diff --git a/web/themes/congo/assets/js/search.js b/web/themes/congo/assets/js/search.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e331fa52f7d2f7bc3905398d85a431cc2e95ce5
--- /dev/null
+++ b/web/themes/congo/assets/js/search.js
@@ -0,0 +1,162 @@
+var fuse;
+var showButtons = document.querySelectorAll("[id^='search-button']");
+var hideButton = document.getElementById("close-search-button");
+var wrapper = document.getElementById("search-wrapper");
+var modal = document.getElementById("search-modal");
+var input = document.getElementById("search-query");
+var output = document.getElementById("search-results");
+var first = output.firstChild;
+var last = output.lastChild;
+var searchVisible = false;
+var indexed = false;
+var hasResults = false;
+
+// Listen for events
+showButtons.forEach((button) => {
+  button.addEventListener("click", displaySearch);
+});
+hideButton.addEventListener("click", hideSearch);
+wrapper.addEventListener("click", hideSearch);
+modal.addEventListener("click", function (event) {
+  event.stopPropagation();
+  event.stopImmediatePropagation();
+  return false;
+});
+document.addEventListener("keydown", function (event) {
+  // Forward slash to open search wrapper
+  if (event.key == "/") {
+    if (!searchVisible) {
+      event.preventDefault();
+      displaySearch();
+    }
+  }
+
+  // Esc to close search wrapper
+  if (event.key == "Escape") {
+    hideSearch();
+  }
+
+  // Down arrow to move down results list
+  if (event.key == "ArrowDown") {
+    if (searchVisible && hasResults) {
+      event.preventDefault();
+      if (document.activeElement == input) {
+        first.focus();
+      } else if (document.activeElement == last) {
+        last.focus();
+      } else {
+        document.activeElement.parentElement.nextSibling.firstElementChild.focus();
+      }
+    }
+  }
+
+  // Up arrow to move up results list
+  if (event.key == "ArrowUp") {
+    if (searchVisible && hasResults) {
+      event.preventDefault();
+      if (document.activeElement == input) {
+        input.focus();
+      } else if (document.activeElement == first) {
+        input.focus();
+      } else {
+        document.activeElement.parentElement.previousSibling.firstElementChild.focus();
+      }
+    }
+  }
+});
+
+// Update search on each keypress
+input.onkeyup = function (event) {
+  executeQuery(this.value);
+};
+
+function displaySearch() {
+  if (!indexed) {
+    buildIndex();
+  }
+  if (!searchVisible) {
+    document.body.style.overflow = "hidden";
+    wrapper.style.visibility = "visible";
+    input.focus();
+    searchVisible = true;
+  }
+}
+
+function hideSearch() {
+  if (searchVisible) {
+    document.body.style.overflow = "visible";
+    wrapper.style.visibility = "hidden";
+    input.value = "";
+    output.innerHTML = "";
+    document.activeElement.blur();
+    searchVisible = false;
+  }
+}
+
+function fetchJSON(path, callback) {
+  var httpRequest = new XMLHttpRequest();
+  httpRequest.onreadystatechange = function () {
+    if (httpRequest.readyState === 4) {
+      if (httpRequest.status === 200) {
+        var data = JSON.parse(httpRequest.responseText);
+        if (callback) callback(data);
+      }
+    }
+  };
+  httpRequest.open("GET", path);
+  httpRequest.send();
+}
+
+function buildIndex() {
+  var baseURL = wrapper.getAttribute("data-url");
+  baseURL = baseURL.replace(/\/?$/, "/");
+  fetchJSON(baseURL + "index.json", function (data) {
+    var options = {
+      shouldSort: true,
+      ignoreLocation: true,
+      threshold: 0.0,
+      includeMatches: true,
+      keys: [
+        { name: "title", weight: 0.8 },
+        { name: "section", weight: 0.2 },
+        { name: "summary", weight: 0.6 },
+        { name: "content", weight: 0.4 },
+      ],
+    };
+    fuse = new Fuse(data, options);
+    indexed = true;
+  });
+}
+
+function executeQuery(term) {
+  let results = fuse.search(term);
+  let resultsHTML = "";
+
+  if (results.length > 0) {
+    results.forEach(function (value, key) {
+      resultsHTML =
+        resultsHTML +
+        `<li class="mb-2">
+          <a class="flex items-center px-3 py-2 rounded-md appearance-none bg-neutral-100 dark:bg-neutral-700 focus:bg-primary-100 hover:bg-primary-100 dark:hover:bg-primary-900 dark:focus:bg-primary-900 focus:outline-dotted focus:outline-transparent focus:outline-2" href="${value.item.permalink}" tabindex="0">
+            <div class="grow">
+              <div class="-mb-1 text-lg font-bold">${value.item.title}</div>
+              <div class="text-sm text-neutral-500 dark:text-neutral-400">${value.item.section}<span class="px-2 text-primary-500">&middot;</span>${value.item.date}</span></div>
+              <div class="text-sm italic">${value.item.summary}</div>
+            </div>
+            <div class="ml-2 ltr:block rtl:hidden text-neutral-500">&rarr;</div>
+            <div class="mr-2 ltr:hidden rtl:block text-neutral-500">&larr;</div>
+          </a>
+        </li>`;
+    });
+    hasResults = true;
+  } else {
+    resultsHTML = "";
+    hasResults = false;
+  }
+
+  output.innerHTML = resultsHTML;
+  if (results.length > 0) {
+    first = output.firstChild.firstElementChild;
+    last = output.lastChild.firstElementChild;
+  }
+}
diff --git a/web/themes/congo/assets/lib/chart/chart.min.js b/web/themes/congo/assets/lib/chart/chart.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f69759e05cd5be36a211b468823602fe30245f8
--- /dev/null
+++ b/web/themes/congo/assets/lib/chart/chart.min.js
@@ -0,0 +1,13 @@
+/*!
+ * Chart.js v3.9.1
+ * https://www.chartjs.org
+ * (c) 2022 Chart.js Contributors
+ * Released under the MIT License
+ */
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";function t(){}const e=function(){let t=0;return function(){return t++}}();function i(t){return null==t}function s(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function n(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}const o=t=>("number"==typeof t||t instanceof Number)&&isFinite(+t);function a(t,e){return o(t)?t:e}function r(t,e){return void 0===t?e:t}const l=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:t/e,h=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function c(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function d(t,e,i,o){let a,r,l;if(s(t))if(r=t.length,o)for(a=r-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;a<r;a++)e.call(i,t[a],a);else if(n(t))for(l=Object.keys(t),r=l.length,a=0;a<r;a++)e.call(i,t[l[a]],l[a])}function u(t,e){let i,s,n,o;if(!t||!e||t.length!==e.length)return!1;for(i=0,s=t.length;i<s;++i)if(n=t[i],o=e[i],n.datasetIndex!==o.datasetIndex||n.index!==o.index)return!1;return!0}function f(t){if(s(t))return t.map(f);if(n(t)){const e=Object.create(null),i=Object.keys(t),s=i.length;let n=0;for(;n<s;++n)e[i[n]]=f(t[i[n]]);return e}return t}function g(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}function p(t,e,i,s){if(!g(t))return;const o=e[t],a=i[t];n(o)&&n(a)?m(o,a,s):e[t]=f(a)}function m(t,e,i){const o=s(e)?e:[e],a=o.length;if(!n(t))return t;const r=(i=i||{}).merger||p;for(let s=0;s<a;++s){if(!n(e=o[s]))continue;const a=Object.keys(e);for(let s=0,n=a.length;s<n;++s)r(a[s],t,e,i)}return t}function b(t,e){return m(t,e,{merger:x})}function x(t,e,i){if(!g(t))return;const s=e[t],o=i[t];n(s)&&n(o)?b(s,o):Object.prototype.hasOwnProperty.call(e,t)||(e[t]=f(o))}const _={"":t=>t,x:t=>t.x,y:t=>t.y};function y(t,e){const i=_[e]||(_[e]=function(t){const e=v(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}const M=t=>void 0!==t,k=t=>"function"==typeof t,S=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function P(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const D=Math.PI,O=2*D,C=O+D,A=Number.POSITIVE_INFINITY,T=D/180,L=D/2,E=D/4,R=2*D/3,I=Math.log10,z=Math.sign;function F(t){const e=Math.round(t);t=N(t,e,t/1e3)?e:t;const i=Math.pow(10,Math.floor(I(t))),s=t/i;return(s<=1?1:s<=2?2:s<=5?5:10)*i}function V(t){const e=[],i=Math.sqrt(t);let s;for(s=1;s<i;s++)t%s==0&&(e.push(s),e.push(t/s));return i===(0|i)&&e.push(i),e.sort(((t,e)=>t-e)).pop(),e}function B(t){return!isNaN(parseFloat(t))&&isFinite(t)}function N(t,e,i){return Math.abs(t-e)<i}function W(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function j(t,e,i){let s,n,o;for(s=0,n=t.length;s<n;s++)o=t[s][i],isNaN(o)||(e.min=Math.min(e.min,o),e.max=Math.max(e.max,o))}function H(t){return t*(D/180)}function $(t){return t*(180/D)}function Y(t){if(!o(t))return;let e=1,i=0;for(;Math.round(t*e)/e!==t;)e*=10,i++;return i}function U(t,e){const i=e.x-t.x,s=e.y-t.y,n=Math.sqrt(i*i+s*s);let o=Math.atan2(s,i);return o<-.5*D&&(o+=O),{angle:o,distance:n}}function X(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function q(t,e){return(t-e+C)%O-D}function K(t){return(t%O+O)%O}function G(t,e,i,s){const n=K(t),o=K(e),a=K(i),r=K(o-n),l=K(a-n),h=K(n-o),c=K(n-a);return n===o||n===a||s&&o===a||r>l&&h<c}function Z(t,e,i){return Math.max(e,Math.min(i,t))}function J(t){return Z(t,-32768,32767)}function Q(t,e,i,s=1e-6){return t>=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function tt(t,e,i){i=i||(i=>t[i]<e);let s,n=t.length-1,o=0;for(;n-o>1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const et=(t,e,i,s)=>tt(t,i,s?s=>t[s][e]<=i:s=>t[s][e]<i),it=(t,e,i)=>tt(t,i,(s=>t[s][e]>=i));function st(t,e,i){let s=0,n=t.length;for(;s<n&&t[s]<e;)s++;for(;n>s&&t[n-1]>i;)n--;return s>0||n<t.length?t.slice(s,n):t}const nt=["push","pop","shift","splice","unshift"];function ot(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),nt.forEach((e=>{const i="_onData"+w(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function at(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(nt.forEach((e=>{delete t[e]})),delete t._chartjs)}function rt(t){const e=new Set;let i,s;for(i=0,s=t.length;i<s;++i)e.add(t[i]);return e.size===s?t:Array.from(e)}const lt="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function ht(t,e,i){const s=i||(t=>Array.prototype.slice.call(t));let n=!1,o=[];return function(...i){o=s(i),n||(n=!0,lt.call(window,(()=>{n=!1,t.apply(e,o)})))}}function ct(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const dt=t=>"start"===t?"left":"end"===t?"right":"center",ut=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,ft=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function gt(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,l=a.axis,{min:h,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=Z(Math.min(et(r,a.axis,h).lo,i?s:et(e,l,a.getPixelForValue(h)).lo),0,s-1)),o=u?Z(Math.max(et(r,a.axis,c,!0).hi+1,i?0:et(e,l,a.getPixelForValue(c),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function pt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}var mt=new class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=lt.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}};
+/*!
+ * @kurkle/color v0.2.1
+ * https://github.com/kurkle/color#readme
+ * (c) 2022 Jukka Kurkela
+ * Released under the MIT License
+ */function bt(t){return t+.5|0}const xt=(t,e,i)=>Math.max(Math.min(t,i),e);function _t(t){return xt(bt(2.55*t),0,255)}function yt(t){return xt(bt(255*t),0,255)}function vt(t){return xt(bt(t/2.55)/100,0,1)}function wt(t){return xt(bt(100*t),0,100)}const Mt={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},kt=[..."0123456789ABCDEF"],St=t=>kt[15&t],Pt=t=>kt[(240&t)>>4]+kt[15&t],Dt=t=>(240&t)>>4==(15&t);function Ot(t){var e=(t=>Dt(t.r)&&Dt(t.g)&&Dt(t.b)&&Dt(t.a))(t)?St:Pt;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Ct=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function At(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Tt(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Lt(t,e,i){const s=At(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function Et(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e<i?6:0):e===n?(i-t)/s+2:(t-e)/s+4}(e,i,s,h,n),r=60*r+.5),[0|r,l||0,a]}function Rt(t,e,i,s){return(Array.isArray(e)?t(e[0],e[1],e[2]):t(e,i,s)).map(yt)}function It(t,e,i){return Rt(At,t,e,i)}function zt(t){return(t%360+360)%360}function Ft(t){const e=Ct.exec(t);let i,s=255;if(!e)return;e[5]!==i&&(s=e[6]?_t(+e[5]):yt(+e[5]));const n=zt(+e[2]),o=+e[3]/100,a=+e[4]/100;return i="hwb"===e[1]?function(t,e,i){return Rt(Lt,t,e,i)}(n,o,a):"hsv"===e[1]?function(t,e,i){return Rt(Tt,t,e,i)}(n,o,a):It(n,o,a),{r:i[0],g:i[1],b:i[2],a:s}}const Vt={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},Bt={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};let Nt;function Wt(t){Nt||(Nt=function(){const t={},e=Object.keys(Bt),i=Object.keys(Vt);let s,n,o,a,r;for(s=0;s<e.length;s++){for(a=r=e[s],n=0;n<i.length;n++)o=i[n],r=r.replace(o,Vt[o]);o=parseInt(Bt[a],16),t[r]=[o>>16&255,o>>8&255,255&o]}return t}(),Nt.transparent=[0,0,0,0]);const e=Nt[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const jt=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Ht=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,$t=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Yt(t,e,i){if(t){let s=Et(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=It(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function Ut(t,e){return t?Object.assign(e||{},t):t}function Xt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=yt(t[3]))):(e=Ut(t,{r:0,g:0,b:0,a:1})).a=yt(e.a),e}function qt(t){return"r"===t.charAt(0)?function(t){const e=jt.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?_t(t):xt(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?_t(i):xt(i,0,255)),s=255&(e[4]?_t(s):xt(s,0,255)),n=255&(e[6]?_t(n):xt(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):Ft(t)}class Kt{constructor(t){if(t instanceof Kt)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=Xt(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*Mt[s[1]],g:255&17*Mt[s[2]],b:255&17*Mt[s[3]],a:5===o?17*Mt[s[4]]:255}:7!==o&&9!==o||(n={r:Mt[s[1]]<<4|Mt[s[2]],g:Mt[s[3]]<<4|Mt[s[4]],b:Mt[s[5]]<<4|Mt[s[6]],a:9===o?Mt[s[7]]<<4|Mt[s[8]]:255})),i=n||Wt(t)||qt(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=Ut(this._rgb);return t&&(t.a=vt(t.a)),t}set rgb(t){this._rgb=Xt(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${vt(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?Ot(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=Et(t),i=e[0],s=wt(e[1]),n=wt(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${vt(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=$t(vt(t.r)),n=$t(vt(t.g)),o=$t(vt(t.b));return{r:yt(Ht(s+i*($t(vt(e.r))-s))),g:yt(Ht(n+i*($t(vt(e.g))-n))),b:yt(Ht(o+i*($t(vt(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new Kt(this.rgb)}alpha(t){return this._rgb.a=yt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=bt(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Yt(this._rgb,2,t),this}darken(t){return Yt(this._rgb,2,-t),this}saturate(t){return Yt(this._rgb,1,t),this}desaturate(t){return Yt(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=Et(t);i[0]=zt(i[0]+e),i=It(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function Gt(t){return new Kt(t)}function Zt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Jt(t){return Zt(t)?t:Gt(t)}function Qt(t){return Zt(t)?t:Gt(t).saturate(.5).darken(.1).hexString()}const te=Object.create(null),ee=Object.create(null);function ie(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;e<s;++e){const s=i[e];t=t[s]||(t[s]=Object.create(null))}return t}function se(t,e,i){return"string"==typeof e?m(ie(t,e),i):m(ie(t,""),e)}var ne=new class{constructor(t){this.animation=void 0,this.backgroundColor="rgba(0,0,0,0.1)",this.borderColor="rgba(0,0,0,0.1)",this.color="#666",this.datasets={},this.devicePixelRatio=t=>t.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>Qt(e.backgroundColor),this.hoverBorderColor=(t,e)=>Qt(e.borderColor),this.hoverColor=(t,e)=>Qt(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t)}set(t,e){return se(this,t,e)}get(t){return ie(this,t)}describe(t,e){return se(ee,t,e)}override(t,e){return se(te,t,e)}route(t,e,i,s){const o=ie(this,t),a=ie(this,i),l="_"+e;Object.defineProperties(o,{[l]:{value:o[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[l],e=a[s];return n(t)?Object.assign({},e,t):r(t,e)},set(t){this[l]=t}}})}}({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}});function oe(){return"undefined"!=typeof window&&"undefined"!=typeof document}function ae(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function re(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const le=t=>window.getComputedStyle(t,null);function he(t,e){return le(t).getPropertyValue(e)}const ce=["top","right","bottom","left"];function de(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=ce[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function ue(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=le(i),o="border-box"===n.boxSizing,a=de(n,"padding"),r=de(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const fe=t=>Math.round(10*t)/10;function ge(t,e,i,s){const n=le(t),o=de(n,"margin"),a=re(n.maxWidth,t,"clientWidth")||A,r=re(n.maxHeight,t,"clientHeight")||A,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=ae(t);if(o){const t=o.getBoundingClientRect(),a=le(o),r=de(a,"border","width"),l=de(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=re(a.maxWidth,o,"clientWidth"),n=re(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||A,maxHeight:n||A}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=de(n,"border","width"),e=de(n,"padding");h-=e.width+t.width,c-=e.height+t.height}return h=Math.max(0,h-o.width),c=Math.max(0,s?Math.floor(h/s):c-o.height),h=fe(Math.min(h,a,l.maxWidth)),c=fe(Math.min(c,r,l.maxHeight)),h&&!c&&(c=fe(h/2)),{width:h,height:c}}function pe(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=n/s,t.width=o/s;const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const me=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function be(t,e){const i=he(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function xe(t){return!t||i(t.size)||i(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function _e(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function ye(t,e,i,n){let o=(n=n||{}).data=n.data||{},a=n.garbageCollect=n.garbageCollect||[];n.font!==e&&(o=n.data={},a=n.garbageCollect=[],n.font=e),t.save(),t.font=e;let r=0;const l=i.length;let h,c,d,u,f;for(h=0;h<l;h++)if(u=i[h],null!=u&&!0!==s(u))r=_e(t,o,a,r,u);else if(s(u))for(c=0,d=u.length;c<d;c++)f=u[c],null==f||s(f)||(r=_e(t,o,a,r,f));t.restore();const g=a.length/2;if(g>i.length){for(h=0;h<g;h++)delete o[a[h]];a.splice(0,g)}return r}function ve(t,e,i){const s=t.currentDevicePixelRatio,n=0!==i?Math.max(i/2,.5):0;return Math.round((e-n)*s)/s+n}function we(t,e){(e=e||t.getContext("2d")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore()}function Me(t,e,i,s){ke(t,e,i,s,null)}function ke(t,e,i,s,n){let o,a,r,l,h,c;const d=e.pointStyle,u=e.rotation,f=e.radius;let g=(u||0)*T;if(d&&"object"==typeof d&&(o=d.toString(),"[object HTMLImageElement]"===o||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,s),t.rotate(g),t.drawImage(d,-d.width/2,-d.height/2,d.width,d.height),void t.restore();if(!(isNaN(f)||f<=0)){switch(t.beginPath(),d){default:n?t.ellipse(i,s,n/2,f,0,0,O):t.arc(i,s,f,0,O),t.closePath();break;case"triangle":t.moveTo(i+Math.sin(g)*f,s-Math.cos(g)*f),g+=R,t.lineTo(i+Math.sin(g)*f,s-Math.cos(g)*f),g+=R,t.lineTo(i+Math.sin(g)*f,s-Math.cos(g)*f),t.closePath();break;case"rectRounded":h=.516*f,l=f-h,a=Math.cos(g+E)*l,r=Math.sin(g+E)*l,t.arc(i-a,s-r,h,g-D,g-L),t.arc(i+r,s-a,h,g-L,g),t.arc(i+a,s+r,h,g,g+L),t.arc(i-r,s+a,h,g+L,g+D),t.closePath();break;case"rect":if(!u){l=Math.SQRT1_2*f,c=n?n/2:l,t.rect(i-c,s-l,2*c,2*l);break}g+=E;case"rectRot":a=Math.cos(g)*f,r=Math.sin(g)*f,t.moveTo(i-a,s-r),t.lineTo(i+r,s-a),t.lineTo(i+a,s+r),t.lineTo(i-r,s+a),t.closePath();break;case"crossRot":g+=E;case"cross":a=Math.cos(g)*f,r=Math.sin(g)*f,t.moveTo(i-a,s-r),t.lineTo(i+a,s+r),t.moveTo(i+r,s-a),t.lineTo(i-r,s+a);break;case"star":a=Math.cos(g)*f,r=Math.sin(g)*f,t.moveTo(i-a,s-r),t.lineTo(i+a,s+r),t.moveTo(i+r,s-a),t.lineTo(i-r,s+a),g+=E,a=Math.cos(g)*f,r=Math.sin(g)*f,t.moveTo(i-a,s-r),t.lineTo(i+a,s+r),t.moveTo(i+r,s-a),t.lineTo(i-r,s+a);break;case"line":a=n?n/2:Math.cos(g)*f,r=Math.sin(g)*f,t.moveTo(i-a,s-r),t.lineTo(i+a,s+r);break;case"dash":t.moveTo(i,s),t.lineTo(i+Math.cos(g)*f,s+Math.sin(g)*f)}t.fill(),e.borderWidth>0&&t.stroke()}}function Se(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.x<e.right+i&&t.y>e.top-i&&t.y<e.bottom+i}function Pe(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()}function De(t){t.restore()}function Oe(t,e,i,s,n){if(!e)return t.lineTo(i.x,i.y);if("middle"===n){const s=(e.x+i.x)/2;t.lineTo(s,e.y),t.lineTo(s,i.y)}else"after"===n!=!!s?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y);t.lineTo(i.x,i.y)}function Ce(t,e,i,s){if(!e)return t.lineTo(i.x,i.y);t.bezierCurveTo(s?e.cp1x:e.cp2x,s?e.cp1y:e.cp2y,s?i.cp2x:i.cp1x,s?i.cp2y:i.cp1y,i.x,i.y)}function Ae(t,e,n,o,a,r={}){const l=s(e)?e:[e],h=r.strokeWidth>0&&""!==r.strokeColor;let c,d;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]);i(e.rotation)||t.rotate(e.rotation);e.color&&(t.fillStyle=e.color);e.textAlign&&(t.textAlign=e.textAlign);e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,r),c=0;c<l.length;++c)d=l[c],h&&(r.strokeColor&&(t.strokeStyle=r.strokeColor),i(r.strokeWidth)||(t.lineWidth=r.strokeWidth),t.strokeText(d,n,o,r.maxWidth)),t.fillText(d,n,o,r.maxWidth),Te(t,n,o,d,r),o+=a.lineHeight;t.restore()}function Te(t,e,i,s,n){if(n.strikethrough||n.underline){const o=t.measureText(s),a=e-o.actualBoundingBoxLeft,r=e+o.actualBoundingBoxRight,l=i-o.actualBoundingBoxAscent,h=i+o.actualBoundingBoxDescent,c=n.strikethrough?(l+h)/2:h;t.strokeStyle=t.fillStyle,t.beginPath(),t.lineWidth=n.decorationWidth||2,t.moveTo(a,c),t.lineTo(r,c),t.stroke()}}function Le(t,e){const{x:i,y:s,w:n,h:o,radius:a}=e;t.arc(i+a.topLeft,s+a.topLeft,a.topLeft,-L,D,!0),t.lineTo(i,s+o-a.bottomLeft),t.arc(i+a.bottomLeft,s+o-a.bottomLeft,a.bottomLeft,D,L,!0),t.lineTo(i+n-a.bottomRight,s+o),t.arc(i+n-a.bottomRight,s+o-a.bottomRight,a.bottomRight,L,0,!0),t.lineTo(i+n,s+a.topRight),t.arc(i+n-a.topRight,s+a.topRight,a.topRight,0,-L,!0),t.lineTo(i+a.topLeft,s)}function Ee(t,e=[""],i=t,s,n=(()=>t[0])){M(s)||(s=$e("_fallback",t));const o={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:s,_getTarget:n,override:n=>Ee([n,...t],e,i,s)};return new Proxy(o,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>Ve(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=$e(ze(o,t),i),M(n))return Fe(t,n)?je(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>Ye(t).includes(e),ownKeys:t=>Ye(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function Re(t,e,i,o){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Ie(t,o),setContext:e=>Re(t,e,i,o),override:s=>Re(t.override(s),e,i,o)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>Ve(t,e,(()=>function(t,e,i){const{_proxy:o,_context:a,_subProxy:r,_descriptors:l}=t;let h=o[e];k(h)&&l.isScriptable(e)&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t),e=e(o,a||s),r.delete(t),Fe(t,e)&&(e=je(n._scopes,n,t,e));return e}(e,h,t,i));s(h)&&h.length&&(h=function(t,e,i,s){const{_proxy:o,_context:a,_subProxy:r,_descriptors:l}=i;if(M(a.index)&&s(t))e=e[a.index%e.length];else if(n(e[0])){const i=e,s=o._scopes.filter((t=>t!==i));e=[];for(const n of i){const i=je(s,o,t,n);e.push(Re(i,a,r&&r[t],l))}}return e}(e,h,t,l.isIndexable));Fe(e,h)&&(h=Re(h,a,r&&r[e],l));return h}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Ie(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:k(i)?i:()=>i,isIndexable:k(s)?s:()=>s}}const ze=(t,e)=>t?t+w(e):e,Fe=(t,e)=>n(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function Ve(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const s=i();return t[e]=s,s}function Be(t,e,i){return k(t)?t(e,i):t}const Ne=(t,e)=>!0===t?e:"string"==typeof t?y(e,t):void 0;function We(t,e,i,s,n){for(const o of e){const e=Ne(i,o);if(e){t.add(e);const o=Be(e._fallback,i,n);if(M(o)&&o!==i&&o!==s)return o}else if(!1===e&&M(s)&&i!==s)return null}return!1}function je(t,e,i,o){const a=e._rootScopes,r=Be(e._fallback,i,o),l=[...t,...a],h=new Set;h.add(o);let c=He(h,l,i,r||i,o);return null!==c&&((!M(r)||r===i||(c=He(h,l,r,c,o),null!==c))&&Ee(Array.from(h),[""],a,r,(()=>function(t,e,i){const o=t._getTarget();e in o||(o[e]={});const a=o[e];if(s(a)&&n(i))return i;return a}(e,i,o))))}function He(t,e,i,s,n){for(;i;)i=We(t,e,i,s,n);return i}function $e(t,e){for(const i of e){if(!i)continue;const e=i[t];if(M(e))return e}}function Ye(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function Ue(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;r<l;++r)h=r+i,c=e[h],a[r]={r:n.parse(y(c,o),h)};return a}const Xe=Number.EPSILON||1e-14,qe=(t,e)=>e<t.length&&!t[e].skip&&t[e],Ke=t=>"x"===t?"y":"x";function Ge(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=X(o,n),l=X(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function Ze(t,e="x"){const i=Ke(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=qe(t,0);for(a=0;a<s;++a)if(r=l,l=h,h=qe(t,a+1),l){if(h){const t=h[e]-l[e];n[a]=0!==t?(h[i]-l[i])/t:0}o[a]=r?h?z(n[a-1])!==z(n[a])?0:(n[a-1]+n[a])/2:n[a-1]:n[a]}!function(t,e,i){const s=t.length;let n,o,a,r,l,h=qe(t,0);for(let c=0;c<s-1;++c)l=h,h=qe(t,c+1),l&&h&&(N(e[c],0,Xe)?i[c]=i[c+1]=0:(n=i[c]/e[c],o=i[c+1]/e[c],r=Math.pow(n,2)+Math.pow(o,2),r<=9||(a=3/Math.sqrt(r),i[c]=n*a*e[c],i[c+1]=o*a*e[c])))}(t,n,o),function(t,e,i="x"){const s=Ke(i),n=t.length;let o,a,r,l=qe(t,0);for(let h=0;h<n;++h){if(a=r,r=l,l=qe(t,h+1),!r)continue;const n=r[i],c=r[s];a&&(o=(n-a[i])/3,r[`cp1${i}`]=n-o,r[`cp1${s}`]=c-o*e[h]),l&&(o=(l[i]-n)/3,r[`cp2${i}`]=n+o,r[`cp2${s}`]=c+o*e[h])}}(t,o,e)}function Je(t,e,i){return Math.max(Math.min(t,i),e)}function Qe(t,e,i,s,n){let o,a,r,l;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),"monotone"===e.cubicInterpolationMode)Ze(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o<a;++o)r=t[o],l=Ge(i,r,t[Math.min(o+1,a-(s?0:1))%a],e.tension),r.cp1x=l.previous.x,r.cp1y=l.previous.y,r.cp2x=l.next.x,r.cp2y=l.next.y,i=r}e.capBezierPoints&&function(t,e){let i,s,n,o,a,r=Se(t[0],e);for(i=0,s=t.length;i<s;++i)a=o,o=r,r=i<s-1&&Se(t[i+1],e),o&&(n=t[i],a&&(n.cp1x=Je(n.cp1x,e.left,e.right),n.cp1y=Je(n.cp1y,e.top,e.bottom)),r&&(n.cp2x=Je(n.cp2x,e.left,e.right),n.cp2y=Je(n.cp2y,e.top,e.bottom)))}(t,i)}const ti=t=>0===t||1===t,ei=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*O/i),ii=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*O/i)+1,si={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*L),easeOutSine:t=>Math.sin(t*L),easeInOutSine:t=>-.5*(Math.cos(D*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>ti(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>ti(t)?t:ei(t,.075,.3),easeOutElastic:t=>ti(t)?t:ii(t,.075,.3),easeInOutElastic(t){const e=.1125;return ti(t)?t:t<.5?.5*ei(2*t,e,.45):.5+.5*ii(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-si.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*si.easeInBounce(2*t):.5*si.easeOutBounce(2*t-1)+.5};function ni(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function oi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function ai(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=ni(t,n,i),r=ni(n,o,i),l=ni(o,e,i),h=ni(a,r,i),c=ni(r,l,i);return ni(h,c,i)}const ri=new Map;function li(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=ri.get(i);return s||(s=new Intl.NumberFormat(t,e),ri.set(i,s)),s}(e,i).format(t)}const hi=new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/),ci=new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);function di(t,e){const i=(""+t).match(hi);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}function ui(t,e){const i={},s=n(e),o=s?Object.keys(e):e,a=n(t)?s?i=>r(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of o)i[t]=+a(t)||0;return i}function fi(t){return ui(t,{top:"y",right:"x",bottom:"y",left:"x"})}function gi(t){return ui(t,["topLeft","topRight","bottomLeft","bottomRight"])}function pi(t){const e=fi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function mi(t,e){t=t||{},e=e||ne.font;let i=r(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=r(t.style,e.style);s&&!(""+s).match(ci)&&(console.warn('Invalid font style specified: "'+s+'"'),s="");const n={family:r(t.family,e.family),lineHeight:di(r(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:r(t.weight,e.weight),string:""};return n.string=xe(n),n}function bi(t,e,i,n){let o,a,r,l=!0;for(o=0,a=t.length;o<a;++o)if(r=t[o],void 0!==r&&(void 0!==e&&"function"==typeof r&&(r=r(e),l=!1),void 0!==i&&s(r)&&(r=r[i%r.length],l=!1),void 0!==r))return n&&!l&&(n.cacheable=!1),r}function xi(t,e,i){const{min:s,max:n}=t,o=h(e,(n-s)/2),a=(t,e)=>i&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function _i(t,e){return Object.assign(Object.create(t),e)}function yi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function vi(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function wi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Mi(t){return"angle"===t?{between:G,compare:q,normalize:K}:{between:Q,compare:(t,e)=>t-e,normalize:t=>t}}function ki({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Si(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Mi(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Mi(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;h<c&&a(r(e[d%l][s]),n,o);++h)d--,u--;d%=l,u%=l}return u<d&&(u+=l),{start:d,end:u,loop:f,style:t.style}}(t,e,i),g=[];let p,m,b,x=!1,_=null;const y=()=>x||l(n,b,p)&&0!==r(n,b),v=()=>!x||0===r(o,p)||l(o,b,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==b&&(x=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(ki({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,b=p));return null!==_&&g.push(ki({start:_,end:d,loop:u,count:a,style:f})),g}function Pi(t,e){const i=[],s=t.segments;for(let n=0;n<s.length;n++){const o=Si(s[n],t.points,e);o.length&&i.push(...o)}return i}function Di(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)return[];const o=!!t._loop,{start:a,end:r}=function(t,e,i,s){let n=0,o=e-1;if(i&&!s)for(;n<e&&!t[n].skip;)n++;for(;n<e&&t[n].skip;)n++;for(n%=e,i&&(o+=n);o>n&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Oi(t,[{start:a,end:r,loop:o}],i,e);return Oi(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r<a?r+n:r,!!t._fullLoop&&0===a&&r===n-1),i,e)}function Oi(t,e,i,s){return s&&s.setContext&&i?function(t,e,i,s){const n=t._chart.getContext(),o=Ci(t.options),{_datasetIndex:a,options:{spanGaps:r}}=t,l=i.length,h=[];let c=o,d=e[0].start,u=d;function f(t,e,s,n){const o=r?-1:1;if(t!==e){for(t+=l;i[t%l].skip;)t-=o;for(;i[e%l].skip;)e+=o;t%l!=e%l&&(h.push({start:t%l,end:e%l,loop:s,style:n}),c=n,d=e%l)}}for(const t of e){d=r?d:t.start;let e,o=i[d%l];for(u=d+1;u<=t.end;u++){const r=i[u%l];e=Ci(s.setContext(_i(n,{type:"segment",p0:o,p1:r,p0DataIndex:(u-1)%l,p1DataIndex:u%l,datasetIndex:a}))),Ai(e,c)&&f(d,u-1,t.loop,c),o=r,c=e}d<u-1&&f(d,u-1,t.loop,c)}return h}(t,e,i,s):e}function Ci(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,borderWidth:t.borderWidth,borderColor:t.borderColor}}function Ai(t,e){return e&&JSON.stringify(t)!==JSON.stringify(e)}var Ti=Object.freeze({__proto__:null,easingEffects:si,isPatternOrGradient:Zt,color:Jt,getHoverColor:Qt,noop:t,uid:e,isNullOrUndef:i,isArray:s,isObject:n,isFinite:o,finiteOrDefault:a,valueOrDefault:r,toPercentage:l,toDimension:h,callback:c,each:d,_elementsEqual:u,clone:f,_merger:p,merge:m,mergeIf:b,_mergerIf:x,_deprecated:function(t,e,i,s){void 0!==e&&console.warn(t+': "'+i+'" is deprecated. Please use "'+s+'" instead')},resolveObjectKey:y,_splitKey:v,_capitalize:w,defined:M,isFunction:k,setsEqual:S,_isClickEvent:P,toFontString:xe,_measureText:_e,_longestText:ye,_alignPixel:ve,clearCanvas:we,drawPoint:Me,drawPointLegend:ke,_isPointInArea:Se,clipArea:Pe,unclipArea:De,_steppedLineTo:Oe,_bezierCurveTo:Ce,renderText:Ae,addRoundedRectPath:Le,_lookup:tt,_lookupByKey:et,_rlookupByKey:it,_filterBetween:st,listenArrayEvents:ot,unlistenArrayEvents:at,_arrayUnique:rt,_createResolver:Ee,_attachContext:Re,_descriptors:Ie,_parseObjectDataRadialScale:Ue,splineCurve:Ge,splineCurveMonotone:Ze,_updateBezierControlPoints:Qe,_isDomSupported:oe,_getParentNode:ae,getStyle:he,getRelativePosition:ue,getMaximumSize:ge,retinaScale:pe,supportsEventListenerOptions:me,readUsedSize:be,fontString:function(t,e,i){return e+" "+t+"px "+i},requestAnimFrame:lt,throttled:ht,debounce:ct,_toLeftRightCenter:dt,_alignStartEnd:ut,_textX:ft,_getStartAndCountOfVisiblePoints:gt,_scaleRangesChanged:pt,_pointInLine:ni,_steppedInterpolation:oi,_bezierInterpolation:ai,formatNumber:li,toLineHeight:di,_readValueToProps:ui,toTRBL:fi,toTRBLCorners:gi,toPadding:pi,toFont:mi,resolve:bi,_addGrace:xi,createContext:_i,PI:D,TAU:O,PITAU:C,INFINITY:A,RAD_PER_DEG:T,HALF_PI:L,QUARTER_PI:E,TWO_THIRDS_PI:R,log10:I,sign:z,niceNum:F,_factorize:V,isNumber:B,almostEquals:N,almostWhole:W,_setMinAndMaxByKey:j,toRadians:H,toDegrees:$,_decimalPlaces:Y,getAngleFromPoint:U,distanceBetweenPoints:X,_angleDiff:q,_normalizeAngle:K,_angleBetween:G,_limitValue:Z,_int16Range:J,_isBetween:Q,getRtlAdapter:yi,overrideTextDirection:vi,restoreTextDirection:wi,_boundSegment:Si,_boundSegments:Pi,_computeSegments:Di});function Li(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedMeta.iScale;if(r&&e===r.axis&&"r"!==e&&a&&o.length){const t=r._reversePixels?it:et;if(!s)return t(o,e,i);if(n._sharedOptions){const s=o[0],n="function"==typeof s.getRange&&s.getRange(e);if(n){const s=t(o,e,i-n),a=t(o,e,i+n);return{lo:s.lo,hi:a.hi}}}}return{lo:0,hi:o.length-1}}function Ei(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t<i;++t){const{index:i,data:r}=o[t],{lo:l,hi:h}=Li(o[t],e,a,n);for(let t=l;t<=h;++t){const e=r[t];e.skip||s(e,i,t)}}}function Ri(t,e,i,s,n){const o=[];if(!n&&!t.isPointInArea(e))return o;return Ei(t,i,e,(function(i,a,r){(n||Se(i,t.chartArea,0))&&i.inRange(e.x,e.y,s)&&o.push({element:i,datasetIndex:a,index:r})}),!0),o}function Ii(t,e,i,s,n,o){let a=[];const r=function(t){const e=-1!==t.indexOf("x"),i=-1!==t.indexOf("y");return function(t,s){const n=e?Math.abs(t.x-s.x):0,o=i?Math.abs(t.y-s.y):0;return Math.sqrt(Math.pow(n,2)+Math.pow(o,2))}}(i);let l=Number.POSITIVE_INFINITY;return Ei(t,i,e,(function(i,h,c){const d=i.inRange(e.x,e.y,n);if(s&&!d)return;const u=i.getCenterPoint(n);if(!(!!o||t.isPointInArea(u))&&!d)return;const f=r(e,u);f<l?(a=[{element:i,datasetIndex:h,index:c}],l=f):f===l&&a.push({element:i,datasetIndex:h,index:c})})),a}function zi(t,e,i,s,n,o){return o||t.isPointInArea(e)?"r"!==i||s?Ii(t,e,i,s,n,o):function(t,e,i,s){let n=[];return Ei(t,i,e,(function(t,i,o){const{startAngle:a,endAngle:r}=t.getProps(["startAngle","endAngle"],s),{angle:l}=U(t,{x:e.x,y:e.y});G(l,a,r)&&n.push({element:t,datasetIndex:i,index:o})})),n}(t,e,i,n):[]}function Fi(t,e,i,s,n){const o=[],a="x"===i?"inXRange":"inYRange";let r=!1;return Ei(t,i,e,((t,s,l)=>{t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Vi={evaluateInteractionItems:Ei,modes:{index(t,e,i,s){const n=ue(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?Ri(t,n,o,s,a):zi(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=ue(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?Ri(t,n,o,s,a):zi(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;t<i.length;++t)r.push({element:i[t],datasetIndex:e,index:t})}return r},point:(t,e,i,s)=>Ri(t,ue(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ue(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return zi(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>Fi(t,ue(e,t),"x",i.intersect,s),y:(t,e,i,s)=>Fi(t,ue(e,t),"y",i.intersect,s)}};const Bi=["left","top","right","bottom"];function Ni(t,e){return t.filter((t=>t.pos===e))}function Wi(t,e){return t.filter((t=>-1===Bi.indexOf(t.pos)&&t.box.axis===e))}function ji(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function Hi(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Bi.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o<a;++o){r=t[o];const{fullSize:a}=r.box,l=i[r.stack],h=l&&r.stackWeight/l.weight;r.horizontal?(r.width=h?h*s:a&&e.availableWidth,r.height=n):(r.width=s,r.height=h?h*n:a&&e.availableHeight)}return i}function $i(t,e,i,s){return Math.max(t[i],e[i])+Math.max(t[s],e[s])}function Yi(t,e){t.top=Math.max(t.top,e.top),t.left=Math.max(t.left,e.left),t.bottom=Math.max(t.bottom,e.bottom),t.right=Math.max(t.right,e.right)}function Ui(t,e,i,s){const{pos:o,box:a}=i,r=t.maxPadding;if(!n(o)){i.size&&(t[o]-=i.size);const e=s[i.stack]||{size:0,count:1};e.size=Math.max(e.size,i.horizontal?a.height:a.width),i.size=e.size/e.count,t[o]+=i.size}a.getPadding&&Yi(r,a.getPadding());const l=Math.max(0,e.outerWidth-$i(r,t,"left","right")),h=Math.max(0,e.outerHeight-$i(r,t,"top","bottom")),c=l!==t.w,d=h!==t.h;return t.w=l,t.h=h,i.horizontal?{same:c,other:d}:{same:d,other:c}}function Xi(t,e){const i=e.maxPadding;function s(t){const s={left:0,top:0,right:0,bottom:0};return t.forEach((t=>{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function qi(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;o<a;++o){r=t[o],l=r.box,l.update(r.width||e.w,r.height||e.h,Xi(r.horizontal,e));const{same:a,other:d}=Ui(e,i,r,s);h|=a&&n.length,c=c||d,l.fullSize||n.push(r)}return h&&qi(n,e,i,s)||c}function Ki(t,e,i,s,n){t.top=i,t.left=e,t.right=e+s,t.bottom=i+n,t.width=s,t.height=n}function Gi(t,e,i,s){const n=i.padding;let{x:o,y:a}=e;for(const r of t){const t=r.box,l=s[r.stack]||{count:1,placed:0,weight:1},h=r.stackWeight/l.weight||1;if(r.horizontal){const s=e.w*h,o=l.size||t.height;M(l.start)&&(a=l.start),t.fullSize?Ki(t,n.left,a,i.outerWidth-n.right-n.left,o):Ki(t,e.left+l.placed,a,s,o),l.start=a,l.placed+=s,a=t.bottom}else{const s=e.h*h,a=l.size||t.width;M(l.start)&&(o=l.start),t.fullSize?Ki(t,o,n.top,a,i.outerHeight-n.bottom-n.top):Ki(t,o,e.top+l.placed,a,s),l.start=o,l.placed+=s,o=t.right}}e.x=o,e.y=a}ne.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}});var Zi={addBox(t,e){t.boxes||(t.boxes=[]),e.fullSize=e.fullSize||!1,e.position=e.position||"top",e.weight=e.weight||0,e._layers=e._layers||function(){return[{z:0,draw(t){e.draw(t)}}]},t.boxes.push(e)},removeBox(t,e){const i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure(t,e,i){e.fullSize=i.fullSize,e.position=i.position,e.weight=i.weight},update(t,e,i,s){if(!t)return;const n=pi(t.options.layout.padding),o=Math.max(e-n.width,0),a=Math.max(i-n.height,0),r=function(t){const e=function(t){const e=[];let i,s,n,o,a,r;for(i=0,s=(t||[]).length;i<s;++i)n=t[i],({position:o,options:{stack:a,stackWeight:r=1}}=n),e.push({index:i,box:n,pos:o,horizontal:n.isHorizontal(),weight:n.weight,stack:a&&o+a,stackWeight:r});return e}(t),i=ji(e.filter((t=>t.box.fullSize)),!0),s=ji(Ni(e,"left"),!0),n=ji(Ni(e,"right")),o=ji(Ni(e,"top"),!0),a=ji(Ni(e,"bottom")),r=Wi(e,"x"),l=Wi(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ni(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;d(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,u=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),f=Object.assign({},n);Yi(f,pi(s));const g=Object.assign({maxPadding:f,w:o,h:a,x:n.left,y:n.top},n),p=Hi(l.concat(h),u);qi(r.fullSize,g,u,p),qi(l,g,u,p),qi(h,g,u,p)&&qi(l,g,u,p),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(g),Gi(r.leftAndTop,g,u,p),g.x+=g.w,g.y+=g.h,Gi(r.rightAndBottom,g,u,p),t.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},d(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class Ji{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class Qi extends Ji{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const ts={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},es=t=>null===t||""===t;const is=!!me&&{passive:!0};function ss(t,e,i){t.canvas.removeEventListener(e,i,is)}function ns(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function os(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ns(i.addedNodes,s),e=e&&!ns(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function as(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ns(i.removedNodes,s),e=e&&!ns(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const rs=new Map;let ls=0;function hs(){const t=window.devicePixelRatio;t!==ls&&(ls=t,rs.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function cs(t,e,i){const s=t.canvas,n=s&&ae(s);if(!n)return;const o=ht(((t,e)=>{const s=n.clientWidth;i(t,e),s<n.clientWidth&&i()}),window),a=new ResizeObserver((t=>{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){rs.size||window.addEventListener("resize",hs),rs.set(t,e)}(t,o),a}function ds(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){rs.delete(t),rs.size||window.removeEventListener("resize",hs)}(t)}function us(t,e,i){const s=t.canvas,n=ht((e=>{null!==t.ctx&&i(function(t,e){const i=ts[t.type]||t.type,{x:s,y:n}=ue(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t,(t=>{const e=t[0];return[e,e.offsetX,e.offsetY]}));return function(t,e,i){t.addEventListener(e,i,is)}(s,e,n),n}class fs extends Ji{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",es(n)){const e=be(t,"width");void 0!==e&&(t.width=e)}if(es(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=be(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const s=e.$chartjs.initial;["height","width"].forEach((t=>{const n=s[t];i(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=s.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:os,detach:as,resize:cs}[e]||us;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:ds,detach:ds,resize:ds}[e]||ss)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return ge(t,e,i,s)}isAttached(t){const e=ae(t);return!(!e||!e.isConnected)}}function gs(t){return!oe()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?Qi:fs}var ps=Object.freeze({__proto__:null,_detectPlatform:gs,BasePlatform:Ji,BasicPlatform:Qi,DomPlatform:fs});const ms="transparent",bs={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Jt(t||ms),n=s.valid&&Jt(e||ms);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class xs{constructor(t,e,i,s){const n=e[i];s=bi([t.to,s,n,t.from]);const o=bi([t.from,n,s]);this._active=!0,this._fn=t.fn||bs[t.type||typeof o],this._easing=si[t.easing]||si.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=bi([t.to,e,s,t.from]),this._from=bi([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e<i),!this._active)return this._target[s]=a,void this._notify(!0);e<0?this._target[s]=n:(r=e/i%2,r=o&&r>1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t<i.length;t++)i[t][e]()}}ne.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0});const _s=Object.keys(ne.animation);ne.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),ne.set("animations",{colors:{type:"color",properties:["color","borderColor","backgroundColor"]},numbers:{type:"number",properties:["x","y","borderWidth","radius","tension"]}}),ne.describe("animations",{_fallback:"animation"}),ne.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}});class ys{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!n(t))return;const e=this._properties;Object.getOwnPropertyNames(t).forEach((i=>{const o=t[i];if(!n(o))return;const a={};for(const t of _s)a[t]=o[t];(s(o.properties)&&o.properties||[i]).forEach((t=>{t!==i&&e.has(t)||e.set(t,a)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e<s.length;e++){const n=t[s[e]];n&&n.active()&&i.push(n.wait())}return Promise.all(i)}(t.options.$animations,i).then((()=>{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new xs(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(mt.add(this._chart,i),!0):void 0}}function vs(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function ws(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n<o;++n)i.push(s[n].index);return i}function Ms(t,e,i,s={}){const n=t.keys,a="single"===s.mode;let r,l,h,c;if(null!==e){for(r=0,l=n.length;r<l;++r){if(h=+n[r],h===i){if(s.all)continue;break}c=t.values[h],o(c)&&(a||0===e||z(e)===z(c))&&(e+=c)}return e}}function ks(t,e){const i=t&&t.options.stacked;return i||void 0===i&&void 0!==e.stack}function Ss(t,e,i){const s=t[e]||(t[e]={});return s[i]||(s[i]={})}function Ps(t,e,i,s){for(const n of e.getMatchingVisibleMetas(s).reverse()){const e=t[n.index];if(i&&e>0||!i&&e<0)return n.index}return null}function Ds(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;t<d;++t){const i=e[t],{[l]:o,[h]:d}=i;u=(i._stacks||(i._stacks={}))[h]=Ss(n,c,o),u[r]=d,u._top=Ps(u,a,!0,s.type),u._bottom=Ps(u,a,!1,s.type)}}function Os(t,e){const i=t.scales;return Object.keys(i).filter((t=>i[t].axis===e)).shift()}function Cs(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i]}}}const As=t=>"reset"===t||"none"===t,Ts=(t,e)=>e?t:Object.assign({},t);class Ls{constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=ks(t.vScale,t),this.addElements()}updateIndex(t){this.index!==t&&Cs(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=r(i.xAxisID,Os(t,"x")),o=e.yAxisID=r(i.yAxisID,Os(t,"y")),a=e.rAxisID=r(i.rAxisID,Os(t,"r")),l=e.indexAxis,h=e.iAxisID=s(l,n,o,a),c=e.vAxisID=s(l,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&at(this._data,this),t._stacked&&Cs(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(n(e))this._data=function(t){const e=Object.keys(t),i=new Array(e.length);let s,n,o;for(s=0,n=e.length;s<n;++s)o=e[s],i[s]={x:o,y:t[o]};return i}(e);else if(i!==e){if(i){at(i,this);const t=this._cachedMeta;Cs(t),t._parsed=[]}e&&Object.isExtensible(e)&&ot(e,this),this._syncList=[],this._data=e}}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const n=e._stacked;e._stacked=ks(e.vScale,e),e.stack!==i.stack&&(s=!0,Cs(e),e.stack=i.stack),this._resyncElements(t),(s||n!==e._stacked)&&Ds(this,e._parsed)}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:o}=this,{iScale:a,_stacked:r}=i,l=a.axis;let h,c,d,u=0===t&&e===o.length||i._sorted,f=t>0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=o,i._sorted=!0,d=o;else{d=s(o[t])?this.parseArrayData(i,o,t,e):n(o[t])?this.parseObjectData(i,o,t,e):this.parsePrimitiveData(i,o,t,e);const a=()=>null===c[l]||f&&c[l]<f[l];for(h=0;h<e;++h)i._parsed[h+t]=c=d[h],u&&(a()&&(u=!1),f=c);i._sorted=u}r&&Ds(this,d)}parsePrimitiveData(t,e,i,s){const{iScale:n,vScale:o}=t,a=n.axis,r=o.axis,l=n.getLabels(),h=n===o,c=new Array(s);let d,u,f;for(d=0,u=s;d<u;++d)f=d+i,c[d]={[a]:h||n.parse(l[f],f),[r]:o.parse(e[f],f)};return c}parseArrayData(t,e,i,s){const{xScale:n,yScale:o}=t,a=new Array(s);let r,l,h,c;for(r=0,l=s;r<l;++r)h=r+i,c=e[h],a[r]={x:n.parse(c[0],h),y:o.parse(c[1],h)};return a}parseObjectData(t,e,i,s){const{xScale:n,yScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l=new Array(s);let h,c,d,u;for(h=0,c=s;h<c;++h)d=h+i,u=e[d],l[h]={x:n.parse(y(u,a),d),y:o.parse(y(u,r),d)};return l}getParsed(t){return this._cachedMeta._parsed[t]}getDataElement(t){return this._cachedMeta.data[t]}applyStack(t,e,i){const s=this.chart,n=this._cachedMeta,o=e[t.axis];return Ms({keys:ws(s,!0),values:e._stacks[t.axis]},o,n.index,{mode:i})}updateRangeFromParsed(t,e,i,s){const n=i[e.axis];let o=null===n?NaN:n;const a=s&&i._stacks[e.axis];s&&a&&(s.values=a,o=Ms(s,n,this._cachedMeta.index)),t.min=Math.min(t.min,o),t.max=Math.max(t.max,o)}getMinMax(t,e){const i=this._cachedMeta,s=i._parsed,n=i._sorted&&t===i.iScale,a=s.length,r=this._getOtherScale(t),l=((t,e,i)=>t&&!e.hidden&&e._stacked&&{keys:ws(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:c,max:d}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(r);let u,f;function g(){f=s[u];const e=f[r.axis];return!o(f[t.axis])||c>e||d<e}for(u=0;u<a&&(g()||(this.updateRangeFromParsed(h,t,f,l),!n));++u);if(n)for(u=a-1;u>=0;--u)if(!g()){this.updateRangeFromParsed(h,t,f,l);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,a;for(s=0,n=e.length;s<n;++s)a=e[s][t.axis],o(a)&&i.push(a);return i}getMaxOverflow(){return!1}getLabelAndValue(t){const e=this._cachedMeta,i=e.iScale,s=e.vScale,n=this.getParsed(t);return{label:i?""+i.getLabelForValue(n[i.axis]):"",value:s?""+s.getLabelForValue(n[s.axis]):""}}_update(t){const e=this._cachedMeta;this.update(t||"default"),e._clip=function(t){let e,i,s,o;return n(t)?(e=t.top,i=t.right,s=t.bottom,o=t.left):e=i=s=o=t,{top:e,right:i,bottom:s,left:o,disabled:!1===t}}(r(this.options.clip,function(t,e,i){if(!1===i)return!1;const s=vs(t,i),n=vs(e,i);return{top:n.end,right:s.end,bottom:n.start,left:s.start}}(e.xScale,e.yScale,this.getMaxOverflow())))}update(t){}draw(){const t=this._ctx,e=this.chart,i=this._cachedMeta,s=i.data||[],n=e.chartArea,o=[],a=this._drawStart||0,r=this._drawCount||s.length-a,l=this.options.drawActiveElementsOnTop;let h;for(i.dataset&&i.dataset.draw(t,n,a,r),h=a;h<a+r;++h){const e=s[h];e.hidden||(e.active&&l?o.push(e):e.draw(t,n))}for(h=0;h<o.length;++h)o[h].draw(t,n)}getStyle(t,e){const i=e?"active":"default";return void 0===t&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(i):this.resolveDataElementOptions(t||0,i)}getContext(t,e,i){const s=this.getDataset();let n;if(t>=0&&t<this._cachedMeta.data.length){const e=this._cachedMeta.data[t];n=e.$context||(e.$context=function(t,e,i){return _i(t,{active:!1,dataIndex:e,parsed:void 0,raw:void 0,element:i,index:e,mode:"default",type:"data"})}(this.getContext(),t,e)),n.parsed=this.getParsed(t),n.raw=s.data[t],n.index=n.dataIndex=t}else n=this.$context||(this.$context=function(t,e){return _i(t,{active:!1,dataset:void 0,datasetIndex:e,index:e,mode:"default",type:"dataset"})}(this.chart.getContext(),this.index)),n.dataset=s,n.index=n.datasetIndex=this.index;return n.active=!!e,n.mode=i,n}resolveDatasetElementOptions(t){return this._resolveElementOptions(this.datasetElementType.id,t)}resolveDataElementOptions(t,e){return this._resolveElementOptions(this.dataElementType.id,e,t)}_resolveElementOptions(t,e="default",i){const s="active"===e,n=this._cachedDataOpts,o=t+"-"+e,a=n[o],r=this.enableOptionSharing&&M(i);if(a)return Ts(a,r);const l=this.chart.config,h=l.datasetElementScopeKeys(this._type,t),c=s?[`${t}Hover`,"hover",t,""]:[t,""],d=l.getOptionScopes(this.getDataset(),h),u=Object.keys(ne.elements[t]),f=l.resolveNamedOptions(d,u,(()=>this.getContext(i,s)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Ts(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new ys(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||As(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){As(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!As(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n<s&&this._removeElements(n,s-n)}_insertElements(t,e,i=!0){const s=this._cachedMeta,n=s.data,o=t+e;let a;const r=t=>{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a<o;++a)n[a]=new this.dataElementType;this._parsing&&r(s._parsed),this.parse(t,e),i&&this.updateElements(n,t,e,"reset")}updateElements(t,e,i,s){}_removeElements(t,e){const i=this._cachedMeta;if(this._parsing){const s=i._parsed.splice(t,e);i._stacked&&Cs(i,s)}i.data.splice(t,e)}_sync(t){if(this._parsing)this._syncList.push(t);else{const[e,i,s]=t;this[e](i,s)}this.chart._dataChanges.push([this.index,...t])}_onDataPush(){const t=arguments.length;this._sync(["_insertElements",this.getDataset().data.length-t,t])}_onDataPop(){this._sync(["_removeElements",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync(["_removeElements",0,1])}_onDataSplice(t,e){e&&this._sync(["_removeElements",t,e]);const i=arguments.length-2;i&&this._sync(["_insertElements",t,i])}_onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}}Ls.defaults={},Ls.prototype.datasetElementType=null,Ls.prototype.dataElementType=null;class Es{constructor(){this.x=void 0,this.y=void 0,this.active=!1,this.options=void 0,this.$animations=void 0}tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return B(this.x)&&B(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach((t=>{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}Es.defaults={},Es.defaultRoutes=void 0;const Rs={values:t=>s(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=I(Math.abs(o)),r=Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),li(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=t/Math.pow(10,Math.floor(I(t)));return 1===s||2===s||5===s?Rs.numeric.call(this,t,e,i):""}};var Is={formatters:Rs};function zs(t,e){const s=t.options.ticks,n=s.maxTicksLimit||function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),o=s.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;i<s;i++)t[i].major&&e.push(i);return e}(e):[],a=o.length,r=o[0],l=o[a-1],h=[];if(a>n)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;n<t.length;n++)n===a&&(e.push(t[n]),o++,a=i[o*s])}(e,h,o,a/n),h;const c=function(t,e,i){const s=function(t){const e=t.length;let i,s;if(e<2)return!1;for(s=t[0],i=1;i<e;++i)if(t[i]-t[i-1]!==s)return!1;return s}(t),n=e.length/i;if(!s)return Math.max(n,1);const o=V(s);for(let t=0,e=o.length-1;t<e;t++){const e=o[t];if(e>n)return e}return Math.max(n,1)}(o,e,n);if(a>0){let t,s;const n=a>1?Math.round((l-r)/(a-1)):null;for(Fs(e,h,c,i(n)?0:r-n,r),t=0,s=a-1;t<s;t++)Fs(e,h,c,o[t],o[t+1]);return Fs(e,h,c,l,i(n)?e.length:l+n),h}return Fs(e,h,c),h}function Fs(t,e,i,s,n){const o=r(s,0),a=Math.min(r(n,t.length),t.length);let l,h,c,d=0;for(i=Math.ceil(i),n&&(l=n-s,i=l/Math.floor(l/i)),c=o;c<0;)d++,c=Math.round(o+d*i);for(h=Math.max(o,0);h<a;h++)h===c&&(e.push(t[h]),d++,c=Math.round(o+d*i))}ne.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",grace:0,grid:{display:!0,lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1,borderDash:[],borderDashOffset:0,borderWidth:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Is.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),ne.route("scale.ticks","color","","color"),ne.route("scale.grid","color","","borderColor"),ne.route("scale.grid","borderColor","","borderColor"),ne.route("scale.title","color","","color"),ne.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t}),ne.describe("scales",{_fallback:"scale"}),ne.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t});const Vs=(t,e,i)=>"top"===e||"left"===e?t[e]+i:t[e]-i;function Bs(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;o<n;o+=s)i.push(t[Math.floor(o)]);return i}function Ns(t,e,i){const s=t.ticks.length,n=Math.min(e,s-1),o=t._startPixel,a=t._endPixel,r=1e-6;let l,h=t.getPixelForTick(n);if(!(i&&(l=1===s?Math.max(h-o,a-h):0===e?(t.getPixelForTick(1)-h)/2:(h-t.getPixelForTick(n-1))/2,h+=n<e?l:-l,h<o-r||h>a+r)))return h}function Ws(t){return t.drawTicks?t.tickLength:0}function js(t,e){if(!t.display)return 0;const i=mi(t.font,e),n=pi(t.padding);return(s(t.text)?t.text.length:1)*i.lineHeight+n.height}function Hs(t,e,i){let s=dt(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class $s extends Es{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=a(t,Number.POSITIVE_INFINITY),e=a(e,Number.NEGATIVE_INFINITY),i=a(i,Number.POSITIVE_INFINITY),s=a(s,Number.NEGATIVE_INFINITY),{min:a(t,i),max:a(e,s),minDefined:o(t),maxDefined:o(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const r=this.getMatchingVisibleMetas();for(let a=0,l=r.length;a<l;++a)e=r[a].controller.getMinMax(this,t),n||(i=Math.min(i,e.min)),o||(s=Math.max(s,e.max));return i=o&&i>s?s:i,s=n&&i>s?i:s,{min:a(i,a(s,i)),max:a(s,a(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){c(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=xi(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a<this.ticks.length;this._convertTicksToLabels(r?Bs(this.ticks,a):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),o.display&&(o.autoSkip||"auto"===o.source)&&(this.ticks=zs(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),r&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let t,e,i=this.options.reverse;this.isHorizontal()?(t=this.left,e=this.right):(t=this.top,e=this.bottom,i=!i),this._startPixel=t,this._endPixel=e,this._reversePixels=i,this._length=e-t,this._alignToPixels=this.options.alignToPixels}afterUpdate(){c(this.options.afterUpdate,[this])}beforeSetDimensions(){c(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){c(this.options.afterSetDimensions,[this])}_callHooks(t){this.chart.notifyPlugins(t,this.getContext()),c(this.options[t],[this])}beforeDataLimits(){this._callHooks("beforeDataLimits")}determineDataLimits(){}afterDataLimits(){this._callHooks("afterDataLimits")}beforeBuildTicks(){this._callHooks("beforeBuildTicks")}buildTicks(){return[]}afterBuildTicks(){this._callHooks("afterBuildTicks")}beforeTickToLabelConversion(){c(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){const e=this.options.ticks;let i,s,n;for(i=0,s=t.length;i<s;i++)n=t[i],n.label=c(e.callback,[n.value,i,t],this)}afterTickToLabelConversion(){c(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){c(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){const t=this.options,e=t.ticks,i=this.ticks.length,s=e.minRotation||0,n=e.maxRotation;let o,a,r,l=s;if(!this._isVisible()||!e.display||s>=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=Z(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Ws(t.grid)-e.padding-js(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=$(Math.min(Math.asin(Z((h.highest.height+6)/o,-1,1)),Math.asin(Z(a/r,-1,1))-Math.asin(Z(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){c(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){c(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=js(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ws(n)+o):(t.height=this.maxHeight,t.width=Ws(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=H(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){c(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,s;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,s=t.length;e<s;e++)i(t[e].label)&&(t.splice(e,1),s--,e--);this.afterTickToLabelConversion()}_getLabelSizes(){let t=this._labelSizes;if(!t){const e=this.options.ticks.sampleSize;let i=this.ticks;e<i.length&&(i=Bs(i,e)),this._labelSizes=t=this._computeLabelSizes(i,i.length)}return t}_computeLabelSizes(t,e){const{ctx:n,_longestTextCache:o}=this,a=[],r=[];let l,h,c,u,f,g,p,m,b,x,_,y=0,v=0;for(l=0;l<e;++l){if(u=t[l].label,f=this._resolveTickFontOptions(l),n.font=g=f.string,p=o[g]=o[g]||{data:{},gc:[]},m=f.lineHeight,b=x=0,i(u)||s(u)){if(s(u))for(h=0,c=u.length;h<c;++h)_=u[h],i(_)||s(_)||(b=_e(n,p.data,p.gc,b,_),x+=m)}else b=_e(n,p.data,p.gc,b,u),x=m;a.push(b),r.push(x),y=Math.max(b,y),v=Math.max(x,v)}!function(t,e){d(t,(t=>{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n<s;++n)delete t.data[i[n]];i.splice(0,s)}}))}(o,e);const w=a.indexOf(y),M=r.indexOf(v),k=t=>({width:a[t]||0,height:r[t]||0});return{first:k(0),last:k(e-1),widest:k(w),highest:k(M),widths:a,heights:r}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return J(this._alignToPixels?ve(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&t<e.length){const i=e[t];return i.$context||(i.$context=function(t,e,i){return _i(t,{tick:i,index:e,type:"tick"})}(this.getContext(),t,i))}return this.$context||(this.$context=_i(this.chart.getContext(),{scale:this,type:"scale"}))}_tickSize(){const t=this.options.ticks,e=H(this.labelRotation),i=Math.abs(Math.cos(e)),s=Math.abs(Math.sin(e)),n=this._getLabelSizes(),o=t.autoSkipPadding||0,a=n?n.widest.width+o:0,r=n?n.highest.height+o:0;return this.isHorizontal()?r*i>a*s?a/i:r/s:r*s<a*i?r/i:a/s}_isVisible(){const t=this.options.display;return"auto"!==t?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:o,position:a}=s,l=o.offset,h=this.isHorizontal(),c=this.ticks.length+(l?1:0),d=Ws(o),u=[],f=o.setContext(this.getContext()),g=f.drawBorder?f.borderWidth:0,p=g/2,m=function(t){return ve(i,t,g)};let b,x,_,y,v,w,M,k,S,P,D,O;if("top"===a)b=m(this.bottom),w=this.bottom-d,k=b-p,P=m(t.top)+p,O=t.bottom;else if("bottom"===a)b=m(this.top),P=t.top,O=m(t.bottom)-p,w=b+p,k=this.top+d;else if("left"===a)b=m(this.right),v=this.right-d,M=b-p,S=m(t.left)+p,D=t.right;else if("right"===a)b=m(this.left),S=t.left,D=m(t.right)-p,v=b+p,M=this.left+d;else if("x"===e){if("center"===a)b=m((t.top+t.bottom)/2+.5);else if(n(a)){const t=Object.keys(a)[0],e=a[t];b=m(this.chart.scales[t].getPixelForValue(e))}P=t.top,O=t.bottom,w=b+p,k=w+d}else if("y"===e){if("center"===a)b=m((t.left+t.right)/2);else if(n(a)){const t=Object.keys(a)[0],e=a[t];b=m(this.chart.scales[t].getPixelForValue(e))}v=b-p,M=v-d,S=t.left,D=t.right}const C=r(s.ticks.maxTicksLimit,c),A=Math.max(1,Math.ceil(c/C));for(x=0;x<c;x+=A){const t=o.setContext(this.getContext(x)),e=t.lineWidth,s=t.color,n=t.borderDash||[],a=t.borderDashOffset,r=t.tickWidth,c=t.tickColor,d=t.tickBorderDash||[],f=t.tickBorderDashOffset;_=Ns(this,x,l),void 0!==_&&(y=ve(i,_,e),h?v=M=S=D=y:w=k=P=O=y,u.push({tx1:v,ty1:w,tx2:M,ty2:k,x1:S,y1:P,x2:D,y2:O,width:e,color:s,borderDash:n,borderDashOffset:a,tickWidth:r,tickColor:c,tickBorderDash:d,tickBorderDashOffset:f}))}return this._ticksLength=c,this._borderValue=b,u}_computeLabelItems(t){const e=this.axis,i=this.options,{position:o,ticks:a}=i,r=this.isHorizontal(),l=this.ticks,{align:h,crossAlign:c,padding:d,mirror:u}=a,f=Ws(i.grid),g=f+d,p=u?-d:g,m=-H(this.labelRotation),b=[];let x,_,y,v,w,M,k,S,P,D,O,C,A="middle";if("top"===o)M=this.bottom-p,k=this._getXAxisLabelAlignment();else if("bottom"===o)M=this.top+p,k=this._getXAxisLabelAlignment();else if("left"===o){const t=this._getYAxisLabelAlignment(f);k=t.textAlign,w=t.x}else if("right"===o){const t=this._getYAxisLabelAlignment(f);k=t.textAlign,w=t.x}else if("x"===e){if("center"===o)M=(t.top+t.bottom)/2+g;else if(n(o)){const t=Object.keys(o)[0],e=o[t];M=this.chart.scales[t].getPixelForValue(e)+g}k=this._getXAxisLabelAlignment()}else if("y"===e){if("center"===o)w=(t.left+t.right)/2-g;else if(n(o)){const t=Object.keys(o)[0],e=o[t];w=this.chart.scales[t].getPixelForValue(e)}k=this._getYAxisLabelAlignment(f).textAlign}"y"===e&&("start"===h?A="top":"end"===h&&(A="bottom"));const T=this._getLabelSizes();for(x=0,_=l.length;x<_;++x){y=l[x],v=y.label;const t=a.setContext(this.getContext(x));S=this.getPixelForTick(x)+a.labelOffset,P=this._resolveTickFontOptions(x),D=P.lineHeight,O=s(v)?v.length:1;const e=O/2,i=t.color,n=t.textStrokeColor,h=t.textStrokeWidth;let d,f=k;if(r?(w=S,"inner"===k&&(f=x===_-1?this.options.reverse?"left":"right":0===x?this.options.reverse?"right":"left":"center"),C="top"===o?"near"===c||0!==m?-O*D+D/2:"center"===c?-T.highest.height/2-e*D+D:-T.highest.height+D/2:"near"===c||0!==m?D/2:"center"===c?T.highest.height/2-e*D:T.highest.height-O*D,u&&(C*=-1)):(M=S,C=(1-O)*D/2),t.showLabelBackdrop){const e=pi(t.backdropPadding),i=T.heights[x],s=T.widths[x];let n=M+C-e.top,o=w-e.left;switch(A){case"middle":n-=i/2;break;case"bottom":n-=i}switch(k){case"center":o-=s/2;break;case"right":o-=s}d={left:o,top:n,width:s+e.width,height:i+e.height,color:t.backdropColor}}b.push({rotation:m,label:v,font:P,color:i,strokeColor:n,strokeWidth:h,textOffset:C,textAlign:f,textBaseline:A,translation:[w,M],backdrop:d})}return b}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-H(this.labelRotation))return"top"===t?"left":"right";let i="center";return"start"===e.align?i="left":"end"===e.align?i="right":"inner"===e.align&&(i="inner"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror:s,padding:n}}=this.options,o=t+n,a=this._getLabelSizes().widest.width;let r,l;return"left"===e?s?(l=this.right+n,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l+=a)):(l=this.right-o,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l=this.left)):"right"===e?s?(l=this.left+n,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l-=a)):(l=this.left+o,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l=this.right)):r="right",{textAlign:r,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return"left"===e||"right"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:"top"===e||"bottom"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,width:n,height:o}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,s,n,o),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const i=this.ticks.findIndex((e=>e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n<o;++n){const t=s[n];e.drawOnChartArea&&a({x:t.x1,y:t.y1},{x:t.x2,y:t.y2},t),e.drawTicks&&a({x:t.tx1,y:t.ty1},{x:t.tx2,y:t.ty2},{color:t.tickColor,width:t.tickWidth,borderDash:t.tickBorderDash,borderDashOffset:t.tickBorderDashOffset})}}drawBorder(){const{chart:t,ctx:e,options:{grid:i}}=this,s=i.setContext(this.getContext()),n=i.drawBorder?s.borderWidth:0;if(!n)return;const o=i.setContext(this.getContext(0)).lineWidth,a=this._borderValue;let r,l,h,c;this.isHorizontal()?(r=ve(t,this.left,n)-n/2,l=ve(t,this.right,o)+o/2,h=c=a):(h=ve(t,this.top,n)-n/2,c=ve(t,this.bottom,o)+o/2,r=l=a),e.save(),e.lineWidth=s.borderWidth,e.strokeStyle=s.borderColor,e.beginPath(),e.moveTo(r,h),e.lineTo(l,c),e.stroke(),e.restore()}drawLabels(t){if(!this.options.ticks.display)return;const e=this.ctx,i=this._computeLabelArea();i&&Pe(e,i);const s=this._labelItems||(this._labelItems=this._computeLabelItems(t));let n,o;for(n=0,o=s.length;n<o;++n){const t=s[n],i=t.font,o=t.label;t.backdrop&&(e.fillStyle=t.backdrop.color,e.fillRect(t.backdrop.left,t.backdrop.top,t.backdrop.width,t.backdrop.height)),Ae(e,o,0,t.textOffset,i,t)}i&&De(e)}drawTitle(){const{ctx:t,options:{position:e,title:i,reverse:o}}=this;if(!i.display)return;const a=mi(i.font),r=pi(i.padding),l=i.align;let h=a.lineHeight/2;"bottom"===e||"center"===e||n(e)?(h+=r.bottom,s(i.text)&&(h+=a.lineHeight*(i.text.length-1))):h+=r.top;const{titleX:c,titleY:d,maxWidth:u,rotation:f}=function(t,e,i,s){const{top:o,left:a,bottom:r,right:l,chart:h}=t,{chartArea:c,scales:d}=h;let u,f,g,p=0;const m=r-o,b=l-a;if(t.isHorizontal()){if(f=ut(s,a,l),n(i)){const t=Object.keys(i)[0],s=i[t];g=d[t].getPixelForValue(s)+m-e}else g="center"===i?(c.bottom+c.top)/2+m-e:Vs(t,i,e);u=l-a}else{if(n(i)){const t=Object.keys(i)[0],s=i[t];f=d[t].getPixelForValue(s)-b+e}else f="center"===i?(c.left+c.right)/2-b+e:Vs(t,i,e);g=ut(s,r,o),p="left"===i?-L:L}return{titleX:f,titleY:g,maxWidth:u,rotation:p}}(this,h,e,l);Ae(t,i.text,0,0,a,{color:i.color,maxWidth:u,rotation:f,textAlign:Hs(l,e,o),textBaseline:"middle",translation:[c,d]})}draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),this.drawBorder(),this.drawTitle(),this.drawLabels(t))}_layers(){const t=this.options,e=t.ticks&&t.ticks.z||0,i=r(t.grid&&t.grid.z,-1);return this._isVisible()&&this.draw===$s.prototype.draw?[{z:i,draw:t=>{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:i+1,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n<o;++n){const o=e[n];o[i]!==this.id||t&&o.type!==t||s.push(o)}return s}_resolveTickFontOptions(t){return mi(this.options.ticks.setContext(this.getContext(t)).font)}_maxDigits(){const t=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/t}}class Ys{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){const e=Object.getPrototypeOf(t);let i;(function(t){return"id"in t&&"defaults"in t})(e)&&(i=this.register(e));const s=this.items,n=t.id,o=this.scope+"."+n;if(!n)throw new Error("class does not have id: "+t);return n in s||(s[n]=t,function(t,e,i){const s=m(Object.create(null),[i?ne.get(i):{},ne.get(e),t.defaults]);ne.set(e,s),t.defaultRoutes&&function(t,e){Object.keys(e).forEach((i=>{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");ne.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&ne.describe(e,t.descriptors)}(t,o,i),this.override&&ne.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ne[s]&&(delete ne[s][i],this.override&&delete te[i])}}var Us=new class{constructor(){this.controllers=new Ys(Ls,"datasets",!0),this.elements=new Ys(Es,"elements"),this.plugins=new Ys(Object,"plugins"),this.scales=new Ys($s,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):d(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=w(t);c(i["before"+s],[],i),e[t](i),c(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;e<this._typedRegistries.length;e++){const i=this._typedRegistries[e];if(i.isForType(t))return i}return this.plugins}_get(t,e,i){const s=e.get(t);if(void 0===s)throw new Error('"'+t+'" is not a registered '+i+".");return s}};class Xs{constructor(){this._init=[]}notify(t,e,i,s){"beforeInit"===e&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install"));const n=s?this._descriptors(t).filter(s):this._descriptors(t),o=this._notify(n,t,e,i);return"afterDestroy"===e&&(this._notify(n,t,"stop"),this._notify(this._init,t,"uninstall")),o}_notify(t,e,i,s){s=s||{};for(const n of t){const t=n.plugin;if(!1===c(t[i],[e,s,n.options],t)&&s.cancelable)return!1}return!0}invalidate(){i(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;const e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){const i=t&&t.config,s=r(i.options&&i.options.plugins,{}),n=function(t){const e={},i=[],s=Object.keys(Us.plugins.items);for(let t=0;t<s.length;t++)i.push(Us.getPlugin(s[t]));const n=t.plugins||[];for(let t=0;t<n.length;t++){const s=n[t];-1===i.indexOf(s)&&(i.push(s),e[s.id]=!0)}return{plugins:i,localIds:e}}(i);return!1!==s||e?function(t,{plugins:e,localIds:i},s,n){const o=[],a=t.getContext();for(const r of e){const e=r.id,l=qs(s[e],n);null!==l&&o.push({plugin:r,options:Ks(t.config,{plugin:r,local:i[e]},l,a)})}return o}(t,n,s,e):[]}_notifyStateChanges(t){const e=this._oldCache||[],i=this._cache,s=(t,e)=>t.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function qs(t,e){return e||!1!==t?!0===t?{}:t:null}function Ks(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function Gs(t,e){const i=ne.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function Zs(t,e){return"x"===t||"y"===t?t:e.axis||("top"===(i=e.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.charAt(0).toLowerCase();var i}function Js(t){const e=t.options||(t.options={});e.plugins=r(e.plugins,{}),e.scales=function(t,e){const i=te[t.type]||{scales:{}},s=e.scales||{},o=Gs(t.type,e),a=Object.create(null),r=Object.create(null);return Object.keys(s).forEach((t=>{const e=s[t];if(!n(e))return console.error(`Invalid scale configuration for scale: ${t}`);if(e._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${t}`);const l=Zs(t,e),h=function(t,e){return t===e?"_index_":"_value_"}(l,o),c=i.scales||{};a[l]=a[l]||t,r[t]=b(Object.create(null),[{axis:l},e,c[l],c[h]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,o=i.indexAxis||Gs(n,e),l=(te[n]||{}).scales||{};Object.keys(l).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,o),n=i[e+"AxisID"]||a[e]||e;r[n]=r[n]||Object.create(null),b(r[n],[{axis:e},s[n],l[t]])}))})),Object.keys(r).forEach((t=>{const e=r[t];b(e,[ne.scales[e.type],ne.scale])})),r}(t,e)}function Qs(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const tn=new Map,en=new Set;function sn(t,e){let i=tn.get(t);return i||(i=e(),tn.set(t,i),en.add(i)),i}const nn=(t,e,i)=>{const s=y(e,i);void 0!==s&&t.add(s)};class on{constructor(t){this._config=function(t){return(t=t||{}).data=Qs(t.data),Js(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=Qs(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),Js(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return sn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return sn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return sn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return sn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>nn(r,t,e)))),e.forEach((t=>nn(r,s,t))),e.forEach((t=>nn(r,te[n]||{},t))),e.forEach((t=>nn(r,ne,t))),e.forEach((t=>nn(r,ee,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),en.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,te[e]||{},ne.datasets[e]||{},{type:e},ne,ee]}resolveNamedOptions(t,e,i,n=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=an(this._resolverCache,t,n);let l=a;if(function(t,e){const{isScriptable:i,isIndexable:n}=Ie(t);for(const o of e){const e=i(o),a=n(o),r=(a||e)&&t[o];if(e&&(k(r)||rn(r))||a&&s(r))return!0}return!1}(a,e)){o.$shared=!1;l=Re(a,i=k(i)?i():i,this.createResolver(t,i,r))}for(const t of e)o[t]=l[t];return o}createResolver(t,e,i=[""],s){const{resolver:o}=an(this._resolverCache,t,i);return n(e)?Re(o,e,void 0,s):o}}function an(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:Ee(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const rn=t=>n(t)&&Object.getOwnPropertyNames(t).reduce(((e,i)=>e||k(t[i])),!1);const ln=["top","bottom","left","right","chartArea"];function hn(t,e){return"top"===t||"bottom"===t||-1===ln.indexOf(t)&&"x"===e}function cn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function dn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),c(i&&i.onComplete,[t],e)}function un(t){const e=t.chart,i=e.options.animation;c(i&&i.onProgress,[t],e)}function fn(t){return oe()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const gn={},pn=t=>{const e=fn(t);return Object.values(gn).filter((t=>t.canvas===e)).pop()};function mn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class bn{constructor(t,i){const s=this.config=new on(i),n=fn(t),o=pn(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||gs(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,h=l&&l.height,c=l&&l.width;this.id=e(),this.ctx=r,this.canvas=l,this.width=c,this.height=h,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Xs,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=ct((t=>this.update(t)),a.resizeDelay||0),this._dataChanges=[],gn[this.id]=this,r&&l?(mt.listen(this,"complete",dn),mt.listen(this,"progress",un),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:s,height:n,_aspectRatio:o}=this;return i(t)?e&&o?o:n?s/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():pe(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return we(this.canvas,this.ctx),this}stop(){return mt.stop(this),this}resize(t,e){mt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,pe(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),c(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){d(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=Zs(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),d(n,(e=>{const n=e.options,o=n.id,a=Zs(o,n),l=r(n.type,e.dtype);void 0!==n.position&&hn(n.position,a)===hn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===l)h=i[o];else{h=new(Us.getScale(l))({id:o,type:l,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),d(s,((t,e)=>{t||delete i[e]})),d(i,(t=>{Zi.configure(this,t,t.options),Zi.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;t<i;++t)this._destroyDatasetMeta(t);t.splice(e,i-e)}this._sortedMetasets=t.slice(0).sort(cn("order","index"))}_removeUnreferencedMetasets(){const{_metasets:t,data:{datasets:e}}=this;t.length>e.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i<s;i++){const s=e[i];let n=this.getDatasetMeta(i);const o=s.type||this.config.type;if(n.type&&n.type!==o&&(this._destroyDatasetMeta(i),n=this.getDatasetMeta(i)),n.type=o,n.indexAxis=s.indexAxis||Gs(o,this.options),n.order=s.order||0,n.index=i,n.label=""+s.label,n.visible=this.isDatasetVisible(i),n.controller)n.controller.updateIndex(i),n.controller.linkScales();else{const e=Us.getController(o),{datasetElementType:s,dataElementType:a}=ne.datasets[o];Object.assign(e.prototype,{dataElementType:Us.getElement(a),datasetElementType:s&&Us.getElement(s)}),n.controller=new e(this,i),t.push(n.controller)}}return this._updateMetasets(),t}_resetElements(){d(this.data.datasets,((t,e)=>{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t<e;t++){const{controller:e}=this.getDatasetMeta(t),i=!s&&-1===n.indexOf(e);e.buildOrUpdateElements(i),o=Math.max(+e.getMaxOverflow(),o)}o=this._minPadding=i.layout.autoPadding?o:0,this._updateLayout(o),s||d(n,(t=>{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(cn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){d(this.scales,(t=>{Zi.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);S(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){mn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;t<e;t++)if(!S(s,i(t)))return;return Array.from(s).map((t=>t.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;Zi.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],d(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t<e;++t)this.getDatasetMeta(t).controller.configure();for(let e=0,i=this.data.datasets.length;e<i;++e)this._updateDataset(e,k(t)?t({datasetIndex:e}):t);this.notifyPlugins("afterDatasetsUpdate",{mode:t})}}_updateDataset(t,e){const i=this.getDatasetMeta(t),s={meta:i,index:t,mode:e,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetUpdate",s)&&(i.controller._update(e),s.cancelable=!1,this.notifyPlugins("afterDatasetUpdate",s))}render(){!1!==this.notifyPlugins("beforeRender",{cancelable:!0})&&(mt.has(this)?this.attached&&!mt.running(this)&&mt.start(this):(this.draw(),dn({chart:this})))}draw(){let t;if(this._resizeBeforeDraw){const{width:t,height:e}=this._resizeBeforeDraw;this._resize(t,e),this._resizeBeforeDraw=null}if(this.clear(),this.width<=0||this.height<=0)return;if(!1===this.notifyPlugins("beforeDraw",{cancelable:!0}))return;const e=this._layers;for(t=0;t<e.length&&e[t].z<=0;++t)e[t].draw(this.chartArea);for(this._drawDatasets();t<e.length;++t)e[t].draw(this.chartArea);this.notifyPlugins("afterDraw")}_getSortedDatasetMetas(t){const e=this._sortedMetasets,i=[];let s,n;for(s=0,n=e.length;s<n;++s){const n=e[s];t&&!n.visible||i.push(n)}return i}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(!1===this.notifyPlugins("beforeDatasetsDraw",{cancelable:!0}))return;const t=this.getSortedVisibleDatasetMetas();for(let e=t.length-1;e>=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=this.chartArea,o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&Pe(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&De(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return Se(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Vi.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=_i(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);M(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),mt.remove(this),t=0,e=this.data.datasets.length;t<e;++t)this._destroyDatasetMeta(t)}destroy(){this.notifyPlugins("beforeDestroy");const{canvas:t,ctx:e}=this;this._stop(),this.config.clearCache(),t&&(this.unbindEvents(),we(t,e),this.platform.releaseContext(e),this.canvas=null,this.ctx=null),this.notifyPlugins("destroy"),delete gn[this.id],this.notifyPlugins("afterDestroy")}toBase64Image(...t){return this.canvas.toDataURL(...t)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){const t=this._listeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};d(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){d(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},d(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a<r;++a){o=t[a];const e=o&&this.getDatasetMeta(o.datasetIndex).controller;e&&e[s+"HoverStyle"](o.element,o.datasetIndex,o.index)}}getActiveElements(){return this._active||[]}setActiveElements(t){const e=this._active||[],i=t.map((({datasetIndex:t,index:e})=>{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!u(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=P(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,c(n.onHover,[t,a,this],this),r&&c(n.onClick,[t,a,this],this));const h=!u(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}const xn=()=>d(bn.instances,(t=>t._plugins.invalidate())),_n=!0;function yn(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}Object.defineProperties(bn,{defaults:{enumerable:_n,value:ne},instances:{enumerable:_n,value:gn},overrides:{enumerable:_n,value:te},registry:{enumerable:_n,value:Us},version:{enumerable:_n,value:"3.9.1"},getChart:{enumerable:_n,value:pn},register:{enumerable:_n,value:(...t)=>{Us.add(...t),xn()}},unregister:{enumerable:_n,value:(...t)=>{Us.remove(...t),xn()}}});class vn{constructor(t){this.options=t||{}}init(t){}formats(){return yn()}parse(t,e){return yn()}format(t,e){return yn()}add(t,e,i){return yn()}diff(t,e,i){return yn()}startOf(t,e,i){return yn()}endOf(t,e){return yn()}}vn.override=function(t){Object.assign(vn.prototype,t)};var wn={_date:vn};function Mn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;e<n;e++)s=s.concat(i[e].controller.getAllParsedValues(t));t._cache.$bar=rt(s.sort(((t,e)=>t-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(M(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;s<n;++s)o=e.getPixelForValue(i[s]),l();for(a=void 0,s=0,n=e.ticks.length;s<n;++s)o=e.getPixelForTick(s),l();return r}function kn(t,e,i,n){return s(t)?function(t,e,i,s){const n=i.parse(t[0],s),o=i.parse(t[1],s),a=Math.min(n,o),r=Math.max(n,o);let l=a,h=r;Math.abs(a)>Math.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,n):e[i.axis]=i.parse(t,n),e}function Sn(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;h<c;++h)u=e[h],d={},d[n.axis]=r||n.parse(a[h],h),l.push(kn(u,d,o,h));return l}function Pn(t){return t&&void 0!==t.barStart&&void 0!==t.barEnd}function Dn(t,e,i,s){let n=e.borderSkipped;const o={};if(!n)return void(t.borderSkipped=o);if(!0===n)return void(t.borderSkipped={top:!0,right:!0,bottom:!0,left:!0});const{start:a,end:r,reverse:l,top:h,bottom:c}=function(t){let e,i,s,n,o;return t.horizontal?(e=t.base>t.x,i="left",s="right"):(e=t.base<t.y,i="bottom",s="top"),e?(n="end",o="start"):(n="start",o="end"),{start:i,end:s,reverse:e,top:n,bottom:o}}(t);"middle"===n&&i&&(t.enableBorderRadius=!0,(i._top||0)===s?n=h:(i._bottom||0)===s?n=c:(o[On(c,a,r,l)]=!0,n=h)),o[On(n,a,r,l)]=!0,t.borderSkipped=o}function On(t,e,i,s){var n,o,a;return s?(a=i,t=Cn(t=(n=t)===(o=e)?a:n===a?o:n,i,e)):t=Cn(t,e,i),t}function Cn(t,e,i){return"start"===t?e:"end"===t?i:t}function An(t,{inflateAmount:e},i){t.inflateAmount="auto"===e?1===i?.33:0:e}class Tn extends Ls{parsePrimitiveData(t,e,i,s){return Sn(t,e,i,s)}parseArrayData(t,e,i,s){return Sn(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l="x"===n.axis?a:r,h="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;d<u;++d)g=e[d],f={},f[n.axis]=n.parse(y(g,l),d),c.push(kn(y(g,h),f,o,d));return c}updateRangeFromParsed(t,e,i,s){super.updateRangeFromParsed(t,e,i,s);const n=i._custom;n&&e===this._cachedMeta.vScale&&(t.min=Math.min(t.min,n.min),t.max=Math.max(t.max,n.max))}getMaxOverflow(){return 0}getLabelAndValue(t){const e=this._cachedMeta,{iScale:i,vScale:s}=e,n=this.getParsed(t),o=n._custom,a=Pn(o)?"["+o.start+", "+o.end+"]":""+s.getLabelForValue(n[s.axis]);return{label:""+i.getLabelForValue(n[i.axis]),value:a}}initialize(){this.enableOptionSharing=!0,super.initialize();this._cachedMeta.stack=this.getDataset().stack}update(t){const e=this._cachedMeta;this.updateElements(e.data,0,e.data.length,t)}updateElements(t,e,s,n){const o="reset"===n,{index:a,_cachedMeta:{vScale:r}}=this,l=r.getBasePixel(),h=r.isHorizontal(),c=this._getRuler(),{sharedOptions:d,includeOptions:u}=this._getSharedOptions(e,n);for(let f=e;f<e+s;f++){const e=this.getParsed(f),s=o||i(e[r.axis])?{base:l,head:l}:this._calculateBarValuePixels(f),g=this._calculateBarIndexPixels(f,c),p=(e._stacks||{})[r.axis],m={horizontal:h,base:s.base,enableBorderRadius:!p||Pn(e._custom)||a===p._top||a===p._bottom,x:h?s.head:g.center,y:h?g.center:s.head,height:h?g.size:Math.abs(s.size),width:h?Math.abs(s.size):g.size};u&&(m.options=d||this.resolveDataElementOptions(f,t[f].active?"active":n));const b=m.options||t[f].options;Dn(m,b,p,a),An(m,b,c.ratio),this.updateElement(t[f],f,m,n)}}_getStacks(t,e){const{iScale:s}=this._cachedMeta,n=s.getMatchingVisibleMetas(this._type).filter((t=>t.controller.options.grouped)),o=s.options.stacked,a=[],r=t=>{const s=t.controller.getParsed(e),n=s&&s[t.vScale.axis];if(i(n)||isNaN(n))return!0};for(const i of n)if((void 0===e||!r(i))&&((!1===o||-1===a.indexOf(i.stack)||void 0===o&&void 0===i.stack)&&a.push(i.stack),i.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n<o;++n)s.push(i.getPixelForValue(this.getParsed(n)[i.axis],n));const a=t.barThickness;return{min:a||Mn(e),pixels:s,start:i._startPixel,end:i._endPixel,stackCount:this._getStackCount(),scale:i,grouped:t.grouped,ratio:a?1:t.categoryPercentage*t.barPercentage}}_calculateBarValuePixels(t){const{_cachedMeta:{vScale:e,_stacked:s},options:{base:n,minBarLength:o}}=this,a=n||0,r=this.getParsed(t),l=r._custom,h=Pn(l);let c,d,u=r[e.axis],f=0,g=s?this.applyStack(e,r,s):u;g!==u&&(f=g-u,g=u),h&&(u=l.barStart,g=l.barEnd-l.barStart,0!==u&&z(u)!==z(l.barEnd)&&(f=0),f+=u);const p=i(n)||h?f:n;let m=e.getPixelForValue(p);if(c=this.chart.getDataVisibility(t)?e.getPixelForValue(f+g):m,d=c-m,Math.abs(d)<o){d=function(t,e,i){return 0!==t?z(t):(e.isHorizontal()?1:-1)*(e.min>=i?1:-1)}(d,e,a)*o,u===a&&(m-=d/2);const t=e.getPixelForDecimal(0),i=e.getPixelForDecimal(1),s=Math.min(t,i),n=Math.max(t,i);m=Math.max(Math.min(m,n),s),c=m+d}if(m===e.getPixelForValue(a)){const t=z(d)*e.getLineWidthForValue(a)/2;m+=t,d-=t}return{size:d,base:m,head:c,center:c+d/2}}_calculateBarIndexPixels(t,e){const s=e.scale,n=this.options,o=n.skipNull,a=r(n.maxBarThickness,1/0);let l,h;if(e.grouped){const s=o?this._getStackCount(t):e.stackCount,r="flex"===n.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t<n.length-1?n[t+1]:null;const l=i.categoryPercentage;null===a&&(a=o-(null===r?e.end-e.start:r-o)),null===r&&(r=o+o-a);const h=o-(o-Math.min(a,r))/2*l;return{chunk:Math.abs(r-a)/2*l/s,ratio:i.barPercentage,start:h}}(t,e,n,s):function(t,e,s,n){const o=s.barThickness;let a,r;return i(o)?(a=e.min*s.categoryPercentage,r=s.barPercentage):(a=o*n,r=1),{chunk:a/n,ratio:r,start:e.pixels[t]-a/2}}(t,e,n,s),c=this._getStackIndex(this.index,this._cachedMeta.stack,o?t:void 0);l=r.start+r.chunk*c+r.chunk/2,h=Math.min(a,r.chunk*r.ratio)}else l=s.getPixelForValue(this.getParsed(t)[s.axis],t),h=Math.min(a,e.min*e.ratio);return{base:l-h/2,head:l+h/2,center:l,size:h}}draw(){const t=this._cachedMeta,e=t.vScale,i=t.data,s=i.length;let n=0;for(;n<s;++n)null!==this.getParsed(n)[e.axis]&&i[n].draw(this._ctx)}}Tn.id="bar",Tn.defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}},Tn.overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};class Ln extends Ls{initialize(){this.enableOptionSharing=!0,super.initialize()}parsePrimitiveData(t,e,i,s){const n=super.parsePrimitiveData(t,e,i,s);for(let t=0;t<n.length;t++)n[t]._custom=this.resolveDataElementOptions(t+i).radius;return n}parseArrayData(t,e,i,s){const n=super.parseArrayData(t,e,i,s);for(let t=0;t<n.length;t++){const s=e[i+t];n[t]._custom=r(s[2],this.resolveDataElementOptions(t+i).radius)}return n}parseObjectData(t,e,i,s){const n=super.parseObjectData(t,e,i,s);for(let t=0;t<n.length;t++){const s=e[i+t];n[t]._custom=r(s&&s.r&&+s.r,this.resolveDataElementOptions(t+i).radius)}return n}getMaxOverflow(){const t=this._cachedMeta.data;let e=0;for(let i=t.length-1;i>=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,{xScale:i,yScale:s}=e,n=this.getParsed(t),o=i.getLabelForValue(n.x),a=s.getLabelForValue(n.y),r=n._custom;return{label:e.label,value:"("+o+", "+a+(r?", "+r:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d<e+i;d++){const e=t[d],i=!n&&this.getParsed(d),u={},f=u[h]=n?o.getPixelForDecimal(.5):o.getPixelForValue(i[h]),g=u[c]=n?a.getBasePixel():a.getPixelForValue(i[c]);u.skip=isNaN(f)||isNaN(g),l&&(u.options=r||this.resolveDataElementOptions(d,e.active?"active":s),n&&(u.options.radius=0)),this.updateElement(e,d,u,s)}}resolveDataElementOptions(t,e){const i=this.getParsed(t);let s=super.resolveDataElementOptions(t,e);s.$shared&&(s=Object.assign({},s,{$shared:!1}));const n=s.radius;return"active"!==e&&(s.radius=0),s.radius+=r(i&&i._custom,n),s}}Ln.id="bubble",Ln.defaults={datasetElementType:!1,dataElementType:"point",animations:{numbers:{type:"number",properties:["x","y","borderWidth","radius"]}}},Ln.overrides={scales:{x:{type:"linear"},y:{type:"linear"}},plugins:{tooltip:{callbacks:{title:()=>""}}}};class En extends Ls{constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let o,a,r=t=>+i[t];if(n(i[t])){const{key:t="value"}=this._parsing;r=e=>+y(i[e],t)}for(o=t,a=t+e;o<a;++o)s._parsed[o]=r(o)}}_getRotation(){return H(this.options.rotation-90)}_getCircumference(){return H(this.options.circumference)}_getRotationExtents(){let t=O,e=-O;for(let i=0;i<this.chart.data.datasets.length;++i)if(this.chart.isDatasetVisible(i)){const s=this.chart.getDatasetMeta(i).controller,n=s._getRotation(),o=s._getCircumference();t=Math.min(t,n),e=Math.max(e,n+o)}return{rotation:t,circumference:e-t}}update(t){const e=this.chart,{chartArea:i}=e,s=this._cachedMeta,n=s.data,o=this.getMaxBorderWidth()+this.getMaxOffset(n)+this.options.spacing,a=Math.max((Math.min(i.width,i.height)-o)/2,0),r=Math.min(l(this.options.cutout,a),1),c=this._getRingWeight(this.index),{circumference:d,rotation:u}=this._getRotationExtents(),{ratioX:f,ratioY:g,offsetX:p,offsetY:m}=function(t,e,i){let s=1,n=1,o=0,a=0;if(e<O){const r=t,l=r+e,h=Math.cos(r),c=Math.sin(r),d=Math.cos(l),u=Math.sin(l),f=(t,e,s)=>G(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>G(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(L,c,u),b=g(D,h,d),x=g(D+L,c,u);s=(p-b)/2,n=(m-x)/2,o=-(p+b)/2,a=-(m+x)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),b=(i.width-o)/f,x=(i.height-o)/g,_=Math.max(Math.min(b,x)/2,0),y=h(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*c,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/O)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p<e;++p)m+=this._circumference(p,n);for(p=e;p<e+i;++p){const e=this._circumference(p,n),i=t[p],o={x:l+this.offsetX,y:h+this.offsetY,startAngle:m,endAngle:m+e,circumference:e,outerRadius:u,innerRadius:d};g&&(o.options=f||this.resolveDataElementOptions(p,i.active?"active":s)),m+=e,this.updateElement(i,p,o,s)}}calculateTotal(){const t=this._cachedMeta,e=t.data;let i,s=0;for(i=0;i<e.length;i++){const n=t._parsed[i];null===n||isNaN(n)||!this.chart.getDataVisibility(i)||e[i].hidden||(s+=Math.abs(n))}return s}calculateCircumference(t){const e=this._cachedMeta.total;return e>0&&!isNaN(t)?O*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=li(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s<n;++s)if(i.isDatasetVisible(s)){o=i.getDatasetMeta(s),t=o.data,a=o.controller;break}if(!t)return 0;for(s=0,n=t.length;s<n;++s)r=a.resolveDataElementOptions(s),"inner"!==r.borderAlign&&(e=Math.max(e,r.borderWidth||0,r.hoverBorderWidth||0));return e}getMaxOffset(t){let e=0;for(let i=0,s=t.length;i<s;++i){const t=this.resolveDataElementOptions(i);e=Math.max(e,t.offset||0,t.hoverOffset||0)}return e}_getRingWeightOffset(t){let e=0;for(let i=0;i<t;++i)this.chart.isDatasetVisible(i)&&(e+=this._getRingWeight(i));return e}_getRingWeight(t){return Math.max(r(this.chart.data.datasets[t].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}}En.id="doughnut",En.defaults={datasetElementType:!1,dataElementType:"arc",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:"number",properties:["circumference","endAngle","innerRadius","outerRadius","startAngle","x","y","offset","borderWidth","spacing"]}},cutout:"50%",rotation:0,circumference:360,radius:"100%",spacing:0,indexAxis:"r"},En.descriptors={_scriptable:t=>"spacing"!==t,_indexable:t=>"spacing"!==t},En.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>"",label(t){let e=t.label;const i=": "+t.formattedValue;return s(e)?(e=e.slice(),e[0]+=i):e+=i,e}}}}};class Rn extends Ls{initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(t){const e=this._cachedMeta,{dataset:i,data:s=[],_dataset:n}=e,o=this.chart._animationsDisabled;let{start:a,count:r}=gt(e,s,o);this._drawStart=a,this._drawCount=r,pt(e)&&(a=0,r=s.length),i._chart=this.chart,i._datasetIndex=this.index,i._decimated=!!n._decimated,i.points=s;const l=this.resolveDatasetElementOptions(t);this.options.showLine||(l.borderWidth=0),l.segment=this.options.segment,this.updateElement(i,void 0,{animated:!o,options:l},t),this.updateElements(s,a,r,t)}updateElements(t,e,s,n){const o="reset"===n,{iScale:a,vScale:r,_stacked:l,_dataset:h}=this._cachedMeta,{sharedOptions:c,includeOptions:d}=this._getSharedOptions(e,n),u=a.axis,f=r.axis,{spanGaps:g,segment:p}=this.options,m=B(g)?g:Number.POSITIVE_INFINITY,b=this.chart._animationsDisabled||o||"none"===n;let x=e>0&&this.getParsed(e-1);for(let g=e;g<e+s;++g){const e=t[g],s=this.getParsed(g),_=b?e:{},y=i(s[f]),v=_[u]=a.getPixelForValue(s[u],g),w=_[f]=o||y?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,s,l):s[f],g);_.skip=isNaN(v)||isNaN(w)||y,_.stop=g>0&&Math.abs(s[u]-x[u])>m,p&&(_.parsed=s,_.raw=h.data[g]),d&&(_.options=c||this.resolveDataElementOptions(g,e.active?"active":n)),b||this.updateElement(e,g,_,n),x=s}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}Rn.id="line",Rn.defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1},Rn.overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};class In extends Ls{constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=li(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return Ue.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(s<e.min&&(e.min=s),s>e.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*D;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d<e;++d)u+=this._computeAngle(d,s,f);for(d=e;d<e+i;d++){const e=t[d];let i=u,g=u+this._computeAngle(d,s,f),p=o.getDataVisibility(d)?r.getDistanceFromCenterForValue(this.getParsed(d).r):0;u=g,n&&(a.animateScale&&(p=0),a.animateRotate&&(i=g=c));const m={x:l,y:h,innerRadius:0,outerRadius:p,startAngle:i,endAngle:g,options:this.resolveDataElementOptions(d,e.active?"active":s)};this.updateElement(e,d,m,s)}}countVisibleElements(){const t=this._cachedMeta;let e=0;return t.data.forEach(((t,i)=>{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?H(this.resolveDataElementOptions(t,e).angle||i):0}}In.id="polarArea",In.defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0},In.overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i}}=t.legend.options;return e.labels.map(((e,s)=>{const n=t.getDatasetMeta(0).controller.getStyle(s);return{text:e,fillStyle:n.backgroundColor,strokeStyle:n.borderColor,lineWidth:n.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(s),index:s}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}},tooltip:{callbacks:{title:()=>"",label:t=>t.chart.data.labels[t.dataIndex]+": "+t.formattedValue}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};class zn extends En{}zn.id="pie",zn.defaults={cutout:0,rotation:0,circumference:360,radius:"100%"};class Fn extends Ls{getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return Ue.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a<e+i;a++){const e=t[a],i=this.resolveDataElementOptions(a,e.active?"active":s),r=n.getPointPositionForValue(a,this.getParsed(a).r),l=o?n.xCenter:r.x,h=o?n.yCenter:r.y,c={x:l,y:h,angle:r.angle,skip:isNaN(l)||isNaN(h),options:i};this.updateElement(e,a,c,s)}}}Fn.id="radar",Fn.defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}},Fn.overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};class Vn extends Ls{update(t){const e=this._cachedMeta,{data:i=[]}=e,s=this.chart._animationsDisabled;let{start:n,count:o}=gt(e,i,s);if(this._drawStart=n,this._drawCount=o,pt(e)&&(n=0,o=i.length),this.options.showLine){const{dataset:n,_dataset:o}=e;n._chart=this.chart,n._datasetIndex=this.index,n._decimated=!!o._decimated,n.points=i;const a=this.resolveDatasetElementOptions(t);a.segment=this.options.segment,this.updateElement(n,void 0,{animated:!s,options:a},t)}this.updateElements(i,n,o,t)}addElements(){const{showLine:t}=this.options;!this.datasetElementType&&t&&(this.datasetElementType=Us.getElement("line")),super.addElements()}updateElements(t,e,s,n){const o="reset"===n,{iScale:a,vScale:r,_stacked:l,_dataset:h}=this._cachedMeta,c=this.resolveDataElementOptions(e,n),d=this.getSharedOptions(c),u=this.includeOptions(n,d),f=a.axis,g=r.axis,{spanGaps:p,segment:m}=this.options,b=B(p)?p:Number.POSITIVE_INFINITY,x=this.chart._animationsDisabled||o||"none"===n;let _=e>0&&this.getParsed(e-1);for(let c=e;c<e+s;++c){const e=t[c],s=this.getParsed(c),p=x?e:{},y=i(s[g]),v=p[f]=a.getPixelForValue(s[f],c),w=p[g]=o||y?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,s,l):s[g],c);p.skip=isNaN(v)||isNaN(w)||y,p.stop=c>0&&Math.abs(s[f]-_[f])>b,m&&(p.parsed=s,p.raw=h.data[c]),u&&(p.options=d||this.resolveDataElementOptions(c,e.active?"active":n)),x||this.updateElement(e,c,p,n),_=s}this.updateSharedOptions(d,n,c)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}Vn.id="scatter",Vn.defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1},Vn.overrides={interaction:{mode:"point"},plugins:{tooltip:{callbacks:{title:()=>"",label:t=>"("+t.label+", "+t.formattedValue+")"}}},scales:{x:{type:"linear"},y:{type:"linear"}}};var Bn=Object.freeze({__proto__:null,BarController:Tn,BubbleController:Ln,DoughnutController:En,LineController:Rn,PolarAreaController:In,PieController:zn,RadarController:Fn,ScatterController:Vn});function Nn(t,e,i){const{startAngle:s,pixelMargin:n,x:o,y:a,outerRadius:r,innerRadius:l}=e;let h=n/r;t.beginPath(),t.arc(o,a,r,s-h,i+h),l>n?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+L,s-L),t.closePath(),t.clip()}function Wn(t,e,i,s){const n=ui(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return Z(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Z(n.innerStart,0,a),innerEnd:Z(n.innerEnd,0,a)}}function jn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Hn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/D)/d)/2,m=l+p+f,b=n-p-f,{outerStart:x,outerEnd:_,innerStart:y,innerEnd:v}=Wn(e,u,d,b-m),w=d-x,M=d-_,k=m+x/w,S=b-_/M,P=u+y,O=u+v,C=m+y/P,A=b-v/O;if(t.beginPath(),o){if(t.arc(a,r,d,k,S),_>0){const e=jn(M,S,a,r);t.arc(e.x,e.y,_,S,b+L)}const e=jn(O,b,a,r);if(t.lineTo(e.x,e.y),v>0){const e=jn(O,A,a,r);t.arc(e.x,e.y,v,b+L,A+Math.PI)}if(t.arc(a,r,u,b-v/u,m+y/u,!0),y>0){const e=jn(P,C,a,r);t.arc(e.x,e.y,y,C+Math.PI,m-L)}const i=jn(w,m,a,r);if(t.lineTo(i.x,i.y),x>0){const e=jn(w,k,a,r);t.arc(e.x,e.y,x,m-L,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function $n(t,e,i,s,n,o){const{options:a}=e,{borderWidth:r,borderJoinStyle:l}=a,h="inner"===a.borderAlign;r&&(h?(t.lineWidth=2*r,t.lineJoin=l||"round"):(t.lineWidth=r,t.lineJoin=l||"bevel"),e.fullCircles&&function(t,e,i){const{x:s,y:n,startAngle:o,pixelMargin:a,fullCircles:r}=e,l=Math.max(e.outerRadius-a,0),h=e.innerRadius+a;let c;for(i&&Nn(t,e,o+O),t.beginPath(),t.arc(s,n,h,o+O,o,!0),c=0;c<r;++c)t.stroke();for(t.beginPath(),t.arc(s,n,l,o,o+O),c=0;c<r;++c)t.stroke()}(t,e,h),h&&Nn(t,e,n),Hn(t,e,i,s,n,o),t.stroke())}class Yn extends Es{constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=U(s,{x:t,y:e}),{startAngle:a,endAngle:l,innerRadius:h,outerRadius:c,circumference:d}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),u=this.options.spacing/2,f=r(d,l-a)>=O||G(n,a,l),g=Q(o,h+u,c+u);return f&&g}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius","circumference"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/2,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>O?Math.floor(i/O):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();let a=0;if(s){a=s/2;const e=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(e)*a,Math.sin(e)*a),this.circumference>=D&&(a=s)}t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor;const r=function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){Hn(t,e,i,s,a+O,n);for(let e=0;e<o;++e)t.fill();isNaN(r)||(l=a+r%O,r%O==0&&(l+=O))}return Hn(t,e,i,s,l,n),t.fill(),l}(t,this,a,n,o);$n(t,this,a,n,r,o),t.restore()}}function Un(t,e,i=e){t.lineCap=r(i.borderCapStyle,e.borderCapStyle),t.setLineDash(r(i.borderDash,e.borderDash)),t.lineDashOffset=r(i.borderDashOffset,e.borderDashOffset),t.lineJoin=r(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=r(i.borderWidth,e.borderWidth),t.strokeStyle=r(i.borderColor,e.borderColor)}function Xn(t,e,i){t.lineTo(i.x,i.y)}function qn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=n<a&&o<a||n>r&&o>r;return{count:s,start:l,loop:e.loop,ilen:h<l&&!c?s+h-l:h-l}}function Kn(t,e,i,s){const{points:n,options:o}=e,{count:a,start:r,loop:l,ilen:h}=qn(n,i,s),c=function(t){return t.stepped?Oe:t.tension||"monotone"===t.cubicInterpolationMode?Ce:Xn}(o);let d,u,f,{move:g=!0,reverse:p}=s||{};for(d=0;d<=h;++d)u=n[(r+(p?h-d:d))%a],u.skip||(g?(t.moveTo(u.x,u.y),g=!1):c(t,f,u,p,o.stepped),f=u);return l&&(u=n[(r+(p?h:0))%a],c(t,f,u,p,o.stepped)),!!l}function Gn(t,e,i,s){const n=e.points,{count:o,start:a,ilen:r}=qn(n,i,s),{move:l=!0,reverse:h}=s||{};let c,d,u,f,g,p,m=0,b=0;const x=t=>(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[x(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[x(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(i<f?f=i:i>g&&(g=i),m=(b*m+e)/++b):(_(),t.lineTo(e,i),u=s,b=0,f=g=i),p=i}_()}function Zn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?Gn:Kn}Yn.id="arc",Yn.defaults={borderAlign:"center",borderColor:"#fff",borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0},Yn.defaultRoutes={backgroundColor:"backgroundColor"};const Jn="function"==typeof Path2D;function Qn(t,e,i,s){Jn&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Un(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=Zn(e);for(const r of n)Un(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class to extends Es{constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;Qe(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=Di(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Pi(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?oi:t.tension||"monotone"===t.cubicInterpolationMode?ai:ni}(i);let l,h;for(l=0,h=o.length;l<h;++l){const{start:h,end:c}=o[l],d=n[h],u=n[c];if(d===u){a.push(d);continue}const f=r(d,u,Math.abs((s-d[e])/(u[e]-d[e])),i.stepped);f[e]=t[e],a.push(f)}return 1===a.length?a[0]:a}pathSegment(t,e,i){return Zn(this)(t,this,e,i)}path(t,e,i){const s=this.segments,n=Zn(this);let o=this._loop;e=e||0,i=i||this.points.length-e;for(const a of s)o&=n(t,this,a,{start:e,end:e+i-1});return!!o}draw(t,e,i,s){const n=this.options||{};(this.points||[]).length&&n.borderWidth&&(t.save(),Qn(t,this,i,s),t.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}}function eo(t,e,i,s){const n=t.options,{[i]:o}=t.getProps([i],s);return Math.abs(e-o)<n.radius+n.hitRadius}to.id="line",to.defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0},to.defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"},to.descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};class io extends Es{constructor(t){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.options,{x:n,y:o}=this.getProps(["x","y"],i);return Math.pow(t-n,2)+Math.pow(e-o,2)<Math.pow(s.hitRadius+s.radius,2)}inXRange(t,e){return eo(this,t,"x",e)}inYRange(t,e){return eo(this,t,"y",e)}getCenterPoint(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}size(t){let e=(t=t||this.options||{}).radius||0;e=Math.max(e,e&&t.hoverRadius||0);return 2*(e+(e&&t.borderWidth||0))}draw(t,e){const i=this.options;this.skip||i.radius<.1||!Se(this,e,this.size(i)/2)||(t.strokeStyle=i.borderColor,t.lineWidth=i.borderWidth,t.fillStyle=i.backgroundColor,Me(t,i,this.x,this.y))}getRange(){const t=this.options||{};return t.radius+t.hitRadius}}function so(t,e){const{x:i,y:s,base:n,width:o,height:a}=t.getProps(["x","y","base","width","height"],e);let r,l,h,c,d;return t.horizontal?(d=a/2,r=Math.min(i,n),l=Math.max(i,n),h=s-d,c=s+d):(d=o/2,r=i-d,l=i+d,h=Math.min(s,n),c=Math.max(s,n)),{left:r,top:h,right:l,bottom:c}}function no(t,e,i,s){return t?0:Z(e,i,s)}function oo(t){const e=so(t),i=e.right-e.left,s=e.bottom-e.top,o=function(t,e,i){const s=t.options.borderWidth,n=t.borderSkipped,o=fi(s);return{t:no(n.top,o.top,0,i),r:no(n.right,o.right,0,e),b:no(n.bottom,o.bottom,0,i),l:no(n.left,o.left,0,e)}}(t,i/2,s/2),a=function(t,e,i){const{enableBorderRadius:s}=t.getProps(["enableBorderRadius"]),o=t.options.borderRadius,a=gi(o),r=Math.min(e,i),l=t.borderSkipped,h=s||n(o);return{topLeft:no(!h||l.top||l.left,a.topLeft,0,r),topRight:no(!h||l.top||l.right,a.topRight,0,r),bottomLeft:no(!h||l.bottom||l.left,a.bottomLeft,0,r),bottomRight:no(!h||l.bottom||l.right,a.bottomRight,0,r)}}(t,i/2,s/2);return{outer:{x:e.left,y:e.top,w:i,h:s,radius:a},inner:{x:e.left+o.l,y:e.top+o.t,w:i-o.l-o.r,h:s-o.t-o.b,radius:{topLeft:Math.max(0,a.topLeft-Math.max(o.t,o.l)),topRight:Math.max(0,a.topRight-Math.max(o.t,o.r)),bottomLeft:Math.max(0,a.bottomLeft-Math.max(o.b,o.l)),bottomRight:Math.max(0,a.bottomRight-Math.max(o.b,o.r))}}}}function ao(t,e,i,s){const n=null===e,o=null===i,a=t&&!(n&&o)&&so(t,s);return a&&(n||Q(e,a.left,a.right))&&(o||Q(i,a.top,a.bottom))}function ro(t,e){t.rect(e.x,e.y,e.w,e.h)}function lo(t,e,i={}){const s=t.x!==i.x?-e:0,n=t.y!==i.y?-e:0,o=(t.x+t.w!==i.x+i.w?e:0)-s,a=(t.y+t.h!==i.y+i.h?e:0)-n;return{x:t.x+s,y:t.y+n,w:t.w+o,h:t.h+a,radius:t.radius}}io.id="point",io.defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:"circle",radius:3,rotation:0},io.defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};class ho extends Es{constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,t&&Object.assign(this,t)}draw(t){const{inflateAmount:e,options:{borderColor:i,backgroundColor:s}}=this,{inner:n,outer:o}=oo(this),a=(r=o.radius).topLeft||r.topRight||r.bottomLeft||r.bottomRight?Le:ro;var r;t.save(),o.w===n.w&&o.h===n.h||(t.beginPath(),a(t,lo(o,e,n)),t.clip(),a(t,lo(n,-e,o)),t.fillStyle=i,t.fill("evenodd")),t.beginPath(),a(t,lo(n,e)),t.fillStyle=s,t.fill(),t.restore()}inRange(t,e,i){return ao(this,t,e,i)}inXRange(t,e){return ao(this,t,null,e)}inYRange(t,e){return ao(this,null,t,e)}getCenterPoint(t){const{x:e,y:i,base:s,horizontal:n}=this.getProps(["x","y","base","horizontal"],t);return{x:n?(e+s)/2:e,y:n?i:(i+s)/2}}getRange(t){return"x"===t?this.width/2:this.height/2}}ho.id="bar",ho.defaults={borderSkipped:"start",borderWidth:0,borderRadius:0,inflateAmount:"auto",pointStyle:void 0},ho.defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};var co=Object.freeze({__proto__:null,ArcElement:Yn,LineElement:to,PointElement:io,BarElement:ho});function uo(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{value:e})}}function fo(t){t.data.datasets.forEach((t=>{uo(t)}))}var go={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,s)=>{if(!s.enabled)return void fo(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:a,indexAxis:r}=e,l=t.getDatasetMeta(o),h=a||e.data;if("y"===bi([r,t.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=t.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(t.options.parsing)return;let{start:d,count:u}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=Z(et(e,o.axis,a).lo,0,i-1)),s=h?Z(et(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(l,h);if(u<=(s.threshold||4*n))return void uo(e);let f;switch(i(a)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),s.algorithm){case"lttb":f=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;c<o-2;c++){let s,n=0,o=0;const h=Math.floor((c+1)*r)+1+e,m=Math.min(Math.floor((c+2)*r)+1,i)+e,b=m-h;for(s=h;s<m;s++)n+=t[s].x,o+=t[s].y;n/=b,o/=b;const x=Math.floor(c*r)+1+e,_=Math.min(Math.floor((c+1)*r)+1,i)+e,{x:y,y:v}=t[p];for(u=f=-1,s=x;s<_;s++)f=.5*Math.abs((y-n)*(t[s].y-v)-(y-t[s].x)*(o-v)),f>u&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(h,d,u,n,s);break;case"min-max":f=function(t,e,s,n){let o,a,r,l,h,c,d,u,f,g,p=0,m=0;const b=[],x=e+s-1,_=t[e].x,y=t[x].x-_;for(o=e;o<e+s;++o){a=t[o],r=(a.x-_)/y*n,l=a.y;const e=0|r;if(e===h)l<f?(f=l,c=o):l>g&&(g=l,d=o),p=(m*p+a.x)/++m;else{const s=o-1;if(!i(c)&&!i(d)){const e=Math.min(c,d),i=Math.max(c,d);e!==u&&e!==s&&b.push({...t[e],x:p}),i!==u&&i!==s&&b.push({...t[i],x:p})}o>0&&s!==u&&b.push(t[s]),b.push(a),h=e,m=0,f=g=l,c=d=u=o}}return b}(h,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${s.algorithm}'`)}e._decimated=f}))},destroy(t){fo(t)}};function po(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=K(n),o=K(o)),{property:t,start:n,end:o}}function mo(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function bo(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function xo(t,e){let i=[],n=!1;return s(t)?(n=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=mo(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new to({points:i,options:{tension:0},_loop:n,_fullLoop:n}):null}function _o(t){return t&&!1!==t.fill}function yo(t,e,i){let s=t[e].fill;const n=[e];let a;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!o(s))return s;if(a=t[s],!a)return!1;if(a.visible)return s;n.push(s),s=a.fill}return!1}function vo(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=r(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return"origin";return s}(t);if(n(s))return!isNaN(s.value)&&s;let a=parseFloat(s);return o(a)&&Math.floor(a)===a?function(t,e,i,s){"-"!==t&&"+"!==t||(i=e+i);if(i===e||i<0||i>=s)return!1;return i}(s[0],e,a,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function wo(t,e,i){const s=[];for(let n=0;n<i.length;n++){const o=i[n],{first:a,last:r,point:l}=Mo(o,e,"x");if(!(!l||a&&r))if(a)s.unshift(l);else if(t.push(l),!r)break}t.push(...s)}function Mo(t,e,i){const s=t.interpolate(e,i);if(!s)return{};const n=s[i],o=t.segments,a=t.points;let r=!1,l=!1;for(let t=0;t<o.length;t++){const e=o[t],s=a[e.start][i],h=a[e.end][i];if(Q(n,s,h)){r=n===s,l=n===h;break}}return{first:r,last:l,point:s}}class ko{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){const{x:s,y:n,radius:o}=this;return e=e||{start:0,end:O},t.arc(s,n,o,e.end,e.start,!0),!i.bounds}interpolate(t){const{x:e,y:i,radius:s}=this,n=t.angle;return{x:e+Math.cos(n)*s,y:i+Math.sin(n)*s,angle:n}}}function So(t){const{chart:e,fill:i,line:s}=t;if(o(i))return function(t,e){const i=t.getDatasetMeta(e);return i&&t.isDatasetVisible(e)?i.dataset:null}(e,i);if("stack"===i)return function(t){const{scale:e,index:i,line:s}=t,n=[],o=s.segments,a=s.points,r=function(t,e){const i=[],s=t.getMatchingVisibleMetas("line");for(let t=0;t<s.length;t++){const n=s[t];if(n.index===e)break;n.hidden||i.unshift(n.dataset)}return i}(e,i);r.push(xo({x:null,y:e.bottom},s));for(let t=0;t<o.length;t++){const e=o[t];for(let t=e.start;t<=e.end;t++)wo(n,a[t],r)}return new to({points:n,options:{}})}(t);if("shape"===i)return!0;const a=function(t){if((t.scale||{}).getPointPositionForValue)return function(t){const{scale:e,fill:i}=t,s=e.options,o=e.getLabels().length,a=s.reverse?e.max:e.min,r=function(t,e,i){let s;return s="start"===t?i:"end"===t?e.options.reverse?e.min:e.max:n(t)?t.value:e.getBaseValue(),s}(i,e,a),l=[];if(s.grid.circular){const t=e.getPointPositionForValue(0,a);return new ko({x:t.x,y:t.y,radius:e.getDistanceFromCenterForValue(r)})}for(let t=0;t<o;++t)l.push(e.getPointPositionForValue(t,r));return l}(t);return function(t){const{scale:e={},fill:i}=t,s=function(t,e){let i=null;return"start"===t?i=e.bottom:"end"===t?i=e.top:n(t)?i=e.getPixelForValue(t.value):e.getBasePixel&&(i=e.getBasePixel()),i}(i,e);if(o(s)){const t=e.isHorizontal();return{x:t?s:null,y:t?null:s}}return null}(t)}(t);return a instanceof ko?a:xo(a,s)}function Po(t,e,i){const s=So(e),{line:n,scale:o,axis:a}=e,r=n.options,l=r.fill,h=r.backgroundColor,{above:c=h,below:d=h}=l||{};s&&n.points.length&&(Pe(t,i),function(t,e){const{line:i,target:s,above:n,below:o,area:a,scale:r}=e,l=i._loop?"angle":e.axis;t.save(),"x"===l&&o!==n&&(Do(t,s,a.top),Oo(t,{line:i,target:s,color:n,scale:r,property:l}),t.restore(),t.save(),Do(t,s,a.bottom));Oo(t,{line:i,target:s,color:o,scale:r,property:l}),t.restore()}(t,{line:n,target:s,above:c,below:d,area:i,scale:o,axis:a}),De(t))}function Do(t,e,i){const{segments:s,points:n}=e;let o=!0,a=!1;t.beginPath();for(const r of s){const{start:s,end:l}=r,h=n[s],c=n[mo(s,l,n)];o?(t.moveTo(h.x,h.y),o=!1):(t.lineTo(h.x,i),t.lineTo(h.x,h.y)),a=!!e.pathSegment(t,r,{move:a}),a?t.closePath():t.lineTo(c.x,i)}t.lineTo(e.first().x,i),t.closePath(),t.clip()}function Oo(t,e){const{line:i,target:s,property:n,color:o,scale:a}=e,r=function(t,e,i){const s=t.segments,n=t.points,o=e.points,a=[];for(const t of s){let{start:s,end:r}=t;r=mo(s,r,n);const l=po(i,n[s],n[r],t.loop);if(!e.segments){a.push({source:t,target:l,start:n[s],end:n[r]});continue}const h=Pi(e,l);for(const e of h){const s=po(i,o[e.start],o[e.end],e.loop),r=Si(t,n,s);for(const t of r)a.push({source:t,target:e,start:{[i]:bo(l,s,"start",Math.max)},end:{[i]:bo(l,s,"end",Math.min)}})}}return a}(i,s,n);for(const{source:e,target:l,start:h,end:c}of r){const{style:{backgroundColor:r=o}={}}=e,d=!0!==s;t.save(),t.fillStyle=r,Co(t,a,d&&po(n,h,c)),t.beginPath();const u=!!i.pathSegment(t,e);let f;if(d){u?t.closePath():Ao(t,s,c,n);const e=!!s.pathSegment(t,l,{move:u,reverse:!0});f=u&&e,f||Ao(t,s,h,n)}t.closePath(),t.fill(f?"evenodd":"nonzero"),t.restore()}}function Co(t,e,i){const{top:s,bottom:n}=e.chart.chartArea,{property:o,start:a,end:r}=i||{};"x"===o&&(t.beginPath(),t.rect(a,s,r-a,n-s),t.clip())}function Ao(t,e,i,s){const n=e.interpolate(i,s);n&&t.lineTo(n.x,n.y)}var To={id:"filler",afterDatasetsUpdate(t,e,i){const s=(t.data.datasets||[]).length,n=[];let o,a,r,l;for(a=0;a<s;++a)o=t.getDatasetMeta(a),r=o.dataset,l=null,r&&r.options&&r instanceof to&&(l={visible:t.isDatasetVisible(a),index:a,fill:vo(r,a,s),chart:t,axis:o.controller.options.indexAxis,scale:o.vScale,line:r}),o.$filler=l,n.push(l);for(a=0;a<s;++a)l=n[a],l&&!1!==l.fill&&(l.fill=yo(n,a,i.propagate))},beforeDraw(t,e,i){const s="beforeDraw"===i.drawTime,n=t.getSortedVisibleDatasetMetas(),o=t.chartArea;for(let e=n.length-1;e>=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&Po(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;_o(i)&&Po(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;_o(s)&&"beforeDatasetDraw"===i.drawTime&&Po(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const Lo=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class Eo extends Es{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=c(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=mi(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=Lo(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,n,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const p=i+e/2+n.measureText(t.text).width;o>0&&u+s+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:s},d=Math.max(d,p),u+=s+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=yi(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=ut(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=ut(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=ut(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=ut(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Pe(t,this),this._draw(),De(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ne.color,l=yi(t.rtl,this.left,this.width),h=mi(o.font),{color:c,padding:d}=o,u=h.size,f=u/2;let g;this.drawTitle(),s.textAlign=l.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:p,boxHeight:m,itemHeight:b}=Lo(o,u),x=this.isHorizontal(),_=this._computeTitleHeight();g=x?{x:ut(n,this.left+d,this.right-i[0]),y:this.top+d+_,line:0}:{x:this.left+d,y:ut(n,this.top+_+d,this.bottom-e[0].height),line:0},vi(this.ctx,t.textDirection);const y=b+d;this.legendItems.forEach(((v,w)=>{s.strokeStyle=v.fontColor||c,s.fillStyle=v.fontColor||c;const M=s.measureText(v.text).width,k=l.textAlign(v.textAlign||(v.textAlign=o.textAlign)),S=p+f+M;let P=g.x,D=g.y;l.setWidth(this.width),x?w>0&&P+S+d>this.right&&(D=g.y+=y,g.line++,P=g.x=ut(n,this.left+d,this.right-i[g.line])):w>0&&D+y>this.bottom&&(P=g.x=P+e[g.line].width+d,g.line++,D=g.y=ut(n,this.top+_+d,this.bottom-e[g.line].height));!function(t,e,i){if(isNaN(p)||p<=0||isNaN(m)||m<0)return;s.save();const n=r(i.lineWidth,1);if(s.fillStyle=r(i.fillStyle,a),s.lineCap=r(i.lineCap,"butt"),s.lineDashOffset=r(i.lineDashOffset,0),s.lineJoin=r(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=r(i.strokeStyle,a),s.setLineDash(r(i.lineDash,[])),o.usePointStyle){const a={radius:m*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},r=l.xPlus(t,p/2);ke(s,a,r,e+f,o.pointStyleWidth&&p)}else{const o=e+Math.max((u-m)/2,0),a=l.leftForLtr(t,p),r=gi(i.borderRadius);s.beginPath(),Object.values(r).some((t=>0!==t))?Le(s,{x:a,y:o,w:p,h:m,radius:r}):s.rect(a,o,p,m),s.fill(),0!==n&&s.stroke()}s.restore()}(l.x(P),D,v),P=ft(k,P+p+f,x?P+S:this.right,t.rtl),function(t,e,i){Ae(s,i.text,t,e+b/2,h,{strikethrough:i.hidden,textAlign:l.textAlign(i.textAlign)})}(l.x(P),D,v),x?g.x+=S+d:g.y+=y})),wi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=mi(e.font),s=pi(e.padding);if(!e.display)return;const n=yi(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=ut(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+ut(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=ut(a,c,c+d);o.textAlign=n.textAlign(dt(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,Ae(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=mi(t.font),i=pi(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(Q(t,this.left,this.right)&&Q(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;i<n.length;++i)if(s=n[i],Q(t,s.left,s.left+s.width)&&Q(e,s.top,s.top+s.height))return this.legendItems[i];return null}handleEvent(t){const e=this.options;if(!function(t,e){if(("mousemove"===t||"mouseout"===t)&&(e.onHover||e.onLeave))return!0;if(e.onClick&&("click"===t||"mouseup"===t))return!0;return!1}(t.type,e))return;const i=this._getLegendItemAt(t.x,t.y);if("mousemove"===t.type||"mouseout"===t.type){const o=this._hoveredItem,a=(n=i,null!==(s=o)&&null!==n&&s.datasetIndex===n.datasetIndex&&s.index===n.index);o&&!a&&c(e.onLeave,[t,o,this],this),this._hoveredItem=i,i&&!a&&c(e.onHover,[t,i,this],this)}else i&&c(e.onClick,[t,i,this],this);var s,n}}var Ro={id:"legend",_element:Eo,start(t,e,i){const s=t.legend=new Eo({ctx:t.ctx,options:i,chart:t});Zi.configure(t,s,i),Zi.addBox(t,s)},stop(t){Zi.removeBox(t,t.legend),delete t.legend},beforeUpdate(t,e,i){const s=t.legend;Zi.configure(t,s,i),s.options=i},afterUpdate(t){const e=t.legend;e.buildLabels(),e.adjustHitBoxes()},afterEvent(t,e){e.replay||t.legend.handleEvent(e.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(t,e,i){const s=e.datasetIndex,n=i.chart;n.isDatasetVisible(s)?(n.hide(s),e.hidden=!0):(n.show(s),e.hidden=!1)},onHover:null,onLeave:null,labels:{color:t=>t.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const a=t.controller.getStyle(i?0:void 0),r=pi(a.borderWidth);return{text:e[t.index].label,fillStyle:a.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:a.borderCapStyle,lineDash:a.borderDash,lineDashOffset:a.borderDashOffset,lineJoin:a.borderJoinStyle,lineWidth:(r.width+r.height)/4,strokeStyle:a.borderColor,pointStyle:s||a.pointStyle,rotation:a.rotation,textAlign:n||a.textAlign,borderRadius:0,datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class Io extends Es{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const n=s(i.text)?i.text.length:1;this._padding=pi(i.padding);const o=n*mi(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=ut(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=ut(a,s,e),c=-.5*D):(l=n-t,h=ut(a,e,s),c=.5*D),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=mi(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);Ae(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:dt(e.align),textBaseline:"middle",translation:[n,o]})}}var zo={id:"title",_element:Io,start(t,e,i){!function(t,e){const i=new Io({ctx:t.ctx,options:e,chart:t});Zi.configure(t,i,e),Zi.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;Zi.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;Zi.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Fo=new WeakMap;var Vo={id:"subtitle",start(t,e,i){const s=new Io({ctx:t.ctx,options:i,chart:t});Zi.configure(t,s,i),Zi.addBox(t,s),Fo.set(t,s)},stop(t){Zi.removeBox(t,Fo.get(t)),Fo.delete(t)},beforeUpdate(t,e,i){const s=Fo.get(t);Zi.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Bo={average(t){if(!t.length)return!1;let e,i,s=0,n=0,o=0;for(e=0,i=t.length;e<i;++e){const i=t[e].element;if(i&&i.hasValue()){const t=i.tooltipPosition();s+=t.x,n+=t.y,++o}}return{x:s/o,y:n/o}},nearest(t,e){if(!t.length)return!1;let i,s,n,o=e.x,a=e.y,r=Number.POSITIVE_INFINITY;for(i=0,s=t.length;i<s;++i){const s=t[i].element;if(s&&s.hasValue()){const t=X(e,s.getCenterPoint());t<r&&(r=t,n=s)}}if(n){const t=n.tooltipPosition();o=t.x,a=t.y}return{x:o,y:a}}};function No(t,e){return e&&(s(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function Wo(t){return("string"==typeof t||t instanceof String)&&t.indexOf("\n")>-1?t.split("\n"):t}function jo(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Ho(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=mi(e.bodyFont),h=mi(e.titleFont),c=mi(e.footerFont),u=o.length,f=n.length,g=s.length,p=pi(e.padding);let m=p.height,b=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,u&&(m+=u*h.lineHeight+(u-1)*e.titleSpacing+e.titleMarginBottom),x){m+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(x-g)*l.lineHeight+(x-1)*e.bodySpacing}f&&(m+=e.footerMarginTop+f*c.lineHeight+(f-1)*e.footerSpacing);let _=0;const y=function(t){b=Math.max(b,i.measureText(t).width+_)};return i.save(),i.font=h.string,d(t.title,y),i.font=l.string,d(t.beforeBody.concat(t.afterBody),y),_=e.displayColors?a+2+e.boxPadding:0,d(s,(t=>{d(t.before,y),d(t.lines,y),d(t.after,y)})),_=0,i.font=c.string,d(t.footer,y),i.restore(),b+=p.width,{width:b,height:m}}function $o(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function Yo(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return i<s/2?"top":i>t.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||$o(t,e,i,s),yAlign:s}}function Uo(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=gi(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:Z(g,0,s.width-e.width),y:Z(p,0,s.height-e.height)}}function Xo(t,e,i){const s=pi(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function qo(t){return No([],Wo(t))}function Ko(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}class Go extends Es{constructor(t){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=t.chart||t._chart,this._chart=this.chart,this.options=t.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(t){this.options=t,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){const t=this._cachedAnimations;if(t)return t;const e=this.chart,i=this.options.setContext(this.getContext()),s=i.enabled&&e.options.animation&&i.animations,n=new ys(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(n)),n}getContext(){return this.$context||(this.$context=(t=this.chart.getContext(),e=this,i=this._tooltipItems,_i(t,{tooltip:e,tooltipItems:i,type:"tooltip"})));var t,e,i}getTitle(t,e){const{callbacks:i}=e,s=i.beforeTitle.apply(this,[t]),n=i.title.apply(this,[t]),o=i.afterTitle.apply(this,[t]);let a=[];return a=No(a,Wo(s)),a=No(a,Wo(n)),a=No(a,Wo(o)),a}getBeforeBody(t,e){return qo(e.callbacks.beforeBody.apply(this,[t]))}getBody(t,e){const{callbacks:i}=e,s=[];return d(t,(t=>{const e={before:[],lines:[],after:[]},n=Ko(i,t);No(e.before,Wo(n.beforeLabel.call(this,t))),No(e.lines,n.label.call(this,t)),No(e.after,Wo(n.afterLabel.call(this,t))),s.push(e)})),s}getAfterBody(t,e){return qo(e.callbacks.afterBody.apply(this,[t]))}getFooter(t,e){const{callbacks:i}=e,s=i.beforeFooter.apply(this,[t]),n=i.footer.apply(this,[t]),o=i.afterFooter.apply(this,[t]);let a=[];return a=No(a,Wo(s)),a=No(a,Wo(n)),a=No(a,Wo(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;a<r;++a)l.push(jo(this.chart,e[a]));return t.filter&&(l=l.filter(((e,s,n)=>t.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),d(l,(e=>{const i=Ko(t.callbacks,e);s.push(i.labelColor.call(this,e)),n.push(i.labelPointStyle.call(this,e)),o.push(i.labelTextColor.call(this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=Bo[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Ho(this,i),a=Object.assign({},t,e),r=Yo(this.chart,i,a),l=Uo(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=gi(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,b,x,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,x=_+o,y=_-o):(p=d+f,m=p+o,x=_-o,y=_+o),b=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(x=u,_=x-o,p=m-o,b=m+o):(x=u+g,_=x+o,p=m+o,b=m-o),y=x),{x1:p,x2:m,x3:b,y1:x,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=yi(i.rtl,this.x,this.width);for(t.x=Xo(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=mi(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r<n;++r)e.fillText(s[r],l.x(t.x),t.y+o.lineHeight/2),t.y+=o.lineHeight+a,r+1===n&&(t.y+=i.titleMarginBottom-a)}}_drawColorBox(t,e,i,s,o){const a=this.labelColors[i],r=this.labelPointStyles[i],{boxHeight:l,boxWidth:h,boxPadding:c}=o,d=mi(o.bodyFont),u=Xo(this,"left",o),f=s.x(u),g=l<d.lineHeight?(d.lineHeight-l)/2:0,p=e.y+g;if(o.usePointStyle){const e={radius:Math.min(h,l)/2,pointStyle:r.pointStyle,rotation:r.rotation,borderWidth:1},i=s.leftForLtr(f,h)+h/2,n=p+l/2;t.strokeStyle=o.multiKeyBackground,t.fillStyle=o.multiKeyBackground,Me(t,e,i,n),t.strokeStyle=a.borderColor,t.fillStyle=a.backgroundColor,Me(t,e,i,n)}else{t.lineWidth=n(a.borderWidth)?Math.max(...Object.values(a.borderWidth)):a.borderWidth||1,t.strokeStyle=a.borderColor,t.setLineDash(a.borderDash||[]),t.lineDashOffset=a.borderDashOffset||0;const e=s.leftForLtr(f,h-c),i=s.leftForLtr(s.xPlus(f,1),h-c-2),r=gi(a.borderRadius);Object.values(r).some((t=>0!==t))?(t.beginPath(),t.fillStyle=o.multiKeyBackground,Le(t,{x:e,y:p,w:h,h:l,radius:r}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),Le(t,{x:i,y:p+1,w:h-2,h:l-2,radius:r}),t.fill()):(t.fillStyle=o.multiKeyBackground,t.fillRect(e,p,h,l),t.strokeRect(e,p,h,l),t.fillStyle=a.backgroundColor,t.fillRect(i,p+1,h-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=mi(i.bodyFont);let u=c.lineHeight,f=0;const g=yi(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+f),t.y+u/2),t.y+=u+n},m=g.textAlign(o);let b,x,_,y,v,w,M;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=Xo(this,m,i),e.fillStyle=i.bodyColor,d(this.beforeBody,p),f=a&&"right"!==m?"center"===o?l/2+h:l+2+h:0,y=0,w=s.length;y<w;++y){for(b=s[y],x=this.labelTextColors[y],e.fillStyle=x,d(b.before,p),_=b.lines,a&&_.length&&(this._drawColorBox(e,t,y,g,i),u=Math.max(c.lineHeight,r)),v=0,M=_.length;v<M;++v)p(_[v]),u=c.lineHeight;d(b.after,p)}f=0,u=c.lineHeight,d(this.afterBody,p),t.y-=n}drawFooter(t,e,i){const s=this.footer,n=s.length;let o,a;if(n){const r=yi(i.rtl,this.x,this.width);for(t.x=Xo(this,i.footerAlign,i),t.y+=i.footerMarginTop,e.textAlign=r.textAlign(i.footerAlign),e.textBaseline="middle",o=mi(i.footerFont),e.fillStyle=i.footerColor,e.font=o.string,a=0;a<n;++a)e.fillText(s[a],r.x(t.x),t.y+o.lineHeight/2),t.y+=o.lineHeight+i.footerSpacing}}drawBackground(t,e,i,s){const{xAlign:n,yAlign:o}=this,{x:a,y:r}=t,{width:l,height:h}=i,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=gi(s.cornerRadius);e.fillStyle=s.backgroundColor,e.strokeStyle=s.borderColor,e.lineWidth=s.borderWidth,e.beginPath(),e.moveTo(a+c,r),"top"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+l-d,r),e.quadraticCurveTo(a+l,r,a+l,r+d),"center"===o&&"right"===n&&this.drawCaret(t,e,i,s),e.lineTo(a+l,r+h-f),e.quadraticCurveTo(a+l,r+h,a+l-f,r+h),"bottom"===o&&this.drawCaret(t,e,i,s),e.lineTo(a+u,r+h),e.quadraticCurveTo(a,r+h,a,r+h-u),"center"===o&&"left"===n&&this.drawCaret(t,e,i,s),e.lineTo(a,r+c),e.quadraticCurveTo(a,r,a+c,r),e.closePath(),e.fill(),s.borderWidth>0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=Bo[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Ho(this,t),a=Object.assign({},i,this._size),r=Yo(e,t,a),l=Uo(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=pi(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),vi(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),wi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!u(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!u(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e;const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Bo[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}Go.positioners=Bo;var Zo={id:"tooltip",_element:Go,positioners:Bo,afterInit(t,e,i){i&&(t.tooltip=new Go({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",i))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:{beforeTitle:t,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex<s)return i[e.dataIndex]}return""},afterTitle:t,beforeBody:t,beforeLabel:t,label(t){if(this&&this.options&&"dataset"===this.options.mode)return t.label+": "+t.formattedValue||t.formattedValue;let e=t.dataset.label||"";e&&(e+=": ");const s=t.formattedValue;return i(s)||(e+=s),e},labelColor(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(t){const e=t.chart.getDatasetMeta(t.datasetIndex).controller.getStyle(t.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:t,afterBody:t,beforeFooter:t,footer:t,afterFooter:t}},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},Jo=Object.freeze({__proto__:null,Decimation:go,Filler:To,Legend:Ro,SubTitle:Vo,Title:zo,Tooltip:Zo});function Qo(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}class ta extends $s{constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(i(t))return null;const s=this.getLabels();return((t,e)=>null===t?null:Z(Math.round(t),0,e))(e=isFinite(e)&&s[e]===t?e:Qo(s,t,r(e,t),this._addedLabels),s.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){const e=this.getLabels();return t>=0&&t<e.length?e[t]:t}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function ea(t,e,{horizontal:i,minRotation:s}){const n=H(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(""+t).length;return Math.min(e/o,a)}ta.id="category",ta.defaults={ticks:{callback:ta.prototype.getLabelForValue}};class ia extends $s{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return i(t)||("number"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=z(s),e=z(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=1;(n>=Number.MAX_SAFE_INTEGER||s<=Number.MIN_SAFE_INTEGER)&&(e=Math.abs(.05*n)),a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let s=this.getTickLimit();s=Math.max(2,s);const n=function(t,e){const s=[],{bounds:n,step:o,min:a,max:r,precision:l,count:h,maxTicks:c,maxDigits:d,includeBounds:u}=t,f=o||1,g=c-1,{min:p,max:m}=e,b=!i(a),x=!i(r),_=!i(h),y=(m-p)/(d+1);let v,w,M,k,S=F((m-p)/g/f)*f;if(S<1e-14&&!b&&!x)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=F(k*S/g/f)*f),i(l)||(v=Math.pow(10,l),S=Math.ceil(S*v)/v),"ticks"===n?(w=Math.floor(p/S)*S,M=Math.ceil(m/S)*S):(w=p,M=m),b&&x&&o&&W((r-a)/o,S/1e3)?(k=Math.round(Math.min((r-a)/S,c)),S=(r-a)/k,w=a,M=r):_?(w=b?a:w,M=x?r:M,k=h-1,S=(M-w)/k):(k=(M-w)/S,k=N(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const P=Math.max(Y(S),Y(w));v=Math.pow(10,i(l)?P:l),w=Math.round(w*v)/v,M=Math.round(M*v)/v;let D=0;for(b&&(u&&w!==a?(s.push({value:a}),w<a&&D++,N(Math.round((w+D*S)*v)/v,a,ea(a,y,t))&&D++):w<a&&D++);D<k;++D)s.push({value:Math.round((w+D*S)*v)/v});return x&&u&&M!==r?s.length&&N(s[s.length-1].value,r,ea(r,y,t))?s[s.length-1].value=r:s.push({value:r}):x&&M!==r||s.push({value:M}),s}({maxTicks:s,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&j(n,this,"value"),t.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return li(t,this.chart.options.locale,this.options.ticks.format)}}class sa extends ia{determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=o(t)?t:0,this.max=o(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=H(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/s))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}function na(t){return 1===t/Math.pow(10,Math.floor(I(t)))}sa.id="linear",sa.defaults={ticks:{callback:Is.formatters.numeric}};class oa extends $s{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=ia.prototype.parse.apply(this,[t,e]);if(0!==i)return o(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=o(t)?Math.max(0,t):null,this.max=o(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t,a=(t,e)=>Math.pow(10,Math.floor(I(t))+e);i===s&&(i<=0?(n(1),o(10)):(n(a(i,-1)),o(a(s,1)))),i<=0&&n(a(s,-1)),s<=0&&o(a(i,1)),this._zero&&this.min!==this._suggestedMin&&i===a(this.min,0)&&n(a(i,-1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=function(t,e){const i=Math.floor(I(e.max)),s=Math.ceil(e.max/Math.pow(10,i)),n=[];let o=a(t.min,Math.pow(10,Math.floor(I(e.min)))),r=Math.floor(I(o)),l=Math.floor(o/Math.pow(10,r)),h=r<0?Math.pow(10,Math.abs(r)):1;do{n.push({value:o,major:na(o)}),++l,10===l&&(l=1,++r,h=r>=0?1:h),o=Math.round(l*Math.pow(10,r)*h)/h}while(r<i||r===i&&l<s);const c=a(t.max,o);return n.push({value:c,major:na(o)}),n}({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&j(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":li(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=I(t),this._valueRange=I(this.max)-I(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(I(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function aa(t){const e=t.ticks;if(e.display&&t.display){const t=pi(e.backdropPadding);return r(e.font&&e.font.size,ne.font.size)+t.height}return 0}function ra(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:t<s||t>n?{start:e-i,end:e}:{start:e,end:e+i}}function la(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),n=[],o=[],a=t._pointLabels.length,r=t.options.pointLabels,l=r.centerPointLabels?D/a:0;for(let u=0;u<a;u++){const a=r.setContext(t.getPointLabelContext(u));o[u]=a.padding;const f=t.getPointPosition(u,t.drawingArea+o[u],l),g=mi(a.font),p=(h=t.ctx,c=g,d=s(d=t._pointLabels[u])?d:[d],{w:ye(h,c.string,d),h:d.length*c.lineHeight});n[u]=p;const m=K(t.getIndexAngle(u)+l),b=Math.round($(m));ha(i,e,m,ra(b,f.x,p.w,0,180),ra(b,f.y,p.h,90,270))}var h,c,d;t.setCenterPoint(e.l-i.l,i.r-e.r,e.t-i.t,i.b-e.b),t._pointLabelItems=function(t,e,i){const s=[],n=t._pointLabels.length,o=t.options,a=aa(o)/2,r=t.drawingArea,l=o.pointLabels.centerPointLabels?D/n:0;for(let o=0;o<n;o++){const n=t.getPointPosition(o,r+a+i[o],l),h=Math.round($(K(n.angle+L))),c=e[o],d=ua(n.y,c.h,h),u=ca(h),f=da(n.x,c.w,u);s.push({x:n.x,y:d,textAlign:u,left:f,top:d,right:f+c.w,bottom:d+c.h})}return s}(t,n,o)}function ha(t,e,i,s,n){const o=Math.abs(Math.sin(i)),a=Math.abs(Math.cos(i));let r=0,l=0;s.start<e.l?(r=(e.l-s.start)/o,t.l=Math.min(t.l,e.l-r)):s.end>e.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.start<e.t?(l=(e.t-n.start)/a,t.t=Math.min(t.t,e.t-l)):n.end>e.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function ca(t){return 0===t||180===t?"center":t<180?"left":"right"}function da(t,e,i){return"right"===i?t-=e:"center"===i&&(t-=e/2),t}function ua(t,e,i){return 90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e),t}function fa(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;o<s;o++)i=t.getPointPosition(o,e),n.lineTo(i.x,i.y)}}oa.id="logarithmic",oa.defaults={ticks:{callback:Is.formatters.logarithmic,major:{enabled:!0}}};class ga extends ia{constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=pi(aa(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=o(t)&&!isNaN(t)?t:0,this.max=o(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/aa(this.options))}generateTickLabels(t){ia.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=c(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?la(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return K(t*(O/(this._pointLabels.length||1))+H(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(i(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(i(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t<e.length){const i=e[t];return function(t,e,i){return _i(t,{label:i,index:e,type:"pointLabel"})}(this.getContext(),t,i)}}getPointPosition(t,e,i=0){const s=this.getIndexAngle(t)-L+i;return{x:Math.cos(s)*e+this.xCenter,y:Math.sin(s)*e+this.yCenter,angle:s}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){const{left:e,top:i,right:s,bottom:n}=this._pointLabelItems[t];return{left:e,top:i,right:s,bottom:n}}drawBackground(){const{backgroundColor:t,grid:{circular:e}}=this.options;if(t){const i=this.ctx;i.save(),i.beginPath(),fa(this,this.getDistanceFromCenterForValue(this._endValue),e,this._pointLabels.length),i.closePath(),i.fillStyle=t,i.fill(),i.restore()}}drawGrid(){const t=this.ctx,e=this.options,{angleLines:s,grid:n}=e,o=this._pointLabels.length;let a,r,l;if(e.pointLabels.display&&function(t,e){const{ctx:s,options:{pointLabels:n}}=t;for(let o=e-1;o>=0;o--){const e=n.setContext(t.getPointLabelContext(o)),a=mi(e.font),{x:r,y:l,textAlign:h,left:c,top:d,right:u,bottom:f}=t._pointLabelItems[o],{backdropColor:g}=e;if(!i(g)){const t=gi(e.borderRadius),i=pi(e.backdropPadding);s.fillStyle=g;const n=c-i.left,o=d-i.top,a=u-c+i.width,r=f-d+i.height;Object.values(t).some((t=>0!==t))?(s.beginPath(),Le(s,{x:n,y:o,w:a,h:r,radius:t}),s.fill()):s.fillRect(n,o,a,r)}Ae(s,t._pointLabels[o],r,l+a.lineHeight/2,a,{color:e.color,textAlign:h,textBaseline:"middle"})}}(this,o),n.display&&this.ticks.forEach(((t,e)=>{if(0!==e){r=this.getDistanceFromCenterForValue(t.value);!function(t,e,i,s){const n=t.ctx,o=e.circular,{color:a,lineWidth:r}=e;!o&&!s||!a||!r||i<0||(n.save(),n.strokeStyle=a,n.lineWidth=r,n.setLineDash(e.borderDash),n.lineDashOffset=e.borderDashOffset,n.beginPath(),fa(t,i,o,s),n.closePath(),n.stroke(),n.restore())}(this,n.setContext(this.getContext(e-1)),r,o)}})),s.display){for(t.save(),a=o-1;a>=0;a--){const i=s.setContext(this.getPointLabelContext(a)),{color:n,lineWidth:o}=i;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(i.borderDash),t.lineDashOffset=i.borderDashOffset,r=this.getDistanceFromCenterForValue(e.ticks.reverse?this.min:this.max),l=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=mi(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=pi(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}Ae(t,s.label,0,-n,l,{color:r.color})})),t.restore()}drawTitle(){}}ga.id="radialLinear",ga.defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:Is.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback:t=>t,padding:5,centerPointLabels:!1}},ga.defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"},ga.descriptors={angleLines:{_fallback:"grid"}};const pa={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ma=Object.keys(pa);function ba(t,e){return t-e}function xa(t,e){if(i(e))return null;const s=t._adapter,{parser:n,round:a,isoWeekday:r}=t._parseOpts;let l=e;return"function"==typeof n&&(l=n(l)),o(l)||(l="string"==typeof n?s.parse(l,n):s.parse(l)),null===l?null:(a&&(l="week"!==a||!B(r)&&!0!==r?s.startOf(l,a):s.startOf(l,"isoWeek",r)),+l)}function _a(t,e,i,s){const n=ma.length;for(let o=ma.indexOf(t);o<n-1;++o){const t=pa[ma[o]],n=t.steps?t.steps:Number.MAX_SAFE_INTEGER;if(t.common&&Math.ceil((i-e)/(n*t.size))<=s)return ma[o]}return ma[n-1]}function ya(t,e,i){if(i){if(i.length){const{lo:s,hi:n}=tt(i,e);t[i[s]>=e?i[s]:i[n]]=!0}}else t[e]=!0}function va(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a<o;++a)r=e[a],n[r]=a,s.push({value:r,major:!1});return 0!==o&&i?function(t,e,i,s){const n=t._adapter,o=+n.startOf(e[0].value,s),a=e[e.length-1].value;let r,l;for(r=o;r<=a;r=+n.add(r,1,s))l=i[r],l>=0&&(e[l].major=!0);return e}(t,s,n,i):s}class wa extends $s{constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e){const i=t.time||(t.time={}),s=this._adapter=new wn._date(t.adapters.date);s.init(e),b(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:xa(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:a,maxDefined:r}=this.getUserBounds();function l(t){a||isNaN(t.min)||(s=Math.min(s,t.min)),r||isNaN(t.max)||(n=Math.max(n,t.max))}a&&r||(l(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||l(this.getMinMax(!1))),s=o(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=o(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=st(s,n,this.max);return this._unit=e.unit||(i.autoSkip?_a(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=ma.length-1;o>=ma.indexOf(i);o--){const i=ma[o];if(pa[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return ma[i?ma.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=ma.indexOf(t)+1,i=ma.length;e<i;++e)if(pa[ma[e]].common)return ma[e]}(this._unit):void 0,this.initOffsets(s),t.reverse&&o.reverse(),va(this,o,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map((t=>+t.value)))}initOffsets(t){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=Z(s,0,o),n=Z(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||_a(n.minUnit,e,i,this._getLabelCapacity(e)),a=r(n.stepSize,1),l="week"===o&&n.isoWeekday,h=B(l)||!0===l,c={};let d,u,f=e;if(h&&(f=+t.startOf(f,"isoWeek",l)),f=+t.startOf(f,h?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const g="data"===s.ticks.source&&this.getDataTimestamps();for(d=f,u=0;d<i;d=+t.add(d,a,o),u++)ya(c,d,g);return d!==i&&"ticks"!==s.bounds&&1!==u||ya(c,d,g),Object.keys(c).sort(((t,e)=>t-e)).map((t=>+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.time.displayFormats,a=this._unit,r=this._majorUnit,l=a&&o[a],h=r&&o[r],d=i[e],u=r&&h&&d&&d.major,f=this._adapter.format(t,s||(u?h:l)),g=n.ticks.callback;return g?c(g,[f,e,i],this):f}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e<i;++e)s=t[e],s.label=this._tickFormatFunction(s.value,e,t)}getDecimalForValue(t){return null===t?NaN:(t-this.min)/(this.max-this.min)}getPixelForValue(t){const e=this._offsets,i=this.getDecimalForValue(t);return this.getPixelForDecimal((e.start+i)*e.factor)}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return this.min+i*(this.max-this.min)}_getLabelSize(t){const e=this.options.ticks,i=this.ctx.measureText(t).width,s=H(this.isHorizontal()?e.maxRotation:e.minRotation),n=Math.cos(s),o=Math.sin(s),a=this._resolveTickFontOptions(0).size;return{w:i*n+a*o,h:i*o+a*n}}_getLabelCapacity(t){const e=this.options.time,i=e.displayFormats,s=i[e.unit]||i.millisecond,n=this._tickFormatFunction(t,0,va(this,[t],this._majorUnit),s),o=this._getLabelSize(n),a=Math.floor(this.isHorizontal()?this.width/o.w:this.height/o.h)-1;return a>0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t<e;++t)i=i.concat(s[t].controller.getAllParsedValues(this));return this._cache.data=this.normalize(i)}getLabelTimestamps(){const t=this._cache.labels||[];let e,i;if(t.length)return t;const s=this.getLabels();for(e=0,i=s.length;e<i;++e)t.push(xa(this,s[e]));return this._cache.labels=this._normalized?t:this.normalize(t)}normalize(t){return rt(t.sort(ba))}}function Ma(t,e,i){let s,n,o,a,r=0,l=t.length-1;i?(e>=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=et(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=et(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}wa.id="time",wa.defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",major:{enabled:!1}}};class ka extends wa{constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Ma(e,this.min),this._tableRange=Ma(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o<a;++o)l=t[o],l>=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;o<a;++o)h=s[o+1],r=s[o-1],l=s[o],Math.round((h+r)/2)!==l&&n.push({time:l,pos:o/(a-1)});return n}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return t=e.length&&i.length?this.normalize(e.concat(i)):e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(Ma(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return Ma(this._table,i*this._tableRange+this._minPos,!0)}}ka.id="timeseries",ka.defaults=wa.defaults;var Sa=Object.freeze({__proto__:null,CategoryScale:ta,LinearScale:sa,LogarithmicScale:oa,RadialLinearScale:ga,TimeScale:wa,TimeSeriesScale:ka});return bn.register(Bn,Sa,co,Jo),bn.helpers={...Ti},bn._adapters=wn,bn.Animation=xs,bn.Animations=ys,bn.animator=mt,bn.controllers=Us.controllers.items,bn.DatasetController=Ls,bn.Element=Es,bn.elements=co,bn.Interaction=Vi,bn.layouts=Zi,bn.platforms=ps,bn.Scale=$s,bn.Ticks=Is,Object.assign(bn,Bn,Sa,co,Jo,ps),bn.Chart=bn,"undefined"!=typeof window&&(window.Chart=bn),bn}));
diff --git a/web/themes/congo/assets/lib/fuse/fuse.min.js b/web/themes/congo/assets/lib/fuse/fuse.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..adc28356e2f591038d4e691cb5b418d7a490bfb1
--- /dev/null
+++ b/web/themes/congo/assets/lib/fuse/fuse.min.js
@@ -0,0 +1,9 @@
+/**
+ * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io)
+ *
+ * Copyright (c) 2022 Kiro Risk (http://kiro.me)
+ * All Rights Reserved. Apache Software License 2.0
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?e(Object(r),!0).forEach((function(e){c(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function o(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");Object.defineProperty(e,"prototype",{value:Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),writable:!1}),t&&u(e,t)}function s(e){return s=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},s(e)}function u(e,t){return u=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},u(e,t)}function h(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function l(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=s(e);if(t){var i=s(this).constructor;n=Reflect.construct(r,arguments,i)}else n=r.apply(this,arguments);return h(this,n)}}function f(e){return function(e){if(Array.isArray(e))return d(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function v(e){return Array.isArray?Array.isArray(e):"[object Array]"===b(e)}function g(e){return"string"==typeof e}function y(e){return"number"==typeof e}function p(e){return!0===e||!1===e||function(e){return m(e)&&null!==e}(e)&&"[object Boolean]"==b(e)}function m(e){return"object"===n(e)}function k(e){return null!=e}function M(e){return!e.trim().length}function b(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}var x=function(e){return"Invalid value for key ".concat(e)},w=function(e){return"Pattern length exceeds max of ".concat(e,".")},L=Object.prototype.hasOwnProperty,S=function(){function e(t){var n=this;r(this,e),this._keys=[],this._keyMap={};var i=0;t.forEach((function(e){var t=_(e);i+=t.weight,n._keys.push(t),n._keyMap[t.id]=t,i+=t.weight})),this._keys.forEach((function(e){e.weight/=i}))}return o(e,[{key:"get",value:function(e){return this._keyMap[e]}},{key:"keys",value:function(){return this._keys}},{key:"toJSON",value:function(){return JSON.stringify(this._keys)}}]),e}();function _(e){var t=null,n=null,r=null,i=1,o=null;if(g(e)||v(e))r=e,t=O(e),n=j(e);else{if(!L.call(e,"name"))throw new Error(function(e){return"Missing ".concat(e," property in key")}("name"));var c=e.name;if(r=c,L.call(e,"weight")&&(i=e.weight)<=0)throw new Error(function(e){return"Property 'weight' in key '".concat(e,"' must be a positive integer")}(c));t=O(c),n=j(c),o=e.getFn}return{path:t,id:n,weight:i,src:r,getFn:o}}function O(e){return v(e)?e:e.split(".")}function j(e){return v(e)?e.join("."):e}var A={useExtendedSearch:!1,getFn:function(e,t){var n=[],r=!1;return function e(t,i,o){if(k(t))if(i[o]){var c=t[i[o]];if(!k(c))return;if(o===i.length-1&&(g(c)||y(c)||p(c)))n.push(function(e){return null==e?"":function(e){if("string"==typeof e)return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}(e)}(c));else if(v(c)){r=!0;for(var a=0,s=c.length;a<s;a+=1)e(c[a],i,o+1)}else i.length&&e(c,i,o+1)}else n.push(t)}(e,g(t)?t.split("."):t,0),r?n:n[0]},ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1},I=t(t(t(t({},{isCaseSensitive:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:function(e,t){return e.score===t.score?e.idx<t.idx?-1:1:e.score<t.score?-1:1}}),{includeMatches:!1,findAllMatches:!1,minMatchCharLength:1}),{location:0,threshold:.6,distance:100}),A),C=/[^ ]+/g;function E(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(C).length;if(n.has(i))return n.get(i);var o=1/Math.pow(i,.5*e),c=parseFloat(Math.round(o*r)/r);return n.set(i,c),c},clear:function(){n.clear()}}}var $=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?I.getFn:n,o=t.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o;r(this,e),this.norm=E(c,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return o(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,g(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();g(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t<n;t+=1)this.records[t].i-=1}},{key:"getValueForItemAtKeyId",value:function(e,t){return e[this._keysMap[t]]}},{key:"size",value:function(){return this.records.length}},{key:"_addString",value:function(e,t){if(k(e)&&!M(e)){var n={v:e,i:t,n:this.norm.get(e)};this.records.push(n)}}},{key:"_addObject",value:function(e,t){var n=this,r={i:t,$:{}};this.keys.forEach((function(t,i){var o=t.getFn?t.getFn(e):n.getFn(e,t.path);if(k(o))if(v(o))!function(){for(var e=[],t=[{nestedArrIndex:-1,value:o}];t.length;){var c=t.pop(),a=c.nestedArrIndex,s=c.value;if(k(s))if(g(s)&&!M(s)){var u={v:s,i:a,n:n.norm.get(s)};e.push(u)}else v(s)&&s.forEach((function(e,n){t.push({nestedArrIndex:n,value:e})}))}r.$[i]=e}();else if(g(o)&&!M(o)){var c={v:o,n:n.norm.get(o)};r.$[i]=c}})),this.records.push(r)}},{key:"toJSON",value:function(){return{keys:this.keys,records:this.records}}}]),e}();function F(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?I.getFn:r,o=n.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o,a=new $({getFn:i,fieldNormWeight:c});return a.setKeys(e.map(_)),a.setSources(t),a.create(),a}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,o=void 0===i?0:i,c=t.expectedLocation,a=void 0===c?0:c,s=t.distance,u=void 0===s?I.distance:s,h=t.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=r/e.length;if(l)return f;var d=Math.abs(a-o);return u?f+d/u:d?1:f}function N(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:I.minMatchCharLength,n=[],r=-1,i=-1,o=0,c=e.length;o<c;o+=1){var a=e[o];a&&-1===r?r=o:a||-1===r||((i=o-1)-r+1>=t&&n.push([r,i]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}var P=32;function W(e){for(var t={},n=0,r=e.length;n<r;n+=1){var i=e.charAt(n);t[i]=(t[i]||0)|1<<r-n-1}return t}var T=function(){function e(t){var n=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=i.location,c=void 0===o?I.location:o,a=i.threshold,s=void 0===a?I.threshold:a,u=i.distance,h=void 0===u?I.distance:u,l=i.includeMatches,f=void 0===l?I.includeMatches:l,d=i.findAllMatches,v=void 0===d?I.findAllMatches:d,g=i.minMatchCharLength,y=void 0===g?I.minMatchCharLength:g,p=i.isCaseSensitive,m=void 0===p?I.isCaseSensitive:p,k=i.ignoreLocation,M=void 0===k?I.ignoreLocation:k;if(r(this,e),this.options={location:c,threshold:s,distance:h,includeMatches:f,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:m,ignoreLocation:M},this.pattern=m?t:t.toLowerCase(),this.chunks=[],this.pattern.length){var b=function(e,t){n.chunks.push({pattern:e,alphabet:W(e),startIndex:t})},x=this.pattern.length;if(x>P){for(var w=0,L=x%P,S=x-L;w<S;)b(this.pattern.substr(w,P),w),w+=P;if(L){var _=x-P;b(this.pattern.substr(_),_)}}else b(this.pattern,0)}}return o(e,[{key:"searchIn",value:function(e){var t=this.options,n=t.isCaseSensitive,r=t.includeMatches;if(n||(e=e.toLowerCase()),this.pattern===e){var i={isMatch:!0,score:0};return r&&(i.indices=[[0,e.length-1]]),i}var o=this.options,c=o.location,a=o.distance,s=o.threshold,u=o.findAllMatches,h=o.minMatchCharLength,l=o.ignoreLocation,d=[],v=0,g=!1;this.chunks.forEach((function(t){var n=t.pattern,i=t.alphabet,o=t.startIndex,y=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,o=void 0===i?I.location:i,c=r.distance,a=void 0===c?I.distance:c,s=r.threshold,u=void 0===s?I.threshold:s,h=r.findAllMatches,l=void 0===h?I.findAllMatches:h,f=r.minMatchCharLength,d=void 0===f?I.minMatchCharLength:f,v=r.includeMatches,g=void 0===v?I.includeMatches:v,y=r.ignoreLocation,p=void 0===y?I.ignoreLocation:y;if(t.length>P)throw new Error(w(P));for(var m,k=t.length,M=e.length,b=Math.max(0,Math.min(o,M)),x=u,L=b,S=d>1||g,_=S?Array(M):[];(m=e.indexOf(t,L))>-1;){var O=R(t,{currentLocation:m,expectedLocation:b,distance:a,ignoreLocation:p});if(x=Math.min(O,x),L=m+k,S)for(var j=0;j<k;)_[m+j]=1,j+=1}L=-1;for(var A=[],C=1,E=k+M,$=1<<k-1,F=0;F<k;F+=1){for(var W=0,T=E;W<T;)R(t,{errors:F,currentLocation:b+T,expectedLocation:b,distance:a,ignoreLocation:p})<=x?W=T:E=T,T=Math.floor((E-W)/2+W);E=T;var z=Math.max(1,b-T+1),D=l?M:Math.min(b+T,M)+k,K=Array(D+2);K[D+1]=(1<<F)-1;for(var q=D;q>=z;q-=1){var B=q-1,J=n[e.charAt(B)];if(S&&(_[B]=+!!J),K[q]=(K[q+1]<<1|1)&J,F&&(K[q]|=(A[q+1]|A[q])<<1|1|A[q+1]),K[q]&$&&(C=R(t,{errors:F,currentLocation:B,expectedLocation:b,distance:a,ignoreLocation:p}))<=x){if(x=C,(L=B)<=b)break;z=Math.max(1,2*b-L)}}if(R(t,{errors:F+1,currentLocation:b,expectedLocation:b,distance:a,ignoreLocation:p})>x)break;A=K}var U={isMatch:L>=0,score:Math.max(.001,C)};if(S){var V=N(_,d);V.length?g&&(U.indices=V):U.isMatch=!1}return U}(e,n,i,{location:c+o,distance:a,threshold:s,findAllMatches:u,minMatchCharLength:h,includeMatches:r,ignoreLocation:l}),p=y.isMatch,m=y.score,k=y.indices;p&&(g=!0),v+=m,p&&k&&(d=[].concat(f(d),f(k)))}));var y={isMatch:g,score:g?v/this.chunks.length:1};return g&&r&&(y.indices=d),y}}]),e}(),z=function(){function e(t){r(this,e),this.pattern=t}return o(e,[{key:"search",value:function(){}}],[{key:"isMultiMatch",value:function(e){return D(e,this.multiRegex)}},{key:"isSingleMatch",value:function(e){return D(e,this.singleRegex)}}]),e}();function D(e,t){var n=e.match(t);return n?n[1]:null}var K=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"exact"}},{key:"multiRegex",get:function(){return/^="(.*)"$/}},{key:"singleRegex",get:function(){return/^=(.*)$/}}]),n}(z),q=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"$/}},{key:"singleRegex",get:function(){return/^!(.*)$/}}]),n}(z),B=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"prefix-exact"}},{key:"multiRegex",get:function(){return/^\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^\^(.*)$/}}]),n}(z),J=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-prefix-exact"}},{key:"multiRegex",get:function(){return/^!\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^!\^(.*)$/}}]),n}(z),U=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}],[{key:"type",get:function(){return"suffix-exact"}},{key:"multiRegex",get:function(){return/^"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^(.*)\$$/}}]),n}(z),V=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-suffix-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^!(.*)\$$/}}]),n}(z),G=function(e){a(n,e);var t=l(n);function n(e){var i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=o.location,a=void 0===c?I.location:c,s=o.threshold,u=void 0===s?I.threshold:s,h=o.distance,l=void 0===h?I.distance:h,f=o.includeMatches,d=void 0===f?I.includeMatches:f,v=o.findAllMatches,g=void 0===v?I.findAllMatches:v,y=o.minMatchCharLength,p=void 0===y?I.minMatchCharLength:y,m=o.isCaseSensitive,k=void 0===m?I.isCaseSensitive:m,M=o.ignoreLocation,b=void 0===M?I.ignoreLocation:M;return r(this,n),(i=t.call(this,e))._bitapSearch=new T(e,{location:a,threshold:u,distance:l,includeMatches:d,findAllMatches:g,minMatchCharLength:p,isCaseSensitive:k,ignoreLocation:b}),i}return o(n,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),n}(z),H=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){for(var t,n=0,r=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,r.push([t,n-1]);var o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),n}(z),Q=[K,H,B,J,V,U,q,G],X=Q.length,Y=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/;function Z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((function(e){for(var n=e.trim().split(Y).filter((function(e){return e&&!!e.trim()})),r=[],i=0,o=n.length;i<o;i+=1){for(var c=n[i],a=!1,s=-1;!a&&++s<X;){var u=Q[s],h=u.isMultiMatch(c);h&&(r.push(new u(h,t)),a=!0)}if(!a)for(s=-1;++s<X;){var l=Q[s],f=l.isSingleMatch(c);if(f){r.push(new l(f,t));break}}}return r}))}var ee=new Set([G.type,H.type]),te=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=n.isCaseSensitive,o=void 0===i?I.isCaseSensitive:i,c=n.includeMatches,a=void 0===c?I.includeMatches:c,s=n.minMatchCharLength,u=void 0===s?I.minMatchCharLength:s,h=n.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=n.findAllMatches,d=void 0===f?I.findAllMatches:f,v=n.location,g=void 0===v?I.location:v,y=n.threshold,p=void 0===y?I.threshold:y,m=n.distance,k=void 0===m?I.distance:m;r(this,e),this.query=null,this.options={isCaseSensitive:o,includeMatches:a,minMatchCharLength:u,findAllMatches:d,ignoreLocation:l,location:g,threshold:p,distance:k},this.pattern=o?t:t.toLowerCase(),this.query=Z(this.pattern,this.options)}return o(e,[{key:"searchIn",value:function(e){var t=this.query;if(!t)return{isMatch:!1,score:1};var n=this.options,r=n.includeMatches;e=n.isCaseSensitive?e:e.toLowerCase();for(var i=0,o=[],c=0,a=0,s=t.length;a<s;a+=1){var u=t[a];o.length=0,i=0;for(var h=0,l=u.length;h<l;h+=1){var d=u[h],v=d.search(e),g=v.isMatch,y=v.indices,p=v.score;if(!g){c=0,i=0,o.length=0;break}if(i+=1,c+=p,r){var m=d.constructor.type;ee.has(m)?o=[].concat(f(o),f(y)):o.push(y)}}if(i){var k={isMatch:!0,score:c/i};return r&&(k.indices=o),k}}return{isMatch:!1,score:1}}}],[{key:"condition",value:function(e,t){return t.useExtendedSearch}}]),e}(),ne=[];function re(e,t){for(var n=0,r=ne.length;n<r;n+=1){var i=ne[n];if(i.condition(e,t))return new i(e,t)}return new T(e,t)}var ie="$and",oe="$or",ce="$path",ae="$val",se=function(e){return!(!e[ie]&&!e[oe])},ue=function(e){return!!e[ce]},he=function(e){return!v(e)&&m(e)&&!se(e)},le=function(e){return c({},ie,Object.keys(e).map((function(t){return c({},t,e[t])})))};function fe(e,t){var n=t.ignoreFieldNorm,r=void 0===n?I.ignoreFieldNorm:n;e.forEach((function(e){var t=1;e.matches.forEach((function(e){var n=e.key,i=e.norm,o=e.score,c=n?n.weight:null;t*=Math.pow(0===o&&c?Number.EPSILON:o,(c||1)*(r?1:i))})),e.score=t}))}function de(e,t){var n=e.matches;t.matches=[],k(n)&&n.forEach((function(e){if(k(e.indices)&&e.indices.length){var n={indices:e.indices,value:e.value};e.key&&(n.key=e.key.src),e.idx>-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function ve(e,t){t.score=e.score}function ge(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?I.includeMatches:r,o=n.includeScore,c=void 0===o?I.includeScore:o,a=[];return i&&a.push(de),c&&a.push(ve),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return a.length&&a.forEach((function(t){t(e,r)})),r}))}var ye=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;r(this,e),this.options=t(t({},I),i),this.options.useExtendedSearch,this._keyStore=new S(this.options.keys),this.setCollection(n,o)}return o(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof $))throw new Error("Incorrect 'index' type");this._myIndex=t||F(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){k(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n<r;n+=1){var i=this._docs[n];e(i,n)&&(this.removeAt(n),n-=1,r-=1,t.push(i))}return t}},{key:"removeAt",value:function(e){this._docs.splice(e,1),this._myIndex.removeAt(e)}},{key:"getIndex",value:function(){return this._myIndex}},{key:"search",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.limit,r=void 0===n?-1:n,i=this.options,o=i.includeMatches,c=i.includeScore,a=i.shouldSort,s=i.sortFn,u=i.ignoreFieldNorm,h=g(e)?g(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return fe(h,{ignoreFieldNorm:u}),a&&h.sort(s),y(r)&&r>-1&&(h=h.slice(0,r)),ge(h,this._docs,{includeMatches:o,includeScore:c})}},{key:"_searchStringList",value:function(e){var t=re(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,o=e.n;if(k(n)){var c=t.searchIn(n),a=c.isMatch,s=c.score,u=c.indices;a&&r.push({item:n,idx:i,matches:[{score:s,value:n,norm:o,indices:u}]})}})),r}},{key:"_searchLogical",value:function(e){var t=this,n=function(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).auto,r=void 0===n||n,i=function e(n){var i=Object.keys(n),o=ue(n);if(!o&&i.length>1&&!se(n))return e(le(n));if(he(n)){var c=o?n[ce]:i[0],a=o?n[ae]:n[c];if(!g(a))throw new Error(x(c));var s={keyId:j(c),pattern:a};return r&&(s.searcher=re(a,t)),s}var u={children:[],operator:i[0]};return i.forEach((function(t){var r=n[t];v(r)&&r.forEach((function(t){u.children.push(e(t))}))})),u};return se(e)||(e=le(e)),i(e)}(e,this.options),r=function e(n,r,i){if(!n.children){var o=n.keyId,c=n.searcher,a=t._findMatches({key:t._keyStore.get(o),value:t._myIndex.getValueForItemAtKeyId(r,o),searcher:c});return a&&a.length?[{idx:i,item:r,matches:a}]:[]}for(var s=[],u=0,h=n.children.length;u<h;u+=1){var l=e(n.children[u],r,i);if(l.length)s.push.apply(s,f(l));else if(n.operator===ie)return[]}return s},i=this._myIndex.records,o={},c=[];return i.forEach((function(e){var t=e.$,i=e.i;if(k(t)){var a=r(n,t,i);a.length&&(o[i]||(o[i]={idx:i,item:t,matches:[]},c.push(o[i])),a.forEach((function(e){var t,n=e.matches;(t=o[i].matches).push.apply(t,f(n))})))}})),c}},{key:"_searchObjectList",value:function(e){var t=this,n=re(e,this.options),r=this._myIndex,i=r.keys,o=r.records,c=[];return o.forEach((function(e){var r=e.$,o=e.i;if(k(r)){var a=[];i.forEach((function(e,i){a.push.apply(a,f(t._findMatches({key:e,value:r[i],searcher:n})))})),a.length&&c.push({idx:o,item:r,matches:a})}})),c}},{key:"_findMatches",value:function(e){var t=e.key,n=e.value,r=e.searcher;if(!k(n))return[];var i=[];if(v(n))n.forEach((function(e){var n=e.v,o=e.i,c=e.n;if(k(n)){var a=r.searchIn(n),s=a.isMatch,u=a.score,h=a.indices;s&&i.push({score:u,key:t,value:n,idx:o,norm:c,indices:h})}}));else{var o=n.v,c=n.n,a=r.searchIn(o),s=a.isMatch,u=a.score,h=a.indices;s&&i.push({score:u,key:t,value:o,norm:c,indices:h})}return i}}]),e}();return ye.version="6.6.2",ye.createIndex=F,ye.parseIndex=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?I.getFn:n,i=t.fieldNormWeight,o=void 0===i?I.fieldNormWeight:i,c=e.keys,a=e.records,s=new $({getFn:r,fieldNormWeight:o});return s.setKeys(c),s.setIndexRecords(a),s},ye.config=I,function(){ne.push.apply(ne,arguments)}(te),ye},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t();
\ No newline at end of file
diff --git a/web/themes/congo/assets/lib/katex/auto-render.min.js b/web/themes/congo/assets/lib/katex/auto-render.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..74f07c2f99bc40c895f9e9bc353b9377962d0723
--- /dev/null
+++ b/web/themes/congo/assets/lib/katex/auto-render.min.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("katex")):"function"==typeof define&&define.amd?define(["katex"],t):"object"==typeof exports?exports.renderMathInElement=t(require("katex")):e.renderMathInElement=t(e.katex)}("undefined"!=typeof self?self:this,(function(e){return function(){"use strict";var t={771:function(t){t.exports=e}},r={};function n(e){var i=r[e];if(void 0!==i)return i.exports;var a=r[e]={exports:{}};return t[e](a,a.exports,n),a.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var i={};return function(){n.d(i,{default:function(){return s}});var e=n(771),t=n.n(e),r=function(e,t,r){for(var n=r,i=0,a=e.length;n<t.length;){var o=t[n];if(i<=0&&t.slice(n,n+a)===e)return n;"\\"===o?n++:"{"===o?i++:"}"===o&&i--,n++}return-1},a=/^\\begin{/,o=function(e,t){for(var n,i=[],o=new RegExp("("+t.map((function(e){return e.left.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")})).join("|")+")");-1!==(n=e.search(o));){n>0&&(i.push({type:"text",data:e.slice(0,n)}),e=e.slice(n));var l=t.findIndex((function(t){return e.startsWith(t.left)}));if(-1===(n=r(t[l].right,e,t[l].left.length)))break;var d=e.slice(0,n+t[l].right.length),s=a.test(d)?d:e.slice(t[l].left.length,n);i.push({type:"math",data:s,rawData:d,display:t[l].display}),e=e.slice(n+t[l].right.length)}return""!==e&&i.push({type:"text",data:e}),i},l=function(e,r){var n=o(e,r.delimiters);if(1===n.length&&"text"===n[0].type)return null;for(var i=document.createDocumentFragment(),a=0;a<n.length;a++)if("text"===n[a].type)i.appendChild(document.createTextNode(n[a].data));else{var l=document.createElement("span"),d=n[a].data;r.displayMode=n[a].display;try{r.preProcess&&(d=r.preProcess(d)),t().render(d,l,r)}catch(e){if(!(e instanceof t().ParseError))throw e;r.errorCallback("KaTeX auto-render: Failed to parse `"+n[a].data+"` with ",e),i.appendChild(document.createTextNode(n[a].rawData));continue}i.appendChild(l)}return i},d=function e(t,r){for(var n=0;n<t.childNodes.length;n++){var i=t.childNodes[n];if(3===i.nodeType){for(var a=i.textContent,o=i.nextSibling,d=0;o&&o.nodeType===Node.TEXT_NODE;)a+=o.textContent,o=o.nextSibling,d++;var s=l(a,r);if(s){for(var f=0;f<d;f++)i.nextSibling.remove();n+=s.childNodes.length-1,t.replaceChild(s,i)}else n+=d}else 1===i.nodeType&&function(){var t=" "+i.className+" ";-1===r.ignoredTags.indexOf(i.nodeName.toLowerCase())&&r.ignoredClasses.every((function(e){return-1===t.indexOf(" "+e+" ")}))&&e(i,r)}()}},s=function(e,t){if(!e)throw new Error("No element provided to render");var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);r.delimiters=r.delimiters||[{left:"$$",right:"$$",display:!0},{left:"\\(",right:"\\)",display:!1},{left:"\\begin{equation}",right:"\\end{equation}",display:!0},{left:"\\begin{align}",right:"\\end{align}",display:!0},{left:"\\begin{alignat}",right:"\\end{alignat}",display:!0},{left:"\\begin{gather}",right:"\\end{gather}",display:!0},{left:"\\begin{CD}",right:"\\end{CD}",display:!0},{left:"\\[",right:"\\]",display:!0}],r.ignoredTags=r.ignoredTags||["script","noscript","style","textarea","pre","code","option"],r.ignoredClasses=r.ignoredClasses||[],r.errorCallback=r.errorCallback||console.error,r.macros=r.macros||{},d(e,r)}}(),i=i.default}()}));
\ No newline at end of file
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_AMS-Regular.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_AMS-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..c6f9a5e7c03f9e64e9c7b4773a8e37ade8eaf406
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_AMS-Regular.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_AMS-Regular.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_AMS-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..b804d7b33a3fa5b2587d2d1d55006aed678e3eb2
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_AMS-Regular.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_AMS-Regular.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_AMS-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..0acaaff03d4bb7606de02a827aeee338e5a86910
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_AMS-Regular.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..9ff4a5e04421e5107f74c28e27354e0b2a4e7ef8
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..9759710d1d3e16eb10012d56babb73f2479ba9f0
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..f390922eceffe1f6dfb81a3dc086a92d98171b02
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Bold.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..f522294ff0f3f8c52dfdaef7ebfaa06ebfcfaabf
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..9bdd534fd2beb9b878f0219da9d63ffba56677e2
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..75344a1f98e37e2c631e178065854c3a81fb842f
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Caligraphic-Regular.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..4e98259c3b54076d684bf3459baeaeae8dbce97a
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..e7730f66275c87c28f26530d89264cffecf90be0
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..395f28beac23c7b0f7f3a1e714bd8dac253dd3bc
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Bold.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..b8461b275fae76efd0d21fd0f1aaa696a5b10f9a
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..acab069f90b6fe6301a004e6f8beaf6a0db48bce
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..735f6948d63c8cc7f8233735bb9c8d843c83d804
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Fraktur-Regular.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Bold.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..4060e627dc341c1854260cbc3f7386e222a4d297
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Bold.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Bold.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..f38136ac1cc2dcdc9d9b10b8521487468b1f768c
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Bold.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Bold.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..ab2ad21da6fbe6c171bb869240954d0ead8f68fd
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Bold.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..dc007977ee709a236d9e82719cf7d4e5577a81b9
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..67807b0bd4f867853271f5917fb3adf377f93f53
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..5931794de4a2a485fa70099bf2659b145976d043
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-BoldItalic.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Italic.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Italic.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..0e9b0f354ad460202bba554359f5adcc8da666b7
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Italic.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Italic.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Italic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..6f43b594b6c1d863a0e3f93b001f8dd503316464
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Italic.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Italic.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..b50920e138807f385d0b0359f4f0f09891f18406
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Italic.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Regular.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..dd45e1ed2e18b32c516d9b481ebed3cb8bffa711
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Regular.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Regular.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..21f5812968c42392a3eaea9b0c6320870b6b8b38
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Regular.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Regular.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..eb24a7ba282b03d830fa6c63ee897d92a5188736
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Main-Regular.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..728ce7a1e2cb689df32c3a6c26e1bd072dcf2acb
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..0ae390d74c9f665cf8b1e5ea5483395da7513444
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..29657023adc09956249f6295746c8ce4469b50d3
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-BoldItalic.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-Italic.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-Italic.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..70d559b4e937ca1b805eb39f544cbebe3c58ca6f
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-Italic.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-Italic.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-Italic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..eb5159d4c1ca83fb92b3190223698427df0e010c
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-Italic.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-Italic.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-Italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..215c143fd7805a5c2b222bd7892a1a2b09610020
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Math-Italic.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..2f65a8a3a6d3628d11ea9c26c9077cef672fe427
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..8d47c02d9408d34b2a9d566c0fe0d42bf82fb735
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..cfaa3bda59246b49e94298478d6de3b3208066c8
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Bold.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..d5850df98ec19de2eee9ff922ef59586efe471d0
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.woff
new file mode 100644
index 0000000000000000000000000000000000000000..7e02df963621a5e26d53d510f0b4992eebde1c60
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..349c06dc609f896392fd5bc8b364d3bc3efc9330
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Italic.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..537279f6bd2184ed32f1a5168850609147d58ee6
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..31b84829b42edae20d0148eeec0d922dad2108c4
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..a90eea85f6f7bded69ff5d40114447a6d8b48cfe
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_SansSerif-Regular.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Script-Regular.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Script-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..fd679bf374af72f2a183b97b40c9c7e9e51fbe5e
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Script-Regular.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Script-Regular.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Script-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..0e7da821eee0dd05a0a6f0b16c2c1345dc573a84
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Script-Regular.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Script-Regular.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Script-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..b3048fc115681ee6c1bc86b0aa158cfbbf59daa3
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Script-Regular.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size1-Regular.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size1-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..871fd7d19d8658f64d8696ed9cdfc82c821ed76d
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size1-Regular.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size1-Regular.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size1-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..7f292d91184f257054ef77cc1cd3443db757c9cc
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size1-Regular.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size1-Regular.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size1-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..c5a8462fbfe2c39a7c1857b9e296e62500a8a8a5
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size1-Regular.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size2-Regular.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size2-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..7a212caf91c0007e826fee2d622bf48acbd30dde
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size2-Regular.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size2-Regular.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size2-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..d241d9be2d317f7b39b401d96c8b18836acea0fa
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size2-Regular.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size2-Regular.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size2-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..e1bccfe2403a4ed770c1697ae7c15b9e1cd9bc4e
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size2-Regular.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size3-Regular.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size3-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..00bff3495fa9d2f98c1c9ce436add6a1bcfe87fb
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size3-Regular.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size3-Regular.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size3-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..e6e9b658dcf1cd031ac82b6b8f312444c55d4fc0
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size3-Regular.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size3-Regular.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size3-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..249a28662218a7a17ad8bd1fe072169ecb666a49
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size3-Regular.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size4-Regular.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size4-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..74f08921f00f71f413ca42c9d1c90202e672ef38
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size4-Regular.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size4-Regular.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size4-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..e1ec5457664f438ce5a1cc6dd8409bf60ca7804b
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size4-Regular.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size4-Regular.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size4-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..680c13085076a2f6c5a7e695935ec3f21cddb65f
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Size4-Regular.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.ttf b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..c83252c5714c71a3e0ec62195884167339a0129b
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.ttf differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.woff b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..2432419f28936aff53ddfa2a732d027e6a6648fd
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.woff differ
diff --git a/web/themes/congo/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.woff2 b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..771f1af705f5cef5f578b3a1e7d8eff66f9b76b0
Binary files /dev/null and b/web/themes/congo/assets/lib/katex/fonts/KaTeX_Typewriter-Regular.woff2 differ
diff --git a/web/themes/congo/assets/lib/katex/katex.min.css b/web/themes/congo/assets/lib/katex/katex.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..678802eb04e3bd17679ac19bb1ad85beef150525
--- /dev/null
+++ b/web/themes/congo/assets/lib/katex/katex.min.css
@@ -0,0 +1 @@
+@font-face{font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(fonts/KaTeX_AMS-Regular.woff2) format("woff2"),url(fonts/KaTeX_AMS-Regular.woff) format("woff"),url(fonts/KaTeX_AMS-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Caligraphic-Bold.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Bold.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Caligraphic-Regular.woff2) format("woff2"),url(fonts/KaTeX_Caligraphic-Regular.woff) format("woff"),url(fonts/KaTeX_Caligraphic-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Fraktur-Bold.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Bold.woff) format("woff"),url(fonts/KaTeX_Fraktur-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Fraktur-Regular.woff2) format("woff2"),url(fonts/KaTeX_Fraktur-Regular.woff) format("woff"),url(fonts/KaTeX_Fraktur-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(fonts/KaTeX_Main-Bold.woff2) format("woff2"),url(fonts/KaTeX_Main-Bold.woff) format("woff"),url(fonts/KaTeX_Main-Bold.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Main-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Main-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Main-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Main-Italic.woff2) format("woff2"),url(fonts/KaTeX_Main-Italic.woff) format("woff"),url(fonts/KaTeX_Main-Italic.ttf) format("truetype")}@font-face{font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Main-Regular.woff2) format("woff2"),url(fonts/KaTeX_Main-Regular.woff) format("woff"),url(fonts/KaTeX_Main-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(fonts/KaTeX_Math-BoldItalic.woff2) format("woff2"),url(fonts/KaTeX_Math-BoldItalic.woff) format("woff"),url(fonts/KaTeX_Math-BoldItalic.ttf) format("truetype")}@font-face{font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(fonts/KaTeX_Math-Italic.woff2) format("woff2"),url(fonts/KaTeX_Math-Italic.woff) format("woff"),url(fonts/KaTeX_Math-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:700;src:url(fonts/KaTeX_SansSerif-Bold.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Bold.woff) format("woff"),url(fonts/KaTeX_SansSerif-Bold.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:italic;font-weight:400;src:url(fonts/KaTeX_SansSerif-Italic.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Italic.woff) format("woff"),url(fonts/KaTeX_SansSerif-Italic.ttf) format("truetype")}@font-face{font-family:"KaTeX_SansSerif";font-style:normal;font-weight:400;src:url(fonts/KaTeX_SansSerif-Regular.woff2) format("woff2"),url(fonts/KaTeX_SansSerif-Regular.woff) format("woff"),url(fonts/KaTeX_SansSerif-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Script-Regular.woff2) format("woff2"),url(fonts/KaTeX_Script-Regular.woff) format("woff"),url(fonts/KaTeX_Script-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size1-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size1-Regular.woff) format("woff"),url(fonts/KaTeX_Size1-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size2-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size2-Regular.woff) format("woff"),url(fonts/KaTeX_Size2-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size3-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size3-Regular.woff) format("woff"),url(fonts/KaTeX_Size3-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Size4-Regular.woff2) format("woff2"),url(fonts/KaTeX_Size4-Regular.woff) format("woff"),url(fonts/KaTeX_Size4-Regular.ttf) format("truetype")}@font-face{font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(fonts/KaTeX_Typewriter-Regular.woff2) format("woff2"),url(fonts/KaTeX_Typewriter-Regular.woff) format("woff"),url(fonts/KaTeX_Typewriter-Regular.ttf) format("truetype")}.katex{text-rendering:auto;font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.3"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.27777778em;margin-right:-.55555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.83333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.16666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.66666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.45666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.14666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.71428571em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.85714286em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.14285714em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.28571429em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.42857143em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.71428571em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.05714286em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.46857143em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.96285714em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.55428571em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.55555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.66666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.77777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.88888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.11111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.33333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.30444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.76444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.41666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.58333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.66666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.83333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.72833333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.07333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.34722222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.41666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.48611111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.55555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.69444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.83333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.44027778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.72777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.28935185em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.34722222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.40509259em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.46296296em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.52083333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.69444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.83333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.20023148em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.43981481em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.24108004em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.28929605em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.33751205em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.38572806em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.43394407em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.48216008em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.57859209em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.69431051em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.83317261em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.19961427em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.20096463em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.24115756em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.28135048em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.32154341em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.36173633em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.40192926em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.48231511em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.57877814em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.69453376em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.83360129em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}
diff --git a/web/themes/congo/assets/lib/katex/katex.min.js b/web/themes/congo/assets/lib/katex/katex.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..1da66586a0bf5123e8c356167c1dafb4b9607690
--- /dev/null
+++ b/web/themes/congo/assets/lib/katex/katex.min.js
@@ -0,0 +1 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.katex=t():e.katex=t()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var e={d:function(t,r){for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}},t={};e.d(t,{default:function(){return Qn}});var r=function e(t,r){this.position=void 0;var n,a="KaTeX parse error: "+t,i=r&&r.loc;if(i&&i.start<=i.end){var o=i.lexer.input;n=i.start;var s=i.end;n===o.length?a+=" at end of input: ":a+=" at position "+(n+1)+": ";var l=o.slice(n,s).replace(/[^]/g,"$&\u0332");a+=(n>15?"\u2026"+o.slice(n-15,n):o.slice(0,n))+l+(s+15<o.length?o.slice(s,s+15)+"\u2026":o.slice(s))}var h=new Error(a);return h.name="ParseError",h.__proto__=e.prototype,h.position=n,h};r.prototype.__proto__=Error.prototype;var n=r,a=/([A-Z])/g,i={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},o=/[&><"']/g;var s=function e(t){return"ordgroup"===t.type||"color"===t.type?1===t.body.length?e(t.body[0]):t:"font"===t.type?e(t.body):t},l={contains:function(e,t){return-1!==e.indexOf(t)},deflt:function(e,t){return void 0===e?t:e},escape:function(e){return String(e).replace(o,(function(e){return i[e]}))},hyphenate:function(e){return e.replace(a,"-$1").toLowerCase()},getBaseElem:s,isCharacterBox:function(e){var t=s(e);return"mathord"===t.type||"textord"===t.type||"atom"===t.type},protocolFromUrl:function(e){var t=/^\s*([^\\/#]*?)(?::|&#0*58|&#x0*3a)/i.exec(e);return null!=t?t[1]:"_relative"}},h={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:function(e){return"#"+e}},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:function(e,t){return t.push(e),t}},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:function(e){return Math.max(0,e)},cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:function(e){return Math.max(0,e)},cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:function(e){return Math.max(0,e)},cli:"-e, --max-expand <n>",cliProcessor:function(e){return"Infinity"===e?1/0:parseInt(e)}},globalGroup:{type:"boolean",cli:!1}};function c(e){if(e.default)return e.default;var t=e.type,r=Array.isArray(t)?t[0]:t;if("string"!=typeof r)return r.enum[0];switch(r){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}var m=function(){function e(e){for(var t in this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,e=e||{},h)if(h.hasOwnProperty(t)){var r=h[t];this[t]=void 0!==e[t]?r.processor?r.processor(e[t]):e[t]:c(r)}}var t=e.prototype;return t.reportNonstrict=function(e,t,r){var a=this.strict;if("function"==typeof a&&(a=a(e,t,r)),a&&"ignore"!==a){if(!0===a||"error"===a)throw new n("LaTeX-incompatible input and strict mode is set to 'error': "+t+" ["+e+"]",r);"warn"===a?"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"):"undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+a+"': "+t+" ["+e+"]")}},t.useStrictBehavior=function(e,t,r){var n=this.strict;if("function"==typeof n)try{n=n(e,t,r)}catch(e){n="error"}return!(!n||"ignore"===n)&&(!0===n||"error"===n||("warn"===n?("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+t+" ["+e+"]"),!1):("undefined"!=typeof console&&console.warn("LaTeX-incompatible input and strict mode is set to unrecognized '"+n+"': "+t+" ["+e+"]"),!1)))},t.isTrusted=function(e){e.url&&!e.protocol&&(e.protocol=l.protocolFromUrl(e.url));var t="function"==typeof this.trust?this.trust(e):this.trust;return Boolean(t)},e}(),u=function(){function e(e,t,r){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=e,this.size=t,this.cramped=r}var t=e.prototype;return t.sup=function(){return p[d[this.id]]},t.sub=function(){return p[f[this.id]]},t.fracNum=function(){return p[g[this.id]]},t.fracDen=function(){return p[v[this.id]]},t.cramp=function(){return p[y[this.id]]},t.text=function(){return p[b[this.id]]},t.isTight=function(){return this.size>=2},e}(),p=[new u(0,0,!1),new u(1,0,!0),new u(2,1,!1),new u(3,1,!0),new u(4,2,!1),new u(5,2,!0),new u(6,3,!1),new u(7,3,!0)],d=[4,5,4,5,6,7,6,7],f=[5,5,5,5,7,7,7,7],g=[2,3,4,5,6,7,6,7],v=[3,3,5,5,7,7,7,7],y=[1,1,3,3,5,5,7,7],b=[0,1,2,3,2,3,2,3],x={DISPLAY:p[0],TEXT:p[2],SCRIPT:p[4],SCRIPTSCRIPT:p[6]},w=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];var k=[];function S(e){for(var t=0;t<k.length;t+=2)if(e>=k[t]&&e<=k[t+1])return!0;return!1}w.forEach((function(e){return e.blocks.forEach((function(e){return k.push.apply(k,e)}))}));var M=80,z={doubleleftarrow:"M262 157\nl10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3\n 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28\n 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5\nc2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5\n 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87\n-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7\n-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z\nm8 0v40h399730v-40zm0 194v40h399730v-40z",doublerightarrow:"M399738 392l\n-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5\n 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88\n-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68\n-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18\n-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782\nc-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3\n-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z",leftarrow:"M400000 241H110l3-3c68.7-52.7 113.7-120\n 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8\n-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247\nc-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208\n 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3\n 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202\n l-3-3h399890zM100 241v40h399900v-40z",leftbrace:"M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117\n-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7\n 5-6 9-10 13-.7 1-7.3 1-20 1H6z",leftbraceunder:"M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13\n 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688\n 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7\n-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z",leftgroup:"M400000 80\nH435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0\n 435 0h399565z",leftgroupunder:"M400000 262\nH435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219\n 435 219h399565z",leftharpoon:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3\n-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5\n-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7\n-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z",leftharpoonplus:"M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5\n 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3\n-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7\n-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z\nm0 0v40h400000v-40z",leftharpoondown:"M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333\n 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5\n 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667\n-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z",leftharpoondownplus:"M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12\n 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7\n-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0\nv40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z",lefthook:"M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5\n-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3\n-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21\n 71.5 23h399859zM103 281v-40h399897v40z",leftlinesegment:"M40 281 V428 H0 V94 H40 V241 H400000 v40z\nM40 281 V428 H0 V94 H40 V241 H400000 v40z",leftmapsto:"M40 281 V448H0V74H40V241H400000v40z\nM40 281 V448H0V74H40V241H400000v40z",leftToFrom:"M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23\n-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8\nc28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3\n 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z",longequal:"M0 50 h400000 v40H0z m0 194h40000v40H0z\nM0 50 h400000 v40H0z m0 194h40000v40H0z",midbrace:"M200428 334\nc-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14\n-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7\n 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11\n 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z",midbraceunder:"M199572 214\nc100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14\n 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3\n 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0\n-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z",oiintSize1:"M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6\n-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z\nm368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8\n60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z",oiintSize2:"M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8\n-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z\nm502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2\nc0 110 84 276 504 276s502.4-166 502.4-276z",oiiintSize1:"M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6\n-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z\nm525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0\n85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z",oiiintSize2:"M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8\n-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z\nm770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1\nc0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z",rightarrow:"M0 241v40h399891c-47.3 35.3-84 78-110 128\n-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20\n 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7\n 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85\n-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n 151.7 139 205zm0 0v40h399900v-40z",rightbrace:"M400000 542l\n-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5\ns-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1\nc124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z",rightbraceunder:"M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3\n 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237\n-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z",rightgroup:"M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0\n 3-1 3-3v-38c-76-158-257-219-435-219H0z",rightgroupunder:"M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18\n 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z",rightharpoon:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3\n-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2\n-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58\n 69.2 92 94.5zm0 0v40h399900v-40z",rightharpoonplus:"M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11\n-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7\n 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z\nm0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z",rightharpoondown:"M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8\n 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5\n-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95\n-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z",rightharpoondownplus:"M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8\n 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3\n 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3\n-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z\nm0-194v40h400000v-40zm0 0v40h400000v-40z",righthook:"M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3\n 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0\n-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21\n 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z",rightlinesegment:"M399960 241 V94 h40 V428 h-40 V281 H0 v-40z\nM399960 241 V94 h40 V428 h-40 V281 H0 v-40z",rightToFrom:"M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23\n 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32\n-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142\n-167z M100 147v40h399900v-40zM0 341v40h399900v-40z",twoheadleftarrow:"M0 167c68 40\n 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69\n-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3\n-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19\n-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101\n 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z",twoheadrightarrow:"M400000 167\nc-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3\n 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42\n 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333\n-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70\n 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z",tilde1:"M200 55.538c-77 0-168 73.953-177 73.953-3 0-7\n-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0\n 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0\n 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128\n-68.267.847-113-73.952-191-73.952z",tilde2:"M344 55.266c-142 0-300.638 81.316-311.5 86.418\n-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9\n 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114\nc1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751\n 181.476 676 181.476c-149 0-189-126.21-332-126.21z",tilde3:"M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457\n-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0\n 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697\n 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696\n -338 0-409-156.573-744-156.573z",tilde4:"M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345\n-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409\n 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9\n 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409\n -175.236-744-175.236z",vec:"M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5\n3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11\n10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63\n-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1\n-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59\nH213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359\nc-16-25.333-24-45-24-59z",widehat1:"M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22\nc-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z",widehat2:"M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat3:"M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widehat4:"M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10\n-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z",widecheck1:"M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1,\n-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z",widecheck2:"M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck3:"M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",widecheck4:"M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10,\n-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z",baraboveleftarrow:"M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202\nc4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5\nc-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130\ns-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47\n121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6\ns2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11\nc0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z\nM100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z",rightarrowabovebar:"M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32\n-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0\n13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39\n-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5\n-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5\n-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67\n151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z",baraboveshortleftharpoon:"M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17\nc2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21\nc-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40\nc-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z\nM0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z",rightharpoonaboveshortbar:"M0,241 l0,40c399126,0,399993,0,399993,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z",shortbaraboveleftharpoon:"M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11\nc1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9,\n1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7,\n-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z\nM93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z",shortrightharpoonabovebar:"M53,241l0,40c398570,0,399437,0,399437,0\nc4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199,\n-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6\nc-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z\nM500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z"},A=function(){function e(e){this.children=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.children=e,this.classes=[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={}}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){for(var e=document.createDocumentFragment(),t=0;t<this.children.length;t++)e.appendChild(this.children[t].toNode());return e},t.toMarkup=function(){for(var e="",t=0;t<this.children.length;t++)e+=this.children[t].toMarkup();return e},t.toText=function(){var e=function(e){return e.toText()};return this.children.map(e).join("")},e}(),T={"AMS-Regular":{32:[0,0,0,0,.25],65:[0,.68889,0,0,.72222],66:[0,.68889,0,0,.66667],67:[0,.68889,0,0,.72222],68:[0,.68889,0,0,.72222],69:[0,.68889,0,0,.66667],70:[0,.68889,0,0,.61111],71:[0,.68889,0,0,.77778],72:[0,.68889,0,0,.77778],73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:[0,.68889,0,0,.77778],76:[0,.68889,0,0,.66667],77:[0,.68889,0,0,.94445],78:[0,.68889,0,0,.72222],79:[.16667,.68889,0,0,.77778],80:[0,.68889,0,0,.61111],81:[.16667,.68889,0,0,.77778],82:[0,.68889,0,0,.72222],83:[0,.68889,0,0,.55556],84:[0,.68889,0,0,.66667],85:[0,.68889,0,0,.72222],86:[0,.68889,0,0,.72222],87:[0,.68889,0,0,1],88:[0,.68889,0,0,.72222],89:[0,.68889,0,0,.72222],90:[0,.68889,0,0,.66667],107:[0,.68889,0,0,.55556],160:[0,0,0,0,.25],165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:[0,.68889,0,0,.55556],295:[0,.68889,0,0,.54028],710:[0,.825,0,0,2.33334],732:[0,.9,0,0,2.33334],770:[0,.825,0,0,2.33334],771:[0,.9,0,0,2.33334],989:[.08167,.58167,0,0,.77778],1008:[0,.43056,.04028,0,.66667],8245:[0,.54986,0,0,.275],8463:[0,.68889,0,0,.54028],8487:[0,.68889,0,0,.72222],8498:[0,.68889,0,0,.55556],8502:[0,.68889,0,0,.66667],8503:[0,.68889,0,0,.44445],8504:[0,.68889,0,0,.66667],8513:[0,.68889,0,0,.63889],8592:[-.03598,.46402,0,0,.5],8594:[-.03598,.46402,0,0,.5],8602:[-.13313,.36687,0,0,1],8603:[-.13313,.36687,0,0,1],8606:[.01354,.52239,0,0,1],8608:[.01354,.52239,0,0,1],8610:[.01354,.52239,0,0,1.11111],8611:[.01354,.52239,0,0,1.11111],8619:[0,.54986,0,0,1],8620:[0,.54986,0,0,1],8621:[-.13313,.37788,0,0,1.38889],8622:[-.13313,.36687,0,0,1],8624:[0,.69224,0,0,.5],8625:[0,.69224,0,0,.5],8630:[0,.43056,0,0,1],8631:[0,.43056,0,0,1],8634:[.08198,.58198,0,0,.77778],8635:[.08198,.58198,0,0,.77778],8638:[.19444,.69224,0,0,.41667],8639:[.19444,.69224,0,0,.41667],8642:[.19444,.69224,0,0,.41667],8643:[.19444,.69224,0,0,.41667],8644:[.1808,.675,0,0,1],8646:[.1808,.675,0,0,1],8647:[.1808,.675,0,0,1],8648:[.19444,.69224,0,0,.83334],8649:[.1808,.675,0,0,1],8650:[.19444,.69224,0,0,.83334],8651:[.01354,.52239,0,0,1],8652:[.01354,.52239,0,0,1],8653:[-.13313,.36687,0,0,1],8654:[-.13313,.36687,0,0,1],8655:[-.13313,.36687,0,0,1],8666:[.13667,.63667,0,0,1],8667:[.13667,.63667,0,0,1],8669:[-.13313,.37788,0,0,1],8672:[-.064,.437,0,0,1.334],8674:[-.064,.437,0,0,1.334],8705:[0,.825,0,0,.5],8708:[0,.68889,0,0,.55556],8709:[.08167,.58167,0,0,.77778],8717:[0,.43056,0,0,.42917],8722:[-.03598,.46402,0,0,.5],8724:[.08198,.69224,0,0,.77778],8726:[.08167,.58167,0,0,.77778],8733:[0,.69224,0,0,.77778],8736:[0,.69224,0,0,.72222],8737:[0,.69224,0,0,.72222],8738:[.03517,.52239,0,0,.72222],8739:[.08167,.58167,0,0,.22222],8740:[.25142,.74111,0,0,.27778],8741:[.08167,.58167,0,0,.38889],8742:[.25142,.74111,0,0,.5],8756:[0,.69224,0,0,.66667],8757:[0,.69224,0,0,.66667],8764:[-.13313,.36687,0,0,.77778],8765:[-.13313,.37788,0,0,.77778],8769:[-.13313,.36687,0,0,.77778],8770:[-.03625,.46375,0,0,.77778],8774:[.30274,.79383,0,0,.77778],8776:[-.01688,.48312,0,0,.77778],8778:[.08167,.58167,0,0,.77778],8782:[.06062,.54986,0,0,.77778],8783:[.06062,.54986,0,0,.77778],8785:[.08198,.58198,0,0,.77778],8786:[.08198,.58198,0,0,.77778],8787:[.08198,.58198,0,0,.77778],8790:[0,.69224,0,0,.77778],8791:[.22958,.72958,0,0,.77778],8796:[.08198,.91667,0,0,.77778],8806:[.25583,.75583,0,0,.77778],8807:[.25583,.75583,0,0,.77778],8808:[.25142,.75726,0,0,.77778],8809:[.25142,.75726,0,0,.77778],8812:[.25583,.75583,0,0,.5],8814:[.20576,.70576,0,0,.77778],8815:[.20576,.70576,0,0,.77778],8816:[.30274,.79383,0,0,.77778],8817:[.30274,.79383,0,0,.77778],8818:[.22958,.72958,0,0,.77778],8819:[.22958,.72958,0,0,.77778],8822:[.1808,.675,0,0,.77778],8823:[.1808,.675,0,0,.77778],8828:[.13667,.63667,0,0,.77778],8829:[.13667,.63667,0,0,.77778],8830:[.22958,.72958,0,0,.77778],8831:[.22958,.72958,0,0,.77778],8832:[.20576,.70576,0,0,.77778],8833:[.20576,.70576,0,0,.77778],8840:[.30274,.79383,0,0,.77778],8841:[.30274,.79383,0,0,.77778],8842:[.13597,.63597,0,0,.77778],8843:[.13597,.63597,0,0,.77778],8847:[.03517,.54986,0,0,.77778],8848:[.03517,.54986,0,0,.77778],8858:[.08198,.58198,0,0,.77778],8859:[.08198,.58198,0,0,.77778],8861:[.08198,.58198,0,0,.77778],8862:[0,.675,0,0,.77778],8863:[0,.675,0,0,.77778],8864:[0,.675,0,0,.77778],8865:[0,.675,0,0,.77778],8872:[0,.69224,0,0,.61111],8873:[0,.69224,0,0,.72222],8874:[0,.69224,0,0,.88889],8876:[0,.68889,0,0,.61111],8877:[0,.68889,0,0,.61111],8878:[0,.68889,0,0,.72222],8879:[0,.68889,0,0,.72222],8882:[.03517,.54986,0,0,.77778],8883:[.03517,.54986,0,0,.77778],8884:[.13667,.63667,0,0,.77778],8885:[.13667,.63667,0,0,.77778],8888:[0,.54986,0,0,1.11111],8890:[.19444,.43056,0,0,.55556],8891:[.19444,.69224,0,0,.61111],8892:[.19444,.69224,0,0,.61111],8901:[0,.54986,0,0,.27778],8903:[.08167,.58167,0,0,.77778],8905:[.08167,.58167,0,0,.77778],8906:[.08167,.58167,0,0,.77778],8907:[0,.69224,0,0,.77778],8908:[0,.69224,0,0,.77778],8909:[-.03598,.46402,0,0,.77778],8910:[0,.54986,0,0,.76042],8911:[0,.54986,0,0,.76042],8912:[.03517,.54986,0,0,.77778],8913:[.03517,.54986,0,0,.77778],8914:[0,.54986,0,0,.66667],8915:[0,.54986,0,0,.66667],8916:[0,.69224,0,0,.66667],8918:[.0391,.5391,0,0,.77778],8919:[.0391,.5391,0,0,.77778],8920:[.03517,.54986,0,0,1.33334],8921:[.03517,.54986,0,0,1.33334],8922:[.38569,.88569,0,0,.77778],8923:[.38569,.88569,0,0,.77778],8926:[.13667,.63667,0,0,.77778],8927:[.13667,.63667,0,0,.77778],8928:[.30274,.79383,0,0,.77778],8929:[.30274,.79383,0,0,.77778],8934:[.23222,.74111,0,0,.77778],8935:[.23222,.74111,0,0,.77778],8936:[.23222,.74111,0,0,.77778],8937:[.23222,.74111,0,0,.77778],8938:[.20576,.70576,0,0,.77778],8939:[.20576,.70576,0,0,.77778],8940:[.30274,.79383,0,0,.77778],8941:[.30274,.79383,0,0,.77778],8994:[.19444,.69224,0,0,.77778],8995:[.19444,.69224,0,0,.77778],9416:[.15559,.69224,0,0,.90222],9484:[0,.69224,0,0,.5],9488:[0,.69224,0,0,.5],9492:[0,.37788,0,0,.5],9496:[0,.37788,0,0,.5],9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:[0,.675,0,0,.77778],9633:[0,.675,0,0,.77778],9650:[0,.54986,0,0,.72222],9651:[0,.54986,0,0,.72222],9654:[.03517,.54986,0,0,.77778],9660:[0,.54986,0,0,.72222],9661:[0,.54986,0,0,.72222],9664:[.03517,.54986,0,0,.77778],9674:[.11111,.69224,0,0,.66667],9733:[.19444,.69224,0,0,.94445],10003:[0,.69224,0,0,.83334],10016:[0,.69224,0,0,.83334],10731:[.11111,.69224,0,0,.66667],10846:[.19444,.75583,0,0,.61111],10877:[.13667,.63667,0,0,.77778],10878:[.13667,.63667,0,0,.77778],10885:[.25583,.75583,0,0,.77778],10886:[.25583,.75583,0,0,.77778],10887:[.13597,.63597,0,0,.77778],10888:[.13597,.63597,0,0,.77778],10889:[.26167,.75726,0,0,.77778],10890:[.26167,.75726,0,0,.77778],10891:[.48256,.98256,0,0,.77778],10892:[.48256,.98256,0,0,.77778],10901:[.13667,.63667,0,0,.77778],10902:[.13667,.63667,0,0,.77778],10933:[.25142,.75726,0,0,.77778],10934:[.25142,.75726,0,0,.77778],10935:[.26167,.75726,0,0,.77778],10936:[.26167,.75726,0,0,.77778],10937:[.26167,.75726,0,0,.77778],10938:[.26167,.75726,0,0,.77778],10949:[.25583,.75583,0,0,.77778],10950:[.25583,.75583,0,0,.77778],10955:[.28481,.79383,0,0,.77778],10956:[.28481,.79383,0,0,.77778],57350:[.08167,.58167,0,0,.22222],57351:[.08167,.58167,0,0,.38889],57352:[.08167,.58167,0,0,.77778],57353:[0,.43056,.04028,0,.66667],57356:[.25142,.75726,0,0,.77778],57357:[.25142,.75726,0,0,.77778],57358:[.41951,.91951,0,0,.77778],57359:[.30274,.79383,0,0,.77778],57360:[.30274,.79383,0,0,.77778],57361:[.41951,.91951,0,0,.77778],57366:[.25142,.75726,0,0,.77778],57367:[.25142,.75726,0,0,.77778],57368:[.25142,.75726,0,0,.77778],57369:[.25142,.75726,0,0,.77778],57370:[.13597,.63597,0,0,.77778],57371:[.13597,.63597,0,0,.77778]},"Caligraphic-Regular":{32:[0,0,0,0,.25],65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:[0,0,0,0,.25]},"Fraktur-Regular":{32:[0,0,0,0,.25],33:[0,.69141,0,0,.29574],34:[0,.69141,0,0,.21471],38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:[.24982,.74947,0,0,.38865],41:[.24982,.74947,0,0,.38865],42:[0,.62119,0,0,.27764],43:[.08319,.58283,0,0,.75623],44:[0,.10803,0,0,.27764],45:[.08319,.58283,0,0,.75623],46:[0,.10803,0,0,.27764],47:[.24982,.74947,0,0,.50181],48:[0,.47534,0,0,.50181],49:[0,.47534,0,0,.50181],50:[0,.47534,0,0,.50181],51:[.18906,.47534,0,0,.50181],52:[.18906,.47534,0,0,.50181],53:[.18906,.47534,0,0,.50181],54:[0,.69141,0,0,.50181],55:[.18906,.47534,0,0,.50181],56:[0,.69141,0,0,.50181],57:[.18906,.47534,0,0,.50181],58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:[.24982,.74947,0,0,.27764],93:[.24982,.74947,0,0,.27764],94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:[0,0,0,0,.25],8216:[0,.69141,0,0,.21471],8217:[0,.69141,0,0,.21471],58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.35],34:[0,.69444,0,0,.60278],35:[.19444,.69444,0,0,.95833],36:[.05556,.75,0,0,.575],37:[.05556,.75,0,0,.95833],38:[0,.69444,0,0,.89444],39:[0,.69444,0,0,.31944],40:[.25,.75,0,0,.44722],41:[.25,.75,0,0,.44722],42:[0,.75,0,0,.575],43:[.13333,.63333,0,0,.89444],44:[.19444,.15556,0,0,.31944],45:[0,.44444,0,0,.38333],46:[0,.15556,0,0,.31944],47:[.25,.75,0,0,.575],48:[0,.64444,0,0,.575],49:[0,.64444,0,0,.575],50:[0,.64444,0,0,.575],51:[0,.64444,0,0,.575],52:[0,.64444,0,0,.575],53:[0,.64444,0,0,.575],54:[0,.64444,0,0,.575],55:[0,.64444,0,0,.575],56:[0,.64444,0,0,.575],57:[0,.64444,0,0,.575],58:[0,.44444,0,0,.31944],59:[.19444,.44444,0,0,.31944],60:[.08556,.58556,0,0,.89444],61:[-.10889,.39111,0,0,.89444],62:[.08556,.58556,0,0,.89444],63:[0,.69444,0,0,.54305],64:[0,.69444,0,0,.89444],65:[0,.68611,0,0,.86944],66:[0,.68611,0,0,.81805],67:[0,.68611,0,0,.83055],68:[0,.68611,0,0,.88194],69:[0,.68611,0,0,.75555],70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:[0,.68611,0,0,.9],73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:[0,.68611,0,0,.69166],77:[0,.68611,0,0,1.09166],78:[0,.68611,0,0,.9],79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:[0,.68611,0,0,.86944],89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:[.25,.75,0,0,.31944],92:[.25,.75,0,0,.575],93:[.25,.75,0,0,.31944],94:[0,.69444,0,0,.575],95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:[0,.69444,0,0,.63889],99:[0,.44444,0,0,.51111],100:[0,.69444,0,0,.63889],101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:[0,.69444,0,0,.63889],105:[0,.69444,0,0,.31944],106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:[0,.69444,0,0,.31944],109:[0,.44444,0,0,.95833],110:[0,.44444,0,0,.63889],111:[0,.44444,0,0,.575],112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:[0,.44444,0,0,.63889],118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:[0,.44444,0,0,.51111],123:[.25,.75,0,0,.575],124:[.25,.75,0,0,.31944],125:[.25,.75,0,0,.575],126:[.35,.34444,0,0,.575],160:[0,0,0,0,.25],163:[0,.69444,0,0,.86853],168:[0,.69444,0,0,.575],172:[0,.44444,0,0,.76666],176:[0,.69444,0,0,.86944],177:[.13333,.63333,0,0,.89444],184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:[.13333,.63333,0,0,.89444],216:[.04861,.73472,0,0,.89444],223:[0,.69444,0,0,.59722],230:[0,.44444,0,0,.83055],247:[.13333,.63333,0,0,.89444],248:[.09722,.54167,0,0,.575],305:[0,.44444,0,0,.31944],338:[0,.68611,0,0,1.16944],339:[0,.44444,0,0,.89444],567:[.19444,.44444,0,0,.35139],710:[0,.69444,0,0,.575],711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:[0,.69444,0,0,.575],715:[0,.69444,0,0,.575],728:[0,.69444,0,0,.575],729:[0,.69444,0,0,.31944],730:[0,.69444,0,0,.86944],732:[0,.69444,0,0,.575],733:[0,.69444,0,0,.575],915:[0,.68611,0,0,.69166],916:[0,.68611,0,0,.95833],920:[0,.68611,0,0,.89444],923:[0,.68611,0,0,.80555],926:[0,.68611,0,0,.76666],928:[0,.68611,0,0,.9],931:[0,.68611,0,0,.83055],933:[0,.68611,0,0,.89444],934:[0,.68611,0,0,.83055],936:[0,.68611,0,0,.89444],937:[0,.68611,0,0,.83055],8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:[0,.69444,0,0,.31944],8217:[0,.69444,0,0,.31944],8220:[0,.69444,0,0,.60278],8221:[0,.69444,0,0,.60278],8224:[.19444,.69444,0,0,.51111],8225:[.19444,.69444,0,0,.51111],8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:[0,.69444,0,0,.66759],8465:[0,.69444,0,0,.83055],8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:[0,.69444,0,0,.83055],8501:[0,.69444,0,0,.70277],8592:[-.10889,.39111,0,0,1.14999],8593:[.19444,.69444,0,0,.575],8594:[-.10889,.39111,0,0,1.14999],8595:[.19444,.69444,0,0,.575],8596:[-.10889,.39111,0,0,1.14999],8597:[.25,.75,0,0,.575],8598:[.19444,.69444,0,0,1.14999],8599:[.19444,.69444,0,0,1.14999],8600:[.19444,.69444,0,0,1.14999],8601:[.19444,.69444,0,0,1.14999],8636:[-.10889,.39111,0,0,1.14999],8637:[-.10889,.39111,0,0,1.14999],8640:[-.10889,.39111,0,0,1.14999],8641:[-.10889,.39111,0,0,1.14999],8656:[-.10889,.39111,0,0,1.14999],8657:[.19444,.69444,0,0,.70277],8658:[-.10889,.39111,0,0,1.14999],8659:[.19444,.69444,0,0,.70277],8660:[-.10889,.39111,0,0,1.14999],8661:[.25,.75,0,0,.70277],8704:[0,.69444,0,0,.63889],8706:[0,.69444,.06389,0,.62847],8707:[0,.69444,0,0,.63889],8709:[.05556,.75,0,0,.575],8711:[0,.68611,0,0,.95833],8712:[.08556,.58556,0,0,.76666],8715:[.08556,.58556,0,0,.76666],8722:[.13333,.63333,0,0,.89444],8723:[.13333,.63333,0,0,.89444],8725:[.25,.75,0,0,.575],8726:[.25,.75,0,0,.575],8727:[-.02778,.47222,0,0,.575],8728:[-.02639,.47361,0,0,.575],8729:[-.02639,.47361,0,0,.575],8730:[.18,.82,0,0,.95833],8733:[0,.44444,0,0,.89444],8734:[0,.44444,0,0,1.14999],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.31944],8741:[.25,.75,0,0,.575],8743:[0,.55556,0,0,.76666],8744:[0,.55556,0,0,.76666],8745:[0,.55556,0,0,.76666],8746:[0,.55556,0,0,.76666],8747:[.19444,.69444,.12778,0,.56875],8764:[-.10889,.39111,0,0,.89444],8768:[.19444,.69444,0,0,.31944],8771:[.00222,.50222,0,0,.89444],8773:[.027,.638,0,0,.894],8776:[.02444,.52444,0,0,.89444],8781:[.00222,.50222,0,0,.89444],8801:[.00222,.50222,0,0,.89444],8804:[.19667,.69667,0,0,.89444],8805:[.19667,.69667,0,0,.89444],8810:[.08556,.58556,0,0,1.14999],8811:[.08556,.58556,0,0,1.14999],8826:[.08556,.58556,0,0,.89444],8827:[.08556,.58556,0,0,.89444],8834:[.08556,.58556,0,0,.89444],8835:[.08556,.58556,0,0,.89444],8838:[.19667,.69667,0,0,.89444],8839:[.19667,.69667,0,0,.89444],8846:[0,.55556,0,0,.76666],8849:[.19667,.69667,0,0,.89444],8850:[.19667,.69667,0,0,.89444],8851:[0,.55556,0,0,.76666],8852:[0,.55556,0,0,.76666],8853:[.13333,.63333,0,0,.89444],8854:[.13333,.63333,0,0,.89444],8855:[.13333,.63333,0,0,.89444],8856:[.13333,.63333,0,0,.89444],8857:[.13333,.63333,0,0,.89444],8866:[0,.69444,0,0,.70277],8867:[0,.69444,0,0,.70277],8868:[0,.69444,0,0,.89444],8869:[0,.69444,0,0,.89444],8900:[-.02639,.47361,0,0,.575],8901:[-.02639,.47361,0,0,.31944],8902:[-.02778,.47222,0,0,.575],8968:[.25,.75,0,0,.51111],8969:[.25,.75,0,0,.51111],8970:[.25,.75,0,0,.51111],8971:[.25,.75,0,0,.51111],8994:[-.13889,.36111,0,0,1.14999],8995:[-.13889,.36111,0,0,1.14999],9651:[.19444,.69444,0,0,1.02222],9657:[-.02778,.47222,0,0,.575],9661:[.19444,.69444,0,0,1.02222],9667:[-.02778,.47222,0,0,.575],9711:[.19444,.69444,0,0,1.14999],9824:[.12963,.69444,0,0,.89444],9825:[.12963,.69444,0,0,.89444],9826:[.12963,.69444,0,0,.89444],9827:[.12963,.69444,0,0,.89444],9837:[0,.75,0,0,.44722],9838:[.19444,.69444,0,0,.44722],9839:[.19444,.69444,0,0,.44722],10216:[.25,.75,0,0,.44722],10217:[.25,.75,0,0,.44722],10815:[0,.68611,0,0,.9],10927:[.19667,.69667,0,0,.89444],10928:[.19667,.69667,0,0,.89444],57376:[.19444,.69444,0,0,0]},"Main-BoldItalic":{32:[0,0,0,0,.25],33:[0,.69444,.11417,0,.38611],34:[0,.69444,.07939,0,.62055],35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:[0,.69444,.12945,0,.35555],40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:[0,.64444,.13167,0,.59111],49:[0,.64444,.13167,0,.59111],50:[0,.64444,.13167,0,.59111],51:[0,.64444,.13167,0,.59111],52:[.19444,.64444,.13167,0,.59111],53:[0,.64444,.13167,0,.59111],54:[0,.64444,.13167,0,.59111],55:[.19444,.64444,.13167,0,.59111],56:[0,.64444,.13167,0,.59111],57:[0,.64444,.13167,0,.59111],58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:[0,.69444,.11472,0,.59111],64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:[0,.68611,.17208,0,.8961],73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:[0,.68611,.17208,0,.8961],79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:[0,.69444,.06709,0,.59111],95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:[.19444,.44444,.105,0,.53222],104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:[.19444,.44444,.105,0,.53222],114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:[0,0,0,0,.25],168:[0,.69444,.11473,0,.59111],176:[0,.69444,0,0,.94888],184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:[0,.44444,.085,0,.82666],248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:[0,.44444,.085,0,.82666],567:[.19444,.44444,.04611,0,.385],710:[0,.69444,.06709,0,.59111],711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:[0,.69444,.12945,0,.35555],730:[0,.69444,0,0,.94888],732:[0,.69444,.11472,0,.59111],733:[0,.69444,.11472,0,.59111],915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:[0,.68611,.17208,0,.8961],931:[0,.68611,.11431,0,.82666],933:[0,.68611,.10778,0,.88555],934:[0,.68611,.05632,0,.82666],936:[0,.68611,.10778,0,.88555],937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:[0,.69444,.12945,0,.35555],8217:[0,.69444,.12945,0,.35555],8220:[0,.69444,.16772,0,.62055],8221:[0,.69444,.07939,0,.62055]},"Main-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.12417,0,.30667],34:[0,.69444,.06961,0,.51444],35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:[0,.69444,.12417,0,.30667],40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:[0,.64444,.13556,0,.51111],49:[0,.64444,.13556,0,.51111],50:[0,.64444,.13556,0,.51111],51:[0,.64444,.13556,0,.51111],52:[.19444,.64444,.13556,0,.51111],53:[0,.64444,.13556,0,.51111],54:[0,.64444,.13556,0,.51111],55:[.19444,.64444,.13556,0,.51111],56:[0,.64444,.13556,0,.51111],57:[0,.64444,.13556,0,.51111],58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:[0,.69444,.1225,0,.51111],64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:[0,.68333,.16389,0,.74333],73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:[0,.68333,.16389,0,.74333],79:[0,.68333,.09403,0,.76666],80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:[0,.68333,.16389,0,.74333],86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:[0,.69444,.06646,0,.51111],95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:[.19444,.43056,.08847,0,.46],104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:[.19444,.43056,.08847,0,.46],114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:[0,0,0,0,.25],168:[0,.66786,.10474,0,.51111],176:[0,.69444,0,0,.83129],184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:[0,.43056,.07514,0,.71555],248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:[0,.43056,.07514,0,.71555],710:[0,.69444,.06646,0,.51111],711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:[0,.69444,0,0,.83129],732:[0,.66786,.11585,0,.51111],733:[0,.69444,.1225,0,.51111],915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:[0,.68333,.09403,0,.76666],923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:[0,.68333,.16389,0,.74333],931:[0,.68333,.12028,0,.71555],933:[0,.68333,.11111,0,.76666],934:[0,.68333,.05986,0,.71555],936:[0,.68333,.11111,0,.76666],937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:[0,.69444,.12417,0,.30667],8217:[0,.69444,.12417,0,.30667],8220:[0,.69444,.1685,0,.51444],8221:[0,.69444,.06961,0,.51444],8463:[0,.68889,0,0,.54028]},"Main-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.27778],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.77778],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.64444,0,0,.5],49:[0,.64444,0,0,.5],50:[0,.64444,0,0,.5],51:[0,.64444,0,0,.5],52:[0,.64444,0,0,.5],53:[0,.64444,0,0,.5],54:[0,.64444,0,0,.5],55:[0,.64444,0,0,.5],56:[0,.64444,0,0,.5],57:[0,.64444,0,0,.5],58:[0,.43056,0,0,.27778],59:[.19444,.43056,0,0,.27778],60:[.0391,.5391,0,0,.77778],61:[-.13313,.36687,0,0,.77778],62:[.0391,.5391,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.77778],65:[0,.68333,0,0,.75],66:[0,.68333,0,0,.70834],67:[0,.68333,0,0,.72222],68:[0,.68333,0,0,.76389],69:[0,.68333,0,0,.68056],70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:[0,.68333,0,0,.75],73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:[0,.68333,0,0,.77778],76:[0,.68333,0,0,.625],77:[0,.68333,0,0,.91667],78:[0,.68333,0,0,.75],79:[0,.68333,0,0,.77778],80:[0,.68333,0,0,.68056],81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:[0,.68333,0,0,.72222],85:[0,.68333,0,0,.75],86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:[0,.68333,0,0,.75],89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:[.25,.75,0,0,.27778],92:[.25,.75,0,0,.5],93:[.25,.75,0,0,.27778],94:[0,.69444,0,0,.5],95:[.31,.12056,.02778,0,.5],97:[0,.43056,0,0,.5],98:[0,.69444,0,0,.55556],99:[0,.43056,0,0,.44445],100:[0,.69444,0,0,.55556],101:[0,.43056,0,0,.44445],102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:[0,.69444,0,0,.55556],105:[0,.66786,0,0,.27778],106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:[0,.69444,0,0,.27778],109:[0,.43056,0,0,.83334],110:[0,.43056,0,0,.55556],111:[0,.43056,0,0,.5],112:[.19444,.43056,0,0,.55556],113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:[0,.43056,0,0,.55556],118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:[0,.43056,0,0,.44445],123:[.25,.75,0,0,.5],124:[.25,.75,0,0,.27778],125:[.25,.75,0,0,.5],126:[.35,.31786,0,0,.5],160:[0,0,0,0,.25],163:[0,.69444,0,0,.76909],167:[.19444,.69444,0,0,.44445],168:[0,.66786,0,0,.5],172:[0,.43056,0,0,.66667],176:[0,.69444,0,0,.75],177:[.08333,.58333,0,0,.77778],182:[.19444,.69444,0,0,.61111],184:[.17014,0,0,0,.44445],198:[0,.68333,0,0,.90278],215:[.08333,.58333,0,0,.77778],216:[.04861,.73194,0,0,.77778],223:[0,.69444,0,0,.5],230:[0,.43056,0,0,.72222],247:[.08333,.58333,0,0,.77778],248:[.09722,.52778,0,0,.5],305:[0,.43056,0,0,.27778],338:[0,.68333,0,0,1.01389],339:[0,.43056,0,0,.77778],567:[.19444,.43056,0,0,.30556],710:[0,.69444,0,0,.5],711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.66786,0,0,.27778],730:[0,.69444,0,0,.75],732:[0,.66786,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.68333,0,0,.625],916:[0,.68333,0,0,.83334],920:[0,.68333,0,0,.77778],923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:[0,.68333,0,0,.75],931:[0,.68333,0,0,.72222],933:[0,.68333,0,0,.77778],934:[0,.68333,0,0,.72222],936:[0,.68333,0,0,.77778],937:[0,.68333,0,0,.72222],8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5],8224:[.19444,.69444,0,0,.44445],8225:[.19444,.69444,0,0,.44445],8230:[0,.123,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:[0,.68889,0,0,.54028],8465:[0,.69444,0,0,.72222],8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:[0,.69444,0,0,.72222],8501:[0,.69444,0,0,.61111],8592:[-.13313,.36687,0,0,1],8593:[.19444,.69444,0,0,.5],8594:[-.13313,.36687,0,0,1],8595:[.19444,.69444,0,0,.5],8596:[-.13313,.36687,0,0,1],8597:[.25,.75,0,0,.5],8598:[.19444,.69444,0,0,1],8599:[.19444,.69444,0,0,1],8600:[.19444,.69444,0,0,1],8601:[.19444,.69444,0,0,1],8614:[.011,.511,0,0,1],8617:[.011,.511,0,0,1.126],8618:[.011,.511,0,0,1.126],8636:[-.13313,.36687,0,0,1],8637:[-.13313,.36687,0,0,1],8640:[-.13313,.36687,0,0,1],8641:[-.13313,.36687,0,0,1],8652:[.011,.671,0,0,1],8656:[-.13313,.36687,0,0,1],8657:[.19444,.69444,0,0,.61111],8658:[-.13313,.36687,0,0,1],8659:[.19444,.69444,0,0,.61111],8660:[-.13313,.36687,0,0,1],8661:[.25,.75,0,0,.61111],8704:[0,.69444,0,0,.55556],8706:[0,.69444,.05556,.08334,.5309],8707:[0,.69444,0,0,.55556],8709:[.05556,.75,0,0,.5],8711:[0,.68333,0,0,.83334],8712:[.0391,.5391,0,0,.66667],8715:[.0391,.5391,0,0,.66667],8722:[.08333,.58333,0,0,.77778],8723:[.08333,.58333,0,0,.77778],8725:[.25,.75,0,0,.5],8726:[.25,.75,0,0,.5],8727:[-.03472,.46528,0,0,.5],8728:[-.05555,.44445,0,0,.5],8729:[-.05555,.44445,0,0,.5],8730:[.2,.8,0,0,.83334],8733:[0,.43056,0,0,.77778],8734:[0,.43056,0,0,1],8736:[0,.69224,0,0,.72222],8739:[.25,.75,0,0,.27778],8741:[.25,.75,0,0,.5],8743:[0,.55556,0,0,.66667],8744:[0,.55556,0,0,.66667],8745:[0,.55556,0,0,.66667],8746:[0,.55556,0,0,.66667],8747:[.19444,.69444,.11111,0,.41667],8764:[-.13313,.36687,0,0,.77778],8768:[.19444,.69444,0,0,.27778],8771:[-.03625,.46375,0,0,.77778],8773:[-.022,.589,0,0,.778],8776:[-.01688,.48312,0,0,.77778],8781:[-.03625,.46375,0,0,.77778],8784:[-.133,.673,0,0,.778],8801:[-.03625,.46375,0,0,.77778],8804:[.13597,.63597,0,0,.77778],8805:[.13597,.63597,0,0,.77778],8810:[.0391,.5391,0,0,1],8811:[.0391,.5391,0,0,1],8826:[.0391,.5391,0,0,.77778],8827:[.0391,.5391,0,0,.77778],8834:[.0391,.5391,0,0,.77778],8835:[.0391,.5391,0,0,.77778],8838:[.13597,.63597,0,0,.77778],8839:[.13597,.63597,0,0,.77778],8846:[0,.55556,0,0,.66667],8849:[.13597,.63597,0,0,.77778],8850:[.13597,.63597,0,0,.77778],8851:[0,.55556,0,0,.66667],8852:[0,.55556,0,0,.66667],8853:[.08333,.58333,0,0,.77778],8854:[.08333,.58333,0,0,.77778],8855:[.08333,.58333,0,0,.77778],8856:[.08333,.58333,0,0,.77778],8857:[.08333,.58333,0,0,.77778],8866:[0,.69444,0,0,.61111],8867:[0,.69444,0,0,.61111],8868:[0,.69444,0,0,.77778],8869:[0,.69444,0,0,.77778],8872:[.249,.75,0,0,.867],8900:[-.05555,.44445,0,0,.5],8901:[-.05555,.44445,0,0,.27778],8902:[-.03472,.46528,0,0,.5],8904:[.005,.505,0,0,.9],8942:[.03,.903,0,0,.278],8943:[-.19,.313,0,0,1.172],8945:[-.1,.823,0,0,1.282],8968:[.25,.75,0,0,.44445],8969:[.25,.75,0,0,.44445],8970:[.25,.75,0,0,.44445],8971:[.25,.75,0,0,.44445],8994:[-.14236,.35764,0,0,1],8995:[-.14236,.35764,0,0,1],9136:[.244,.744,0,0,.412],9137:[.244,.745,0,0,.412],9651:[.19444,.69444,0,0,.88889],9657:[-.03472,.46528,0,0,.5],9661:[.19444,.69444,0,0,.88889],9667:[-.03472,.46528,0,0,.5],9711:[.19444,.69444,0,0,1],9824:[.12963,.69444,0,0,.77778],9825:[.12963,.69444,0,0,.77778],9826:[.12963,.69444,0,0,.77778],9827:[.12963,.69444,0,0,.77778],9837:[0,.75,0,0,.38889],9838:[.19444,.69444,0,0,.38889],9839:[.19444,.69444,0,0,.38889],10216:[.25,.75,0,0,.38889],10217:[.25,.75,0,0,.38889],10222:[.244,.744,0,0,.412],10223:[.244,.745,0,0,.412],10229:[.011,.511,0,0,1.609],10230:[.011,.511,0,0,1.638],10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:[.011,.511,0,0,1.638],10815:[0,.68333,0,0,.75],10927:[.13597,.63597,0,0,.77778],10928:[.13597,.63597,0,0,.77778],57376:[.19444,.69444,0,0,0]},"Math-BoldItalic":{32:[0,0,0,0,.25],48:[0,.44444,0,0,.575],49:[0,.44444,0,0,.575],50:[0,.44444,0,0,.575],51:[.19444,.44444,0,0,.575],52:[.19444,.44444,0,0,.575],53:[.19444,.44444,0,0,.575],54:[0,.64444,0,0,.575],55:[.19444,.44444,0,0,.575],56:[0,.64444,0,0,.575],57:[.19444,.44444,0,0,.575],65:[0,.68611,0,0,.86944],66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:[0,.68611,.08229,0,.98229],73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:[0,.68611,0,0,.75555],77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:[0,.69444,0,0,.66759],105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:[0,.44444,0,0,.58472],112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:[0,0,0,0,.25],915:[0,.68611,.15972,0,.65694],916:[0,.68611,0,0,.95833],920:[0,.68611,.03194,0,.86722],923:[0,.68611,0,0,.80555],926:[0,.68611,.07458,0,.84125],928:[0,.68611,.08229,0,.98229],931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:[0,.68611,0,0,.76666],936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:[0,.44444,0,0,.58472],960:[0,.44444,.03704,0,.68241],961:[.19444,.44444,0,0,.6118],962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:[.19444,.44444,0,0,.6118],1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:[0,0,0,0,.25],48:[0,.43056,0,0,.5],49:[0,.43056,0,0,.5],50:[0,.43056,0,0,.5],51:[.19444,.43056,0,0,.5],52:[.19444,.43056,0,0,.5],53:[.19444,.43056,0,0,.5],54:[0,.64444,0,0,.5],55:[.19444,.43056,0,0,.5],56:[0,.64444,0,0,.5],57:[.19444,.43056,0,0,.5],65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:[0,.68333,.08125,.05556,.83125],73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:[0,.68333,.02778,.08334,.76278],80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:[0,.43056,0,.05556,.48472],112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:[0,0,0,0,.25],915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:[0,.68333,.02778,.08334,.76278],923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:[0,.68333,.08125,.05556,.83125],931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:[0,.43056,0,.05556,.48472],960:[0,.43056,.03588,0,.57003],961:[.19444,.43056,0,.08334,.51702],962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:[.19444,.43056,0,.08334,.51702],1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.36667],34:[0,.69444,0,0,.55834],35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:[0,.69444,0,0,.30556],40:[.25,.75,0,0,.42778],41:[.25,.75,0,0,.42778],42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:[0,.69444,0,0,.55],49:[0,.69444,0,0,.55],50:[0,.69444,0,0,.55],51:[0,.69444,0,0,.55],52:[0,.69444,0,0,.55],53:[0,.69444,0,0,.55],54:[0,.69444,0,0,.55],55:[0,.69444,0,0,.55],56:[0,.69444,0,0,.55],57:[0,.69444,0,0,.55],58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:[0,.69444,0,0,.51945],64:[0,.69444,0,0,.73334],65:[0,.69444,0,0,.73334],66:[0,.69444,0,0,.73334],67:[0,.69444,0,0,.70278],68:[0,.69444,0,0,.79445],69:[0,.69444,0,0,.64167],70:[0,.69444,0,0,.61111],71:[0,.69444,0,0,.73334],72:[0,.69444,0,0,.79445],73:[0,.69444,0,0,.33056],74:[0,.69444,0,0,.51945],75:[0,.69444,0,0,.76389],76:[0,.69444,0,0,.58056],77:[0,.69444,0,0,.97778],78:[0,.69444,0,0,.79445],79:[0,.69444,0,0,.79445],80:[0,.69444,0,0,.70278],81:[.10556,.69444,0,0,.79445],82:[0,.69444,0,0,.70278],83:[0,.69444,0,0,.61111],84:[0,.69444,0,0,.73334],85:[0,.69444,0,0,.76389],86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:[0,.69444,0,0,.73334],89:[0,.69444,.0275,0,.73334],90:[0,.69444,0,0,.67223],91:[.25,.75,0,0,.34306],93:[.25,.75,0,0,.34306],94:[0,.69444,0,0,.55],95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:[0,.69444,0,0,.56111],99:[0,.45833,0,0,.48889],100:[0,.69444,0,0,.56111],101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:[0,.69444,0,0,.56111],105:[0,.69444,0,0,.25556],106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:[0,.69444,0,0,.25556],109:[0,.45833,0,0,.86667],110:[0,.45833,0,0,.56111],111:[0,.45833,0,0,.55],112:[.19444,.45833,0,0,.56111],113:[.19444,.45833,0,0,.56111],114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:[0,.45833,0,0,.56111],118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:[0,0,0,0,.25],168:[0,.69444,0,0,.55],176:[0,.69444,0,0,.73334],180:[0,.69444,0,0,.55],184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:[0,.69444,0,0,.55],711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:[0,.69444,0,0,.55],729:[0,.69444,0,0,.30556],730:[0,.69444,0,0,.73334],732:[0,.69444,0,0,.55],733:[0,.69444,0,0,.55],915:[0,.69444,0,0,.58056],916:[0,.69444,0,0,.91667],920:[0,.69444,0,0,.85556],923:[0,.69444,0,0,.67223],926:[0,.69444,0,0,.73334],928:[0,.69444,0,0,.79445],931:[0,.69444,0,0,.79445],933:[0,.69444,0,0,.85556],934:[0,.69444,0,0,.79445],936:[0,.69444,0,0,.85556],937:[0,.69444,0,0,.79445],8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:[0,.69444,0,0,.30556],8217:[0,.69444,0,0,.30556],8220:[0,.69444,0,0,.55834],8221:[0,.69444,0,0,.55834]},"SansSerif-Italic":{32:[0,0,0,0,.25],33:[0,.69444,.05733,0,.31945],34:[0,.69444,.00316,0,.5],35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:[0,.69444,.07816,0,.27778],40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,.01946,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,.13164,0,.5],48:[0,.65556,.11156,0,.5],49:[0,.65556,.11156,0,.5],50:[0,.65556,.11156,0,.5],51:[0,.65556,.11156,0,.5],52:[0,.65556,.11156,0,.5],53:[0,.65556,.11156,0,.5],54:[0,.65556,.11156,0,.5],55:[0,.65556,.11156,0,.5],56:[0,.65556,.11156,0,.5],57:[0,.65556,.11156,0,.5],58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:[0,.69444,.08094,0,.70834],73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,.08094,0,.875],78:[0,.69444,.08094,0,.70834],79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:[0,.69444,.0799,0,.5],95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:[0,0,0,0,.25],168:[0,.67937,.06385,0,.5],176:[0,.69444,0,0,.73752],184:[.17014,0,0,0,.44445],305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:[0,.69444,.0799,0,.5],711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:[0,.69444,.09205,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:[0,.69444,0,0,.73752],732:[0,.67659,.08826,0,.5],733:[0,.69444,.09205,0,.5],915:[0,.69444,.13372,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,.07555,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,.12816,0,.66667],928:[0,.69444,.08094,0,.70834],931:[0,.69444,.11983,0,.72222],933:[0,.69444,.09031,0,.77778],934:[0,.69444,.04603,0,.72222],936:[0,.69444,.09031,0,.77778],937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:[0,.69444,.07816,0,.27778],8217:[0,.69444,.07816,0,.27778],8220:[0,.69444,.14205,0,.5],8221:[0,.69444,.00316,0,.5]},"SansSerif-Regular":{32:[0,0,0,0,.25],33:[0,.69444,0,0,.31945],34:[0,.69444,0,0,.5],35:[.19444,.69444,0,0,.83334],36:[.05556,.75,0,0,.5],37:[.05556,.75,0,0,.83334],38:[0,.69444,0,0,.75834],39:[0,.69444,0,0,.27778],40:[.25,.75,0,0,.38889],41:[.25,.75,0,0,.38889],42:[0,.75,0,0,.5],43:[.08333,.58333,0,0,.77778],44:[.125,.08333,0,0,.27778],45:[0,.44444,0,0,.33333],46:[0,.08333,0,0,.27778],47:[.25,.75,0,0,.5],48:[0,.65556,0,0,.5],49:[0,.65556,0,0,.5],50:[0,.65556,0,0,.5],51:[0,.65556,0,0,.5],52:[0,.65556,0,0,.5],53:[0,.65556,0,0,.5],54:[0,.65556,0,0,.5],55:[0,.65556,0,0,.5],56:[0,.65556,0,0,.5],57:[0,.65556,0,0,.5],58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:[0,.69444,0,0,.47222],64:[0,.69444,0,0,.66667],65:[0,.69444,0,0,.66667],66:[0,.69444,0,0,.66667],67:[0,.69444,0,0,.63889],68:[0,.69444,0,0,.72223],69:[0,.69444,0,0,.59722],70:[0,.69444,0,0,.56945],71:[0,.69444,0,0,.66667],72:[0,.69444,0,0,.70834],73:[0,.69444,0,0,.27778],74:[0,.69444,0,0,.47222],75:[0,.69444,0,0,.69445],76:[0,.69444,0,0,.54167],77:[0,.69444,0,0,.875],78:[0,.69444,0,0,.70834],79:[0,.69444,0,0,.73611],80:[0,.69444,0,0,.63889],81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:[0,.69444,0,0,.55556],84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:[0,.69444,0,0,.66667],89:[0,.69444,.025,0,.66667],90:[0,.69444,0,0,.61111],91:[.25,.75,0,0,.28889],93:[.25,.75,0,0,.28889],94:[0,.69444,0,0,.5],95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:[0,.69444,0,0,.51667],99:[0,.44444,0,0,.44445],100:[0,.69444,0,0,.51667],101:[0,.44444,0,0,.44445],102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:[0,.69444,0,0,.51667],105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:[0,.44444,0,0,.51667],111:[0,.44444,0,0,.5],112:[.19444,.44444,0,0,.51667],113:[.19444,.44444,0,0,.51667],114:[0,.44444,.01389,0,.34167],115:[0,.44444,0,0,.38333],116:[0,.57143,0,0,.36111],117:[0,.44444,0,0,.51667],118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:[0,0,0,0,.25],168:[0,.67937,0,0,.5],176:[0,.69444,0,0,.66667],184:[.17014,0,0,0,.44445],305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:[0,.69444,0,0,.5],711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:[0,.69444,0,0,.5],715:[0,.69444,0,0,.5],728:[0,.69444,0,0,.5],729:[0,.67937,0,0,.27778],730:[0,.69444,0,0,.66667],732:[0,.67659,0,0,.5],733:[0,.69444,0,0,.5],915:[0,.69444,0,0,.54167],916:[0,.69444,0,0,.83334],920:[0,.69444,0,0,.77778],923:[0,.69444,0,0,.61111],926:[0,.69444,0,0,.66667],928:[0,.69444,0,0,.70834],931:[0,.69444,0,0,.72222],933:[0,.69444,0,0,.77778],934:[0,.69444,0,0,.72222],936:[0,.69444,0,0,.77778],937:[0,.69444,0,0,.72222],8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:[0,.69444,0,0,.27778],8217:[0,.69444,0,0,.27778],8220:[0,.69444,0,0,.5],8221:[0,.69444,0,0,.5]},"Script-Regular":{32:[0,0,0,0,.25],65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:[0,0,0,0,.25]},"Size1-Regular":{32:[0,0,0,0,.25],40:[.35001,.85,0,0,.45834],41:[.35001,.85,0,0,.45834],47:[.35001,.85,0,0,.57778],91:[.35001,.85,0,0,.41667],92:[.35001,.85,0,0,.57778],93:[.35001,.85,0,0,.41667],123:[.35001,.85,0,0,.58334],125:[.35001,.85,0,0,.58334],160:[0,0,0,0,.25],710:[0,.72222,0,0,.55556],732:[0,.72222,0,0,.55556],770:[0,.72222,0,0,.55556],771:[0,.72222,0,0,.55556],8214:[-99e-5,.601,0,0,.77778],8593:[1e-5,.6,0,0,.66667],8595:[1e-5,.6,0,0,.66667],8657:[1e-5,.6,0,0,.77778],8659:[1e-5,.6,0,0,.77778],8719:[.25001,.75,0,0,.94445],8720:[.25001,.75,0,0,.94445],8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:[.30612,.805,.19445,0,.47222],8748:[.306,.805,.19445,0,.47222],8749:[.306,.805,.19445,0,.47222],8750:[.30612,.805,.19445,0,.47222],8896:[.25001,.75,0,0,.83334],8897:[.25001,.75,0,0,.83334],8898:[.25001,.75,0,0,.83334],8899:[.25001,.75,0,0,.83334],8968:[.35001,.85,0,0,.47222],8969:[.35001,.85,0,0,.47222],8970:[.35001,.85,0,0,.47222],8971:[.35001,.85,0,0,.47222],9168:[-99e-5,.601,0,0,.66667],10216:[.35001,.85,0,0,.47222],10217:[.35001,.85,0,0,.47222],10752:[.25001,.75,0,0,1.11111],10753:[.25001,.75,0,0,1.11111],10754:[.25001,.75,0,0,1.11111],10756:[.25001,.75,0,0,.83334],10758:[.25001,.75,0,0,.83334]},"Size2-Regular":{32:[0,0,0,0,.25],40:[.65002,1.15,0,0,.59722],41:[.65002,1.15,0,0,.59722],47:[.65002,1.15,0,0,.81111],91:[.65002,1.15,0,0,.47222],92:[.65002,1.15,0,0,.81111],93:[.65002,1.15,0,0,.47222],123:[.65002,1.15,0,0,.66667],125:[.65002,1.15,0,0,.66667],160:[0,0,0,0,.25],710:[0,.75,0,0,1],732:[0,.75,0,0,1],770:[0,.75,0,0,1],771:[0,.75,0,0,1],8719:[.55001,1.05,0,0,1.27778],8720:[.55001,1.05,0,0,1.27778],8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:[.86225,1.36,.44445,0,.55556],8748:[.862,1.36,.44445,0,.55556],8749:[.862,1.36,.44445,0,.55556],8750:[.86225,1.36,.44445,0,.55556],8896:[.55001,1.05,0,0,1.11111],8897:[.55001,1.05,0,0,1.11111],8898:[.55001,1.05,0,0,1.11111],8899:[.55001,1.05,0,0,1.11111],8968:[.65002,1.15,0,0,.52778],8969:[.65002,1.15,0,0,.52778],8970:[.65002,1.15,0,0,.52778],8971:[.65002,1.15,0,0,.52778],10216:[.65002,1.15,0,0,.61111],10217:[.65002,1.15,0,0,.61111],10752:[.55001,1.05,0,0,1.51112],10753:[.55001,1.05,0,0,1.51112],10754:[.55001,1.05,0,0,1.51112],10756:[.55001,1.05,0,0,1.11111],10758:[.55001,1.05,0,0,1.11111]},"Size3-Regular":{32:[0,0,0,0,.25],40:[.95003,1.45,0,0,.73611],41:[.95003,1.45,0,0,.73611],47:[.95003,1.45,0,0,1.04445],91:[.95003,1.45,0,0,.52778],92:[.95003,1.45,0,0,1.04445],93:[.95003,1.45,0,0,.52778],123:[.95003,1.45,0,0,.75],125:[.95003,1.45,0,0,.75],160:[0,0,0,0,.25],710:[0,.75,0,0,1.44445],732:[0,.75,0,0,1.44445],770:[0,.75,0,0,1.44445],771:[0,.75,0,0,1.44445],8730:[.95003,1.45,0,0,1],8968:[.95003,1.45,0,0,.58334],8969:[.95003,1.45,0,0,.58334],8970:[.95003,1.45,0,0,.58334],8971:[.95003,1.45,0,0,.58334],10216:[.95003,1.45,0,0,.75],10217:[.95003,1.45,0,0,.75]},"Size4-Regular":{32:[0,0,0,0,.25],40:[1.25003,1.75,0,0,.79167],41:[1.25003,1.75,0,0,.79167],47:[1.25003,1.75,0,0,1.27778],91:[1.25003,1.75,0,0,.58334],92:[1.25003,1.75,0,0,1.27778],93:[1.25003,1.75,0,0,.58334],123:[1.25003,1.75,0,0,.80556],125:[1.25003,1.75,0,0,.80556],160:[0,0,0,0,.25],710:[0,.825,0,0,1.8889],732:[0,.825,0,0,1.8889],770:[0,.825,0,0,1.8889],771:[0,.825,0,0,1.8889],8730:[1.25003,1.75,0,0,1],8968:[1.25003,1.75,0,0,.63889],8969:[1.25003,1.75,0,0,.63889],8970:[1.25003,1.75,0,0,.63889],8971:[1.25003,1.75,0,0,.63889],9115:[.64502,1.155,0,0,.875],9116:[1e-5,.6,0,0,.875],9117:[.64502,1.155,0,0,.875],9118:[.64502,1.155,0,0,.875],9119:[1e-5,.6,0,0,.875],9120:[.64502,1.155,0,0,.875],9121:[.64502,1.155,0,0,.66667],9122:[-99e-5,.601,0,0,.66667],9123:[.64502,1.155,0,0,.66667],9124:[.64502,1.155,0,0,.66667],9125:[-99e-5,.601,0,0,.66667],9126:[.64502,1.155,0,0,.66667],9127:[1e-5,.9,0,0,.88889],9128:[.65002,1.15,0,0,.88889],9129:[.90001,0,0,0,.88889],9130:[0,.3,0,0,.88889],9131:[1e-5,.9,0,0,.88889],9132:[.65002,1.15,0,0,.88889],9133:[.90001,0,0,0,.88889],9143:[.88502,.915,0,0,1.05556],10216:[1.25003,1.75,0,0,.80556],10217:[1.25003,1.75,0,0,.80556],57344:[-.00499,.605,0,0,1.05556],57345:[-.00499,.605,0,0,1.05556],57680:[0,.12,0,0,.45],57681:[0,.12,0,0,.45],57682:[0,.12,0,0,.45],57683:[0,.12,0,0,.45]},"Typewriter-Regular":{32:[0,0,0,0,.525],33:[0,.61111,0,0,.525],34:[0,.61111,0,0,.525],35:[0,.61111,0,0,.525],36:[.08333,.69444,0,0,.525],37:[.08333,.69444,0,0,.525],38:[0,.61111,0,0,.525],39:[0,.61111,0,0,.525],40:[.08333,.69444,0,0,.525],41:[.08333,.69444,0,0,.525],42:[0,.52083,0,0,.525],43:[-.08056,.53055,0,0,.525],44:[.13889,.125,0,0,.525],45:[-.08056,.53055,0,0,.525],46:[0,.125,0,0,.525],47:[.08333,.69444,0,0,.525],48:[0,.61111,0,0,.525],49:[0,.61111,0,0,.525],50:[0,.61111,0,0,.525],51:[0,.61111,0,0,.525],52:[0,.61111,0,0,.525],53:[0,.61111,0,0,.525],54:[0,.61111,0,0,.525],55:[0,.61111,0,0,.525],56:[0,.61111,0,0,.525],57:[0,.61111,0,0,.525],58:[0,.43056,0,0,.525],59:[.13889,.43056,0,0,.525],60:[-.05556,.55556,0,0,.525],61:[-.19549,.41562,0,0,.525],62:[-.05556,.55556,0,0,.525],63:[0,.61111,0,0,.525],64:[0,.61111,0,0,.525],65:[0,.61111,0,0,.525],66:[0,.61111,0,0,.525],67:[0,.61111,0,0,.525],68:[0,.61111,0,0,.525],69:[0,.61111,0,0,.525],70:[0,.61111,0,0,.525],71:[0,.61111,0,0,.525],72:[0,.61111,0,0,.525],73:[0,.61111,0,0,.525],74:[0,.61111,0,0,.525],75:[0,.61111,0,0,.525],76:[0,.61111,0,0,.525],77:[0,.61111,0,0,.525],78:[0,.61111,0,0,.525],79:[0,.61111,0,0,.525],80:[0,.61111,0,0,.525],81:[.13889,.61111,0,0,.525],82:[0,.61111,0,0,.525],83:[0,.61111,0,0,.525],84:[0,.61111,0,0,.525],85:[0,.61111,0,0,.525],86:[0,.61111,0,0,.525],87:[0,.61111,0,0,.525],88:[0,.61111,0,0,.525],89:[0,.61111,0,0,.525],90:[0,.61111,0,0,.525],91:[.08333,.69444,0,0,.525],92:[.08333,.69444,0,0,.525],93:[.08333,.69444,0,0,.525],94:[0,.61111,0,0,.525],95:[.09514,0,0,0,.525],96:[0,.61111,0,0,.525],97:[0,.43056,0,0,.525],98:[0,.61111,0,0,.525],99:[0,.43056,0,0,.525],100:[0,.61111,0,0,.525],101:[0,.43056,0,0,.525],102:[0,.61111,0,0,.525],103:[.22222,.43056,0,0,.525],104:[0,.61111,0,0,.525],105:[0,.61111,0,0,.525],106:[.22222,.61111,0,0,.525],107:[0,.61111,0,0,.525],108:[0,.61111,0,0,.525],109:[0,.43056,0,0,.525],110:[0,.43056,0,0,.525],111:[0,.43056,0,0,.525],112:[.22222,.43056,0,0,.525],113:[.22222,.43056,0,0,.525],114:[0,.43056,0,0,.525],115:[0,.43056,0,0,.525],116:[0,.55358,0,0,.525],117:[0,.43056,0,0,.525],118:[0,.43056,0,0,.525],119:[0,.43056,0,0,.525],120:[0,.43056,0,0,.525],121:[.22222,.43056,0,0,.525],122:[0,.43056,0,0,.525],123:[.08333,.69444,0,0,.525],124:[.08333,.69444,0,0,.525],125:[.08333,.69444,0,0,.525],126:[0,.61111,0,0,.525],127:[0,.61111,0,0,.525],160:[0,0,0,0,.525],176:[0,.61111,0,0,.525],184:[.19445,0,0,0,.525],305:[0,.43056,0,0,.525],567:[.22222,.43056,0,0,.525],711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:[0,.61111,0,0,.525],715:[0,.61111,0,0,.525],728:[0,.61111,0,0,.525],730:[0,.61111,0,0,.525],770:[0,.61111,0,0,.525],771:[0,.61111,0,0,.525],776:[0,.61111,0,0,.525],915:[0,.61111,0,0,.525],916:[0,.61111,0,0,.525],920:[0,.61111,0,0,.525],923:[0,.61111,0,0,.525],926:[0,.61111,0,0,.525],928:[0,.61111,0,0,.525],931:[0,.61111,0,0,.525],933:[0,.61111,0,0,.525],934:[0,.61111,0,0,.525],936:[0,.61111,0,0,.525],937:[0,.61111,0,0,.525],8216:[0,.61111,0,0,.525],8217:[0,.61111,0,0,.525],8242:[0,.61111,0,0,.525],9251:[.11111,.21944,0,0,.525]}},B={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2],arrayRuleWidth:[.04,.04,.04],fboxsep:[.3,.3,.3],fboxrule:[.04,.04,.04]},C={"\xc5":"A","\xd0":"D","\xde":"o","\xe5":"a","\xf0":"d","\xfe":"o","\u0410":"A","\u0411":"B","\u0412":"B","\u0413":"F","\u0414":"A","\u0415":"E","\u0416":"K","\u0417":"3","\u0418":"N","\u0419":"N","\u041a":"K","\u041b":"N","\u041c":"M","\u041d":"H","\u041e":"O","\u041f":"N","\u0420":"P","\u0421":"C","\u0422":"T","\u0423":"y","\u0424":"O","\u0425":"X","\u0426":"U","\u0427":"h","\u0428":"W","\u0429":"W","\u042a":"B","\u042b":"X","\u042c":"B","\u042d":"3","\u042e":"X","\u042f":"R","\u0430":"a","\u0431":"b","\u0432":"a","\u0433":"r","\u0434":"y","\u0435":"e","\u0436":"m","\u0437":"e","\u0438":"n","\u0439":"n","\u043a":"n","\u043b":"n","\u043c":"m","\u043d":"n","\u043e":"o","\u043f":"n","\u0440":"p","\u0441":"c","\u0442":"o","\u0443":"y","\u0444":"b","\u0445":"x","\u0446":"n","\u0447":"n","\u0448":"w","\u0449":"w","\u044a":"a","\u044b":"m","\u044c":"a","\u044d":"e","\u044e":"m","\u044f":"r"};function N(e,t,r){if(!T[t])throw new Error("Font metrics not found for font: "+t+".");var n=e.charCodeAt(0),a=T[t][n];if(!a&&e[0]in C&&(n=C[e[0]].charCodeAt(0),a=T[t][n]),a||"text"!==r||S(n)&&(a=T[t][77]),a)return{depth:a[0],height:a[1],italic:a[2],skew:a[3],width:a[4]}}var q={};var I=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],R=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],H=function(e,t){return t.size<2?e:I[e-1][t.size-1]},O=function(){function e(t){this.style=void 0,this.color=void 0,this.size=void 0,this.textSize=void 0,this.phantom=void 0,this.font=void 0,this.fontFamily=void 0,this.fontWeight=void 0,this.fontShape=void 0,this.sizeMultiplier=void 0,this.maxSize=void 0,this.minRuleThickness=void 0,this._fontMetrics=void 0,this.style=t.style,this.color=t.color,this.size=t.size||e.BASESIZE,this.textSize=t.textSize||this.size,this.phantom=!!t.phantom,this.font=t.font||"",this.fontFamily=t.fontFamily||"",this.fontWeight=t.fontWeight||"",this.fontShape=t.fontShape||"",this.sizeMultiplier=R[this.size-1],this.maxSize=t.maxSize,this.minRuleThickness=t.minRuleThickness,this._fontMetrics=void 0}var t=e.prototype;return t.extend=function(t){var r={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font,fontFamily:this.fontFamily,fontWeight:this.fontWeight,fontShape:this.fontShape,maxSize:this.maxSize,minRuleThickness:this.minRuleThickness};for(var n in t)t.hasOwnProperty(n)&&(r[n]=t[n]);return new e(r)},t.havingStyle=function(e){return this.style===e?this:this.extend({style:e,size:H(this.textSize,e)})},t.havingCrampedStyle=function(){return this.havingStyle(this.style.cramp())},t.havingSize=function(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e,sizeMultiplier:R[e-1]})},t.havingBaseStyle=function(t){t=t||this.style.text();var r=H(e.BASESIZE,t);return this.size===r&&this.textSize===e.BASESIZE&&this.style===t?this:this.extend({style:t,size:r})},t.havingBaseSizing=function(){var e;switch(this.style.id){case 4:case 5:e=3;break;case 6:case 7:e=1;break;default:e=6}return this.extend({style:this.style.text(),size:e})},t.withColor=function(e){return this.extend({color:e})},t.withPhantom=function(){return this.extend({phantom:!0})},t.withFont=function(e){return this.extend({font:e})},t.withTextFontFamily=function(e){return this.extend({fontFamily:e,font:""})},t.withTextFontWeight=function(e){return this.extend({fontWeight:e,font:""})},t.withTextFontShape=function(e){return this.extend({fontShape:e,font:""})},t.sizingClasses=function(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]},t.baseSizingClasses=function(){return this.size!==e.BASESIZE?["sizing","reset-size"+this.size,"size"+e.BASESIZE]:[]},t.fontMetrics=function(){return this._fontMetrics||(this._fontMetrics=function(e){var t;if(!q[t=e>=5?0:e>=3?1:2]){var r=q[t]={cssEmPerMu:B.quad[t]/18};for(var n in B)B.hasOwnProperty(n)&&(r[n]=B[n][t])}return q[t]}(this.size)),this._fontMetrics},t.getColor=function(){return this.phantom?"transparent":this.color},e}();O.BASESIZE=6;var E=O,L={pt:1,mm:7227/2540,cm:7227/254,in:72.27,bp:1.00375,pc:12,dd:1238/1157,cc:14856/1157,nd:685/642,nc:1370/107,sp:1/65536,px:1.00375},D={ex:!0,em:!0,mu:!0},V=function(e){return"string"!=typeof e&&(e=e.unit),e in L||e in D||"ex"===e},P=function(e,t){var r;if(e.unit in L)r=L[e.unit]/t.fontMetrics().ptPerEm/t.sizeMultiplier;else if("mu"===e.unit)r=t.fontMetrics().cssEmPerMu;else{var a;if(a=t.style.isTight()?t.havingStyle(t.style.text()):t,"ex"===e.unit)r=a.fontMetrics().xHeight;else{if("em"!==e.unit)throw new n("Invalid unit: '"+e.unit+"'");r=a.fontMetrics().quad}a!==t&&(r*=a.sizeMultiplier/t.sizeMultiplier)}return Math.min(e.number*r,t.maxSize)},F=function(e){return+e.toFixed(4)+"em"},G=function(e){return e.filter((function(e){return e})).join(" ")},U=function(e,t,r){if(this.classes=e||[],this.attributes={},this.height=0,this.depth=0,this.maxFontSize=0,this.style=r||{},t){t.style.isTight()&&this.classes.push("mtight");var n=t.getColor();n&&(this.style.color=n)}},Y=function(e){var t=document.createElement(e);for(var r in t.className=G(this.classes),this.style)this.style.hasOwnProperty(r)&&(t.style[r]=this.style[r]);for(var n in this.attributes)this.attributes.hasOwnProperty(n)&&t.setAttribute(n,this.attributes[n]);for(var a=0;a<this.children.length;a++)t.appendChild(this.children[a].toNode());return t},X=function(e){var t="<"+e;this.classes.length&&(t+=' class="'+l.escape(G(this.classes))+'"');var r="";for(var n in this.style)this.style.hasOwnProperty(n)&&(r+=l.hyphenate(n)+":"+this.style[n]+";");for(var a in r&&(t+=' style="'+l.escape(r)+'"'),this.attributes)this.attributes.hasOwnProperty(a)&&(t+=" "+a+'="'+l.escape(this.attributes[a])+'"');t+=">";for(var i=0;i<this.children.length;i++)t+=this.children[i].toMarkup();return t+="</"+e+">"},W=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.width=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,e,r,n),this.children=t||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"span")},t.toMarkup=function(){return X.call(this,"span")},e}(),_=function(){function e(e,t,r,n){this.children=void 0,this.attributes=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,U.call(this,t,n),this.children=r||[],this.setAttribute("href",e)}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){return Y.call(this,"a")},t.toMarkup=function(){return X.call(this,"a")},e}(),j=function(){function e(e,t,r){this.src=void 0,this.alt=void 0,this.classes=void 0,this.height=void 0,this.depth=void 0,this.maxFontSize=void 0,this.style=void 0,this.alt=t,this.src=e,this.classes=["mord"],this.style=r}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createElement("img");for(var t in e.src=this.src,e.alt=this.alt,e.className="mord",this.style)this.style.hasOwnProperty(t)&&(e.style[t]=this.style[t]);return e},t.toMarkup=function(){var e="<img  src='"+this.src+" 'alt='"+this.alt+"' ",t="";for(var r in this.style)this.style.hasOwnProperty(r)&&(t+=l.hyphenate(r)+":"+this.style[r]+";");return t&&(e+=' style="'+l.escape(t)+'"'),e+="'/>"},e}(),$={"\xee":"\u0131\u0302","\xef":"\u0131\u0308","\xed":"\u0131\u0301","\xec":"\u0131\u0300"},Z=function(){function e(e,t,r,n,a,i,o,s){this.text=void 0,this.height=void 0,this.depth=void 0,this.italic=void 0,this.skew=void 0,this.width=void 0,this.maxFontSize=void 0,this.classes=void 0,this.style=void 0,this.text=e,this.height=t||0,this.depth=r||0,this.italic=n||0,this.skew=a||0,this.width=i||0,this.classes=o||[],this.style=s||{},this.maxFontSize=0;var l=function(e){for(var t=0;t<w.length;t++)for(var r=w[t],n=0;n<r.blocks.length;n++){var a=r.blocks[n];if(e>=a[0]&&e<=a[1])return r.name}return null}(this.text.charCodeAt(0));l&&this.classes.push(l+"_fallback"),/[\xee\xef\xed\xec]/.test(this.text)&&(this.text=$[this.text])}var t=e.prototype;return t.hasClass=function(e){return l.contains(this.classes,e)},t.toNode=function(){var e=document.createTextNode(this.text),t=null;for(var r in this.italic>0&&((t=document.createElement("span")).style.marginRight=F(this.italic)),this.classes.length>0&&((t=t||document.createElement("span")).className=G(this.classes)),this.style)this.style.hasOwnProperty(r)&&((t=t||document.createElement("span")).style[r]=this.style[r]);return t?(t.appendChild(e),t):e},t.toMarkup=function(){var e=!1,t="<span";this.classes.length&&(e=!0,t+=' class="',t+=l.escape(G(this.classes)),t+='"');var r="";for(var n in this.italic>0&&(r+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(n)&&(r+=l.hyphenate(n)+":"+this.style[n]+";");r&&(e=!0,t+=' style="'+l.escape(r)+'"');var a=l.escape(this.text);return e?(t+=">",t+=a,t+="</span>"):a},e}(),K=function(){function e(e,t){this.children=void 0,this.attributes=void 0,this.children=e||[],this.attributes=t||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","svg");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);for(var r=0;r<this.children.length;r++)e.appendChild(this.children[r].toNode());return e},t.toMarkup=function(){var e='<svg xmlns="http://www.w3.org/2000/svg"';for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=" "+t+"='"+this.attributes[t]+"'");e+=">";for(var r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e+="</svg>"},e}(),J=function(){function e(e,t){this.pathName=void 0,this.alternate=void 0,this.pathName=e,this.alternate=t}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","path");return this.alternate?e.setAttribute("d",this.alternate):e.setAttribute("d",z[this.pathName]),e},t.toMarkup=function(){return this.alternate?"<path d='"+this.alternate+"'/>":"<path d='"+z[this.pathName]+"'/>"},e}(),Q=function(){function e(e){this.attributes=void 0,this.attributes=e||{}}var t=e.prototype;return t.toNode=function(){var e=document.createElementNS("http://www.w3.org/2000/svg","line");for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);return e},t.toMarkup=function(){var e="<line";for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=" "+t+"='"+this.attributes[t]+"'");return e+="/>"},e}();function ee(e){if(e instanceof Z)return e;throw new Error("Expected symbolNode but got "+String(e)+".")}var te={bin:1,close:1,inner:1,open:1,punct:1,rel:1},re={"accent-token":1,mathord:1,"op-token":1,spacing:1,textord:1},ne={math:{},text:{}},ae=ne;function ie(e,t,r,n,a,i){ne[e][a]={font:t,group:r,replace:n},i&&n&&(ne[e][n]=ne[e][a])}var oe="math",se="text",le="main",he="ams",ce="accent-token",me="bin",ue="close",pe="inner",de="mathord",fe="op-token",ge="open",ve="punct",ye="rel",be="spacing",xe="textord";ie(oe,le,ye,"\u2261","\\equiv",!0),ie(oe,le,ye,"\u227a","\\prec",!0),ie(oe,le,ye,"\u227b","\\succ",!0),ie(oe,le,ye,"\u223c","\\sim",!0),ie(oe,le,ye,"\u22a5","\\perp"),ie(oe,le,ye,"\u2aaf","\\preceq",!0),ie(oe,le,ye,"\u2ab0","\\succeq",!0),ie(oe,le,ye,"\u2243","\\simeq",!0),ie(oe,le,ye,"\u2223","\\mid",!0),ie(oe,le,ye,"\u226a","\\ll",!0),ie(oe,le,ye,"\u226b","\\gg",!0),ie(oe,le,ye,"\u224d","\\asymp",!0),ie(oe,le,ye,"\u2225","\\parallel"),ie(oe,le,ye,"\u22c8","\\bowtie",!0),ie(oe,le,ye,"\u2323","\\smile",!0),ie(oe,le,ye,"\u2291","\\sqsubseteq",!0),ie(oe,le,ye,"\u2292","\\sqsupseteq",!0),ie(oe,le,ye,"\u2250","\\doteq",!0),ie(oe,le,ye,"\u2322","\\frown",!0),ie(oe,le,ye,"\u220b","\\ni",!0),ie(oe,le,ye,"\u221d","\\propto",!0),ie(oe,le,ye,"\u22a2","\\vdash",!0),ie(oe,le,ye,"\u22a3","\\dashv",!0),ie(oe,le,ye,"\u220b","\\owns"),ie(oe,le,ve,".","\\ldotp"),ie(oe,le,ve,"\u22c5","\\cdotp"),ie(oe,le,xe,"#","\\#"),ie(se,le,xe,"#","\\#"),ie(oe,le,xe,"&","\\&"),ie(se,le,xe,"&","\\&"),ie(oe,le,xe,"\u2135","\\aleph",!0),ie(oe,le,xe,"\u2200","\\forall",!0),ie(oe,le,xe,"\u210f","\\hbar",!0),ie(oe,le,xe,"\u2203","\\exists",!0),ie(oe,le,xe,"\u2207","\\nabla",!0),ie(oe,le,xe,"\u266d","\\flat",!0),ie(oe,le,xe,"\u2113","\\ell",!0),ie(oe,le,xe,"\u266e","\\natural",!0),ie(oe,le,xe,"\u2663","\\clubsuit",!0),ie(oe,le,xe,"\u2118","\\wp",!0),ie(oe,le,xe,"\u266f","\\sharp",!0),ie(oe,le,xe,"\u2662","\\diamondsuit",!0),ie(oe,le,xe,"\u211c","\\Re",!0),ie(oe,le,xe,"\u2661","\\heartsuit",!0),ie(oe,le,xe,"\u2111","\\Im",!0),ie(oe,le,xe,"\u2660","\\spadesuit",!0),ie(oe,le,xe,"\xa7","\\S",!0),ie(se,le,xe,"\xa7","\\S"),ie(oe,le,xe,"\xb6","\\P",!0),ie(se,le,xe,"\xb6","\\P"),ie(oe,le,xe,"\u2020","\\dag"),ie(se,le,xe,"\u2020","\\dag"),ie(se,le,xe,"\u2020","\\textdagger"),ie(oe,le,xe,"\u2021","\\ddag"),ie(se,le,xe,"\u2021","\\ddag"),ie(se,le,xe,"\u2021","\\textdaggerdbl"),ie(oe,le,ue,"\u23b1","\\rmoustache",!0),ie(oe,le,ge,"\u23b0","\\lmoustache",!0),ie(oe,le,ue,"\u27ef","\\rgroup",!0),ie(oe,le,ge,"\u27ee","\\lgroup",!0),ie(oe,le,me,"\u2213","\\mp",!0),ie(oe,le,me,"\u2296","\\ominus",!0),ie(oe,le,me,"\u228e","\\uplus",!0),ie(oe,le,me,"\u2293","\\sqcap",!0),ie(oe,le,me,"\u2217","\\ast"),ie(oe,le,me,"\u2294","\\sqcup",!0),ie(oe,le,me,"\u25ef","\\bigcirc",!0),ie(oe,le,me,"\u2219","\\bullet",!0),ie(oe,le,me,"\u2021","\\ddagger"),ie(oe,le,me,"\u2240","\\wr",!0),ie(oe,le,me,"\u2a3f","\\amalg"),ie(oe,le,me,"&","\\And"),ie(oe,le,ye,"\u27f5","\\longleftarrow",!0),ie(oe,le,ye,"\u21d0","\\Leftarrow",!0),ie(oe,le,ye,"\u27f8","\\Longleftarrow",!0),ie(oe,le,ye,"\u27f6","\\longrightarrow",!0),ie(oe,le,ye,"\u21d2","\\Rightarrow",!0),ie(oe,le,ye,"\u27f9","\\Longrightarrow",!0),ie(oe,le,ye,"\u2194","\\leftrightarrow",!0),ie(oe,le,ye,"\u27f7","\\longleftrightarrow",!0),ie(oe,le,ye,"\u21d4","\\Leftrightarrow",!0),ie(oe,le,ye,"\u27fa","\\Longleftrightarrow",!0),ie(oe,le,ye,"\u21a6","\\mapsto",!0),ie(oe,le,ye,"\u27fc","\\longmapsto",!0),ie(oe,le,ye,"\u2197","\\nearrow",!0),ie(oe,le,ye,"\u21a9","\\hookleftarrow",!0),ie(oe,le,ye,"\u21aa","\\hookrightarrow",!0),ie(oe,le,ye,"\u2198","\\searrow",!0),ie(oe,le,ye,"\u21bc","\\leftharpoonup",!0),ie(oe,le,ye,"\u21c0","\\rightharpoonup",!0),ie(oe,le,ye,"\u2199","\\swarrow",!0),ie(oe,le,ye,"\u21bd","\\leftharpoondown",!0),ie(oe,le,ye,"\u21c1","\\rightharpoondown",!0),ie(oe,le,ye,"\u2196","\\nwarrow",!0),ie(oe,le,ye,"\u21cc","\\rightleftharpoons",!0),ie(oe,he,ye,"\u226e","\\nless",!0),ie(oe,he,ye,"\ue010","\\@nleqslant"),ie(oe,he,ye,"\ue011","\\@nleqq"),ie(oe,he,ye,"\u2a87","\\lneq",!0),ie(oe,he,ye,"\u2268","\\lneqq",!0),ie(oe,he,ye,"\ue00c","\\@lvertneqq"),ie(oe,he,ye,"\u22e6","\\lnsim",!0),ie(oe,he,ye,"\u2a89","\\lnapprox",!0),ie(oe,he,ye,"\u2280","\\nprec",!0),ie(oe,he,ye,"\u22e0","\\npreceq",!0),ie(oe,he,ye,"\u22e8","\\precnsim",!0),ie(oe,he,ye,"\u2ab9","\\precnapprox",!0),ie(oe,he,ye,"\u2241","\\nsim",!0),ie(oe,he,ye,"\ue006","\\@nshortmid"),ie(oe,he,ye,"\u2224","\\nmid",!0),ie(oe,he,ye,"\u22ac","\\nvdash",!0),ie(oe,he,ye,"\u22ad","\\nvDash",!0),ie(oe,he,ye,"\u22ea","\\ntriangleleft"),ie(oe,he,ye,"\u22ec","\\ntrianglelefteq",!0),ie(oe,he,ye,"\u228a","\\subsetneq",!0),ie(oe,he,ye,"\ue01a","\\@varsubsetneq"),ie(oe,he,ye,"\u2acb","\\subsetneqq",!0),ie(oe,he,ye,"\ue017","\\@varsubsetneqq"),ie(oe,he,ye,"\u226f","\\ngtr",!0),ie(oe,he,ye,"\ue00f","\\@ngeqslant"),ie(oe,he,ye,"\ue00e","\\@ngeqq"),ie(oe,he,ye,"\u2a88","\\gneq",!0),ie(oe,he,ye,"\u2269","\\gneqq",!0),ie(oe,he,ye,"\ue00d","\\@gvertneqq"),ie(oe,he,ye,"\u22e7","\\gnsim",!0),ie(oe,he,ye,"\u2a8a","\\gnapprox",!0),ie(oe,he,ye,"\u2281","\\nsucc",!0),ie(oe,he,ye,"\u22e1","\\nsucceq",!0),ie(oe,he,ye,"\u22e9","\\succnsim",!0),ie(oe,he,ye,"\u2aba","\\succnapprox",!0),ie(oe,he,ye,"\u2246","\\ncong",!0),ie(oe,he,ye,"\ue007","\\@nshortparallel"),ie(oe,he,ye,"\u2226","\\nparallel",!0),ie(oe,he,ye,"\u22af","\\nVDash",!0),ie(oe,he,ye,"\u22eb","\\ntriangleright"),ie(oe,he,ye,"\u22ed","\\ntrianglerighteq",!0),ie(oe,he,ye,"\ue018","\\@nsupseteqq"),ie(oe,he,ye,"\u228b","\\supsetneq",!0),ie(oe,he,ye,"\ue01b","\\@varsupsetneq"),ie(oe,he,ye,"\u2acc","\\supsetneqq",!0),ie(oe,he,ye,"\ue019","\\@varsupsetneqq"),ie(oe,he,ye,"\u22ae","\\nVdash",!0),ie(oe,he,ye,"\u2ab5","\\precneqq",!0),ie(oe,he,ye,"\u2ab6","\\succneqq",!0),ie(oe,he,ye,"\ue016","\\@nsubseteqq"),ie(oe,he,me,"\u22b4","\\unlhd"),ie(oe,he,me,"\u22b5","\\unrhd"),ie(oe,he,ye,"\u219a","\\nleftarrow",!0),ie(oe,he,ye,"\u219b","\\nrightarrow",!0),ie(oe,he,ye,"\u21cd","\\nLeftarrow",!0),ie(oe,he,ye,"\u21cf","\\nRightarrow",!0),ie(oe,he,ye,"\u21ae","\\nleftrightarrow",!0),ie(oe,he,ye,"\u21ce","\\nLeftrightarrow",!0),ie(oe,he,ye,"\u25b3","\\vartriangle"),ie(oe,he,xe,"\u210f","\\hslash"),ie(oe,he,xe,"\u25bd","\\triangledown"),ie(oe,he,xe,"\u25ca","\\lozenge"),ie(oe,he,xe,"\u24c8","\\circledS"),ie(oe,he,xe,"\xae","\\circledR"),ie(se,he,xe,"\xae","\\circledR"),ie(oe,he,xe,"\u2221","\\measuredangle",!0),ie(oe,he,xe,"\u2204","\\nexists"),ie(oe,he,xe,"\u2127","\\mho"),ie(oe,he,xe,"\u2132","\\Finv",!0),ie(oe,he,xe,"\u2141","\\Game",!0),ie(oe,he,xe,"\u2035","\\backprime"),ie(oe,he,xe,"\u25b2","\\blacktriangle"),ie(oe,he,xe,"\u25bc","\\blacktriangledown"),ie(oe,he,xe,"\u25a0","\\blacksquare"),ie(oe,he,xe,"\u29eb","\\blacklozenge"),ie(oe,he,xe,"\u2605","\\bigstar"),ie(oe,he,xe,"\u2222","\\sphericalangle",!0),ie(oe,he,xe,"\u2201","\\complement",!0),ie(oe,he,xe,"\xf0","\\eth",!0),ie(se,le,xe,"\xf0","\xf0"),ie(oe,he,xe,"\u2571","\\diagup"),ie(oe,he,xe,"\u2572","\\diagdown"),ie(oe,he,xe,"\u25a1","\\square"),ie(oe,he,xe,"\u25a1","\\Box"),ie(oe,he,xe,"\u25ca","\\Diamond"),ie(oe,he,xe,"\xa5","\\yen",!0),ie(se,he,xe,"\xa5","\\yen",!0),ie(oe,he,xe,"\u2713","\\checkmark",!0),ie(se,he,xe,"\u2713","\\checkmark"),ie(oe,he,xe,"\u2136","\\beth",!0),ie(oe,he,xe,"\u2138","\\daleth",!0),ie(oe,he,xe,"\u2137","\\gimel",!0),ie(oe,he,xe,"\u03dd","\\digamma",!0),ie(oe,he,xe,"\u03f0","\\varkappa"),ie(oe,he,ge,"\u250c","\\@ulcorner",!0),ie(oe,he,ue,"\u2510","\\@urcorner",!0),ie(oe,he,ge,"\u2514","\\@llcorner",!0),ie(oe,he,ue,"\u2518","\\@lrcorner",!0),ie(oe,he,ye,"\u2266","\\leqq",!0),ie(oe,he,ye,"\u2a7d","\\leqslant",!0),ie(oe,he,ye,"\u2a95","\\eqslantless",!0),ie(oe,he,ye,"\u2272","\\lesssim",!0),ie(oe,he,ye,"\u2a85","\\lessapprox",!0),ie(oe,he,ye,"\u224a","\\approxeq",!0),ie(oe,he,me,"\u22d6","\\lessdot"),ie(oe,he,ye,"\u22d8","\\lll",!0),ie(oe,he,ye,"\u2276","\\lessgtr",!0),ie(oe,he,ye,"\u22da","\\lesseqgtr",!0),ie(oe,he,ye,"\u2a8b","\\lesseqqgtr",!0),ie(oe,he,ye,"\u2251","\\doteqdot"),ie(oe,he,ye,"\u2253","\\risingdotseq",!0),ie(oe,he,ye,"\u2252","\\fallingdotseq",!0),ie(oe,he,ye,"\u223d","\\backsim",!0),ie(oe,he,ye,"\u22cd","\\backsimeq",!0),ie(oe,he,ye,"\u2ac5","\\subseteqq",!0),ie(oe,he,ye,"\u22d0","\\Subset",!0),ie(oe,he,ye,"\u228f","\\sqsubset",!0),ie(oe,he,ye,"\u227c","\\preccurlyeq",!0),ie(oe,he,ye,"\u22de","\\curlyeqprec",!0),ie(oe,he,ye,"\u227e","\\precsim",!0),ie(oe,he,ye,"\u2ab7","\\precapprox",!0),ie(oe,he,ye,"\u22b2","\\vartriangleleft"),ie(oe,he,ye,"\u22b4","\\trianglelefteq"),ie(oe,he,ye,"\u22a8","\\vDash",!0),ie(oe,he,ye,"\u22aa","\\Vvdash",!0),ie(oe,he,ye,"\u2323","\\smallsmile"),ie(oe,he,ye,"\u2322","\\smallfrown"),ie(oe,he,ye,"\u224f","\\bumpeq",!0),ie(oe,he,ye,"\u224e","\\Bumpeq",!0),ie(oe,he,ye,"\u2267","\\geqq",!0),ie(oe,he,ye,"\u2a7e","\\geqslant",!0),ie(oe,he,ye,"\u2a96","\\eqslantgtr",!0),ie(oe,he,ye,"\u2273","\\gtrsim",!0),ie(oe,he,ye,"\u2a86","\\gtrapprox",!0),ie(oe,he,me,"\u22d7","\\gtrdot"),ie(oe,he,ye,"\u22d9","\\ggg",!0),ie(oe,he,ye,"\u2277","\\gtrless",!0),ie(oe,he,ye,"\u22db","\\gtreqless",!0),ie(oe,he,ye,"\u2a8c","\\gtreqqless",!0),ie(oe,he,ye,"\u2256","\\eqcirc",!0),ie(oe,he,ye,"\u2257","\\circeq",!0),ie(oe,he,ye,"\u225c","\\triangleq",!0),ie(oe,he,ye,"\u223c","\\thicksim"),ie(oe,he,ye,"\u2248","\\thickapprox"),ie(oe,he,ye,"\u2ac6","\\supseteqq",!0),ie(oe,he,ye,"\u22d1","\\Supset",!0),ie(oe,he,ye,"\u2290","\\sqsupset",!0),ie(oe,he,ye,"\u227d","\\succcurlyeq",!0),ie(oe,he,ye,"\u22df","\\curlyeqsucc",!0),ie(oe,he,ye,"\u227f","\\succsim",!0),ie(oe,he,ye,"\u2ab8","\\succapprox",!0),ie(oe,he,ye,"\u22b3","\\vartriangleright"),ie(oe,he,ye,"\u22b5","\\trianglerighteq"),ie(oe,he,ye,"\u22a9","\\Vdash",!0),ie(oe,he,ye,"\u2223","\\shortmid"),ie(oe,he,ye,"\u2225","\\shortparallel"),ie(oe,he,ye,"\u226c","\\between",!0),ie(oe,he,ye,"\u22d4","\\pitchfork",!0),ie(oe,he,ye,"\u221d","\\varpropto"),ie(oe,he,ye,"\u25c0","\\blacktriangleleft"),ie(oe,he,ye,"\u2234","\\therefore",!0),ie(oe,he,ye,"\u220d","\\backepsilon"),ie(oe,he,ye,"\u25b6","\\blacktriangleright"),ie(oe,he,ye,"\u2235","\\because",!0),ie(oe,he,ye,"\u22d8","\\llless"),ie(oe,he,ye,"\u22d9","\\gggtr"),ie(oe,he,me,"\u22b2","\\lhd"),ie(oe,he,me,"\u22b3","\\rhd"),ie(oe,he,ye,"\u2242","\\eqsim",!0),ie(oe,le,ye,"\u22c8","\\Join"),ie(oe,he,ye,"\u2251","\\Doteq",!0),ie(oe,he,me,"\u2214","\\dotplus",!0),ie(oe,he,me,"\u2216","\\smallsetminus"),ie(oe,he,me,"\u22d2","\\Cap",!0),ie(oe,he,me,"\u22d3","\\Cup",!0),ie(oe,he,me,"\u2a5e","\\doublebarwedge",!0),ie(oe,he,me,"\u229f","\\boxminus",!0),ie(oe,he,me,"\u229e","\\boxplus",!0),ie(oe,he,me,"\u22c7","\\divideontimes",!0),ie(oe,he,me,"\u22c9","\\ltimes",!0),ie(oe,he,me,"\u22ca","\\rtimes",!0),ie(oe,he,me,"\u22cb","\\leftthreetimes",!0),ie(oe,he,me,"\u22cc","\\rightthreetimes",!0),ie(oe,he,me,"\u22cf","\\curlywedge",!0),ie(oe,he,me,"\u22ce","\\curlyvee",!0),ie(oe,he,me,"\u229d","\\circleddash",!0),ie(oe,he,me,"\u229b","\\circledast",!0),ie(oe,he,me,"\u22c5","\\centerdot"),ie(oe,he,me,"\u22ba","\\intercal",!0),ie(oe,he,me,"\u22d2","\\doublecap"),ie(oe,he,me,"\u22d3","\\doublecup"),ie(oe,he,me,"\u22a0","\\boxtimes",!0),ie(oe,he,ye,"\u21e2","\\dashrightarrow",!0),ie(oe,he,ye,"\u21e0","\\dashleftarrow",!0),ie(oe,he,ye,"\u21c7","\\leftleftarrows",!0),ie(oe,he,ye,"\u21c6","\\leftrightarrows",!0),ie(oe,he,ye,"\u21da","\\Lleftarrow",!0),ie(oe,he,ye,"\u219e","\\twoheadleftarrow",!0),ie(oe,he,ye,"\u21a2","\\leftarrowtail",!0),ie(oe,he,ye,"\u21ab","\\looparrowleft",!0),ie(oe,he,ye,"\u21cb","\\leftrightharpoons",!0),ie(oe,he,ye,"\u21b6","\\curvearrowleft",!0),ie(oe,he,ye,"\u21ba","\\circlearrowleft",!0),ie(oe,he,ye,"\u21b0","\\Lsh",!0),ie(oe,he,ye,"\u21c8","\\upuparrows",!0),ie(oe,he,ye,"\u21bf","\\upharpoonleft",!0),ie(oe,he,ye,"\u21c3","\\downharpoonleft",!0),ie(oe,le,ye,"\u22b6","\\origof",!0),ie(oe,le,ye,"\u22b7","\\imageof",!0),ie(oe,he,ye,"\u22b8","\\multimap",!0),ie(oe,he,ye,"\u21ad","\\leftrightsquigarrow",!0),ie(oe,he,ye,"\u21c9","\\rightrightarrows",!0),ie(oe,he,ye,"\u21c4","\\rightleftarrows",!0),ie(oe,he,ye,"\u21a0","\\twoheadrightarrow",!0),ie(oe,he,ye,"\u21a3","\\rightarrowtail",!0),ie(oe,he,ye,"\u21ac","\\looparrowright",!0),ie(oe,he,ye,"\u21b7","\\curvearrowright",!0),ie(oe,he,ye,"\u21bb","\\circlearrowright",!0),ie(oe,he,ye,"\u21b1","\\Rsh",!0),ie(oe,he,ye,"\u21ca","\\downdownarrows",!0),ie(oe,he,ye,"\u21be","\\upharpoonright",!0),ie(oe,he,ye,"\u21c2","\\downharpoonright",!0),ie(oe,he,ye,"\u21dd","\\rightsquigarrow",!0),ie(oe,he,ye,"\u21dd","\\leadsto"),ie(oe,he,ye,"\u21db","\\Rrightarrow",!0),ie(oe,he,ye,"\u21be","\\restriction"),ie(oe,le,xe,"\u2018","`"),ie(oe,le,xe,"$","\\$"),ie(se,le,xe,"$","\\$"),ie(se,le,xe,"$","\\textdollar"),ie(oe,le,xe,"%","\\%"),ie(se,le,xe,"%","\\%"),ie(oe,le,xe,"_","\\_"),ie(se,le,xe,"_","\\_"),ie(se,le,xe,"_","\\textunderscore"),ie(oe,le,xe,"\u2220","\\angle",!0),ie(oe,le,xe,"\u221e","\\infty",!0),ie(oe,le,xe,"\u2032","\\prime"),ie(oe,le,xe,"\u25b3","\\triangle"),ie(oe,le,xe,"\u0393","\\Gamma",!0),ie(oe,le,xe,"\u0394","\\Delta",!0),ie(oe,le,xe,"\u0398","\\Theta",!0),ie(oe,le,xe,"\u039b","\\Lambda",!0),ie(oe,le,xe,"\u039e","\\Xi",!0),ie(oe,le,xe,"\u03a0","\\Pi",!0),ie(oe,le,xe,"\u03a3","\\Sigma",!0),ie(oe,le,xe,"\u03a5","\\Upsilon",!0),ie(oe,le,xe,"\u03a6","\\Phi",!0),ie(oe,le,xe,"\u03a8","\\Psi",!0),ie(oe,le,xe,"\u03a9","\\Omega",!0),ie(oe,le,xe,"A","\u0391"),ie(oe,le,xe,"B","\u0392"),ie(oe,le,xe,"E","\u0395"),ie(oe,le,xe,"Z","\u0396"),ie(oe,le,xe,"H","\u0397"),ie(oe,le,xe,"I","\u0399"),ie(oe,le,xe,"K","\u039a"),ie(oe,le,xe,"M","\u039c"),ie(oe,le,xe,"N","\u039d"),ie(oe,le,xe,"O","\u039f"),ie(oe,le,xe,"P","\u03a1"),ie(oe,le,xe,"T","\u03a4"),ie(oe,le,xe,"X","\u03a7"),ie(oe,le,xe,"\xac","\\neg",!0),ie(oe,le,xe,"\xac","\\lnot"),ie(oe,le,xe,"\u22a4","\\top"),ie(oe,le,xe,"\u22a5","\\bot"),ie(oe,le,xe,"\u2205","\\emptyset"),ie(oe,he,xe,"\u2205","\\varnothing"),ie(oe,le,de,"\u03b1","\\alpha",!0),ie(oe,le,de,"\u03b2","\\beta",!0),ie(oe,le,de,"\u03b3","\\gamma",!0),ie(oe,le,de,"\u03b4","\\delta",!0),ie(oe,le,de,"\u03f5","\\epsilon",!0),ie(oe,le,de,"\u03b6","\\zeta",!0),ie(oe,le,de,"\u03b7","\\eta",!0),ie(oe,le,de,"\u03b8","\\theta",!0),ie(oe,le,de,"\u03b9","\\iota",!0),ie(oe,le,de,"\u03ba","\\kappa",!0),ie(oe,le,de,"\u03bb","\\lambda",!0),ie(oe,le,de,"\u03bc","\\mu",!0),ie(oe,le,de,"\u03bd","\\nu",!0),ie(oe,le,de,"\u03be","\\xi",!0),ie(oe,le,de,"\u03bf","\\omicron",!0),ie(oe,le,de,"\u03c0","\\pi",!0),ie(oe,le,de,"\u03c1","\\rho",!0),ie(oe,le,de,"\u03c3","\\sigma",!0),ie(oe,le,de,"\u03c4","\\tau",!0),ie(oe,le,de,"\u03c5","\\upsilon",!0),ie(oe,le,de,"\u03d5","\\phi",!0),ie(oe,le,de,"\u03c7","\\chi",!0),ie(oe,le,de,"\u03c8","\\psi",!0),ie(oe,le,de,"\u03c9","\\omega",!0),ie(oe,le,de,"\u03b5","\\varepsilon",!0),ie(oe,le,de,"\u03d1","\\vartheta",!0),ie(oe,le,de,"\u03d6","\\varpi",!0),ie(oe,le,de,"\u03f1","\\varrho",!0),ie(oe,le,de,"\u03c2","\\varsigma",!0),ie(oe,le,de,"\u03c6","\\varphi",!0),ie(oe,le,me,"\u2217","*",!0),ie(oe,le,me,"+","+"),ie(oe,le,me,"\u2212","-",!0),ie(oe,le,me,"\u22c5","\\cdot",!0),ie(oe,le,me,"\u2218","\\circ",!0),ie(oe,le,me,"\xf7","\\div",!0),ie(oe,le,me,"\xb1","\\pm",!0),ie(oe,le,me,"\xd7","\\times",!0),ie(oe,le,me,"\u2229","\\cap",!0),ie(oe,le,me,"\u222a","\\cup",!0),ie(oe,le,me,"\u2216","\\setminus",!0),ie(oe,le,me,"\u2227","\\land"),ie(oe,le,me,"\u2228","\\lor"),ie(oe,le,me,"\u2227","\\wedge",!0),ie(oe,le,me,"\u2228","\\vee",!0),ie(oe,le,xe,"\u221a","\\surd"),ie(oe,le,ge,"\u27e8","\\langle",!0),ie(oe,le,ge,"\u2223","\\lvert"),ie(oe,le,ge,"\u2225","\\lVert"),ie(oe,le,ue,"?","?"),ie(oe,le,ue,"!","!"),ie(oe,le,ue,"\u27e9","\\rangle",!0),ie(oe,le,ue,"\u2223","\\rvert"),ie(oe,le,ue,"\u2225","\\rVert"),ie(oe,le,ye,"=","="),ie(oe,le,ye,":",":"),ie(oe,le,ye,"\u2248","\\approx",!0),ie(oe,le,ye,"\u2245","\\cong",!0),ie(oe,le,ye,"\u2265","\\ge"),ie(oe,le,ye,"\u2265","\\geq",!0),ie(oe,le,ye,"\u2190","\\gets"),ie(oe,le,ye,">","\\gt",!0),ie(oe,le,ye,"\u2208","\\in",!0),ie(oe,le,ye,"\ue020","\\@not"),ie(oe,le,ye,"\u2282","\\subset",!0),ie(oe,le,ye,"\u2283","\\supset",!0),ie(oe,le,ye,"\u2286","\\subseteq",!0),ie(oe,le,ye,"\u2287","\\supseteq",!0),ie(oe,he,ye,"\u2288","\\nsubseteq",!0),ie(oe,he,ye,"\u2289","\\nsupseteq",!0),ie(oe,le,ye,"\u22a8","\\models"),ie(oe,le,ye,"\u2190","\\leftarrow",!0),ie(oe,le,ye,"\u2264","\\le"),ie(oe,le,ye,"\u2264","\\leq",!0),ie(oe,le,ye,"<","\\lt",!0),ie(oe,le,ye,"\u2192","\\rightarrow",!0),ie(oe,le,ye,"\u2192","\\to"),ie(oe,he,ye,"\u2271","\\ngeq",!0),ie(oe,he,ye,"\u2270","\\nleq",!0),ie(oe,le,be,"\xa0","\\ "),ie(oe,le,be,"\xa0","\\space"),ie(oe,le,be,"\xa0","\\nobreakspace"),ie(se,le,be,"\xa0","\\ "),ie(se,le,be,"\xa0"," "),ie(se,le,be,"\xa0","\\space"),ie(se,le,be,"\xa0","\\nobreakspace"),ie(oe,le,be,null,"\\nobreak"),ie(oe,le,be,null,"\\allowbreak"),ie(oe,le,ve,",",","),ie(oe,le,ve,";",";"),ie(oe,he,me,"\u22bc","\\barwedge",!0),ie(oe,he,me,"\u22bb","\\veebar",!0),ie(oe,le,me,"\u2299","\\odot",!0),ie(oe,le,me,"\u2295","\\oplus",!0),ie(oe,le,me,"\u2297","\\otimes",!0),ie(oe,le,xe,"\u2202","\\partial",!0),ie(oe,le,me,"\u2298","\\oslash",!0),ie(oe,he,me,"\u229a","\\circledcirc",!0),ie(oe,he,me,"\u22a1","\\boxdot",!0),ie(oe,le,me,"\u25b3","\\bigtriangleup"),ie(oe,le,me,"\u25bd","\\bigtriangledown"),ie(oe,le,me,"\u2020","\\dagger"),ie(oe,le,me,"\u22c4","\\diamond"),ie(oe,le,me,"\u22c6","\\star"),ie(oe,le,me,"\u25c3","\\triangleleft"),ie(oe,le,me,"\u25b9","\\triangleright"),ie(oe,le,ge,"{","\\{"),ie(se,le,xe,"{","\\{"),ie(se,le,xe,"{","\\textbraceleft"),ie(oe,le,ue,"}","\\}"),ie(se,le,xe,"}","\\}"),ie(se,le,xe,"}","\\textbraceright"),ie(oe,le,ge,"{","\\lbrace"),ie(oe,le,ue,"}","\\rbrace"),ie(oe,le,ge,"[","\\lbrack",!0),ie(se,le,xe,"[","\\lbrack",!0),ie(oe,le,ue,"]","\\rbrack",!0),ie(se,le,xe,"]","\\rbrack",!0),ie(oe,le,ge,"(","\\lparen",!0),ie(oe,le,ue,")","\\rparen",!0),ie(se,le,xe,"<","\\textless",!0),ie(se,le,xe,">","\\textgreater",!0),ie(oe,le,ge,"\u230a","\\lfloor",!0),ie(oe,le,ue,"\u230b","\\rfloor",!0),ie(oe,le,ge,"\u2308","\\lceil",!0),ie(oe,le,ue,"\u2309","\\rceil",!0),ie(oe,le,xe,"\\","\\backslash"),ie(oe,le,xe,"\u2223","|"),ie(oe,le,xe,"\u2223","\\vert"),ie(se,le,xe,"|","\\textbar",!0),ie(oe,le,xe,"\u2225","\\|"),ie(oe,le,xe,"\u2225","\\Vert"),ie(se,le,xe,"\u2225","\\textbardbl"),ie(se,le,xe,"~","\\textasciitilde"),ie(se,le,xe,"\\","\\textbackslash"),ie(se,le,xe,"^","\\textasciicircum"),ie(oe,le,ye,"\u2191","\\uparrow",!0),ie(oe,le,ye,"\u21d1","\\Uparrow",!0),ie(oe,le,ye,"\u2193","\\downarrow",!0),ie(oe,le,ye,"\u21d3","\\Downarrow",!0),ie(oe,le,ye,"\u2195","\\updownarrow",!0),ie(oe,le,ye,"\u21d5","\\Updownarrow",!0),ie(oe,le,fe,"\u2210","\\coprod"),ie(oe,le,fe,"\u22c1","\\bigvee"),ie(oe,le,fe,"\u22c0","\\bigwedge"),ie(oe,le,fe,"\u2a04","\\biguplus"),ie(oe,le,fe,"\u22c2","\\bigcap"),ie(oe,le,fe,"\u22c3","\\bigcup"),ie(oe,le,fe,"\u222b","\\int"),ie(oe,le,fe,"\u222b","\\intop"),ie(oe,le,fe,"\u222c","\\iint"),ie(oe,le,fe,"\u222d","\\iiint"),ie(oe,le,fe,"\u220f","\\prod"),ie(oe,le,fe,"\u2211","\\sum"),ie(oe,le,fe,"\u2a02","\\bigotimes"),ie(oe,le,fe,"\u2a01","\\bigoplus"),ie(oe,le,fe,"\u2a00","\\bigodot"),ie(oe,le,fe,"\u222e","\\oint"),ie(oe,le,fe,"\u222f","\\oiint"),ie(oe,le,fe,"\u2230","\\oiiint"),ie(oe,le,fe,"\u2a06","\\bigsqcup"),ie(oe,le,fe,"\u222b","\\smallint"),ie(se,le,pe,"\u2026","\\textellipsis"),ie(oe,le,pe,"\u2026","\\mathellipsis"),ie(se,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u2026","\\ldots",!0),ie(oe,le,pe,"\u22ef","\\@cdots",!0),ie(oe,le,pe,"\u22f1","\\ddots",!0),ie(oe,le,xe,"\u22ee","\\varvdots"),ie(oe,le,ce,"\u02ca","\\acute"),ie(oe,le,ce,"\u02cb","\\grave"),ie(oe,le,ce,"\xa8","\\ddot"),ie(oe,le,ce,"~","\\tilde"),ie(oe,le,ce,"\u02c9","\\bar"),ie(oe,le,ce,"\u02d8","\\breve"),ie(oe,le,ce,"\u02c7","\\check"),ie(oe,le,ce,"^","\\hat"),ie(oe,le,ce,"\u20d7","\\vec"),ie(oe,le,ce,"\u02d9","\\dot"),ie(oe,le,ce,"\u02da","\\mathring"),ie(oe,le,de,"\ue131","\\@imath"),ie(oe,le,de,"\ue237","\\@jmath"),ie(oe,le,xe,"\u0131","\u0131"),ie(oe,le,xe,"\u0237","\u0237"),ie(se,le,xe,"\u0131","\\i",!0),ie(se,le,xe,"\u0237","\\j",!0),ie(se,le,xe,"\xdf","\\ss",!0),ie(se,le,xe,"\xe6","\\ae",!0),ie(se,le,xe,"\u0153","\\oe",!0),ie(se,le,xe,"\xf8","\\o",!0),ie(se,le,xe,"\xc6","\\AE",!0),ie(se,le,xe,"\u0152","\\OE",!0),ie(se,le,xe,"\xd8","\\O",!0),ie(se,le,ce,"\u02ca","\\'"),ie(se,le,ce,"\u02cb","\\`"),ie(se,le,ce,"\u02c6","\\^"),ie(se,le,ce,"\u02dc","\\~"),ie(se,le,ce,"\u02c9","\\="),ie(se,le,ce,"\u02d8","\\u"),ie(se,le,ce,"\u02d9","\\."),ie(se,le,ce,"\xb8","\\c"),ie(se,le,ce,"\u02da","\\r"),ie(se,le,ce,"\u02c7","\\v"),ie(se,le,ce,"\xa8",'\\"'),ie(se,le,ce,"\u02dd","\\H"),ie(se,le,ce,"\u25ef","\\textcircled");var we={"--":!0,"---":!0,"``":!0,"''":!0};ie(se,le,xe,"\u2013","--",!0),ie(se,le,xe,"\u2013","\\textendash"),ie(se,le,xe,"\u2014","---",!0),ie(se,le,xe,"\u2014","\\textemdash"),ie(se,le,xe,"\u2018","`",!0),ie(se,le,xe,"\u2018","\\textquoteleft"),ie(se,le,xe,"\u2019","'",!0),ie(se,le,xe,"\u2019","\\textquoteright"),ie(se,le,xe,"\u201c","``",!0),ie(se,le,xe,"\u201c","\\textquotedblleft"),ie(se,le,xe,"\u201d","''",!0),ie(se,le,xe,"\u201d","\\textquotedblright"),ie(oe,le,xe,"\xb0","\\degree",!0),ie(se,le,xe,"\xb0","\\degree"),ie(se,le,xe,"\xb0","\\textdegree",!0),ie(oe,le,xe,"\xa3","\\pounds"),ie(oe,le,xe,"\xa3","\\mathsterling",!0),ie(se,le,xe,"\xa3","\\pounds"),ie(se,le,xe,"\xa3","\\textsterling",!0),ie(oe,he,xe,"\u2720","\\maltese"),ie(se,he,xe,"\u2720","\\maltese");for(var ke='0123456789/@."',Se=0;Se<ke.length;Se++){var Me=ke.charAt(Se);ie(oe,le,xe,Me,Me)}for(var ze='0123456789!@*()-=+";:?/.,',Ae=0;Ae<ze.length;Ae++){var Te=ze.charAt(Ae);ie(se,le,xe,Te,Te)}for(var Be="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Ce=0;Ce<Be.length;Ce++){var Ne=Be.charAt(Ce);ie(oe,le,de,Ne,Ne),ie(se,le,xe,Ne,Ne)}ie(oe,he,xe,"C","\u2102"),ie(se,he,xe,"C","\u2102"),ie(oe,he,xe,"H","\u210d"),ie(se,he,xe,"H","\u210d"),ie(oe,he,xe,"N","\u2115"),ie(se,he,xe,"N","\u2115"),ie(oe,he,xe,"P","\u2119"),ie(se,he,xe,"P","\u2119"),ie(oe,he,xe,"Q","\u211a"),ie(se,he,xe,"Q","\u211a"),ie(oe,he,xe,"R","\u211d"),ie(se,he,xe,"R","\u211d"),ie(oe,he,xe,"Z","\u2124"),ie(se,he,xe,"Z","\u2124"),ie(oe,le,de,"h","\u210e"),ie(se,le,de,"h","\u210e");for(var qe="",Ie=0;Ie<Be.length;Ie++){var Re=Be.charAt(Ie);ie(oe,le,de,Re,qe=String.fromCharCode(55349,56320+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56372+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56424+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56580+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56736+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56788+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56840+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56944+Ie)),ie(se,le,xe,Re,qe),Ie<26&&(ie(oe,le,de,Re,qe=String.fromCharCode(55349,56632+Ie)),ie(se,le,xe,Re,qe),ie(oe,le,de,Re,qe=String.fromCharCode(55349,56476+Ie)),ie(se,le,xe,Re,qe))}ie(oe,le,de,"k",qe=String.fromCharCode(55349,56668)),ie(se,le,xe,"k",qe);for(var He=0;He<10;He++){var Oe=He.toString();ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57294+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57314+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57324+He)),ie(se,le,xe,Oe,qe),ie(oe,le,de,Oe,qe=String.fromCharCode(55349,57334+He)),ie(se,le,xe,Oe,qe)}for(var Ee="\xd0\xde\xfe",Le=0;Le<Ee.length;Le++){var De=Ee.charAt(Le);ie(oe,le,de,De,De),ie(se,le,xe,De,De)}var Ve=[["mathbf","textbf","Main-Bold"],["mathbf","textbf","Main-Bold"],["mathnormal","textit","Math-Italic"],["mathnormal","textit","Math-Italic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["boldsymbol","boldsymbol","Main-BoldItalic"],["mathscr","textscr","Script-Regular"],["","",""],["","",""],["","",""],["mathfrak","textfrak","Fraktur-Regular"],["mathfrak","textfrak","Fraktur-Regular"],["mathbb","textbb","AMS-Regular"],["mathbb","textbb","AMS-Regular"],["","",""],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathitsf","textitsf","SansSerif-Italic"],["mathitsf","textitsf","SansSerif-Italic"],["","",""],["","",""],["mathtt","texttt","Typewriter-Regular"],["mathtt","texttt","Typewriter-Regular"]],Pe=[["mathbf","textbf","Main-Bold"],["","",""],["mathsf","textsf","SansSerif-Regular"],["mathboldsf","textboldsf","SansSerif-Bold"],["mathtt","texttt","Typewriter-Regular"]],Fe=function(e,t,r){return ae[r][e]&&ae[r][e].replace&&(e=ae[r][e].replace),{value:e,metrics:N(e,t,r)}},Ge=function(e,t,r,n,a){var i,o=Fe(e,t,r),s=o.metrics;if(e=o.value,s){var l=s.italic;("text"===r||n&&"mathit"===n.font)&&(l=0),i=new Z(e,s.height,s.depth,l,s.skew,s.width,a)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+e+"' in style '"+t+"' and mode '"+r+"'"),i=new Z(e,0,0,0,0,0,a);if(n){i.maxFontSize=n.sizeMultiplier,n.style.isTight()&&i.classes.push("mtight");var h=n.getColor();h&&(i.style.color=h)}return i},Ue=function(e,t){if(G(e.classes)!==G(t.classes)||e.skew!==t.skew||e.maxFontSize!==t.maxFontSize)return!1;if(1===e.classes.length){var r=e.classes[0];if("mbin"===r||"mord"===r)return!1}for(var n in e.style)if(e.style.hasOwnProperty(n)&&e.style[n]!==t.style[n])return!1;for(var a in t.style)if(t.style.hasOwnProperty(a)&&e.style[a]!==t.style[a])return!1;return!0},Ye=function(e){for(var t=0,r=0,n=0,a=0;a<e.children.length;a++){var i=e.children[a];i.height>t&&(t=i.height),i.depth>r&&(r=i.depth),i.maxFontSize>n&&(n=i.maxFontSize)}e.height=t,e.depth=r,e.maxFontSize=n},Xe=function(e,t,r,n){var a=new W(e,t,r,n);return Ye(a),a},We=function(e,t,r,n){return new W(e,t,r,n)},_e=function(e){var t=new A(e);return Ye(t),t},je=function(e,t,r){var n="";switch(e){case"amsrm":n="AMS";break;case"textrm":n="Main";break;case"textsf":n="SansSerif";break;case"texttt":n="Typewriter";break;default:n=e}return n+"-"+("textbf"===t&&"textit"===r?"BoldItalic":"textbf"===t?"Bold":"textit"===t?"Italic":"Regular")},$e={mathbf:{variant:"bold",fontName:"Main-Bold"},mathrm:{variant:"normal",fontName:"Main-Regular"},textit:{variant:"italic",fontName:"Main-Italic"},mathit:{variant:"italic",fontName:"Main-Italic"},mathnormal:{variant:"italic",fontName:"Math-Italic"},mathbb:{variant:"double-struck",fontName:"AMS-Regular"},mathcal:{variant:"script",fontName:"Caligraphic-Regular"},mathfrak:{variant:"fraktur",fontName:"Fraktur-Regular"},mathscr:{variant:"script",fontName:"Script-Regular"},mathsf:{variant:"sans-serif",fontName:"SansSerif-Regular"},mathtt:{variant:"monospace",fontName:"Typewriter-Regular"}},Ze={vec:["vec",.471,.714],oiintSize1:["oiintSize1",.957,.499],oiintSize2:["oiintSize2",1.472,.659],oiiintSize1:["oiiintSize1",1.304,.499],oiiintSize2:["oiiintSize2",1.98,.659]},Ke={fontMap:$e,makeSymbol:Ge,mathsym:function(e,t,r,n){return void 0===n&&(n=[]),"boldsymbol"===r.font&&Fe(e,"Main-Bold",t).metrics?Ge(e,"Main-Bold",t,r,n.concat(["mathbf"])):"\\"===e||"main"===ae[t][e].font?Ge(e,"Main-Regular",t,r,n):Ge(e,"AMS-Regular",t,r,n.concat(["amsrm"]))},makeSpan:Xe,makeSvgSpan:We,makeLineSpan:function(e,t,r){var n=Xe([e],[],t);return n.height=Math.max(r||t.fontMetrics().defaultRuleThickness,t.minRuleThickness),n.style.borderBottomWidth=F(n.height),n.maxFontSize=1,n},makeAnchor:function(e,t,r,n){var a=new _(e,t,r,n);return Ye(a),a},makeFragment:_e,wrapFragment:function(e,t){return e instanceof A?Xe([],[e],t):e},makeVList:function(e,t){for(var r=function(e){if("individualShift"===e.positionType){for(var t=e.children,r=[t[0]],n=-t[0].shift-t[0].elem.depth,a=n,i=1;i<t.length;i++){var o=-t[i].shift-a-t[i].elem.depth,s=o-(t[i-1].elem.height+t[i-1].elem.depth);a+=o,r.push({type:"kern",size:s}),r.push(t[i])}return{children:r,depth:n}}var l;if("top"===e.positionType){for(var h=e.positionData,c=0;c<e.children.length;c++){var m=e.children[c];h-="kern"===m.type?m.size:m.elem.height+m.elem.depth}l=h}else if("bottom"===e.positionType)l=-e.positionData;else{var u=e.children[0];if("elem"!==u.type)throw new Error('First child must have type "elem".');if("shift"===e.positionType)l=-u.elem.depth-e.positionData;else{if("firstBaseline"!==e.positionType)throw new Error("Invalid positionType "+e.positionType+".");l=-u.elem.depth}}return{children:e.children,depth:l}}(e),n=r.children,a=r.depth,i=0,o=0;o<n.length;o++){var s=n[o];if("elem"===s.type){var l=s.elem;i=Math.max(i,l.maxFontSize,l.height)}}i+=2;var h=Xe(["pstrut"],[]);h.style.height=F(i);for(var c=[],m=a,u=a,p=a,d=0;d<n.length;d++){var f=n[d];if("kern"===f.type)p+=f.size;else{var g=f.elem,v=f.wrapperClasses||[],y=f.wrapperStyle||{},b=Xe(v,[h,g],void 0,y);b.style.top=F(-i-p-g.depth),f.marginLeft&&(b.style.marginLeft=f.marginLeft),f.marginRight&&(b.style.marginRight=f.marginRight),c.push(b),p+=g.height+g.depth}m=Math.min(m,p),u=Math.max(u,p)}var x,w=Xe(["vlist"],c);if(w.style.height=F(u),m<0){var k=Xe([],[]),S=Xe(["vlist"],[k]);S.style.height=F(-m);var M=Xe(["vlist-s"],[new Z("\u200b")]);x=[Xe(["vlist-r"],[w,M]),Xe(["vlist-r"],[S])]}else x=[Xe(["vlist-r"],[w])];var z=Xe(["vlist-t"],x);return 2===x.length&&z.classes.push("vlist-t2"),z.height=u,z.depth=-m,z},makeOrd:function(e,t,r){var a=e.mode,i=e.text,o=["mord"],s="math"===a||"text"===a&&t.font,l=s?t.font:t.fontFamily;if(55349===i.charCodeAt(0)){var h=function(e,t){var r=1024*(e.charCodeAt(0)-55296)+(e.charCodeAt(1)-56320)+65536,a="math"===t?0:1;if(119808<=r&&r<120484){var i=Math.floor((r-119808)/26);return[Ve[i][2],Ve[i][a]]}if(120782<=r&&r<=120831){var o=Math.floor((r-120782)/10);return[Pe[o][2],Pe[o][a]]}if(120485===r||120486===r)return[Ve[0][2],Ve[0][a]];if(120486<r&&r<120782)return["",""];throw new n("Unsupported character: "+e)}(i,a),c=h[0],m=h[1];return Ge(i,c,a,t,o.concat(m))}if(l){var u,p;if("boldsymbol"===l){var d=function(e,t,r,n,a){return"textord"!==a&&Fe(e,"Math-BoldItalic",t).metrics?{fontName:"Math-BoldItalic",fontClass:"boldsymbol"}:{fontName:"Main-Bold",fontClass:"mathbf"}}(i,a,0,0,r);u=d.fontName,p=[d.fontClass]}else s?(u=$e[l].fontName,p=[l]):(u=je(l,t.fontWeight,t.fontShape),p=[l,t.fontWeight,t.fontShape]);if(Fe(i,u,a).metrics)return Ge(i,u,a,t,o.concat(p));if(we.hasOwnProperty(i)&&"Typewriter"===u.slice(0,10)){for(var f=[],g=0;g<i.length;g++)f.push(Ge(i[g],u,a,t,o.concat(p)));return _e(f)}}if("mathord"===r)return Ge(i,"Math-Italic",a,t,o.concat(["mathnormal"]));if("textord"===r){var v=ae[a][i]&&ae[a][i].font;if("ams"===v){var y=je("amsrm",t.fontWeight,t.fontShape);return Ge(i,y,a,t,o.concat("amsrm",t.fontWeight,t.fontShape))}if("main"!==v&&v){var b=je(v,t.fontWeight,t.fontShape);return Ge(i,b,a,t,o.concat(b,t.fontWeight,t.fontShape))}var x=je("textrm",t.fontWeight,t.fontShape);return Ge(i,x,a,t,o.concat(t.fontWeight,t.fontShape))}throw new Error("unexpected type: "+r+" in makeOrd")},makeGlue:function(e,t){var r=Xe(["mspace"],[],t),n=P(e,t);return r.style.marginRight=F(n),r},staticSvg:function(e,t){var r=Ze[e],n=r[0],a=r[1],i=r[2],o=new J(n),s=new K([o],{width:F(a),height:F(i),style:"width:"+F(a),viewBox:"0 0 "+1e3*a+" "+1e3*i,preserveAspectRatio:"xMinYMin"}),l=We(["overlay"],[s],t);return l.height=i,l.style.height=F(i),l.style.width=F(a),l},svgData:Ze,tryCombineChars:function(e){for(var t=0;t<e.length-1;t++){var r=e[t],n=e[t+1];r instanceof Z&&n instanceof Z&&Ue(r,n)&&(r.text+=n.text,r.height=Math.max(r.height,n.height),r.depth=Math.max(r.depth,n.depth),r.italic=n.italic,e.splice(t+1,1),t--)}return e}},Je={number:3,unit:"mu"},Qe={number:4,unit:"mu"},et={number:5,unit:"mu"},tt={mord:{mop:Je,mbin:Qe,mrel:et,minner:Je},mop:{mord:Je,mop:Je,mrel:et,minner:Je},mbin:{mord:Qe,mop:Qe,mopen:Qe,minner:Qe},mrel:{mord:et,mop:et,mopen:et,minner:et},mopen:{},mclose:{mop:Je,mbin:Qe,mrel:et,minner:Je},mpunct:{mord:Je,mop:Je,mrel:et,mopen:Je,mclose:Je,mpunct:Je,minner:Je},minner:{mord:Je,mop:Je,mbin:Qe,mrel:et,mopen:Je,mpunct:Je,minner:Je}},rt={mord:{mop:Je},mop:{mord:Je,mop:Je},mbin:{},mrel:{},mopen:{},mclose:{mop:Je},mpunct:{},minner:{mop:Je}},nt={},at={},it={};function ot(e){for(var t=e.type,r=e.names,n=e.props,a=e.handler,i=e.htmlBuilder,o=e.mathmlBuilder,s={type:t,numArgs:n.numArgs,argTypes:n.argTypes,allowedInArgument:!!n.allowedInArgument,allowedInText:!!n.allowedInText,allowedInMath:void 0===n.allowedInMath||n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,primitive:!!n.primitive,handler:a},l=0;l<r.length;++l)nt[r[l]]=s;t&&(i&&(at[t]=i),o&&(it[t]=o))}function st(e){ot({type:e.type,names:[],props:{numArgs:0},handler:function(){throw new Error("Should never be called.")},htmlBuilder:e.htmlBuilder,mathmlBuilder:e.mathmlBuilder})}var lt=function(e){return"ordgroup"===e.type&&1===e.body.length?e.body[0]:e},ht=function(e){return"ordgroup"===e.type?e.body:[e]},ct=Ke.makeSpan,mt=["leftmost","mbin","mopen","mrel","mop","mpunct"],ut=["rightmost","mrel","mclose","mpunct"],pt={display:x.DISPLAY,text:x.TEXT,script:x.SCRIPT,scriptscript:x.SCRIPTSCRIPT},dt={mord:"mord",mop:"mop",mbin:"mbin",mrel:"mrel",mopen:"mopen",mclose:"mclose",mpunct:"mpunct",minner:"minner"},ft=function(e,t,r,n){void 0===n&&(n=[null,null]);for(var a=[],i=0;i<e.length;i++){var o=wt(e[i],t);if(o instanceof A){var s=o.children;a.push.apply(a,s)}else a.push(o)}if(Ke.tryCombineChars(a),!r)return a;var h=t;if(1===e.length){var c=e[0];"sizing"===c.type?h=t.havingSize(c.size):"styling"===c.type&&(h=t.havingStyle(pt[c.style]))}var m=ct([n[0]||"leftmost"],[],t),u=ct([n[1]||"rightmost"],[],t),p="root"===r;return gt(a,(function(e,t){var r=t.classes[0],n=e.classes[0];"mbin"===r&&l.contains(ut,n)?t.classes[0]="mord":"mbin"===n&&l.contains(mt,r)&&(e.classes[0]="mord")}),{node:m},u,p),gt(a,(function(e,t){var r=bt(t),n=bt(e),a=r&&n?e.hasClass("mtight")?rt[r][n]:tt[r][n]:null;if(a)return Ke.makeGlue(a,h)}),{node:m},u,p),a},gt=function e(t,r,n,a,i){a&&t.push(a);for(var o=0;o<t.length;o++){var s=t[o],l=vt(s);if(l)e(l.children,r,n,null,i);else{var h=!s.hasClass("mspace");if(h){var c=r(s,n.node);c&&(n.insertAfter?n.insertAfter(c):(t.unshift(c),o++))}h?n.node=s:i&&s.hasClass("newline")&&(n.node=ct(["leftmost"])),n.insertAfter=function(e){return function(r){t.splice(e+1,0,r),o++}}(o)}}a&&t.pop()},vt=function(e){return e instanceof A||e instanceof _||e instanceof W&&e.hasClass("enclosing")?e:null},yt=function e(t,r){var n=vt(t);if(n){var a=n.children;if(a.length){if("right"===r)return e(a[a.length-1],"right");if("left"===r)return e(a[0],"left")}}return t},bt=function(e,t){return e?(t&&(e=yt(e,t)),dt[e.classes[0]]||null):null},xt=function(e,t){var r=["nulldelimiter"].concat(e.baseSizingClasses());return ct(t.concat(r))},wt=function(e,t,r){if(!e)return ct();if(at[e.type]){var a=at[e.type](e,t);if(r&&t.size!==r.size){a=ct(t.sizingClasses(r),[a],t);var i=t.sizeMultiplier/r.sizeMultiplier;a.height*=i,a.depth*=i}return a}throw new n("Got group of unknown type: '"+e.type+"'")};function kt(e,t){var r=ct(["base"],e,t),n=ct(["strut"]);return n.style.height=F(r.height+r.depth),r.depth&&(n.style.verticalAlign=F(-r.depth)),r.children.unshift(n),r}function St(e,t){var r=null;1===e.length&&"tag"===e[0].type&&(r=e[0].tag,e=e[0].body);var n,a=ft(e,t,"root");2===a.length&&a[1].hasClass("tag")&&(n=a.pop());for(var i,o=[],s=[],l=0;l<a.length;l++)if(s.push(a[l]),a[l].hasClass("mbin")||a[l].hasClass("mrel")||a[l].hasClass("allowbreak")){for(var h=!1;l<a.length-1&&a[l+1].hasClass("mspace")&&!a[l+1].hasClass("newline");)l++,s.push(a[l]),a[l].hasClass("nobreak")&&(h=!0);h||(o.push(kt(s,t)),s=[])}else a[l].hasClass("newline")&&(s.pop(),s.length>0&&(o.push(kt(s,t)),s=[]),o.push(a[l]));s.length>0&&o.push(kt(s,t)),r?((i=kt(ft(r,t,!0))).classes=["tag"],o.push(i)):n&&o.push(n);var c=ct(["katex-html"],o);if(c.setAttribute("aria-hidden","true"),i){var m=i.children[0];m.style.height=F(c.height+c.depth),c.depth&&(m.style.verticalAlign=F(-c.depth))}return c}function Mt(e){return new A(e)}var zt=function(){function e(e,t,r){this.type=void 0,this.attributes=void 0,this.children=void 0,this.classes=void 0,this.type=e,this.attributes={},this.children=t||[],this.classes=r||[]}var t=e.prototype;return t.setAttribute=function(e,t){this.attributes[e]=t},t.getAttribute=function(e){return this.attributes[e]},t.toNode=function(){var e=document.createElementNS("http://www.w3.org/1998/Math/MathML",this.type);for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&e.setAttribute(t,this.attributes[t]);this.classes.length>0&&(e.className=G(this.classes));for(var r=0;r<this.children.length;r++)e.appendChild(this.children[r].toNode());return e},t.toMarkup=function(){var e="<"+this.type;for(var t in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,t)&&(e+=" "+t+'="',e+=l.escape(this.attributes[t]),e+='"');this.classes.length>0&&(e+=' class ="'+l.escape(G(this.classes))+'"'),e+=">";for(var r=0;r<this.children.length;r++)e+=this.children[r].toMarkup();return e+="</"+this.type+">"},t.toText=function(){return this.children.map((function(e){return e.toText()})).join("")},e}(),At=function(){function e(e){this.text=void 0,this.text=e}var t=e.prototype;return t.toNode=function(){return document.createTextNode(this.text)},t.toMarkup=function(){return l.escape(this.toText())},t.toText=function(){return this.text},e}(),Tt={MathNode:zt,TextNode:At,SpaceNode:function(){function e(e){this.width=void 0,this.character=void 0,this.width=e,this.character=e>=.05555&&e<=.05556?"\u200a":e>=.1666&&e<=.1667?"\u2009":e>=.2222&&e<=.2223?"\u2005":e>=.2777&&e<=.2778?"\u2005\u200a":e>=-.05556&&e<=-.05555?"\u200a\u2063":e>=-.1667&&e<=-.1666?"\u2009\u2063":e>=-.2223&&e<=-.2222?"\u205f\u2063":e>=-.2778&&e<=-.2777?"\u2005\u2063":null}var t=e.prototype;return t.toNode=function(){if(this.character)return document.createTextNode(this.character);var e=document.createElementNS("http://www.w3.org/1998/Math/MathML","mspace");return e.setAttribute("width",F(this.width)),e},t.toMarkup=function(){return this.character?"<mtext>"+this.character+"</mtext>":'<mspace width="'+F(this.width)+'"/>'},t.toText=function(){return this.character?this.character:" "},e}(),newDocumentFragment:Mt},Bt=function(e,t,r){return!ae[t][e]||!ae[t][e].replace||55349===e.charCodeAt(0)||we.hasOwnProperty(e)&&r&&(r.fontFamily&&"tt"===r.fontFamily.slice(4,6)||r.font&&"tt"===r.font.slice(4,6))||(e=ae[t][e].replace),new Tt.TextNode(e)},Ct=function(e){return 1===e.length?e[0]:new Tt.MathNode("mrow",e)},Nt=function(e,t){if("texttt"===t.fontFamily)return"monospace";if("textsf"===t.fontFamily)return"textit"===t.fontShape&&"textbf"===t.fontWeight?"sans-serif-bold-italic":"textit"===t.fontShape?"sans-serif-italic":"textbf"===t.fontWeight?"bold-sans-serif":"sans-serif";if("textit"===t.fontShape&&"textbf"===t.fontWeight)return"bold-italic";if("textit"===t.fontShape)return"italic";if("textbf"===t.fontWeight)return"bold";var r=t.font;if(!r||"mathnormal"===r)return null;var n=e.mode;if("mathit"===r)return"italic";if("boldsymbol"===r)return"textord"===e.type?"bold":"bold-italic";if("mathbf"===r)return"bold";if("mathbb"===r)return"double-struck";if("mathfrak"===r)return"fraktur";if("mathscr"===r||"mathcal"===r)return"script";if("mathsf"===r)return"sans-serif";if("mathtt"===r)return"monospace";var a=e.text;return l.contains(["\\imath","\\jmath"],a)?null:(ae[n][a]&&ae[n][a].replace&&(a=ae[n][a].replace),N(a,Ke.fontMap[r].fontName,n)?Ke.fontMap[r].variant:null)},qt=function(e,t,r){if(1===e.length){var n=Rt(e[0],t);return r&&n instanceof zt&&"mo"===n.type&&(n.setAttribute("lspace","0em"),n.setAttribute("rspace","0em")),[n]}for(var a,i=[],o=0;o<e.length;o++){var s=Rt(e[o],t);if(s instanceof zt&&a instanceof zt){if("mtext"===s.type&&"mtext"===a.type&&s.getAttribute("mathvariant")===a.getAttribute("mathvariant")){var l;(l=a.children).push.apply(l,s.children);continue}if("mn"===s.type&&"mn"===a.type){var h;(h=a.children).push.apply(h,s.children);continue}if("mi"===s.type&&1===s.children.length&&"mn"===a.type){var c=s.children[0];if(c instanceof At&&"."===c.text){var m;(m=a.children).push.apply(m,s.children);continue}}else if("mi"===a.type&&1===a.children.length){var u=a.children[0];if(u instanceof At&&"\u0338"===u.text&&("mo"===s.type||"mi"===s.type||"mn"===s.type)){var p=s.children[0];p instanceof At&&p.text.length>0&&(p.text=p.text.slice(0,1)+"\u0338"+p.text.slice(1),i.pop())}}}i.push(s),a=s}return i},It=function(e,t,r){return Ct(qt(e,t,r))},Rt=function(e,t){if(!e)return new Tt.MathNode("mrow");if(it[e.type])return it[e.type](e,t);throw new n("Got group of unknown type: '"+e.type+"'")};function Ht(e,t,r,n,a){var i,o=qt(e,r);i=1===o.length&&o[0]instanceof zt&&l.contains(["mrow","mtable"],o[0].type)?o[0]:new Tt.MathNode("mrow",o);var s=new Tt.MathNode("annotation",[new Tt.TextNode(t)]);s.setAttribute("encoding","application/x-tex");var h=new Tt.MathNode("semantics",[i,s]),c=new Tt.MathNode("math",[h]);c.setAttribute("xmlns","http://www.w3.org/1998/Math/MathML"),n&&c.setAttribute("display","block");var m=a?"katex":"katex-mathml";return Ke.makeSpan([m],[c])}var Ot=function(e){return new E({style:e.displayMode?x.DISPLAY:x.TEXT,maxSize:e.maxSize,minRuleThickness:e.minRuleThickness})},Et=function(e,t){if(t.displayMode){var r=["katex-display"];t.leqno&&r.push("leqno"),t.fleqn&&r.push("fleqn"),e=Ke.makeSpan(r,[e])}return e},Lt=function(e,t,r){var n,a=Ot(r);if("mathml"===r.output)return Ht(e,t,a,r.displayMode,!0);if("html"===r.output){var i=St(e,a);n=Ke.makeSpan(["katex"],[i])}else{var o=Ht(e,t,a,r.displayMode,!1),s=St(e,a);n=Ke.makeSpan(["katex"],[o,s])}return Et(n,r)},Dt={widehat:"^",widecheck:"\u02c7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23df",overbrace:"\u23de",overgroup:"\u23e0",undergroup:"\u23e1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xlongequal:"=",xtofrom:"\u21c4",xrightleftarrows:"\u21c4",xrightequilibrium:"\u21cc",xleftequilibrium:"\u21cb","\\cdrightarrow":"\u2192","\\cdleftarrow":"\u2190","\\cdlongequal":"="},Vt={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],"\\cdrightarrow":[["rightarrow"],3,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],"\\cdleftarrow":[["leftarrow"],3,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],"\\cdlongequal":[["longequal"],3,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xrightleftarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xrightequilibrium:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xleftequilibrium:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},Pt=function(e,t,r,n,a){var i,o=e.height+e.depth+r+n;if(/fbox|color|angl/.test(t)){if(i=Ke.makeSpan(["stretchy",t],[],a),"fbox"===t){var s=a.color&&a.getColor();s&&(i.style.borderColor=s)}}else{var l=[];/^[bx]cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"0",x2:"100%",y2:"100%","stroke-width":"0.046em"})),/^x?cancel$/.test(t)&&l.push(new Q({x1:"0",y1:"100%",x2:"100%",y2:"0","stroke-width":"0.046em"}));var h=new K(l,{width:"100%",height:F(o)});i=Ke.makeSvgSpan([],[h],a)}return i.height=o,i.style.height=F(o),i},Ft=function(e){var t=new Tt.MathNode("mo",[new Tt.TextNode(Dt[e.replace(/^\\/,"")])]);return t.setAttribute("stretchy","true"),t},Gt=function(e,t){var r=function(){var r=4e5,n=e.label.slice(1);if(l.contains(["widehat","widecheck","widetilde","utilde"],n)){var a,i,o,s="ordgroup"===(d=e.base).type?d.body.length:1;if(s>5)"widehat"===n||"widecheck"===n?(a=420,r=2364,o=.42,i=n+"4"):(a=312,r=2340,o=.34,i="tilde4");else{var h=[1,1,2,2,3,3][s];"widehat"===n||"widecheck"===n?(r=[0,1062,2364,2364,2364][h],a=[0,239,300,360,420][h],o=[0,.24,.3,.3,.36,.42][h],i=n+h):(r=[0,600,1033,2339,2340][h],a=[0,260,286,306,312][h],o=[0,.26,.286,.3,.306,.34][h],i="tilde"+h)}var c=new J(i),m=new K([c],{width:"100%",height:F(o),viewBox:"0 0 "+r+" "+a,preserveAspectRatio:"none"});return{span:Ke.makeSvgSpan([],[m],t),minWidth:0,height:o}}var u,p,d,f=[],g=Vt[n],v=g[0],y=g[1],b=g[2],x=b/1e3,w=v.length;if(1===w)u=["hide-tail"],p=[g[3]];else if(2===w)u=["halfarrow-left","halfarrow-right"],p=["xMinYMin","xMaxYMin"];else{if(3!==w)throw new Error("Correct katexImagesData or update code here to support\n                    "+w+" children.");u=["brace-left","brace-center","brace-right"],p=["xMinYMin","xMidYMin","xMaxYMin"]}for(var k=0;k<w;k++){var S=new J(v[k]),M=new K([S],{width:"400em",height:F(x),viewBox:"0 0 "+r+" "+b,preserveAspectRatio:p[k]+" slice"}),z=Ke.makeSvgSpan([u[k]],[M],t);if(1===w)return{span:z,minWidth:y,height:x};z.style.height=F(x),f.push(z)}return{span:Ke.makeSpan(["stretchy"],f,t),minWidth:y,height:x}}(),n=r.span,a=r.minWidth,i=r.height;return n.height=i,n.style.height=F(i),a>0&&(n.style.minWidth=F(a)),n};function Ut(e,t){if(!e||e.type!==t)throw new Error("Expected node of type "+t+", but got "+(e?"node of type "+e.type:String(e)));return e}function Yt(e){var t=Xt(e);if(!t)throw new Error("Expected node of symbol group type, but got "+(e?"node of type "+e.type:String(e)));return t}function Xt(e){return e&&("atom"===e.type||re.hasOwnProperty(e.type))?e:null}var Wt=function(e,t){var r,n,a;e&&"supsub"===e.type?(r=(n=Ut(e.base,"accent")).base,e.base=r,a=function(e){if(e instanceof W)return e;throw new Error("Expected span<HtmlDomNode> but got "+String(e)+".")}(wt(e,t)),e.base=n):r=(n=Ut(e,"accent")).base;var i=wt(r,t.havingCrampedStyle()),o=0;if(n.isShifty&&l.isCharacterBox(r)){var s=l.getBaseElem(r);o=ee(wt(s,t.havingCrampedStyle())).skew}var h,c="\\c"===n.label,m=c?i.height+i.depth:Math.min(i.height,t.fontMetrics().xHeight);if(n.isStretchy)h=Gt(n,t),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"elem",elem:h,wrapperClasses:["svg-align"],wrapperStyle:o>0?{width:"calc(100% - "+F(2*o)+")",marginLeft:F(2*o)}:void 0}]},t);else{var u,p;"\\vec"===n.label?(u=Ke.staticSvg("vec",t),p=Ke.svgData.vec[1]):((u=ee(u=Ke.makeOrd({mode:n.mode,text:n.label},t,"textord"))).italic=0,p=u.width,c&&(m+=u.depth)),h=Ke.makeSpan(["accent-body"],[u]);var d="\\textcircled"===n.label;d&&(h.classes.push("accent-full"),m=i.height);var f=o;d||(f-=p/2),h.style.left=F(f),"\\textcircled"===n.label&&(h.style.top=".2em"),h=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:i},{type:"kern",size:-m},{type:"elem",elem:h}]},t)}var g=Ke.makeSpan(["mord","accent"],[h],t);return a?(a.children[0]=g,a.height=Math.max(g.height,a.height),a.classes[0]="mord",a):g},_t=function(e,t){var r=e.isStretchy?Ft(e.label):new Tt.MathNode("mo",[Bt(e.label,e.mode)]),n=new Tt.MathNode("mover",[Rt(e.base,t),r]);return n.setAttribute("accent","true"),n},jt=new RegExp(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring"].map((function(e){return"\\"+e})).join("|"));ot({type:"accent",names:["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\mathring","\\widecheck","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],props:{numArgs:1},handler:function(e,t){var r=lt(t[0]),n=!jt.test(e.funcName),a=!n||"\\widehat"===e.funcName||"\\widetilde"===e.funcName||"\\widecheck"===e.funcName;return{type:"accent",mode:e.parser.mode,label:e.funcName,isStretchy:n,isShifty:a,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accent",names:["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\c","\\r","\\H","\\v","\\textcircled"],props:{numArgs:1,allowedInText:!0,allowedInMath:!0,argTypes:["primitive"]},handler:function(e,t){var r=t[0],n=e.parser.mode;return"math"===n&&(e.parser.settings.reportNonstrict("mathVsTextAccents","LaTeX's accent "+e.funcName+" works only in text mode"),n="text"),{type:"accent",mode:n,label:e.funcName,isStretchy:!1,isShifty:!0,base:r}},htmlBuilder:Wt,mathmlBuilder:_t}),ot({type:"accentUnder",names:["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\utilde"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"accentUnder",mode:r.mode,label:n,base:a}},htmlBuilder:function(e,t){var r=wt(e.base,t),n=Gt(e,t),a="\\utilde"===e.label?.12:0,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"elem",elem:n,wrapperClasses:["svg-align"]},{type:"kern",size:a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","accentunder"],[i],t)},mathmlBuilder:function(e,t){var r=Ft(e.label),n=new Tt.MathNode("munder",[Rt(e.base,t),r]);return n.setAttribute("accentunder","true"),n}});var $t=function(e){var t=new Tt.MathNode("mpadded",e?[e]:[]);return t.setAttribute("width","+0.6em"),t.setAttribute("lspace","0.3em"),t};ot({type:"xArrow",names:["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xlongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xtofrom","\\xrightleftarrows","\\xrightequilibrium","\\xleftequilibrium","\\\\cdrightarrow","\\\\cdleftarrow","\\\\cdlongequal"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var n=e.parser,a=e.funcName;return{type:"xArrow",mode:n.mode,label:a,body:t[0],below:r[0]}},htmlBuilder:function(e,t){var r,n=t.style,a=t.havingStyle(n.sup()),i=Ke.wrapFragment(wt(e.body,a,t),t),o="\\x"===e.label.slice(0,2)?"x":"cd";i.classes.push(o+"-arrow-pad"),e.below&&(a=t.havingStyle(n.sub()),(r=Ke.wrapFragment(wt(e.below,a,t),t)).classes.push(o+"-arrow-pad"));var s,l=Gt(e,t),h=-t.fontMetrics().axisHeight+.5*l.height,c=-t.fontMetrics().axisHeight-.5*l.height-.111;if((i.depth>.25||"\\xleftequilibrium"===e.label)&&(c-=i.depth),r){var m=-t.fontMetrics().axisHeight+r.height+.5*l.height+.111;s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:c},{type:"elem",elem:l,shift:h},{type:"elem",elem:r,shift:m}]},t)}else s=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:c},{type:"elem",elem:l,shift:h}]},t);return s.children[0].children[0].children[1].classes.push("svg-align"),Ke.makeSpan(["mrel","x-arrow"],[s],t)},mathmlBuilder:function(e,t){var r,n=Ft(e.label);if(n.setAttribute("minsize","x"===e.label.charAt(0)?"1.75em":"3.0em"),e.body){var a=$t(Rt(e.body,t));if(e.below){var i=$t(Rt(e.below,t));r=new Tt.MathNode("munderover",[n,i,a])}else r=new Tt.MathNode("mover",[n,a])}else if(e.below){var o=$t(Rt(e.below,t));r=new Tt.MathNode("munder",[n,o])}else r=$t(),r=new Tt.MathNode("mover",[n,r]);return r}});var Zt=Ke.makeSpan;function Kt(e,t){var r=ft(e.body,t,!0);return Zt([e.mclass],r,t)}function Jt(e,t){var r,n=qt(e.body,t);return"minner"===e.mclass?r=new Tt.MathNode("mpadded",n):"mord"===e.mclass?e.isCharacterBox?(r=n[0]).type="mi":r=new Tt.MathNode("mi",n):(e.isCharacterBox?(r=n[0]).type="mo":r=new Tt.MathNode("mo",n),"mbin"===e.mclass?(r.attributes.lspace="0.22em",r.attributes.rspace="0.22em"):"mpunct"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0.17em"):"mopen"===e.mclass||"mclose"===e.mclass?(r.attributes.lspace="0em",r.attributes.rspace="0em"):"minner"===e.mclass&&(r.attributes.lspace="0.0556em",r.attributes.width="+0.1111em")),r}ot({type:"mclass",names:["\\mathord","\\mathbin","\\mathrel","\\mathopen","\\mathclose","\\mathpunct","\\mathinner"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"mclass",mode:r.mode,mclass:"m"+n.slice(5),body:ht(a),isCharacterBox:l.isCharacterBox(a)}},htmlBuilder:Kt,mathmlBuilder:Jt});var Qt=function(e){var t="ordgroup"===e.type&&e.body.length?e.body[0]:e;return"atom"!==t.type||"bin"!==t.family&&"rel"!==t.family?"mord":"m"+t.family};ot({type:"mclass",names:["\\@binrel"],props:{numArgs:2},handler:function(e,t){return{type:"mclass",mode:e.parser.mode,mclass:Qt(t[0]),body:ht(t[1]),isCharacterBox:l.isCharacterBox(t[1])}}}),ot({type:"mclass",names:["\\stackrel","\\overset","\\underset"],props:{numArgs:2},handler:function(e,t){var r,n=e.parser,a=e.funcName,i=t[1],o=t[0];r="\\stackrel"!==a?Qt(i):"mrel";var s={type:"op",mode:i.mode,limits:!0,alwaysHandleSupSub:!0,parentIsSupSub:!1,symbol:!1,suppressBaseShift:"\\stackrel"!==a,body:ht(i)},h={type:"supsub",mode:o.mode,base:s,sup:"\\underset"===a?null:o,sub:"\\underset"===a?o:null};return{type:"mclass",mode:n.mode,mclass:r,body:[h],isCharacterBox:l.isCharacterBox(h)}},htmlBuilder:Kt,mathmlBuilder:Jt}),ot({type:"pmb",names:["\\pmb"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"pmb",mode:e.parser.mode,mclass:Qt(t[0]),body:ht(t[0])}},htmlBuilder:function(e,t){var r=ft(e.body,t,!0),n=Ke.makeSpan([e.mclass],r,t);return n.style.textShadow="0.02em 0.01em 0.04px",n},mathmlBuilder:function(e,t){var r=qt(e.body,t),n=new Tt.MathNode("mstyle",r);return n.setAttribute("style","text-shadow: 0.02em 0.01em 0.04px"),n}});var er={">":"\\\\cdrightarrow","<":"\\\\cdleftarrow","=":"\\\\cdlongequal",A:"\\uparrow",V:"\\downarrow","|":"\\Vert",".":"no arrow"},tr=function(e){return"textord"===e.type&&"@"===e.text};function rr(e,t,r){var n=er[e];switch(n){case"\\\\cdrightarrow":case"\\\\cdleftarrow":return r.callFunction(n,[t[0]],[t[1]]);case"\\uparrow":case"\\downarrow":var a={type:"atom",text:n,mode:"math",family:"rel"},i={type:"ordgroup",mode:"math",body:[r.callFunction("\\\\cdleft",[t[0]],[]),r.callFunction("\\Big",[a],[]),r.callFunction("\\\\cdright",[t[1]],[])]};return r.callFunction("\\\\cdparent",[i],[]);case"\\\\cdlongequal":return r.callFunction("\\\\cdlongequal",[],[]);case"\\Vert":return r.callFunction("\\Big",[{type:"textord",text:"\\Vert",mode:"math"}],[]);default:return{type:"textord",text:" ",mode:"math"}}}ot({type:"cdlabel",names:["\\\\cdleft","\\\\cdright"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"cdlabel",mode:r.mode,side:n.slice(4),label:t[0]}},htmlBuilder:function(e,t){var r=t.havingStyle(t.style.sup()),n=Ke.wrapFragment(wt(e.label,r,t),t);return n.classes.push("cd-label-"+e.side),n.style.bottom=F(.8-n.depth),n.height=0,n.depth=0,n},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mrow",[Rt(e.label,t)]);return(r=new Tt.MathNode("mpadded",[r])).setAttribute("width","0"),"left"===e.side&&r.setAttribute("lspace","-1width"),r.setAttribute("voffset","0.7em"),(r=new Tt.MathNode("mstyle",[r])).setAttribute("displaystyle","false"),r.setAttribute("scriptlevel","1"),r}}),ot({type:"cdlabelparent",names:["\\\\cdparent"],props:{numArgs:1},handler:function(e,t){return{type:"cdlabelparent",mode:e.parser.mode,fragment:t[0]}},htmlBuilder:function(e,t){var r=Ke.wrapFragment(wt(e.fragment,t),t);return r.classes.push("cd-vert-arrow"),r},mathmlBuilder:function(e,t){return new Tt.MathNode("mrow",[Rt(e.fragment,t)])}}),ot({type:"textord",names:["\\@char"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){for(var r=e.parser,a=Ut(t[0],"ordgroup").body,i="",o=0;o<a.length;o++){i+=Ut(a[o],"textord").text}var s,l=parseInt(i);if(isNaN(l))throw new n("\\@char has non-numeric argument "+i);if(l<0||l>=1114111)throw new n("\\@char with invalid code point "+i);return l<=65535?s=String.fromCharCode(l):(l-=65536,s=String.fromCharCode(55296+(l>>10),56320+(1023&l))),{type:"textord",mode:r.mode,text:s}}});var nr=function(e,t){var r=ft(e.body,t.withColor(e.color),!1);return Ke.makeFragment(r)},ar=function(e,t){var r=qt(e.body,t.withColor(e.color)),n=new Tt.MathNode("mstyle",r);return n.setAttribute("mathcolor",e.color),n};ot({type:"color",names:["\\textcolor"],props:{numArgs:2,allowedInText:!0,argTypes:["color","original"]},handler:function(e,t){var r=e.parser,n=Ut(t[0],"color-token").color,a=t[1];return{type:"color",mode:r.mode,color:n,body:ht(a)}},htmlBuilder:nr,mathmlBuilder:ar}),ot({type:"color",names:["\\color"],props:{numArgs:1,allowedInText:!0,argTypes:["color"]},handler:function(e,t){var r=e.parser,n=e.breakOnTokenText,a=Ut(t[0],"color-token").color;r.gullet.macros.set("\\current@color",a);var i=r.parseExpression(!0,n);return{type:"color",mode:r.mode,color:a,body:i}},htmlBuilder:nr,mathmlBuilder:ar}),ot({type:"cr",names:["\\\\"],props:{numArgs:0,numOptionalArgs:1,argTypes:["size"],allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=r[0],i=!n.settings.displayMode||!n.settings.useStrictBehavior("newLineInDisplayMode","In LaTeX, \\\\ or \\newline does nothing in display mode");return{type:"cr",mode:n.mode,newLine:i,size:a&&Ut(a,"size").value}},htmlBuilder:function(e,t){var r=Ke.makeSpan(["mspace"],[],t);return e.newLine&&(r.classes.push("newline"),e.size&&(r.style.marginTop=F(P(e.size,t)))),r},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mspace");return e.newLine&&(r.setAttribute("linebreak","newline"),e.size&&r.setAttribute("height",F(P(e.size,t)))),r}});var ir={"\\global":"\\global","\\long":"\\\\globallong","\\\\globallong":"\\\\globallong","\\def":"\\gdef","\\gdef":"\\gdef","\\edef":"\\xdef","\\xdef":"\\xdef","\\let":"\\\\globallet","\\futurelet":"\\\\globalfuture"},or=function(e){var t=e.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(t))throw new n("Expected a control sequence",e);return t},sr=function(e,t,r,n){var a=e.gullet.macros.get(r.text);null==a&&(r.noexpand=!0,a={tokens:[r],numArgs:0,unexpandable:!e.gullet.isExpandable(r.text)}),e.gullet.macros.set(t,a,n)};ot({type:"internal",names:["\\global","\\long","\\\\globallong"],props:{numArgs:0,allowedInText:!0},handler:function(e){var t=e.parser,r=e.funcName;t.consumeSpaces();var a=t.fetch();if(ir[a.text])return"\\global"!==r&&"\\\\globallong"!==r||(a.text=ir[a.text]),Ut(t.parseFunction(),"internal");throw new n("Invalid token after macro prefix",a)}}),ot({type:"internal",names:["\\def","\\gdef","\\edef","\\xdef"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,a=t.gullet.popToken(),i=a.text;if(/^(?:[\\{}$&#^_]|EOF)$/.test(i))throw new n("Expected a control sequence",a);for(var o,s=0,l=[[]];"{"!==t.gullet.future().text;)if("#"===(a=t.gullet.popToken()).text){if("{"===t.gullet.future().text){o=t.gullet.future(),l[s].push("{");break}if(a=t.gullet.popToken(),!/^[1-9]$/.test(a.text))throw new n('Invalid argument number "'+a.text+'"');if(parseInt(a.text)!==s+1)throw new n('Argument number "'+a.text+'" out of order');s++,l.push([])}else{if("EOF"===a.text)throw new n("Expected a macro definition");l[s].push(a.text)}var h=t.gullet.consumeArg().tokens;return o&&h.unshift(o),"\\edef"!==r&&"\\xdef"!==r||(h=t.gullet.expandTokens(h)).reverse(),t.gullet.macros.set(i,{tokens:h,numArgs:s,delimiters:l},r===ir[r]),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\let","\\\\globallet"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=or(t.gullet.popToken());t.gullet.consumeSpaces();var a=function(e){var t=e.gullet.popToken();return"="===t.text&&" "===(t=e.gullet.popToken()).text&&(t=e.gullet.popToken()),t}(t);return sr(t,n,a,"\\\\globallet"===r),{type:"internal",mode:t.mode}}}),ot({type:"internal",names:["\\futurelet","\\\\globalfuture"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e){var t=e.parser,r=e.funcName,n=or(t.gullet.popToken()),a=t.gullet.popToken(),i=t.gullet.popToken();return sr(t,n,i,"\\\\globalfuture"===r),t.gullet.pushToken(i),t.gullet.pushToken(a),{type:"internal",mode:t.mode}}});var lr=function(e,t,r){var n=N(ae.math[e]&&ae.math[e].replace||e,t,r);if(!n)throw new Error("Unsupported symbol "+e+" and font size "+t+".");return n},hr=function(e,t,r,n){var a=r.havingBaseStyle(t),i=Ke.makeSpan(n.concat(a.sizingClasses(r)),[e],r),o=a.sizeMultiplier/r.sizeMultiplier;return i.height*=o,i.depth*=o,i.maxFontSize=a.sizeMultiplier,i},cr=function(e,t,r){var n=t.havingBaseStyle(r),a=(1-t.sizeMultiplier/n.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=F(a),e.height-=a,e.depth+=a},mr=function(e,t,r,n,a,i){var o=function(e,t,r,n){return Ke.makeSymbol(e,"Size"+t+"-Regular",r,n)}(e,t,a,n),s=hr(Ke.makeSpan(["delimsizing","size"+t],[o],n),x.TEXT,n,i);return r&&cr(s,n,x.TEXT),s},ur=function(e,t,r){var n;return n="Size1-Regular"===t?"delim-size1":"delim-size4",{type:"elem",elem:Ke.makeSpan(["delimsizinginner",n],[Ke.makeSpan([],[Ke.makeSymbol(e,t,r)])])}},pr=function(e,t,r){var n=T["Size4-Regular"][e.charCodeAt(0)]?T["Size4-Regular"][e.charCodeAt(0)][4]:T["Size1-Regular"][e.charCodeAt(0)][4],a=new J("inner",function(e,t){switch(e){case"\u239c":return"M291 0 H417 V"+t+" H291z M291 0 H417 V"+t+" H291z";case"\u2223":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145z";case"\u2225":return"M145 0 H188 V"+t+" H145z M145 0 H188 V"+t+" H145zM367 0 H410 V"+t+" H367z M367 0 H410 V"+t+" H367z";case"\u239f":return"M457 0 H583 V"+t+" H457z M457 0 H583 V"+t+" H457z";case"\u23a2":return"M319 0 H403 V"+t+" H319z M319 0 H403 V"+t+" H319z";case"\u23a5":return"M263 0 H347 V"+t+" H263z M263 0 H347 V"+t+" H263z";case"\u23aa":return"M384 0 H504 V"+t+" H384z M384 0 H504 V"+t+" H384z";case"\u23d0":return"M312 0 H355 V"+t+" H312z M312 0 H355 V"+t+" H312z";case"\u2016":return"M257 0 H300 V"+t+" H257z M257 0 H300 V"+t+" H257zM478 0 H521 V"+t+" H478z M478 0 H521 V"+t+" H478z";default:return""}}(e,Math.round(1e3*t))),i=new K([a],{width:F(n),height:F(t),style:"width:"+F(n),viewBox:"0 0 "+1e3*n+" "+Math.round(1e3*t),preserveAspectRatio:"xMinYMin"}),o=Ke.makeSvgSpan([],[i],r);return o.height=t,o.style.height=F(t),o.style.width=F(n),{type:"elem",elem:o}},dr={type:"kern",size:-.008},fr=["|","\\lvert","\\rvert","\\vert"],gr=["\\|","\\lVert","\\rVert","\\Vert"],vr=function(e,t,r,n,a,i){var o,s,h,c,m="",u=0;o=h=c=e,s=null;var p="Size1-Regular";"\\uparrow"===e?h=c="\u23d0":"\\Uparrow"===e?h=c="\u2016":"\\downarrow"===e?o=h="\u23d0":"\\Downarrow"===e?o=h="\u2016":"\\updownarrow"===e?(o="\\uparrow",h="\u23d0",c="\\downarrow"):"\\Updownarrow"===e?(o="\\Uparrow",h="\u2016",c="\\Downarrow"):l.contains(fr,e)?(h="\u2223",m="vert",u=333):l.contains(gr,e)?(h="\u2225",m="doublevert",u=556):"["===e||"\\lbrack"===e?(o="\u23a1",h="\u23a2",c="\u23a3",p="Size4-Regular",m="lbrack",u=667):"]"===e||"\\rbrack"===e?(o="\u23a4",h="\u23a5",c="\u23a6",p="Size4-Regular",m="rbrack",u=667):"\\lfloor"===e||"\u230a"===e?(h=o="\u23a2",c="\u23a3",p="Size4-Regular",m="lfloor",u=667):"\\lceil"===e||"\u2308"===e?(o="\u23a1",h=c="\u23a2",p="Size4-Regular",m="lceil",u=667):"\\rfloor"===e||"\u230b"===e?(h=o="\u23a5",c="\u23a6",p="Size4-Regular",m="rfloor",u=667):"\\rceil"===e||"\u2309"===e?(o="\u23a4",h=c="\u23a5",p="Size4-Regular",m="rceil",u=667):"("===e||"\\lparen"===e?(o="\u239b",h="\u239c",c="\u239d",p="Size4-Regular",m="lparen",u=875):")"===e||"\\rparen"===e?(o="\u239e",h="\u239f",c="\u23a0",p="Size4-Regular",m="rparen",u=875):"\\{"===e||"\\lbrace"===e?(o="\u23a7",s="\u23a8",c="\u23a9",h="\u23aa",p="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(o="\u23ab",s="\u23ac",c="\u23ad",h="\u23aa",p="Size4-Regular"):"\\lgroup"===e||"\u27ee"===e?(o="\u23a7",c="\u23a9",h="\u23aa",p="Size4-Regular"):"\\rgroup"===e||"\u27ef"===e?(o="\u23ab",c="\u23ad",h="\u23aa",p="Size4-Regular"):"\\lmoustache"===e||"\u23b0"===e?(o="\u23a7",c="\u23ad",h="\u23aa",p="Size4-Regular"):"\\rmoustache"!==e&&"\u23b1"!==e||(o="\u23ab",c="\u23a9",h="\u23aa",p="Size4-Regular");var d=lr(o,p,a),f=d.height+d.depth,g=lr(h,p,a),v=g.height+g.depth,y=lr(c,p,a),b=y.height+y.depth,w=0,k=1;if(null!==s){var S=lr(s,p,a);w=S.height+S.depth,k=2}var M=f+b+w,z=M+Math.max(0,Math.ceil((t-M)/(k*v)))*k*v,A=n.fontMetrics().axisHeight;r&&(A*=n.sizeMultiplier);var T=z/2-A,B=[];if(m.length>0){var C=z-f-b,N=Math.round(1e3*z),q=function(e,t){switch(e){case"lbrack":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v1759 h347 v-84\nH403z M403 1759 V0 H319 V1759 v"+t+" v1759 h84z";case"rbrack":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v1759 H0 v84 H347z\nM347 1759 V0 H263 V1759 v"+t+" v1759 h84z";case"vert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z";case"doublevert":return"M145 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M188 15 H145 v585 v"+t+" v585 h43z\nM367 15 v585 v"+t+" v585 c2.667,10,9.667,15,21,15\nc10,0,16.667,-5,20,-15 v-585 v"+-t+" v-585 c-2.667,-10,-9.667,-15,-21,-15\nc-10,0,-16.667,5,-20,15z M410 15 H367 v585 v"+t+" v585 h43z";case"lfloor":return"M319 602 V0 H403 V602 v"+t+" v1715 h263 v84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"rfloor":return"M319 602 V0 H403 V602 v"+t+" v1799 H0 v-84 H319z\nMM319 602 V0 H403 V602 v"+t+" v1715 H319z";case"lceil":return"M403 1759 V84 H666 V0 H319 V1759 v"+t+" v602 h84z\nM403 1759 V0 H319 V1759 v"+t+" v602 h84z";case"rceil":return"M347 1759 V0 H0 V84 H263 V1759 v"+t+" v602 h84z\nM347 1759 V0 h-84 V1759 v"+t+" v602 h84z";case"lparen":return"M863,9c0,-2,-2,-5,-6,-9c0,0,-17,0,-17,0c-12.7,0,-19.3,0.3,-20,1\nc-5.3,5.3,-10.3,11,-15,17c-242.7,294.7,-395.3,682,-458,1162c-21.3,163.3,-33.3,349,\n-36,557 l0,"+(t+84)+"c0.2,6,0,26,0,60c2,159.3,10,310.7,24,454c53.3,528,210,\n949.7,470,1265c4.7,6,9.7,11.7,15,17c0.7,0.7,7,1,19,1c0,0,18,0,18,0c4,-4,6,-7,6,-9\nc0,-2.7,-3.3,-8.7,-10,-18c-135.3,-192.7,-235.5,-414.3,-300.5,-665c-65,-250.7,-102.5,\n-544.7,-112.5,-882c-2,-104,-3,-167,-3,-189\nl0,-"+(t+92)+"c0,-162.7,5.7,-314,17,-454c20.7,-272,63.7,-513,129,-723c65.3,\n-210,155.3,-396.3,270,-559c6.7,-9.3,10,-15.3,10,-18z";case"rparen":return"M76,0c-16.7,0,-25,3,-25,9c0,2,2,6.3,6,13c21.3,28.7,42.3,60.3,\n63,95c96.7,156.7,172.8,332.5,228.5,527.5c55.7,195,92.8,416.5,111.5,664.5\nc11.3,139.3,17,290.7,17,454c0,28,1.7,43,3.3,45l0,"+(t+9)+"\nc-3,4,-3.3,16.7,-3.3,38c0,162,-5.7,313.7,-17,455c-18.7,248,-55.8,469.3,-111.5,664\nc-55.7,194.7,-131.8,370.3,-228.5,527c-20.7,34.7,-41.7,66.3,-63,95c-2,3.3,-4,7,-6,11\nc0,7.3,5.7,11,17,11c0,0,11,0,11,0c9.3,0,14.3,-0.3,15,-1c5.3,-5.3,10.3,-11,15,-17\nc242.7,-294.7,395.3,-681.7,458,-1161c21.3,-164.7,33.3,-350.7,36,-558\nl0,-"+(t+144)+"c-2,-159.3,-10,-310.7,-24,-454c-53.3,-528,-210,-949.7,\n-470,-1265c-4.7,-6,-9.7,-11.7,-15,-17c-0.7,-0.7,-6.7,-1,-18,-1z";default:throw new Error("Unknown stretchy delimiter.")}}(m,Math.round(1e3*C)),I=new J(m,q),R=(u/1e3).toFixed(3)+"em",H=(N/1e3).toFixed(3)+"em",O=new K([I],{width:R,height:H,viewBox:"0 0 "+u+" "+N}),E=Ke.makeSvgSpan([],[O],n);E.height=N/1e3,E.style.width=R,E.style.height=H,B.push({type:"elem",elem:E})}else{if(B.push(ur(c,p,a)),B.push(dr),null===s){var L=z-f-b+.016;B.push(pr(h,L,n))}else{var D=(z-f-b-w)/2+.016;B.push(pr(h,D,n)),B.push(dr),B.push(ur(s,p,a)),B.push(dr),B.push(pr(h,D,n))}B.push(dr),B.push(ur(o,p,a))}var V=n.havingBaseStyle(x.TEXT),P=Ke.makeVList({positionType:"bottom",positionData:T,children:B},V);return hr(Ke.makeSpan(["delimsizing","mult"],[P],V),x.TEXT,n,i)},yr=.08,br=function(e,t,r,n,a){var i=function(e,t,r){t*=1e3;var n="";switch(e){case"sqrtMain":n=function(e,t){return"M95,"+(622+e+t)+"\nc-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14\nc0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54\nc44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10\ns173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429\nc69,-144,104.5,-217.7,106.5,-221\nl"+e/2.075+" -"+e+"\nc5.3,-9.3,12,-14,20,-14\nH400000v"+(40+e)+"H845.2724\ns-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7\nc-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z\nM"+(834+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize1":n=function(e,t){return"M263,"+(601+e+t)+"c0.7,0,18,39.7,52,119\nc34,79.3,68.167,158.7,102.5,238c34.3,79.3,51.8,119.3,52.5,120\nc340,-704.7,510.7,-1060.3,512,-1067\nl"+e/2.084+" -"+e+"\nc4.7,-7.3,11,-11,19,-11\nH40000v"+(40+e)+"H1012.3\ns-271.3,567,-271.3,567c-38.7,80.7,-84,175,-136,283c-52,108,-89.167,185.3,-111.5,232\nc-22.3,46.7,-33.8,70.3,-34.5,71c-4.7,4.7,-12.3,7,-23,7s-12,-1,-12,-1\ns-109,-253,-109,-253c-72.7,-168,-109.3,-252,-110,-252c-10.7,8,-22,16.7,-34,26\nc-22,17.3,-33.3,26,-34,26s-26,-26,-26,-26s76,-59,76,-59s76,-60,76,-60z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize2":n=function(e,t){return"M983 "+(10+e+t)+"\nl"+e/3.13+" -"+e+"\nc4,-6.7,10,-10,18,-10 H400000v"+(40+e)+"\nH1013.1s-83.4,268,-264.1,840c-180.7,572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7\ns-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744\nc-10,12,-21,25,-33,39s-32,39,-32,39c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30\nc26.7,-32.7,52,-63,76,-91s52,-60,52,-60s208,722,208,722\nc56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,-658.5\nc53.7,-170.3,84.5,-266.8,92.5,-289.5z\nM"+(1001+e)+" "+t+"h400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize3":n=function(e,t){return"M424,"+(2398+e+t)+"\nc-1.3,-0.7,-38.5,-172,-111.5,-514c-73,-342,-109.8,-513.3,-110.5,-514\nc0,-2,-10.7,14.3,-32,49c-4.7,7.3,-9.8,15.7,-15.5,25c-5.7,9.3,-9.8,16,-12.5,20\ns-5,7,-5,7c-4,-3.3,-8.3,-7.7,-13,-13s-13,-13,-13,-13s76,-122,76,-122s77,-121,77,-121\ns209,968,209,968c0,-2,84.7,-361.7,254,-1079c169.3,-717.3,254.7,-1077.7,256,-1081\nl"+e/4.223+" -"+e+"c4,-6.7,10,-10,18,-10 H400000\nv"+(40+e)+"H1014.6\ns-87.3,378.7,-272.6,1166c-185.3,787.3,-279.3,1182.3,-282,1185\nc-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2z M"+(1001+e)+" "+t+"\nh400000v"+(40+e)+"h-400000z"}(t,M);break;case"sqrtSize4":n=function(e,t){return"M473,"+(2713+e+t)+"\nc339.3,-1799.3,509.3,-2700,510,-2702 l"+e/5.298+" -"+e+"\nc3.3,-7.3,9.3,-11,18,-11 H400000v"+(40+e)+"H1017.7\ns-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9\nc-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200\nc0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26\ns76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,\n606zM"+(1001+e)+" "+t+"h400000v"+(40+e)+"H1017.7z"}(t,M);break;case"sqrtTall":n=function(e,t,r){return"M702 "+(e+t)+"H400000"+(40+e)+"\nH742v"+(r-54-t-e)+"l-4 4-4 4c-.667.7 -2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1\nh-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170\nc-4-3.333-8.333-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667\n219 661 l218 661zM702 "+t+"H400000v"+(40+e)+"H742z"}(t,M,r)}return n}(e,n,r),o=new J(e,i),s=new K([o],{width:"400em",height:F(t),viewBox:"0 0 400000 "+r,preserveAspectRatio:"xMinYMin slice"});return Ke.makeSvgSpan(["hide-tail"],[s],a)},xr=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","\\surd"],wr=["\\uparrow","\\downarrow","\\updownarrow","\\Uparrow","\\Downarrow","\\Updownarrow","|","\\|","\\vert","\\Vert","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1"],kr=["<",">","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"],Sr=[0,1.2,1.8,2.4,3],Mr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],zr=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"stack"}],Ar=[{type:"small",style:x.SCRIPTSCRIPT},{type:"small",style:x.SCRIPT},{type:"small",style:x.TEXT},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}],Tr=function(e){if("small"===e.type)return"Main-Regular";if("large"===e.type)return"Size"+e.size+"-Regular";if("stack"===e.type)return"Size4-Regular";throw new Error("Add support for delim type '"+e.type+"' here.")},Br=function(e,t,r,n){for(var a=Math.min(2,3-n.style.size);a<r.length&&"stack"!==r[a].type;a++){var i=lr(e,Tr(r[a]),"math"),o=i.height+i.depth;if("small"===r[a].type&&(o*=n.havingBaseStyle(r[a].style).sizeMultiplier),o>t)return r[a]}return r[r.length-1]},Cr=function(e,t,r,n,a,i){var o;"<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),o=l.contains(kr,e)?Mr:l.contains(xr,e)?Ar:zr;var s=Br(e,t,o,n);return"small"===s.type?function(e,t,r,n,a,i){var o=Ke.makeSymbol(e,"Main-Regular",a,n),s=hr(o,t,n,i);return r&&cr(s,n,t),s}(e,s.style,r,n,a,i):"large"===s.type?mr(e,s.size,r,n,a,i):vr(e,t,r,n,a,i)},Nr={sqrtImage:function(e,t){var r,n,a=t.havingBaseSizing(),i=Br("\\surd",e*a.sizeMultiplier,Ar,a),o=a.sizeMultiplier,s=Math.max(0,t.minRuleThickness-t.fontMetrics().sqrtRuleThickness),l=0,h=0,c=0;return"small"===i.type?(e<1?o=1:e<1.4&&(o=.7),h=(1+s)/o,(r=br("sqrtMain",l=(1+s+yr)/o,c=1e3+1e3*s+80,s,t)).style.minWidth="0.853em",n=.833/o):"large"===i.type?(c=1080*Sr[i.size],h=(Sr[i.size]+s)/o,l=(Sr[i.size]+s+yr)/o,(r=br("sqrtSize"+i.size,l,c,s,t)).style.minWidth="1.02em",n=1/o):(l=e+s+yr,h=e+s,c=Math.floor(1e3*e+s)+80,(r=br("sqrtTall",l,c,s,t)).style.minWidth="0.742em",n=1.056),r.height=h,r.style.height=F(l),{span:r,advanceWidth:n,ruleWidth:(t.fontMetrics().sqrtRuleThickness+s)*o}},sizedDelim:function(e,t,r,a,i){if("<"===e||"\\lt"===e||"\u27e8"===e?e="\\langle":">"!==e&&"\\gt"!==e&&"\u27e9"!==e||(e="\\rangle"),l.contains(xr,e)||l.contains(kr,e))return mr(e,t,!1,r,a,i);if(l.contains(wr,e))return vr(e,Sr[t],!1,r,a,i);throw new n("Illegal delimiter: '"+e+"'")},sizeToMaxHeight:Sr,customSizedDelim:Cr,leftRightDelim:function(e,t,r,n,a,i){var o=n.fontMetrics().axisHeight*n.sizeMultiplier,s=5/n.fontMetrics().ptPerEm,l=Math.max(t-o,r+o),h=Math.max(l/500*901,2*l-s);return Cr(e,h,!0,n,a,i)}},qr={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}},Ir=["(","\\lparen",")","\\rparen","[","\\lbrack","]","\\rbrack","\\{","\\lbrace","\\}","\\rbrace","\\lfloor","\\rfloor","\u230a","\u230b","\\lceil","\\rceil","\u2308","\u2309","<",">","\\langle","\u27e8","\\rangle","\u27e9","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\u27ee","\u27ef","\\lmoustache","\\rmoustache","\u23b0","\u23b1","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."];function Rr(e,t){var r=Xt(e);if(r&&l.contains(Ir,r.text))return r;throw new n(r?"Invalid delimiter '"+r.text+"' after '"+t.funcName+"'":"Invalid delimiter type '"+e.type+"'",e)}function Hr(e){if(!e.body)throw new Error("Bug: The leftright ParseNode wasn't fully parsed.")}ot({type:"delimsizing",names:["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],props:{numArgs:1,argTypes:["primitive"]},handler:function(e,t){var r=Rr(t[0],e);return{type:"delimsizing",mode:e.parser.mode,size:qr[e.funcName].size,mclass:qr[e.funcName].mclass,delim:r.text}},htmlBuilder:function(e,t){return"."===e.delim?Ke.makeSpan([e.mclass]):Nr.sizedDelim(e.delim,e.size,t,e.mode,[e.mclass])},mathmlBuilder:function(e){var t=[];"."!==e.delim&&t.push(Bt(e.delim,e.mode));var r=new Tt.MathNode("mo",t);"mopen"===e.mclass||"mclose"===e.mclass?r.setAttribute("fence","true"):r.setAttribute("fence","false"),r.setAttribute("stretchy","true");var n=F(Nr.sizeToMaxHeight[e.size]);return r.setAttribute("minsize",n),r.setAttribute("maxsize",n),r}}),ot({type:"leftright-right",names:["\\right"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser.gullet.macros.get("\\current@color");if(r&&"string"!=typeof r)throw new n("\\current@color set to non-string in \\right");return{type:"leftright-right",mode:e.parser.mode,delim:Rr(t[0],e).text,color:r}}}),ot({type:"leftright",names:["\\left"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=Rr(t[0],e),n=e.parser;++n.leftrightDepth;var a=n.parseExpression(!1);--n.leftrightDepth,n.expect("\\right",!1);var i=Ut(n.parseFunction(),"leftright-right");return{type:"leftright",mode:n.mode,body:a,left:r.text,right:i.delim,rightColor:i.color}},htmlBuilder:function(e,t){Hr(e);for(var r,n,a=ft(e.body,t,!0,["mopen","mclose"]),i=0,o=0,s=!1,l=0;l<a.length;l++)a[l].isMiddle?s=!0:(i=Math.max(a[l].height,i),o=Math.max(a[l].depth,o));if(i*=t.sizeMultiplier,o*=t.sizeMultiplier,r="."===e.left?xt(t,["mopen"]):Nr.leftRightDelim(e.left,i,o,t,e.mode,["mopen"]),a.unshift(r),s)for(var h=1;h<a.length;h++){var c=a[h].isMiddle;c&&(a[h]=Nr.leftRightDelim(c.delim,i,o,c.options,e.mode,[]))}if("."===e.right)n=xt(t,["mclose"]);else{var m=e.rightColor?t.withColor(e.rightColor):t;n=Nr.leftRightDelim(e.right,i,o,m,e.mode,["mclose"])}return a.push(n),Ke.makeSpan(["minner"],a,t)},mathmlBuilder:function(e,t){Hr(e);var r=qt(e.body,t);if("."!==e.left){var n=new Tt.MathNode("mo",[Bt(e.left,e.mode)]);n.setAttribute("fence","true"),r.unshift(n)}if("."!==e.right){var a=new Tt.MathNode("mo",[Bt(e.right,e.mode)]);a.setAttribute("fence","true"),e.rightColor&&a.setAttribute("mathcolor",e.rightColor),r.push(a)}return Ct(r)}}),ot({type:"middle",names:["\\middle"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=Rr(t[0],e);if(!e.parser.leftrightDepth)throw new n("\\middle without preceding \\left",r);return{type:"middle",mode:e.parser.mode,delim:r.text}},htmlBuilder:function(e,t){var r;if("."===e.delim)r=xt(t,[]);else{r=Nr.sizedDelim(e.delim,1,t,e.mode,[]);var n={delim:e.delim,options:t};r.isMiddle=n}return r},mathmlBuilder:function(e,t){var r="\\vert"===e.delim||"|"===e.delim?Bt("|","text"):Bt(e.delim,e.mode),n=new Tt.MathNode("mo",[r]);return n.setAttribute("fence","true"),n.setAttribute("lspace","0.05em"),n.setAttribute("rspace","0.05em"),n}});var Or=function(e,t){var r,n,a,i=Ke.wrapFragment(wt(e.body,t),t),o=e.label.slice(1),s=t.sizeMultiplier,h=0,c=l.isCharacterBox(e.body);if("sout"===o)(r=Ke.makeSpan(["stretchy","sout"])).height=t.fontMetrics().defaultRuleThickness/s,h=-.5*t.fontMetrics().xHeight;else if("phase"===o){var m=P({number:.6,unit:"pt"},t),u=P({number:.35,unit:"ex"},t);s/=t.havingBaseSizing().sizeMultiplier;var p=i.height+i.depth+m+u;i.style.paddingLeft=F(p/2+m);var d=Math.floor(1e3*p*s),f="M400000 "+(n=d)+" H0 L"+n/2+" 0 l65 45 L145 "+(n-80)+" H400000z",g=new K([new J("phase",f)],{width:"400em",height:F(d/1e3),viewBox:"0 0 400000 "+d,preserveAspectRatio:"xMinYMin slice"});(r=Ke.makeSvgSpan(["hide-tail"],[g],t)).style.height=F(p),h=i.depth+m+u}else{/cancel/.test(o)?c||i.classes.push("cancel-pad"):"angl"===o?i.classes.push("anglpad"):i.classes.push("boxpad");var v=0,y=0,b=0;/box/.test(o)?(b=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness),y=v=t.fontMetrics().fboxsep+("colorbox"===o?0:b)):"angl"===o?(v=4*(b=Math.max(t.fontMetrics().defaultRuleThickness,t.minRuleThickness)),y=Math.max(0,.25-i.depth)):y=v=c?.2:0,r=Pt(i,o,v,y,t),/fbox|boxed|fcolorbox/.test(o)?(r.style.borderStyle="solid",r.style.borderWidth=F(b)):"angl"===o&&.049!==b&&(r.style.borderTopWidth=F(b),r.style.borderRightWidth=F(b)),h=i.depth+y,e.backgroundColor&&(r.style.backgroundColor=e.backgroundColor,e.borderColor&&(r.style.borderColor=e.borderColor))}if(e.backgroundColor)a=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:r,shift:h},{type:"elem",elem:i,shift:0}]},t);else{var x=/cancel|phase/.test(o)?["svg-align"]:[];a=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:i,shift:0},{type:"elem",elem:r,shift:h,wrapperClasses:x}]},t)}return/cancel/.test(o)&&(a.height=i.height,a.depth=i.depth),/cancel/.test(o)&&!c?Ke.makeSpan(["mord","cancel-lap"],[a],t):Ke.makeSpan(["mord"],[a],t)},Er=function(e,t){var r=0,n=new Tt.MathNode(e.label.indexOf("colorbox")>-1?"mpadded":"menclose",[Rt(e.body,t)]);switch(e.label){case"\\cancel":n.setAttribute("notation","updiagonalstrike");break;case"\\bcancel":n.setAttribute("notation","downdiagonalstrike");break;case"\\phase":n.setAttribute("notation","phasorangle");break;case"\\sout":n.setAttribute("notation","horizontalstrike");break;case"\\fbox":n.setAttribute("notation","box");break;case"\\angl":n.setAttribute("notation","actuarial");break;case"\\fcolorbox":case"\\colorbox":if(r=t.fontMetrics().fboxsep*t.fontMetrics().ptPerEm,n.setAttribute("width","+"+2*r+"pt"),n.setAttribute("height","+"+2*r+"pt"),n.setAttribute("lspace",r+"pt"),n.setAttribute("voffset",r+"pt"),"\\fcolorbox"===e.label){var a=Math.max(t.fontMetrics().fboxrule,t.minRuleThickness);n.setAttribute("style","border: "+a+"em solid "+String(e.borderColor))}break;case"\\xcancel":n.setAttribute("notation","updiagonalstrike downdiagonalstrike")}return e.backgroundColor&&n.setAttribute("mathbackground",e.backgroundColor),n};ot({type:"enclose",names:["\\colorbox"],props:{numArgs:2,allowedInText:!0,argTypes:["color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=t[1];return{type:"enclose",mode:n.mode,label:a,backgroundColor:i,body:o}},htmlBuilder:Or,mathmlBuilder:Er}),ot({type:"enclose",names:["\\fcolorbox"],props:{numArgs:3,allowedInText:!0,argTypes:["color","color","text"]},handler:function(e,t,r){var n=e.parser,a=e.funcName,i=Ut(t[0],"color-token").color,o=Ut(t[1],"color-token").color,s=t[2];return{type:"enclose",mode:n.mode,label:a,backgroundColor:o,borderColor:i,body:s}},htmlBuilder:Or,mathmlBuilder:Er}),ot({type:"enclose",names:["\\fbox"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!0},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\fbox",body:t[0]}}}),ot({type:"enclose",names:["\\cancel","\\bcancel","\\xcancel","\\sout","\\phase"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"enclose",mode:r.mode,label:n,body:a}},htmlBuilder:Or,mathmlBuilder:Er}),ot({type:"enclose",names:["\\angl"],props:{numArgs:1,argTypes:["hbox"],allowedInText:!1},handler:function(e,t){return{type:"enclose",mode:e.parser.mode,label:"\\angl",body:t[0]}}});var Lr={};function Dr(e){for(var t=e.type,r=e.names,n=e.props,a=e.handler,i=e.htmlBuilder,o=e.mathmlBuilder,s={type:t,numArgs:n.numArgs||0,allowedInText:!1,numOptionalArgs:0,handler:a},l=0;l<r.length;++l)Lr[r[l]]=s;i&&(at[t]=i),o&&(it[t]=o)}var Vr={};function Pr(e,t){Vr[e]=t}var Fr=function(){function e(e,t,r){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=e,this.start=t,this.end=r}return e.range=function(t,r){return r?t&&t.loc&&r.loc&&t.loc.lexer===r.loc.lexer?new e(t.loc.lexer,t.loc.start,r.loc.end):null:t&&t.loc},e}(),Gr=function(){function e(e,t){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=e,this.loc=t}return e.prototype.range=function(t,r){return new e(r,Fr.range(this,t))},e}();function Ur(e){var t=[];e.consumeSpaces();var r=e.fetch().text;for("\\relax"===r&&(e.consume(),e.consumeSpaces(),r=e.fetch().text);"\\hline"===r||"\\hdashline"===r;)e.consume(),t.push("\\hdashline"===r),e.consumeSpaces(),r=e.fetch().text;return t}var Yr=function(e){if(!e.parser.settings.displayMode)throw new n("{"+e.envName+"} can be used only in display mode.")};function Xr(e){if(-1===e.indexOf("ed"))return-1===e.indexOf("*")}function Wr(e,t,r){var a=t.hskipBeforeAndAfter,i=t.addJot,o=t.cols,s=t.arraystretch,l=t.colSeparationType,h=t.autoTag,c=t.singleRow,m=t.emptySingleRow,u=t.maxNumCols,p=t.leqno;if(e.gullet.beginGroup(),c||e.gullet.macros.set("\\cr","\\\\\\relax"),!s){var d=e.gullet.expandMacroAsText("\\arraystretch");if(null==d)s=1;else if(!(s=parseFloat(d))||s<0)throw new n("Invalid \\arraystretch: "+d)}e.gullet.beginGroup();var f=[],g=[f],v=[],y=[],b=null!=h?[]:void 0;function x(){h&&e.gullet.macros.set("\\@eqnsw","1",!0)}function w(){b&&(e.gullet.macros.get("\\df@tag")?(b.push(e.subparse([new Gr("\\df@tag")])),e.gullet.macros.set("\\df@tag",void 0,!0)):b.push(Boolean(h)&&"1"===e.gullet.macros.get("\\@eqnsw")))}for(x(),y.push(Ur(e));;){var k=e.parseExpression(!1,c?"\\end":"\\\\");e.gullet.endGroup(),e.gullet.beginGroup(),k={type:"ordgroup",mode:e.mode,body:k},r&&(k={type:"styling",mode:e.mode,style:r,body:[k]}),f.push(k);var S=e.fetch().text;if("&"===S){if(u&&f.length===u){if(c||l)throw new n("Too many tab characters: &",e.nextToken);e.settings.reportNonstrict("textEnv","Too few columns specified in the {array} column argument.")}e.consume()}else{if("\\end"===S){w(),1===f.length&&"styling"===k.type&&0===k.body[0].body.length&&(g.length>1||!m)&&g.pop(),y.length<g.length+1&&y.push([]);break}if("\\\\"!==S)throw new n("Expected & or \\\\ or \\cr or \\end",e.nextToken);e.consume();var M=void 0;" "!==e.gullet.future().text&&(M=e.parseSizeGroup(!0)),v.push(M?M.value:null),w(),y.push(Ur(e)),f=[],g.push(f),x()}}return e.gullet.endGroup(),e.gullet.endGroup(),{type:"array",mode:e.mode,addJot:i,arraystretch:s,body:g,cols:o,rowGaps:v,hskipBeforeAndAfter:a,hLinesBeforeRow:y,colSeparationType:l,tags:b,leqno:p}}function _r(e){return"d"===e.slice(0,1)?"display":"text"}var jr=function(e,t){var r,a,i=e.body.length,o=e.hLinesBeforeRow,s=0,h=new Array(i),c=[],m=Math.max(t.fontMetrics().arrayRuleWidth,t.minRuleThickness),u=1/t.fontMetrics().ptPerEm,p=5*u;e.colSeparationType&&"small"===e.colSeparationType&&(p=t.havingStyle(x.SCRIPT).sizeMultiplier/t.sizeMultiplier*.2778);var d="CD"===e.colSeparationType?P({number:3,unit:"ex"},t):12*u,f=3*u,g=e.arraystretch*d,v=.7*g,y=.3*g,b=0;function w(e){for(var t=0;t<e.length;++t)t>0&&(b+=.25),c.push({pos:b,isDashed:e[t]})}for(w(o[0]),r=0;r<e.body.length;++r){var k=e.body[r],S=v,M=y;s<k.length&&(s=k.length);var z=new Array(k.length);for(a=0;a<k.length;++a){var A=wt(k[a],t);M<A.depth&&(M=A.depth),S<A.height&&(S=A.height),z[a]=A}var T=e.rowGaps[r],B=0;T&&(B=P(T,t))>0&&(M<(B+=y)&&(M=B),B=0),e.addJot&&(M+=f),z.height=S,z.depth=M,b+=S,z.pos=b,b+=M+B,h[r]=z,w(o[r+1])}var C,N,q=b/2+t.fontMetrics().axisHeight,I=e.cols||[],R=[],H=[];if(e.tags&&e.tags.some((function(e){return e})))for(r=0;r<i;++r){var O=h[r],E=O.pos-q,L=e.tags[r],D=void 0;(D=!0===L?Ke.makeSpan(["eqn-num"],[],t):!1===L?Ke.makeSpan([],[],t):Ke.makeSpan([],ft(L,t,!0),t)).depth=O.depth,D.height=O.height,H.push({type:"elem",elem:D,shift:E})}for(a=0,N=0;a<s||N<I.length;++a,++N){for(var V=I[N]||{},G=!0;"separator"===V.type;){if(G||((C=Ke.makeSpan(["arraycolsep"],[])).style.width=F(t.fontMetrics().doubleRuleSep),R.push(C)),"|"!==V.separator&&":"!==V.separator)throw new n("Invalid separator type: "+V.separator);var U="|"===V.separator?"solid":"dashed",Y=Ke.makeSpan(["vertical-separator"],[],t);Y.style.height=F(b),Y.style.borderRightWidth=F(m),Y.style.borderRightStyle=U,Y.style.margin="0 "+F(-m/2);var X=b-q;X&&(Y.style.verticalAlign=F(-X)),R.push(Y),V=I[++N]||{},G=!1}if(!(a>=s)){var W=void 0;(a>0||e.hskipBeforeAndAfter)&&0!==(W=l.deflt(V.pregap,p))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=F(W),R.push(C));var _=[];for(r=0;r<i;++r){var j=h[r],$=j[a];if($){var Z=j.pos-q;$.depth=j.depth,$.height=j.height,_.push({type:"elem",elem:$,shift:Z})}}_=Ke.makeVList({positionType:"individualShift",children:_},t),_=Ke.makeSpan(["col-align-"+(V.align||"c")],[_]),R.push(_),(a<s-1||e.hskipBeforeAndAfter)&&0!==(W=l.deflt(V.postgap,p))&&((C=Ke.makeSpan(["arraycolsep"],[])).style.width=F(W),R.push(C))}}if(h=Ke.makeSpan(["mtable"],R),c.length>0){for(var K=Ke.makeLineSpan("hline",t,m),J=Ke.makeLineSpan("hdashline",t,m),Q=[{type:"elem",elem:h,shift:0}];c.length>0;){var ee=c.pop(),te=ee.pos-q;ee.isDashed?Q.push({type:"elem",elem:J,shift:te}):Q.push({type:"elem",elem:K,shift:te})}h=Ke.makeVList({positionType:"individualShift",children:Q},t)}if(0===H.length)return Ke.makeSpan(["mord"],[h],t);var re=Ke.makeVList({positionType:"individualShift",children:H},t);return re=Ke.makeSpan(["tag"],[re],t),Ke.makeFragment([h,re])},$r={c:"center ",l:"left ",r:"right "},Zr=function(e,t){for(var r=[],n=new Tt.MathNode("mtd",[],["mtr-glue"]),a=new Tt.MathNode("mtd",[],["mml-eqn-num"]),i=0;i<e.body.length;i++){for(var o=e.body[i],s=[],l=0;l<o.length;l++)s.push(new Tt.MathNode("mtd",[Rt(o[l],t)]));e.tags&&e.tags[i]&&(s.unshift(n),s.push(n),e.leqno?s.unshift(a):s.push(a)),r.push(new Tt.MathNode("mtr",s))}var h=new Tt.MathNode("mtable",r),c=.5===e.arraystretch?.1:.16+e.arraystretch-1+(e.addJot?.09:0);h.setAttribute("rowspacing",F(c));var m="",u="";if(e.cols&&e.cols.length>0){var p=e.cols,d="",f=!1,g=0,v=p.length;"separator"===p[0].type&&(m+="top ",g=1),"separator"===p[p.length-1].type&&(m+="bottom ",v-=1);for(var y=g;y<v;y++)"align"===p[y].type?(u+=$r[p[y].align],f&&(d+="none "),f=!0):"separator"===p[y].type&&f&&(d+="|"===p[y].separator?"solid ":"dashed ",f=!1);h.setAttribute("columnalign",u.trim()),/[sd]/.test(d)&&h.setAttribute("columnlines",d.trim())}if("align"===e.colSeparationType){for(var b=e.cols||[],x="",w=1;w<b.length;w++)x+=w%2?"0em ":"1em ";h.setAttribute("columnspacing",x.trim())}else"alignat"===e.colSeparationType||"gather"===e.colSeparationType?h.setAttribute("columnspacing","0em"):"small"===e.colSeparationType?h.setAttribute("columnspacing","0.2778em"):"CD"===e.colSeparationType?h.setAttribute("columnspacing","0.5em"):h.setAttribute("columnspacing","1em");var k="",S=e.hLinesBeforeRow;m+=S[0].length>0?"left ":"",m+=S[S.length-1].length>0?"right ":"";for(var M=1;M<S.length-1;M++)k+=0===S[M].length?"none ":S[M][0]?"dashed ":"solid ";return/[sd]/.test(k)&&h.setAttribute("rowlines",k.trim()),""!==m&&(h=new Tt.MathNode("menclose",[h])).setAttribute("notation",m.trim()),e.arraystretch&&e.arraystretch<1&&(h=new Tt.MathNode("mstyle",[h])).setAttribute("scriptlevel","1"),h},Kr=function(e,t){-1===e.envName.indexOf("ed")&&Yr(e);var r,a=[],i=e.envName.indexOf("at")>-1?"alignat":"align",o="split"===e.envName,s=Wr(e.parser,{cols:a,addJot:!0,autoTag:o?void 0:Xr(e.envName),emptySingleRow:!0,colSeparationType:i,maxNumCols:o?2:void 0,leqno:e.parser.settings.leqno},"display"),l=0,h={type:"ordgroup",mode:e.mode,body:[]};if(t[0]&&"ordgroup"===t[0].type){for(var c="",m=0;m<t[0].body.length;m++){c+=Ut(t[0].body[m],"textord").text}r=Number(c),l=2*r}var u=!l;s.body.forEach((function(e){for(var t=1;t<e.length;t+=2){var a=Ut(e[t],"styling");Ut(a.body[0],"ordgroup").body.unshift(h)}if(u)l<e.length&&(l=e.length);else{var i=e.length/2;if(r<i)throw new n("Too many math in a row: expected "+r+", but got "+i,e[0])}}));for(var p=0;p<l;++p){var d="r",f=0;p%2==1?d="l":p>0&&u&&(f=1),a[p]={type:"align",align:d,pregap:f,postgap:0}}return s.colSeparationType=u?"align":"alignat",s};Dr({type:"array",names:["array","darray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lcr".indexOf(t))return{type:"align",align:t};if("|"===t)return{type:"separator",separator:"|"};if(":"===t)return{type:"separator",separator:":"};throw new n("Unknown column alignment: "+t,e)})),a={cols:r,hskipBeforeAndAfter:!0,maxNumCols:r.length};return Wr(e.parser,a,_r(e.envName))},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],props:{numArgs:0},handler:function(e){var t={matrix:null,pmatrix:["(",")"],bmatrix:["[","]"],Bmatrix:["\\{","\\}"],vmatrix:["|","|"],Vmatrix:["\\Vert","\\Vert"]}[e.envName.replace("*","")],r="c",a={hskipBeforeAndAfter:!1,cols:[{type:"align",align:r}]};if("*"===e.envName.charAt(e.envName.length-1)){var i=e.parser;if(i.consumeSpaces(),"["===i.fetch().text){if(i.consume(),i.consumeSpaces(),r=i.fetch().text,-1==="lcr".indexOf(r))throw new n("Expected l or c or r",i.nextToken);i.consume(),i.consumeSpaces(),i.expect("]"),i.consume(),a.cols=[{type:"align",align:r}]}}var o=Wr(e.parser,a,_r(e.envName)),s=Math.max.apply(Math,[0].concat(o.body.map((function(e){return e.length}))));return o.cols=new Array(s).fill({type:"align",align:r}),t?{type:"leftright",mode:e.mode,body:[o],left:t[0],right:t[1],rightColor:void 0}:o},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["smallmatrix"],props:{numArgs:0},handler:function(e){var t=Wr(e.parser,{arraystretch:.5},"script");return t.colSeparationType="small",t},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["subarray"],props:{numArgs:1},handler:function(e,t){var r=(Xt(t[0])?[t[0]]:Ut(t[0],"ordgroup").body).map((function(e){var t=Yt(e).text;if(-1!=="lc".indexOf(t))return{type:"align",align:t};throw new n("Unknown column alignment: "+t,e)}));if(r.length>1)throw new n("{subarray} can contain only one column");var a={cols:r,hskipBeforeAndAfter:!1,arraystretch:.5};if((a=Wr(e.parser,a,"script")).body.length>0&&a.body[0].length>1)throw new n("{subarray} can contain only one column");return a},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["cases","dcases","rcases","drcases"],props:{numArgs:0},handler:function(e){var t=Wr(e.parser,{arraystretch:1.2,cols:[{type:"align",align:"l",pregap:0,postgap:1},{type:"align",align:"l",pregap:0,postgap:0}]},_r(e.envName));return{type:"leftright",mode:e.mode,body:[t],left:e.envName.indexOf("r")>-1?".":"\\{",right:e.envName.indexOf("r")>-1?"\\}":".",rightColor:void 0}},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["align","align*","aligned","split"],props:{numArgs:0},handler:Kr,htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["gathered","gather","gather*"],props:{numArgs:0},handler:function(e){l.contains(["gather","gather*"],e.envName)&&Yr(e);var t={cols:[{type:"align",align:"c"}],addJot:!0,colSeparationType:"gather",autoTag:Xr(e.envName),emptySingleRow:!0,leqno:e.parser.settings.leqno};return Wr(e.parser,t,"display")},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["alignat","alignat*","alignedat"],props:{numArgs:1},handler:Kr,htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["equation","equation*"],props:{numArgs:0},handler:function(e){Yr(e);var t={autoTag:Xr(e.envName),emptySingleRow:!0,singleRow:!0,maxNumCols:1,leqno:e.parser.settings.leqno};return Wr(e.parser,t,"display")},htmlBuilder:jr,mathmlBuilder:Zr}),Dr({type:"array",names:["CD"],props:{numArgs:0},handler:function(e){return Yr(e),function(e){var t=[];for(e.gullet.beginGroup(),e.gullet.macros.set("\\cr","\\\\\\relax"),e.gullet.beginGroup();;){t.push(e.parseExpression(!1,"\\\\")),e.gullet.endGroup(),e.gullet.beginGroup();var r=e.fetch().text;if("&"!==r&&"\\\\"!==r){if("\\end"===r){0===t[t.length-1].length&&t.pop();break}throw new n("Expected \\\\ or \\cr or \\end",e.nextToken)}e.consume()}for(var a,i,o=[],s=[o],l=0;l<t.length;l++){for(var h=t[l],c={type:"styling",body:[],mode:"math",style:"display"},m=0;m<h.length;m++)if(tr(h[m])){o.push(c);var u=Yt(h[m+=1]).text,p=new Array(2);if(p[0]={type:"ordgroup",mode:"math",body:[]},p[1]={type:"ordgroup",mode:"math",body:[]},"=|.".indexOf(u)>-1);else{if(!("<>AV".indexOf(u)>-1))throw new n('Expected one of "<>AV=|." after @',h[m]);for(var d=0;d<2;d++){for(var f=!0,g=m+1;g<h.length;g++){if(i=u,("mathord"===(a=h[g]).type||"atom"===a.type)&&a.text===i){f=!1,m=g;break}if(tr(h[g]))throw new n("Missing a "+u+" character to complete a CD arrow.",h[g]);p[d].body.push(h[g])}if(f)throw new n("Missing a "+u+" character to complete a CD arrow.",h[m])}}var v={type:"styling",body:[rr(u,p,e)],mode:"math",style:"display"};o.push(v),c={type:"styling",body:[],mode:"math",style:"display"}}else c.body.push(h[m]);l%2==0?o.push(c):o.shift(),o=[],s.push(o)}return e.gullet.endGroup(),e.gullet.endGroup(),{type:"array",mode:"math",body:s,arraystretch:1,addJot:!0,rowGaps:[null],cols:new Array(s[0].length).fill({type:"align",align:"c",pregap:.25,postgap:.25}),colSeparationType:"CD",hLinesBeforeRow:new Array(s.length+1).fill([])}}(e.parser)},htmlBuilder:jr,mathmlBuilder:Zr}),Pr("\\nonumber","\\gdef\\@eqnsw{0}"),Pr("\\notag","\\nonumber"),ot({type:"text",names:["\\hline","\\hdashline"],props:{numArgs:0,allowedInText:!0,allowedInMath:!0},handler:function(e,t){throw new n(e.funcName+" valid only within array environment")}});var Jr=Lr;ot({type:"environment",names:["\\begin","\\end"],props:{numArgs:1,argTypes:["text"]},handler:function(e,t){var r=e.parser,a=e.funcName,i=t[0];if("ordgroup"!==i.type)throw new n("Invalid environment name",i);for(var o="",s=0;s<i.body.length;++s)o+=Ut(i.body[s],"textord").text;if("\\begin"===a){if(!Jr.hasOwnProperty(o))throw new n("No such environment: "+o,i);var l=Jr[o],h=r.parseArguments("\\begin{"+o+"}",l),c=h.args,m=h.optArgs,u={mode:r.mode,envName:o,parser:r},p=l.handler(u,c,m);r.expect("\\end",!1);var d=r.nextToken,f=Ut(r.parseFunction(),"environment");if(f.name!==o)throw new n("Mismatch: \\begin{"+o+"} matched by \\end{"+f.name+"}",d);return p}return{type:"environment",mode:r.mode,name:o,nameGroup:i}}});var Qr=function(e,t){var r=e.font,n=t.withFont(r);return wt(e.body,n)},en=function(e,t){var r=e.font,n=t.withFont(r);return Rt(e.body,n)},tn={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak","\\bm":"\\boldsymbol"};ot({type:"font",names:["\\mathrm","\\mathit","\\mathbf","\\mathnormal","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],props:{numArgs:1,allowedInArgument:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=lt(t[0]),i=n;return i in tn&&(i=tn[i]),{type:"font",mode:r.mode,font:i.slice(1),body:a}},htmlBuilder:Qr,mathmlBuilder:en}),ot({type:"mclass",names:["\\boldsymbol","\\bm"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=t[0],a=l.isCharacterBox(n);return{type:"mclass",mode:r.mode,mclass:Qt(n),body:[{type:"font",mode:r.mode,font:"boldsymbol",body:n}],isCharacterBox:a}}}),ot({type:"font",names:["\\rm","\\sf","\\tt","\\bf","\\it","\\cal"],props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=e.breakOnTokenText,i=r.mode,o=r.parseExpression(!0,a);return{type:"font",mode:i,font:"math"+n.slice(1),body:{type:"ordgroup",mode:r.mode,body:o}}},htmlBuilder:Qr,mathmlBuilder:en});var rn=function(e,t){var r=t;return"display"===e?r=r.id>=x.SCRIPT.id?r.text():x.DISPLAY:"text"===e&&r.size===x.DISPLAY.size?r=x.TEXT:"script"===e?r=x.SCRIPT:"scriptscript"===e&&(r=x.SCRIPTSCRIPT),r},nn=function(e,t){var r,n=rn(e.size,t.style),a=n.fracNum(),i=n.fracDen();r=t.havingStyle(a);var o=wt(e.numer,r,t);if(e.continued){var s=8.5/t.fontMetrics().ptPerEm,l=3.5/t.fontMetrics().ptPerEm;o.height=o.height<s?s:o.height,o.depth=o.depth<l?l:o.depth}r=t.havingStyle(i);var h,c,m,u,p,d,f,g,v,y,b=wt(e.denom,r,t);if(e.hasBarLine?(e.barSize?(c=P(e.barSize,t),h=Ke.makeLineSpan("frac-line",t,c)):h=Ke.makeLineSpan("frac-line",t),c=h.height,m=h.height):(h=null,c=0,m=t.fontMetrics().defaultRuleThickness),n.size===x.DISPLAY.size||"display"===e.size?(u=t.fontMetrics().num1,p=c>0?3*m:7*m,d=t.fontMetrics().denom1):(c>0?(u=t.fontMetrics().num2,p=m):(u=t.fontMetrics().num3,p=3*m),d=t.fontMetrics().denom2),h){var w=t.fontMetrics().axisHeight;u-o.depth-(w+.5*c)<p&&(u+=p-(u-o.depth-(w+.5*c))),w-.5*c-(b.height-d)<p&&(d+=p-(w-.5*c-(b.height-d)));var k=-(w-.5*c);f=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:b,shift:d},{type:"elem",elem:h,shift:k},{type:"elem",elem:o,shift:-u}]},t)}else{var S=u-o.depth-(b.height-d);S<p&&(u+=.5*(p-S),d+=.5*(p-S)),f=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:b,shift:d},{type:"elem",elem:o,shift:-u}]},t)}return r=t.havingStyle(n),f.height*=r.sizeMultiplier/t.sizeMultiplier,f.depth*=r.sizeMultiplier/t.sizeMultiplier,g=n.size===x.DISPLAY.size?t.fontMetrics().delim1:n.size===x.SCRIPTSCRIPT.size?t.havingStyle(x.SCRIPT).fontMetrics().delim2:t.fontMetrics().delim2,v=null==e.leftDelim?xt(t,["mopen"]):Nr.customSizedDelim(e.leftDelim,g,!0,t.havingStyle(n),e.mode,["mopen"]),y=e.continued?Ke.makeSpan([]):null==e.rightDelim?xt(t,["mclose"]):Nr.customSizedDelim(e.rightDelim,g,!0,t.havingStyle(n),e.mode,["mclose"]),Ke.makeSpan(["mord"].concat(r.sizingClasses(t)),[v,Ke.makeSpan(["mfrac"],[f]),y],t)},an=function(e,t){var r=new Tt.MathNode("mfrac",[Rt(e.numer,t),Rt(e.denom,t)]);if(e.hasBarLine){if(e.barSize){var n=P(e.barSize,t);r.setAttribute("linethickness",F(n))}}else r.setAttribute("linethickness","0px");var a=rn(e.size,t.style);if(a.size!==t.style.size){r=new Tt.MathNode("mstyle",[r]);var i=a.size===x.DISPLAY.size?"true":"false";r.setAttribute("displaystyle",i),r.setAttribute("scriptlevel","0")}if(null!=e.leftDelim||null!=e.rightDelim){var o=[];if(null!=e.leftDelim){var s=new Tt.MathNode("mo",[new Tt.TextNode(e.leftDelim.replace("\\",""))]);s.setAttribute("fence","true"),o.push(s)}if(o.push(r),null!=e.rightDelim){var l=new Tt.MathNode("mo",[new Tt.TextNode(e.rightDelim.replace("\\",""))]);l.setAttribute("fence","true"),o.push(l)}return Ct(o)}return r};ot({type:"genfrac",names:["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac","\\\\bracefrac","\\\\brackfrac"],props:{numArgs:2,allowedInArgument:!0},handler:function(e,t){var r,n=e.parser,a=e.funcName,i=t[0],o=t[1],s=null,l=null,h="auto";switch(a){case"\\dfrac":case"\\frac":case"\\tfrac":r=!0;break;case"\\\\atopfrac":r=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":r=!1,s="(",l=")";break;case"\\\\bracefrac":r=!1,s="\\{",l="\\}";break;case"\\\\brackfrac":r=!1,s="[",l="]";break;default:throw new Error("Unrecognized genfrac command")}switch(a){case"\\dfrac":case"\\dbinom":h="display";break;case"\\tfrac":case"\\tbinom":h="text"}return{type:"genfrac",mode:n.mode,continued:!1,numer:i,denom:o,hasBarLine:r,leftDelim:s,rightDelim:l,size:h,barSize:null}},htmlBuilder:nn,mathmlBuilder:an}),ot({type:"genfrac",names:["\\cfrac"],props:{numArgs:2},handler:function(e,t){var r=e.parser,n=(e.funcName,t[0]),a=t[1];return{type:"genfrac",mode:r.mode,continued:!0,numer:n,denom:a,hasBarLine:!0,leftDelim:null,rightDelim:null,size:"display",barSize:null}}}),ot({type:"infix",names:["\\over","\\choose","\\atop","\\brace","\\brack"],props:{numArgs:0,infix:!0},handler:function(e){var t,r=e.parser,n=e.funcName,a=e.token;switch(n){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;case"\\atop":t="\\\\atopfrac";break;case"\\brace":t="\\\\bracefrac";break;case"\\brack":t="\\\\brackfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",mode:r.mode,replaceWith:t,token:a}}});var on=["display","text","script","scriptscript"],sn=function(e){var t=null;return e.length>0&&(t="."===(t=e)?null:t),t};ot({type:"genfrac",names:["\\genfrac"],props:{numArgs:6,allowedInArgument:!0,argTypes:["math","math","size","text","math","math"]},handler:function(e,t){var r,n=e.parser,a=t[4],i=t[5],o=lt(t[0]),s="atom"===o.type&&"open"===o.family?sn(o.text):null,l=lt(t[1]),h="atom"===l.type&&"close"===l.family?sn(l.text):null,c=Ut(t[2],"size"),m=null;r=!!c.isBlank||(m=c.value).number>0;var u="auto",p=t[3];if("ordgroup"===p.type){if(p.body.length>0){var d=Ut(p.body[0],"textord");u=on[Number(d.text)]}}else p=Ut(p,"textord"),u=on[Number(p.text)];return{type:"genfrac",mode:n.mode,numer:a,denom:i,continued:!1,hasBarLine:r,barSize:m,leftDelim:s,rightDelim:h,size:u}},htmlBuilder:nn,mathmlBuilder:an}),ot({type:"infix",names:["\\above"],props:{numArgs:1,argTypes:["size"],infix:!0},handler:function(e,t){var r=e.parser,n=(e.funcName,e.token);return{type:"infix",mode:r.mode,replaceWith:"\\\\abovefrac",size:Ut(t[0],"size").value,token:n}}}),ot({type:"genfrac",names:["\\\\abovefrac"],props:{numArgs:3,argTypes:["math","size","math"]},handler:function(e,t){var r=e.parser,n=(e.funcName,t[0]),a=function(e){if(!e)throw new Error("Expected non-null, but got "+String(e));return e}(Ut(t[1],"infix").size),i=t[2],o=a.number>0;return{type:"genfrac",mode:r.mode,numer:n,denom:i,continued:!1,hasBarLine:o,barSize:a,leftDelim:null,rightDelim:null,size:"auto"}},htmlBuilder:nn,mathmlBuilder:an});var ln=function(e,t){var r,n,a=t.style;"supsub"===e.type?(r=e.sup?wt(e.sup,t.havingStyle(a.sup()),t):wt(e.sub,t.havingStyle(a.sub()),t),n=Ut(e.base,"horizBrace")):n=Ut(e,"horizBrace");var i,o=wt(n.base,t.havingBaseStyle(x.DISPLAY)),s=Gt(n,t);if(n.isOver?(i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:o},{type:"kern",size:.1},{type:"elem",elem:s}]},t)).children[0].children[0].children[1].classes.push("svg-align"):(i=Ke.makeVList({positionType:"bottom",positionData:o.depth+.1+s.height,children:[{type:"elem",elem:s},{type:"kern",size:.1},{type:"elem",elem:o}]},t)).children[0].children[0].children[0].classes.push("svg-align"),r){var l=Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t);i=n.isOver?Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:l},{type:"kern",size:.2},{type:"elem",elem:r}]},t):Ke.makeVList({positionType:"bottom",positionData:l.depth+.2+r.height+r.depth,children:[{type:"elem",elem:r},{type:"kern",size:.2},{type:"elem",elem:l}]},t)}return Ke.makeSpan(["mord",n.isOver?"mover":"munder"],[i],t)};ot({type:"horizBrace",names:["\\overbrace","\\underbrace"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName;return{type:"horizBrace",mode:r.mode,label:n,isOver:/^\\over/.test(n),base:t[0]}},htmlBuilder:ln,mathmlBuilder:function(e,t){var r=Ft(e.label);return new Tt.MathNode(e.isOver?"mover":"munder",[Rt(e.base,t),r])}}),ot({type:"href",names:["\\href"],props:{numArgs:2,argTypes:["url","original"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[1],a=Ut(t[0],"url").url;return r.settings.isTrusted({command:"\\href",url:a})?{type:"href",mode:r.mode,href:a,body:ht(n)}:r.formatUnsupportedCmd("\\href")},htmlBuilder:function(e,t){var r=ft(e.body,t,!1);return Ke.makeAnchor(e.href,[],r,t)},mathmlBuilder:function(e,t){var r=It(e.body,t);return r instanceof zt||(r=new zt("mrow",[r])),r.setAttribute("href",e.href),r}}),ot({type:"href",names:["\\url"],props:{numArgs:1,argTypes:["url"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=Ut(t[0],"url").url;if(!r.settings.isTrusted({command:"\\url",url:n}))return r.formatUnsupportedCmd("\\url");for(var a=[],i=0;i<n.length;i++){var o=n[i];"~"===o&&(o="\\textasciitilde"),a.push({type:"textord",mode:"text",text:o})}var s={type:"text",mode:r.mode,font:"\\texttt",body:a};return{type:"href",mode:r.mode,href:n,body:ht(s)}}}),ot({type:"hbox",names:["\\hbox"],props:{numArgs:1,argTypes:["text"],allowedInText:!0,primitive:!0},handler:function(e,t){return{type:"hbox",mode:e.parser.mode,body:ht(t[0])}},htmlBuilder:function(e,t){var r=ft(e.body,t,!1);return Ke.makeFragment(r)},mathmlBuilder:function(e,t){return new Tt.MathNode("mrow",qt(e.body,t))}}),ot({type:"html",names:["\\htmlClass","\\htmlId","\\htmlStyle","\\htmlData"],props:{numArgs:2,argTypes:["raw","original"],allowedInText:!0},handler:function(e,t){var r,a=e.parser,i=e.funcName,o=(e.token,Ut(t[0],"raw").string),s=t[1];a.settings.strict&&a.settings.reportNonstrict("htmlExtension","HTML extension is disabled on strict mode");var l={};switch(i){case"\\htmlClass":l.class=o,r={command:"\\htmlClass",class:o};break;case"\\htmlId":l.id=o,r={command:"\\htmlId",id:o};break;case"\\htmlStyle":l.style=o,r={command:"\\htmlStyle",style:o};break;case"\\htmlData":for(var h=o.split(","),c=0;c<h.length;c++){var m=h[c].split("=");if(2!==m.length)throw new n("Error parsing key-value for \\htmlData");l["data-"+m[0].trim()]=m[1].trim()}r={command:"\\htmlData",attributes:l};break;default:throw new Error("Unrecognized html command")}return a.settings.isTrusted(r)?{type:"html",mode:a.mode,attributes:l,body:ht(s)}:a.formatUnsupportedCmd(i)},htmlBuilder:function(e,t){var r=ft(e.body,t,!1),n=["enclosing"];e.attributes.class&&n.push.apply(n,e.attributes.class.trim().split(/\s+/));var a=Ke.makeSpan(n,r,t);for(var i in e.attributes)"class"!==i&&e.attributes.hasOwnProperty(i)&&a.setAttribute(i,e.attributes[i]);return a},mathmlBuilder:function(e,t){return It(e.body,t)}}),ot({type:"htmlmathml",names:["\\html@mathml"],props:{numArgs:2,allowedInText:!0},handler:function(e,t){return{type:"htmlmathml",mode:e.parser.mode,html:ht(t[0]),mathml:ht(t[1])}},htmlBuilder:function(e,t){var r=ft(e.html,t,!1);return Ke.makeFragment(r)},mathmlBuilder:function(e,t){return It(e.mathml,t)}});var hn=function(e){if(/^[-+]? *(\d+(\.\d*)?|\.\d+)$/.test(e))return{number:+e,unit:"bp"};var t=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(e);if(!t)throw new n("Invalid size: '"+e+"' in \\includegraphics");var r={number:+(t[1]+t[2]),unit:t[3]};if(!V(r))throw new n("Invalid unit: '"+r.unit+"' in \\includegraphics.");return r};ot({type:"includegraphics",names:["\\includegraphics"],props:{numArgs:1,numOptionalArgs:1,argTypes:["raw","url"],allowedInText:!1},handler:function(e,t,r){var a=e.parser,i={number:0,unit:"em"},o={number:.9,unit:"em"},s={number:0,unit:"em"},l="";if(r[0])for(var h=Ut(r[0],"raw").string.split(","),c=0;c<h.length;c++){var m=h[c].split("=");if(2===m.length){var u=m[1].trim();switch(m[0].trim()){case"alt":l=u;break;case"width":i=hn(u);break;case"height":o=hn(u);break;case"totalheight":s=hn(u);break;default:throw new n("Invalid key: '"+m[0]+"' in \\includegraphics.")}}}var p=Ut(t[0],"url").url;return""===l&&(l=(l=(l=p).replace(/^.*[\\/]/,"")).substring(0,l.lastIndexOf("."))),a.settings.isTrusted({command:"\\includegraphics",url:p})?{type:"includegraphics",mode:a.mode,alt:l,width:i,height:o,totalheight:s,src:p}:a.formatUnsupportedCmd("\\includegraphics")},htmlBuilder:function(e,t){var r=P(e.height,t),n=0;e.totalheight.number>0&&(n=P(e.totalheight,t)-r);var a=0;e.width.number>0&&(a=P(e.width,t));var i={height:F(r+n)};a>0&&(i.width=F(a)),n>0&&(i.verticalAlign=F(-n));var o=new j(e.src,e.alt,i);return o.height=r,o.depth=n,o},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mglyph",[]);r.setAttribute("alt",e.alt);var n=P(e.height,t),a=0;if(e.totalheight.number>0&&(a=P(e.totalheight,t)-n,r.setAttribute("valign",F(-a))),r.setAttribute("height",F(n+a)),e.width.number>0){var i=P(e.width,t);r.setAttribute("width",F(i))}return r.setAttribute("src",e.src),r}}),ot({type:"kern",names:["\\kern","\\mkern","\\hskip","\\mskip"],props:{numArgs:1,argTypes:["size"],primitive:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=Ut(t[0],"size");if(r.settings.strict){var i="m"===n[1],o="mu"===a.value.unit;i?(o||r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" supports only mu units, not "+a.value.unit+" units"),"math"!==r.mode&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" works only in math mode")):o&&r.settings.reportNonstrict("mathVsTextUnits","LaTeX's "+n+" doesn't support mu units")}return{type:"kern",mode:r.mode,dimension:a.value}},htmlBuilder:function(e,t){return Ke.makeGlue(e.dimension,t)},mathmlBuilder:function(e,t){var r=P(e.dimension,t);return new Tt.SpaceNode(r)}}),ot({type:"lap",names:["\\mathllap","\\mathrlap","\\mathclap"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"lap",mode:r.mode,alignment:n.slice(5),body:a}},htmlBuilder:function(e,t){var r;"clap"===e.alignment?(r=Ke.makeSpan([],[wt(e.body,t)]),r=Ke.makeSpan(["inner"],[r],t)):r=Ke.makeSpan(["inner"],[wt(e.body,t)]);var n=Ke.makeSpan(["fix"],[]),a=Ke.makeSpan([e.alignment],[r,n],t),i=Ke.makeSpan(["strut"]);return i.style.height=F(a.height+a.depth),a.depth&&(i.style.verticalAlign=F(-a.depth)),a.children.unshift(i),a=Ke.makeSpan(["thinbox"],[a],t),Ke.makeSpan(["mord","vbox"],[a],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);if("rlap"!==e.alignment){var n="llap"===e.alignment?"-1":"-0.5";r.setAttribute("lspace",n+"width")}return r.setAttribute("width","0px"),r}}),ot({type:"styling",names:["\\(","$"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){var r=e.funcName,n=e.parser,a=n.mode;n.switchMode("math");var i="\\("===r?"\\)":"$",o=n.parseExpression(!1,i);return n.expect(i),n.switchMode(a),{type:"styling",mode:n.mode,style:"text",body:o}}}),ot({type:"text",names:["\\)","\\]"],props:{numArgs:0,allowedInText:!0,allowedInMath:!1},handler:function(e,t){throw new n("Mismatched "+e.funcName)}});var cn=function(e,t){switch(t.style.size){case x.DISPLAY.size:return e.display;case x.TEXT.size:return e.text;case x.SCRIPT.size:return e.script;case x.SCRIPTSCRIPT.size:return e.scriptscript;default:return e.text}};ot({type:"mathchoice",names:["\\mathchoice"],props:{numArgs:4,primitive:!0},handler:function(e,t){return{type:"mathchoice",mode:e.parser.mode,display:ht(t[0]),text:ht(t[1]),script:ht(t[2]),scriptscript:ht(t[3])}},htmlBuilder:function(e,t){var r=cn(e,t),n=ft(r,t,!1);return Ke.makeFragment(n)},mathmlBuilder:function(e,t){var r=cn(e,t);return It(r,t)}});var mn=function(e,t,r,n,a,i,o){e=Ke.makeSpan([],[e]);var s,h,c,m=r&&l.isCharacterBox(r);if(t){var u=wt(t,n.havingStyle(a.sup()),n);h={elem:u,kern:Math.max(n.fontMetrics().bigOpSpacing1,n.fontMetrics().bigOpSpacing3-u.depth)}}if(r){var p=wt(r,n.havingStyle(a.sub()),n);s={elem:p,kern:Math.max(n.fontMetrics().bigOpSpacing2,n.fontMetrics().bigOpSpacing4-p.height)}}if(h&&s){var d=n.fontMetrics().bigOpSpacing5+s.elem.height+s.elem.depth+s.kern+e.depth+o;c=Ke.makeVList({positionType:"bottom",positionData:d,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:F(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:F(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}else if(s){var f=e.height-o;c=Ke.makeVList({positionType:"top",positionData:f,children:[{type:"kern",size:n.fontMetrics().bigOpSpacing5},{type:"elem",elem:s.elem,marginLeft:F(-i)},{type:"kern",size:s.kern},{type:"elem",elem:e}]},n)}else{if(!h)return e;var g=e.depth+o;c=Ke.makeVList({positionType:"bottom",positionData:g,children:[{type:"elem",elem:e},{type:"kern",size:h.kern},{type:"elem",elem:h.elem,marginLeft:F(i)},{type:"kern",size:n.fontMetrics().bigOpSpacing5}]},n)}var v=[c];if(s&&0!==i&&!m){var y=Ke.makeSpan(["mspace"],[],n);y.style.marginRight=F(i),v.unshift(y)}return Ke.makeSpan(["mop","op-limits"],v,n)},un=["\\smallint"],pn=function(e,t){var r,n,a,i=!1;"supsub"===e.type?(r=e.sup,n=e.sub,a=Ut(e.base,"op"),i=!0):a=Ut(e,"op");var o,s=t.style,h=!1;if(s.size===x.DISPLAY.size&&a.symbol&&!l.contains(un,a.name)&&(h=!0),a.symbol){var c=h?"Size2-Regular":"Size1-Regular",m="";if("\\oiint"!==a.name&&"\\oiiint"!==a.name||(m=a.name.slice(1),a.name="oiint"===m?"\\iint":"\\iiint"),o=Ke.makeSymbol(a.name,c,"math",t,["mop","op-symbol",h?"large-op":"small-op"]),m.length>0){var u=o.italic,p=Ke.staticSvg(m+"Size"+(h?"2":"1"),t);o=Ke.makeVList({positionType:"individualShift",children:[{type:"elem",elem:o,shift:0},{type:"elem",elem:p,shift:h?.08:0}]},t),a.name="\\"+m,o.classes.unshift("mop"),o.italic=u}}else if(a.body){var d=ft(a.body,t,!0);1===d.length&&d[0]instanceof Z?(o=d[0]).classes[0]="mop":o=Ke.makeSpan(["mop"],d,t)}else{for(var f=[],g=1;g<a.name.length;g++)f.push(Ke.mathsym(a.name[g],a.mode,t));o=Ke.makeSpan(["mop"],f,t)}var v=0,y=0;return(o instanceof Z||"\\oiint"===a.name||"\\oiiint"===a.name)&&!a.suppressBaseShift&&(v=(o.height-o.depth)/2-t.fontMetrics().axisHeight,y=o.italic),i?mn(o,r,n,t,s,y,v):(v&&(o.style.position="relative",o.style.top=F(v)),o)},dn=function(e,t){var r;if(e.symbol)r=new zt("mo",[Bt(e.name,e.mode)]),l.contains(un,e.name)&&r.setAttribute("largeop","false");else if(e.body)r=new zt("mo",qt(e.body,t));else{r=new zt("mi",[new At(e.name.slice(1))]);var n=new zt("mo",[Bt("\u2061","text")]);r=e.parentIsSupSub?new zt("mrow",[r,n]):Mt([r,n])}return r},fn={"\u220f":"\\prod","\u2210":"\\coprod","\u2211":"\\sum","\u22c0":"\\bigwedge","\u22c1":"\\bigvee","\u22c2":"\\bigcap","\u22c3":"\\bigcup","\u2a00":"\\bigodot","\u2a01":"\\bigoplus","\u2a02":"\\bigotimes","\u2a04":"\\biguplus","\u2a06":"\\bigsqcup"};ot({type:"op",names:["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint","\u220f","\u2210","\u2211","\u22c0","\u22c1","\u22c2","\u22c3","\u2a00","\u2a01","\u2a02","\u2a04","\u2a06"],props:{numArgs:0},handler:function(e,t){var r=e.parser,n=e.funcName;return 1===n.length&&(n=fn[n]),{type:"op",mode:r.mode,limits:!0,parentIsSupSub:!1,symbol:!0,name:n}},htmlBuilder:pn,mathmlBuilder:dn}),ot({type:"op",names:["\\mathop"],props:{numArgs:1,primitive:!0},handler:function(e,t){var r=e.parser,n=t[0];return{type:"op",mode:r.mode,limits:!1,parentIsSupSub:!1,symbol:!1,body:ht(n)}},htmlBuilder:pn,mathmlBuilder:dn});var gn={"\u222b":"\\int","\u222c":"\\iint","\u222d":"\\iiint","\u222e":"\\oint","\u222f":"\\oiint","\u2230":"\\oiiint"};ot({type:"op",names:["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],props:{numArgs:0},handler:function(e){var t=e.parser,r=e.funcName;return{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:pn,mathmlBuilder:dn}),ot({type:"op",names:["\\det","\\gcd","\\inf","\\lim","\\max","\\min","\\Pr","\\sup"],props:{numArgs:0},handler:function(e){var t=e.parser,r=e.funcName;return{type:"op",mode:t.mode,limits:!0,parentIsSupSub:!1,symbol:!1,name:r}},htmlBuilder:pn,mathmlBuilder:dn}),ot({type:"op",names:["\\int","\\iint","\\iiint","\\oint","\\oiint","\\oiiint","\u222b","\u222c","\u222d","\u222e","\u222f","\u2230"],props:{numArgs:0},handler:function(e){var t=e.parser,r=e.funcName;return 1===r.length&&(r=gn[r]),{type:"op",mode:t.mode,limits:!1,parentIsSupSub:!1,symbol:!0,name:r}},htmlBuilder:pn,mathmlBuilder:dn});var vn=function(e,t){var r,n,a,i,o=!1;if("supsub"===e.type?(r=e.sup,n=e.sub,a=Ut(e.base,"operatorname"),o=!0):a=Ut(e,"operatorname"),a.body.length>0){for(var s=a.body.map((function(e){var t=e.text;return"string"==typeof t?{type:"textord",mode:e.mode,text:t}:e})),l=ft(s,t.withFont("mathrm"),!0),h=0;h<l.length;h++){var c=l[h];c instanceof Z&&(c.text=c.text.replace(/\u2212/,"-").replace(/\u2217/,"*"))}i=Ke.makeSpan(["mop"],l,t)}else i=Ke.makeSpan(["mop"],[],t);return o?mn(i,r,n,t,t.style,0,0):i};function yn(e,t,r){for(var n=ft(e,t,!1),a=t.sizeMultiplier/r.sizeMultiplier,i=0;i<n.length;i++){var o=n[i].classes.indexOf("sizing");o<0?Array.prototype.push.apply(n[i].classes,t.sizingClasses(r)):n[i].classes[o+1]==="reset-size"+t.size&&(n[i].classes[o+1]="reset-size"+r.size),n[i].height*=a,n[i].depth*=a}return Ke.makeFragment(n)}ot({type:"operatorname",names:["\\operatorname@","\\operatornamewithlimits"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"operatorname",mode:r.mode,body:ht(a),alwaysHandleSupSub:"\\operatornamewithlimits"===n,limits:!1,parentIsSupSub:!1}},htmlBuilder:vn,mathmlBuilder:function(e,t){for(var r=qt(e.body,t.withFont("mathrm")),n=!0,a=0;a<r.length;a++){var i=r[a];if(i instanceof Tt.SpaceNode);else if(i instanceof Tt.MathNode)switch(i.type){case"mi":case"mn":case"ms":case"mspace":case"mtext":break;case"mo":var o=i.children[0];1===i.children.length&&o instanceof Tt.TextNode?o.text=o.text.replace(/\u2212/,"-").replace(/\u2217/,"*"):n=!1;break;default:n=!1}else n=!1}if(n){var s=r.map((function(e){return e.toText()})).join("");r=[new Tt.TextNode(s)]}var l=new Tt.MathNode("mi",r);l.setAttribute("mathvariant","normal");var h=new Tt.MathNode("mo",[Bt("\u2061","text")]);return e.parentIsSupSub?new Tt.MathNode("mrow",[l,h]):Tt.newDocumentFragment([l,h])}}),Pr("\\operatorname","\\@ifstar\\operatornamewithlimits\\operatorname@"),st({type:"ordgroup",htmlBuilder:function(e,t){return e.semisimple?Ke.makeFragment(ft(e.body,t,!1)):Ke.makeSpan(["mord"],ft(e.body,t,!0),t)},mathmlBuilder:function(e,t){return It(e.body,t,!0)}}),ot({type:"overline",names:["\\overline"],props:{numArgs:1},handler:function(e,t){var r=e.parser,n=t[0];return{type:"overline",mode:r.mode,body:n}},htmlBuilder:function(e,t){var r=wt(e.body,t.havingCrampedStyle()),n=Ke.makeLineSpan("overline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r},{type:"kern",size:3*a},{type:"elem",elem:n},{type:"kern",size:a}]},t);return Ke.makeSpan(["mord","overline"],[i],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var n=new Tt.MathNode("mover",[Rt(e.body,t),r]);return n.setAttribute("accent","true"),n}}),ot({type:"phantom",names:["\\phantom"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[0];return{type:"phantom",mode:r.mode,body:ht(n)}},htmlBuilder:function(e,t){var r=ft(e.body,t.withPhantom(),!1);return Ke.makeFragment(r)},mathmlBuilder:function(e,t){var r=qt(e.body,t);return new Tt.MathNode("mphantom",r)}}),ot({type:"hphantom",names:["\\hphantom"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[0];return{type:"hphantom",mode:r.mode,body:n}},htmlBuilder:function(e,t){var r=Ke.makeSpan([],[wt(e.body,t.withPhantom())]);if(r.height=0,r.depth=0,r.children)for(var n=0;n<r.children.length;n++)r.children[n].height=0,r.children[n].depth=0;return r=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},t),Ke.makeSpan(["mord"],[r],t)},mathmlBuilder:function(e,t){var r=qt(ht(e.body),t),n=new Tt.MathNode("mphantom",r),a=new Tt.MathNode("mpadded",[n]);return a.setAttribute("height","0px"),a.setAttribute("depth","0px"),a}}),ot({type:"vphantom",names:["\\vphantom"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){var r=e.parser,n=t[0];return{type:"vphantom",mode:r.mode,body:n}},htmlBuilder:function(e,t){var r=Ke.makeSpan(["inner"],[wt(e.body,t.withPhantom())]),n=Ke.makeSpan(["fix"],[]);return Ke.makeSpan(["mord","rlap"],[r,n],t)},mathmlBuilder:function(e,t){var r=qt(ht(e.body),t),n=new Tt.MathNode("mphantom",r),a=new Tt.MathNode("mpadded",[n]);return a.setAttribute("width","0px"),a}}),ot({type:"raisebox",names:["\\raisebox"],props:{numArgs:2,argTypes:["size","hbox"],allowedInText:!0},handler:function(e,t){var r=e.parser,n=Ut(t[0],"size").value,a=t[1];return{type:"raisebox",mode:r.mode,dy:n,body:a}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=P(e.dy,t);return Ke.makeVList({positionType:"shift",positionData:-n,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]),n=e.dy.number+e.dy.unit;return r.setAttribute("voffset",n),r}}),ot({type:"internal",names:["\\relax"],props:{numArgs:0,allowedInText:!0},handler:function(e){return{type:"internal",mode:e.parser.mode}}}),ot({type:"rule",names:["\\rule"],props:{numArgs:2,numOptionalArgs:1,argTypes:["size","size","size"]},handler:function(e,t,r){var n=e.parser,a=r[0],i=Ut(t[0],"size"),o=Ut(t[1],"size");return{type:"rule",mode:n.mode,shift:a&&Ut(a,"size").value,width:i.value,height:o.value}},htmlBuilder:function(e,t){var r=Ke.makeSpan(["mord","rule"],[],t),n=P(e.width,t),a=P(e.height,t),i=e.shift?P(e.shift,t):0;return r.style.borderRightWidth=F(n),r.style.borderTopWidth=F(a),r.style.bottom=F(i),r.width=n,r.height=a+i,r.depth=-i,r.maxFontSize=1.125*a*t.sizeMultiplier,r},mathmlBuilder:function(e,t){var r=P(e.width,t),n=P(e.height,t),a=e.shift?P(e.shift,t):0,i=t.color&&t.getColor()||"black",o=new Tt.MathNode("mspace");o.setAttribute("mathbackground",i),o.setAttribute("width",F(r)),o.setAttribute("height",F(n));var s=new Tt.MathNode("mpadded",[o]);return a>=0?s.setAttribute("height",F(a)):(s.setAttribute("height",F(a)),s.setAttribute("depth",F(-a))),s.setAttribute("voffset",F(a)),s}});var bn=["\\tiny","\\sixptsize","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"];ot({type:"sizing",names:bn,props:{numArgs:0,allowedInText:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!1,r);return{type:"sizing",mode:a.mode,size:bn.indexOf(n)+1,body:i}},htmlBuilder:function(e,t){var r=t.havingSize(e.size);return yn(e.body,r,t)},mathmlBuilder:function(e,t){var r=t.havingSize(e.size),n=qt(e.body,r),a=new Tt.MathNode("mstyle",n);return a.setAttribute("mathsize",F(r.sizeMultiplier)),a}}),ot({type:"smash",names:["\\smash"],props:{numArgs:1,numOptionalArgs:1,allowedInText:!0},handler:function(e,t,r){var n=e.parser,a=!1,i=!1,o=r[0]&&Ut(r[0],"ordgroup");if(o)for(var s="",l=0;l<o.body.length;++l){if("t"===(s=o.body[l].text))a=!0;else{if("b"!==s){a=!1,i=!1;break}i=!0}}else a=!0,i=!0;var h=t[0];return{type:"smash",mode:n.mode,body:h,smashHeight:a,smashDepth:i}},htmlBuilder:function(e,t){var r=Ke.makeSpan([],[wt(e.body,t)]);if(!e.smashHeight&&!e.smashDepth)return r;if(e.smashHeight&&(r.height=0,r.children))for(var n=0;n<r.children.length;n++)r.children[n].height=0;if(e.smashDepth&&(r.depth=0,r.children))for(var a=0;a<r.children.length;a++)r.children[a].depth=0;var i=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord"],[i],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mpadded",[Rt(e.body,t)]);return e.smashHeight&&r.setAttribute("height","0px"),e.smashDepth&&r.setAttribute("depth","0px"),r}}),ot({type:"sqrt",names:["\\sqrt"],props:{numArgs:1,numOptionalArgs:1},handler:function(e,t,r){var n=e.parser,a=r[0],i=t[0];return{type:"sqrt",mode:n.mode,body:i,index:a}},htmlBuilder:function(e,t){var r=wt(e.body,t.havingCrampedStyle());0===r.height&&(r.height=t.fontMetrics().xHeight),r=Ke.wrapFragment(r,t);var n=t.fontMetrics().defaultRuleThickness,a=n;t.style.id<x.TEXT.id&&(a=t.fontMetrics().xHeight);var i=n+a/4,o=r.height+r.depth+i+n,s=Nr.sqrtImage(o,t),l=s.span,h=s.ruleWidth,c=s.advanceWidth,m=l.height-h;m>r.height+r.depth+i&&(i=(i+m-r.height-r.depth)/2);var u=l.height-r.height-i-h;r.style.paddingLeft=F(c);var p=Ke.makeVList({positionType:"firstBaseline",children:[{type:"elem",elem:r,wrapperClasses:["svg-align"]},{type:"kern",size:-(r.height+u)},{type:"elem",elem:l},{type:"kern",size:h}]},t);if(e.index){var d=t.havingStyle(x.SCRIPTSCRIPT),f=wt(e.index,d,t),g=.6*(p.height-p.depth),v=Ke.makeVList({positionType:"shift",positionData:-g,children:[{type:"elem",elem:f}]},t),y=Ke.makeSpan(["root"],[v]);return Ke.makeSpan(["mord","sqrt"],[y,p],t)}return Ke.makeSpan(["mord","sqrt"],[p],t)},mathmlBuilder:function(e,t){var r=e.body,n=e.index;return n?new Tt.MathNode("mroot",[Rt(r,t),Rt(n,t)]):new Tt.MathNode("msqrt",[Rt(r,t)])}});var xn={display:x.DISPLAY,text:x.TEXT,script:x.SCRIPT,scriptscript:x.SCRIPTSCRIPT};ot({type:"styling",names:["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],props:{numArgs:0,allowedInText:!0,primitive:!0},handler:function(e,t){var r=e.breakOnTokenText,n=e.funcName,a=e.parser,i=a.parseExpression(!0,r),o=n.slice(1,n.length-5);return{type:"styling",mode:a.mode,style:o,body:i}},htmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r).withFont("");return yn(e.body,n,t)},mathmlBuilder:function(e,t){var r=xn[e.style],n=t.havingStyle(r),a=qt(e.body,n),i=new Tt.MathNode("mstyle",a),o={display:["0","true"],text:["0","false"],script:["1","false"],scriptscript:["2","false"]}[e.style];return i.setAttribute("scriptlevel",o[0]),i.setAttribute("displaystyle",o[1]),i}});var wn=function(e,t){var r=e.base;return r?"op"===r.type?r.limits&&(t.style.size===x.DISPLAY.size||r.alwaysHandleSupSub)?pn:null:"operatorname"===r.type?r.alwaysHandleSupSub&&(t.style.size===x.DISPLAY.size||r.limits)?vn:null:"accent"===r.type?l.isCharacterBox(r.base)?Wt:null:"horizBrace"===r.type&&!e.sub===r.isOver?ln:null:null};st({type:"supsub",htmlBuilder:function(e,t){var r=wn(e,t);if(r)return r(e,t);var n,a,i,o=e.base,s=e.sup,h=e.sub,c=wt(o,t),m=t.fontMetrics(),u=0,p=0,d=o&&l.isCharacterBox(o);if(s){var f=t.havingStyle(t.style.sup());n=wt(s,f,t),d||(u=c.height-f.fontMetrics().supDrop*f.sizeMultiplier/t.sizeMultiplier)}if(h){var g=t.havingStyle(t.style.sub());a=wt(h,g,t),d||(p=c.depth+g.fontMetrics().subDrop*g.sizeMultiplier/t.sizeMultiplier)}i=t.style===x.DISPLAY?m.sup1:t.style.cramped?m.sup3:m.sup2;var v,y=t.sizeMultiplier,b=F(.5/m.ptPerEm/y),w=null;if(a){var k=e.base&&"op"===e.base.type&&e.base.name&&("\\oiint"===e.base.name||"\\oiiint"===e.base.name);(c instanceof Z||k)&&(w=F(-c.italic))}if(n&&a){u=Math.max(u,i,n.depth+.25*m.xHeight),p=Math.max(p,m.sub2);var S=4*m.defaultRuleThickness;if(u-n.depth-(a.height-p)<S){p=S-(u-n.depth)+a.height;var M=.8*m.xHeight-(u-n.depth);M>0&&(u+=M,p-=M)}var z=[{type:"elem",elem:a,shift:p,marginRight:b,marginLeft:w},{type:"elem",elem:n,shift:-u,marginRight:b}];v=Ke.makeVList({positionType:"individualShift",children:z},t)}else if(a){p=Math.max(p,m.sub1,a.height-.8*m.xHeight);var A=[{type:"elem",elem:a,marginLeft:w,marginRight:b}];v=Ke.makeVList({positionType:"shift",positionData:p,children:A},t)}else{if(!n)throw new Error("supsub must have either sup or sub.");u=Math.max(u,i,n.depth+.25*m.xHeight),v=Ke.makeVList({positionType:"shift",positionData:-u,children:[{type:"elem",elem:n,marginRight:b}]},t)}var T=bt(c,"right")||"mord";return Ke.makeSpan([T],[c,Ke.makeSpan(["msupsub"],[v])],t)},mathmlBuilder:function(e,t){var r,n=!1;e.base&&"horizBrace"===e.base.type&&!!e.sup===e.base.isOver&&(n=!0,r=e.base.isOver),!e.base||"op"!==e.base.type&&"operatorname"!==e.base.type||(e.base.parentIsSupSub=!0);var a,i=[Rt(e.base,t)];if(e.sub&&i.push(Rt(e.sub,t)),e.sup&&i.push(Rt(e.sup,t)),n)a=r?"mover":"munder";else if(e.sub)if(e.sup){var o=e.base;a=o&&"op"===o.type&&o.limits&&t.style===x.DISPLAY||o&&"operatorname"===o.type&&o.alwaysHandleSupSub&&(t.style===x.DISPLAY||o.limits)?"munderover":"msubsup"}else{var s=e.base;a=s&&"op"===s.type&&s.limits&&(t.style===x.DISPLAY||s.alwaysHandleSupSub)||s&&"operatorname"===s.type&&s.alwaysHandleSupSub&&(s.limits||t.style===x.DISPLAY)?"munder":"msub"}else{var l=e.base;a=l&&"op"===l.type&&l.limits&&(t.style===x.DISPLAY||l.alwaysHandleSupSub)||l&&"operatorname"===l.type&&l.alwaysHandleSupSub&&(l.limits||t.style===x.DISPLAY)?"mover":"msup"}return new Tt.MathNode(a,i)}}),st({type:"atom",htmlBuilder:function(e,t){return Ke.mathsym(e.text,e.mode,t,["m"+e.family])},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[Bt(e.text,e.mode)]);if("bin"===e.family){var n=Nt(e,t);"bold-italic"===n&&r.setAttribute("mathvariant",n)}else"punct"===e.family?r.setAttribute("separator","true"):"open"!==e.family&&"close"!==e.family||r.setAttribute("stretchy","false");return r}});var kn={mi:"italic",mn:"normal",mtext:"normal"};st({type:"mathord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"mathord")},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mi",[Bt(e.text,e.mode,t)]),n=Nt(e,t)||"italic";return n!==kn[r.type]&&r.setAttribute("mathvariant",n),r}}),st({type:"textord",htmlBuilder:function(e,t){return Ke.makeOrd(e,t,"textord")},mathmlBuilder:function(e,t){var r,n=Bt(e.text,e.mode,t),a=Nt(e,t)||"normal";return r="text"===e.mode?new Tt.MathNode("mtext",[n]):/[0-9]/.test(e.text)?new Tt.MathNode("mn",[n]):"\\prime"===e.text?new Tt.MathNode("mo",[n]):new Tt.MathNode("mi",[n]),a!==kn[r.type]&&r.setAttribute("mathvariant",a),r}});var Sn={"\\nobreak":"nobreak","\\allowbreak":"allowbreak"},Mn={" ":{},"\\ ":{},"~":{className:"nobreak"},"\\space":{},"\\nobreakspace":{className:"nobreak"}};st({type:"spacing",htmlBuilder:function(e,t){if(Mn.hasOwnProperty(e.text)){var r=Mn[e.text].className||"";if("text"===e.mode){var a=Ke.makeOrd(e,t,"textord");return a.classes.push(r),a}return Ke.makeSpan(["mspace",r],[Ke.mathsym(e.text,e.mode,t)],t)}if(Sn.hasOwnProperty(e.text))return Ke.makeSpan(["mspace",Sn[e.text]],[],t);throw new n('Unknown type of space "'+e.text+'"')},mathmlBuilder:function(e,t){if(!Mn.hasOwnProperty(e.text)){if(Sn.hasOwnProperty(e.text))return new Tt.MathNode("mspace");throw new n('Unknown type of space "'+e.text+'"')}return new Tt.MathNode("mtext",[new Tt.TextNode("\xa0")])}});var zn=function(){var e=new Tt.MathNode("mtd",[]);return e.setAttribute("width","50%"),e};st({type:"tag",mathmlBuilder:function(e,t){var r=new Tt.MathNode("mtable",[new Tt.MathNode("mtr",[zn(),new Tt.MathNode("mtd",[It(e.body,t)]),zn(),new Tt.MathNode("mtd",[It(e.tag,t)])])]);return r.setAttribute("width","100%"),r}});var An={"\\text":void 0,"\\textrm":"textrm","\\textsf":"textsf","\\texttt":"texttt","\\textnormal":"textrm"},Tn={"\\textbf":"textbf","\\textmd":"textmd"},Bn={"\\textit":"textit","\\textup":"textup"},Cn=function(e,t){var r=e.font;return r?An[r]?t.withTextFontFamily(An[r]):Tn[r]?t.withTextFontWeight(Tn[r]):t.withTextFontShape(Bn[r]):t};ot({type:"text",names:["\\text","\\textrm","\\textsf","\\texttt","\\textnormal","\\textbf","\\textmd","\\textit","\\textup"],props:{numArgs:1,argTypes:["text"],allowedInArgument:!0,allowedInText:!0},handler:function(e,t){var r=e.parser,n=e.funcName,a=t[0];return{type:"text",mode:r.mode,body:ht(a),font:n}},htmlBuilder:function(e,t){var r=Cn(e,t),n=ft(e.body,r,!0);return Ke.makeSpan(["mord","text"],n,r)},mathmlBuilder:function(e,t){var r=Cn(e,t);return It(e.body,r)}}),ot({type:"underline",names:["\\underline"],props:{numArgs:1,allowedInText:!0},handler:function(e,t){return{type:"underline",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=Ke.makeLineSpan("underline-line",t),a=t.fontMetrics().defaultRuleThickness,i=Ke.makeVList({positionType:"top",positionData:r.height,children:[{type:"kern",size:a},{type:"elem",elem:n},{type:"kern",size:3*a},{type:"elem",elem:r}]},t);return Ke.makeSpan(["mord","underline"],[i],t)},mathmlBuilder:function(e,t){var r=new Tt.MathNode("mo",[new Tt.TextNode("\u203e")]);r.setAttribute("stretchy","true");var n=new Tt.MathNode("munder",[Rt(e.body,t),r]);return n.setAttribute("accentunder","true"),n}}),ot({type:"vcenter",names:["\\vcenter"],props:{numArgs:1,argTypes:["original"],allowedInText:!1},handler:function(e,t){return{type:"vcenter",mode:e.parser.mode,body:t[0]}},htmlBuilder:function(e,t){var r=wt(e.body,t),n=t.fontMetrics().axisHeight,a=.5*(r.height-n-(r.depth+n));return Ke.makeVList({positionType:"shift",positionData:a,children:[{type:"elem",elem:r}]},t)},mathmlBuilder:function(e,t){return new Tt.MathNode("mpadded",[Rt(e.body,t)],["vcenter"])}}),ot({type:"verb",names:["\\verb"],props:{numArgs:0,allowedInText:!0},handler:function(e,t,r){throw new n("\\verb ended by end of line instead of matching delimiter")},htmlBuilder:function(e,t){for(var r=Nn(e),n=[],a=t.havingStyle(t.style.text()),i=0;i<r.length;i++){var o=r[i];"~"===o&&(o="\\textasciitilde"),n.push(Ke.makeSymbol(o,"Typewriter-Regular",e.mode,a,["mord","texttt"]))}return Ke.makeSpan(["mord","text"].concat(a.sizingClasses(t)),Ke.tryCombineChars(n),a)},mathmlBuilder:function(e,t){var r=new Tt.TextNode(Nn(e)),n=new Tt.MathNode("mtext",[r]);return n.setAttribute("mathvariant","monospace"),n}});var Nn=function(e){return e.body.replace(/ /g,e.star?"\u2423":"\xa0")},qn=nt,In=new RegExp("[\u0300-\u036f]+$"),Rn=function(){function e(e,t){this.input=void 0,this.settings=void 0,this.tokenRegex=void 0,this.catcodes=void 0,this.input=e,this.settings=t,this.tokenRegex=new RegExp("([ \r\n\t]+)|\\\\(\n|[ \r\t]+\n?)[ \r\t]*|([!-\\[\\]-\u2027\u202a-\ud7ff\uf900-\uffff][\u0300-\u036f]*|[\ud800-\udbff][\udc00-\udfff][\u0300-\u036f]*|\\\\verb\\*([^]).*?\\4|\\\\verb([^*a-zA-Z]).*?\\5|(\\\\[a-zA-Z@]+)[ \r\n\t]*|\\\\[^\ud800-\udfff])","g"),this.catcodes={"%":14,"~":13}}var t=e.prototype;return t.setCatcode=function(e,t){this.catcodes[e]=t},t.lex=function(){var e=this.input,t=this.tokenRegex.lastIndex;if(t===e.length)return new Gr("EOF",new Fr(this,t,t));var r=this.tokenRegex.exec(e);if(null===r||r.index!==t)throw new n("Unexpected character: '"+e[t]+"'",new Gr(e[t],new Fr(this,t,t+1)));var a=r[6]||r[3]||(r[2]?"\\ ":" ");if(14===this.catcodes[a]){var i=e.indexOf("\n",this.tokenRegex.lastIndex);return-1===i?(this.tokenRegex.lastIndex=e.length,this.settings.reportNonstrict("commentAtEnd","% comment has no terminating newline; LaTeX would fail because of commenting the end of math mode (e.g. $)")):this.tokenRegex.lastIndex=i+1,this.lex()}return new Gr(a,new Fr(this,t,this.tokenRegex.lastIndex))},e}(),Hn=function(){function e(e,t){void 0===e&&(e={}),void 0===t&&(t={}),this.current=void 0,this.builtins=void 0,this.undefStack=void 0,this.current=t,this.builtins=e,this.undefStack=[]}var t=e.prototype;return t.beginGroup=function(){this.undefStack.push({})},t.endGroup=function(){if(0===this.undefStack.length)throw new n("Unbalanced namespace destruction: attempt to pop global namespace; please report this as a bug");var e=this.undefStack.pop();for(var t in e)e.hasOwnProperty(t)&&(null==e[t]?delete this.current[t]:this.current[t]=e[t])},t.endGroups=function(){for(;this.undefStack.length>0;)this.endGroup()},t.has=function(e){return this.current.hasOwnProperty(e)||this.builtins.hasOwnProperty(e)},t.get=function(e){return this.current.hasOwnProperty(e)?this.current[e]:this.builtins[e]},t.set=function(e,t,r){if(void 0===r&&(r=!1),r){for(var n=0;n<this.undefStack.length;n++)delete this.undefStack[n][e];this.undefStack.length>0&&(this.undefStack[this.undefStack.length-1][e]=t)}else{var a=this.undefStack[this.undefStack.length-1];a&&!a.hasOwnProperty(e)&&(a[e]=this.current[e])}null==t?delete this.current[e]:this.current[e]=t},e}(),On=Vr;Pr("\\noexpand",(function(e){var t=e.popToken();return e.isExpandable(t.text)&&(t.noexpand=!0,t.treatAsRelax=!0),{tokens:[t],numArgs:0}})),Pr("\\expandafter",(function(e){var t=e.popToken();return e.expandOnce(!0),{tokens:[t],numArgs:0}})),Pr("\\@firstoftwo",(function(e){return{tokens:e.consumeArgs(2)[0],numArgs:0}})),Pr("\\@secondoftwo",(function(e){return{tokens:e.consumeArgs(2)[1],numArgs:0}})),Pr("\\@ifnextchar",(function(e){var t=e.consumeArgs(3);e.consumeSpaces();var r=e.future();return 1===t[0].length&&t[0][0].text===r.text?{tokens:t[1],numArgs:0}:{tokens:t[2],numArgs:0}})),Pr("\\@ifstar","\\@ifnextchar *{\\@firstoftwo{#1}}"),Pr("\\TextOrMath",(function(e){var t=e.consumeArgs(2);return"text"===e.mode?{tokens:t[0],numArgs:0}:{tokens:t[1],numArgs:0}}));var En={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,a:10,A:10,b:11,B:11,c:12,C:12,d:13,D:13,e:14,E:14,f:15,F:15};Pr("\\char",(function(e){var t,r=e.popToken(),a="";if("'"===r.text)t=8,r=e.popToken();else if('"'===r.text)t=16,r=e.popToken();else if("`"===r.text)if("\\"===(r=e.popToken()).text[0])a=r.text.charCodeAt(1);else{if("EOF"===r.text)throw new n("\\char` missing argument");a=r.text.charCodeAt(0)}else t=10;if(t){if(null==(a=En[r.text])||a>=t)throw new n("Invalid base-"+t+" digit "+r.text);for(var i;null!=(i=En[e.future().text])&&i<t;)a*=t,a+=i,e.popToken()}return"\\@char{"+a+"}"}));var Ln=function(e,t,r){var a=e.consumeArg().tokens;if(1!==a.length)throw new n("\\newcommand's first argument must be a macro name");var i=a[0].text,o=e.isDefined(i);if(o&&!t)throw new n("\\newcommand{"+i+"} attempting to redefine "+i+"; use \\renewcommand");if(!o&&!r)throw new n("\\renewcommand{"+i+"} when command "+i+" does not yet exist; use \\newcommand");var s=0;if(1===(a=e.consumeArg().tokens).length&&"["===a[0].text){for(var l="",h=e.expandNextToken();"]"!==h.text&&"EOF"!==h.text;)l+=h.text,h=e.expandNextToken();if(!l.match(/^\s*[0-9]+\s*$/))throw new n("Invalid number of arguments: "+l);s=parseInt(l),a=e.consumeArg().tokens}return e.macros.set(i,{tokens:a,numArgs:s}),""};Pr("\\newcommand",(function(e){return Ln(e,!1,!0)})),Pr("\\renewcommand",(function(e){return Ln(e,!0,!1)})),Pr("\\providecommand",(function(e){return Ln(e,!0,!0)})),Pr("\\message",(function(e){var t=e.consumeArgs(1)[0];return console.log(t.reverse().map((function(e){return e.text})).join("")),""})),Pr("\\errmessage",(function(e){var t=e.consumeArgs(1)[0];return console.error(t.reverse().map((function(e){return e.text})).join("")),""})),Pr("\\show",(function(e){var t=e.popToken(),r=t.text;return console.log(t,e.macros.get(r),qn[r],ae.math[r],ae.text[r]),""})),Pr("\\bgroup","{"),Pr("\\egroup","}"),Pr("~","\\nobreakspace"),Pr("\\lq","`"),Pr("\\rq","'"),Pr("\\aa","\\r a"),Pr("\\AA","\\r A"),Pr("\\textcopyright","\\html@mathml{\\textcircled{c}}{\\char`\xa9}"),Pr("\\copyright","\\TextOrMath{\\textcopyright}{\\text{\\textcopyright}}"),Pr("\\textregistered","\\html@mathml{\\textcircled{\\scriptsize R}}{\\char`\xae}"),Pr("\u212c","\\mathscr{B}"),Pr("\u2130","\\mathscr{E}"),Pr("\u2131","\\mathscr{F}"),Pr("\u210b","\\mathscr{H}"),Pr("\u2110","\\mathscr{I}"),Pr("\u2112","\\mathscr{L}"),Pr("\u2133","\\mathscr{M}"),Pr("\u211b","\\mathscr{R}"),Pr("\u212d","\\mathfrak{C}"),Pr("\u210c","\\mathfrak{H}"),Pr("\u2128","\\mathfrak{Z}"),Pr("\\Bbbk","\\Bbb{k}"),Pr("\xb7","\\cdotp"),Pr("\\llap","\\mathllap{\\textrm{#1}}"),Pr("\\rlap","\\mathrlap{\\textrm{#1}}"),Pr("\\clap","\\mathclap{\\textrm{#1}}"),Pr("\\mathstrut","\\vphantom{(}"),Pr("\\underbar","\\underline{\\text{#1}}"),Pr("\\not",'\\html@mathml{\\mathrel{\\mathrlap\\@not}}{\\char"338}'),Pr("\\neq","\\html@mathml{\\mathrel{\\not=}}{\\mathrel{\\char`\u2260}}"),Pr("\\ne","\\neq"),Pr("\u2260","\\neq"),Pr("\\notin","\\html@mathml{\\mathrel{{\\in}\\mathllap{/\\mskip1mu}}}{\\mathrel{\\char`\u2209}}"),Pr("\u2209","\\notin"),Pr("\u2258","\\html@mathml{\\mathrel{=\\kern{-1em}\\raisebox{0.4em}{$\\scriptsize\\frown$}}}{\\mathrel{\\char`\u2258}}"),Pr("\u2259","\\html@mathml{\\stackrel{\\tiny\\wedge}{=}}{\\mathrel{\\char`\u2258}}"),Pr("\u225a","\\html@mathml{\\stackrel{\\tiny\\vee}{=}}{\\mathrel{\\char`\u225a}}"),Pr("\u225b","\\html@mathml{\\stackrel{\\scriptsize\\star}{=}}{\\mathrel{\\char`\u225b}}"),Pr("\u225d","\\html@mathml{\\stackrel{\\tiny\\mathrm{def}}{=}}{\\mathrel{\\char`\u225d}}"),Pr("\u225e","\\html@mathml{\\stackrel{\\tiny\\mathrm{m}}{=}}{\\mathrel{\\char`\u225e}}"),Pr("\u225f","\\html@mathml{\\stackrel{\\tiny?}{=}}{\\mathrel{\\char`\u225f}}"),Pr("\u27c2","\\perp"),Pr("\u203c","\\mathclose{!\\mkern-0.8mu!}"),Pr("\u220c","\\notni"),Pr("\u231c","\\ulcorner"),Pr("\u231d","\\urcorner"),Pr("\u231e","\\llcorner"),Pr("\u231f","\\lrcorner"),Pr("\xa9","\\copyright"),Pr("\xae","\\textregistered"),Pr("\ufe0f","\\textregistered"),Pr("\\ulcorner",'\\html@mathml{\\@ulcorner}{\\mathop{\\char"231c}}'),Pr("\\urcorner",'\\html@mathml{\\@urcorner}{\\mathop{\\char"231d}}'),Pr("\\llcorner",'\\html@mathml{\\@llcorner}{\\mathop{\\char"231e}}'),Pr("\\lrcorner",'\\html@mathml{\\@lrcorner}{\\mathop{\\char"231f}}'),Pr("\\vdots","\\mathord{\\varvdots\\rule{0pt}{15pt}}"),Pr("\u22ee","\\vdots"),Pr("\\varGamma","\\mathit{\\Gamma}"),Pr("\\varDelta","\\mathit{\\Delta}"),Pr("\\varTheta","\\mathit{\\Theta}"),Pr("\\varLambda","\\mathit{\\Lambda}"),Pr("\\varXi","\\mathit{\\Xi}"),Pr("\\varPi","\\mathit{\\Pi}"),Pr("\\varSigma","\\mathit{\\Sigma}"),Pr("\\varUpsilon","\\mathit{\\Upsilon}"),Pr("\\varPhi","\\mathit{\\Phi}"),Pr("\\varPsi","\\mathit{\\Psi}"),Pr("\\varOmega","\\mathit{\\Omega}"),Pr("\\substack","\\begin{subarray}{c}#1\\end{subarray}"),Pr("\\colon","\\nobreak\\mskip2mu\\mathpunct{}\\mathchoice{\\mkern-3mu}{\\mkern-3mu}{}{}{:}\\mskip6mu\\relax"),Pr("\\boxed","\\fbox{$\\displaystyle{#1}$}"),Pr("\\iff","\\DOTSB\\;\\Longleftrightarrow\\;"),Pr("\\implies","\\DOTSB\\;\\Longrightarrow\\;"),Pr("\\impliedby","\\DOTSB\\;\\Longleftarrow\\;");var Dn={",":"\\dotsc","\\not":"\\dotsb","+":"\\dotsb","=":"\\dotsb","<":"\\dotsb",">":"\\dotsb","-":"\\dotsb","*":"\\dotsb",":":"\\dotsb","\\DOTSB":"\\dotsb","\\coprod":"\\dotsb","\\bigvee":"\\dotsb","\\bigwedge":"\\dotsb","\\biguplus":"\\dotsb","\\bigcap":"\\dotsb","\\bigcup":"\\dotsb","\\prod":"\\dotsb","\\sum":"\\dotsb","\\bigotimes":"\\dotsb","\\bigoplus":"\\dotsb","\\bigodot":"\\dotsb","\\bigsqcup":"\\dotsb","\\And":"\\dotsb","\\longrightarrow":"\\dotsb","\\Longrightarrow":"\\dotsb","\\longleftarrow":"\\dotsb","\\Longleftarrow":"\\dotsb","\\longleftrightarrow":"\\dotsb","\\Longleftrightarrow":"\\dotsb","\\mapsto":"\\dotsb","\\longmapsto":"\\dotsb","\\hookrightarrow":"\\dotsb","\\doteq":"\\dotsb","\\mathbin":"\\dotsb","\\mathrel":"\\dotsb","\\relbar":"\\dotsb","\\Relbar":"\\dotsb","\\xrightarrow":"\\dotsb","\\xleftarrow":"\\dotsb","\\DOTSI":"\\dotsi","\\int":"\\dotsi","\\oint":"\\dotsi","\\iint":"\\dotsi","\\iiint":"\\dotsi","\\iiiint":"\\dotsi","\\idotsint":"\\dotsi","\\DOTSX":"\\dotsx"};Pr("\\dots",(function(e){var t="\\dotso",r=e.expandAfterFuture().text;return r in Dn?t=Dn[r]:("\\not"===r.slice(0,4)||r in ae.math&&l.contains(["bin","rel"],ae.math[r].group))&&(t="\\dotsb"),t}));var Vn={")":!0,"]":!0,"\\rbrack":!0,"\\}":!0,"\\rbrace":!0,"\\rangle":!0,"\\rceil":!0,"\\rfloor":!0,"\\rgroup":!0,"\\rmoustache":!0,"\\right":!0,"\\bigr":!0,"\\biggr":!0,"\\Bigr":!0,"\\Biggr":!0,$:!0,";":!0,".":!0,",":!0};Pr("\\dotso",(function(e){return e.future().text in Vn?"\\ldots\\,":"\\ldots"})),Pr("\\dotsc",(function(e){var t=e.future().text;return t in Vn&&","!==t?"\\ldots\\,":"\\ldots"})),Pr("\\cdots",(function(e){return e.future().text in Vn?"\\@cdots\\,":"\\@cdots"})),Pr("\\dotsb","\\cdots"),Pr("\\dotsm","\\cdots"),Pr("\\dotsi","\\!\\cdots"),Pr("\\dotsx","\\ldots\\,"),Pr("\\DOTSI","\\relax"),Pr("\\DOTSB","\\relax"),Pr("\\DOTSX","\\relax"),Pr("\\tmspace","\\TextOrMath{\\kern#1#3}{\\mskip#1#2}\\relax"),Pr("\\,","\\tmspace+{3mu}{.1667em}"),Pr("\\thinspace","\\,"),Pr("\\>","\\mskip{4mu}"),Pr("\\:","\\tmspace+{4mu}{.2222em}"),Pr("\\medspace","\\:"),Pr("\\;","\\tmspace+{5mu}{.2777em}"),Pr("\\thickspace","\\;"),Pr("\\!","\\tmspace-{3mu}{.1667em}"),Pr("\\negthinspace","\\!"),Pr("\\negmedspace","\\tmspace-{4mu}{.2222em}"),Pr("\\negthickspace","\\tmspace-{5mu}{.277em}"),Pr("\\enspace","\\kern.5em "),Pr("\\enskip","\\hskip.5em\\relax"),Pr("\\quad","\\hskip1em\\relax"),Pr("\\qquad","\\hskip2em\\relax"),Pr("\\tag","\\@ifstar\\tag@literal\\tag@paren"),Pr("\\tag@paren","\\tag@literal{({#1})}"),Pr("\\tag@literal",(function(e){if(e.macros.get("\\df@tag"))throw new n("Multiple \\tag");return"\\gdef\\df@tag{\\text{#1}}"})),Pr("\\bmod","\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}\\mathbin{\\rm mod}\\mathchoice{\\mskip1mu}{\\mskip1mu}{\\mskip5mu}{\\mskip5mu}"),Pr("\\pod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern8mu}{\\mkern8mu}{\\mkern8mu}(#1)"),Pr("\\pmod","\\pod{{\\rm mod}\\mkern6mu#1}"),Pr("\\mod","\\allowbreak\\mathchoice{\\mkern18mu}{\\mkern12mu}{\\mkern12mu}{\\mkern12mu}{\\rm mod}\\,\\,#1"),Pr("\\newline","\\\\\\relax"),Pr("\\TeX","\\textrm{\\html@mathml{T\\kern-.1667em\\raisebox{-.5ex}{E}\\kern-.125emX}{TeX}}");var Pn=F(T["Main-Regular"]["T".charCodeAt(0)][1]-.7*T["Main-Regular"]["A".charCodeAt(0)][1]);Pr("\\LaTeX","\\textrm{\\html@mathml{L\\kern-.36em\\raisebox{"+Pn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{LaTeX}}"),Pr("\\KaTeX","\\textrm{\\html@mathml{K\\kern-.17em\\raisebox{"+Pn+"}{\\scriptstyle A}\\kern-.15em\\TeX}{KaTeX}}"),Pr("\\hspace","\\@ifstar\\@hspacer\\@hspace"),Pr("\\@hspace","\\hskip #1\\relax"),Pr("\\@hspacer","\\rule{0pt}{0pt}\\hskip #1\\relax"),Pr("\\ordinarycolon",":"),Pr("\\vcentcolon","\\mathrel{\\mathop\\ordinarycolon}"),Pr("\\dblcolon",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon}}{\\mathop{\\char"2237}}'),Pr("\\coloneqq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2254}}'),Pr("\\Coloneqq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}=}}{\\mathop{\\char"2237\\char"3d}}'),Pr("\\coloneq",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"3a\\char"2212}}'),Pr("\\Coloneq",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}}{\\mathop{\\char"2237\\char"2212}}'),Pr("\\eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2255}}'),Pr("\\Eqqcolon",'\\html@mathml{\\mathrel{=\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"3d\\char"2237}}'),Pr("\\eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}}{\\mathop{\\char"2239}}'),Pr("\\Eqcolon",'\\html@mathml{\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}}{\\mathop{\\char"2212\\char"2237}}'),Pr("\\colonapprox",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"3a\\char"2248}}'),Pr("\\Colonapprox",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx}}{\\mathop{\\char"2237\\char"2248}}'),Pr("\\colonsim",'\\html@mathml{\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"3a\\char"223c}}'),Pr("\\Colonsim",'\\html@mathml{\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim}}{\\mathop{\\char"2237\\char"223c}}'),Pr("\u2237","\\dblcolon"),Pr("\u2239","\\eqcolon"),Pr("\u2254","\\coloneqq"),Pr("\u2255","\\eqqcolon"),Pr("\u2a74","\\Coloneqq"),Pr("\\ratio","\\vcentcolon"),Pr("\\coloncolon","\\dblcolon"),Pr("\\colonequals","\\coloneqq"),Pr("\\coloncolonequals","\\Coloneqq"),Pr("\\equalscolon","\\eqqcolon"),Pr("\\equalscoloncolon","\\Eqqcolon"),Pr("\\colonminus","\\coloneq"),Pr("\\coloncolonminus","\\Coloneq"),Pr("\\minuscolon","\\eqcolon"),Pr("\\minuscoloncolon","\\Eqcolon"),Pr("\\coloncolonapprox","\\Colonapprox"),Pr("\\coloncolonsim","\\Colonsim"),Pr("\\simcolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Pr("\\simcoloncolon","\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Pr("\\approxcolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}"),Pr("\\approxcoloncolon","\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}"),Pr("\\notni","\\html@mathml{\\not\\ni}{\\mathrel{\\char`\u220c}}"),Pr("\\limsup","\\DOTSB\\operatorname*{lim\\,sup}"),Pr("\\liminf","\\DOTSB\\operatorname*{lim\\,inf}"),Pr("\\injlim","\\DOTSB\\operatorname*{inj\\,lim}"),Pr("\\projlim","\\DOTSB\\operatorname*{proj\\,lim}"),Pr("\\varlimsup","\\DOTSB\\operatorname*{\\overline{lim}}"),Pr("\\varliminf","\\DOTSB\\operatorname*{\\underline{lim}}"),Pr("\\varinjlim","\\DOTSB\\operatorname*{\\underrightarrow{lim}}"),Pr("\\varprojlim","\\DOTSB\\operatorname*{\\underleftarrow{lim}}"),Pr("\\gvertneqq","\\html@mathml{\\@gvertneqq}{\u2269}"),Pr("\\lvertneqq","\\html@mathml{\\@lvertneqq}{\u2268}"),Pr("\\ngeqq","\\html@mathml{\\@ngeqq}{\u2271}"),Pr("\\ngeqslant","\\html@mathml{\\@ngeqslant}{\u2271}"),Pr("\\nleqq","\\html@mathml{\\@nleqq}{\u2270}"),Pr("\\nleqslant","\\html@mathml{\\@nleqslant}{\u2270}"),Pr("\\nshortmid","\\html@mathml{\\@nshortmid}{\u2224}"),Pr("\\nshortparallel","\\html@mathml{\\@nshortparallel}{\u2226}"),Pr("\\nsubseteqq","\\html@mathml{\\@nsubseteqq}{\u2288}"),Pr("\\nsupseteqq","\\html@mathml{\\@nsupseteqq}{\u2289}"),Pr("\\varsubsetneq","\\html@mathml{\\@varsubsetneq}{\u228a}"),Pr("\\varsubsetneqq","\\html@mathml{\\@varsubsetneqq}{\u2acb}"),Pr("\\varsupsetneq","\\html@mathml{\\@varsupsetneq}{\u228b}"),Pr("\\varsupsetneqq","\\html@mathml{\\@varsupsetneqq}{\u2acc}"),Pr("\\imath","\\html@mathml{\\@imath}{\u0131}"),Pr("\\jmath","\\html@mathml{\\@jmath}{\u0237}"),Pr("\\llbracket","\\html@mathml{\\mathopen{[\\mkern-3.2mu[}}{\\mathopen{\\char`\u27e6}}"),Pr("\\rrbracket","\\html@mathml{\\mathclose{]\\mkern-3.2mu]}}{\\mathclose{\\char`\u27e7}}"),Pr("\u27e6","\\llbracket"),Pr("\u27e7","\\rrbracket"),Pr("\\lBrace","\\html@mathml{\\mathopen{\\{\\mkern-3.2mu[}}{\\mathopen{\\char`\u2983}}"),Pr("\\rBrace","\\html@mathml{\\mathclose{]\\mkern-3.2mu\\}}}{\\mathclose{\\char`\u2984}}"),Pr("\u2983","\\lBrace"),Pr("\u2984","\\rBrace"),Pr("\\minuso","\\mathbin{\\html@mathml{{\\mathrlap{\\mathchoice{\\kern{0.145em}}{\\kern{0.145em}}{\\kern{0.1015em}}{\\kern{0.0725em}}\\circ}{-}}}{\\char`\u29b5}}"),Pr("\u29b5","\\minuso"),Pr("\\darr","\\downarrow"),Pr("\\dArr","\\Downarrow"),Pr("\\Darr","\\Downarrow"),Pr("\\lang","\\langle"),Pr("\\rang","\\rangle"),Pr("\\uarr","\\uparrow"),Pr("\\uArr","\\Uparrow"),Pr("\\Uarr","\\Uparrow"),Pr("\\N","\\mathbb{N}"),Pr("\\R","\\mathbb{R}"),Pr("\\Z","\\mathbb{Z}"),Pr("\\alef","\\aleph"),Pr("\\alefsym","\\aleph"),Pr("\\Alpha","\\mathrm{A}"),Pr("\\Beta","\\mathrm{B}"),Pr("\\bull","\\bullet"),Pr("\\Chi","\\mathrm{X}"),Pr("\\clubs","\\clubsuit"),Pr("\\cnums","\\mathbb{C}"),Pr("\\Complex","\\mathbb{C}"),Pr("\\Dagger","\\ddagger"),Pr("\\diamonds","\\diamondsuit"),Pr("\\empty","\\emptyset"),Pr("\\Epsilon","\\mathrm{E}"),Pr("\\Eta","\\mathrm{H}"),Pr("\\exist","\\exists"),Pr("\\harr","\\leftrightarrow"),Pr("\\hArr","\\Leftrightarrow"),Pr("\\Harr","\\Leftrightarrow"),Pr("\\hearts","\\heartsuit"),Pr("\\image","\\Im"),Pr("\\infin","\\infty"),Pr("\\Iota","\\mathrm{I}"),Pr("\\isin","\\in"),Pr("\\Kappa","\\mathrm{K}"),Pr("\\larr","\\leftarrow"),Pr("\\lArr","\\Leftarrow"),Pr("\\Larr","\\Leftarrow"),Pr("\\lrarr","\\leftrightarrow"),Pr("\\lrArr","\\Leftrightarrow"),Pr("\\Lrarr","\\Leftrightarrow"),Pr("\\Mu","\\mathrm{M}"),Pr("\\natnums","\\mathbb{N}"),Pr("\\Nu","\\mathrm{N}"),Pr("\\Omicron","\\mathrm{O}"),Pr("\\plusmn","\\pm"),Pr("\\rarr","\\rightarrow"),Pr("\\rArr","\\Rightarrow"),Pr("\\Rarr","\\Rightarrow"),Pr("\\real","\\Re"),Pr("\\reals","\\mathbb{R}"),Pr("\\Reals","\\mathbb{R}"),Pr("\\Rho","\\mathrm{P}"),Pr("\\sdot","\\cdot"),Pr("\\sect","\\S"),Pr("\\spades","\\spadesuit"),Pr("\\sub","\\subset"),Pr("\\sube","\\subseteq"),Pr("\\supe","\\supseteq"),Pr("\\Tau","\\mathrm{T}"),Pr("\\thetasym","\\vartheta"),Pr("\\weierp","\\wp"),Pr("\\Zeta","\\mathrm{Z}"),Pr("\\argmin","\\DOTSB\\operatorname*{arg\\,min}"),Pr("\\argmax","\\DOTSB\\operatorname*{arg\\,max}"),Pr("\\plim","\\DOTSB\\mathop{\\operatorname{plim}}\\limits"),Pr("\\bra","\\mathinner{\\langle{#1}|}"),Pr("\\ket","\\mathinner{|{#1}\\rangle}"),Pr("\\braket","\\mathinner{\\langle{#1}\\rangle}"),Pr("\\Bra","\\left\\langle#1\\right|"),Pr("\\Ket","\\left|#1\\right\\rangle");var Fn=function(e){return function(t){var r=t.consumeArg().tokens,n=t.consumeArg().tokens,a=t.consumeArg().tokens,i=t.consumeArg().tokens,o=t.macros.get("|"),s=t.macros.get("\\|");t.macros.beginGroup();var l=function(t){return function(r){e&&(r.macros.set("|",o),a.length&&r.macros.set("\\|",s));var i=t;!t&&a.length&&("|"===r.future().text&&(r.popToken(),i=!0));return{tokens:i?a:n,numArgs:0}}};t.macros.set("|",l(!1)),a.length&&t.macros.set("\\|",l(!0));var h=t.consumeArg().tokens,c=t.expandTokens([].concat(i,h,r));return t.macros.endGroup(),{tokens:c.reverse(),numArgs:0}}};Pr("\\bra@ket",Fn(!1)),Pr("\\bra@set",Fn(!0)),Pr("\\Braket","\\bra@ket{\\left\\langle}{\\,\\middle\\vert\\,}{\\,\\middle\\vert\\,}{\\right\\rangle}"),Pr("\\Set","\\bra@set{\\left\\{\\:}{\\;\\middle\\vert\\;}{\\;\\middle\\Vert\\;}{\\:\\right\\}}"),Pr("\\set","\\bra@set{\\{\\,}{\\mid}{}{\\,\\}}"),Pr("\\angln","{\\angl n}"),Pr("\\blue","\\textcolor{##6495ed}{#1}"),Pr("\\orange","\\textcolor{##ffa500}{#1}"),Pr("\\pink","\\textcolor{##ff00af}{#1}"),Pr("\\red","\\textcolor{##df0030}{#1}"),Pr("\\green","\\textcolor{##28ae7b}{#1}"),Pr("\\gray","\\textcolor{gray}{#1}"),Pr("\\purple","\\textcolor{##9d38bd}{#1}"),Pr("\\blueA","\\textcolor{##ccfaff}{#1}"),Pr("\\blueB","\\textcolor{##80f6ff}{#1}"),Pr("\\blueC","\\textcolor{##63d9ea}{#1}"),Pr("\\blueD","\\textcolor{##11accd}{#1}"),Pr("\\blueE","\\textcolor{##0c7f99}{#1}"),Pr("\\tealA","\\textcolor{##94fff5}{#1}"),Pr("\\tealB","\\textcolor{##26edd5}{#1}"),Pr("\\tealC","\\textcolor{##01d1c1}{#1}"),Pr("\\tealD","\\textcolor{##01a995}{#1}"),Pr("\\tealE","\\textcolor{##208170}{#1}"),Pr("\\greenA","\\textcolor{##b6ffb0}{#1}"),Pr("\\greenB","\\textcolor{##8af281}{#1}"),Pr("\\greenC","\\textcolor{##74cf70}{#1}"),Pr("\\greenD","\\textcolor{##1fab54}{#1}"),Pr("\\greenE","\\textcolor{##0d923f}{#1}"),Pr("\\goldA","\\textcolor{##ffd0a9}{#1}"),Pr("\\goldB","\\textcolor{##ffbb71}{#1}"),Pr("\\goldC","\\textcolor{##ff9c39}{#1}"),Pr("\\goldD","\\textcolor{##e07d10}{#1}"),Pr("\\goldE","\\textcolor{##a75a05}{#1}"),Pr("\\redA","\\textcolor{##fca9a9}{#1}"),Pr("\\redB","\\textcolor{##ff8482}{#1}"),Pr("\\redC","\\textcolor{##f9685d}{#1}"),Pr("\\redD","\\textcolor{##e84d39}{#1}"),Pr("\\redE","\\textcolor{##bc2612}{#1}"),Pr("\\maroonA","\\textcolor{##ffbde0}{#1}"),Pr("\\maroonB","\\textcolor{##ff92c6}{#1}"),Pr("\\maroonC","\\textcolor{##ed5fa6}{#1}"),Pr("\\maroonD","\\textcolor{##ca337c}{#1}"),Pr("\\maroonE","\\textcolor{##9e034e}{#1}"),Pr("\\purpleA","\\textcolor{##ddd7ff}{#1}"),Pr("\\purpleB","\\textcolor{##c6b9fc}{#1}"),Pr("\\purpleC","\\textcolor{##aa87ff}{#1}"),Pr("\\purpleD","\\textcolor{##7854ab}{#1}"),Pr("\\purpleE","\\textcolor{##543b78}{#1}"),Pr("\\mintA","\\textcolor{##f5f9e8}{#1}"),Pr("\\mintB","\\textcolor{##edf2df}{#1}"),Pr("\\mintC","\\textcolor{##e0e5cc}{#1}"),Pr("\\grayA","\\textcolor{##f6f7f7}{#1}"),Pr("\\grayB","\\textcolor{##f0f1f2}{#1}"),Pr("\\grayC","\\textcolor{##e3e5e6}{#1}"),Pr("\\grayD","\\textcolor{##d6d8da}{#1}"),Pr("\\grayE","\\textcolor{##babec2}{#1}"),Pr("\\grayF","\\textcolor{##888d93}{#1}"),Pr("\\grayG","\\textcolor{##626569}{#1}"),Pr("\\grayH","\\textcolor{##3b3e40}{#1}"),Pr("\\grayI","\\textcolor{##21242c}{#1}"),Pr("\\kaBlue","\\textcolor{##314453}{#1}"),Pr("\\kaGreen","\\textcolor{##71B307}{#1}");var Gn={"^":!0,_:!0,"\\limits":!0,"\\nolimits":!0},Un=function(){function e(e,t,r){this.settings=void 0,this.expansionCount=void 0,this.lexer=void 0,this.macros=void 0,this.stack=void 0,this.mode=void 0,this.settings=t,this.expansionCount=0,this.feed(e),this.macros=new Hn(On,t.macros),this.mode=r,this.stack=[]}var t=e.prototype;return t.feed=function(e){this.lexer=new Rn(e,this.settings)},t.switchMode=function(e){this.mode=e},t.beginGroup=function(){this.macros.beginGroup()},t.endGroup=function(){this.macros.endGroup()},t.endGroups=function(){this.macros.endGroups()},t.future=function(){return 0===this.stack.length&&this.pushToken(this.lexer.lex()),this.stack[this.stack.length-1]},t.popToken=function(){return this.future(),this.stack.pop()},t.pushToken=function(e){this.stack.push(e)},t.pushTokens=function(e){var t;(t=this.stack).push.apply(t,e)},t.scanArgument=function(e){var t,r,n;if(e){if(this.consumeSpaces(),"["!==this.future().text)return null;t=this.popToken();var a=this.consumeArg(["]"]);n=a.tokens,r=a.end}else{var i=this.consumeArg();n=i.tokens,t=i.start,r=i.end}return this.pushToken(new Gr("EOF",r.loc)),this.pushTokens(n),t.range(r,"")},t.consumeSpaces=function(){for(;;){if(" "!==this.future().text)break;this.stack.pop()}},t.consumeArg=function(e){var t=[],r=e&&e.length>0;r||this.consumeSpaces();var a,i=this.future(),o=0,s=0;do{if(a=this.popToken(),t.push(a),"{"===a.text)++o;else if("}"===a.text){if(-1===--o)throw new n("Extra }",a)}else if("EOF"===a.text)throw new n("Unexpected end of input in a macro argument, expected '"+(e&&r?e[s]:"}")+"'",a);if(e&&r)if((0===o||1===o&&"{"===e[s])&&a.text===e[s]){if(++s===e.length){t.splice(-s,s);break}}else s=0}while(0!==o||r);return"{"===i.text&&"}"===t[t.length-1].text&&(t.pop(),t.shift()),t.reverse(),{tokens:t,start:i,end:a}},t.consumeArgs=function(e,t){if(t){if(t.length!==e+1)throw new n("The length of delimiters doesn't match the number of args!");for(var r=t[0],a=0;a<r.length;a++){var i=this.popToken();if(r[a]!==i.text)throw new n("Use of the macro doesn't match its definition",i)}}for(var o=[],s=0;s<e;s++)o.push(this.consumeArg(t&&t[s+1]).tokens);return o},t.expandOnce=function(e){var t=this.popToken(),r=t.text,a=t.noexpand?null:this._getExpansion(r);if(null==a||e&&a.unexpandable){if(e&&null==a&&"\\"===r[0]&&!this.isDefined(r))throw new n("Undefined control sequence: "+r);return this.pushToken(t),t}if(this.expansionCount++,this.expansionCount>this.settings.maxExpand)throw new n("Too many expansions: infinite loop or need to increase maxExpand setting");var i=a.tokens,o=this.consumeArgs(a.numArgs,a.delimiters);if(a.numArgs)for(var s=(i=i.slice()).length-1;s>=0;--s){var l=i[s];if("#"===l.text){if(0===s)throw new n("Incomplete placeholder at end of macro body",l);if("#"===(l=i[--s]).text)i.splice(s+1,1);else{if(!/^[1-9]$/.test(l.text))throw new n("Not a valid argument number",l);var h;(h=i).splice.apply(h,[s,2].concat(o[+l.text-1]))}}}return this.pushTokens(i),i},t.expandAfterFuture=function(){return this.expandOnce(),this.future()},t.expandNextToken=function(){for(;;){var e=this.expandOnce();if(e instanceof Gr)return e.treatAsRelax&&(e.text="\\relax"),this.stack.pop()}throw new Error},t.expandMacro=function(e){return this.macros.has(e)?this.expandTokens([new Gr(e)]):void 0},t.expandTokens=function(e){var t=[],r=this.stack.length;for(this.pushTokens(e);this.stack.length>r;){var n=this.expandOnce(!0);n instanceof Gr&&(n.treatAsRelax&&(n.noexpand=!1,n.treatAsRelax=!1),t.push(this.stack.pop()))}return t},t.expandMacroAsText=function(e){var t=this.expandMacro(e);return t?t.map((function(e){return e.text})).join(""):t},t._getExpansion=function(e){var t=this.macros.get(e);if(null==t)return t;if(1===e.length){var r=this.lexer.catcodes[e];if(null!=r&&13!==r)return}var n="function"==typeof t?t(this):t;if("string"==typeof n){var a=0;if(-1!==n.indexOf("#"))for(var i=n.replace(/##/g,"");-1!==i.indexOf("#"+(a+1));)++a;for(var o=new Rn(n,this.settings),s=[],l=o.lex();"EOF"!==l.text;)s.push(l),l=o.lex();return s.reverse(),{tokens:s,numArgs:a}}return n},t.isDefined=function(e){return this.macros.has(e)||qn.hasOwnProperty(e)||ae.math.hasOwnProperty(e)||ae.text.hasOwnProperty(e)||Gn.hasOwnProperty(e)},t.isExpandable=function(e){var t=this.macros.get(e);return null!=t?"string"==typeof t||"function"==typeof t||!t.unexpandable:qn.hasOwnProperty(e)&&!qn[e].primitive},e}(),Yn=/^[\u208a\u208b\u208c\u208d\u208e\u2080\u2081\u2082\u2083\u2084\u2085\u2086\u2087\u2088\u2089\u2090\u2091\u2095\u1d62\u2c7c\u2096\u2097\u2098\u2099\u2092\u209a\u1d63\u209b\u209c\u1d64\u1d65\u2093\u1d66\u1d67\u1d68\u1d69\u1d6a]/,Xn=Object.freeze({"\u208a":"+","\u208b":"-","\u208c":"=","\u208d":"(","\u208e":")","\u2080":"0","\u2081":"1","\u2082":"2","\u2083":"3","\u2084":"4","\u2085":"5","\u2086":"6","\u2087":"7","\u2088":"8","\u2089":"9","\u2090":"a","\u2091":"e","\u2095":"h","\u1d62":"i","\u2c7c":"j","\u2096":"k","\u2097":"l","\u2098":"m","\u2099":"n","\u2092":"o","\u209a":"p","\u1d63":"r","\u209b":"s","\u209c":"t","\u1d64":"u","\u1d65":"v","\u2093":"x","\u1d66":"\u03b2","\u1d67":"\u03b3","\u1d68":"\u03c1","\u1d69":"\u03d5","\u1d6a":"\u03c7","\u207a":"+","\u207b":"-","\u207c":"=","\u207d":"(","\u207e":")","\u2070":"0","\xb9":"1","\xb2":"2","\xb3":"3","\u2074":"4","\u2075":"5","\u2076":"6","\u2077":"7","\u2078":"8","\u2079":"9","\u1d2c":"A","\u1d2e":"B","\u1d30":"D","\u1d31":"E","\u1d33":"G","\u1d34":"H","\u1d35":"I","\u1d36":"J","\u1d37":"K","\u1d38":"L","\u1d39":"M","\u1d3a":"N","\u1d3c":"O","\u1d3e":"P","\u1d3f":"R","\u1d40":"T","\u1d41":"U","\u2c7d":"V","\u1d42":"W","\u1d43":"a","\u1d47":"b","\u1d9c":"c","\u1d48":"d","\u1d49":"e","\u1da0":"f","\u1d4d":"g","\u02b0":"h","\u2071":"i","\u02b2":"j","\u1d4f":"k","\u02e1":"l","\u1d50":"m","\u207f":"n","\u1d52":"o","\u1d56":"p","\u02b3":"r","\u02e2":"s","\u1d57":"t","\u1d58":"u","\u1d5b":"v","\u02b7":"w","\u02e3":"x","\u02b8":"y","\u1dbb":"z","\u1d5d":"\u03b2","\u1d5e":"\u03b3","\u1d5f":"\u03b4","\u1d60":"\u03d5","\u1d61":"\u03c7","\u1dbf":"\u03b8"}),Wn={"\u0301":{text:"\\'",math:"\\acute"},"\u0300":{text:"\\`",math:"\\grave"},"\u0308":{text:'\\"',math:"\\ddot"},"\u0303":{text:"\\~",math:"\\tilde"},"\u0304":{text:"\\=",math:"\\bar"},"\u0306":{text:"\\u",math:"\\breve"},"\u030c":{text:"\\v",math:"\\check"},"\u0302":{text:"\\^",math:"\\hat"},"\u0307":{text:"\\.",math:"\\dot"},"\u030a":{text:"\\r",math:"\\mathring"},"\u030b":{text:"\\H"},"\u0327":{text:"\\c"}},_n={"\xe1":"a\u0301","\xe0":"a\u0300","\xe4":"a\u0308","\u01df":"a\u0308\u0304","\xe3":"a\u0303","\u0101":"a\u0304","\u0103":"a\u0306","\u1eaf":"a\u0306\u0301","\u1eb1":"a\u0306\u0300","\u1eb5":"a\u0306\u0303","\u01ce":"a\u030c","\xe2":"a\u0302","\u1ea5":"a\u0302\u0301","\u1ea7":"a\u0302\u0300","\u1eab":"a\u0302\u0303","\u0227":"a\u0307","\u01e1":"a\u0307\u0304","\xe5":"a\u030a","\u01fb":"a\u030a\u0301","\u1e03":"b\u0307","\u0107":"c\u0301","\u1e09":"c\u0327\u0301","\u010d":"c\u030c","\u0109":"c\u0302","\u010b":"c\u0307","\xe7":"c\u0327","\u010f":"d\u030c","\u1e0b":"d\u0307","\u1e11":"d\u0327","\xe9":"e\u0301","\xe8":"e\u0300","\xeb":"e\u0308","\u1ebd":"e\u0303","\u0113":"e\u0304","\u1e17":"e\u0304\u0301","\u1e15":"e\u0304\u0300","\u0115":"e\u0306","\u1e1d":"e\u0327\u0306","\u011b":"e\u030c","\xea":"e\u0302","\u1ebf":"e\u0302\u0301","\u1ec1":"e\u0302\u0300","\u1ec5":"e\u0302\u0303","\u0117":"e\u0307","\u0229":"e\u0327","\u1e1f":"f\u0307","\u01f5":"g\u0301","\u1e21":"g\u0304","\u011f":"g\u0306","\u01e7":"g\u030c","\u011d":"g\u0302","\u0121":"g\u0307","\u0123":"g\u0327","\u1e27":"h\u0308","\u021f":"h\u030c","\u0125":"h\u0302","\u1e23":"h\u0307","\u1e29":"h\u0327","\xed":"i\u0301","\xec":"i\u0300","\xef":"i\u0308","\u1e2f":"i\u0308\u0301","\u0129":"i\u0303","\u012b":"i\u0304","\u012d":"i\u0306","\u01d0":"i\u030c","\xee":"i\u0302","\u01f0":"j\u030c","\u0135":"j\u0302","\u1e31":"k\u0301","\u01e9":"k\u030c","\u0137":"k\u0327","\u013a":"l\u0301","\u013e":"l\u030c","\u013c":"l\u0327","\u1e3f":"m\u0301","\u1e41":"m\u0307","\u0144":"n\u0301","\u01f9":"n\u0300","\xf1":"n\u0303","\u0148":"n\u030c","\u1e45":"n\u0307","\u0146":"n\u0327","\xf3":"o\u0301","\xf2":"o\u0300","\xf6":"o\u0308","\u022b":"o\u0308\u0304","\xf5":"o\u0303","\u1e4d":"o\u0303\u0301","\u1e4f":"o\u0303\u0308","\u022d":"o\u0303\u0304","\u014d":"o\u0304","\u1e53":"o\u0304\u0301","\u1e51":"o\u0304\u0300","\u014f":"o\u0306","\u01d2":"o\u030c","\xf4":"o\u0302","\u1ed1":"o\u0302\u0301","\u1ed3":"o\u0302\u0300","\u1ed7":"o\u0302\u0303","\u022f":"o\u0307","\u0231":"o\u0307\u0304","\u0151":"o\u030b","\u1e55":"p\u0301","\u1e57":"p\u0307","\u0155":"r\u0301","\u0159":"r\u030c","\u1e59":"r\u0307","\u0157":"r\u0327","\u015b":"s\u0301","\u1e65":"s\u0301\u0307","\u0161":"s\u030c","\u1e67":"s\u030c\u0307","\u015d":"s\u0302","\u1e61":"s\u0307","\u015f":"s\u0327","\u1e97":"t\u0308","\u0165":"t\u030c","\u1e6b":"t\u0307","\u0163":"t\u0327","\xfa":"u\u0301","\xf9":"u\u0300","\xfc":"u\u0308","\u01d8":"u\u0308\u0301","\u01dc":"u\u0308\u0300","\u01d6":"u\u0308\u0304","\u01da":"u\u0308\u030c","\u0169":"u\u0303","\u1e79":"u\u0303\u0301","\u016b":"u\u0304","\u1e7b":"u\u0304\u0308","\u016d":"u\u0306","\u01d4":"u\u030c","\xfb":"u\u0302","\u016f":"u\u030a","\u0171":"u\u030b","\u1e7d":"v\u0303","\u1e83":"w\u0301","\u1e81":"w\u0300","\u1e85":"w\u0308","\u0175":"w\u0302","\u1e87":"w\u0307","\u1e98":"w\u030a","\u1e8d":"x\u0308","\u1e8b":"x\u0307","\xfd":"y\u0301","\u1ef3":"y\u0300","\xff":"y\u0308","\u1ef9":"y\u0303","\u0233":"y\u0304","\u0177":"y\u0302","\u1e8f":"y\u0307","\u1e99":"y\u030a","\u017a":"z\u0301","\u017e":"z\u030c","\u1e91":"z\u0302","\u017c":"z\u0307","\xc1":"A\u0301","\xc0":"A\u0300","\xc4":"A\u0308","\u01de":"A\u0308\u0304","\xc3":"A\u0303","\u0100":"A\u0304","\u0102":"A\u0306","\u1eae":"A\u0306\u0301","\u1eb0":"A\u0306\u0300","\u1eb4":"A\u0306\u0303","\u01cd":"A\u030c","\xc2":"A\u0302","\u1ea4":"A\u0302\u0301","\u1ea6":"A\u0302\u0300","\u1eaa":"A\u0302\u0303","\u0226":"A\u0307","\u01e0":"A\u0307\u0304","\xc5":"A\u030a","\u01fa":"A\u030a\u0301","\u1e02":"B\u0307","\u0106":"C\u0301","\u1e08":"C\u0327\u0301","\u010c":"C\u030c","\u0108":"C\u0302","\u010a":"C\u0307","\xc7":"C\u0327","\u010e":"D\u030c","\u1e0a":"D\u0307","\u1e10":"D\u0327","\xc9":"E\u0301","\xc8":"E\u0300","\xcb":"E\u0308","\u1ebc":"E\u0303","\u0112":"E\u0304","\u1e16":"E\u0304\u0301","\u1e14":"E\u0304\u0300","\u0114":"E\u0306","\u1e1c":"E\u0327\u0306","\u011a":"E\u030c","\xca":"E\u0302","\u1ebe":"E\u0302\u0301","\u1ec0":"E\u0302\u0300","\u1ec4":"E\u0302\u0303","\u0116":"E\u0307","\u0228":"E\u0327","\u1e1e":"F\u0307","\u01f4":"G\u0301","\u1e20":"G\u0304","\u011e":"G\u0306","\u01e6":"G\u030c","\u011c":"G\u0302","\u0120":"G\u0307","\u0122":"G\u0327","\u1e26":"H\u0308","\u021e":"H\u030c","\u0124":"H\u0302","\u1e22":"H\u0307","\u1e28":"H\u0327","\xcd":"I\u0301","\xcc":"I\u0300","\xcf":"I\u0308","\u1e2e":"I\u0308\u0301","\u0128":"I\u0303","\u012a":"I\u0304","\u012c":"I\u0306","\u01cf":"I\u030c","\xce":"I\u0302","\u0130":"I\u0307","\u0134":"J\u0302","\u1e30":"K\u0301","\u01e8":"K\u030c","\u0136":"K\u0327","\u0139":"L\u0301","\u013d":"L\u030c","\u013b":"L\u0327","\u1e3e":"M\u0301","\u1e40":"M\u0307","\u0143":"N\u0301","\u01f8":"N\u0300","\xd1":"N\u0303","\u0147":"N\u030c","\u1e44":"N\u0307","\u0145":"N\u0327","\xd3":"O\u0301","\xd2":"O\u0300","\xd6":"O\u0308","\u022a":"O\u0308\u0304","\xd5":"O\u0303","\u1e4c":"O\u0303\u0301","\u1e4e":"O\u0303\u0308","\u022c":"O\u0303\u0304","\u014c":"O\u0304","\u1e52":"O\u0304\u0301","\u1e50":"O\u0304\u0300","\u014e":"O\u0306","\u01d1":"O\u030c","\xd4":"O\u0302","\u1ed0":"O\u0302\u0301","\u1ed2":"O\u0302\u0300","\u1ed6":"O\u0302\u0303","\u022e":"O\u0307","\u0230":"O\u0307\u0304","\u0150":"O\u030b","\u1e54":"P\u0301","\u1e56":"P\u0307","\u0154":"R\u0301","\u0158":"R\u030c","\u1e58":"R\u0307","\u0156":"R\u0327","\u015a":"S\u0301","\u1e64":"S\u0301\u0307","\u0160":"S\u030c","\u1e66":"S\u030c\u0307","\u015c":"S\u0302","\u1e60":"S\u0307","\u015e":"S\u0327","\u0164":"T\u030c","\u1e6a":"T\u0307","\u0162":"T\u0327","\xda":"U\u0301","\xd9":"U\u0300","\xdc":"U\u0308","\u01d7":"U\u0308\u0301","\u01db":"U\u0308\u0300","\u01d5":"U\u0308\u0304","\u01d9":"U\u0308\u030c","\u0168":"U\u0303","\u1e78":"U\u0303\u0301","\u016a":"U\u0304","\u1e7a":"U\u0304\u0308","\u016c":"U\u0306","\u01d3":"U\u030c","\xdb":"U\u0302","\u016e":"U\u030a","\u0170":"U\u030b","\u1e7c":"V\u0303","\u1e82":"W\u0301","\u1e80":"W\u0300","\u1e84":"W\u0308","\u0174":"W\u0302","\u1e86":"W\u0307","\u1e8c":"X\u0308","\u1e8a":"X\u0307","\xdd":"Y\u0301","\u1ef2":"Y\u0300","\u0178":"Y\u0308","\u1ef8":"Y\u0303","\u0232":"Y\u0304","\u0176":"Y\u0302","\u1e8e":"Y\u0307","\u0179":"Z\u0301","\u017d":"Z\u030c","\u1e90":"Z\u0302","\u017b":"Z\u0307","\u03ac":"\u03b1\u0301","\u1f70":"\u03b1\u0300","\u1fb1":"\u03b1\u0304","\u1fb0":"\u03b1\u0306","\u03ad":"\u03b5\u0301","\u1f72":"\u03b5\u0300","\u03ae":"\u03b7\u0301","\u1f74":"\u03b7\u0300","\u03af":"\u03b9\u0301","\u1f76":"\u03b9\u0300","\u03ca":"\u03b9\u0308","\u0390":"\u03b9\u0308\u0301","\u1fd2":"\u03b9\u0308\u0300","\u1fd1":"\u03b9\u0304","\u1fd0":"\u03b9\u0306","\u03cc":"\u03bf\u0301","\u1f78":"\u03bf\u0300","\u03cd":"\u03c5\u0301","\u1f7a":"\u03c5\u0300","\u03cb":"\u03c5\u0308","\u03b0":"\u03c5\u0308\u0301","\u1fe2":"\u03c5\u0308\u0300","\u1fe1":"\u03c5\u0304","\u1fe0":"\u03c5\u0306","\u03ce":"\u03c9\u0301","\u1f7c":"\u03c9\u0300","\u038e":"\u03a5\u0301","\u1fea":"\u03a5\u0300","\u03ab":"\u03a5\u0308","\u1fe9":"\u03a5\u0304","\u1fe8":"\u03a5\u0306","\u038f":"\u03a9\u0301","\u1ffa":"\u03a9\u0300"},jn=function(){function e(e,t){this.mode=void 0,this.gullet=void 0,this.settings=void 0,this.leftrightDepth=void 0,this.nextToken=void 0,this.mode="math",this.gullet=new Un(e,t,this.mode),this.settings=t,this.leftrightDepth=0}var t=e.prototype;return t.expect=function(e,t){if(void 0===t&&(t=!0),this.fetch().text!==e)throw new n("Expected '"+e+"', got '"+this.fetch().text+"'",this.fetch());t&&this.consume()},t.consume=function(){this.nextToken=null},t.fetch=function(){return null==this.nextToken&&(this.nextToken=this.gullet.expandNextToken()),this.nextToken},t.switchMode=function(e){this.mode=e,this.gullet.switchMode(e)},t.parse=function(){this.settings.globalGroup||this.gullet.beginGroup(),this.settings.colorIsTextColor&&this.gullet.macros.set("\\color","\\textcolor");try{var e=this.parseExpression(!1);return this.expect("EOF"),this.settings.globalGroup||this.gullet.endGroup(),e}finally{this.gullet.endGroups()}},t.subparse=function(e){var t=this.nextToken;this.consume(),this.gullet.pushToken(new Gr("}")),this.gullet.pushTokens(e);var r=this.parseExpression(!1);return this.expect("}"),this.nextToken=t,r},t.parseExpression=function(t,r){for(var n=[];;){"math"===this.mode&&this.consumeSpaces();var a=this.fetch();if(-1!==e.endOfExpression.indexOf(a.text))break;if(r&&a.text===r)break;if(t&&qn[a.text]&&qn[a.text].infix)break;var i=this.parseAtom(r);if(!i)break;"internal"!==i.type&&n.push(i)}return"text"===this.mode&&this.formLigatures(n),this.handleInfixNodes(n)},t.handleInfixNodes=function(e){for(var t,r=-1,a=0;a<e.length;a++)if("infix"===e[a].type){if(-1!==r)throw new n("only one infix operator per group",e[a].token);r=a,t=e[a].replaceWith}if(-1!==r&&t){var i,o,s=e.slice(0,r),l=e.slice(r+1);return i=1===s.length&&"ordgroup"===s[0].type?s[0]:{type:"ordgroup",mode:this.mode,body:s},o=1===l.length&&"ordgroup"===l[0].type?l[0]:{type:"ordgroup",mode:this.mode,body:l},["\\\\abovefrac"===t?this.callFunction(t,[i,e[r],o],[]):this.callFunction(t,[i,o],[])]}return e},t.handleSupSubscript=function(e){var t=this.fetch(),r=t.text;this.consume(),this.consumeSpaces();var a=this.parseGroup(e);if(!a)throw new n("Expected group after '"+r+"'",t);return a},t.formatUnsupportedCmd=function(e){for(var t=[],r=0;r<e.length;r++)t.push({type:"textord",mode:"text",text:e[r]});var n={type:"text",mode:this.mode,body:t};return{type:"color",mode:this.mode,color:this.settings.errorColor,body:[n]}},t.parseAtom=function(t){var r,a,i=this.parseGroup("atom",t);if("text"===this.mode)return i;for(;;){this.consumeSpaces();var o=this.fetch();if("\\limits"===o.text||"\\nolimits"===o.text){if(i&&"op"===i.type){var s="\\limits"===o.text;i.limits=s,i.alwaysHandleSupSub=!0}else{if(!i||"operatorname"!==i.type)throw new n("Limit controls must follow a math operator",o);i.alwaysHandleSupSub&&(i.limits="\\limits"===o.text)}this.consume()}else if("^"===o.text){if(r)throw new n("Double superscript",o);r=this.handleSupSubscript("superscript")}else if("_"===o.text){if(a)throw new n("Double subscript",o);a=this.handleSupSubscript("subscript")}else if("'"===o.text){if(r)throw new n("Double superscript",o);var l={type:"textord",mode:this.mode,text:"\\prime"},h=[l];for(this.consume();"'"===this.fetch().text;)h.push(l),this.consume();"^"===this.fetch().text&&h.push(this.handleSupSubscript("superscript")),r={type:"ordgroup",mode:this.mode,body:h}}else{if(!Xn[o.text])break;var c=Xn[o.text],m=Yn.test(o.text);for(this.consume();;){var u=this.fetch().text;if(!Xn[u])break;if(Yn.test(u)!==m)break;this.consume(),c+=Xn[u]}var p=new e(c,this.settings).parse();m?a={type:"ordgroup",mode:"math",body:p}:r={type:"ordgroup",mode:"math",body:p}}}return r||a?{type:"supsub",mode:this.mode,base:i,sup:r,sub:a}:i},t.parseFunction=function(e,t){var r=this.fetch(),a=r.text,i=qn[a];if(!i)return null;if(this.consume(),t&&"atom"!==t&&!i.allowedInArgument)throw new n("Got function '"+a+"' with no arguments"+(t?" as "+t:""),r);if("text"===this.mode&&!i.allowedInText)throw new n("Can't use function '"+a+"' in text mode",r);if("math"===this.mode&&!1===i.allowedInMath)throw new n("Can't use function '"+a+"' in math mode",r);var o=this.parseArguments(a,i),s=o.args,l=o.optArgs;return this.callFunction(a,s,l,r,e)},t.callFunction=function(e,t,r,a,i){var o={funcName:e,parser:this,token:a,breakOnTokenText:i},s=qn[e];if(s&&s.handler)return s.handler(o,t,r);throw new n("No function handler for "+e)},t.parseArguments=function(e,t){var r=t.numArgs+t.numOptionalArgs;if(0===r)return{args:[],optArgs:[]};for(var a=[],i=[],o=0;o<r;o++){var s=t.argTypes&&t.argTypes[o],l=o<t.numOptionalArgs;(t.primitive&&null==s||"sqrt"===t.type&&1===o&&null==i[0])&&(s="primitive");var h=this.parseGroupOfType("argument to '"+e+"'",s,l);if(l)i.push(h);else{if(null==h)throw new n("Null argument, please report this as a bug");a.push(h)}}return{args:a,optArgs:i}},t.parseGroupOfType=function(e,t,r){switch(t){case"color":return this.parseColorGroup(r);case"size":return this.parseSizeGroup(r);case"url":return this.parseUrlGroup(r);case"math":case"text":return this.parseArgumentGroup(r,t);case"hbox":var a=this.parseArgumentGroup(r,"text");return null!=a?{type:"styling",mode:a.mode,body:[a],style:"text"}:null;case"raw":var i=this.parseStringGroup("raw",r);return null!=i?{type:"raw",mode:"text",string:i.text}:null;case"primitive":if(r)throw new n("A primitive argument cannot be optional");var o=this.parseGroup(e);if(null==o)throw new n("Expected group as "+e,this.fetch());return o;case"original":case null:case void 0:return this.parseArgumentGroup(r);default:throw new n("Unknown group type as "+e,this.fetch())}},t.consumeSpaces=function(){for(;" "===this.fetch().text;)this.consume()},t.parseStringGroup=function(e,t){var r=this.gullet.scanArgument(t);if(null==r)return null;for(var n,a="";"EOF"!==(n=this.fetch()).text;)a+=n.text,this.consume();return this.consume(),r.text=a,r},t.parseRegexGroup=function(e,t){for(var r,a=this.fetch(),i=a,o="";"EOF"!==(r=this.fetch()).text&&e.test(o+r.text);)o+=(i=r).text,this.consume();if(""===o)throw new n("Invalid "+t+": '"+a.text+"'",a);return a.range(i,o)},t.parseColorGroup=function(e){var t=this.parseStringGroup("color",e);if(null==t)return null;var r=/^(#[a-f0-9]{3}|#?[a-f0-9]{6}|[a-z]+)$/i.exec(t.text);if(!r)throw new n("Invalid color: '"+t.text+"'",t);var a=r[0];return/^[0-9a-f]{6}$/i.test(a)&&(a="#"+a),{type:"color-token",mode:this.mode,color:a}},t.parseSizeGroup=function(e){var t,r=!1;if(this.gullet.consumeSpaces(),!(t=e||"{"===this.gullet.future().text?this.parseStringGroup("size",e):this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size")))return null;e||0!==t.text.length||(t.text="0pt",r=!0);var a=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t.text);if(!a)throw new n("Invalid size: '"+t.text+"'",t);var i={number:+(a[1]+a[2]),unit:a[3]};if(!V(i))throw new n("Invalid unit: '"+i.unit+"'",t);return{type:"size",mode:this.mode,value:i,isBlank:r}},t.parseUrlGroup=function(e){this.gullet.lexer.setCatcode("%",13),this.gullet.lexer.setCatcode("~",12);var t=this.parseStringGroup("url",e);if(this.gullet.lexer.setCatcode("%",14),this.gullet.lexer.setCatcode("~",13),null==t)return null;var r=t.text.replace(/\\([#$%&~_^{}])/g,"$1");return{type:"url",mode:this.mode,url:r}},t.parseArgumentGroup=function(e,t){var r=this.gullet.scanArgument(e);if(null==r)return null;var n=this.mode;t&&this.switchMode(t),this.gullet.beginGroup();var a=this.parseExpression(!1,"EOF");this.expect("EOF"),this.gullet.endGroup();var i={type:"ordgroup",mode:this.mode,loc:r.loc,body:a};return t&&this.switchMode(n),i},t.parseGroup=function(e,t){var r,a=this.fetch(),i=a.text;if("{"===i||"\\begingroup"===i){this.consume();var o="{"===i?"}":"\\endgroup";this.gullet.beginGroup();var s=this.parseExpression(!1,o),l=this.fetch();this.expect(o),this.gullet.endGroup(),r={type:"ordgroup",mode:this.mode,loc:Fr.range(a,l),body:s,semisimple:"\\begingroup"===i||void 0}}else if(null==(r=this.parseFunction(t,e)||this.parseSymbol())&&"\\"===i[0]&&!Gn.hasOwnProperty(i)){if(this.settings.throwOnError)throw new n("Undefined control sequence: "+i,a);r=this.formatUnsupportedCmd(i),this.consume()}return r},t.formLigatures=function(e){for(var t=e.length-1,r=0;r<t;++r){var n=e[r],a=n.text;"-"===a&&"-"===e[r+1].text&&(r+1<t&&"-"===e[r+2].text?(e.splice(r,3,{type:"textord",mode:"text",loc:Fr.range(n,e[r+2]),text:"---"}),t-=2):(e.splice(r,2,{type:"textord",mode:"text",loc:Fr.range(n,e[r+1]),text:"--"}),t-=1)),"'"!==a&&"`"!==a||e[r+1].text!==a||(e.splice(r,2,{type:"textord",mode:"text",loc:Fr.range(n,e[r+1]),text:a+a}),t-=1)}},t.parseSymbol=function(){var e=this.fetch(),t=e.text;if(/^\\verb[^a-zA-Z]/.test(t)){this.consume();var r=t.slice(5),a="*"===r.charAt(0);if(a&&(r=r.slice(1)),r.length<2||r.charAt(0)!==r.slice(-1))throw new n("\\verb assertion failed --\n                    please report what input caused this bug");return{type:"verb",mode:"text",body:r=r.slice(1,-1),star:a}}_n.hasOwnProperty(t[0])&&!ae[this.mode][t[0]]&&(this.settings.strict&&"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Accented Unicode text character "'+t[0]+'" used in math mode',e),t=_n[t[0]]+t.slice(1));var i,o=In.exec(t);if(o&&("i"===(t=t.substring(0,o.index))?t="\u0131":"j"===t&&(t="\u0237")),ae[this.mode][t]){this.settings.strict&&"math"===this.mode&&Ee.indexOf(t)>=0&&this.settings.reportNonstrict("unicodeTextInMathMode",'Latin-1/Unicode text character "'+t[0]+'" used in math mode',e);var s,l=ae[this.mode][t].group,h=Fr.range(e);if(te.hasOwnProperty(l)){var c=l;s={type:"atom",mode:this.mode,family:c,loc:h,text:t}}else s={type:l,mode:this.mode,loc:h,text:t};i=s}else{if(!(t.charCodeAt(0)>=128))return null;this.settings.strict&&(S(t.charCodeAt(0))?"math"===this.mode&&this.settings.reportNonstrict("unicodeTextInMathMode",'Unicode text character "'+t[0]+'" used in math mode',e):this.settings.reportNonstrict("unknownSymbol",'Unrecognized Unicode character "'+t[0]+'" ('+t.charCodeAt(0)+")",e)),i={type:"textord",mode:"text",loc:Fr.range(e),text:t}}if(this.consume(),o)for(var m=0;m<o[0].length;m++){var u=o[0][m];if(!Wn[u])throw new n("Unknown accent ' "+u+"'",e);var p=Wn[u][this.mode]||Wn[u].text;if(!p)throw new n("Accent "+u+" unsupported in "+this.mode+" mode",e);i={type:"accent",mode:this.mode,loc:Fr.range(e),label:p,isStretchy:!1,isShifty:!0,base:i}}return i},e}();jn.endOfExpression=["}","\\endgroup","\\end","\\right","&"];var $n=function(e,t){if(!("string"==typeof e||e instanceof String))throw new TypeError("KaTeX can only parse string typed expression");var r=new jn(e,t);delete r.gullet.macros.current["\\df@tag"];var a=r.parse();if(delete r.gullet.macros.current["\\current@color"],delete r.gullet.macros.current["\\color"],r.gullet.macros.get("\\df@tag")){if(!t.displayMode)throw new n("\\tag works only in display equations");a=[{type:"tag",mode:"text",body:a,tag:r.subparse([new Gr("\\df@tag")])}]}return a},Zn=function(e,t,r){t.textContent="";var n=Jn(e,r).toNode();t.appendChild(n)};"undefined"!=typeof document&&"CSS1Compat"!==document.compatMode&&("undefined"!=typeof console&&console.warn("Warning: KaTeX doesn't work in quirks mode. Make sure your website has a suitable doctype."),Zn=function(){throw new n("KaTeX doesn't work in quirks mode.")});var Kn=function(e,t,r){if(r.throwOnError||!(e instanceof n))throw e;var a=Ke.makeSpan(["katex-error"],[new Z(t)]);return a.setAttribute("title",e.toString()),a.setAttribute("style","color:"+r.errorColor),a},Jn=function(e,t){var r=new m(t);try{var n=$n(e,r);return Lt(n,e,r)}catch(t){return Kn(t,e,r)}},Qn={version:"0.16.3",render:Zn,renderToString:function(e,t){return Jn(e,t).toMarkup()},ParseError:n,SETTINGS_SCHEMA:h,__parse:function(e,t){var r=new m(t);return $n(e,r)},__renderToDomTree:Jn,__renderToHTMLTree:function(e,t){var r=new m(t);try{return function(e,t,r){var n=St(e,Ot(r)),a=Ke.makeSpan(["katex"],[n]);return Et(a,r)}($n(e,r),0,r)}catch(t){return Kn(t,e,r)}},__setFontMetrics:function(e,t){T[e]=t},__defineSymbol:ie,__defineMacro:Pr,__domTree:{Span:W,Anchor:_,SymbolNode:Z,SvgNode:K,PathNode:J,LineNode:Q}};return t=t.default}()}));
\ No newline at end of file
diff --git a/web/themes/congo/assets/lib/mermaid/mermaid.min.js b/web/themes/congo/assets/lib/mermaid/mermaid.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..e9adf40b7970508defcfb70614403ab6db9502de
--- /dev/null
+++ b/web/themes/congo/assets/lib/mermaid/mermaid.min.js
@@ -0,0 +1,1280 @@
+(function(jr,wn){typeof exports=="object"&&typeof module<"u"?module.exports=wn():typeof define=="function"&&define.amd?define(wn):(jr=typeof globalThis<"u"?globalThis:jr||self,jr.mermaid=wn())})(this,function(){"use strict";var Ost=Object.defineProperty;var Fst=(jr,wn,fn)=>wn in jr?Ost(jr,wn,{enumerable:!0,configurable:!0,writable:!0,value:fn}):jr[wn]=fn;var vl=(jr,wn,fn)=>(Fst(jr,typeof wn!="symbol"?wn+"":wn,fn),fn);var jr=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function wn(t){var e=t.default;if(typeof e=="function"){var r=function(){return e.apply(this,arguments)};r.prototype=e.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(t).forEach(function(n){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(r,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})}),r}function fn(t){throw new Error('Could not dynamically require "'+t+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var y_={exports:{}};(function(t,e){(function(r,n){t.exports=n()})(jr,function(){var r;function n(){return r.apply(null,arguments)}function i(g){return g instanceof Array||Object.prototype.toString.call(g)==="[object Array]"}function a(g){return g!=null&&Object.prototype.toString.call(g)==="[object Object]"}function s(g,E){return Object.prototype.hasOwnProperty.call(g,E)}function o(g){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(g).length===0;for(var E in g)if(s(g,E))return;return 1}function l(g){return g===void 0}function u(g){return typeof g=="number"||Object.prototype.toString.call(g)==="[object Number]"}function h(g){return g instanceof Date||Object.prototype.toString.call(g)==="[object Date]"}function d(g,E){for(var I=[],O=g.length,G=0;G<O;++G)I.push(E(g[G],G));return I}function f(g,E){for(var I in E)s(E,I)&&(g[I]=E[I]);return s(E,"toString")&&(g.toString=E.toString),s(E,"valueOf")&&(g.valueOf=E.valueOf),g}function p(g,E,I,O){return Dr(g,E,I,O,!0).utc()}function m(g){return g._pf==null&&(g._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),g._pf}function _(g){if(g._isValid==null){var E=m(g),I=b.call(E.parsedDateParts,function(O){return O!=null}),I=!isNaN(g._d.getTime())&&E.overflow<0&&!E.empty&&!E.invalidEra&&!E.invalidMonth&&!E.invalidWeekday&&!E.weekdayMismatch&&!E.nullInput&&!E.invalidFormat&&!E.userInvalidated&&(!E.meridiem||E.meridiem&&I);if(g._strict&&(I=I&&E.charsLeftOver===0&&E.unusedTokens.length===0&&E.bigHour===void 0),Object.isFrozen!=null&&Object.isFrozen(g))return I;g._isValid=I}return g._isValid}function y(g){var E=p(NaN);return g!=null?f(m(E),g):m(E).userInvalidated=!0,E}var b=Array.prototype.some||function(g){for(var E=Object(this),I=E.length>>>0,O=0;O<I;O++)if(O in E&&g.call(this,E[O],O,E))return!0;return!1},x=n.momentProperties=[],k=!1;function T(g,E){var I,O,G,ht=x.length;if(l(E._isAMomentObject)||(g._isAMomentObject=E._isAMomentObject),l(E._i)||(g._i=E._i),l(E._f)||(g._f=E._f),l(E._l)||(g._l=E._l),l(E._strict)||(g._strict=E._strict),l(E._tzm)||(g._tzm=E._tzm),l(E._isUTC)||(g._isUTC=E._isUTC),l(E._offset)||(g._offset=E._offset),l(E._pf)||(g._pf=m(E)),l(E._locale)||(g._locale=E._locale),0<ht)for(I=0;I<ht;I++)l(G=E[O=x[I]])||(g[O]=G);return g}function C(g){T(this,g),this._d=new Date(g._d!=null?g._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),k===!1&&(k=!0,n.updateOffset(this),k=!1)}function M(g){return g instanceof C||g!=null&&g._isAMomentObject!=null}function S(g){n.suppressDeprecationWarnings===!1&&typeof console<"u"&&console.warn&&console.warn("Deprecation warning: "+g)}function R(g,E){var I=!0;return f(function(){if(n.deprecationHandler!=null&&n.deprecationHandler(null,g),I){for(var O,G,ht=[],xt=arguments.length,Mt=0;Mt<xt;Mt++){if(O="",typeof arguments[Mt]=="object"){for(G in O+=`
+[`+Mt+"] ",arguments[0])s(arguments[0],G)&&(O+=G+": "+arguments[0][G]+", ");O=O.slice(0,-2)}else O=arguments[Mt];ht.push(O)}S(g+`
+Arguments: `+Array.prototype.slice.call(ht).join("")+`
+`+new Error().stack),I=!1}return E.apply(this,arguments)},E)}var A={};function L(g,E){n.deprecationHandler!=null&&n.deprecationHandler(g,E),A[g]||(S(E),A[g]=!0)}function v(g){return typeof Function<"u"&&g instanceof Function||Object.prototype.toString.call(g)==="[object Function]"}function B(g,E){var I,O=f({},g);for(I in E)s(E,I)&&(a(g[I])&&a(E[I])?(O[I]={},f(O[I],g[I]),f(O[I],E[I])):E[I]!=null?O[I]=E[I]:delete O[I]);for(I in g)s(g,I)&&!s(E,I)&&a(g[I])&&(O[I]=f({},O[I]));return O}function w(g){g!=null&&this.set(g)}n.suppressDeprecationWarnings=!1,n.deprecationHandler=null;var D=Object.keys||function(g){var E,I=[];for(E in g)s(g,E)&&I.push(E);return I};function N(g,E,I){var O=""+Math.abs(g);return(0<=g?I?"+":"":"-")+Math.pow(10,Math.max(0,E-O.length)).toString().substr(1)+O}var z=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,X=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,ct={},J={};function Y(g,E,I,O){var G=typeof O=="string"?function(){return this[O]()}:O;g&&(J[g]=G),E&&(J[E[0]]=function(){return N(G.apply(this,arguments),E[1],E[2])}),I&&(J[I]=function(){return this.localeData().ordinal(G.apply(this,arguments),g)})}function $(g,E){return g.isValid()?(E=lt(E,g.localeData()),ct[E]=ct[E]||function(I){for(var O,G=I.match(z),ht=0,xt=G.length;ht<xt;ht++)J[G[ht]]?G[ht]=J[G[ht]]:G[ht]=(O=G[ht]).match(/\[[\s\S]/)?O.replace(/^\[|\]$/g,""):O.replace(/\\/g,"");return function(Mt){for(var Vt="",Ot=0;Ot<xt;Ot++)Vt+=v(G[Ot])?G[Ot].call(Mt,I):G[Ot];return Vt}}(E),ct[E](g)):g.localeData().invalidDate()}function lt(g,E){var I=5;function O(G){return E.longDateFormat(G)||G}for(X.lastIndex=0;0<=I&&X.test(g);)g=g.replace(X,O),X.lastIndex=0,--I;return g}var ut={};function W(g,E){var I=g.toLowerCase();ut[I]=ut[I+"s"]=ut[E]=g}function tt(g){return typeof g=="string"?ut[g]||ut[g.toLowerCase()]:void 0}function K(g){var E,I,O={};for(I in g)s(g,I)&&(E=tt(I))&&(O[E]=g[I]);return O}var it={};function Z(g,E){it[g]=E}function V(g){return g%4==0&&g%100!=0||g%400==0}function Q(g){return g<0?Math.ceil(g)||0:Math.floor(g)}function q(E){var E=+E,I=0;return I=E!=0&&isFinite(E)?Q(E):I}function U(g,E){return function(I){return I!=null?(j(this,g,I),n.updateOffset(this,E),this):F(this,g)}}function F(g,E){return g.isValid()?g._d["get"+(g._isUTC?"UTC":"")+E]():NaN}function j(g,E,I){g.isValid()&&!isNaN(I)&&(E==="FullYear"&&V(g.year())&&g.month()===1&&g.date()===29?(I=q(I),g._d["set"+(g._isUTC?"UTC":"")+E](I,g.month(),yt(I,g.month()))):g._d["set"+(g._isUTC?"UTC":"")+E](I))}var P=/\d/,fe=/\d\d/,et=/\d{3}/,to=/\d{4}/,os=/[+-]?\d{6}/,at=/\d\d?/,It=/\d\d\d\d?/,Lt=/\d\d\d\d\d\d?/,Rt=/\d{1,3}/,ls=/\d{1,4}/,ss=/[+-]?\d{1,6}/,Ct=/\d+/,pt=/[+-]?\d+/,mt=/Z|[+-]\d\d:?\d\d/gi,vt=/Z|[+-]\d\d(?::?\d\d)?/gi,Tt=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function ft(g,E,I){Gt[g]=v(E)?E:function(O,G){return O&&I?I:E}}function le(g,E){return s(Gt,g)?Gt[g](E._strict,E._locale):new RegExp(Dt(g.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(I,O,G,ht,xt){return O||G||ht||xt})))}function Dt(g){return g.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Gt={},$t={};function Qt(g,E){var I,O,G=E;for(typeof g=="string"&&(g=[g]),u(E)&&(G=function(ht,xt){xt[E]=q(ht)}),O=g.length,I=0;I<O;I++)$t[g[I]]=G}function we(g,E){Qt(g,function(I,O,G,ht){G._w=G._w||{},E(I,G._w,G,ht)})}var jt,Ft=0,zt=1,wt=2,bt=3,Et=4,kt=5,Ut=6,gt=7,he=8;function yt(g,E){if(isNaN(g)||isNaN(E))return NaN;var I=(E%(I=12)+I)%I;return g+=(E-I)/12,I==1?V(g)?29:28:31-I%7%2}jt=Array.prototype.indexOf||function(g){for(var E=0;E<this.length;++E)if(this[E]===g)return E;return-1},Y("M",["MM",2],"Mo",function(){return this.month()+1}),Y("MMM",0,0,function(g){return this.localeData().monthsShort(this,g)}),Y("MMMM",0,0,function(g){return this.localeData().months(this,g)}),W("month","M"),Z("month",8),ft("M",at),ft("MM",at,fe),ft("MMM",function(g,E){return E.monthsShortRegex(g)}),ft("MMMM",function(g,E){return E.monthsRegex(g)}),Qt(["M","MM"],function(g,E){E[zt]=q(g)-1}),Qt(["MMM","MMMM"],function(g,E,I,O){O=I._locale.monthsParse(g,O,I._strict),O!=null?E[zt]=O:m(I).invalidMonth=g});var ne="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ve="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),ye=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,be=Tt,Te=Tt;function Wt(g,E){var I;if(g.isValid()){if(typeof E=="string"){if(/^\d+$/.test(E))E=q(E);else if(!u(E=g.localeData().monthsParse(E)))return}I=Math.min(g.date(),yt(g.year(),E)),g._d["set"+(g._isUTC?"UTC":"")+"Month"](E,I)}}function se(g){return g!=null?(Wt(this,g),n.updateOffset(this,!0),this):F(this,"Month")}function me(){function g(xt,Mt){return Mt.length-xt.length}for(var E,I=[],O=[],G=[],ht=0;ht<12;ht++)E=p([2e3,ht]),I.push(this.monthsShort(E,"")),O.push(this.months(E,"")),G.push(this.months(E,"")),G.push(this.monthsShort(E,""));for(I.sort(g),O.sort(g),G.sort(g),ht=0;ht<12;ht++)I[ht]=Dt(I[ht]),O[ht]=Dt(O[ht]);for(ht=0;ht<24;ht++)G[ht]=Dt(G[ht]);this._monthsRegex=new RegExp("^("+G.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+O.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+I.join("|")+")","i")}function ue(g){return V(g)?366:365}Y("Y",0,0,function(){var g=this.year();return g<=9999?N(g,4):"+"+g}),Y(0,["YY",2],0,function(){return this.year()%100}),Y(0,["YYYY",4],0,"year"),Y(0,["YYYYY",5],0,"year"),Y(0,["YYYYYY",6,!0],0,"year"),W("year","y"),Z("year",1),ft("Y",pt),ft("YY",at,fe),ft("YYYY",ls,to),ft("YYYYY",ss,os),ft("YYYYYY",ss,os),Qt(["YYYYY","YYYYYY"],Ft),Qt("YYYY",function(g,E){E[Ft]=g.length===2?n.parseTwoDigitYear(g):q(g)}),Qt("YY",function(g,E){E[Ft]=n.parseTwoDigitYear(g)}),Qt("Y",function(g,E){E[Ft]=parseInt(g,10)}),n.parseTwoDigitYear=function(g){return q(g)+(68<q(g)?1900:2e3)};var N0=U("FullYear",!0);function _a(g,E,I,O,G,ht,xt){var Mt;return g<100&&0<=g?(Mt=new Date(g+400,E,I,O,G,ht,xt),isFinite(Mt.getFullYear())&&Mt.setFullYear(g)):Mt=new Date(g,E,I,O,G,ht,xt),Mt}function Hr(g){var E;return g<100&&0<=g?((E=Array.prototype.slice.call(arguments))[0]=g+400,E=new Date(Date.UTC.apply(null,E)),isFinite(E.getUTCFullYear())&&E.setUTCFullYear(g)):E=new Date(Date.UTC.apply(null,arguments)),E}function Ie(g,E,I){return I=7+E-I,I-(7+Hr(g,0,I).getUTCDay()-E)%7-1}function oe(g,xt,Mt,O,G){var ht,xt=1+7*(xt-1)+(7+Mt-O)%7+Ie(g,O,G),Mt=xt<=0?ue(ht=g-1)+xt:xt>ue(g)?(ht=g+1,xt-ue(g)):(ht=g,xt);return{year:ht,dayOfYear:Mt}}function Ke(g,E,I){var O,G,ht=Ie(g.year(),E,I),ht=Math.floor((g.dayOfYear()-ht-1)/7)+1;return ht<1?O=ht+wr(G=g.year()-1,E,I):ht>wr(g.year(),E,I)?(O=ht-wr(g.year(),E,I),G=g.year()+1):(G=g.year(),O=ht),{week:O,year:G}}function wr(g,G,I){var O=Ie(g,G,I),G=Ie(g+1,G,I);return(ue(g)-O+G)/7}Y("w",["ww",2],"wo","week"),Y("W",["WW",2],"Wo","isoWeek"),W("week","w"),W("isoWeek","W"),Z("week",5),Z("isoWeek",5),ft("w",at),ft("ww",at,fe),ft("W",at),ft("WW",at,fe),we(["w","ww","W","WW"],function(g,E,I,O){E[O.substr(0,1)]=q(g)});function Ge(g,E){return g.slice(E,7).concat(g.slice(0,E))}Y("d",0,"do","day"),Y("dd",0,0,function(g){return this.localeData().weekdaysMin(this,g)}),Y("ddd",0,0,function(g){return this.localeData().weekdaysShort(this,g)}),Y("dddd",0,0,function(g){return this.localeData().weekdays(this,g)}),Y("e",0,0,"weekday"),Y("E",0,0,"isoWeekday"),W("day","d"),W("weekday","e"),W("isoWeekday","E"),Z("day",11),Z("weekday",11),Z("isoWeekday",11),ft("d",at),ft("e",at),ft("E",at),ft("dd",function(g,E){return E.weekdaysMinRegex(g)}),ft("ddd",function(g,E){return E.weekdaysShortRegex(g)}),ft("dddd",function(g,E){return E.weekdaysRegex(g)}),we(["dd","ddd","dddd"],function(g,E,I,O){O=I._locale.weekdaysParse(g,O,I._strict),O!=null?E.d=O:m(I).invalidWeekday=g}),we(["d","e","E"],function(g,E,I,O){E[O]=q(g)});var Ze="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),qt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),st="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),At=Tt,Nt=Tt,Jt=Tt;function ze(){function g(Ot,de){return de.length-Ot.length}for(var E,I,O,G=[],ht=[],xt=[],Mt=[],Vt=0;Vt<7;Vt++)O=p([2e3,1]).day(Vt),E=Dt(this.weekdaysMin(O,"")),I=Dt(this.weekdaysShort(O,"")),O=Dt(this.weekdays(O,"")),G.push(E),ht.push(I),xt.push(O),Mt.push(E),Mt.push(I),Mt.push(O);G.sort(g),ht.sort(g),xt.sort(g),Mt.sort(g),this._weekdaysRegex=new RegExp("^("+Mt.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+xt.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+ht.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+G.join("|")+")","i")}function Pe(){return this.hours()%12||12}function qe(g,E){Y(g,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),E)})}function Tr(g,E){return E._meridiemParse}Y("H",["HH",2],0,"hour"),Y("h",["hh",2],0,Pe),Y("k",["kk",2],0,function(){return this.hours()||24}),Y("hmm",0,0,function(){return""+Pe.apply(this)+N(this.minutes(),2)}),Y("hmmss",0,0,function(){return""+Pe.apply(this)+N(this.minutes(),2)+N(this.seconds(),2)}),Y("Hmm",0,0,function(){return""+this.hours()+N(this.minutes(),2)}),Y("Hmmss",0,0,function(){return""+this.hours()+N(this.minutes(),2)+N(this.seconds(),2)}),qe("a",!0),qe("A",!1),W("hour","h"),Z("hour",13),ft("a",Tr),ft("A",Tr),ft("H",at),ft("h",at),ft("k",at),ft("HH",at,fe),ft("hh",at,fe),ft("kk",at,fe),ft("hmm",It),ft("hmmss",Lt),ft("Hmm",It),ft("Hmmss",Lt),Qt(["H","HH"],bt),Qt(["k","kk"],function(g,E,I){g=q(g),E[bt]=g===24?0:g}),Qt(["a","A"],function(g,E,I){I._isPm=I._locale.isPM(g),I._meridiem=g}),Qt(["h","hh"],function(g,E,I){E[bt]=q(g),m(I).bigHour=!0}),Qt("hmm",function(g,E,I){var O=g.length-2;E[bt]=q(g.substr(0,O)),E[Et]=q(g.substr(O)),m(I).bigHour=!0}),Qt("hmmss",function(g,E,I){var O=g.length-4,G=g.length-2;E[bt]=q(g.substr(0,O)),E[Et]=q(g.substr(O,2)),E[kt]=q(g.substr(G)),m(I).bigHour=!0}),Qt("Hmm",function(g,E,I){var O=g.length-2;E[bt]=q(g.substr(0,O)),E[Et]=q(g.substr(O))}),Qt("Hmmss",function(g,E,I){var O=g.length-4,G=g.length-2;E[bt]=q(g.substr(0,O)),E[Et]=q(g.substr(O,2)),E[kt]=q(g.substr(G))}),Tt=U("Hours",!0);var Ve,va={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:ne,monthsShort:ve,week:{dow:0,doy:6},weekdays:Ze,weekdaysMin:st,weekdaysShort:qt,meridiemParse:/[ap]\.?m?\.?/i},Ce={},Wi={};function E0(g){return g&&g.toLowerCase().replace("_","-")}function _u(g){for(var E,I,O,G,ht=0;ht<g.length;){for(E=(G=E0(g[ht]).split("-")).length,I=(I=E0(g[ht+1]))?I.split("-"):null;0<E;){if(O=Ln(G.slice(0,E).join("-")))return O;if(I&&I.length>=E&&function(xt,Mt){for(var Vt=Math.min(xt.length,Mt.length),Ot=0;Ot<Vt;Ot+=1)if(xt[Ot]!==Mt[Ot])return Ot;return Vt}(G,I)>=E-1)break;E--}ht++}return Ve}function Ln(g){var E;if(Ce[g]===void 0&&!0&&t&&t.exports&&g.match("^[^/\\\\]*$")!=null)try{E=Ve._abbr,fn("./locale/"+g),Xt(E)}catch{Ce[g]=null}return Ce[g]}function Xt(g,E){return g&&((E=l(E)?ce(g):ee(g,E))?Ve=E:typeof console<"u"&&console.warn&&console.warn("Locale "+g+" not found. Did you forget to load it?")),Ve._abbr}function ee(g,E){if(E===null)return delete Ce[g],null;var I,O=va;if(E.abbr=g,Ce[g]!=null)L("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),O=Ce[g]._config;else if(E.parentLocale!=null)if(Ce[E.parentLocale]!=null)O=Ce[E.parentLocale]._config;else{if((I=Ln(E.parentLocale))==null)return Wi[E.parentLocale]||(Wi[E.parentLocale]=[]),Wi[E.parentLocale].push({name:g,config:E}),null;O=I._config}return Ce[g]=new w(B(O,E)),Wi[g]&&Wi[g].forEach(function(G){ee(G.name,G.config)}),Xt(g),Ce[g]}function ce(g){var E;if(!(g=g&&g._locale&&g._locale._abbr?g._locale._abbr:g))return Ve;if(!i(g)){if(E=Ln(g))return E;g=[g]}return _u(g)}function Pt(g){var E=g._a;return E&&m(g).overflow===-2&&(E=E[zt]<0||11<E[zt]?zt:E[wt]<1||E[wt]>yt(E[Ft],E[zt])?wt:E[bt]<0||24<E[bt]||E[bt]===24&&(E[Et]!==0||E[kt]!==0||E[Ut]!==0)?bt:E[Et]<0||59<E[Et]?Et:E[kt]<0||59<E[kt]?kt:E[Ut]<0||999<E[Ut]?Ut:-1,m(g)._overflowDayOfYear&&(E<Ft||wt<E)&&(E=wt),m(g)._overflowWeeks&&E===-1&&(E=gt),m(g)._overflowWeekday&&E===-1&&(E=he),m(g).overflow=E),g}var je=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,rt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ks=/Z|[+-]\d\d(?::?\d\d)?/,ot=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Gr=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],C0=/^\/?Date\((-?\d+)/i,l_=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,S0={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function A0(g){var E,I,O,G,ht,xt,Vt=g._i,Mt=je.exec(Vt)||rt.exec(Vt),Vt=ot.length,Ot=Gr.length;if(Mt){for(m(g).iso=!0,E=0,I=Vt;E<I;E++)if(ot[E][1].exec(Mt[1])){G=ot[E][0],O=ot[E][2]!==!1;break}if(G==null)g._isValid=!1;else{if(Mt[3]){for(E=0,I=Ot;E<I;E++)if(Gr[E][1].exec(Mt[3])){ht=(Mt[2]||" ")+Gr[E][0];break}if(ht==null)return void(g._isValid=!1)}if(O||ht==null){if(Mt[4]){if(!Ks.exec(Mt[4]))return void(g._isValid=!1);xt="Z"}g._f=G+(ht||"")+(xt||""),vu(g)}else g._isValid=!1}}else g._isValid=!1}function mr(g,E,I,O,G,ht){return g=[function(xt){xt=parseInt(xt,10);{if(xt<=49)return 2e3+xt;if(xt<=999)return 1900+xt}return xt}(g),ve.indexOf(E),parseInt(I,10),parseInt(O,10),parseInt(G,10)],ht&&g.push(parseInt(ht,10)),g}function Hi(g){var E,I,O,G,ht=l_.exec(g._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));ht?(E=mr(ht[4],ht[3],ht[2],ht[5],ht[6],ht[7]),I=ht[1],O=E,G=g,I&&qt.indexOf(I)!==new Date(O[0],O[1],O[2]).getDay()?(m(G).weekdayMismatch=!0,G._isValid=!1):(g._a=E,g._tzm=(I=ht[8],O=ht[9],G=ht[10],I?S0[I]:O?0:60*(((I=parseInt(G,10))-(O=I%100))/100)+O),g._d=Hr.apply(null,g._a),g._d.setUTCMinutes(g._d.getUTCMinutes()-g._tzm),m(g).rfc2822=!0)):g._isValid=!1}function Gi(g,E,I){return g!=null?g:E!=null?E:I}function Zs(g){var E,I,O,G,ht,xt,Mt,Vt,Ot,de,ie,er=[];if(!g._d){for(O=g,G=new Date(n.now()),I=O._useUTC?[G.getUTCFullYear(),G.getUTCMonth(),G.getUTCDate()]:[G.getFullYear(),G.getMonth(),G.getDate()],g._w&&g._a[wt]==null&&g._a[zt]==null&&((G=(O=g)._w).GG!=null||G.W!=null||G.E!=null?(Vt=1,Ot=4,ht=Gi(G.GG,O._a[Ft],Ke(De(),1,4).year),xt=Gi(G.W,1),((Mt=Gi(G.E,1))<1||7<Mt)&&(de=!0)):(Vt=O._locale._week.dow,Ot=O._locale._week.doy,ie=Ke(De(),Vt,Ot),ht=Gi(G.gg,O._a[Ft],ie.year),xt=Gi(G.w,ie.week),G.d!=null?((Mt=G.d)<0||6<Mt)&&(de=!0):G.e!=null?(Mt=G.e+Vt,(G.e<0||6<G.e)&&(de=!0)):Mt=Vt),xt<1||xt>wr(ht,Vt,Ot)?m(O)._overflowWeeks=!0:de!=null?m(O)._overflowWeekday=!0:(ie=oe(ht,xt,Mt,Vt,Ot),O._a[Ft]=ie.year,O._dayOfYear=ie.dayOfYear)),g._dayOfYear!=null&&(G=Gi(g._a[Ft],I[Ft]),(g._dayOfYear>ue(G)||g._dayOfYear===0)&&(m(g)._overflowDayOfYear=!0),de=Hr(G,0,g._dayOfYear),g._a[zt]=de.getUTCMonth(),g._a[wt]=de.getUTCDate()),E=0;E<3&&g._a[E]==null;++E)g._a[E]=er[E]=I[E];for(;E<7;E++)g._a[E]=er[E]=g._a[E]==null?E===2?1:0:g._a[E];g._a[bt]===24&&g._a[Et]===0&&g._a[kt]===0&&g._a[Ut]===0&&(g._nextDay=!0,g._a[bt]=0),g._d=(g._useUTC?Hr:_a).apply(null,er),ht=g._useUTC?g._d.getUTCDay():g._d.getDay(),g._tzm!=null&&g._d.setUTCMinutes(g._d.getUTCMinutes()-g._tzm),g._nextDay&&(g._a[bt]=24),g._w&&g._w.d!==void 0&&g._w.d!==ht&&(m(g).weekdayMismatch=!0)}}function vu(g){if(g._f===n.ISO_8601)A0(g);else if(g._f===n.RFC_2822)Hi(g);else{g._a=[],m(g).empty=!0;for(var E,I,O,G,ht,xt=""+g._i,Mt=xt.length,Vt=0,Ot=lt(g._f,g._locale).match(z)||[],de=Ot.length,ie=0;ie<de;ie++)I=Ot[ie],(E=(xt.match(le(I,g))||[])[0])&&(0<(O=xt.substr(0,xt.indexOf(E))).length&&m(g).unusedInput.push(O),xt=xt.slice(xt.indexOf(E)+E.length),Vt+=E.length),J[I]?(E?m(g).empty=!1:m(g).unusedTokens.push(I),O=I,ht=g,(G=E)!=null&&s($t,O)&&$t[O](G,ht._a,ht,O)):g._strict&&!E&&m(g).unusedTokens.push(I);m(g).charsLeftOver=Mt-Vt,0<xt.length&&m(g).unusedInput.push(xt),g._a[bt]<=12&&m(g).bigHour===!0&&0<g._a[bt]&&(m(g).bigHour=void 0),m(g).parsedDateParts=g._a.slice(0),m(g).meridiem=g._meridiem,g._a[bt]=function(er,br,xi){return xi==null?br:er.meridiemHour!=null?er.meridiemHour(br,xi):er.isPM!=null?((er=er.isPM(xi))&&br<12&&(br+=12),br=er||br!==12?br:0):br}(g._locale,g._a[bt],g._meridiem),(Mt=m(g).era)!==null&&(g._a[Ft]=g._locale.erasConvertYear(Mt,g._a[Ft])),Zs(g),Pt(g)}}function M0(g){var E,I,O,G=g._i,ht=g._f;return g._locale=g._locale||ce(g._l),G===null||ht===void 0&&G===""?y({nullInput:!0}):(typeof G=="string"&&(g._i=G=g._locale.preparse(G)),M(G)?new C(Pt(G)):(h(G)?g._d=G:i(ht)?function(xt){var Mt,Vt,Ot,de,ie,er,br=!1,xi=xt._f.length;if(xi===0)return m(xt).invalidFormat=!0,xt._d=new Date(NaN);for(de=0;de<xi;de++)ie=0,er=!1,Mt=T({},xt),xt._useUTC!=null&&(Mt._useUTC=xt._useUTC),Mt._f=xt._f[de],vu(Mt),_(Mt)&&(er=!0),ie=(ie+=m(Mt).charsLeftOver)+10*m(Mt).unusedTokens.length,m(Mt).score=ie,br?ie<Ot&&(Ot=ie,Vt=Mt):(Ot==null||ie<Ot||er)&&(Ot=ie,Vt=Mt,er&&(br=!0));f(xt,Vt||Mt)}(g):ht?vu(g):l(ht=(G=g)._i)?G._d=new Date(n.now()):h(ht)?G._d=new Date(ht.valueOf()):typeof ht=="string"?(I=G,(E=C0.exec(I._i))!==null?I._d=new Date(+E[1]):(A0(I),I._isValid===!1&&(delete I._isValid,Hi(I),I._isValid===!1&&(delete I._isValid,I._strict?I._isValid=!1:n.createFromInputFallback(I))))):i(ht)?(G._a=d(ht.slice(0),function(xt){return parseInt(xt,10)}),Zs(G)):a(ht)?(E=G)._d||(O=(I=K(E._i)).day===void 0?I.date:I.day,E._a=d([I.year,I.month,O,I.hour,I.minute,I.second,I.millisecond],function(xt){return xt&&parseInt(xt,10)}),Zs(E)):u(ht)?G._d=new Date(ht):n.createFromInputFallback(G),_(g)||(g._d=null),g))}function Dr(g,E,I,O,G){var ht={};return E!==!0&&E!==!1||(O=E,E=void 0),I!==!0&&I!==!1||(O=I,I=void 0),(a(g)&&o(g)||i(g)&&g.length===0)&&(g=void 0),ht._isAMomentObject=!0,ht._useUTC=ht._isUTC=G,ht._l=I,ht._i=g,ht._f=E,ht._strict=O,(G=new C(Pt(M0(G=ht))))._nextDay&&(G.add(1,"d"),G._nextDay=void 0),G}function De(g,E,I,O){return Dr(g,E,I,O,!1)}n.createFromInputFallback=R("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(g){g._d=new Date(g._i+(g._useUTC?" UTC":""))}),n.ISO_8601=function(){},n.RFC_2822=function(){},It=R("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var g=De.apply(null,arguments);return this.isValid()&&g.isValid()?g<this?this:g:y()}),Lt=R("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var g=De.apply(null,arguments);return this.isValid()&&g.isValid()?this<g?this:g:y()});function hn(g,E){var I,O;if(!(E=E.length===1&&i(E[0])?E[0]:E).length)return De();for(I=E[0],O=1;O<E.length;++O)E[O].isValid()&&!E[O][g](I)||(I=E[O]);return I}var xa=["year","quarter","month","week","day","hour","minute","second","millisecond"];function _i(E){var E=K(E),I=E.year||0,O=E.quarter||0,G=E.month||0,ht=E.week||E.isoWeek||0,xt=E.day||0,Mt=E.hour||0,Vt=E.minute||0,Ot=E.second||0,de=E.millisecond||0;this._isValid=function(ie){var er,br,xi=!1,g_=xa.length;for(er in ie)if(s(ie,er)&&(jt.call(xa,er)===-1||ie[er]!=null&&isNaN(ie[er])))return!1;for(br=0;br<g_;++br)if(ie[xa[br]]){if(xi)return!1;parseFloat(ie[xa[br]])!==q(ie[xa[br]])&&(xi=!0)}return!0}(E),this._milliseconds=+de+1e3*Ot+6e4*Vt+1e3*Mt*60*60,this._days=+xt+7*ht,this._months=+G+3*O+12*I,this._data={},this._locale=ce(),this._bubble()}function ka(g){return g instanceof _i}function Rn(g){return g<0?-1*Math.round(-1*g):Math.round(g)}function xu(g,E){Y(g,0,0,function(){var I=this.utcOffset(),O="+";return I<0&&(I=-I,O="-"),O+N(~~(I/60),2)+E+N(~~I%60,2)})}xu("Z",":"),xu("ZZ",""),ft("Z",vt),ft("ZZ",vt),Qt(["Z","ZZ"],function(g,E,I){I._useUTC=!0,I._tzm=Qs(vt,g)});var yl=/([\+\-]|\d\d)/gi;function Qs(g,I){var I=(I||"").match(g);return I===null?null:(I=60*(g=((I[I.length-1]||[])+"").match(yl)||["-",0,0])[1]+q(g[2]))===0?0:g[0]==="+"?I:-I}function In(g,E){var I;return E._isUTC?(E=E.clone(),I=(M(g)||h(g)?g:De(g)).valueOf()-E.valueOf(),E._d.setTime(E._d.valueOf()+I),n.updateOffset(E,!1),E):De(g).local()}function c_(g){return-Math.round(g._d.getTimezoneOffset())}function rR(){return!!this.isValid()&&this._isUTC&&this._offset===0}n.updateOffset=function(){};var Ast=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Mst=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function vi(g,E){var I,O=g,G=null;return ka(g)?O={ms:g._milliseconds,d:g._days,M:g._months}:u(g)||!isNaN(+g)?(O={},E?O[E]=+g:O.milliseconds=+g):(G=Ast.exec(g))?(I=G[1]==="-"?-1:1,O={y:0,d:q(G[wt])*I,h:q(G[bt])*I,m:q(G[Et])*I,s:q(G[kt])*I,ms:q(Rn(1e3*G[Ut]))*I}):(G=Mst.exec(g))?(I=G[1]==="-"?-1:1,O={y:Js(G[2],I),M:Js(G[3],I),w:Js(G[4],I),d:Js(G[5],I),h:Js(G[6],I),m:Js(G[7],I),s:Js(G[8],I)}):O==null?O={}:typeof O=="object"&&("from"in O||"to"in O)&&(E=function(ht,xt){var Mt;return!ht.isValid()||!xt.isValid()?{milliseconds:0,months:0}:(xt=In(xt,ht),ht.isBefore(xt)?Mt=nR(ht,xt):((Mt=nR(xt,ht)).milliseconds=-Mt.milliseconds,Mt.months=-Mt.months),Mt)}(De(O.from),De(O.to)),(O={}).ms=E.milliseconds,O.M=E.months),G=new _i(O),ka(g)&&s(g,"_locale")&&(G._locale=g._locale),ka(g)&&s(g,"_isValid")&&(G._isValid=g._isValid),G}function Js(g,E){return g=g&&parseFloat(g.replace(",",".")),(isNaN(g)?0:g)*E}function nR(g,E){var I={};return I.months=E.month()-g.month()+12*(E.year()-g.year()),g.clone().add(I.months,"M").isAfter(E)&&--I.months,I.milliseconds=+E-+g.clone().add(I.months,"M"),I}function iR(g,E){return function(I,O){var G;return O===null||isNaN(+O)||(L(E,"moment()."+E+"(period, number) is deprecated. Please use moment()."+E+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),G=I,I=O,O=G),aR(this,vi(I,O),g),this}}function aR(g,xt,I,O){var G=xt._milliseconds,ht=Rn(xt._days),xt=Rn(xt._months);g.isValid()&&(O=O==null||O,xt&&Wt(g,F(g,"Month")+xt*I),ht&&j(g,"Date",F(g,"Date")+ht*I),G&&g._d.setTime(g._d.valueOf()+G*I),O&&n.updateOffset(g,ht||xt))}vi.fn=_i.prototype,vi.invalid=function(){return vi(NaN)},ne=iR(1,"add"),Ze=iR(-1,"subtract");function sR(g){return typeof g=="string"||g instanceof String}function Lst(g){return M(g)||h(g)||sR(g)||u(g)||function(E){var I=i(E),O=!1;return I&&(O=E.filter(function(G){return!u(G)&&sR(E)}).length===0),I&&O}(g)||function(E){var I,O,G=a(E)&&!o(E),ht=!1,xt=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],Mt=xt.length;for(I=0;I<Mt;I+=1)O=xt[I],ht=ht||s(E,O);return G&&ht}(g)||g==null}function L0(g,G){if(g.date()<G.date())return-L0(G,g);var I=12*(G.year()-g.year())+(G.month()-g.month()),O=g.clone().add(I,"months"),G=G-O<0?(G-O)/(O-g.clone().add(I-1,"months")):(G-O)/(g.clone().add(1+I,"months")-O);return-(I+G)||0}function oR(g){return g===void 0?this._locale._abbr:((g=ce(g))!=null&&(this._locale=g),this)}n.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",n.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]",st=R("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(g){return g===void 0?this.localeData():this.locale(g)});function lR(){return this._locale}var cR=126227808e5;function ml(g,E){return(g%E+E)%E}function uR(g,E,I){return g<100&&0<=g?new Date(g+400,E,I)-cR:new Date(g,E,I).valueOf()}function hR(g,E,I){return g<100&&0<=g?Date.UTC(g+400,E,I)-cR:Date.UTC(g,E,I)}function u_(g,E){return E.erasAbbrRegex(g)}function h_(){for(var g=[],E=[],I=[],O=[],G=this.eras(),ht=0,xt=G.length;ht<xt;++ht)E.push(Dt(G[ht].name)),g.push(Dt(G[ht].abbr)),I.push(Dt(G[ht].narrow)),O.push(Dt(G[ht].name)),O.push(Dt(G[ht].abbr)),O.push(Dt(G[ht].narrow));this._erasRegex=new RegExp("^("+O.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+E.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+g.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+I.join("|")+")","i")}function R0(g,E){Y(0,[g,g.length],0,E)}function fR(g,E,I,O,G){var ht;return g==null?Ke(this,O,G).year:(ht=wr(g,O,G),function(xt,Mt,Vt,Ot,de){return xt=oe(xt,Mt,Vt,Ot,de),Mt=Hr(xt.year,0,xt.dayOfYear),this.year(Mt.getUTCFullYear()),this.month(Mt.getUTCMonth()),this.date(Mt.getUTCDate()),this}.call(this,g,E=ht<E?ht:E,I,O,G))}Y("N",0,0,"eraAbbr"),Y("NN",0,0,"eraAbbr"),Y("NNN",0,0,"eraAbbr"),Y("NNNN",0,0,"eraName"),Y("NNNNN",0,0,"eraNarrow"),Y("y",["y",1],"yo","eraYear"),Y("y",["yy",2],0,"eraYear"),Y("y",["yyy",3],0,"eraYear"),Y("y",["yyyy",4],0,"eraYear"),ft("N",u_),ft("NN",u_),ft("NNN",u_),ft("NNNN",function(g,E){return E.erasNameRegex(g)}),ft("NNNNN",function(g,E){return E.erasNarrowRegex(g)}),Qt(["N","NN","NNN","NNNN","NNNNN"],function(g,E,I,O){O=I._locale.erasParse(g,O,I._strict),O?m(I).era=O:m(I).invalidEra=g}),ft("y",Ct),ft("yy",Ct),ft("yyy",Ct),ft("yyyy",Ct),ft("yo",function(g,E){return E._eraYearOrdinalRegex||Ct}),Qt(["y","yy","yyy","yyyy"],Ft),Qt(["yo"],function(g,E,I,O){var G;I._locale._eraYearOrdinalRegex&&(G=g.match(I._locale._eraYearOrdinalRegex)),I._locale.eraYearOrdinalParse?E[Ft]=I._locale.eraYearOrdinalParse(g,G):E[Ft]=parseInt(g,10)}),Y(0,["gg",2],0,function(){return this.weekYear()%100}),Y(0,["GG",2],0,function(){return this.isoWeekYear()%100}),R0("gggg","weekYear"),R0("ggggg","weekYear"),R0("GGGG","isoWeekYear"),R0("GGGGG","isoWeekYear"),W("weekYear","gg"),W("isoWeekYear","GG"),Z("weekYear",1),Z("isoWeekYear",1),ft("G",pt),ft("g",pt),ft("GG",at,fe),ft("gg",at,fe),ft("GGGG",ls,to),ft("gggg",ls,to),ft("GGGGG",ss,os),ft("ggggg",ss,os),we(["gggg","ggggg","GGGG","GGGGG"],function(g,E,I,O){E[O.substr(0,2)]=q(g)}),we(["gg","GG"],function(g,E,I,O){E[O]=n.parseTwoDigitYear(g)}),Y("Q",0,"Qo","quarter"),W("quarter","Q"),Z("quarter",7),ft("Q",P),Qt("Q",function(g,E){E[zt]=3*(q(g)-1)}),Y("D",["DD",2],"Do","date"),W("date","D"),Z("date",9),ft("D",at),ft("DD",at,fe),ft("Do",function(g,E){return g?E._dayOfMonthOrdinalParse||E._ordinalParse:E._dayOfMonthOrdinalParseLenient}),Qt(["D","DD"],wt),Qt("Do",function(g,E){E[wt]=q(g.match(at)[0])}),ls=U("Date",!0),Y("DDD",["DDDD",3],"DDDo","dayOfYear"),W("dayOfYear","DDD"),Z("dayOfYear",4),ft("DDD",Rt),ft("DDDD",et),Qt(["DDD","DDDD"],function(g,E,I){I._dayOfYear=q(g)}),Y("m",["mm",2],0,"minute"),W("minute","m"),Z("minute",14),ft("m",at),ft("mm",at,fe),Qt(["m","mm"],Et);var as,to=U("Minutes",!1),ss=(Y("s",["ss",2],0,"second"),W("second","s"),Z("second",15),ft("s",at),ft("ss",at,fe),Qt(["s","ss"],kt),U("Seconds",!1));for(Y("S",0,0,function(){return~~(this.millisecond()/100)}),Y(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Y(0,["SSS",3],0,"millisecond"),Y(0,["SSSS",4],0,function(){return 10*this.millisecond()}),Y(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),Y(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),Y(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),Y(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),Y(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),W("millisecond","ms"),Z("millisecond",16),ft("S",Rt,P),ft("SS",Rt,fe),ft("SSS",Rt,et),as="SSSS";as.length<=9;as+="S")ft(as,Ct);function Rst(g,E){E[Ut]=q(1e3*("0."+g))}for(as="S";as.length<=9;as+="S")Qt(as,Rst);os=U("Milliseconds",!1),Y("z",0,0,"zoneAbbr"),Y("zz",0,0,"zoneName"),P=C.prototype;function dR(g){return g}P.add=ne,P.calendar=function(I,G){arguments.length===1&&(arguments[0]?Lst(arguments[0])?(I=arguments[0],G=void 0):function(ht){for(var xt=a(ht)&&!o(ht),Mt=!1,Vt=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"],Ot=0;Ot<Vt.length;Ot+=1)Mt=Mt||s(ht,Vt[Ot]);return xt&&Mt}(arguments[0])&&(G=arguments[0],I=void 0):G=I=void 0);var I=I||De(),O=In(I,this).startOf("day"),O=n.calendarFormat(this,O)||"sameElse",G=G&&(v(G[O])?G[O].call(this,I):G[O]);return this.format(G||this.localeData().calendar(O,this,De(I)))},P.clone=function(){return new C(this)},P.diff=function(g,E,I){var O,G,ht;if(!this.isValid())return NaN;if(!(O=In(g,this)).isValid())return NaN;switch(G=6e4*(O.utcOffset()-this.utcOffset()),E=tt(E)){case"year":ht=L0(this,O)/12;break;case"month":ht=L0(this,O);break;case"quarter":ht=L0(this,O)/3;break;case"second":ht=(this-O)/1e3;break;case"minute":ht=(this-O)/6e4;break;case"hour":ht=(this-O)/36e5;break;case"day":ht=(this-O-G)/864e5;break;case"week":ht=(this-O-G)/6048e5;break;default:ht=this-O}return I?ht:Q(ht)},P.endOf=function(g){var E,I;if((g=tt(g))===void 0||g==="millisecond"||!this.isValid())return this;switch(I=this._isUTC?hR:uR,g){case"year":E=I(this.year()+1,0,1)-1;break;case"quarter":E=I(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":E=I(this.year(),this.month()+1,1)-1;break;case"week":E=I(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":E=I(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":E=I(this.year(),this.month(),this.date()+1)-1;break;case"hour":E=this._d.valueOf(),E+=36e5-ml(E+(this._isUTC?0:6e4*this.utcOffset()),36e5)-1;break;case"minute":E=this._d.valueOf(),E+=6e4-ml(E,6e4)-1;break;case"second":E=this._d.valueOf(),E+=1e3-ml(E,1e3)-1;break}return this._d.setTime(E),n.updateOffset(this,!0),this},P.format=function(g){return g=g||(this.isUtc()?n.defaultFormatUtc:n.defaultFormat),g=$(this,g),this.localeData().postformat(g)},P.from=function(g,E){return this.isValid()&&(M(g)&&g.isValid()||De(g).isValid())?vi({to:this,from:g}).locale(this.locale()).humanize(!E):this.localeData().invalidDate()},P.fromNow=function(g){return this.from(De(),g)},P.to=function(g,E){return this.isValid()&&(M(g)&&g.isValid()||De(g).isValid())?vi({from:this,to:g}).locale(this.locale()).humanize(!E):this.localeData().invalidDate()},P.toNow=function(g){return this.to(De(),g)},P.get=function(g){return v(this[g=tt(g)])?this[g]():this},P.invalidAt=function(){return m(this).overflow},P.isAfter=function(g,E){return g=M(g)?g:De(g),!(!this.isValid()||!g.isValid())&&((E=tt(E)||"millisecond")==="millisecond"?this.valueOf()>g.valueOf():g.valueOf()<this.clone().startOf(E).valueOf())},P.isBefore=function(g,E){return g=M(g)?g:De(g),!(!this.isValid()||!g.isValid())&&((E=tt(E)||"millisecond")==="millisecond"?this.valueOf()<g.valueOf():this.clone().endOf(E).valueOf()<g.valueOf())},P.isBetween=function(g,E,I,O){return g=M(g)?g:De(g),E=M(E)?E:De(E),!!(this.isValid()&&g.isValid()&&E.isValid())&&((O=O||"()")[0]==="("?this.isAfter(g,I):!this.isBefore(g,I))&&(O[1]===")"?this.isBefore(E,I):!this.isAfter(E,I))},P.isSame=function(I,E){var I=M(I)?I:De(I);return!(!this.isValid()||!I.isValid())&&((E=tt(E)||"millisecond")==="millisecond"?this.valueOf()===I.valueOf():(I=I.valueOf(),this.clone().startOf(E).valueOf()<=I&&I<=this.clone().endOf(E).valueOf()))},P.isSameOrAfter=function(g,E){return this.isSame(g,E)||this.isAfter(g,E)},P.isSameOrBefore=function(g,E){return this.isSame(g,E)||this.isBefore(g,E)},P.isValid=function(){return _(this)},P.lang=st,P.locale=oR,P.localeData=lR,P.max=Lt,P.min=It,P.parsingFlags=function(){return f({},m(this))},P.set=function(g,E){if(typeof g=="object")for(var I=function(ht){var xt,Mt=[];for(xt in ht)s(ht,xt)&&Mt.push({unit:xt,priority:it[xt]});return Mt.sort(function(Vt,Ot){return Vt.priority-Ot.priority}),Mt}(g=K(g)),O=I.length,G=0;G<O;G++)this[I[G].unit](g[I[G].unit]);else if(v(this[g=tt(g)]))return this[g](E);return this},P.startOf=function(g){var E,I;if((g=tt(g))===void 0||g==="millisecond"||!this.isValid())return this;switch(I=this._isUTC?hR:uR,g){case"year":E=I(this.year(),0,1);break;case"quarter":E=I(this.year(),this.month()-this.month()%3,1);break;case"month":E=I(this.year(),this.month(),1);break;case"week":E=I(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":E=I(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":E=I(this.year(),this.month(),this.date());break;case"hour":E=this._d.valueOf(),E-=ml(E+(this._isUTC?0:6e4*this.utcOffset()),36e5);break;case"minute":E=this._d.valueOf(),E-=ml(E,6e4);break;case"second":E=this._d.valueOf(),E-=ml(E,1e3);break}return this._d.setTime(E),n.updateOffset(this,!0),this},P.subtract=Ze,P.toArray=function(){var g=this;return[g.year(),g.month(),g.date(),g.hour(),g.minute(),g.second(),g.millisecond()]},P.toObject=function(){var g=this;return{years:g.year(),months:g.month(),date:g.date(),hours:g.hours(),minutes:g.minutes(),seconds:g.seconds(),milliseconds:g.milliseconds()}},P.toDate=function(){return new Date(this.valueOf())},P.toISOString=function(g){if(!this.isValid())return null;var E=(g=g!==!0)?this.clone().utc():this;return E.year()<0||9999<E.year()?$(E,g?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):v(Date.prototype.toISOString)?g?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",$(E,"Z")):$(E,g?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},P.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var g,E="moment",I="";return this.isLocal()||(E=this.utcOffset()===0?"moment.utc":"moment.parseZone",I="Z"),E="["+E+'("]',g=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",this.format(E+g+"-MM-DD[T]HH:mm:ss.SSS"+(I+'[")]'))},typeof Symbol<"u"&&Symbol.for!=null&&(P[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),P.toJSON=function(){return this.isValid()?this.toISOString():null},P.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},P.unix=function(){return Math.floor(this.valueOf()/1e3)},P.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},P.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},P.eraName=function(){for(var g,E=this.localeData().eras(),I=0,O=E.length;I<O;++I)if(g=this.clone().startOf("day").valueOf(),E[I].since<=g&&g<=E[I].until||E[I].until<=g&&g<=E[I].since)return E[I].name;return""},P.eraNarrow=function(){for(var g,E=this.localeData().eras(),I=0,O=E.length;I<O;++I)if(g=this.clone().startOf("day").valueOf(),E[I].since<=g&&g<=E[I].until||E[I].until<=g&&g<=E[I].since)return E[I].narrow;return""},P.eraAbbr=function(){for(var g,E=this.localeData().eras(),I=0,O=E.length;I<O;++I)if(g=this.clone().startOf("day").valueOf(),E[I].since<=g&&g<=E[I].until||E[I].until<=g&&g<=E[I].since)return E[I].abbr;return""},P.eraYear=function(){for(var g,E,I=this.localeData().eras(),O=0,G=I.length;O<G;++O)if(g=I[O].since<=I[O].until?1:-1,E=this.clone().startOf("day").valueOf(),I[O].since<=E&&E<=I[O].until||I[O].until<=E&&E<=I[O].since)return(this.year()-n(I[O].since).year())*g+I[O].offset;return this.year()},P.year=N0,P.isLeapYear=function(){return V(this.year())},P.weekYear=function(g){return fR.call(this,g,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},P.isoWeekYear=function(g){return fR.call(this,g,this.isoWeek(),this.isoWeekday(),1,4)},P.quarter=P.quarters=function(g){return g==null?Math.ceil((this.month()+1)/3):this.month(3*(g-1)+this.month()%3)},P.month=se,P.daysInMonth=function(){return yt(this.year(),this.month())},P.week=P.weeks=function(g){var E=this.localeData().week(this);return g==null?E:this.add(7*(g-E),"d")},P.isoWeek=P.isoWeeks=function(g){var E=Ke(this,1,4).week;return g==null?E:this.add(7*(g-E),"d")},P.weeksInYear=function(){var g=this.localeData()._week;return wr(this.year(),g.dow,g.doy)},P.weeksInWeekYear=function(){var g=this.localeData()._week;return wr(this.weekYear(),g.dow,g.doy)},P.isoWeeksInYear=function(){return wr(this.year(),1,4)},P.isoWeeksInISOWeekYear=function(){return wr(this.isoWeekYear(),1,4)},P.date=ls,P.day=P.days=function(g){if(!this.isValid())return g!=null?this:NaN;var E,I,O=this._isUTC?this._d.getUTCDay():this._d.getDay();return g!=null?(E=g,I=this.localeData(),g=typeof E!="string"?E:isNaN(E)?typeof(E=I.weekdaysParse(E))=="number"?E:null:parseInt(E,10),this.add(g-O,"d")):O},P.weekday=function(g){if(!this.isValid())return g!=null?this:NaN;var E=(this.day()+7-this.localeData()._week.dow)%7;return g==null?E:this.add(g-E,"d")},P.isoWeekday=function(g){return this.isValid()?g!=null?(E=g,I=this.localeData(),I=typeof E=="string"?I.weekdaysParse(E)%7||7:isNaN(E)?null:E,this.day(this.day()%7?I:I-7)):this.day()||7:g!=null?this:NaN;var E,I},P.dayOfYear=function(g){var E=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return g==null?E:this.add(g-E,"d")},P.hour=P.hours=Tt,P.minute=P.minutes=to,P.second=P.seconds=ss,P.millisecond=P.milliseconds=os,P.utcOffset=function(g,E,I){var O,G=this._offset||0;if(!this.isValid())return g!=null?this:NaN;if(g==null)return this._isUTC?G:c_(this);if(typeof g=="string"){if((g=Qs(vt,g))===null)return this}else Math.abs(g)<16&&!I&&(g*=60);return!this._isUTC&&E&&(O=c_(this)),this._offset=g,this._isUTC=!0,O!=null&&this.add(O,"m"),G!==g&&(!E||this._changeInProgress?aR(this,vi(g-G,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,n.updateOffset(this,!0),this._changeInProgress=null)),this},P.utc=function(g){return this.utcOffset(0,g)},P.local=function(g){return this._isUTC&&(this.utcOffset(0,g),this._isUTC=!1,g&&this.subtract(c_(this),"m")),this},P.parseZone=function(){var g;return this._tzm!=null?this.utcOffset(this._tzm,!1,!0):typeof this._i=="string"&&((g=Qs(mt,this._i))!=null?this.utcOffset(g):this.utcOffset(0,!0)),this},P.hasAlignedHourOffset=function(g){return!!this.isValid()&&(g=g?De(g).utcOffset():0,(this.utcOffset()-g)%60==0)},P.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},P.isLocal=function(){return!!this.isValid()&&!this._isUTC},P.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},P.isUtc=rR,P.isUTC=rR,P.zoneAbbr=function(){return this._isUTC?"UTC":""},P.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},P.dates=R("dates accessor is deprecated. Use date instead.",ls),P.months=R("months accessor is deprecated. Use month instead",se),P.years=R("years accessor is deprecated. Use year instead",N0),P.zone=R("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(g,E){return g!=null?(this.utcOffset(g=typeof g!="string"?-g:g,E),this):-this.utcOffset()}),P.isDSTShifted=R("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var g,E={};return T(E,this),(E=M0(E))._a?(g=(E._isUTC?p:De)(E._a),this._isDSTShifted=this.isValid()&&0<function(I,O,G){for(var ht=Math.min(I.length,O.length),xt=Math.abs(I.length-O.length),Mt=0,Vt=0;Vt<ht;Vt++)(G&&I[Vt]!==O[Vt]||!G&&q(I[Vt])!==q(O[Vt]))&&Mt++;return Mt+xt}(E._a,g.toArray())):this._isDSTShifted=!1,this._isDSTShifted}),fe=w.prototype;function I0(g,E,I,ht){var G=ce(),ht=p().set(ht,E);return G[I](ht,g)}function pR(g,E,I){if(u(g)&&(E=g,g=void 0),g=g||"",E!=null)return I0(g,E,I,"month");for(var O=[],G=0;G<12;G++)O[G]=I0(g,G,I,"month");return O}function f_(g,E,I,O){E=(typeof g=="boolean"?u(E)&&(I=E,E=void 0):(E=g,g=!1,u(I=E)&&(I=E,E=void 0)),E||"");var G,ht=ce(),xt=g?ht._week.dow:0,Mt=[];if(I!=null)return I0(E,(I+xt)%7,O,"day");for(G=0;G<7;G++)Mt[G]=I0(E,(G+xt)%7,O,"day");return Mt}fe.calendar=function(g,E,I){return v(g=this._calendar[g]||this._calendar.sameElse)?g.call(E,I):g},fe.longDateFormat=function(g){var E=this._longDateFormat[g],I=this._longDateFormat[g.toUpperCase()];return E||!I?E:(this._longDateFormat[g]=I.match(z).map(function(O){return O==="MMMM"||O==="MM"||O==="DD"||O==="dddd"?O.slice(1):O}).join(""),this._longDateFormat[g])},fe.invalidDate=function(){return this._invalidDate},fe.ordinal=function(g){return this._ordinal.replace("%d",g)},fe.preparse=dR,fe.postformat=dR,fe.relativeTime=function(g,E,I,O){var G=this._relativeTime[I];return v(G)?G(g,E,I,O):G.replace(/%d/i,g)},fe.pastFuture=function(g,E){return v(g=this._relativeTime[0<g?"future":"past"])?g(E):g.replace(/%s/i,E)},fe.set=function(g){var E,I;for(I in g)s(g,I)&&(v(E=g[I])?this[I]=E:this["_"+I]=E);this._config=g,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},fe.eras=function(g,E){for(var I,O=this._eras||ce("en")._eras,G=0,ht=O.length;G<ht;++G){switch(typeof O[G].since){case"string":I=n(O[G].since).startOf("day"),O[G].since=I.valueOf();break}switch(typeof O[G].until){case"undefined":O[G].until=1/0;break;case"string":I=n(O[G].until).startOf("day").valueOf(),O[G].until=I.valueOf();break}}return O},fe.erasParse=function(g,E,I){var O,G,ht,xt,Mt,Vt=this.eras();for(g=g.toUpperCase(),O=0,G=Vt.length;O<G;++O)if(ht=Vt[O].name.toUpperCase(),xt=Vt[O].abbr.toUpperCase(),Mt=Vt[O].narrow.toUpperCase(),I)switch(E){case"N":case"NN":case"NNN":if(xt===g)return Vt[O];break;case"NNNN":if(ht===g)return Vt[O];break;case"NNNNN":if(Mt===g)return Vt[O];break}else if(0<=[ht,xt,Mt].indexOf(g))return Vt[O]},fe.erasConvertYear=function(g,E){var I=g.since<=g.until?1:-1;return E===void 0?n(g.since).year():n(g.since).year()+(E-g.offset)*I},fe.erasAbbrRegex=function(g){return s(this,"_erasAbbrRegex")||h_.call(this),g?this._erasAbbrRegex:this._erasRegex},fe.erasNameRegex=function(g){return s(this,"_erasNameRegex")||h_.call(this),g?this._erasNameRegex:this._erasRegex},fe.erasNarrowRegex=function(g){return s(this,"_erasNarrowRegex")||h_.call(this),g?this._erasNarrowRegex:this._erasRegex},fe.months=function(g,E){return g?(i(this._months)?this._months:this._months[(this._months.isFormat||ye).test(E)?"format":"standalone"])[g.month()]:i(this._months)?this._months:this._months.standalone},fe.monthsShort=function(g,E){return g?(i(this._monthsShort)?this._monthsShort:this._monthsShort[ye.test(E)?"format":"standalone"])[g.month()]:i(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},fe.monthsParse=function(g,E,I){var O,G;if(this._monthsParseExact)return function(ie,xt,Mt){var Vt,Ot,de,ie=ie.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],Vt=0;Vt<12;++Vt)de=p([2e3,Vt]),this._shortMonthsParse[Vt]=this.monthsShort(de,"").toLocaleLowerCase(),this._longMonthsParse[Vt]=this.months(de,"").toLocaleLowerCase();return Mt?xt==="MMM"?(Ot=jt.call(this._shortMonthsParse,ie))!==-1?Ot:null:(Ot=jt.call(this._longMonthsParse,ie))!==-1?Ot:null:xt==="MMM"?(Ot=jt.call(this._shortMonthsParse,ie))!==-1||(Ot=jt.call(this._longMonthsParse,ie))!==-1?Ot:null:(Ot=jt.call(this._longMonthsParse,ie))!==-1||(Ot=jt.call(this._shortMonthsParse,ie))!==-1?Ot:null}.call(this,g,E,I);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),O=0;O<12;O++)if(G=p([2e3,O]),I&&!this._longMonthsParse[O]&&(this._longMonthsParse[O]=new RegExp("^"+this.months(G,"").replace(".","")+"$","i"),this._shortMonthsParse[O]=new RegExp("^"+this.monthsShort(G,"").replace(".","")+"$","i")),I||this._monthsParse[O]||(G="^"+this.months(G,"")+"|^"+this.monthsShort(G,""),this._monthsParse[O]=new RegExp(G.replace(".",""),"i")),I&&E==="MMMM"&&this._longMonthsParse[O].test(g)||I&&E==="MMM"&&this._shortMonthsParse[O].test(g)||!I&&this._monthsParse[O].test(g))return O},fe.monthsRegex=function(g){return this._monthsParseExact?(s(this,"_monthsRegex")||me.call(this),g?this._monthsStrictRegex:this._monthsRegex):(s(this,"_monthsRegex")||(this._monthsRegex=Te),this._monthsStrictRegex&&g?this._monthsStrictRegex:this._monthsRegex)},fe.monthsShortRegex=function(g){return this._monthsParseExact?(s(this,"_monthsRegex")||me.call(this),g?this._monthsShortStrictRegex:this._monthsShortRegex):(s(this,"_monthsShortRegex")||(this._monthsShortRegex=be),this._monthsShortStrictRegex&&g?this._monthsShortStrictRegex:this._monthsShortRegex)},fe.week=function(g){return Ke(g,this._week.dow,this._week.doy).week},fe.firstDayOfYear=function(){return this._week.doy},fe.firstDayOfWeek=function(){return this._week.dow},fe.weekdays=function(g,E){return E=i(this._weekdays)?this._weekdays:this._weekdays[g&&g!==!0&&this._weekdays.isFormat.test(E)?"format":"standalone"],g===!0?Ge(E,this._week.dow):g?E[g.day()]:E},fe.weekdaysMin=function(g){return g===!0?Ge(this._weekdaysMin,this._week.dow):g?this._weekdaysMin[g.day()]:this._weekdaysMin},fe.weekdaysShort=function(g){return g===!0?Ge(this._weekdaysShort,this._week.dow):g?this._weekdaysShort[g.day()]:this._weekdaysShort},fe.weekdaysParse=function(g,E,I){var O,G;if(this._weekdaysParseExact)return function(ie,xt,Mt){var Vt,Ot,de,ie=ie.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],Vt=0;Vt<7;++Vt)de=p([2e3,1]).day(Vt),this._minWeekdaysParse[Vt]=this.weekdaysMin(de,"").toLocaleLowerCase(),this._shortWeekdaysParse[Vt]=this.weekdaysShort(de,"").toLocaleLowerCase(),this._weekdaysParse[Vt]=this.weekdays(de,"").toLocaleLowerCase();return Mt?xt==="dddd"?(Ot=jt.call(this._weekdaysParse,ie))!==-1?Ot:null:xt==="ddd"?(Ot=jt.call(this._shortWeekdaysParse,ie))!==-1?Ot:null:(Ot=jt.call(this._minWeekdaysParse,ie))!==-1?Ot:null:xt==="dddd"?(Ot=jt.call(this._weekdaysParse,ie))!==-1||(Ot=jt.call(this._shortWeekdaysParse,ie))!==-1||(Ot=jt.call(this._minWeekdaysParse,ie))!==-1?Ot:null:xt==="ddd"?(Ot=jt.call(this._shortWeekdaysParse,ie))!==-1||(Ot=jt.call(this._weekdaysParse,ie))!==-1||(Ot=jt.call(this._minWeekdaysParse,ie))!==-1?Ot:null:(Ot=jt.call(this._minWeekdaysParse,ie))!==-1||(Ot=jt.call(this._weekdaysParse,ie))!==-1||(Ot=jt.call(this._shortWeekdaysParse,ie))!==-1?Ot:null}.call(this,g,E,I);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),O=0;O<7;O++)if(G=p([2e3,1]).day(O),I&&!this._fullWeekdaysParse[O]&&(this._fullWeekdaysParse[O]=new RegExp("^"+this.weekdays(G,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[O]=new RegExp("^"+this.weekdaysShort(G,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[O]=new RegExp("^"+this.weekdaysMin(G,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[O]||(G="^"+this.weekdays(G,"")+"|^"+this.weekdaysShort(G,"")+"|^"+this.weekdaysMin(G,""),this._weekdaysParse[O]=new RegExp(G.replace(".",""),"i")),I&&E==="dddd"&&this._fullWeekdaysParse[O].test(g)||I&&E==="ddd"&&this._shortWeekdaysParse[O].test(g)||I&&E==="dd"&&this._minWeekdaysParse[O].test(g)||!I&&this._weekdaysParse[O].test(g))return O},fe.weekdaysRegex=function(g){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||ze.call(this),g?this._weekdaysStrictRegex:this._weekdaysRegex):(s(this,"_weekdaysRegex")||(this._weekdaysRegex=At),this._weekdaysStrictRegex&&g?this._weekdaysStrictRegex:this._weekdaysRegex)},fe.weekdaysShortRegex=function(g){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||ze.call(this),g?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(s(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Nt),this._weekdaysShortStrictRegex&&g?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},fe.weekdaysMinRegex=function(g){return this._weekdaysParseExact?(s(this,"_weekdaysRegex")||ze.call(this),g?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(s(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Jt),this._weekdaysMinStrictRegex&&g?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},fe.isPM=function(g){return(g+"").toLowerCase().charAt(0)==="p"},fe.meridiem=function(g,E,I){return 11<g?I?"pm":"PM":I?"am":"AM"},Xt("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(g){var E=g%10;return g+(q(g%100/10)===1?"th":E==1?"st":E==2?"nd":E==3?"rd":"th")}}),n.lang=R("moment.lang is deprecated. Use moment.locale instead.",Xt),n.langData=R("moment.langData is deprecated. Use moment.localeData instead.",ce);var wa=Math.abs;function gR(g,E,I,O){return E=vi(E,I),g._milliseconds+=O*E._milliseconds,g._days+=O*E._days,g._months+=O*E._months,g._bubble()}function yR(g){return g<0?Math.floor(g):Math.ceil(g)}function mR(g){return 4800*g/146097}function d_(g){return 146097*g/4800}function Ta(g){return function(){return this.as(g)}}Rt=Ta("ms"),et=Ta("s"),ne=Ta("m"),Lt=Ta("h"),It=Ta("d"),Ze=Ta("w"),Tt=Ta("M"),to=Ta("Q"),ss=Ta("y");function eo(g){return function(){return this.isValid()?this._data[g]:NaN}}var os=eo("milliseconds"),ls=eo("seconds"),N0=eo("minutes"),fe=eo("hours"),Ist=eo("days"),Nst=eo("months"),Bst=eo("years"),Ea=Math.round,bl={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Dst(g,E,I,O){var Ot=vi(g).abs(),de=Ea(Ot.as("s")),G=Ea(Ot.as("m")),ht=Ea(Ot.as("h")),xt=Ea(Ot.as("d")),Mt=Ea(Ot.as("M")),Vt=Ea(Ot.as("w")),Ot=Ea(Ot.as("y")),de=(de<=I.ss?["s",de]:de<I.s&&["ss",de])||G<=1&&["m"]||G<I.m&&["mm",G]||ht<=1&&["h"]||ht<I.h&&["hh",ht]||xt<=1&&["d"]||xt<I.d&&["dd",xt];return(de=(de=I.w!=null?de||Vt<=1&&["w"]||Vt<I.w&&["ww",Vt]:de)||Mt<=1&&["M"]||Mt<I.M&&["MM",Mt]||Ot<=1&&["y"]||["yy",Ot])[2]=E,de[3]=0<+g,de[4]=O,function(ie,er,br,xi,g_){return g_.relativeTime(er||1,!!br,ie,xi)}.apply(null,de)}var p_=Math.abs;function _l(g){return(0<g)-(g<0)||+g}function B0(){if(!this.isValid())return this.localeData().invalidDate();var g,E,I,O,G,ht,xt,Mt=p_(this._milliseconds)/1e3,Vt=p_(this._days),Ot=p_(this._months),de=this.asSeconds();return de?(g=Q(Mt/60),E=Q(g/60),Mt%=60,g%=60,I=Q(Ot/12),Ot%=12,O=Mt?Mt.toFixed(3).replace(/\.?0+$/,""):"",G=_l(this._months)!==_l(de)?"-":"",ht=_l(this._days)!==_l(de)?"-":"",xt=_l(this._milliseconds)!==_l(de)?"-":"",(de<0?"-":"")+"P"+(I?G+I+"Y":"")+(Ot?G+Ot+"M":"")+(Vt?ht+Vt+"D":"")+(E||g||Mt?"T":"")+(E?xt+E+"H":"")+(g?xt+g+"M":"")+(Mt?xt+O+"S":"")):"P0D"}var Be=_i.prototype;return Be.isValid=function(){return this._isValid},Be.abs=function(){var g=this._data;return this._milliseconds=wa(this._milliseconds),this._days=wa(this._days),this._months=wa(this._months),g.milliseconds=wa(g.milliseconds),g.seconds=wa(g.seconds),g.minutes=wa(g.minutes),g.hours=wa(g.hours),g.months=wa(g.months),g.years=wa(g.years),this},Be.add=function(g,E){return gR(this,g,E,1)},Be.subtract=function(g,E){return gR(this,g,E,-1)},Be.as=function(g){if(!this.isValid())return NaN;var E,I,O=this._milliseconds;if((g=tt(g))==="month"||g==="quarter"||g==="year")switch(E=this._days+O/864e5,I=this._months+mR(E),g){case"month":return I;case"quarter":return I/3;case"year":return I/12}else switch(E=this._days+Math.round(d_(this._months)),g){case"week":return E/7+O/6048e5;case"day":return E+O/864e5;case"hour":return 24*E+O/36e5;case"minute":return 1440*E+O/6e4;case"second":return 86400*E+O/1e3;case"millisecond":return Math.floor(864e5*E)+O;default:throw new Error("Unknown unit "+g)}},Be.asMilliseconds=Rt,Be.asSeconds=et,Be.asMinutes=ne,Be.asHours=Lt,Be.asDays=It,Be.asWeeks=Ze,Be.asMonths=Tt,Be.asQuarters=to,Be.asYears=ss,Be.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*q(this._months/12):NaN},Be._bubble=function(){var g=this._milliseconds,E=this._days,I=this._months,O=this._data;return 0<=g&&0<=E&&0<=I||g<=0&&E<=0&&I<=0||(g+=864e5*yR(d_(I)+E),I=E=0),O.milliseconds=g%1e3,g=Q(g/1e3),O.seconds=g%60,g=Q(g/60),O.minutes=g%60,g=Q(g/60),O.hours=g%24,E+=Q(g/24),I+=g=Q(mR(E)),E-=yR(d_(g)),g=Q(I/12),I%=12,O.days=E,O.months=I,O.years=g,this},Be.clone=function(){return vi(this)},Be.get=function(g){return g=tt(g),this.isValid()?this[g+"s"]():NaN},Be.milliseconds=os,Be.seconds=ls,Be.minutes=N0,Be.hours=fe,Be.days=Ist,Be.weeks=function(){return Q(this.days()/7)},Be.months=Nst,Be.years=Bst,Be.humanize=function(g,E){if(!this.isValid())return this.localeData().invalidDate();var I=!1,O=bl;return typeof g=="object"&&(E=g,g=!1),typeof g=="boolean"&&(I=g),typeof E=="object"&&(O=Object.assign({},bl,E),E.s!=null&&E.ss==null&&(O.ss=E.s-1)),g=this.localeData(),E=Dst(this,!I,O,g),I&&(E=g.pastFuture(+this,E)),g.postformat(E)},Be.toISOString=B0,Be.toString=B0,Be.toJSON=B0,Be.locale=oR,Be.localeData=lR,Be.toIsoString=R("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",B0),Be.lang=st,Y("X",0,0,"unix"),Y("x",0,0,"valueOf"),ft("x",pt),ft("X",/[+-]?\d+(\.\d{1,3})?/),Qt("X",function(g,E,I){I._d=new Date(1e3*parseFloat(g))}),Qt("x",function(g,E,I){I._d=new Date(q(g))}),n.version="2.29.4",r=De,n.fn=P,n.min=function(){return hn("isBefore",[].slice.call(arguments,0))},n.max=function(){return hn("isAfter",[].slice.call(arguments,0))},n.now=function(){return Date.now?Date.now():+new Date},n.utc=p,n.unix=function(g){return De(1e3*g)},n.months=function(g,E){return pR(g,E,"months")},n.isDate=h,n.locale=Xt,n.invalid=y,n.duration=vi,n.isMoment=M,n.weekdays=function(g,E,I){return f_(g,E,I,"weekdays")},n.parseZone=function(){return De.apply(null,arguments).parseZone()},n.localeData=ce,n.isDuration=ka,n.monthsShort=function(g,E){return pR(g,E,"monthsShort")},n.weekdaysMin=function(g,E,I){return f_(g,E,I,"weekdaysMin")},n.defineLocale=ee,n.updateLocale=function(g,E){var I,O;return E!=null?(O=va,Ce[g]!=null&&Ce[g].parentLocale!=null?Ce[g].set(B(Ce[g]._config,E)):(E=B(O=(I=Ln(g))!=null?I._config:O,E),I==null&&(E.abbr=g),(O=new w(E)).parentLocale=Ce[g],Ce[g]=O),Xt(g)):Ce[g]!=null&&(Ce[g].parentLocale!=null?(Ce[g]=Ce[g].parentLocale,g===Xt()&&Xt(g)):Ce[g]!=null&&delete Ce[g]),Ce[g]},n.locales=function(){return D(Ce)},n.weekdaysShort=function(g,E,I){return f_(g,E,I,"weekdaysShort")},n.normalizeUnits=tt,n.relativeTimeRounding=function(g){return g===void 0?Ea:typeof g=="function"&&(Ea=g,!0)},n.relativeTimeThreshold=function(g,E){return bl[g]!==void 0&&(E===void 0?bl[g]:(bl[g]=E,g==="s"&&(bl.ss=E-1),!0))},n.calendarFormat=function(g,E){return(g=g.diff(E,"days",!0))<-6?"sameElse":g<-1?"lastWeek":g<0?"lastDay":g<1?"sameDay":g<2?"nextDay":g<7?"nextWeek":"sameElse"},n.prototype=P,n.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},n})})(y_);const Xn=y_.exports,ji={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},H={trace:(...t)=>{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},D0=function(t="fatal"){let e=ji.fatal;typeof t=="string"?(t=t.toLowerCase(),t in ji&&(e=ji[t])):typeof t=="number"&&(e=t),H.trace=()=>{},H.debug=()=>{},H.info=()=>{},H.warn=()=>{},H.error=()=>{},H.fatal=()=>{},e<=ji.fatal&&(H.fatal=console.error?console.error.bind(console,Nn("FATAL"),"color: orange"):console.log.bind(console,"\x1B[35m",Nn("FATAL"))),e<=ji.error&&(H.error=console.error?console.error.bind(console,Nn("ERROR"),"color: orange"):console.log.bind(console,"\x1B[31m",Nn("ERROR"))),e<=ji.warn&&(H.warn=console.warn?console.warn.bind(console,Nn("WARN"),"color: orange"):console.log.bind(console,"\x1B[33m",Nn("WARN"))),e<=ji.info&&(H.info=console.info?console.info.bind(console,Nn("INFO"),"color: lightblue"):console.log.bind(console,"\x1B[34m",Nn("INFO"))),e<=ji.debug&&(H.debug=console.debug?console.debug.bind(console,Nn("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Nn("DEBUG"))),e<=ji.trace&&(H.trace=console.debug?console.debug.bind(console,Nn("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1B[32m",Nn("TRACE")))},Nn=t=>`%c${Xn().format("ss.SSS")} : ${t} : `;var O0={};Object.defineProperty(O0,"__esModule",{value:!0});var ki=O0.sanitizeUrl=void 0,bR=/^([^\w]*)(javascript|data|vbscript)/im,_R=/&#(\w+)(^\w|;)?/g,vR=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,xR=/^([^:]+):/gm,kR=[".","/"];function wR(t){return kR.indexOf(t[0])>-1}function TR(t){return t.replace(_R,function(e,r){return String.fromCharCode(r)})}function ER(t){var e=TR(t||"").replace(vR,"").trim();if(!e)return"about:blank";if(wR(e))return e;var r=e.match(xR);if(!r)return e;var n=r[0];return bR.test(n)?"about:blank":e}ki=O0.sanitizeUrl=ER;function Qe(t,e){return t==null||e==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function m_(t,e){return t==null||e==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function ku(t){let e,r,n;t.length!==2?(e=Qe,r=(o,l)=>Qe(t(o),l),n=(o,l)=>t(o)-l):(e=t===Qe||t===m_?t:CR,r=t,n=t);function i(o,l,u=0,h=o.length){if(u<h){if(e(l,l)!==0)return h;do{const d=u+h>>>1;r(o[d],l)<0?u=d+1:h=d}while(u<h)}return u}function a(o,l,u=0,h=o.length){if(u<h){if(e(l,l)!==0)return h;do{const d=u+h>>>1;r(o[d],l)<=0?u=d+1:h=d}while(u<h)}return u}function s(o,l,u=0,h=o.length){const d=i(o,l,u,h-1);return d>u&&n(o[d-1],l)>-n(o[d],l)?d-1:d}return{left:i,center:s,right:a}}function CR(){return 0}function b_(t){return t===null?NaN:+t}function*__(t,e){if(e===void 0)for(let r of t)r!=null&&(r=+r)>=r&&(yield r);else{let r=-1;for(let n of t)(n=e(n,++r,t))!=null&&(n=+n)>=n&&(yield n)}}const v_=ku(Qe),x_=v_.right,SR=v_.left,AR=ku(b_).center,cs=x_;function MR(t,e){if(!((e=+e)>=0))throw new RangeError("invalid r");let r=t.length;if(!((r=Math.floor(r))>=0))throw new RangeError("invalid length");if(!r||!e)return t;const n=F0(e),i=t.slice();return n(t,i,0,r,1),n(i,t,0,r,1),n(t,i,0,r,1),t}const k_=w_(F0),LR=w_(RR);function w_(t){return function(e,r,n=r){if(!((r=+r)>=0))throw new RangeError("invalid rx");if(!((n=+n)>=0))throw new RangeError("invalid ry");let{data:i,width:a,height:s}=e;if(!((a=Math.floor(a))>=0))throw new RangeError("invalid width");if(!((s=Math.floor(s!==void 0?s:i.length/a))>=0))throw new RangeError("invalid height");if(!a||!s||!r&&!n)return e;const o=r&&t(r),l=n&&t(n),u=i.slice();return o&&l?(ro(o,u,i,a,s),ro(o,i,u,a,s),ro(o,u,i,a,s),no(l,i,u,a,s),no(l,u,i,a,s),no(l,i,u,a,s)):o?(ro(o,i,u,a,s),ro(o,u,i,a,s),ro(o,i,u,a,s)):l&&(no(l,i,u,a,s),no(l,u,i,a,s),no(l,i,u,a,s)),e}}function ro(t,e,r,n,i){for(let a=0,s=n*i;a<s;)t(e,r,a,a+=n,1)}function no(t,e,r,n,i){for(let a=0,s=n*i;a<n;++a)t(e,r,a,a+s,n)}function RR(t){const e=F0(t);return(r,n,i,a,s)=>{i<<=2,a<<=2,s<<=2,e(r,n,i+0,a+0,s),e(r,n,i+1,a+1,s),e(r,n,i+2,a+2,s),e(r,n,i+3,a+3,s)}}function F0(t){const e=Math.floor(t);if(e===t)return IR(t);const r=t-e,n=2*t+1;return(i,a,s,o,l)=>{if(!((o-=l)>=s))return;let u=e*a[s];const h=l*e,d=h+l;for(let f=s,p=s+h;f<p;f+=l)u+=a[Math.min(o,f)];for(let f=s,p=o;f<=p;f+=l)u+=a[Math.min(o,f+h)],i[f]=(u+r*(a[Math.max(s,f-d)]+a[Math.min(o,f+d)]))/n,u-=a[Math.max(s,f-h)]}}function IR(t){const e=2*t+1;return(r,n,i,a,s)=>{if(!((a-=s)>=i))return;let o=t*n[i];const l=s*t;for(let u=i,h=i+l;u<h;u+=s)o+=n[Math.min(a,u)];for(let u=i,h=a;u<=h;u+=s)o+=n[Math.min(a,u+l)],r[u]=o/e,o-=n[Math.max(i,u-l)]}}function wu(t,e){let r=0;if(e===void 0)for(let n of t)n!=null&&(n=+n)>=n&&++r;else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(i=+i)>=i&&++r}return r}function NR(t){return t.length|0}function BR(t){return!(t>0)}function DR(t){return typeof t!="object"||"length"in t?t:Array.from(t)}function OR(t){return e=>t(...e)}function FR(...t){const e=typeof t[t.length-1]=="function"&&OR(t.pop());t=t.map(DR);const r=t.map(NR),n=t.length-1,i=new Array(n+1).fill(0),a=[];if(n<0||r.some(BR))return a;for(;;){a.push(i.map((o,l)=>t[l][o]));let s=n;for(;++i[s]===r[s];){if(s===0)return e?a.map(e):a;i[s--]=0}}}function PR(t,e){var r=0,n=0;return Float64Array.from(t,e===void 0?i=>r+=+i||0:i=>r+=+e(i,n++,t)||0)}function T_(t,e){let r=0,n,i=0,a=0;if(e===void 0)for(let s of t)s!=null&&(s=+s)>=s&&(n=s-i,i+=n/++r,a+=n*(s-i));else{let s=-1;for(let o of t)(o=e(o,++s,t))!=null&&(o=+o)>=o&&(n=o-i,i+=n/++r,a+=n*(o-i))}if(r>1)return a/(r-1)}function E_(t,e){const r=T_(t,e);return r&&Math.sqrt(r)}function xl(t,e){let r,n;if(e===void 0)for(const i of t)i!=null&&(r===void 0?i>=i&&(r=n=i):(r>i&&(r=i),n<i&&(n=i)));else{let i=-1;for(let a of t)(a=e(a,++i,t))!=null&&(r===void 0?a>=a&&(r=n=a):(r>a&&(r=a),n<a&&(n=a)))}return[r,n]}class _r{constructor(){this._partials=new Float64Array(32),this._n=0}add(e){const r=this._partials;let n=0;for(let i=0;i<this._n&&i<32;i++){const a=r[i],s=e+a,o=Math.abs(e)<Math.abs(a)?e-(s-a):a-(s-e);o&&(r[n++]=o),e=s}return r[n]=e,this._n=n+1,this}valueOf(){const e=this._partials;let r=this._n,n,i,a,s=0;if(r>0){for(s=e[--r];r>0&&(n=s,i=e[--r],s=n+i,a=i-(s-n),!a););r>0&&(a<0&&e[r-1]<0||a>0&&e[r-1]>0)&&(i=a*2,n=s+i,i==n-s&&(s=n))}return s}}function qR(t,e){const r=new _r;if(e===void 0)for(let n of t)(n=+n)&&r.add(n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&r.add(i)}return+r}function VR(t,e){const r=new _r;let n=-1;return Float64Array.from(t,e===void 0?i=>r.add(+i||0):i=>r.add(+e(i,++n,t)||0))}class kl extends Map{constructor(e,r=A_){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(const[n,i]of e)this.set(n,i)}get(e){return super.get(P0(this,e))}has(e){return super.has(P0(this,e))}set(e,r){return super.set(C_(this,e),r)}delete(e){return super.delete(S_(this,e))}}class us extends Set{constructor(e,r=A_){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),e!=null)for(const n of e)this.add(n)}has(e){return super.has(P0(this,e))}add(e){return super.add(C_(this,e))}delete(e){return super.delete(S_(this,e))}}function P0({_intern:t,_key:e},r){const n=e(r);return t.has(n)?t.get(n):r}function C_({_intern:t,_key:e},r){const n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}function S_({_intern:t,_key:e},r){const n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}function A_(t){return t!==null&&typeof t=="object"?t.valueOf():t}function io(t){return t}function M_(t,...e){return ao(t,io,io,e)}function L_(t,...e){return ao(t,Array.from,io,e)}function R_(t,e){for(let r=1,n=e.length;r<n;++r)t=t.flatMap(i=>i.pop().map(([a,s])=>[...i,a,s]));return t}function zR(t,...e){return R_(L_(t,...e),e)}function YR(t,e,...r){return R_(N_(t,e,...r),r)}function I_(t,e,...r){return ao(t,io,e,r)}function N_(t,e,...r){return ao(t,Array.from,e,r)}function UR(t,...e){return ao(t,io,B_,e)}function WR(t,...e){return ao(t,Array.from,B_,e)}function B_(t){if(t.length!==1)throw new Error("duplicate key");return t[0]}function ao(t,e,r,n){return function i(a,s){if(s>=n.length)return r(a);const o=new kl,l=n[s++];let u=-1;for(const h of a){const d=l(h,++u,a),f=o.get(d);f?f.push(h):o.set(d,[h])}for(const[h,d]of o)o.set(h,i(d,s));return e(o)}(t,0)}function D_(t,e){return Array.from(e,r=>t[r])}function q0(t,...e){if(typeof t[Symbol.iterator]!="function")throw new TypeError("values is not iterable");t=Array.from(t);let[r]=e;if(r&&r.length!==2||e.length>1){const n=Uint32Array.from(t,(i,a)=>a);return e.length>1?(e=e.map(i=>t.map(i)),n.sort((i,a)=>{for(const s of e){const o=so(s[i],s[a]);if(o)return o}})):(r=t.map(r),n.sort((i,a)=>so(r[i],r[a]))),D_(t,n)}return t.sort(V0(r))}function V0(t=Qe){if(t===Qe)return so;if(typeof t!="function")throw new TypeError("compare is not a function");return(e,r)=>{const n=t(e,r);return n||n===0?n:(t(r,r)===0)-(t(e,e)===0)}}function so(t,e){return(t==null||!(t>=t))-(e==null||!(e>=e))||(t<e?-1:t>e?1:0)}function HR(t,e,r){return(e.length!==2?q0(I_(t,e,r),([n,i],[a,s])=>Qe(i,s)||Qe(n,a)):q0(M_(t,r),([n,i],[a,s])=>e(i,s)||Qe(n,a))).map(([n])=>n)}var GR=Array.prototype,jR=GR.slice;function Tu(t){return()=>t}var z0=Math.sqrt(50),Y0=Math.sqrt(10),U0=Math.sqrt(2);function hs(t,e,r){var n,i=-1,a,s,o;if(e=+e,t=+t,r=+r,t===e&&r>0)return[t];if((n=e<t)&&(a=t,t=e,e=a),(o=oo(t,e,r))===0||!isFinite(o))return[];if(o>0){let l=Math.round(t/o),u=Math.round(e/o);for(l*o<t&&++l,u*o>e&&--u,s=new Array(a=u-l+1);++i<a;)s[i]=(l+i)*o}else{o=-o;let l=Math.round(t*o),u=Math.round(e*o);for(l/o<t&&++l,u/o>e&&--u,s=new Array(a=u-l+1);++i<a;)s[i]=(l+i)/o}return n&&s.reverse(),s}function oo(t,e,r){var n=(e-t)/Math.max(0,r),i=Math.floor(Math.log(n)/Math.LN10),a=n/Math.pow(10,i);return i>=0?(a>=z0?10:a>=Y0?5:a>=U0?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=z0?10:a>=Y0?5:a>=U0?2:1)}function wl(t,e,r){var n=Math.abs(e-t)/Math.max(0,r),i=Math.pow(10,Math.floor(Math.log(n)/Math.LN10)),a=n/i;return a>=z0?i*=10:a>=Y0?i*=5:a>=U0&&(i*=2),e<t?-i:i}function O_(t,e,r){let n;for(;;){const i=oo(t,e,r);if(i===n||i===0||!isFinite(i))return[t,e];i>0?(t=Math.floor(t/i)*i,e=Math.ceil(e/i)*i):i<0&&(t=Math.ceil(t*i)/i,e=Math.floor(e*i)/i),n=i}}function W0(t){return Math.ceil(Math.log(wu(t))/Math.LN2)+1}function F_(){var t=io,e=xl,r=W0;function n(i){Array.isArray(i)||(i=Array.from(i));var a,s=i.length,o,l,u=new Array(s);for(a=0;a<s;++a)u[a]=t(i[a],a,i);var h=e(u),d=h[0],f=h[1],p=r(u,d,f);if(!Array.isArray(p)){const b=f,x=+p;if(e===xl&&([d,f]=O_(d,f,x)),p=hs(d,f,x),p[0]<=d&&(l=oo(d,f,x)),p[p.length-1]>=f)if(b>=f&&e===xl){const k=oo(d,f,x);isFinite(k)&&(k>0?f=(Math.floor(f/k)+1)*k:k<0&&(f=(Math.ceil(f*-k)+1)/-k))}else p.pop()}for(var m=p.length;p[0]<=d;)p.shift(),--m;for(;p[m-1]>f;)p.pop(),--m;var _=new Array(m+1),y;for(a=0;a<=m;++a)y=_[a]=[],y.x0=a>0?p[a-1]:d,y.x1=a<m?p[a]:f;if(isFinite(l)){if(l>0)for(a=0;a<s;++a)(o=u[a])!=null&&d<=o&&o<=f&&_[Math.min(m,Math.floor((o-d)/l))].push(i[a]);else if(l<0){for(a=0;a<s;++a)if((o=u[a])!=null&&d<=o&&o<=f){const b=Math.floor((d-o)*l);_[Math.min(m,b+(p[b]<=o))].push(i[a])}}}else for(a=0;a<s;++a)(o=u[a])!=null&&d<=o&&o<=f&&_[cs(p,o,0,m)].push(i[a]);return _}return n.value=function(i){return arguments.length?(t=typeof i=="function"?i:Tu(i),n):t},n.domain=function(i){return arguments.length?(e=typeof i=="function"?i:Tu([i[0],i[1]]),n):e},n.thresholds=function(i){return arguments.length?(r=typeof i=="function"?i:Array.isArray(i)?Tu(jR.call(i)):Tu(i),n):r},n}function lo(t,e){let r;if(e===void 0)for(const n of t)n!=null&&(r<n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r<i||r===void 0&&i>=i)&&(r=i)}return r}function H0(t,e){let r,n=-1,i=-1;if(e===void 0)for(const a of t)++i,a!=null&&(r<a||r===void 0&&a>=a)&&(r=a,n=i);else for(let a of t)(a=e(a,++i,t))!=null&&(r<a||r===void 0&&a>=a)&&(r=a,n=i);return n}function Tl(t,e){let r;if(e===void 0)for(const n of t)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of t)(i=e(i,++n,t))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}function G0(t,e){let r,n=-1,i=-1;if(e===void 0)for(const a of t)++i,a!=null&&(r>a||r===void 0&&a>=a)&&(r=a,n=i);else for(let a of t)(a=e(a,++i,t))!=null&&(r>a||r===void 0&&a>=a)&&(r=a,n=i);return n}function Eu(t,e,r=0,n=t.length-1,i){for(i=i===void 0?so:V0(i);n>r;){if(n-r>600){const l=n-r+1,u=e-r+1,h=Math.log(l),d=.5*Math.exp(2*h/3),f=.5*Math.sqrt(h*d*(l-d)/l)*(u-l/2<0?-1:1),p=Math.max(r,Math.floor(e-u*d/l+f)),m=Math.min(n,Math.floor(e+(l-u)*d/l+f));Eu(t,e,p,m,i)}const a=t[e];let s=r,o=n;for(El(t,r,e),i(t[n],a)>0&&El(t,r,n);s<o;){for(El(t,s,o),++s,--o;i(t[s],a)<0;)++s;for(;i(t[o],a)>0;)--o}i(t[r],a)===0?El(t,r,o):(++o,El(t,o,n)),o<=e&&(r=o+1),e<=o&&(n=o-1)}return t}function El(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function P_(t,e=Qe){let r,n=!1;if(e.length===1){let i;for(const a of t){const s=e(a);(n?Qe(s,i)>0:Qe(s,s)===0)&&(r=a,i=s,n=!0)}}else for(const i of t)(n?e(i,r)>0:e(i,i)===0)&&(r=i,n=!0);return r}function Cl(t,e,r){if(t=Float64Array.from(__(t,r)),!!(n=t.length)){if((e=+e)<=0||n<2)return Tl(t);if(e>=1)return lo(t);var n,i=(n-1)*e,a=Math.floor(i),s=lo(Eu(t,a).subarray(0,a+1)),o=Tl(t.subarray(a+1));return s+(o-s)*(i-a)}}function q_(t,e,r=b_){if(!!(n=t.length)){if((e=+e)<=0||n<2)return+r(t[0],0,t);if(e>=1)return+r(t[n-1],n-1,t);var n,i=(n-1)*e,a=Math.floor(i),s=+r(t[a],a,t),o=+r(t[a+1],a+1,t);return s+(o-s)*(i-a)}}function V_(t,e,r){if(t=Float64Array.from(__(t,r)),!!(n=t.length)){if((e=+e)<=0||n<2)return G0(t);if(e>=1)return H0(t);var n,i=Math.floor((n-1)*e),a=(o,l)=>so(t[o],t[l]),s=Eu(Uint32Array.from(t,(o,l)=>l),i,0,n-1,a);return P_(s.subarray(0,i+1),o=>t[o])}}function $R(t,e,r){return Math.ceil((r-e)/(2*(Cl(t,.75)-Cl(t,.25))*Math.pow(wu(t),-1/3)))}function XR(t,e,r){return Math.ceil((r-e)*Math.cbrt(wu(t))/(3.49*E_(t)))}function KR(t,e){let r=0,n=0;if(e===void 0)for(let i of t)i!=null&&(i=+i)>=i&&(++r,n+=i);else{let i=-1;for(let a of t)(a=e(a,++i,t))!=null&&(a=+a)>=a&&(++r,n+=a)}if(r)return n/r}function ZR(t,e){return Cl(t,.5,e)}function QR(t,e){return V_(t,.5,e)}function*JR(t){for(const e of t)yield*e}function j0(t){return Array.from(JR(t))}function tI(t,e){const r=new kl;if(e===void 0)for(let a of t)a!=null&&a>=a&&r.set(a,(r.get(a)||0)+1);else{let a=-1;for(let s of t)(s=e(s,++a,t))!=null&&s>=s&&r.set(s,(r.get(s)||0)+1)}let n,i=0;for(const[a,s]of r)s>i&&(i=s,n=a);return n}function eI(t,e=rI){const r=[];let n,i=!1;for(const a of t)i&&r.push(e(n,a)),n=a,i=!0;return r}function rI(t,e){return[t,e]}function Ca(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((e-t)/r))|0,a=new Array(i);++n<i;)a[n]=t+n*r;return a}function nI(t,e=Qe){if(typeof t[Symbol.iterator]!="function")throw new TypeError("values is not iterable");let r=Array.from(t);const n=new Float64Array(r.length);e.length!==2&&(r=r.map(e),e=Qe);const i=(o,l)=>e(r[o],r[l]);let a,s;return Uint32Array.from(r,(o,l)=>l).sort(e===Qe?(o,l)=>so(r[o],r[l]):V0(i)).forEach((o,l)=>{const u=i(o,a===void 0?o:a);u>=0?((a===void 0||u>0)&&(a=o,s=l),n[o]=s):n[o]=NaN}),n}function iI(t,e=Qe){let r,n=!1;if(e.length===1){let i;for(const a of t){const s=e(a);(n?Qe(s,i)<0:Qe(s,s)===0)&&(r=a,i=s,n=!0)}}else for(const i of t)(n?e(i,r)<0:e(i,i)===0)&&(r=i,n=!0);return r}function z_(t,e=Qe){if(e.length===1)return G0(t,e);let r,n=-1,i=-1;for(const a of t)++i,(n<0?e(a,a)===0:e(a,r)<0)&&(r=a,n=i);return n}function aI(t,e=Qe){if(e.length===1)return H0(t,e);let r,n=-1,i=-1;for(const a of t)++i,(n<0?e(a,a)===0:e(a,r)>0)&&(r=a,n=i);return n}function sI(t,e){const r=z_(t,e);return r<0?void 0:r}const oI=Y_(Math.random);function Y_(t){return function(r,n=0,i=r.length){let a=i-(n=+n);for(;a;){const s=t()*a--|0,o=r[a+n];r[a+n]=r[s+n],r[s+n]=o}return r}}function lI(t,e){let r=0;if(e===void 0)for(let n of t)(n=+n)&&(r+=n);else{let n=-1;for(let i of t)(i=+e(i,++n,t))&&(r+=i)}return r}function U_(t){if(!(a=t.length))return[];for(var e=-1,r=Tl(t,cI),n=new Array(r);++e<r;)for(var i=-1,a,s=n[e]=new Array(a);++i<a;)s[i]=t[i][e];return n}function cI(t){return t.length}function uI(){return U_(arguments)}function hI(t,e){if(typeof e!="function")throw new TypeError("test is not a function");let r=-1;for(const n of t)if(!e(n,++r,t))return!1;return!0}function fI(t,e){if(typeof e!="function")throw new TypeError("test is not a function");let r=-1;for(const n of t)if(e(n,++r,t))return!0;return!1}function dI(t,e){if(typeof e!="function")throw new TypeError("test is not a function");const r=[];let n=-1;for(const i of t)e(i,++n,t)&&r.push(i);return r}function pI(t,e){if(typeof t[Symbol.iterator]!="function")throw new TypeError("values is not iterable");if(typeof e!="function")throw new TypeError("mapper is not a function");return Array.from(t,(r,n)=>e(r,n,t))}function gI(t,e,r){if(typeof e!="function")throw new TypeError("reducer is not a function");const n=t[Symbol.iterator]();let i,a,s=-1;if(arguments.length<3){if({done:i,value:r}=n.next(),i)return;++s}for(;{done:i,value:a}=n.next(),!i;)r=e(r,a,++s,t);return r}function yI(t){if(typeof t[Symbol.iterator]!="function")throw new TypeError("values is not iterable");return Array.from(t).reverse()}function mI(t,...e){t=new us(t);for(const r of e)for(const n of r)t.delete(n);return t}function bI(t,e){const r=e[Symbol.iterator](),n=new us;for(const i of t){if(n.has(i))return!1;let a,s;for(;({value:a,done:s}=r.next())&&!s;){if(Object.is(i,a))return!1;n.add(a)}}return!0}function _I(t,...e){t=new us(t),e=e.map(vI);t:for(const r of t)for(const n of e)if(!n.has(r)){t.delete(r);continue t}return t}function vI(t){return t instanceof us?t:new us(t)}function W_(t,e){const r=t[Symbol.iterator](),n=new Set;for(const i of e){const a=H_(i);if(n.has(a))continue;let s,o;for(;{value:s,done:o}=r.next();){if(o)return!1;const l=H_(s);if(n.add(l),Object.is(a,l))break}}return!0}function H_(t){return t!==null&&typeof t=="object"?t.valueOf():t}function xI(t,e){return W_(e,t)}function kI(...t){const e=new us;for(const r of t)for(const n of r)e.add(n);return e}function wI(t){return t}var Cu=1,Su=2,$0=3,Sl=4,G_=1e-6;function TI(t){return"translate("+t+",0)"}function EI(t){return"translate(0,"+t+")"}function CI(t){return e=>+t(e)}function SI(t,e){return e=Math.max(0,t.bandwidth()-e*2)/2,t.round()&&(e=Math.round(e)),r=>+t(r)+e}function AI(){return!this.__axis}function Au(t,e){var r=[],n=null,i=null,a=6,s=6,o=3,l=typeof window<"u"&&window.devicePixelRatio>1?0:.5,u=t===Cu||t===Sl?-1:1,h=t===Sl||t===Su?"x":"y",d=t===Cu||t===$0?TI:EI;function f(p){var m=n==null?e.ticks?e.ticks.apply(e,r):e.domain():n,_=i==null?e.tickFormat?e.tickFormat.apply(e,r):wI:i,y=Math.max(a,0)+o,b=e.range(),x=+b[0]+l,k=+b[b.length-1]+l,T=(e.bandwidth?SI:CI)(e.copy(),l),C=p.selection?p.selection():p,M=C.selectAll(".domain").data([null]),S=C.selectAll(".tick").data(m,e).order(),R=S.exit(),A=S.enter().append("g").attr("class","tick"),L=S.select("line"),v=S.select("text");M=M.merge(M.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),S=S.merge(A),L=L.merge(A.append("line").attr("stroke","currentColor").attr(h+"2",u*a)),v=v.merge(A.append("text").attr("fill","currentColor").attr(h,u*y).attr("dy",t===Cu?"0em":t===$0?"0.71em":"0.32em")),p!==C&&(M=M.transition(p),S=S.transition(p),L=L.transition(p),v=v.transition(p),R=R.transition(p).attr("opacity",G_).attr("transform",function(B){return isFinite(B=T(B))?d(B+l):this.getAttribute("transform")}),A.attr("opacity",G_).attr("transform",function(B){var w=this.parentNode.__axis;return d((w&&isFinite(w=w(B))?w:T(B))+l)})),R.remove(),M.attr("d",t===Sl||t===Su?s?"M"+u*s+","+x+"H"+l+"V"+k+"H"+u*s:"M"+l+","+x+"V"+k:s?"M"+x+","+u*s+"V"+l+"H"+k+"V"+u*s:"M"+x+","+l+"H"+k),S.attr("opacity",1).attr("transform",function(B){return d(T(B)+l)}),L.attr(h+"2",u*a),v.attr(h,u*y).text(_),C.filter(AI).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===Su?"start":t===Sl?"end":"middle"),C.each(function(){this.__axis=T})}return f.scale=function(p){return arguments.length?(e=p,f):e},f.ticks=function(){return r=Array.from(arguments),f},f.tickArguments=function(p){return arguments.length?(r=p==null?[]:Array.from(p),f):r.slice()},f.tickValues=function(p){return arguments.length?(n=p==null?null:Array.from(p),f):n&&n.slice()},f.tickFormat=function(p){return arguments.length?(i=p,f):i},f.tickSize=function(p){return arguments.length?(a=s=+p,f):a},f.tickSizeInner=function(p){return arguments.length?(a=+p,f):a},f.tickSizeOuter=function(p){return arguments.length?(s=+p,f):s},f.tickPadding=function(p){return arguments.length?(o=+p,f):o},f.offset=function(p){return arguments.length?(l=+p,f):l},f}function j_(t){return Au(Cu,t)}function MI(t){return Au(Su,t)}function $_(t){return Au($0,t)}function LI(t){return Au(Sl,t)}var RI={value:()=>{}};function fs(){for(var t=0,e=arguments.length,r={},n;t<e;++t){if(!(n=arguments[t]+"")||n in r||/[\s.]/.test(n))throw new Error("illegal type: "+n);r[n]=[]}return new Mu(r)}function Mu(t){this._=t}function II(t,e){return t.trim().split(/^|\s+/).map(function(r){var n="",i=r.indexOf(".");if(i>=0&&(n=r.slice(i+1),r=r.slice(0,i)),r&&!e.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:n}})}Mu.prototype=fs.prototype={constructor:Mu,on:function(t,e){var r=this._,n=II(t+"",r),i,a=-1,s=n.length;if(arguments.length<2){for(;++a<s;)if((i=(t=n[a]).type)&&(i=NI(r[i],t.name)))return i;return}if(e!=null&&typeof e!="function")throw new Error("invalid callback: "+e);for(;++a<s;)if(i=(t=n[a]).type)r[i]=X_(r[i],t.name,e);else if(e==null)for(i in r)r[i]=X_(r[i],t.name,null);return this},copy:function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new Mu(t)},call:function(t,e){if((i=arguments.length-2)>0)for(var r=new Array(i),n=0,i,a;n<i;++n)r[n]=arguments[n+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=this._[t],n=0,i=a.length;n<i;++n)a[n].value.apply(e,r)},apply:function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var n=this._[t],i=0,a=n.length;i<a;++i)n[i].value.apply(e,r)}};function NI(t,e){for(var r=0,n=t.length,i;r<n;++r)if((i=t[r]).name===e)return i.value}function X_(t,e,r){for(var n=0,i=t.length;n<i;++n)if(t[n].name===e){t[n]=RI,t=t.slice(0,n).concat(t.slice(n+1));break}return r!=null&&t.push({name:e,value:r}),t}var X0="http://www.w3.org/1999/xhtml";const K0={svg:"http://www.w3.org/2000/svg",xhtml:X0,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Al(t){var e=t+="",r=e.indexOf(":");return r>=0&&(e=t.slice(0,r))!=="xmlns"&&(t=t.slice(r+1)),K0.hasOwnProperty(e)?{space:K0[e],local:t}:t}function BI(t){return function(){var e=this.ownerDocument,r=this.namespaceURI;return r===X0&&e.documentElement.namespaceURI===X0?e.createElement(t):e.createElementNS(r,t)}}function DI(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function Lu(t){var e=Al(t);return(e.local?DI:BI)(e)}function OI(){}function Ru(t){return t==null?OI:function(){return this.querySelector(t)}}function FI(t){typeof t!="function"&&(t=Ru(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,o=n[i]=new Array(s),l,u,h=0;h<s;++h)(l=a[h])&&(u=t.call(l,l.__data__,h,a))&&("__data__"in l&&(u.__data__=l.__data__),o[h]=u);return new $r(n,this._parents)}function K_(t){return t==null?[]:Array.isArray(t)?t:Array.from(t)}function PI(){return[]}function Z0(t){return t==null?PI:function(){return this.querySelectorAll(t)}}function qI(t){return function(){return K_(t.apply(this,arguments))}}function VI(t){typeof t=="function"?t=qI(t):t=Z0(t);for(var e=this._groups,r=e.length,n=[],i=[],a=0;a<r;++a)for(var s=e[a],o=s.length,l,u=0;u<o;++u)(l=s[u])&&(n.push(t.call(l,l.__data__,u,s)),i.push(l));return new $r(n,i)}function Q0(t){return function(){return this.matches(t)}}function Z_(t){return function(e){return e.matches(t)}}var zI=Array.prototype.find;function YI(t){return function(){return zI.call(this.children,t)}}function UI(){return this.firstElementChild}function WI(t){return this.select(t==null?UI:YI(typeof t=="function"?t:Z_(t)))}var HI=Array.prototype.filter;function GI(){return Array.from(this.children)}function jI(t){return function(){return HI.call(this.children,t)}}function $I(t){return this.selectAll(t==null?GI:jI(typeof t=="function"?t:Z_(t)))}function XI(t){typeof t!="function"&&(t=Q0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,o=n[i]=[],l,u=0;u<s;++u)(l=a[u])&&t.call(l,l.__data__,u,a)&&o.push(l);return new $r(n,this._parents)}function Q_(t){return new Array(t.length)}function KI(){return new $r(this._enter||this._groups.map(Q_),this._parents)}function Iu(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}Iu.prototype={constructor:Iu,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};function ZI(t){return function(){return t}}function QI(t,e,r,n,i,a){for(var s=0,o,l=e.length,u=a.length;s<u;++s)(o=e[s])?(o.__data__=a[s],n[s]=o):r[s]=new Iu(t,a[s]);for(;s<l;++s)(o=e[s])&&(i[s]=o)}function JI(t,e,r,n,i,a,s){var o,l,u=new Map,h=e.length,d=a.length,f=new Array(h),p;for(o=0;o<h;++o)(l=e[o])&&(f[o]=p=s.call(l,l.__data__,o,e)+"",u.has(p)?i[o]=l:u.set(p,l));for(o=0;o<d;++o)p=s.call(t,a[o],o,a)+"",(l=u.get(p))?(n[o]=l,l.__data__=a[o],u.delete(p)):r[o]=new Iu(t,a[o]);for(o=0;o<h;++o)(l=e[o])&&u.get(f[o])===l&&(i[o]=l)}function tN(t){return t.__data__}function eN(t,e){if(!arguments.length)return Array.from(this,tN);var r=e?JI:QI,n=this._parents,i=this._groups;typeof t!="function"&&(t=ZI(t));for(var a=i.length,s=new Array(a),o=new Array(a),l=new Array(a),u=0;u<a;++u){var h=n[u],d=i[u],f=d.length,p=rN(t.call(h,h&&h.__data__,u,n)),m=p.length,_=o[u]=new Array(m),y=s[u]=new Array(m),b=l[u]=new Array(f);r(h,d,_,y,b,p,e);for(var x=0,k=0,T,C;x<m;++x)if(T=_[x]){for(x>=k&&(k=x+1);!(C=y[k])&&++k<m;);T._next=C||null}}return s=new $r(s,n),s._enter=o,s._exit=l,s}function rN(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function nN(){return new $r(this._exit||this._groups.map(Q_),this._parents)}function iN(t,e,r){var n=this.enter(),i=this,a=this.exit();return typeof t=="function"?(n=t(n),n&&(n=n.selection())):n=n.append(t+""),e!=null&&(i=e(i),i&&(i=i.selection())),r==null?a.remove():r(a),n&&i?n.merge(i).order():i}function aN(t){for(var e=t.selection?t.selection():t,r=this._groups,n=e._groups,i=r.length,a=n.length,s=Math.min(i,a),o=new Array(i),l=0;l<s;++l)for(var u=r[l],h=n[l],d=u.length,f=o[l]=new Array(d),p,m=0;m<d;++m)(p=u[m]||h[m])&&(f[m]=p);for(;l<i;++l)o[l]=r[l];return new $r(o,this._parents)}function sN(){for(var t=this._groups,e=-1,r=t.length;++e<r;)for(var n=t[e],i=n.length-1,a=n[i],s;--i>=0;)(s=n[i])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}function oN(t){t||(t=lN);function e(d,f){return d&&f?t(d.__data__,f.__data__):!d-!f}for(var r=this._groups,n=r.length,i=new Array(n),a=0;a<n;++a){for(var s=r[a],o=s.length,l=i[a]=new Array(o),u,h=0;h<o;++h)(u=s[h])&&(l[h]=u);l.sort(e)}return new $r(i,this._parents).order()}function lN(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function cN(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function uN(){return Array.from(this)}function hN(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],i=0,a=n.length;i<a;++i){var s=n[i];if(s)return s}return null}function fN(){let t=0;for(const e of this)++t;return t}function dN(){return!this.node()}function pN(t){for(var e=this._groups,r=0,n=e.length;r<n;++r)for(var i=e[r],a=0,s=i.length,o;a<s;++a)(o=i[a])&&t.call(o,o.__data__,a,i);return this}function gN(t){return function(){this.removeAttribute(t)}}function yN(t){return function(){this.removeAttributeNS(t.space,t.local)}}function mN(t,e){return function(){this.setAttribute(t,e)}}function bN(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function _N(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttribute(t):this.setAttribute(t,r)}}function vN(t,e){return function(){var r=e.apply(this,arguments);r==null?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}}function xN(t,e){var r=Al(t);if(arguments.length<2){var n=this.node();return r.local?n.getAttributeNS(r.space,r.local):n.getAttribute(r)}return this.each((e==null?r.local?yN:gN:typeof e=="function"?r.local?vN:_N:r.local?bN:mN)(r,e))}function J0(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function kN(t){return function(){this.style.removeProperty(t)}}function wN(t,e,r){return function(){this.style.setProperty(t,e,r)}}function TN(t,e,r){return function(){var n=e.apply(this,arguments);n==null?this.style.removeProperty(t):this.style.setProperty(t,n,r)}}function EN(t,e,r){return arguments.length>1?this.each((e==null?kN:typeof e=="function"?TN:wN)(t,e,r==null?"":r)):ds(this.node(),t)}function ds(t,e){return t.style.getPropertyValue(e)||J0(t).getComputedStyle(t,null).getPropertyValue(e)}function CN(t){return function(){delete this[t]}}function SN(t,e){return function(){this[t]=e}}function AN(t,e){return function(){var r=e.apply(this,arguments);r==null?delete this[t]:this[t]=r}}function MN(t,e){return arguments.length>1?this.each((e==null?CN:typeof e=="function"?AN:SN)(t,e)):this.node()[t]}function J_(t){return t.trim().split(/^|\s+/)}function td(t){return t.classList||new t5(t)}function t5(t){this._node=t,this._names=J_(t.getAttribute("class")||"")}t5.prototype={add:function(t){var e=this._names.indexOf(t);e<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function e5(t,e){for(var r=td(t),n=-1,i=e.length;++n<i;)r.add(e[n])}function r5(t,e){for(var r=td(t),n=-1,i=e.length;++n<i;)r.remove(e[n])}function LN(t){return function(){e5(this,t)}}function RN(t){return function(){r5(this,t)}}function IN(t,e){return function(){(e.apply(this,arguments)?e5:r5)(this,t)}}function NN(t,e){var r=J_(t+"");if(arguments.length<2){for(var n=td(this.node()),i=-1,a=r.length;++i<a;)if(!n.contains(r[i]))return!1;return!0}return this.each((typeof e=="function"?IN:e?LN:RN)(r,e))}function BN(){this.textContent=""}function DN(t){return function(){this.textContent=t}}function ON(t){return function(){var e=t.apply(this,arguments);this.textContent=e==null?"":e}}function FN(t){return arguments.length?this.each(t==null?BN:(typeof t=="function"?ON:DN)(t)):this.node().textContent}function PN(){this.innerHTML=""}function qN(t){return function(){this.innerHTML=t}}function VN(t){return function(){var e=t.apply(this,arguments);this.innerHTML=e==null?"":e}}function zN(t){return arguments.length?this.each(t==null?PN:(typeof t=="function"?VN:qN)(t)):this.node().innerHTML}function YN(){this.nextSibling&&this.parentNode.appendChild(this)}function UN(){return this.each(YN)}function WN(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function HN(){return this.each(WN)}function GN(t){var e=typeof t=="function"?t:Lu(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})}function jN(){return null}function $N(t,e){var r=typeof t=="function"?t:Lu(t),n=e==null?jN:typeof e=="function"?e:Ru(e);return this.select(function(){return this.insertBefore(r.apply(this,arguments),n.apply(this,arguments)||null)})}function XN(){var t=this.parentNode;t&&t.removeChild(this)}function KN(){return this.each(XN)}function ZN(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function QN(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function JN(t){return this.select(t?QN:ZN)}function tB(t){return arguments.length?this.property("__data__",t):this.node().__data__}function eB(t){return function(e){t.call(this,e,this.__data__)}}function rB(t){return t.trim().split(/^|\s+/).map(function(e){var r="",n=e.indexOf(".");return n>=0&&(r=e.slice(n+1),e=e.slice(0,n)),{type:e,name:r}})}function nB(t){return function(){var e=this.__on;if(!!e){for(var r=0,n=-1,i=e.length,a;r<i;++r)a=e[r],(!t.type||a.type===t.type)&&a.name===t.name?this.removeEventListener(a.type,a.listener,a.options):e[++n]=a;++n?e.length=n:delete this.__on}}}function iB(t,e,r){return function(){var n=this.__on,i,a=eB(e);if(n){for(var s=0,o=n.length;s<o;++s)if((i=n[s]).type===t.type&&i.name===t.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=r),i.value=e;return}}this.addEventListener(t.type,a,r),i={type:t.type,name:t.name,value:e,listener:a,options:r},n?n.push(i):this.__on=[i]}}function aB(t,e,r){var n=rB(t+""),i,a=n.length,s;if(arguments.length<2){var o=this.node().__on;if(o){for(var l=0,u=o.length,h;l<u;++l)for(i=0,h=o[l];i<a;++i)if((s=n[i]).type===h.type&&s.name===h.name)return h.value}return}for(o=e?iB:nB,i=0;i<a;++i)this.each(o(n[i],e,r));return this}function n5(t,e,r){var n=J0(t),i=n.CustomEvent;typeof i=="function"?i=new i(e,r):(i=n.document.createEvent("Event"),r?(i.initEvent(e,r.bubbles,r.cancelable),i.detail=r.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function sB(t,e){return function(){return n5(this,t,e)}}function oB(t,e){return function(){return n5(this,t,e.apply(this,arguments))}}function lB(t,e){return this.each((typeof e=="function"?oB:sB)(t,e))}function*cB(){for(var t=this._groups,e=0,r=t.length;e<r;++e)for(var n=t[e],i=0,a=n.length,s;i<a;++i)(s=n[i])&&(yield s)}var ed=[null];function $r(t,e){this._groups=t,this._parents=e}function ps(){return new $r([[document.documentElement]],ed)}function uB(){return this}$r.prototype=ps.prototype={constructor:$r,select:FI,selectAll:VI,selectChild:WI,selectChildren:$I,filter:XI,data:eN,enter:KI,exit:nN,join:iN,merge:aN,selection:uB,order:sN,sort:oN,call:cN,nodes:uN,node:hN,size:fN,empty:dN,each:pN,attr:xN,style:EN,property:MN,classed:NN,text:FN,html:zN,raise:UN,lower:HN,append:GN,insert:$N,remove:KN,clone:JN,datum:tB,on:aB,dispatch:lB,[Symbol.iterator]:cB};function St(t){return typeof t=="string"?new $r([[document.querySelector(t)]],[document.documentElement]):new $r([[t]],ed)}function hB(t){return St(Lu(t).call(document.documentElement))}var fB=0;function i5(){return new rd}function rd(){this._="@"+(++fB).toString(36)}rd.prototype=i5.prototype={constructor:rd,get:function(t){for(var e=this._;!(e in t);)if(!(t=t.parentNode))return;return t[e]},set:function(t,e){return t[this._]=e},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};function a5(t){let e;for(;e=t.sourceEvent;)t=e;return t}function Tn(t,e){if(t=a5(t),e===void 0&&(e=t.currentTarget),e){var r=e.ownerSVGElement||e;if(r.createSVGPoint){var n=r.createSVGPoint();return n.x=t.clientX,n.y=t.clientY,n=n.matrixTransform(e.getScreenCTM().inverse()),[n.x,n.y]}if(e.getBoundingClientRect){var i=e.getBoundingClientRect();return[t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop]}}return[t.pageX,t.pageY]}function dB(t,e){return t.target&&(t=a5(t),e===void 0&&(e=t.currentTarget),t=t.touches||[t]),Array.from(t,r=>Tn(r,e))}function Nu(t){return typeof t=="string"?new $r([document.querySelectorAll(t)],[document.documentElement]):new $r([K_(t)],ed)}const pB={passive:!1},Ml={capture:!0,passive:!1};function nd(t){t.stopImmediatePropagation()}function co(t){t.preventDefault(),t.stopImmediatePropagation()}function Bu(t){var e=t.document.documentElement,r=St(t).on("dragstart.drag",co,Ml);"onselectstart"in e?r.on("selectstart.drag",co,Ml):(e.__noselect=e.style.MozUserSelect,e.style.MozUserSelect="none")}function Du(t,e){var r=t.document.documentElement,n=St(t).on("dragstart.drag",null);e&&(n.on("click.drag",co,Ml),setTimeout(function(){n.on("click.drag",null)},0)),"onselectstart"in r?n.on("selectstart.drag",null):(r.style.MozUserSelect=r.__noselect,delete r.__noselect)}const Ou=t=>()=>t;function id(t,{sourceEvent:e,subject:r,target:n,identifier:i,active:a,x:s,y:o,dx:l,dy:u,dispatch:h}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},subject:{value:r,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:s,enumerable:!0,configurable:!0},y:{value:o,enumerable:!0,configurable:!0},dx:{value:l,enumerable:!0,configurable:!0},dy:{value:u,enumerable:!0,configurable:!0},_:{value:h}})}id.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};function gB(t){return!t.ctrlKey&&!t.button}function yB(){return this.parentNode}function mB(t,e){return e==null?{x:t.x,y:t.y}:e}function bB(){return navigator.maxTouchPoints||"ontouchstart"in this}function _B(){var t=gB,e=yB,r=mB,n=bB,i={},a=fs("start","drag","end"),s=0,o,l,u,h,d=0;function f(T){T.on("mousedown.drag",p).filter(n).on("touchstart.drag",y).on("touchmove.drag",b,pB).on("touchend.drag touchcancel.drag",x).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function p(T,C){if(!(h||!t.call(this,T,C))){var M=k(this,e.call(this,T,C),T,C,"mouse");!M||(St(T.view).on("mousemove.drag",m,Ml).on("mouseup.drag",_,Ml),Bu(T.view),nd(T),u=!1,o=T.clientX,l=T.clientY,M("start",T))}}function m(T){if(co(T),!u){var C=T.clientX-o,M=T.clientY-l;u=C*C+M*M>d}i.mouse("drag",T)}function _(T){St(T.view).on("mousemove.drag mouseup.drag",null),Du(T.view,u),co(T),i.mouse("end",T)}function y(T,C){if(!!t.call(this,T,C)){var M=T.changedTouches,S=e.call(this,T,C),R=M.length,A,L;for(A=0;A<R;++A)(L=k(this,S,T,C,M[A].identifier,M[A]))&&(nd(T),L("start",T,M[A]))}}function b(T){var C=T.changedTouches,M=C.length,S,R;for(S=0;S<M;++S)(R=i[C[S].identifier])&&(co(T),R("drag",T,C[S]))}function x(T){var C=T.changedTouches,M=C.length,S,R;for(h&&clearTimeout(h),h=setTimeout(function(){h=null},500),S=0;S<M;++S)(R=i[C[S].identifier])&&(nd(T),R("end",T,C[S]))}function k(T,C,M,S,R,A){var L=a.copy(),v=Tn(A||M,C),B,w,D;if((D=r.call(T,new id("beforestart",{sourceEvent:M,target:f,identifier:R,active:s,x:v[0],y:v[1],dx:0,dy:0,dispatch:L}),S))!=null)return B=D.x-v[0]||0,w=D.y-v[1]||0,function N(z,X,ct){var J=v,Y;switch(z){case"start":i[R]=N,Y=s++;break;case"end":delete i[R],--s;case"drag":v=Tn(ct||X,C),Y=s;break}L.call(z,T,new id(z,{sourceEvent:X,subject:D,target:f,identifier:R,active:Y,x:v[0]+B,y:v[1]+w,dx:v[0]-J[0],dy:v[1]-J[1],dispatch:L}),S)}}return f.filter=function(T){return arguments.length?(t=typeof T=="function"?T:Ou(!!T),f):t},f.container=function(T){return arguments.length?(e=typeof T=="function"?T:Ou(T),f):e},f.subject=function(T){return arguments.length?(r=typeof T=="function"?T:Ou(T),f):r},f.touchable=function(T){return arguments.length?(n=typeof T=="function"?T:Ou(!!T),f):n},f.on=function(){var T=a.on.apply(a,arguments);return T===a?f:T},f.clickDistance=function(T){return arguments.length?(d=(T=+T)*T,f):Math.sqrt(d)},f}function uo(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function Ll(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}function Sa(){}var gs=.7,ho=1/gs,fo="\\s*([+-]?\\d+)\\s*",Rl="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",wi="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",vB=/^#([0-9a-f]{3,8})$/,xB=new RegExp(`^rgb\\(${fo},${fo},${fo}\\)$`),kB=new RegExp(`^rgb\\(${wi},${wi},${wi}\\)$`),wB=new RegExp(`^rgba\\(${fo},${fo},${fo},${Rl}\\)$`),TB=new RegExp(`^rgba\\(${wi},${wi},${wi},${Rl}\\)$`),EB=new RegExp(`^hsl\\(${Rl},${wi},${wi}\\)$`),CB=new RegExp(`^hsla\\(${Rl},${wi},${wi},${Rl}\\)$`),s5={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};uo(Sa,Aa,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:o5,formatHex:o5,formatHex8:SB,formatHsl:AB,formatRgb:l5,toString:l5});function o5(){return this.rgb().formatHex()}function SB(){return this.rgb().formatHex8()}function AB(){return d5(this).formatHsl()}function l5(){return this.rgb().formatRgb()}function Aa(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=vB.exec(t))?(r=e[1].length,e=parseInt(e[1],16),r===6?c5(e):r===3?new Er(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):r===8?Fu(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):r===4?Fu(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=xB.exec(t))?new Er(e[1],e[2],e[3],1):(e=kB.exec(t))?new Er(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=wB.exec(t))?Fu(e[1],e[2],e[3],e[4]):(e=TB.exec(t))?Fu(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=EB.exec(t))?f5(e[1],e[2]/100,e[3]/100,1):(e=CB.exec(t))?f5(e[1],e[2]/100,e[3]/100,e[4]):s5.hasOwnProperty(t)?c5(s5[t]):t==="transparent"?new Er(NaN,NaN,NaN,0):null}function c5(t){return new Er(t>>16&255,t>>8&255,t&255,1)}function Fu(t,e,r,n){return n<=0&&(t=e=r=NaN),new Er(t,e,r,n)}function ad(t){return t instanceof Sa||(t=Aa(t)),t?(t=t.rgb(),new Er(t.r,t.g,t.b,t.opacity)):new Er}function po(t,e,r,n){return arguments.length===1?ad(t):new Er(t,e,r,n==null?1:n)}function Er(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}uo(Er,po,Ll(Sa,{brighter(t){return t=t==null?ho:Math.pow(ho,t),new Er(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=t==null?gs:Math.pow(gs,t),new Er(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Er(ys(this.r),ys(this.g),ys(this.b),Pu(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:u5,formatHex:u5,formatHex8:MB,formatRgb:h5,toString:h5}));function u5(){return`#${ms(this.r)}${ms(this.g)}${ms(this.b)}`}function MB(){return`#${ms(this.r)}${ms(this.g)}${ms(this.b)}${ms((isNaN(this.opacity)?1:this.opacity)*255)}`}function h5(){const t=Pu(this.opacity);return`${t===1?"rgb(":"rgba("}${ys(this.r)}, ${ys(this.g)}, ${ys(this.b)}${t===1?")":`, ${t})`}`}function Pu(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ys(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ms(t){return t=ys(t),(t<16?"0":"")+t.toString(16)}function f5(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new Kn(t,e,r,n)}function d5(t){if(t instanceof Kn)return new Kn(t.h,t.s,t.l,t.opacity);if(t instanceof Sa||(t=Aa(t)),!t)return new Kn;if(t instanceof Kn)return t;t=t.rgb();var e=t.r/255,r=t.g/255,n=t.b/255,i=Math.min(e,r,n),a=Math.max(e,r,n),s=NaN,o=a-i,l=(a+i)/2;return o?(e===a?s=(r-n)/o+(r<n)*6:r===a?s=(n-e)/o+2:s=(e-r)/o+4,o/=l<.5?a+i:2-a-i,s*=60):o=l>0&&l<1?0:s,new Kn(s,o,l,t.opacity)}function qu(t,e,r,n){return arguments.length===1?d5(t):new Kn(t,e,r,n==null?1:n)}function Kn(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}uo(Kn,qu,Ll(Sa,{brighter(t){return t=t==null?ho:Math.pow(ho,t),new Kn(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?gs:Math.pow(gs,t),new Kn(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new Er(sd(t>=240?t-240:t+120,i,n),sd(t,i,n),sd(t<120?t+240:t-120,i,n),this.opacity)},clamp(){return new Kn(p5(this.h),Vu(this.s),Vu(this.l),Pu(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Pu(this.opacity);return`${t===1?"hsl(":"hsla("}${p5(this.h)}, ${Vu(this.s)*100}%, ${Vu(this.l)*100}%${t===1?")":`, ${t})`}`}}));function p5(t){return t=(t||0)%360,t<0?t+360:t}function Vu(t){return Math.max(0,Math.min(1,t||0))}function sd(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}const g5=Math.PI/180,y5=180/Math.PI,zu=18,m5=.96422,b5=1,_5=.82521,v5=4/29,go=6/29,x5=3*go*go,LB=go*go*go;function k5(t){if(t instanceof Zn)return new Zn(t.l,t.a,t.b,t.opacity);if(t instanceof Ti)return T5(t);t instanceof Er||(t=ad(t));var e=ud(t.r),r=ud(t.g),n=ud(t.b),i=od((.2225045*e+.7168786*r+.0606169*n)/b5),a,s;return e===r&&r===n?a=s=i:(a=od((.4360747*e+.3850649*r+.1430804*n)/m5),s=od((.0139322*e+.0971045*r+.7141733*n)/_5)),new Zn(116*i-16,500*(a-i),200*(i-s),t.opacity)}function RB(t,e){return new Zn(t,0,0,e==null?1:e)}function Yu(t,e,r,n){return arguments.length===1?k5(t):new Zn(t,e,r,n==null?1:n)}function Zn(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}uo(Zn,Yu,Ll(Sa,{brighter(t){return new Zn(this.l+zu*(t==null?1:t),this.a,this.b,this.opacity)},darker(t){return new Zn(this.l-zu*(t==null?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return e=m5*ld(e),t=b5*ld(t),r=_5*ld(r),new Er(cd(3.1338561*e-1.6168667*t-.4906146*r),cd(-.9787684*e+1.9161415*t+.033454*r),cd(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}}));function od(t){return t>LB?Math.pow(t,1/3):t/x5+v5}function ld(t){return t>go?t*t*t:x5*(t-v5)}function cd(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function ud(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function w5(t){if(t instanceof Ti)return new Ti(t.h,t.c,t.l,t.opacity);if(t instanceof Zn||(t=k5(t)),t.a===0&&t.b===0)return new Ti(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*y5;return new Ti(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function IB(t,e,r,n){return arguments.length===1?w5(t):new Ti(r,e,t,n==null?1:n)}function Uu(t,e,r,n){return arguments.length===1?w5(t):new Ti(t,e,r,n==null?1:n)}function Ti(t,e,r,n){this.h=+t,this.c=+e,this.l=+r,this.opacity=+n}function T5(t){if(isNaN(t.h))return new Zn(t.l,0,0,t.opacity);var e=t.h*g5;return new Zn(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}uo(Ti,Uu,Ll(Sa,{brighter(t){return new Ti(this.h,this.c,this.l+zu*(t==null?1:t),this.opacity)},darker(t){return new Ti(this.h,this.c,this.l-zu*(t==null?1:t),this.opacity)},rgb(){return T5(this).rgb()}}));var E5=-.14861,hd=1.78277,fd=-.29227,Wu=-.90649,Il=1.97294,C5=Il*Wu,S5=Il*hd,A5=hd*fd-Wu*E5;function NB(t){if(t instanceof bs)return new bs(t.h,t.s,t.l,t.opacity);t instanceof Er||(t=ad(t));var e=t.r/255,r=t.g/255,n=t.b/255,i=(A5*n+C5*e-S5*r)/(A5+C5-S5),a=n-i,s=(Il*(r-i)-fd*a)/Wu,o=Math.sqrt(s*s+a*a)/(Il*i*(1-i)),l=o?Math.atan2(s,a)*y5-120:NaN;return new bs(l<0?l+360:l,o,i,t.opacity)}function Qn(t,e,r,n){return arguments.length===1?NB(t):new bs(t,e,r,n==null?1:n)}function bs(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}uo(bs,Qn,Ll(Sa,{brighter(t){return t=t==null?ho:Math.pow(ho,t),new bs(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=t==null?gs:Math.pow(gs,t),new bs(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=isNaN(this.h)?0:(this.h+120)*g5,e=+this.l,r=isNaN(this.s)?0:this.s*e*(1-e),n=Math.cos(t),i=Math.sin(t);return new Er(255*(e+r*(E5*n+hd*i)),255*(e+r*(fd*n+Wu*i)),255*(e+r*(Il*n)),this.opacity)}}));function M5(t,e,r,n,i){var a=t*t,s=a*t;return((1-3*t+3*a-s)*e+(4-6*a+3*s)*r+(1+3*t+3*a-3*s)*n+s*i)/6}function L5(t){var e=t.length-1;return function(r){var n=r<=0?r=0:r>=1?(r=1,e-1):Math.floor(r*e),i=t[n],a=t[n+1],s=n>0?t[n-1]:2*i-a,o=n<e-1?t[n+2]:2*a-i;return M5((r-n/e)*e,s,i,a,o)}}function R5(t){var e=t.length;return function(r){var n=Math.floor(((r%=1)<0?++r:r)*e),i=t[(n+e-1)%e],a=t[n%e],s=t[(n+1)%e],o=t[(n+2)%e];return M5((r-n/e)*e,i,a,s,o)}}const Hu=t=>()=>t;function I5(t,e){return function(r){return t+r*e}}function BB(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function Gu(t,e){var r=e-t;return r?I5(t,r>180||r<-180?r-360*Math.round(r/360):r):Hu(isNaN(t)?e:t)}function DB(t){return(t=+t)==1?Cr:function(e,r){return r-e?BB(e,r,t):Hu(isNaN(e)?r:e)}}function Cr(t,e){var r=e-t;return r?I5(t,r):Hu(isNaN(t)?e:t)}const Nl=function t(e){var r=DB(e);function n(i,a){var s=r((i=po(i)).r,(a=po(a)).r),o=r(i.g,a.g),l=r(i.b,a.b),u=Cr(i.opacity,a.opacity);return function(h){return i.r=s(h),i.g=o(h),i.b=l(h),i.opacity=u(h),i+""}}return n.gamma=t,n}(1);function N5(t){return function(e){var r=e.length,n=new Array(r),i=new Array(r),a=new Array(r),s,o;for(s=0;s<r;++s)o=po(e[s]),n[s]=o.r||0,i[s]=o.g||0,a[s]=o.b||0;return n=t(n),i=t(i),a=t(a),o.opacity=1,function(l){return o.r=n(l),o.g=i(l),o.b=a(l),o+""}}}var B5=N5(L5),OB=N5(R5);function dd(t,e){e||(e=[]);var r=t?Math.min(e.length,t.length):0,n=e.slice(),i;return function(a){for(i=0;i<r;++i)n[i]=t[i]*(1-a)+e[i]*a;return n}}function D5(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function FB(t,e){return(D5(e)?dd:O5)(t,e)}function O5(t,e){var r=e?e.length:0,n=t?Math.min(r,t.length):0,i=new Array(n),a=new Array(r),s;for(s=0;s<n;++s)i[s]=Ma(t[s],e[s]);for(;s<r;++s)a[s]=e[s];return function(o){for(s=0;s<n;++s)a[s]=i[s](o);return a}}function F5(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}function Bn(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function P5(t,e){var r={},n={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?r[i]=Ma(t[i],e[i]):n[i]=e[i];return function(a){for(i in r)n[i]=r[i](a);return n}}var pd=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,gd=new RegExp(pd.source,"g");function PB(t){return function(){return t}}function qB(t){return function(e){return t(e)+""}}function yd(t,e){var r=pd.lastIndex=gd.lastIndex=0,n,i,a,s=-1,o=[],l=[];for(t=t+"",e=e+"";(n=pd.exec(t))&&(i=gd.exec(e));)(a=i.index)>r&&(a=e.slice(r,a),o[s]?o[s]+=a:o[++s]=a),(n=n[0])===(i=i[0])?o[s]?o[s]+=i:o[++s]=i:(o[++s]=null,l.push({i:s,x:Bn(n,i)})),r=gd.lastIndex;return r<e.length&&(a=e.slice(r),o[s]?o[s]+=a:o[++s]=a),o.length<2?l[0]?qB(l[0].x):PB(e):(e=l.length,function(u){for(var h=0,d;h<e;++h)o[(d=l[h]).i]=d.x(u);return o.join("")})}function Ma(t,e){var r=typeof e,n;return e==null||r==="boolean"?Hu(e):(r==="number"?Bn:r==="string"?(n=Aa(e))?(e=n,Nl):yd:e instanceof Aa?Nl:e instanceof Date?F5:D5(e)?dd:Array.isArray(e)?O5:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?P5:Bn)(t,e)}function VB(t){var e=t.length;return function(r){return t[Math.max(0,Math.min(e-1,Math.floor(r*e)))]}}function zB(t,e){var r=Gu(+t,+e);return function(n){var i=r(n);return i-360*Math.floor(i/360)}}function ju(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}}var q5=180/Math.PI,md={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function V5(t,e,r,n,i,a){var s,o,l;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(l=t*r+e*n)&&(r-=t*l,n-=e*l),(o=Math.sqrt(r*r+n*n))&&(r/=o,n/=o,l/=o),t*n<e*r&&(t=-t,e=-e,l=-l,s=-s),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*q5,skewX:Math.atan(l)*q5,scaleX:s,scaleY:o}}var $u;function YB(t){const e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?md:V5(e.a,e.b,e.c,e.d,e.e,e.f)}function UB(t){return t==null||($u||($u=document.createElementNS("http://www.w3.org/2000/svg","g")),$u.setAttribute("transform",t),!(t=$u.transform.baseVal.consolidate()))?md:(t=t.matrix,V5(t.a,t.b,t.c,t.d,t.e,t.f))}function z5(t,e,r,n){function i(u){return u.length?u.pop()+" ":""}function a(u,h,d,f,p,m){if(u!==d||h!==f){var _=p.push("translate(",null,e,null,r);m.push({i:_-4,x:Bn(u,d)},{i:_-2,x:Bn(h,f)})}else(d||f)&&p.push("translate("+d+e+f+r)}function s(u,h,d,f){u!==h?(u-h>180?h+=360:h-u>180&&(u+=360),f.push({i:d.push(i(d)+"rotate(",null,n)-2,x:Bn(u,h)})):h&&d.push(i(d)+"rotate("+h+n)}function o(u,h,d,f){u!==h?f.push({i:d.push(i(d)+"skewX(",null,n)-2,x:Bn(u,h)}):h&&d.push(i(d)+"skewX("+h+n)}function l(u,h,d,f,p,m){if(u!==d||h!==f){var _=p.push(i(p)+"scale(",null,",",null,")");m.push({i:_-4,x:Bn(u,d)},{i:_-2,x:Bn(h,f)})}else(d!==1||f!==1)&&p.push(i(p)+"scale("+d+","+f+")")}return function(u,h){var d=[],f=[];return u=t(u),h=t(h),a(u.translateX,u.translateY,h.translateX,h.translateY,d,f),s(u.rotate,h.rotate,d,f),o(u.skewX,h.skewX,d,f),l(u.scaleX,u.scaleY,h.scaleX,h.scaleY,d,f),u=h=null,function(p){for(var m=-1,_=f.length,y;++m<_;)d[(y=f[m]).i]=y.x(p);return d.join("")}}}var Y5=z5(YB,"px, ","px)","deg)"),U5=z5(UB,", ",")",")"),WB=1e-12;function W5(t){return((t=Math.exp(t))+1/t)/2}function HB(t){return((t=Math.exp(t))-1/t)/2}function GB(t){return((t=Math.exp(2*t))-1)/(t+1)}const H5=function t(e,r,n){function i(a,s){var o=a[0],l=a[1],u=a[2],h=s[0],d=s[1],f=s[2],p=h-o,m=d-l,_=p*p+m*m,y,b;if(_<WB)b=Math.log(f/u)/e,y=function(S){return[o+S*p,l+S*m,u*Math.exp(e*S*b)]};else{var x=Math.sqrt(_),k=(f*f-u*u+n*_)/(2*u*r*x),T=(f*f-u*u-n*_)/(2*f*r*x),C=Math.log(Math.sqrt(k*k+1)-k),M=Math.log(Math.sqrt(T*T+1)-T);b=(M-C)/e,y=function(S){var R=S*b,A=W5(C),L=u/(r*x)*(A*GB(e*R+C)-HB(C));return[o+L*p,l+L*m,u*A/W5(e*R+C)]}}return y.duration=b*1e3*e/Math.SQRT2,y}return i.rho=function(a){var s=Math.max(.001,+a),o=s*s,l=o*o;return t(s,o,l)},i}(Math.SQRT2,2,4);function G5(t){return function(e,r){var n=t((e=qu(e)).h,(r=qu(r)).h),i=Cr(e.s,r.s),a=Cr(e.l,r.l),s=Cr(e.opacity,r.opacity);return function(o){return e.h=n(o),e.s=i(o),e.l=a(o),e.opacity=s(o),e+""}}}const jB=G5(Gu);var $B=G5(Cr);function XB(t,e){var r=Cr((t=Yu(t)).l,(e=Yu(e)).l),n=Cr(t.a,e.a),i=Cr(t.b,e.b),a=Cr(t.opacity,e.opacity);return function(s){return t.l=r(s),t.a=n(s),t.b=i(s),t.opacity=a(s),t+""}}function j5(t){return function(e,r){var n=t((e=Uu(e)).h,(r=Uu(r)).h),i=Cr(e.c,r.c),a=Cr(e.l,r.l),s=Cr(e.opacity,r.opacity);return function(o){return e.h=n(o),e.c=i(o),e.l=a(o),e.opacity=s(o),e+""}}}const $5=j5(Gu);var KB=j5(Cr);function X5(t){return function e(r){r=+r;function n(i,a){var s=t((i=Qn(i)).h,(a=Qn(a)).h),o=Cr(i.s,a.s),l=Cr(i.l,a.l),u=Cr(i.opacity,a.opacity);return function(h){return i.h=s(h),i.s=o(h),i.l=l(Math.pow(h,r)),i.opacity=u(h),i+""}}return n.gamma=e,n}(1)}const ZB=X5(Gu);var Xu=X5(Cr);function K5(t,e){e===void 0&&(e=t,t=Ma);for(var r=0,n=e.length-1,i=e[0],a=new Array(n<0?0:n);r<n;)a[r]=t(i,i=e[++r]);return function(s){var o=Math.max(0,Math.min(n-1,Math.floor(s*=n)));return a[o](s-o)}}function QB(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t(n/(e-1));return r}var yo=0,Bl=0,Dl=0,Z5=1e3,Ku,Ol,Zu=0,_s=0,Qu=0,Fl=typeof performance=="object"&&performance.now?performance:Date,Q5=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Pl(){return _s||(Q5(JB),_s=Fl.now()+Qu)}function JB(){_s=0}function ql(){this._call=this._time=this._next=null}ql.prototype=Ju.prototype={constructor:ql,restart:function(t,e,r){if(typeof t!="function")throw new TypeError("callback is not a function");r=(r==null?Pl():+r)+(e==null?0:+e),!this._next&&Ol!==this&&(Ol?Ol._next=this:Ku=this,Ol=this),this._call=t,this._time=r,bd()},stop:function(){this._call&&(this._call=null,this._time=1/0,bd())}};function Ju(t,e,r){var n=new ql;return n.restart(t,e,r),n}function J5(){Pl(),++yo;for(var t=Ku,e;t;)(e=_s-t._time)>=0&&t._call.call(void 0,e),t=t._next;--yo}function tv(){_s=(Zu=Fl.now())+Qu,yo=Bl=0;try{J5()}finally{yo=0,eD(),_s=0}}function tD(){var t=Fl.now(),e=t-Zu;e>Z5&&(Qu-=e,Zu=t)}function eD(){for(var t,e=Ku,r,n=1/0;e;)e._call?(n>e._time&&(n=e._time),t=e,e=e._next):(r=e._next,e._next=null,e=t?t._next=r:Ku=r);Ol=t,bd(n)}function bd(t){if(!yo){Bl&&(Bl=clearTimeout(Bl));var e=t-_s;e>24?(t<1/0&&(Bl=setTimeout(tv,t-Fl.now()-Qu)),Dl&&(Dl=clearInterval(Dl))):(Dl||(Zu=Fl.now(),Dl=setInterval(tD,Z5)),yo=1,Q5(tv))}}function _d(t,e,r){var n=new ql;return e=e==null?0:+e,n.restart(i=>{n.stop(),t(i+e)},e,r),n}function rD(t,e,r){var n=new ql,i=e;return e==null?(n.restart(t,e,r),n):(n._restart=n.restart,n.restart=function(a,s,o){s=+s,o=o==null?Pl():+o,n._restart(function l(u){u+=i,n._restart(l,i+=s,o),a(u)},s,o)},n.restart(t,e,r),n)}var nD=fs("start","end","cancel","interrupt"),iD=[],ev=0,vd=1,xd=2,th=3,rv=4,kd=5,eh=6;function rh(t,e,r,n,i,a){var s=t.__transition;if(!s)t.__transition={};else if(r in s)return;aD(t,r,{name:e,index:n,group:i,on:nD,tween:iD,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:ev})}function wd(t,e){var r=Jn(t,e);if(r.state>ev)throw new Error("too late; already scheduled");return r}function Ei(t,e){var r=Jn(t,e);if(r.state>th)throw new Error("too late; already running");return r}function Jn(t,e){var r=t.__transition;if(!r||!(r=r[e]))throw new Error("transition not found");return r}function aD(t,e,r){var n=t.__transition,i;n[e]=r,r.timer=Ju(a,0,r.time);function a(u){r.state=vd,r.timer.restart(s,r.delay,r.time),r.delay<=u&&s(u-r.delay)}function s(u){var h,d,f,p;if(r.state!==vd)return l();for(h in n)if(p=n[h],p.name===r.name){if(p.state===th)return _d(s);p.state===rv?(p.state=eh,p.timer.stop(),p.on.call("interrupt",t,t.__data__,p.index,p.group),delete n[h]):+h<e&&(p.state=eh,p.timer.stop(),p.on.call("cancel",t,t.__data__,p.index,p.group),delete n[h])}if(_d(function(){r.state===th&&(r.state=rv,r.timer.restart(o,r.delay,r.time),o(u))}),r.state=xd,r.on.call("start",t,t.__data__,r.index,r.group),r.state===xd){for(r.state=th,i=new Array(f=r.tween.length),h=0,d=-1;h<f;++h)(p=r.tween[h].value.call(t,t.__data__,r.index,r.group))&&(i[++d]=p);i.length=d+1}}function o(u){for(var h=u<r.duration?r.ease.call(null,u/r.duration):(r.timer.restart(l),r.state=kd,1),d=-1,f=i.length;++d<f;)i[d].call(t,h);r.state===kd&&(r.on.call("end",t,t.__data__,r.index,r.group),l())}function l(){r.state=eh,r.timer.stop(),delete n[e];for(var u in n)return;delete t.__transition}}function vs(t,e){var r=t.__transition,n,i,a=!0,s;if(!!r){e=e==null?null:e+"";for(s in r){if((n=r[s]).name!==e){a=!1;continue}i=n.state>xd&&n.state<kd,n.state=eh,n.timer.stop(),n.on.call(i?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete r[s]}a&&delete t.__transition}}function sD(t){return this.each(function(){vs(this,t)})}function oD(t,e){var r,n;return function(){var i=Ei(this,t),a=i.tween;if(a!==r){n=r=a;for(var s=0,o=n.length;s<o;++s)if(n[s].name===e){n=n.slice(),n.splice(s,1);break}}i.tween=n}}function lD(t,e,r){var n,i;if(typeof r!="function")throw new Error;return function(){var a=Ei(this,t),s=a.tween;if(s!==n){i=(n=s).slice();for(var o={name:e,value:r},l=0,u=i.length;l<u;++l)if(i[l].name===e){i[l]=o;break}l===u&&i.push(o)}a.tween=i}}function cD(t,e){var r=this._id;if(t+="",arguments.length<2){for(var n=Jn(this.node(),r).tween,i=0,a=n.length,s;i<a;++i)if((s=n[i]).name===t)return s.value;return null}return this.each((e==null?oD:lD)(r,t,e))}function Td(t,e,r){var n=t._id;return t.each(function(){var i=Ei(this,n);(i.value||(i.value={}))[e]=r.apply(this,arguments)}),function(i){return Jn(i,n).value[e]}}function nv(t,e){var r;return(typeof e=="number"?Bn:e instanceof Aa?Nl:(r=Aa(e))?(e=r,Nl):yd)(t,e)}function uD(t){return function(){this.removeAttribute(t)}}function hD(t){return function(){this.removeAttributeNS(t.space,t.local)}}function fD(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttribute(t);return s===i?null:s===n?a:a=e(n=s,r)}}function dD(t,e,r){var n,i=r+"",a;return function(){var s=this.getAttributeNS(t.space,t.local);return s===i?null:s===n?a:a=e(n=s,r)}}function pD(t,e,r){var n,i,a;return function(){var s,o=r(this),l;return o==null?void this.removeAttribute(t):(s=this.getAttribute(t),l=o+"",s===l?null:s===n&&l===i?a:(i=l,a=e(n=s,o)))}}function gD(t,e,r){var n,i,a;return function(){var s,o=r(this),l;return o==null?void this.removeAttributeNS(t.space,t.local):(s=this.getAttributeNS(t.space,t.local),l=o+"",s===l?null:s===n&&l===i?a:(i=l,a=e(n=s,o)))}}function yD(t,e){var r=Al(t),n=r==="transform"?U5:nv;return this.attrTween(t,typeof e=="function"?(r.local?gD:pD)(r,n,Td(this,"attr."+t,e)):e==null?(r.local?hD:uD)(r):(r.local?dD:fD)(r,n,e))}function mD(t,e){return function(r){this.setAttribute(t,e.call(this,r))}}function bD(t,e){return function(r){this.setAttributeNS(t.space,t.local,e.call(this,r))}}function _D(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&bD(t,a)),r}return i._value=e,i}function vD(t,e){var r,n;function i(){var a=e.apply(this,arguments);return a!==n&&(r=(n=a)&&mD(t,a)),r}return i._value=e,i}function xD(t,e){var r="attr."+t;if(arguments.length<2)return(r=this.tween(r))&&r._value;if(e==null)return this.tween(r,null);if(typeof e!="function")throw new Error;var n=Al(t);return this.tween(r,(n.local?_D:vD)(n,e))}function kD(t,e){return function(){wd(this,t).delay=+e.apply(this,arguments)}}function wD(t,e){return e=+e,function(){wd(this,t).delay=e}}function TD(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?kD:wD)(e,t)):Jn(this.node(),e).delay}function ED(t,e){return function(){Ei(this,t).duration=+e.apply(this,arguments)}}function CD(t,e){return e=+e,function(){Ei(this,t).duration=e}}function SD(t){var e=this._id;return arguments.length?this.each((typeof t=="function"?ED:CD)(e,t)):Jn(this.node(),e).duration}function AD(t,e){if(typeof e!="function")throw new Error;return function(){Ei(this,t).ease=e}}function MD(t){var e=this._id;return arguments.length?this.each(AD(e,t)):Jn(this.node(),e).ease}function LD(t,e){return function(){var r=e.apply(this,arguments);if(typeof r!="function")throw new Error;Ei(this,t).ease=r}}function RD(t){if(typeof t!="function")throw new Error;return this.each(LD(this._id,t))}function ID(t){typeof t!="function"&&(t=Q0(t));for(var e=this._groups,r=e.length,n=new Array(r),i=0;i<r;++i)for(var a=e[i],s=a.length,o=n[i]=[],l,u=0;u<s;++u)(l=a[u])&&t.call(l,l.__data__,u,a)&&o.push(l);return new Ci(n,this._parents,this._name,this._id)}function ND(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,r=t._groups,n=e.length,i=r.length,a=Math.min(n,i),s=new Array(n),o=0;o<a;++o)for(var l=e[o],u=r[o],h=l.length,d=s[o]=new Array(h),f,p=0;p<h;++p)(f=l[p]||u[p])&&(d[p]=f);for(;o<n;++o)s[o]=e[o];return new Ci(s,this._parents,this._name,this._id)}function BD(t){return(t+"").trim().split(/^|\s+/).every(function(e){var r=e.indexOf(".");return r>=0&&(e=e.slice(0,r)),!e||e==="start"})}function DD(t,e,r){var n,i,a=BD(e)?wd:Ei;return function(){var s=a(this,t),o=s.on;o!==n&&(i=(n=o).copy()).on(e,r),s.on=i}}function OD(t,e){var r=this._id;return arguments.length<2?Jn(this.node(),r).on.on(t):this.each(DD(r,t,e))}function FD(t){return function(){var e=this.parentNode;for(var r in this.__transition)if(+r!==t)return;e&&e.removeChild(this)}}function PD(){return this.on("end.remove",FD(this._id))}function qD(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Ru(t));for(var n=this._groups,i=n.length,a=new Array(i),s=0;s<i;++s)for(var o=n[s],l=o.length,u=a[s]=new Array(l),h,d,f=0;f<l;++f)(h=o[f])&&(d=t.call(h,h.__data__,f,o))&&("__data__"in h&&(d.__data__=h.__data__),u[f]=d,rh(u[f],e,r,f,u,Jn(h,r)));return new Ci(a,this._parents,e,r)}function VD(t){var e=this._name,r=this._id;typeof t!="function"&&(t=Z0(t));for(var n=this._groups,i=n.length,a=[],s=[],o=0;o<i;++o)for(var l=n[o],u=l.length,h,d=0;d<u;++d)if(h=l[d]){for(var f=t.call(h,h.__data__,d,l),p,m=Jn(h,r),_=0,y=f.length;_<y;++_)(p=f[_])&&rh(p,e,r,_,f,m);a.push(f),s.push(h)}return new Ci(a,s,e,r)}var zD=ps.prototype.constructor;function YD(){return new zD(this._groups,this._parents)}function UD(t,e){var r,n,i;return function(){var a=ds(this,t),s=(this.style.removeProperty(t),ds(this,t));return a===s?null:a===r&&s===n?i:i=e(r=a,n=s)}}function iv(t){return function(){this.style.removeProperty(t)}}function WD(t,e,r){var n,i=r+"",a;return function(){var s=ds(this,t);return s===i?null:s===n?a:a=e(n=s,r)}}function HD(t,e,r){var n,i,a;return function(){var s=ds(this,t),o=r(this),l=o+"";return o==null&&(l=o=(this.style.removeProperty(t),ds(this,t))),s===l?null:s===n&&l===i?a:(i=l,a=e(n=s,o))}}function GD(t,e){var r,n,i,a="style."+e,s="end."+a,o;return function(){var l=Ei(this,t),u=l.on,h=l.value[a]==null?o||(o=iv(e)):void 0;(u!==r||i!==h)&&(n=(r=u).copy()).on(s,i=h),l.on=n}}function jD(t,e,r){var n=(t+="")=="transform"?Y5:nv;return e==null?this.styleTween(t,UD(t,n)).on("end.style."+t,iv(t)):typeof e=="function"?this.styleTween(t,HD(t,n,Td(this,"style."+t,e))).each(GD(this._id,t)):this.styleTween(t,WD(t,n,e),r).on("end.style."+t,null)}function $D(t,e,r){return function(n){this.style.setProperty(t,e.call(this,n),r)}}function XD(t,e,r){var n,i;function a(){var s=e.apply(this,arguments);return s!==i&&(n=(i=s)&&$D(t,s,r)),n}return a._value=e,a}function KD(t,e,r){var n="style."+(t+="");if(arguments.length<2)return(n=this.tween(n))&&n._value;if(e==null)return this.tween(n,null);if(typeof e!="function")throw new Error;return this.tween(n,XD(t,e,r==null?"":r))}function ZD(t){return function(){this.textContent=t}}function QD(t){return function(){var e=t(this);this.textContent=e==null?"":e}}function JD(t){return this.tween("text",typeof t=="function"?QD(Td(this,"text",t)):ZD(t==null?"":t+""))}function tO(t){return function(e){this.textContent=t.call(this,e)}}function eO(t){var e,r;function n(){var i=t.apply(this,arguments);return i!==r&&(e=(r=i)&&tO(i)),e}return n._value=t,n}function rO(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(t==null)return this.tween(e,null);if(typeof t!="function")throw new Error;return this.tween(e,eO(t))}function nO(){for(var t=this._name,e=this._id,r=sv(),n=this._groups,i=n.length,a=0;a<i;++a)for(var s=n[a],o=s.length,l,u=0;u<o;++u)if(l=s[u]){var h=Jn(l,e);rh(l,t,r,u,s,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new Ci(n,this._parents,t,r)}function iO(){var t,e,r=this,n=r._id,i=r.size();return new Promise(function(a,s){var o={value:s},l={value:function(){--i===0&&a()}};r.each(function(){var u=Ei(this,n),h=u.on;h!==t&&(e=(t=h).copy(),e._.cancel.push(o),e._.interrupt.push(o),e._.end.push(l)),u.on=e}),i===0&&a()})}var aO=0;function Ci(t,e,r,n){this._groups=t,this._parents=e,this._name=r,this._id=n}function av(t){return ps().transition(t)}function sv(){return++aO}var $i=ps.prototype;Ci.prototype=av.prototype={constructor:Ci,select:qD,selectAll:VD,selectChild:$i.selectChild,selectChildren:$i.selectChildren,filter:ID,merge:ND,selection:YD,transition:nO,call:$i.call,nodes:$i.nodes,node:$i.node,size:$i.size,empty:$i.empty,each:$i.each,on:OD,attr:yD,attrTween:xD,style:jD,styleTween:KD,text:JD,textTween:rO,remove:PD,tween:cD,delay:TD,duration:SD,ease:MD,easeVarying:RD,end:iO,[Symbol.iterator]:$i[Symbol.iterator]};const sO=t=>+t;function oO(t){return t*t}function lO(t){return t*(2-t)}function ov(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}function cO(t){return t*t*t}function uO(t){return--t*t*t+1}function Ed(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}var Cd=3,hO=function t(e){e=+e;function r(n){return Math.pow(n,e)}return r.exponent=t,r}(Cd),fO=function t(e){e=+e;function r(n){return 1-Math.pow(1-n,e)}return r.exponent=t,r}(Cd),lv=function t(e){e=+e;function r(n){return((n*=2)<=1?Math.pow(n,e):2-Math.pow(2-n,e))/2}return r.exponent=t,r}(Cd),cv=Math.PI,uv=cv/2;function dO(t){return+t==1?1:1-Math.cos(t*uv)}function pO(t){return Math.sin(t*uv)}function hv(t){return(1-Math.cos(cv*t))/2}function La(t){return(Math.pow(2,-10*t)-.0009765625)*1.0009775171065494}function gO(t){return La(1-+t)}function yO(t){return 1-La(t)}function fv(t){return((t*=2)<=1?La(1-t):2-La(t-1))/2}function mO(t){return 1-Math.sqrt(1-t*t)}function bO(t){return Math.sqrt(1- --t*t)}function dv(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}var Sd=4/11,_O=6/11,vO=8/11,xO=3/4,kO=9/11,wO=10/11,TO=15/16,EO=21/22,CO=63/64,nh=1/Sd/Sd;function SO(t){return 1-Vl(1-t)}function Vl(t){return(t=+t)<Sd?nh*t*t:t<vO?nh*(t-=_O)*t+xO:t<wO?nh*(t-=kO)*t+TO:nh*(t-=EO)*t+CO}function AO(t){return((t*=2)<=1?1-Vl(1-t):Vl(t-1)+1)/2}var Ad=1.70158,MO=function t(e){e=+e;function r(n){return(n=+n)*n*(e*(n-1)+n)}return r.overshoot=t,r}(Ad),LO=function t(e){e=+e;function r(n){return--n*n*((n+1)*e+n)+1}return r.overshoot=t,r}(Ad),pv=function t(e){e=+e;function r(n){return((n*=2)<1?n*n*((e+1)*n-e):(n-=2)*n*((e+1)*n+e)+2)/2}return r.overshoot=t,r}(Ad),mo=2*Math.PI,Md=1,Ld=.3,RO=function t(e,r){var n=Math.asin(1/(e=Math.max(1,e)))*(r/=mo);function i(a){return e*La(- --a)*Math.sin((n-a)/r)}return i.amplitude=function(a){return t(a,r*mo)},i.period=function(a){return t(e,a)},i}(Md,Ld),gv=function t(e,r){var n=Math.asin(1/(e=Math.max(1,e)))*(r/=mo);function i(a){return 1-e*La(a=+a)*Math.sin((a+n)/r)}return i.amplitude=function(a){return t(a,r*mo)},i.period=function(a){return t(e,a)},i}(Md,Ld),IO=function t(e,r){var n=Math.asin(1/(e=Math.max(1,e)))*(r/=mo);function i(a){return((a=a*2-1)<0?e*La(-a)*Math.sin((n-a)/r):2-e*La(a)*Math.sin((n+a)/r))/2}return i.amplitude=function(a){return t(a,r*mo)},i.period=function(a){return t(e,a)},i}(Md,Ld),NO={time:null,delay:0,duration:250,ease:Ed};function BO(t,e){for(var r;!(r=t.__transition)||!(r=r[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return r}function DO(t){var e,r;t instanceof Ci?(e=t._id,t=t._name):(e=sv(),(r=NO).time=Pl(),t=t==null?null:t+"");for(var n=this._groups,i=n.length,a=0;a<i;++a)for(var s=n[a],o=s.length,l,u=0;u<o;++u)(l=s[u])&&rh(l,t,e,u,s,r||BO(l,e));return new Ci(n,this._parents,t,e)}ps.prototype.interrupt=sD,ps.prototype.transition=DO;var OO=[null];function FO(t,e){var r=t.__transition,n,i;if(r){e=e==null?null:e+"";for(i in r)if((n=r[i]).state>vd&&n.name===e)return new Ci([[t]],OO,e,+i)}return null}const Rd=t=>()=>t;function PO(t,{sourceEvent:e,target:r,selection:n,mode:i,dispatch:a}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},selection:{value:n,enumerable:!0,configurable:!0},mode:{value:i,enumerable:!0,configurable:!0},_:{value:a}})}function qO(t){t.stopImmediatePropagation()}function Id(t){t.preventDefault(),t.stopImmediatePropagation()}var yv={name:"drag"},Nd={name:"space"},bo={name:"handle"},_o={name:"center"};const{abs:mv,max:Or,min:Fr}=Math;function bv(t){return[+t[0],+t[1]]}function Bd(t){return[bv(t[0]),bv(t[1])]}var ih={name:"x",handles:["w","e"].map(zl),input:function(t,e){return t==null?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},ah={name:"y",handles:["n","s"].map(zl),input:function(t,e){return t==null?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},VO={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(zl),input:function(t){return t==null?null:Bd(t)},output:function(t){return t}},Xi={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},_v={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},vv={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},zO={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},YO={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function zl(t){return{type:t}}function UO(t){return!t.ctrlKey&&!t.button}function WO(){var t=this.ownerSVGElement||this;return t.hasAttribute("viewBox")?(t=t.viewBox.baseVal,[[t.x,t.y],[t.x+t.width,t.y+t.height]]):[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function HO(){return navigator.maxTouchPoints||"ontouchstart"in this}function Dd(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function GO(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function jO(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function $O(){return Od(ih)}function XO(){return Od(ah)}function KO(){return Od(VO)}function Od(t){var e=WO,r=UO,n=HO,i=!0,a=fs("start","brush","end"),s=6,o;function l(y){var b=y.property("__brush",_).selectAll(".overlay").data([zl("overlay")]);b.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",Xi.overlay).merge(b).each(function(){var k=Dd(this).extent;St(this).attr("x",k[0][0]).attr("y",k[0][1]).attr("width",k[1][0]-k[0][0]).attr("height",k[1][1]-k[0][1])}),y.selectAll(".selection").data([zl("selection")]).enter().append("rect").attr("class","selection").attr("cursor",Xi.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var x=y.selectAll(".handle").data(t.handles,function(k){return k.type});x.exit().remove(),x.enter().append("rect").attr("class",function(k){return"handle handle--"+k.type}).attr("cursor",function(k){return Xi[k.type]}),y.each(u).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",f).filter(n).on("touchstart.brush",f).on("touchmove.brush",p).on("touchend.brush touchcancel.brush",m).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}l.move=function(y,b,x){y.tween?y.on("start.brush",function(k){h(this,arguments).beforestart().start(k)}).on("interrupt.brush end.brush",function(k){h(this,arguments).end(k)}).tween("brush",function(){var k=this,T=k.__brush,C=h(k,arguments),M=T.selection,S=t.input(typeof b=="function"?b.apply(this,arguments):b,T.extent),R=Ma(M,S);function A(L){T.selection=L===1&&S===null?null:R(L),u.call(k),C.brush()}return M!==null&&S!==null?A:A(1)}):y.each(function(){var k=this,T=arguments,C=k.__brush,M=t.input(typeof b=="function"?b.apply(k,T):b,C.extent),S=h(k,T).beforestart();vs(k),C.selection=M===null?null:M,u.call(k),S.start(x).brush(x).end(x)})},l.clear=function(y,b){l.move(y,null,b)};function u(){var y=St(this),b=Dd(this).selection;b?(y.selectAll(".selection").style("display",null).attr("x",b[0][0]).attr("y",b[0][1]).attr("width",b[1][0]-b[0][0]).attr("height",b[1][1]-b[0][1]),y.selectAll(".handle").style("display",null).attr("x",function(x){return x.type[x.type.length-1]==="e"?b[1][0]-s/2:b[0][0]-s/2}).attr("y",function(x){return x.type[0]==="s"?b[1][1]-s/2:b[0][1]-s/2}).attr("width",function(x){return x.type==="n"||x.type==="s"?b[1][0]-b[0][0]+s:s}).attr("height",function(x){return x.type==="e"||x.type==="w"?b[1][1]-b[0][1]+s:s})):y.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function h(y,b,x){var k=y.__brush.emitter;return k&&(!x||!k.clean)?k:new d(y,b,x)}function d(y,b,x){this.that=y,this.args=b,this.state=y.__brush,this.active=0,this.clean=x}d.prototype={beforestart:function(){return++this.active===1&&(this.state.emitter=this,this.starting=!0),this},start:function(y,b){return this.starting?(this.starting=!1,this.emit("start",y,b)):this.emit("brush",y),this},brush:function(y,b){return this.emit("brush",y,b),this},end:function(y,b){return--this.active===0&&(delete this.state.emitter,this.emit("end",y,b)),this},emit:function(y,b,x){var k=St(this.that).datum();a.call(y,this.that,new PO(y,{sourceEvent:b,target:l,selection:t.output(this.state.selection),mode:x,dispatch:a}),k)}};function f(y){if(o&&!y.touches||!r.apply(this,arguments))return;var b=this,x=y.target.__data__.type,k=(i&&y.metaKey?x="overlay":x)==="selection"?yv:i&&y.altKey?_o:bo,T=t===ah?null:zO[x],C=t===ih?null:YO[x],M=Dd(b),S=M.extent,R=M.selection,A=S[0][0],L,v,B=S[0][1],w,D,N=S[1][0],z,X,ct=S[1][1],J,Y,$=0,lt=0,ut,W=T&&C&&i&&y.shiftKey,tt,K,it=Array.from(y.touches||[y],at=>{const It=at.identifier;return at=Tn(at,b),at.point0=at.slice(),at.identifier=It,at});vs(b);var Z=h(b,arguments,!0).beforestart();if(x==="overlay"){R&&(ut=!0);const at=[it[0],it[1]||it[0]];M.selection=R=[[L=t===ah?A:Fr(at[0][0],at[1][0]),w=t===ih?B:Fr(at[0][1],at[1][1])],[z=t===ah?N:Or(at[0][0],at[1][0]),J=t===ih?ct:Or(at[0][1],at[1][1])]],it.length>1&&F(y)}else L=R[0][0],w=R[0][1],z=R[1][0],J=R[1][1];v=L,D=w,X=z,Y=J;var V=St(b).attr("pointer-events","none"),Q=V.selectAll(".overlay").attr("cursor",Xi[x]);if(y.touches)Z.moved=U,Z.ended=j;else{var q=St(y.view).on("mousemove.brush",U,!0).on("mouseup.brush",j,!0);i&&q.on("keydown.brush",P,!0).on("keyup.brush",et,!0),Bu(y.view)}u.call(b),Z.start(y,k.name);function U(at){for(const It of at.changedTouches||[at])for(const Lt of it)Lt.identifier===It.identifier&&(Lt.cur=Tn(It,b));if(W&&!tt&&!K&&it.length===1){const It=it[0];mv(It.cur[0]-It[0])>mv(It.cur[1]-It[1])?K=!0:tt=!0}for(const It of it)It.cur&&(It[0]=It.cur[0],It[1]=It.cur[1]);ut=!0,Id(at),F(at)}function F(at){const It=it[0],Lt=It.point0;var Rt;switch($=It[0]-Lt[0],lt=It[1]-Lt[1],k){case Nd:case yv:{T&&($=Or(A-L,Fr(N-z,$)),v=L+$,X=z+$),C&&(lt=Or(B-w,Fr(ct-J,lt)),D=w+lt,Y=J+lt);break}case bo:{it[1]?(T&&(v=Or(A,Fr(N,it[0][0])),X=Or(A,Fr(N,it[1][0])),T=1),C&&(D=Or(B,Fr(ct,it[0][1])),Y=Or(B,Fr(ct,it[1][1])),C=1)):(T<0?($=Or(A-L,Fr(N-L,$)),v=L+$,X=z):T>0&&($=Or(A-z,Fr(N-z,$)),v=L,X=z+$),C<0?(lt=Or(B-w,Fr(ct-w,lt)),D=w+lt,Y=J):C>0&&(lt=Or(B-J,Fr(ct-J,lt)),D=w,Y=J+lt));break}case _o:{T&&(v=Or(A,Fr(N,L-$*T)),X=Or(A,Fr(N,z+$*T))),C&&(D=Or(B,Fr(ct,w-lt*C)),Y=Or(B,Fr(ct,J+lt*C)));break}}X<v&&(T*=-1,Rt=L,L=z,z=Rt,Rt=v,v=X,X=Rt,x in _v&&Q.attr("cursor",Xi[x=_v[x]])),Y<D&&(C*=-1,Rt=w,w=J,J=Rt,Rt=D,D=Y,Y=Rt,x in vv&&Q.attr("cursor",Xi[x=vv[x]])),M.selection&&(R=M.selection),tt&&(v=R[0][0],X=R[1][0]),K&&(D=R[0][1],Y=R[1][1]),(R[0][0]!==v||R[0][1]!==D||R[1][0]!==X||R[1][1]!==Y)&&(M.selection=[[v,D],[X,Y]],u.call(b),Z.brush(at,k.name))}function j(at){if(qO(at),at.touches){if(at.touches.length)return;o&&clearTimeout(o),o=setTimeout(function(){o=null},500)}else Du(at.view,ut),q.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null);V.attr("pointer-events","all"),Q.attr("cursor",Xi.overlay),M.selection&&(R=M.selection),GO(R)&&(M.selection=null,u.call(b)),Z.end(at,k.name)}function P(at){switch(at.keyCode){case 16:{W=T&&C;break}case 18:{k===bo&&(T&&(z=X-$*T,L=v+$*T),C&&(J=Y-lt*C,w=D+lt*C),k=_o,F(at));break}case 32:{(k===bo||k===_o)&&(T<0?z=X-$:T>0&&(L=v-$),C<0?J=Y-lt:C>0&&(w=D-lt),k=Nd,Q.attr("cursor",Xi.selection),F(at));break}default:return}Id(at)}function et(at){switch(at.keyCode){case 16:{W&&(tt=K=W=!1,F(at));break}case 18:{k===_o&&(T<0?z=X:T>0&&(L=v),C<0?J=Y:C>0&&(w=D),k=bo,F(at));break}case 32:{k===Nd&&(at.altKey?(T&&(z=X-$*T,L=v+$*T),C&&(J=Y-lt*C,w=D+lt*C),k=_o):(T<0?z=X:T>0&&(L=v),C<0?J=Y:C>0&&(w=D),k=bo),Q.attr("cursor",Xi[x]),F(at));break}default:return}Id(at)}}function p(y){h(this,arguments).moved(y)}function m(y){h(this,arguments).ended(y)}function _(){var y=this.__brush||{selection:null};return y.extent=Bd(e.apply(this,arguments)),y.dim=t,y}return l.extent=function(y){return arguments.length?(e=typeof y=="function"?y:Rd(Bd(y)),l):e},l.filter=function(y){return arguments.length?(r=typeof y=="function"?y:Rd(!!y),l):r},l.touchable=function(y){return arguments.length?(n=typeof y=="function"?y:Rd(!!y),l):n},l.handleSize=function(y){return arguments.length?(s=+y,l):s},l.keyModifiers=function(y){return arguments.length?(i=!!y,l):i},l.on=function(){var y=a.on.apply(a,arguments);return y===a?l:y},l}var xv=Math.abs,vo=Math.cos,xo=Math.sin,kv=Math.PI,sh=kv/2,wv=kv*2,Tv=Math.max,Fd=1e-12;function Pd(t,e){return Array.from({length:e-t},(r,n)=>t+n)}function ZO(t){return function(e,r){return t(e.source.value+e.target.value,r.source.value+r.target.value)}}function QO(){return qd(!1,!1)}function JO(){return qd(!1,!0)}function tF(){return qd(!0,!1)}function qd(t,e){var r=0,n=null,i=null,a=null;function s(o){var l=o.length,u=new Array(l),h=Pd(0,l),d=new Array(l*l),f=new Array(l),p=0,m;o=Float64Array.from({length:l*l},e?(_,y)=>o[y%l][y/l|0]:(_,y)=>o[y/l|0][y%l]);for(let _=0;_<l;++_){let y=0;for(let b=0;b<l;++b)y+=o[_*l+b]+t*o[b*l+_];p+=u[_]=y}p=Tv(0,wv-r*l)/p,m=p?r:wv/l;{let _=0;n&&h.sort((y,b)=>n(u[y],u[b]));for(const y of h){const b=_;if(t){const x=Pd(~l+1,l).filter(k=>k<0?o[~k*l+y]:o[y*l+k]);i&&x.sort((k,T)=>i(k<0?-o[~k*l+y]:o[y*l+k],T<0?-o[~T*l+y]:o[y*l+T]));for(const k of x)if(k<0){const T=d[~k*l+y]||(d[~k*l+y]={source:null,target:null});T.target={index:y,startAngle:_,endAngle:_+=o[~k*l+y]*p,value:o[~k*l+y]}}else{const T=d[y*l+k]||(d[y*l+k]={source:null,target:null});T.source={index:y,startAngle:_,endAngle:_+=o[y*l+k]*p,value:o[y*l+k]}}f[y]={index:y,startAngle:b,endAngle:_,value:u[y]}}else{const x=Pd(0,l).filter(k=>o[y*l+k]||o[k*l+y]);i&&x.sort((k,T)=>i(o[y*l+k],o[y*l+T]));for(const k of x){let T;if(y<k?(T=d[y*l+k]||(d[y*l+k]={source:null,target:null}),T.source={index:y,startAngle:_,endAngle:_+=o[y*l+k]*p,value:o[y*l+k]}):(T=d[k*l+y]||(d[k*l+y]={source:null,target:null}),T.target={index:y,startAngle:_,endAngle:_+=o[y*l+k]*p,value:o[y*l+k]},y===k&&(T.source=T.target)),T.source&&T.target&&T.source.value<T.target.value){const C=T.source;T.source=T.target,T.target=C}}f[y]={index:y,startAngle:b,endAngle:_,value:u[y]}}_+=m}}return d=Object.values(d),d.groups=f,a?d.sort(a):d}return s.padAngle=function(o){return arguments.length?(r=Tv(0,o),s):r},s.sortGroups=function(o){return arguments.length?(n=o,s):n},s.sortSubgroups=function(o){return arguments.length?(i=o,s):i},s.sortChords=function(o){return arguments.length?(o==null?a=null:(a=ZO(o))._=o,s):a&&a._},s}const Vd=Math.PI,zd=2*Vd,xs=1e-6,eF=zd-xs;function Yd(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function Ra(){return new Yd}Yd.prototype=Ra.prototype={constructor:Yd,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},bezierCurveTo:function(t,e,r,n,i,a){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function(t,e,r,n,i){t=+t,e=+e,r=+r,n=+n,i=+i;var a=this._x1,s=this._y1,o=r-t,l=n-e,u=a-t,h=s-e,d=u*u+h*h;if(i<0)throw new Error("negative radius: "+i);if(this._x1===null)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>xs)if(!(Math.abs(h*o-l*u)>xs)||!i)this._+="L"+(this._x1=t)+","+(this._y1=e);else{var f=r-a,p=n-s,m=o*o+l*l,_=f*f+p*p,y=Math.sqrt(m),b=Math.sqrt(d),x=i*Math.tan((Vd-Math.acos((m+d-_)/(2*y*b)))/2),k=x/b,T=x/y;Math.abs(k-1)>xs&&(this._+="L"+(t+k*u)+","+(e+k*h)),this._+="A"+i+","+i+",0,0,"+ +(h*f>u*p)+","+(this._x1=t+T*o)+","+(this._y1=e+T*l)}},arc:function(t,e,r,n,i,a){t=+t,e=+e,r=+r,a=!!a;var s=r*Math.cos(n),o=r*Math.sin(n),l=t+s,u=e+o,h=1^a,d=a?n-i:i-n;if(r<0)throw new Error("negative radius: "+r);this._x1===null?this._+="M"+l+","+u:(Math.abs(this._x1-l)>xs||Math.abs(this._y1-u)>xs)&&(this._+="L"+l+","+u),r&&(d<0&&(d=d%zd+zd),d>eF?this._+="A"+r+","+r+",0,1,"+h+","+(t-s)+","+(e-o)+"A"+r+","+r+",0,1,"+h+","+(this._x1=l)+","+(this._y1=u):d>xs&&(this._+="A"+r+","+r+",0,"+ +(d>=Vd)+","+h+","+(this._x1=t+r*Math.cos(i))+","+(this._y1=e+r*Math.sin(i))))},rect:function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},toString:function(){return this._}};var rF=Array.prototype.slice;function ks(t){return function(){return t}}function nF(t){return t.source}function iF(t){return t.target}function Ev(t){return t.radius}function aF(t){return t.startAngle}function sF(t){return t.endAngle}function oF(){return 0}function lF(){return 10}function Cv(t){var e=nF,r=iF,n=Ev,i=Ev,a=aF,s=sF,o=oF,l=null;function u(){var h,d=e.apply(this,arguments),f=r.apply(this,arguments),p=o.apply(this,arguments)/2,m=rF.call(arguments),_=+n.apply(this,(m[0]=d,m)),y=a.apply(this,m)-sh,b=s.apply(this,m)-sh,x=+i.apply(this,(m[0]=f,m)),k=a.apply(this,m)-sh,T=s.apply(this,m)-sh;if(l||(l=h=Ra()),p>Fd&&(xv(b-y)>p*2+Fd?b>y?(y+=p,b-=p):(y-=p,b+=p):y=b=(y+b)/2,xv(T-k)>p*2+Fd?T>k?(k+=p,T-=p):(k-=p,T+=p):k=T=(k+T)/2),l.moveTo(_*vo(y),_*xo(y)),l.arc(0,0,_,y,b),y!==k||b!==T)if(t){var C=+t.apply(this,arguments),M=x-C,S=(k+T)/2;l.quadraticCurveTo(0,0,M*vo(k),M*xo(k)),l.lineTo(x*vo(S),x*xo(S)),l.lineTo(M*vo(T),M*xo(T))}else l.quadraticCurveTo(0,0,x*vo(k),x*xo(k)),l.arc(0,0,x,k,T);if(l.quadraticCurveTo(0,0,_*vo(y),_*xo(y)),l.closePath(),h)return l=null,h+""||null}return t&&(u.headRadius=function(h){return arguments.length?(t=typeof h=="function"?h:ks(+h),u):t}),u.radius=function(h){return arguments.length?(n=i=typeof h=="function"?h:ks(+h),u):n},u.sourceRadius=function(h){return arguments.length?(n=typeof h=="function"?h:ks(+h),u):n},u.targetRadius=function(h){return arguments.length?(i=typeof h=="function"?h:ks(+h),u):i},u.startAngle=function(h){return arguments.length?(a=typeof h=="function"?h:ks(+h),u):a},u.endAngle=function(h){return arguments.length?(s=typeof h=="function"?h:ks(+h),u):s},u.padAngle=function(h){return arguments.length?(o=typeof h=="function"?h:ks(+h),u):o},u.source=function(h){return arguments.length?(e=h,u):e},u.target=function(h){return arguments.length?(r=h,u):r},u.context=function(h){return arguments.length?(l=h==null?null:h,u):l},u}function cF(){return Cv()}function uF(){return Cv(lF)}var hF=Array.prototype,Sv=hF.slice;function fF(t,e){return t-e}function dF(t){for(var e=0,r=t.length,n=t[r-1][1]*t[0][0]-t[r-1][0]*t[0][1];++e<r;)n+=t[e-1][1]*t[e][0]-t[e-1][0]*t[e][1];return n}const Ia=t=>()=>t;function pF(t,e){for(var r=-1,n=e.length,i;++r<n;)if(i=gF(t,e[r]))return i;return 0}function gF(t,e){for(var r=e[0],n=e[1],i=-1,a=0,s=t.length,o=s-1;a<s;o=a++){var l=t[a],u=l[0],h=l[1],d=t[o],f=d[0],p=d[1];if(yF(l,d,e))return 0;h>n!=p>n&&r<(f-u)*(n-h)/(p-h)+u&&(i=-i)}return i}function yF(t,e,r){var n;return mF(t,e,r)&&bF(t[n=+(t[0]===e[0])],r[n],e[n])}function mF(t,e,r){return(e[0]-t[0])*(r[1]-t[1])===(r[0]-t[0])*(e[1]-t[1])}function bF(t,e,r){return t<=e&&e<=r||r<=e&&e<=t}function _F(){}var Ki=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]];function Ud(){var t=1,e=1,r=W0,n=l;function i(u){var h=r(u);if(Array.isArray(h))h=h.slice().sort(fF);else{const d=xl(u),f=wl(d[0],d[1],h);h=hs(Math.floor(d[0]/f)*f,Math.floor(d[1]/f-1)*f,h)}return h.map(d=>a(u,d))}function a(u,h){var d=[],f=[];return s(u,h,function(p){n(p,u,h),dF(p)>0?d.push([p]):f.push(p)}),f.forEach(function(p){for(var m=0,_=d.length,y;m<_;++m)if(pF((y=d[m])[0],p)!==-1){y.push(p);return}}),{type:"MultiPolygon",value:h,coordinates:d}}function s(u,h,d){var f=new Array,p=new Array,m,_,y,b,x,k;for(m=_=-1,b=u[0]>=h,Ki[b<<1].forEach(T);++m<t-1;)y=b,b=u[m+1]>=h,Ki[y|b<<1].forEach(T);for(Ki[b<<0].forEach(T);++_<e-1;){for(m=-1,b=u[_*t+t]>=h,x=u[_*t]>=h,Ki[b<<1|x<<2].forEach(T);++m<t-1;)y=b,b=u[_*t+t+m+1]>=h,k=x,x=u[_*t+m+1]>=h,Ki[y|b<<1|x<<2|k<<3].forEach(T);Ki[b|x<<3].forEach(T)}for(m=-1,x=u[_*t]>=h,Ki[x<<2].forEach(T);++m<t-1;)k=x,x=u[_*t+m+1]>=h,Ki[x<<2|k<<3].forEach(T);Ki[x<<3].forEach(T);function T(C){var M=[C[0][0]+m,C[0][1]+_],S=[C[1][0]+m,C[1][1]+_],R=o(M),A=o(S),L,v;(L=p[R])?(v=f[A])?(delete p[L.end],delete f[v.start],L===v?(L.ring.push(S),d(L.ring)):f[L.start]=p[v.end]={start:L.start,end:v.end,ring:L.ring.concat(v.ring)}):(delete p[L.end],L.ring.push(S),p[L.end=A]=L):(L=f[A])?(v=p[R])?(delete f[L.start],delete p[v.end],L===v?(L.ring.push(S),d(L.ring)):f[v.start]=p[L.end]={start:v.start,end:L.end,ring:v.ring.concat(L.ring)}):(delete f[L.start],L.ring.unshift(M),f[L.start=R]=L):f[R]=p[A]={start:R,end:A,ring:[M,S]}}}function o(u){return u[0]*2+u[1]*(t+1)*4}function l(u,h,d){u.forEach(function(f){var p=f[0],m=f[1],_=p|0,y=m|0,b,x=h[y*t+_];p>0&&p<t&&_===p&&(b=h[y*t+_-1],f[0]=p+(d-b)/(x-b)-.5),m>0&&m<e&&y===m&&(b=h[(y-1)*t+_],f[1]=m+(d-b)/(x-b)-.5)})}return i.contour=a,i.size=function(u){if(!arguments.length)return[t,e];var h=Math.floor(u[0]),d=Math.floor(u[1]);if(!(h>=0&&d>=0))throw new Error("invalid size");return t=h,e=d,i},i.thresholds=function(u){return arguments.length?(r=typeof u=="function"?u:Array.isArray(u)?Ia(Sv.call(u)):Ia(u),i):r},i.smooth=function(u){return arguments.length?(n=u?l:_F,i):n===l},i}function vF(t){return t[0]}function xF(t){return t[1]}function kF(){return 1}function wF(){var t=vF,e=xF,r=kF,n=960,i=500,a=20,s=2,o=a*3,l=n+o*2>>s,u=i+o*2>>s,h=Ia(20);function d(x){var k=new Float32Array(l*u),T=Math.pow(2,-s),C=-1;for(const w of x){var M=(t(w,++C,x)+o)*T,S=(e(w,C,x)+o)*T,R=+r(w,C,x);if(M>=0&&M<l&&S>=0&&S<u){var A=Math.floor(M),L=Math.floor(S),v=M-A-.5,B=S-L-.5;k[A+L*l]+=(1-v)*(1-B)*R,k[A+1+L*l]+=v*(1-B)*R,k[A+1+(L+1)*l]+=v*B*R,k[A+(L+1)*l]+=(1-v)*B*R}}return k_({data:k,width:l,height:u},a*T),k}function f(x){var k=d(x),T=h(k),C=Math.pow(2,2*s);return Array.isArray(T)||(T=hs(Number.MIN_VALUE,lo(k)/C,T)),Ud().size([l,u]).thresholds(T.map(M=>M*C))(k).map((M,S)=>(M.value=+T[S],p(M)))}f.contours=function(x){var k=d(x),T=Ud().size([l,u]),C=Math.pow(2,2*s),M=S=>{S=+S;var R=p(T.contour(k,S*C));return R.value=S,R};return Object.defineProperty(M,"max",{get:()=>lo(k)/C}),M};function p(x){return x.coordinates.forEach(m),x}function m(x){x.forEach(_)}function _(x){x.forEach(y)}function y(x){x[0]=x[0]*Math.pow(2,s)-o,x[1]=x[1]*Math.pow(2,s)-o}function b(){return o=a*3,l=n+o*2>>s,u=i+o*2>>s,f}return f.x=function(x){return arguments.length?(t=typeof x=="function"?x:Ia(+x),f):t},f.y=function(x){return arguments.length?(e=typeof x=="function"?x:Ia(+x),f):e},f.weight=function(x){return arguments.length?(r=typeof x=="function"?x:Ia(+x),f):r},f.size=function(x){if(!arguments.length)return[n,i];var k=+x[0],T=+x[1];if(!(k>=0&&T>=0))throw new Error("invalid size");return n=k,i=T,b()},f.cellSize=function(x){if(!arguments.length)return 1<<s;if(!((x=+x)>=1))throw new Error("invalid cell size");return s=Math.floor(Math.log(x)/Math.LN2),b()},f.thresholds=function(x){return arguments.length?(h=typeof x=="function"?x:Array.isArray(x)?Ia(Sv.call(x)):Ia(x),f):h},f.bandwidth=function(x){if(!arguments.length)return Math.sqrt(a*(a+1));if(!((x=+x)>=0))throw new Error("invalid bandwidth");return a=(Math.sqrt(4*x*x+1)-1)/2,b()},f}const Zi=11102230246251565e-32,Pr=134217729,TF=(3+8*Zi)*Zi;function Wd(t,e,r,n,i){let a,s,o,l,u=e[0],h=n[0],d=0,f=0;h>u==h>-u?(a=u,u=e[++d]):(a=h,h=n[++f]);let p=0;if(d<t&&f<r)for(h>u==h>-u?(s=u+a,o=a-(s-u),u=e[++d]):(s=h+a,o=a-(s-h),h=n[++f]),a=s,o!==0&&(i[p++]=o);d<t&&f<r;)h>u==h>-u?(s=a+u,l=s-a,o=a-(s-l)+(u-l),u=e[++d]):(s=a+h,l=s-a,o=a-(s-l)+(h-l),h=n[++f]),a=s,o!==0&&(i[p++]=o);for(;d<t;)s=a+u,l=s-a,o=a-(s-l)+(u-l),u=e[++d],a=s,o!==0&&(i[p++]=o);for(;f<r;)s=a+h,l=s-a,o=a-(s-l)+(h-l),h=n[++f],a=s,o!==0&&(i[p++]=o);return(a!==0||p===0)&&(i[p++]=a),p}function EF(t,e){let r=e[0];for(let n=1;n<t;n++)r+=e[n];return r}function Yl(t){return new Float64Array(t)}const CF=(3+16*Zi)*Zi,SF=(2+12*Zi)*Zi,AF=(9+64*Zi)*Zi*Zi,ko=Yl(4),Av=Yl(8),Mv=Yl(12),Lv=Yl(16),Xr=Yl(4);function MF(t,e,r,n,i,a,s){let o,l,u,h,d,f,p,m,_,y,b,x,k,T,C,M,S,R;const A=t-i,L=r-i,v=e-a,B=n-a;T=A*B,f=Pr*A,p=f-(f-A),m=A-p,f=Pr*B,_=f-(f-B),y=B-_,C=m*y-(T-p*_-m*_-p*y),M=v*L,f=Pr*v,p=f-(f-v),m=v-p,f=Pr*L,_=f-(f-L),y=L-_,S=m*y-(M-p*_-m*_-p*y),b=C-S,d=C-b,ko[0]=C-(b+d)+(d-S),x=T+b,d=x-T,k=T-(x-d)+(b-d),b=k-M,d=k-b,ko[1]=k-(b+d)+(d-M),R=x+b,d=R-x,ko[2]=x-(R-d)+(b-d),ko[3]=R;let w=EF(4,ko),D=SF*s;if(w>=D||-w>=D||(d=t-A,o=t-(A+d)+(d-i),d=r-L,u=r-(L+d)+(d-i),d=e-v,l=e-(v+d)+(d-a),d=n-B,h=n-(B+d)+(d-a),o===0&&l===0&&u===0&&h===0)||(D=AF*s+TF*Math.abs(w),w+=A*h+B*o-(v*u+L*l),w>=D||-w>=D))return w;T=o*B,f=Pr*o,p=f-(f-o),m=o-p,f=Pr*B,_=f-(f-B),y=B-_,C=m*y-(T-p*_-m*_-p*y),M=l*L,f=Pr*l,p=f-(f-l),m=l-p,f=Pr*L,_=f-(f-L),y=L-_,S=m*y-(M-p*_-m*_-p*y),b=C-S,d=C-b,Xr[0]=C-(b+d)+(d-S),x=T+b,d=x-T,k=T-(x-d)+(b-d),b=k-M,d=k-b,Xr[1]=k-(b+d)+(d-M),R=x+b,d=R-x,Xr[2]=x-(R-d)+(b-d),Xr[3]=R;const N=Wd(4,ko,4,Xr,Av);T=A*h,f=Pr*A,p=f-(f-A),m=A-p,f=Pr*h,_=f-(f-h),y=h-_,C=m*y-(T-p*_-m*_-p*y),M=v*u,f=Pr*v,p=f-(f-v),m=v-p,f=Pr*u,_=f-(f-u),y=u-_,S=m*y-(M-p*_-m*_-p*y),b=C-S,d=C-b,Xr[0]=C-(b+d)+(d-S),x=T+b,d=x-T,k=T-(x-d)+(b-d),b=k-M,d=k-b,Xr[1]=k-(b+d)+(d-M),R=x+b,d=R-x,Xr[2]=x-(R-d)+(b-d),Xr[3]=R;const z=Wd(N,Av,4,Xr,Mv);T=o*h,f=Pr*o,p=f-(f-o),m=o-p,f=Pr*h,_=f-(f-h),y=h-_,C=m*y-(T-p*_-m*_-p*y),M=l*u,f=Pr*l,p=f-(f-l),m=l-p,f=Pr*u,_=f-(f-u),y=u-_,S=m*y-(M-p*_-m*_-p*y),b=C-S,d=C-b,Xr[0]=C-(b+d)+(d-S),x=T+b,d=x-T,k=T-(x-d)+(b-d),b=k-M,d=k-b,Xr[1]=k-(b+d)+(d-M),R=x+b,d=R-x,Xr[2]=x-(R-d)+(b-d),Xr[3]=R;const X=Wd(z,Mv,4,Xr,Lv);return Lv[X-1]}function oh(t,e,r,n,i,a){const s=(e-a)*(r-i),o=(t-i)*(n-a),l=s-o;if(s===0||o===0||s>0!=o>0)return l;const u=Math.abs(s+o);return Math.abs(l)>=CF*u?l:-MF(t,e,r,n,i,a,u)}const Rv=Math.pow(2,-52),lh=new Uint32Array(512);class ch{static from(e,r=BF,n=DF){const i=e.length,a=new Float64Array(i*2);for(let s=0;s<i;s++){const o=e[s];a[2*s]=r(o),a[2*s+1]=n(o)}return new ch(a)}constructor(e){const r=e.length>>1;if(r>0&&typeof e[0]!="number")throw new Error("Expected coords to contain numbers.");this.coords=e;const n=Math.max(2*r-5,0);this._triangles=new Uint32Array(n*3),this._halfedges=new Int32Array(n*3),this._hashSize=Math.ceil(Math.sqrt(r)),this._hullPrev=new Uint32Array(r),this._hullNext=new Uint32Array(r),this._hullTri=new Uint32Array(r),this._hullHash=new Int32Array(this._hashSize).fill(-1),this._ids=new Uint32Array(r),this._dists=new Float64Array(r),this.update()}update(){const{coords:e,_hullPrev:r,_hullNext:n,_hullTri:i,_hullHash:a}=this,s=e.length>>1;let o=1/0,l=1/0,u=-1/0,h=-1/0;for(let L=0;L<s;L++){const v=e[2*L],B=e[2*L+1];v<o&&(o=v),B<l&&(l=B),v>u&&(u=v),B>h&&(h=B),this._ids[L]=L}const d=(o+u)/2,f=(l+h)/2;let p=1/0,m,_,y;for(let L=0;L<s;L++){const v=Hd(d,f,e[2*L],e[2*L+1]);v<p&&(m=L,p=v)}const b=e[2*m],x=e[2*m+1];p=1/0;for(let L=0;L<s;L++){if(L===m)continue;const v=Hd(b,x,e[2*L],e[2*L+1]);v<p&&v>0&&(_=L,p=v)}let k=e[2*_],T=e[2*_+1],C=1/0;for(let L=0;L<s;L++){if(L===m||L===_)continue;const v=IF(b,x,k,T,e[2*L],e[2*L+1]);v<C&&(y=L,C=v)}let M=e[2*y],S=e[2*y+1];if(C===1/0){for(let B=0;B<s;B++)this._dists[B]=e[2*B]-e[0]||e[2*B+1]-e[1];wo(this._ids,this._dists,0,s-1);const L=new Uint32Array(s);let v=0;for(let B=0,w=-1/0;B<s;B++){const D=this._ids[B];this._dists[D]>w&&(L[v++]=D,w=this._dists[D])}this.hull=L.subarray(0,v),this.triangles=new Uint32Array(0),this.halfedges=new Uint32Array(0);return}if(oh(b,x,k,T,M,S)<0){const L=_,v=k,B=T;_=y,k=M,T=S,y=L,M=v,S=B}const R=NF(b,x,k,T,M,S);this._cx=R.x,this._cy=R.y;for(let L=0;L<s;L++)this._dists[L]=Hd(e[2*L],e[2*L+1],R.x,R.y);wo(this._ids,this._dists,0,s-1),this._hullStart=m;let A=3;n[m]=r[y]=_,n[_]=r[m]=y,n[y]=r[_]=m,i[m]=0,i[_]=1,i[y]=2,a.fill(-1),a[this._hashKey(b,x)]=m,a[this._hashKey(k,T)]=_,a[this._hashKey(M,S)]=y,this.trianglesLen=0,this._addTriangle(m,_,y,-1,-1,-1);for(let L=0,v,B;L<this._ids.length;L++){const w=this._ids[L],D=e[2*w],N=e[2*w+1];if(L>0&&Math.abs(D-v)<=Rv&&Math.abs(N-B)<=Rv||(v=D,B=N,w===m||w===_||w===y))continue;let z=0;for(let $=0,lt=this._hashKey(D,N);$<this._hashSize&&(z=a[(lt+$)%this._hashSize],!(z!==-1&&z!==n[z]));$++);z=r[z];let X=z,ct;for(;ct=n[X],oh(D,N,e[2*X],e[2*X+1],e[2*ct],e[2*ct+1])>=0;)if(X=ct,X===z){X=-1;break}if(X===-1)continue;let J=this._addTriangle(X,w,n[X],-1,-1,i[X]);i[w]=this._legalize(J+2),i[X]=J,A++;let Y=n[X];for(;ct=n[Y],oh(D,N,e[2*Y],e[2*Y+1],e[2*ct],e[2*ct+1])<0;)J=this._addTriangle(Y,w,ct,i[w],-1,i[Y]),i[w]=this._legalize(J+2),n[Y]=Y,A--,Y=ct;if(X===z)for(;ct=r[X],oh(D,N,e[2*ct],e[2*ct+1],e[2*X],e[2*X+1])<0;)J=this._addTriangle(ct,w,X,-1,i[X],i[ct]),this._legalize(J+2),i[ct]=J,n[X]=X,A--,X=ct;this._hullStart=r[w]=X,n[X]=r[Y]=w,n[w]=Y,a[this._hashKey(D,N)]=w,a[this._hashKey(e[2*X],e[2*X+1])]=X}this.hull=new Uint32Array(A);for(let L=0,v=this._hullStart;L<A;L++)this.hull[L]=v,v=n[v];this.triangles=this._triangles.subarray(0,this.trianglesLen),this.halfedges=this._halfedges.subarray(0,this.trianglesLen)}_hashKey(e,r){return Math.floor(LF(e-this._cx,r-this._cy)*this._hashSize)%this._hashSize}_legalize(e){const{_triangles:r,_halfedges:n,coords:i}=this;let a=0,s=0;for(;;){const o=n[e],l=e-e%3;if(s=l+(e+2)%3,o===-1){if(a===0)break;e=lh[--a];continue}const u=o-o%3,h=l+(e+1)%3,d=u+(o+2)%3,f=r[s],p=r[e],m=r[h],_=r[d];if(RF(i[2*f],i[2*f+1],i[2*p],i[2*p+1],i[2*m],i[2*m+1],i[2*_],i[2*_+1])){r[e]=_,r[o]=f;const b=n[d];if(b===-1){let k=this._hullStart;do{if(this._hullTri[k]===d){this._hullTri[k]=e;break}k=this._hullPrev[k]}while(k!==this._hullStart)}this._link(e,b),this._link(o,n[s]),this._link(s,d);const x=u+(o+1)%3;a<lh.length&&(lh[a++]=x)}else{if(a===0)break;e=lh[--a]}}return s}_link(e,r){this._halfedges[e]=r,r!==-1&&(this._halfedges[r]=e)}_addTriangle(e,r,n,i,a,s){const o=this.trianglesLen;return this._triangles[o]=e,this._triangles[o+1]=r,this._triangles[o+2]=n,this._link(o,i),this._link(o+1,a),this._link(o+2,s),this.trianglesLen+=3,o}}function LF(t,e){const r=t/(Math.abs(t)+Math.abs(e));return(e>0?3-r:1+r)/4}function Hd(t,e,r,n){const i=t-r,a=e-n;return i*i+a*a}function RF(t,e,r,n,i,a,s,o){const l=t-s,u=e-o,h=r-s,d=n-o,f=i-s,p=a-o,m=l*l+u*u,_=h*h+d*d,y=f*f+p*p;return l*(d*y-_*p)-u*(h*y-_*f)+m*(h*p-d*f)<0}function IF(t,e,r,n,i,a){const s=r-t,o=n-e,l=i-t,u=a-e,h=s*s+o*o,d=l*l+u*u,f=.5/(s*u-o*l),p=(u*h-o*d)*f,m=(s*d-l*h)*f;return p*p+m*m}function NF(t,e,r,n,i,a){const s=r-t,o=n-e,l=i-t,u=a-e,h=s*s+o*o,d=l*l+u*u,f=.5/(s*u-o*l),p=t+(u*h-o*d)*f,m=e+(s*d-l*h)*f;return{x:p,y:m}}function wo(t,e,r,n){if(n-r<=20)for(let i=r+1;i<=n;i++){const a=t[i],s=e[a];let o=i-1;for(;o>=r&&e[t[o]]>s;)t[o+1]=t[o--];t[o+1]=a}else{const i=r+n>>1;let a=r+1,s=n;Ul(t,i,a),e[t[r]]>e[t[n]]&&Ul(t,r,n),e[t[a]]>e[t[n]]&&Ul(t,a,n),e[t[r]]>e[t[a]]&&Ul(t,r,a);const o=t[a],l=e[o];for(;;){do a++;while(e[t[a]]<l);do s--;while(e[t[s]]>l);if(s<a)break;Ul(t,a,s)}t[r+1]=t[s],t[s]=o,n-a+1>=s-r?(wo(t,e,a,n),wo(t,e,r,s-1)):(wo(t,e,r,s-1),wo(t,e,a,n))}}function Ul(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function BF(t){return t[0]}function DF(t){return t[1]}const Iv=1e-6;class ws{constructor(){this._x0=this._y0=this._x1=this._y1=null,this._=""}moveTo(e,r){this._+=`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")}lineTo(e,r){this._+=`L${this._x1=+e},${this._y1=+r}`}arc(e,r,n){e=+e,r=+r,n=+n;const i=e+n,a=r;if(n<0)throw new Error("negative radius");this._x1===null?this._+=`M${i},${a}`:(Math.abs(this._x1-i)>Iv||Math.abs(this._y1-a)>Iv)&&(this._+="L"+i+","+a),n&&(this._+=`A${n},${n},0,1,1,${e-n},${r}A${n},${n},0,1,1,${this._x1=i},${this._y1=a}`)}rect(e,r,n,i){this._+=`M${this._x0=this._x1=+e},${this._y0=this._y1=+r}h${+n}v${+i}h${-n}Z`}value(){return this._||null}}class Gd{constructor(){this._=[]}moveTo(e,r){this._.push([e,r])}closePath(){this._.push(this._[0].slice())}lineTo(e,r){this._.push([e,r])}value(){return this._.length?this._:null}}class Nv{constructor(e,[r,n,i,a]=[0,0,960,500]){if(!((i=+i)>=(r=+r))||!((a=+a)>=(n=+n)))throw new Error("invalid bounds");this.delaunay=e,this._circumcenters=new Float64Array(e.points.length*2),this.vectors=new Float64Array(e.points.length*2),this.xmax=i,this.xmin=r,this.ymax=a,this.ymin=n,this._init()}update(){return this.delaunay.update(),this._init(),this}_init(){const{delaunay:{points:e,hull:r,triangles:n},vectors:i}=this,a=this.circumcenters=this._circumcenters.subarray(0,n.length/3*2);for(let p=0,m=0,_=n.length,y,b;p<_;p+=3,m+=2){const x=n[p]*2,k=n[p+1]*2,T=n[p+2]*2,C=e[x],M=e[x+1],S=e[k],R=e[k+1],A=e[T],L=e[T+1],v=S-C,B=R-M,w=A-C,D=L-M,N=(v*D-B*w)*2;if(Math.abs(N)<1e-9){let z=1e9;const X=n[0]*2;z*=Math.sign((e[X]-C)*D-(e[X+1]-M)*w),y=(C+A)/2-z*D,b=(M+L)/2+z*w}else{const z=1/N,X=v*v+B*B,ct=w*w+D*D;y=C+(D*X-B*ct)*z,b=M+(v*ct-w*X)*z}a[m]=y,a[m+1]=b}let s=r[r.length-1],o,l=s*4,u,h=e[2*s],d,f=e[2*s+1];i.fill(0);for(let p=0;p<r.length;++p)s=r[p],o=l,u=h,d=f,l=s*4,h=e[2*s],f=e[2*s+1],i[o+2]=i[l]=d-f,i[o+3]=i[l+1]=h-u}render(e){const r=e==null?e=new ws:void 0,{delaunay:{halfedges:n,inedges:i,hull:a},circumcenters:s,vectors:o}=this;if(a.length<=1)return null;for(let h=0,d=n.length;h<d;++h){const f=n[h];if(f<h)continue;const p=Math.floor(h/3)*2,m=Math.floor(f/3)*2,_=s[p],y=s[p+1],b=s[m],x=s[m+1];this._renderSegment(_,y,b,x,e)}let l,u=a[a.length-1];for(let h=0;h<a.length;++h){l=u,u=a[h];const d=Math.floor(i[u]/3)*2,f=s[d],p=s[d+1],m=l*4,_=this._project(f,p,o[m+2],o[m+3]);_&&this._renderSegment(f,p,_[0],_[1],e)}return r&&r.value()}renderBounds(e){const r=e==null?e=new ws:void 0;return e.rect(this.xmin,this.ymin,this.xmax-this.xmin,this.ymax-this.ymin),r&&r.value()}renderCell(e,r){const n=r==null?r=new ws:void 0,i=this._clip(e);if(i===null||!i.length)return;r.moveTo(i[0],i[1]);let a=i.length;for(;i[0]===i[a-2]&&i[1]===i[a-1]&&a>1;)a-=2;for(let s=2;s<a;s+=2)(i[s]!==i[s-2]||i[s+1]!==i[s-1])&&r.lineTo(i[s],i[s+1]);return r.closePath(),n&&n.value()}*cellPolygons(){const{delaunay:{points:e}}=this;for(let r=0,n=e.length/2;r<n;++r){const i=this.cellPolygon(r);i&&(i.index=r,yield i)}}cellPolygon(e){const r=new Gd;return this.renderCell(e,r),r.value()}_renderSegment(e,r,n,i,a){let s;const o=this._regioncode(e,r),l=this._regioncode(n,i);o===0&&l===0?(a.moveTo(e,r),a.lineTo(n,i)):(s=this._clipSegment(e,r,n,i,o,l))&&(a.moveTo(s[0],s[1]),a.lineTo(s[2],s[3]))}contains(e,r,n){return r=+r,r!==r||(n=+n,n!==n)?!1:this.delaunay._step(e,r,n)===e}*neighbors(e){const r=this._clip(e);if(r)for(const n of this.delaunay.neighbors(e)){const i=this._clip(n);if(i){t:for(let a=0,s=r.length;a<s;a+=2)for(let o=0,l=i.length;o<l;o+=2)if(r[a]==i[o]&&r[a+1]==i[o+1]&&r[(a+2)%s]==i[(o+l-2)%l]&&r[(a+3)%s]==i[(o+l-1)%l]){yield n;break t}}}}_cell(e){const{circumcenters:r,delaunay:{inedges:n,halfedges:i,triangles:a}}=this,s=n[e];if(s===-1)return null;const o=[];let l=s;do{const u=Math.floor(l/3);if(o.push(r[u*2],r[u*2+1]),l=l%3===2?l-2:l+1,a[l]!==e)break;l=i[l]}while(l!==s&&l!==-1);return o}_clip(e){if(e===0&&this.delaunay.hull.length===1)return[this.xmax,this.ymin,this.xmax,this.ymax,this.xmin,this.ymax,this.xmin,this.ymin];const r=this._cell(e);if(r===null)return null;const{vectors:n}=this,i=e*4;return n[i]||n[i+1]?this._clipInfinite(e,r,n[i],n[i+1],n[i+2],n[i+3]):this._clipFinite(e,r)}_clipFinite(e,r){const n=r.length;let i=null,a,s,o=r[n-2],l=r[n-1],u,h=this._regioncode(o,l),d,f=0;for(let p=0;p<n;p+=2)if(a=o,s=l,o=r[p],l=r[p+1],u=h,h=this._regioncode(o,l),u===0&&h===0)d=f,f=0,i?i.push(o,l):i=[o,l];else{let m,_,y,b,x;if(u===0){if((m=this._clipSegment(a,s,o,l,u,h))===null)continue;[_,y,b,x]=m}else{if((m=this._clipSegment(o,l,a,s,h,u))===null)continue;[b,x,_,y]=m,d=f,f=this._edgecode(_,y),d&&f&&this._edge(e,d,f,i,i.length),i?i.push(_,y):i=[_,y]}d=f,f=this._edgecode(b,x),d&&f&&this._edge(e,d,f,i,i.length),i?i.push(b,x):i=[b,x]}if(i)d=f,f=this._edgecode(i[0],i[1]),d&&f&&this._edge(e,d,f,i,i.length);else if(this.contains(e,(this.xmin+this.xmax)/2,(this.ymin+this.ymax)/2))return[this.xmax,this.ymin,this.xmax,this.ymax,this.xmin,this.ymax,this.xmin,this.ymin];return i}_clipSegment(e,r,n,i,a,s){for(;;){if(a===0&&s===0)return[e,r,n,i];if(a&s)return null;let o,l,u=a||s;u&8?(o=e+(n-e)*(this.ymax-r)/(i-r),l=this.ymax):u&4?(o=e+(n-e)*(this.ymin-r)/(i-r),l=this.ymin):u&2?(l=r+(i-r)*(this.xmax-e)/(n-e),o=this.xmax):(l=r+(i-r)*(this.xmin-e)/(n-e),o=this.xmin),a?(e=o,r=l,a=this._regioncode(e,r)):(n=o,i=l,s=this._regioncode(n,i))}}_clipInfinite(e,r,n,i,a,s){let o=Array.from(r),l;if((l=this._project(o[0],o[1],n,i))&&o.unshift(l[0],l[1]),(l=this._project(o[o.length-2],o[o.length-1],a,s))&&o.push(l[0],l[1]),o=this._clipFinite(e,o))for(let u=0,h=o.length,d,f=this._edgecode(o[h-2],o[h-1]);u<h;u+=2)d=f,f=this._edgecode(o[u],o[u+1]),d&&f&&(u=this._edge(e,d,f,o,u),h=o.length);else this.contains(e,(this.xmin+this.xmax)/2,(this.ymin+this.ymax)/2)&&(o=[this.xmin,this.ymin,this.xmax,this.ymin,this.xmax,this.ymax,this.xmin,this.ymax]);return o}_edge(e,r,n,i,a){for(;r!==n;){let s,o;switch(r){case 5:r=4;continue;case 4:r=6,s=this.xmax,o=this.ymin;break;case 6:r=2;continue;case 2:r=10,s=this.xmax,o=this.ymax;break;case 10:r=8;continue;case 8:r=9,s=this.xmin,o=this.ymax;break;case 9:r=1;continue;case 1:r=5,s=this.xmin,o=this.ymin;break}(i[a]!==s||i[a+1]!==o)&&this.contains(e,s,o)&&(i.splice(a,0,s,o),a+=2)}if(i.length>4)for(let s=0;s<i.length;s+=2){const o=(s+2)%i.length,l=(s+4)%i.length;(i[s]===i[o]&&i[o]===i[l]||i[s+1]===i[o+1]&&i[o+1]===i[l+1])&&(i.splice(o,2),s-=2)}return a}_project(e,r,n,i){let a=1/0,s,o,l;if(i<0){if(r<=this.ymin)return null;(s=(this.ymin-r)/i)<a&&(l=this.ymin,o=e+(a=s)*n)}else if(i>0){if(r>=this.ymax)return null;(s=(this.ymax-r)/i)<a&&(l=this.ymax,o=e+(a=s)*n)}if(n>0){if(e>=this.xmax)return null;(s=(this.xmax-e)/n)<a&&(o=this.xmax,l=r+(a=s)*i)}else if(n<0){if(e<=this.xmin)return null;(s=(this.xmin-e)/n)<a&&(o=this.xmin,l=r+(a=s)*i)}return[o,l]}_edgecode(e,r){return(e===this.xmin?1:e===this.xmax?2:0)|(r===this.ymin?4:r===this.ymax?8:0)}_regioncode(e,r){return(e<this.xmin?1:e>this.xmax?2:0)|(r<this.ymin?4:r>this.ymax?8:0)}}const OF=2*Math.PI,To=Math.pow;function FF(t){return t[0]}function PF(t){return t[1]}function qF(t){const{triangles:e,coords:r}=t;for(let n=0;n<e.length;n+=3){const i=2*e[n],a=2*e[n+1],s=2*e[n+2];if((r[s]-r[i])*(r[a+1]-r[i+1])-(r[a]-r[i])*(r[s+1]-r[i+1])>1e-10)return!1}return!0}function VF(t,e,r){return[t+Math.sin(t+e)*r,e+Math.cos(t-e)*r]}class jd{static from(e,r=FF,n=PF,i){return new jd("length"in e?zF(e,r,n,i):Float64Array.from(YF(e,r,n,i)))}constructor(e){this._delaunator=new ch(e),this.inedges=new Int32Array(e.length/2),this._hullIndex=new Int32Array(e.length/2),this.points=this._delaunator.coords,this._init()}update(){return this._delaunator.update(),this._init(),this}_init(){const e=this._delaunator,r=this.points;if(e.hull&&e.hull.length>2&&qF(e)){this.collinear=Int32Array.from({length:r.length/2},(f,p)=>p).sort((f,p)=>r[2*f]-r[2*p]||r[2*f+1]-r[2*p+1]);const l=this.collinear[0],u=this.collinear[this.collinear.length-1],h=[r[2*l],r[2*l+1],r[2*u],r[2*u+1]],d=1e-8*Math.hypot(h[3]-h[1],h[2]-h[0]);for(let f=0,p=r.length/2;f<p;++f){const m=VF(r[2*f],r[2*f+1],d);r[2*f]=m[0],r[2*f+1]=m[1]}this._delaunator=new ch(r)}else delete this.collinear;const n=this.halfedges=this._delaunator.halfedges,i=this.hull=this._delaunator.hull,a=this.triangles=this._delaunator.triangles,s=this.inedges.fill(-1),o=this._hullIndex.fill(-1);for(let l=0,u=n.length;l<u;++l){const h=a[l%3===2?l-2:l+1];(n[l]===-1||s[h]===-1)&&(s[h]=l)}for(let l=0,u=i.length;l<u;++l)o[i[l]]=l;i.length<=2&&i.length>0&&(this.triangles=new Int32Array(3).fill(-1),this.halfedges=new Int32Array(3).fill(-1),this.triangles[0]=i[0],s[i[0]]=1,i.length===2&&(s[i[1]]=0,this.triangles[1]=i[1],this.triangles[2]=i[1]))}voronoi(e){return new Nv(this,e)}*neighbors(e){const{inedges:r,hull:n,_hullIndex:i,halfedges:a,triangles:s,collinear:o}=this;if(o){const d=o.indexOf(e);d>0&&(yield o[d-1]),d<o.length-1&&(yield o[d+1]);return}const l=r[e];if(l===-1)return;let u=l,h=-1;do{if(yield h=s[u],u=u%3===2?u-2:u+1,s[u]!==e)return;if(u=a[u],u===-1){const d=n[(i[e]+1)%n.length];d!==h&&(yield d);return}}while(u!==l)}find(e,r,n=0){if(e=+e,e!==e||(r=+r,r!==r))return-1;const i=n;let a;for(;(a=this._step(n,e,r))>=0&&a!==n&&a!==i;)n=a;return a}_step(e,r,n){const{inedges:i,hull:a,_hullIndex:s,halfedges:o,triangles:l,points:u}=this;if(i[e]===-1||!u.length)return(e+1)%(u.length>>1);let h=e,d=To(r-u[e*2],2)+To(n-u[e*2+1],2);const f=i[e];let p=f;do{let m=l[p];const _=To(r-u[m*2],2)+To(n-u[m*2+1],2);if(_<d&&(d=_,h=m),p=p%3===2?p-2:p+1,l[p]!==e)break;if(p=o[p],p===-1){if(p=a[(s[e]+1)%a.length],p!==m&&To(r-u[p*2],2)+To(n-u[p*2+1],2)<d)return p;break}}while(p!==f);return h}render(e){const r=e==null?e=new ws:void 0,{points:n,halfedges:i,triangles:a}=this;for(let s=0,o=i.length;s<o;++s){const l=i[s];if(l<s)continue;const u=a[s]*2,h=a[l]*2;e.moveTo(n[u],n[u+1]),e.lineTo(n[h],n[h+1])}return this.renderHull(e),r&&r.value()}renderPoints(e,r){r===void 0&&(!e||typeof e.moveTo!="function")&&(r=e,e=null),r=r==null?2:+r;const n=e==null?e=new ws:void 0,{points:i}=this;for(let a=0,s=i.length;a<s;a+=2){const o=i[a],l=i[a+1];e.moveTo(o+r,l),e.arc(o,l,r,0,OF)}return n&&n.value()}renderHull(e){const r=e==null?e=new ws:void 0,{hull:n,points:i}=this,a=n[0]*2,s=n.length;e.moveTo(i[a],i[a+1]);for(let o=1;o<s;++o){const l=2*n[o];e.lineTo(i[l],i[l+1])}return e.closePath(),r&&r.value()}hullPolygon(){const e=new Gd;return this.renderHull(e),e.value()}renderTriangle(e,r){const n=r==null?r=new ws:void 0,{points:i,triangles:a}=this,s=a[e*=3]*2,o=a[e+1]*2,l=a[e+2]*2;return r.moveTo(i[s],i[s+1]),r.lineTo(i[o],i[o+1]),r.lineTo(i[l],i[l+1]),r.closePath(),n&&n.value()}*trianglePolygons(){const{triangles:e}=this;for(let r=0,n=e.length/3;r<n;++r)yield this.trianglePolygon(r)}trianglePolygon(e){const r=new Gd;return this.renderTriangle(e,r),r.value()}}function zF(t,e,r,n){const i=t.length,a=new Float64Array(i*2);for(let s=0;s<i;++s){const o=t[s];a[s*2]=e.call(n,o,s,t),a[s*2+1]=r.call(n,o,s,t)}return a}function*YF(t,e,r,n){let i=0;for(const a of t)yield e.call(n,a,i,t),yield r.call(n,a,i,t),++i}var Bv={},$d={},Xd=34,Wl=10,Kd=13;function Dv(t){return new Function("d","return {"+t.map(function(e,r){return JSON.stringify(e)+": d["+r+'] || ""'}).join(",")+"}")}function UF(t,e){var r=Dv(t);return function(n,i){return e(r(n),i,t)}}function Ov(t){var e=Object.create(null),r=[];return t.forEach(function(n){for(var i in n)i in e||r.push(e[i]=i)}),r}function dn(t,e){var r=t+"",n=r.length;return n<e?new Array(e-n+1).join(0)+r:r}function WF(t){return t<0?"-"+dn(-t,6):t>9999?"+"+dn(t,6):dn(t,4)}function HF(t){var e=t.getUTCHours(),r=t.getUTCMinutes(),n=t.getUTCSeconds(),i=t.getUTCMilliseconds();return isNaN(t)?"Invalid Date":WF(t.getUTCFullYear())+"-"+dn(t.getUTCMonth()+1,2)+"-"+dn(t.getUTCDate(),2)+(i?"T"+dn(e,2)+":"+dn(r,2)+":"+dn(n,2)+"."+dn(i,3)+"Z":n?"T"+dn(e,2)+":"+dn(r,2)+":"+dn(n,2)+"Z":r||e?"T"+dn(e,2)+":"+dn(r,2)+"Z":"")}function uh(t){var e=new RegExp('["'+t+`
+\r]`),r=t.charCodeAt(0);function n(d,f){var p,m,_=i(d,function(y,b){if(p)return p(y,b-1);m=y,p=f?UF(y,f):Dv(y)});return _.columns=m||[],_}function i(d,f){var p=[],m=d.length,_=0,y=0,b,x=m<=0,k=!1;d.charCodeAt(m-1)===Wl&&--m,d.charCodeAt(m-1)===Kd&&--m;function T(){if(x)return $d;if(k)return k=!1,Bv;var M,S=_,R;if(d.charCodeAt(S)===Xd){for(;_++<m&&d.charCodeAt(_)!==Xd||d.charCodeAt(++_)===Xd;);return(M=_)>=m?x=!0:(R=d.charCodeAt(_++))===Wl?k=!0:R===Kd&&(k=!0,d.charCodeAt(_)===Wl&&++_),d.slice(S+1,M-1).replace(/""/g,'"')}for(;_<m;){if((R=d.charCodeAt(M=_++))===Wl)k=!0;else if(R===Kd)k=!0,d.charCodeAt(_)===Wl&&++_;else if(R!==r)continue;return d.slice(S,M)}return x=!0,d.slice(S,m)}for(;(b=T())!==$d;){for(var C=[];b!==Bv&&b!==$d;)C.push(b),b=T();f&&(C=f(C,y++))==null||p.push(C)}return p}function a(d,f){return d.map(function(p){return f.map(function(m){return h(p[m])}).join(t)})}function s(d,f){return f==null&&(f=Ov(d)),[f.map(h).join(t)].concat(a(d,f)).join(`
+`)}function o(d,f){return f==null&&(f=Ov(d)),a(d,f).join(`
+`)}function l(d){return d.map(u).join(`
+`)}function u(d){return d.map(h).join(t)}function h(d){return d==null?"":d instanceof Date?HF(d):e.test(d+="")?'"'+d.replace(/"/g,'""')+'"':d}return{parse:n,parseRows:i,format:s,formatBody:o,formatRows:l,formatRow:u,formatValue:h}}var Ts=uh(","),Fv=Ts.parse,GF=Ts.parseRows,jF=Ts.format,$F=Ts.formatBody,XF=Ts.formatRows,KF=Ts.formatRow,ZF=Ts.formatValue,Es=uh("	"),Pv=Es.parse,QF=Es.parseRows,JF=Es.format,tP=Es.formatBody,eP=Es.formatRows,rP=Es.formatRow,nP=Es.formatValue;function iP(t){for(var e in t){var r=t[e].trim(),n,i;if(!r)r=null;else if(r==="true")r=!0;else if(r==="false")r=!1;else if(r==="NaN")r=NaN;else if(!isNaN(n=+r))r=n;else if(i=r.match(/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/))aP&&!!i[4]&&!i[7]&&(r=r.replace(/-/g,"/").replace(/T/," ")),r=new Date(r);else continue;t[e]=r}return t}const aP=new Date("2019-01-01T00:00").getHours()||new Date("2019-07-01T00:00").getHours();function sP(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.blob()}function oP(t,e){return fetch(t,e).then(sP)}function lP(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.arrayBuffer()}function cP(t,e){return fetch(t,e).then(lP)}function uP(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function hh(t,e){return fetch(t,e).then(uP)}function qv(t){return function(e,r,n){return arguments.length===2&&typeof r=="function"&&(n=r,r=void 0),hh(e,r).then(function(i){return t(i,n)})}}function hP(t,e,r,n){arguments.length===3&&typeof r=="function"&&(n=r,r=void 0);var i=uh(t);return hh(e,r).then(function(a){return i.parse(a,n)})}var fP=qv(Fv),dP=qv(Pv);function pP(t,e){return new Promise(function(r,n){var i=new Image;for(var a in e)i[a]=e[a];i.onerror=n,i.onload=function(){r(i)},i.src=t})}function gP(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);if(!(t.status===204||t.status===205))return t.json()}function yP(t,e){return fetch(t,e).then(gP)}function Zd(t){return(e,r)=>hh(e,r).then(n=>new DOMParser().parseFromString(n,t))}const mP=Zd("application/xml");var bP=Zd("text/html"),_P=Zd("image/svg+xml");function vP(t,e){var r,n=1;t==null&&(t=0),e==null&&(e=0);function i(){var a,s=r.length,o,l=0,u=0;for(a=0;a<s;++a)o=r[a],l+=o.x,u+=o.y;for(l=(l/s-t)*n,u=(u/s-e)*n,a=0;a<s;++a)o=r[a],o.x-=l,o.y-=u}return i.initialize=function(a){r=a},i.x=function(a){return arguments.length?(t=+a,i):t},i.y=function(a){return arguments.length?(e=+a,i):e},i.strength=function(a){return arguments.length?(n=+a,i):n},i}function xP(t){const e=+this._x.call(null,t),r=+this._y.call(null,t);return Vv(this.cover(e,r),e,r,t)}function Vv(t,e,r,n){if(isNaN(e)||isNaN(r))return t;var i,a=t._root,s={data:n},o=t._x0,l=t._y0,u=t._x1,h=t._y1,d,f,p,m,_,y,b,x;if(!a)return t._root=s,t;for(;a.length;)if((_=e>=(d=(o+u)/2))?o=d:u=d,(y=r>=(f=(l+h)/2))?l=f:h=f,i=a,!(a=a[b=y<<1|_]))return i[b]=s,t;if(p=+t._x.call(null,a.data),m=+t._y.call(null,a.data),e===p&&r===m)return s.next=a,i?i[b]=s:t._root=s,t;do i=i?i[b]=new Array(4):t._root=new Array(4),(_=e>=(d=(o+u)/2))?o=d:u=d,(y=r>=(f=(l+h)/2))?l=f:h=f;while((b=y<<1|_)===(x=(m>=f)<<1|p>=d));return i[x]=a,i[b]=s,t}function kP(t){var e,r,n=t.length,i,a,s=new Array(n),o=new Array(n),l=1/0,u=1/0,h=-1/0,d=-1/0;for(r=0;r<n;++r)isNaN(i=+this._x.call(null,e=t[r]))||isNaN(a=+this._y.call(null,e))||(s[r]=i,o[r]=a,i<l&&(l=i),i>h&&(h=i),a<u&&(u=a),a>d&&(d=a));if(l>h||u>d)return this;for(this.cover(l,u).cover(h,d),r=0;r<n;++r)Vv(this,s[r],o[r],t[r]);return this}function wP(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var r=this._x0,n=this._y0,i=this._x1,a=this._y1;if(isNaN(r))i=(r=Math.floor(t))+1,a=(n=Math.floor(e))+1;else{for(var s=i-r||1,o=this._root,l,u;r>t||t>=i||n>e||e>=a;)switch(u=(e<n)<<1|t<r,l=new Array(4),l[u]=o,o=l,s*=2,u){case 0:i=r+s,a=n+s;break;case 1:r=i-s,a=n+s;break;case 2:i=r+s,n=a-s;break;case 3:r=i-s,n=a-s;break}this._root&&this._root.length&&(this._root=o)}return this._x0=r,this._y0=n,this._x1=i,this._y1=a,this}function TP(){var t=[];return this.visit(function(e){if(!e.length)do t.push(e.data);while(e=e.next)}),t}function EP(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]}function Kr(t,e,r,n,i){this.node=t,this.x0=e,this.y0=r,this.x1=n,this.y1=i}function CP(t,e,r){var n,i=this._x0,a=this._y0,s,o,l,u,h=this._x1,d=this._y1,f=[],p=this._root,m,_;for(p&&f.push(new Kr(p,i,a,h,d)),r==null?r=1/0:(i=t-r,a=e-r,h=t+r,d=e+r,r*=r);m=f.pop();)if(!(!(p=m.node)||(s=m.x0)>h||(o=m.y0)>d||(l=m.x1)<i||(u=m.y1)<a))if(p.length){var y=(s+l)/2,b=(o+u)/2;f.push(new Kr(p[3],y,b,l,u),new Kr(p[2],s,b,y,u),new Kr(p[1],y,o,l,b),new Kr(p[0],s,o,y,b)),(_=(e>=b)<<1|t>=y)&&(m=f[f.length-1],f[f.length-1]=f[f.length-1-_],f[f.length-1-_]=m)}else{var x=t-+this._x.call(null,p.data),k=e-+this._y.call(null,p.data),T=x*x+k*k;if(T<r){var C=Math.sqrt(r=T);i=t-C,a=e-C,h=t+C,d=e+C,n=p.data}}return n}function SP(t){if(isNaN(h=+this._x.call(null,t))||isNaN(d=+this._y.call(null,t)))return this;var e,r=this._root,n,i,a,s=this._x0,o=this._y0,l=this._x1,u=this._y1,h,d,f,p,m,_,y,b;if(!r)return this;if(r.length)for(;;){if((m=h>=(f=(s+l)/2))?s=f:l=f,(_=d>=(p=(o+u)/2))?o=p:u=p,e=r,!(r=r[y=_<<1|m]))return this;if(!r.length)break;(e[y+1&3]||e[y+2&3]||e[y+3&3])&&(n=e,b=y)}for(;r.data!==t;)if(i=r,!(r=r.next))return this;return(a=r.next)&&delete r.next,i?(a?i.next=a:delete i.next,this):e?(a?e[y]=a:delete e[y],(r=e[0]||e[1]||e[2]||e[3])&&r===(e[3]||e[2]||e[1]||e[0])&&!r.length&&(n?n[b]=r:this._root=r),this):(this._root=a,this)}function AP(t){for(var e=0,r=t.length;e<r;++e)this.remove(t[e]);return this}function MP(){return this._root}function LP(){var t=0;return this.visit(function(e){if(!e.length)do++t;while(e=e.next)}),t}function RP(t){var e=[],r,n=this._root,i,a,s,o,l;for(n&&e.push(new Kr(n,this._x0,this._y0,this._x1,this._y1));r=e.pop();)if(!t(n=r.node,a=r.x0,s=r.y0,o=r.x1,l=r.y1)&&n.length){var u=(a+o)/2,h=(s+l)/2;(i=n[3])&&e.push(new Kr(i,u,h,o,l)),(i=n[2])&&e.push(new Kr(i,a,h,u,l)),(i=n[1])&&e.push(new Kr(i,u,s,o,h)),(i=n[0])&&e.push(new Kr(i,a,s,u,h))}return this}function IP(t){var e=[],r=[],n;for(this._root&&e.push(new Kr(this._root,this._x0,this._y0,this._x1,this._y1));n=e.pop();){var i=n.node;if(i.length){var a,s=n.x0,o=n.y0,l=n.x1,u=n.y1,h=(s+l)/2,d=(o+u)/2;(a=i[0])&&e.push(new Kr(a,s,o,h,d)),(a=i[1])&&e.push(new Kr(a,h,o,l,d)),(a=i[2])&&e.push(new Kr(a,s,d,h,u)),(a=i[3])&&e.push(new Kr(a,h,d,l,u))}r.push(n)}for(;n=r.pop();)t(n.node,n.x0,n.y0,n.x1,n.y1);return this}function NP(t){return t[0]}function BP(t){return arguments.length?(this._x=t,this):this._x}function DP(t){return t[1]}function OP(t){return arguments.length?(this._y=t,this):this._y}function fh(t,e,r){var n=new Qd(e==null?NP:e,r==null?DP:r,NaN,NaN,NaN,NaN);return t==null?n:n.addAll(t)}function Qd(t,e,r,n,i,a){this._x=t,this._y=e,this._x0=r,this._y0=n,this._x1=i,this._y1=a,this._root=void 0}function zv(t){for(var e={data:t.data},r=e;t=t.next;)r=r.next={data:t.data};return e}var Zr=fh.prototype=Qd.prototype;Zr.copy=function(){var t=new Qd(this._x,this._y,this._x0,this._y0,this._x1,this._y1),e=this._root,r,n;if(!e)return t;if(!e.length)return t._root=zv(e),t;for(r=[{source:e,target:t._root=new Array(4)}];e=r.pop();)for(var i=0;i<4;++i)(n=e.source[i])&&(n.length?r.push({source:n,target:e.target[i]=new Array(4)}):e.target[i]=zv(n));return t},Zr.add=xP,Zr.addAll=kP,Zr.cover=wP,Zr.data=TP,Zr.extent=EP,Zr.find=CP,Zr.remove=SP,Zr.removeAll=AP,Zr.root=MP,Zr.size=LP,Zr.visit=RP,Zr.visitAfter=IP,Zr.x=BP,Zr.y=OP;function vr(t){return function(){return t}}function Na(t){return(t()-.5)*1e-6}function FP(t){return t.x+t.vx}function PP(t){return t.y+t.vy}function qP(t){var e,r,n,i=1,a=1;typeof t!="function"&&(t=vr(t==null?1:+t));function s(){for(var u,h=e.length,d,f,p,m,_,y,b=0;b<a;++b)for(d=fh(e,FP,PP).visitAfter(o),u=0;u<h;++u)f=e[u],_=r[f.index],y=_*_,p=f.x+f.vx,m=f.y+f.vy,d.visit(x);function x(k,T,C,M,S){var R=k.data,A=k.r,L=_+A;if(R){if(R.index>f.index){var v=p-R.x-R.vx,B=m-R.y-R.vy,w=v*v+B*B;w<L*L&&(v===0&&(v=Na(n),w+=v*v),B===0&&(B=Na(n),w+=B*B),w=(L-(w=Math.sqrt(w)))/w*i,f.vx+=(v*=w)*(L=(A*=A)/(y+A)),f.vy+=(B*=w)*L,R.vx-=v*(L=1-L),R.vy-=B*L)}return}return T>p+L||M<p-L||C>m+L||S<m-L}}function o(u){if(u.data)return u.r=r[u.data.index];for(var h=u.r=0;h<4;++h)u[h]&&u[h].r>u.r&&(u.r=u[h].r)}function l(){if(!!e){var u,h=e.length,d;for(r=new Array(h),u=0;u<h;++u)d=e[u],r[d.index]=+t(d,u,e)}}return s.initialize=function(u,h){e=u,n=h,l()},s.iterations=function(u){return arguments.length?(a=+u,s):a},s.strength=function(u){return arguments.length?(i=+u,s):i},s.radius=function(u){return arguments.length?(t=typeof u=="function"?u:vr(+u),l(),s):t},s}function VP(t){return t.index}function Yv(t,e){var r=t.get(e);if(!r)throw new Error("node not found: "+e);return r}function zP(t){var e=VP,r=d,n,i=vr(30),a,s,o,l,u,h=1;t==null&&(t=[]);function d(y){return 1/Math.min(o[y.source.index],o[y.target.index])}function f(y){for(var b=0,x=t.length;b<h;++b)for(var k=0,T,C,M,S,R,A,L;k<x;++k)T=t[k],C=T.source,M=T.target,S=M.x+M.vx-C.x-C.vx||Na(u),R=M.y+M.vy-C.y-C.vy||Na(u),A=Math.sqrt(S*S+R*R),A=(A-a[k])/A*y*n[k],S*=A,R*=A,M.vx-=S*(L=l[k]),M.vy-=R*L,C.vx+=S*(L=1-L),C.vy+=R*L}function p(){if(!!s){var y,b=s.length,x=t.length,k=new Map(s.map((C,M)=>[e(C,M,s),C])),T;for(y=0,o=new Array(b);y<x;++y)T=t[y],T.index=y,typeof T.source!="object"&&(T.source=Yv(k,T.source)),typeof T.target!="object"&&(T.target=Yv(k,T.target)),o[T.source.index]=(o[T.source.index]||0)+1,o[T.target.index]=(o[T.target.index]||0)+1;for(y=0,l=new Array(x);y<x;++y)T=t[y],l[y]=o[T.source.index]/(o[T.source.index]+o[T.target.index]);n=new Array(x),m(),a=new Array(x),_()}}function m(){if(!!s)for(var y=0,b=t.length;y<b;++y)n[y]=+r(t[y],y,t)}function _(){if(!!s)for(var y=0,b=t.length;y<b;++y)a[y]=+i(t[y],y,t)}return f.initialize=function(y,b){s=y,u=b,p()},f.links=function(y){return arguments.length?(t=y,p(),f):t},f.id=function(y){return arguments.length?(e=y,f):e},f.iterations=function(y){return arguments.length?(h=+y,f):h},f.strength=function(y){return arguments.length?(r=typeof y=="function"?y:vr(+y),m(),f):r},f.distance=function(y){return arguments.length?(i=typeof y=="function"?y:vr(+y),_(),f):i},f}const YP=1664525,UP=1013904223,Uv=4294967296;function WP(){let t=1;return()=>(t=(YP*t+UP)%Uv)/Uv}function HP(t){return t.x}function GP(t){return t.y}var jP=10,$P=Math.PI*(3-Math.sqrt(5));function XP(t){var e,r=1,n=.001,i=1-Math.pow(n,1/300),a=0,s=.6,o=new Map,l=Ju(d),u=fs("tick","end"),h=WP();t==null&&(t=[]);function d(){f(),u.call("tick",e),r<n&&(l.stop(),u.call("end",e))}function f(_){var y,b=t.length,x;_===void 0&&(_=1);for(var k=0;k<_;++k)for(r+=(a-r)*i,o.forEach(function(T){T(r)}),y=0;y<b;++y)x=t[y],x.fx==null?x.x+=x.vx*=s:(x.x=x.fx,x.vx=0),x.fy==null?x.y+=x.vy*=s:(x.y=x.fy,x.vy=0);return e}function p(){for(var _=0,y=t.length,b;_<y;++_){if(b=t[_],b.index=_,b.fx!=null&&(b.x=b.fx),b.fy!=null&&(b.y=b.fy),isNaN(b.x)||isNaN(b.y)){var x=jP*Math.sqrt(.5+_),k=_*$P;b.x=x*Math.cos(k),b.y=x*Math.sin(k)}(isNaN(b.vx)||isNaN(b.vy))&&(b.vx=b.vy=0)}}function m(_){return _.initialize&&_.initialize(t,h),_}return p(),e={tick:f,restart:function(){return l.restart(d),e},stop:function(){return l.stop(),e},nodes:function(_){return arguments.length?(t=_,p(),o.forEach(m),e):t},alpha:function(_){return arguments.length?(r=+_,e):r},alphaMin:function(_){return arguments.length?(n=+_,e):n},alphaDecay:function(_){return arguments.length?(i=+_,e):+i},alphaTarget:function(_){return arguments.length?(a=+_,e):a},velocityDecay:function(_){return arguments.length?(s=1-_,e):1-s},randomSource:function(_){return arguments.length?(h=_,o.forEach(m),e):h},force:function(_,y){return arguments.length>1?(y==null?o.delete(_):o.set(_,m(y)),e):o.get(_)},find:function(_,y,b){var x=0,k=t.length,T,C,M,S,R;for(b==null?b=1/0:b*=b,x=0;x<k;++x)S=t[x],T=_-S.x,C=y-S.y,M=T*T+C*C,M<b&&(R=S,b=M);return R},on:function(_,y){return arguments.length>1?(u.on(_,y),e):u.on(_)}}}function KP(){var t,e,r,n,i=vr(-30),a,s=1,o=1/0,l=.81;function u(p){var m,_=t.length,y=fh(t,HP,GP).visitAfter(d);for(n=p,m=0;m<_;++m)e=t[m],y.visit(f)}function h(){if(!!t){var p,m=t.length,_;for(a=new Array(m),p=0;p<m;++p)_=t[p],a[_.index]=+i(_,p,t)}}function d(p){var m=0,_,y,b=0,x,k,T;if(p.length){for(x=k=T=0;T<4;++T)(_=p[T])&&(y=Math.abs(_.value))&&(m+=_.value,b+=y,x+=y*_.x,k+=y*_.y);p.x=x/b,p.y=k/b}else{_=p,_.x=_.data.x,_.y=_.data.y;do m+=a[_.data.index];while(_=_.next)}p.value=m}function f(p,m,_,y){if(!p.value)return!0;var b=p.x-e.x,x=p.y-e.y,k=y-m,T=b*b+x*x;if(k*k/l<T)return T<o&&(b===0&&(b=Na(r),T+=b*b),x===0&&(x=Na(r),T+=x*x),T<s&&(T=Math.sqrt(s*T)),e.vx+=b*p.value*n/T,e.vy+=x*p.value*n/T),!0;if(p.length||T>=o)return;(p.data!==e||p.next)&&(b===0&&(b=Na(r),T+=b*b),x===0&&(x=Na(r),T+=x*x),T<s&&(T=Math.sqrt(s*T)));do p.data!==e&&(k=a[p.data.index]*n/T,e.vx+=b*k,e.vy+=x*k);while(p=p.next)}return u.initialize=function(p,m){t=p,r=m,h()},u.strength=function(p){return arguments.length?(i=typeof p=="function"?p:vr(+p),h(),u):i},u.distanceMin=function(p){return arguments.length?(s=p*p,u):Math.sqrt(s)},u.distanceMax=function(p){return arguments.length?(o=p*p,u):Math.sqrt(o)},u.theta=function(p){return arguments.length?(l=p*p,u):Math.sqrt(l)},u}function ZP(t,e,r){var n,i=vr(.1),a,s;typeof t!="function"&&(t=vr(+t)),e==null&&(e=0),r==null&&(r=0);function o(u){for(var h=0,d=n.length;h<d;++h){var f=n[h],p=f.x-e||1e-6,m=f.y-r||1e-6,_=Math.sqrt(p*p+m*m),y=(s[h]-_)*a[h]*u/_;f.vx+=p*y,f.vy+=m*y}}function l(){if(!!n){var u,h=n.length;for(a=new Array(h),s=new Array(h),u=0;u<h;++u)s[u]=+t(n[u],u,n),a[u]=isNaN(s[u])?0:+i(n[u],u,n)}}return o.initialize=function(u){n=u,l()},o.strength=function(u){return arguments.length?(i=typeof u=="function"?u:vr(+u),l(),o):i},o.radius=function(u){return arguments.length?(t=typeof u=="function"?u:vr(+u),l(),o):t},o.x=function(u){return arguments.length?(e=+u,o):e},o.y=function(u){return arguments.length?(r=+u,o):r},o}function QP(t){var e=vr(.1),r,n,i;typeof t!="function"&&(t=vr(t==null?0:+t));function a(o){for(var l=0,u=r.length,h;l<u;++l)h=r[l],h.vx+=(i[l]-h.x)*n[l]*o}function s(){if(!!r){var o,l=r.length;for(n=new Array(l),i=new Array(l),o=0;o<l;++o)n[o]=isNaN(i[o]=+t(r[o],o,r))?0:+e(r[o],o,r)}}return a.initialize=function(o){r=o,s()},a.strength=function(o){return arguments.length?(e=typeof o=="function"?o:vr(+o),s(),a):e},a.x=function(o){return arguments.length?(t=typeof o=="function"?o:vr(+o),s(),a):t},a}function JP(t){var e=vr(.1),r,n,i;typeof t!="function"&&(t=vr(t==null?0:+t));function a(o){for(var l=0,u=r.length,h;l<u;++l)h=r[l],h.vy+=(i[l]-h.y)*n[l]*o}function s(){if(!!r){var o,l=r.length;for(n=new Array(l),i=new Array(l),o=0;o<l;++o)n[o]=isNaN(i[o]=+t(r[o],o,r))?0:+e(r[o],o,r)}}return a.initialize=function(o){r=o,s()},a.strength=function(o){return arguments.length?(e=typeof o=="function"?o:vr(+o),s(),a):e},a.y=function(o){return arguments.length?(t=typeof o=="function"?o:vr(+o),s(),a):t},a}function tq(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function dh(t,e){if((r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var r,n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}function Eo(t){return t=dh(Math.abs(t)),t?t[1]:NaN}function eq(t,e){return function(r,n){for(var i=r.length,a=[],s=0,o=t[0],l=0;i>0&&o>0&&(l+o+1>n&&(o=Math.max(1,n-l)),a.push(r.substring(i-=o,i+o)),!((l+=o+1)>n));)o=t[s=(s+1)%t.length];return a.reverse().join(e)}}function rq(t){return function(e){return e.replace(/[0-9]/g,function(r){return t[+r]})}}var nq=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Co(t){if(!(e=nq.exec(t)))throw new Error("invalid format: "+t);var e;return new ph({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}Co.prototype=ph.prototype;function ph(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}ph.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function iq(t){t:for(var e=t.length,r=1,n=-1,i;r<e;++r)switch(t[r]){case".":n=i=r;break;case"0":n===0&&(n=r),i=r;break;default:if(!+t[r])break t;n>0&&(n=0);break}return n>0?t.slice(0,n)+t.slice(i+1):t}var Wv;function aq(t,e){var r=dh(t,e);if(!r)return t+"";var n=r[0],i=r[1],a=i-(Wv=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return a===s?n:a>s?n+new Array(a-s+1).join("0"):a>0?n.slice(0,a)+"."+n.slice(a):"0."+new Array(1-a).join("0")+dh(t,Math.max(0,e+a-1))[0]}function Hv(t,e){var r=dh(t,e);if(!r)return t+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const Gv={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:tq,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Hv(t*100,e),r:Hv,s:aq,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function jv(t){return t}var $v=Array.prototype.map,Xv=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function Kv(t){var e=t.grouping===void 0||t.thousands===void 0?jv:eq($v.call(t.grouping,Number),t.thousands+""),r=t.currency===void 0?"":t.currency[0]+"",n=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",a=t.numerals===void 0?jv:rq($v.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",o=t.minus===void 0?"\u2212":t.minus+"",l=t.nan===void 0?"NaN":t.nan+"";function u(d){d=Co(d);var f=d.fill,p=d.align,m=d.sign,_=d.symbol,y=d.zero,b=d.width,x=d.comma,k=d.precision,T=d.trim,C=d.type;C==="n"?(x=!0,C="g"):Gv[C]||(k===void 0&&(k=12),T=!0,C="g"),(y||f==="0"&&p==="=")&&(y=!0,f="0",p="=");var M=_==="$"?r:_==="#"&&/[boxX]/.test(C)?"0"+C.toLowerCase():"",S=_==="$"?n:/[%p]/.test(C)?s:"",R=Gv[C],A=/[defgprs%]/.test(C);k=k===void 0?6:/[gprs]/.test(C)?Math.max(1,Math.min(21,k)):Math.max(0,Math.min(20,k));function L(v){var B=M,w=S,D,N,z;if(C==="c")w=R(v)+w,v="";else{v=+v;var X=v<0||1/v<0;if(v=isNaN(v)?l:R(Math.abs(v),k),T&&(v=iq(v)),X&&+v==0&&m!=="+"&&(X=!1),B=(X?m==="("?m:o:m==="-"||m==="("?"":m)+B,w=(C==="s"?Xv[8+Wv/3]:"")+w+(X&&m==="("?")":""),A){for(D=-1,N=v.length;++D<N;)if(z=v.charCodeAt(D),48>z||z>57){w=(z===46?i+v.slice(D+1):v.slice(D))+w,v=v.slice(0,D);break}}}x&&!y&&(v=e(v,1/0));var ct=B.length+v.length+w.length,J=ct<b?new Array(b-ct+1).join(f):"";switch(x&&y&&(v=e(J+v,J.length?b-w.length:1/0),J=""),p){case"<":v=B+v+w+J;break;case"=":v=B+J+v+w;break;case"^":v=J.slice(0,ct=J.length>>1)+B+v+w+J.slice(ct);break;default:v=J+B+v+w;break}return a(v)}return L.toString=function(){return d+""},L}function h(d,f){var p=u((d=Co(d),d.type="f",d)),m=Math.max(-8,Math.min(8,Math.floor(Eo(f)/3)))*3,_=Math.pow(10,-m),y=Xv[8+m/3];return function(b){return p(_*b)+y}}return{format:u,formatPrefix:h}}var gh,yh,Jd;Zv({thousands:",",grouping:[3],currency:["$",""]});function Zv(t){return gh=Kv(t),yh=gh.format,Jd=gh.formatPrefix,gh}function Qv(t){return Math.max(0,-Eo(Math.abs(t)))}function Jv(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Eo(e)/3)))*3-Eo(Math.abs(t)))}function t6(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Eo(e)-Eo(t))+1}var te=1e-6,Hl=1e-12,Ae=Math.PI,rr=Ae/2,mh=Ae/4,Qr=Ae*2,Ue=180/Ae,re=Ae/180,Ne=Math.abs,So=Math.atan,Jr=Math.atan2,Kt=Math.cos,bh=Math.ceil,e6=Math.exp,t2=Math.hypot,_h=Math.log,e2=Math.pow,Ht=Math.sin,Dn=Math.sign||function(t){return t>0?1:t<0?-1:0},Sr=Math.sqrt,r2=Math.tan;function r6(t){return t>1?0:t<-1?Ae:Math.acos(t)}function tn(t){return t>1?rr:t<-1?-rr:Math.asin(t)}function n6(t){return(t=Ht(t/2))*t}function Je(){}function vh(t,e){t&&a6.hasOwnProperty(t.type)&&a6[t.type](t,e)}var i6={Feature:function(t,e){vh(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,n=-1,i=r.length;++n<i;)vh(r[n].geometry,e)}},a6={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)t=r[n],e.point(t[0],t[1],t[2])},LineString:function(t,e){n2(t.coordinates,e,0)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)n2(r[n],e,0)},Polygon:function(t,e){s6(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)s6(r[n],e)},GeometryCollection:function(t,e){for(var r=t.geometries,n=-1,i=r.length;++n<i;)vh(r[n],e)}};function n2(t,e,r){var n=-1,i=t.length-r,a;for(e.lineStart();++n<i;)a=t[n],e.point(a[0],a[1],a[2]);e.lineEnd()}function s6(t,e){var r=-1,n=t.length;for(e.polygonStart();++r<n;)n2(t[r],e,1);e.polygonEnd()}function ti(t,e){t&&i6.hasOwnProperty(t.type)?i6[t.type](t,e):vh(t,e)}var xh=new _r,kh=new _r,o6,l6,i2,a2,s2,Si={point:Je,lineStart:Je,lineEnd:Je,polygonStart:function(){xh=new _r,Si.lineStart=sq,Si.lineEnd=oq},polygonEnd:function(){var t=+xh;kh.add(t<0?Qr+t:t),this.lineStart=this.lineEnd=this.point=Je},sphere:function(){kh.add(Qr)}};function sq(){Si.point=lq}function oq(){c6(o6,l6)}function lq(t,e){Si.point=c6,o6=t,l6=e,t*=re,e*=re,i2=t,a2=Kt(e=e/2+mh),s2=Ht(e)}function c6(t,e){t*=re,e*=re,e=e/2+mh;var r=t-i2,n=r>=0?1:-1,i=n*r,a=Kt(e),s=Ht(e),o=s2*s,l=a2*a+o*Kt(i),u=o*n*Ht(i);xh.add(Jr(u,l)),i2=t,a2=a,s2=s}function cq(t){return kh=new _r,ti(t,Si),kh*2}function wh(t){return[Jr(t[1],t[0]),tn(t[2])]}function Cs(t){var e=t[0],r=t[1],n=Kt(r);return[n*Kt(e),n*Ht(e),Ht(r)]}function Th(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Ao(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function o2(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function Eh(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Ch(t){var e=Sr(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var tr,pn,nr,En,Ss,u6,h6,Mo,Gl,Ba,Qi,Ji={point:l2,lineStart:d6,lineEnd:p6,polygonStart:function(){Ji.point=g6,Ji.lineStart=uq,Ji.lineEnd=hq,Gl=new _r,Si.polygonStart()},polygonEnd:function(){Si.polygonEnd(),Ji.point=l2,Ji.lineStart=d6,Ji.lineEnd=p6,xh<0?(tr=-(nr=180),pn=-(En=90)):Gl>te?En=90:Gl<-te&&(pn=-90),Qi[0]=tr,Qi[1]=nr},sphere:function(){tr=-(nr=180),pn=-(En=90)}};function l2(t,e){Ba.push(Qi=[tr=t,nr=t]),e<pn&&(pn=e),e>En&&(En=e)}function f6(t,e){var r=Cs([t*re,e*re]);if(Mo){var n=Ao(Mo,r),i=[n[1],-n[0],0],a=Ao(i,n);Ch(a),a=wh(a);var s=t-Ss,o=s>0?1:-1,l=a[0]*Ue*o,u,h=Ne(s)>180;h^(o*Ss<l&&l<o*t)?(u=a[1]*Ue,u>En&&(En=u)):(l=(l+360)%360-180,h^(o*Ss<l&&l<o*t)?(u=-a[1]*Ue,u<pn&&(pn=u)):(e<pn&&(pn=e),e>En&&(En=e))),h?t<Ss?Cn(tr,t)>Cn(tr,nr)&&(nr=t):Cn(t,nr)>Cn(tr,nr)&&(tr=t):nr>=tr?(t<tr&&(tr=t),t>nr&&(nr=t)):t>Ss?Cn(tr,t)>Cn(tr,nr)&&(nr=t):Cn(t,nr)>Cn(tr,nr)&&(tr=t)}else Ba.push(Qi=[tr=t,nr=t]);e<pn&&(pn=e),e>En&&(En=e),Mo=r,Ss=t}function d6(){Ji.point=f6}function p6(){Qi[0]=tr,Qi[1]=nr,Ji.point=l2,Mo=null}function g6(t,e){if(Mo){var r=t-Ss;Gl.add(Ne(r)>180?r+(r>0?360:-360):r)}else u6=t,h6=e;Si.point(t,e),f6(t,e)}function uq(){Si.lineStart()}function hq(){g6(u6,h6),Si.lineEnd(),Ne(Gl)>te&&(tr=-(nr=180)),Qi[0]=tr,Qi[1]=nr,Mo=null}function Cn(t,e){return(e-=t)<0?e+360:e}function fq(t,e){return t[0]-e[0]}function y6(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:e<t[0]||t[1]<e}function dq(t){var e,r,n,i,a,s,o;if(En=nr=-(tr=pn=1/0),Ba=[],ti(t,Ji),r=Ba.length){for(Ba.sort(fq),e=1,n=Ba[0],a=[n];e<r;++e)i=Ba[e],y6(n,i[0])||y6(n,i[1])?(Cn(n[0],i[1])>Cn(n[0],n[1])&&(n[1]=i[1]),Cn(i[0],n[1])>Cn(n[0],n[1])&&(n[0]=i[0])):a.push(n=i);for(s=-1/0,r=a.length-1,e=0,n=a[r];e<=r;n=i,++e)i=a[e],(o=Cn(n[1],i[0]))>s&&(s=o,tr=i[0],nr=n[1])}return Ba=Qi=null,tr===1/0||pn===1/0?[[NaN,NaN],[NaN,NaN]]:[[tr,pn],[nr,En]]}var jl,Sh,Ah,Mh,Lh,Rh,Ih,Nh,c2,u2,h2,m6,b6,en,rn,nn,ei={sphere:Je,point:f2,lineStart:_6,lineEnd:v6,polygonStart:function(){ei.lineStart=yq,ei.lineEnd=mq},polygonEnd:function(){ei.lineStart=_6,ei.lineEnd=v6}};function f2(t,e){t*=re,e*=re;var r=Kt(e);$l(r*Kt(t),r*Ht(t),Ht(e))}function $l(t,e,r){++jl,Ah+=(t-Ah)/jl,Mh+=(e-Mh)/jl,Lh+=(r-Lh)/jl}function _6(){ei.point=pq}function pq(t,e){t*=re,e*=re;var r=Kt(e);en=r*Kt(t),rn=r*Ht(t),nn=Ht(e),ei.point=gq,$l(en,rn,nn)}function gq(t,e){t*=re,e*=re;var r=Kt(e),n=r*Kt(t),i=r*Ht(t),a=Ht(e),s=Jr(Sr((s=rn*a-nn*i)*s+(s=nn*n-en*a)*s+(s=en*i-rn*n)*s),en*n+rn*i+nn*a);Sh+=s,Rh+=s*(en+(en=n)),Ih+=s*(rn+(rn=i)),Nh+=s*(nn+(nn=a)),$l(en,rn,nn)}function v6(){ei.point=f2}function yq(){ei.point=bq}function mq(){x6(m6,b6),ei.point=f2}function bq(t,e){m6=t,b6=e,t*=re,e*=re,ei.point=x6;var r=Kt(e);en=r*Kt(t),rn=r*Ht(t),nn=Ht(e),$l(en,rn,nn)}function x6(t,e){t*=re,e*=re;var r=Kt(e),n=r*Kt(t),i=r*Ht(t),a=Ht(e),s=rn*a-nn*i,o=nn*n-en*a,l=en*i-rn*n,u=t2(s,o,l),h=tn(u),d=u&&-h/u;c2.add(d*s),u2.add(d*o),h2.add(d*l),Sh+=h,Rh+=h*(en+(en=n)),Ih+=h*(rn+(rn=i)),Nh+=h*(nn+(nn=a)),$l(en,rn,nn)}function _q(t){jl=Sh=Ah=Mh=Lh=Rh=Ih=Nh=0,c2=new _r,u2=new _r,h2=new _r,ti(t,ei);var e=+c2,r=+u2,n=+h2,i=t2(e,r,n);return i<Hl&&(e=Rh,r=Ih,n=Nh,Sh<te&&(e=Ah,r=Mh,n=Lh),i=t2(e,r,n),i<Hl)?[NaN,NaN]:[Jr(r,e)*Ue,tn(n/i)*Ue]}function Lo(t){return function(){return t}}function d2(t,e){function r(n,i){return n=t(n,i),e(n[0],n[1])}return t.invert&&e.invert&&(r.invert=function(n,i){return n=e.invert(n,i),n&&t.invert(n[0],n[1])}),r}function p2(t,e){return[Ne(t)>Ae?t+Math.round(-t/Qr)*Qr:t,e]}p2.invert=p2;function g2(t,e,r){return(t%=Qr)?e||r?d2(w6(t),T6(e,r)):w6(t):e||r?T6(e,r):p2}function k6(t){return function(e,r){return e+=t,[e>Ae?e-Qr:e<-Ae?e+Qr:e,r]}}function w6(t){var e=k6(t);return e.invert=k6(-t),e}function T6(t,e){var r=Kt(t),n=Ht(t),i=Kt(e),a=Ht(e);function s(o,l){var u=Kt(l),h=Kt(o)*u,d=Ht(o)*u,f=Ht(l),p=f*r+h*n;return[Jr(d*i-p*a,h*r-f*n),tn(p*i+d*a)]}return s.invert=function(o,l){var u=Kt(l),h=Kt(o)*u,d=Ht(o)*u,f=Ht(l),p=f*i-d*a;return[Jr(d*i+f*a,h*r+p*n),tn(p*r-h*n)]},s}function E6(t){t=g2(t[0]*re,t[1]*re,t.length>2?t[2]*re:0);function e(r){return r=t(r[0]*re,r[1]*re),r[0]*=Ue,r[1]*=Ue,r}return e.invert=function(r){return r=t.invert(r[0]*re,r[1]*re),r[0]*=Ue,r[1]*=Ue,r},e}function C6(t,e,r,n,i,a){if(!!r){var s=Kt(e),o=Ht(e),l=n*r;i==null?(i=e+n*Qr,a=e-l/2):(i=S6(s,i),a=S6(s,a),(n>0?i<a:i>a)&&(i+=n*Qr));for(var u,h=i;n>0?h>a:h<a;h-=l)u=wh([s,-o*Kt(h),-o*Ht(h)]),t.point(u[0],u[1])}}function S6(t,e){e=Cs(e),e[0]-=t,Ch(e);var r=r6(-e[1]);return((-e[2]<0?-r:r)+Qr-te)%Qr}function vq(){var t=Lo([0,0]),e=Lo(90),r=Lo(6),n,i,a={point:s};function s(l,u){n.push(l=i(l,u)),l[0]*=Ue,l[1]*=Ue}function o(){var l=t.apply(this,arguments),u=e.apply(this,arguments)*re,h=r.apply(this,arguments)*re;return n=[],i=g2(-l[0]*re,-l[1]*re,0).invert,C6(a,u,h,1),l={type:"Polygon",coordinates:[n]},n=i=null,l}return o.center=function(l){return arguments.length?(t=typeof l=="function"?l:Lo([+l[0],+l[1]]),o):t},o.radius=function(l){return arguments.length?(e=typeof l=="function"?l:Lo(+l),o):e},o.precision=function(l){return arguments.length?(r=typeof l=="function"?l:Lo(+l),o):r},o}function A6(){var t=[],e;return{point:function(r,n,i){e.push([r,n,i])},lineStart:function(){t.push(e=[])},lineEnd:Je,rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))},result:function(){var r=t;return t=[],e=null,r}}}function Bh(t,e){return Ne(t[0]-e[0])<te&&Ne(t[1]-e[1])<te}function Dh(t,e,r,n){this.x=t,this.z=e,this.o=r,this.e=n,this.v=!1,this.n=this.p=null}function M6(t,e,r,n,i){var a=[],s=[],o,l;if(t.forEach(function(m){if(!((_=m.length-1)<=0)){var _,y=m[0],b=m[_],x;if(Bh(y,b)){if(!y[2]&&!b[2]){for(i.lineStart(),o=0;o<_;++o)i.point((y=m[o])[0],y[1]);i.lineEnd();return}b[0]+=2*te}a.push(x=new Dh(y,m,null,!0)),s.push(x.o=new Dh(y,null,x,!1)),a.push(x=new Dh(b,m,null,!1)),s.push(x.o=new Dh(b,null,x,!0))}}),!!a.length){for(s.sort(e),L6(a),L6(s),o=0,l=s.length;o<l;++o)s[o].e=r=!r;for(var u=a[0],h,d;;){for(var f=u,p=!0;f.v;)if((f=f.n)===u)return;h=f.z,i.lineStart();do{if(f.v=f.o.v=!0,f.e){if(p)for(o=0,l=h.length;o<l;++o)i.point((d=h[o])[0],d[1]);else n(f.x,f.n.x,1,i);f=f.n}else{if(p)for(h=f.p.z,o=h.length-1;o>=0;--o)i.point((d=h[o])[0],d[1]);else n(f.x,f.p.x,-1,i);f=f.p}f=f.o,h=f.z,p=!p}while(!f.v);i.lineEnd()}}}function L6(t){if(!!(e=t.length)){for(var e,r=0,n=t[0],i;++r<e;)n.n=i=t[r],i.p=n,n=i;n.n=i=t[0],i.p=n}}function y2(t){return Ne(t[0])<=Ae?t[0]:Dn(t[0])*((Ne(t[0])+Ae)%Qr-Ae)}function R6(t,e){var r=y2(e),n=e[1],i=Ht(n),a=[Ht(r),-Kt(r),0],s=0,o=0,l=new _r;i===1?n=rr+te:i===-1&&(n=-rr-te);for(var u=0,h=t.length;u<h;++u)if(!!(f=(d=t[u]).length))for(var d,f,p=d[f-1],m=y2(p),_=p[1]/2+mh,y=Ht(_),b=Kt(_),x=0;x<f;++x,m=T,y=M,b=S,p=k){var k=d[x],T=y2(k),C=k[1]/2+mh,M=Ht(C),S=Kt(C),R=T-m,A=R>=0?1:-1,L=A*R,v=L>Ae,B=y*M;if(l.add(Jr(B*A*Ht(L),b*S+B*Kt(L))),s+=v?R+A*Qr:R,v^m>=r^T>=r){var w=Ao(Cs(p),Cs(k));Ch(w);var D=Ao(a,w);Ch(D);var N=(v^R>=0?-1:1)*tn(D[2]);(n>N||n===N&&(w[0]||w[1]))&&(o+=v^R>=0?1:-1)}}return(s<-te||s<te&&l<-Hl)^o&1}function I6(t,e,r,n){return function(i){var a=e(i),s=A6(),o=e(s),l=!1,u,h,d,f={point:p,lineStart:_,lineEnd:y,polygonStart:function(){f.point=b,f.lineStart=x,f.lineEnd=k,h=[],u=[]},polygonEnd:function(){f.point=p,f.lineStart=_,f.lineEnd=y,h=j0(h);var T=R6(u,n);h.length?(l||(i.polygonStart(),l=!0),M6(h,kq,T,r,i)):T&&(l||(i.polygonStart(),l=!0),i.lineStart(),r(null,null,1,i),i.lineEnd()),l&&(i.polygonEnd(),l=!1),h=u=null},sphere:function(){i.polygonStart(),i.lineStart(),r(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function p(T,C){t(T,C)&&i.point(T,C)}function m(T,C){a.point(T,C)}function _(){f.point=m,a.lineStart()}function y(){f.point=p,a.lineEnd()}function b(T,C){d.push([T,C]),o.point(T,C)}function x(){o.lineStart(),d=[]}function k(){b(d[0][0],d[0][1]),o.lineEnd();var T=o.clean(),C=s.result(),M,S=C.length,R,A,L;if(d.pop(),u.push(d),d=null,!!S){if(T&1){if(A=C[0],(R=A.length-1)>0){for(l||(i.polygonStart(),l=!0),i.lineStart(),M=0;M<R;++M)i.point((L=A[M])[0],L[1]);i.lineEnd()}return}S>1&&T&2&&C.push(C.pop().concat(C.shift())),h.push(C.filter(xq))}}return f}}function xq(t){return t.length>1}function kq(t,e){return((t=t.x)[0]<0?t[1]-rr-te:rr-t[1])-((e=e.x)[0]<0?e[1]-rr-te:rr-e[1])}const m2=I6(function(){return!0},wq,Eq,[-Ae,-rr]);function wq(t){var e=NaN,r=NaN,n=NaN,i;return{lineStart:function(){t.lineStart(),i=1},point:function(a,s){var o=a>0?Ae:-Ae,l=Ne(a-e);Ne(l-Ae)<te?(t.point(e,r=(r+s)/2>0?rr:-rr),t.point(n,r),t.lineEnd(),t.lineStart(),t.point(o,r),t.point(a,r),i=0):n!==o&&l>=Ae&&(Ne(e-n)<te&&(e-=n*te),Ne(a-o)<te&&(a-=o*te),r=Tq(e,r,a,s),t.point(n,r),t.lineEnd(),t.lineStart(),t.point(o,r),i=0),t.point(e=a,r=s),n=o},lineEnd:function(){t.lineEnd(),e=r=NaN},clean:function(){return 2-i}}}function Tq(t,e,r,n){var i,a,s=Ht(t-r);return Ne(s)>te?So((Ht(e)*(a=Kt(n))*Ht(r)-Ht(n)*(i=Kt(e))*Ht(t))/(i*a*s)):(e+n)/2}function Eq(t,e,r,n){var i;if(t==null)i=r*rr,n.point(-Ae,i),n.point(0,i),n.point(Ae,i),n.point(Ae,0),n.point(Ae,-i),n.point(0,-i),n.point(-Ae,-i),n.point(-Ae,0),n.point(-Ae,i);else if(Ne(t[0]-e[0])>te){var a=t[0]<e[0]?Ae:-Ae;i=r*a/2,n.point(-a,i),n.point(0,i),n.point(a,i)}else n.point(e[0],e[1])}function N6(t){var e=Kt(t),r=6*re,n=e>0,i=Ne(e)>te;function a(h,d,f,p){C6(p,t,r,f,h,d)}function s(h,d){return Kt(h)*Kt(d)>e}function o(h){var d,f,p,m,_;return{lineStart:function(){m=p=!1,_=1},point:function(y,b){var x=[y,b],k,T=s(y,b),C=n?T?0:u(y,b):T?u(y+(y<0?Ae:-Ae),b):0;if(!d&&(m=p=T)&&h.lineStart(),T!==p&&(k=l(d,x),(!k||Bh(d,k)||Bh(x,k))&&(x[2]=1)),T!==p)_=0,T?(h.lineStart(),k=l(x,d),h.point(k[0],k[1])):(k=l(d,x),h.point(k[0],k[1],2),h.lineEnd()),d=k;else if(i&&d&&n^T){var M;!(C&f)&&(M=l(x,d,!0))&&(_=0,n?(h.lineStart(),h.point(M[0][0],M[0][1]),h.point(M[1][0],M[1][1]),h.lineEnd()):(h.point(M[1][0],M[1][1]),h.lineEnd(),h.lineStart(),h.point(M[0][0],M[0][1],3)))}T&&(!d||!Bh(d,x))&&h.point(x[0],x[1]),d=x,p=T,f=C},lineEnd:function(){p&&h.lineEnd(),d=null},clean:function(){return _|(m&&p)<<1}}}function l(h,d,f){var p=Cs(h),m=Cs(d),_=[1,0,0],y=Ao(p,m),b=Th(y,y),x=y[0],k=b-x*x;if(!k)return!f&&h;var T=e*b/k,C=-e*x/k,M=Ao(_,y),S=Eh(_,T),R=Eh(y,C);o2(S,R);var A=M,L=Th(S,A),v=Th(A,A),B=L*L-v*(Th(S,S)-1);if(!(B<0)){var w=Sr(B),D=Eh(A,(-L-w)/v);if(o2(D,S),D=wh(D),!f)return D;var N=h[0],z=d[0],X=h[1],ct=d[1],J;z<N&&(J=N,N=z,z=J);var Y=z-N,$=Ne(Y-Ae)<te,lt=$||Y<te;if(!$&&ct<X&&(J=X,X=ct,ct=J),lt?$?X+ct>0^D[1]<(Ne(D[0]-N)<te?X:ct):X<=D[1]&&D[1]<=ct:Y>Ae^(N<=D[0]&&D[0]<=z)){var ut=Eh(A,(-L+w)/v);return o2(ut,S),[D,wh(ut)]}}}function u(h,d){var f=n?t:Ae-t,p=0;return h<-f?p|=1:h>f&&(p|=2),d<-f?p|=4:d>f&&(p|=8),p}return I6(s,o,a,n?[0,-t]:[-Ae,t-Ae])}function Cq(t,e,r,n,i,a){var s=t[0],o=t[1],l=e[0],u=e[1],h=0,d=1,f=l-s,p=u-o,m;if(m=r-s,!(!f&&m>0)){if(m/=f,f<0){if(m<h)return;m<d&&(d=m)}else if(f>0){if(m>d)return;m>h&&(h=m)}if(m=i-s,!(!f&&m<0)){if(m/=f,f<0){if(m>d)return;m>h&&(h=m)}else if(f>0){if(m<h)return;m<d&&(d=m)}if(m=n-o,!(!p&&m>0)){if(m/=p,p<0){if(m<h)return;m<d&&(d=m)}else if(p>0){if(m>d)return;m>h&&(h=m)}if(m=a-o,!(!p&&m<0)){if(m/=p,p<0){if(m>d)return;m>h&&(h=m)}else if(p>0){if(m<h)return;m<d&&(d=m)}return h>0&&(t[0]=s+h*f,t[1]=o+h*p),d<1&&(e[0]=s+d*f,e[1]=o+d*p),!0}}}}}var Xl=1e9,Oh=-Xl;function Fh(t,e,r,n){function i(u,h){return t<=u&&u<=r&&e<=h&&h<=n}function a(u,h,d,f){var p=0,m=0;if(u==null||(p=s(u,d))!==(m=s(h,d))||l(u,h)<0^d>0)do f.point(p===0||p===3?t:r,p>1?n:e);while((p=(p+d+4)%4)!==m);else f.point(h[0],h[1])}function s(u,h){return Ne(u[0]-t)<te?h>0?0:3:Ne(u[0]-r)<te?h>0?2:1:Ne(u[1]-e)<te?h>0?1:0:h>0?3:2}function o(u,h){return l(u.x,h.x)}function l(u,h){var d=s(u,1),f=s(h,1);return d!==f?d-f:d===0?h[1]-u[1]:d===1?u[0]-h[0]:d===2?u[1]-h[1]:h[0]-u[0]}return function(u){var h=u,d=A6(),f,p,m,_,y,b,x,k,T,C,M,S={point:R,lineStart:B,lineEnd:w,polygonStart:L,polygonEnd:v};function R(N,z){i(N,z)&&h.point(N,z)}function A(){for(var N=0,z=0,X=p.length;z<X;++z)for(var ct=p[z],J=1,Y=ct.length,$=ct[0],lt,ut,W=$[0],tt=$[1];J<Y;++J)lt=W,ut=tt,$=ct[J],W=$[0],tt=$[1],ut<=n?tt>n&&(W-lt)*(n-ut)>(tt-ut)*(t-lt)&&++N:tt<=n&&(W-lt)*(n-ut)<(tt-ut)*(t-lt)&&--N;return N}function L(){h=d,f=[],p=[],M=!0}function v(){var N=A(),z=M&&N,X=(f=j0(f)).length;(z||X)&&(u.polygonStart(),z&&(u.lineStart(),a(null,null,1,u),u.lineEnd()),X&&M6(f,o,N,a,u),u.polygonEnd()),h=u,f=p=m=null}function B(){S.point=D,p&&p.push(m=[]),C=!0,T=!1,x=k=NaN}function w(){f&&(D(_,y),b&&T&&d.rejoin(),f.push(d.result())),S.point=R,T&&h.lineEnd()}function D(N,z){var X=i(N,z);if(p&&m.push([N,z]),C)_=N,y=z,b=X,C=!1,X&&(h.lineStart(),h.point(N,z));else if(X&&T)h.point(N,z);else{var ct=[x=Math.max(Oh,Math.min(Xl,x)),k=Math.max(Oh,Math.min(Xl,k))],J=[N=Math.max(Oh,Math.min(Xl,N)),z=Math.max(Oh,Math.min(Xl,z))];Cq(ct,J,t,e,r,n)?(T||(h.lineStart(),h.point(ct[0],ct[1])),h.point(J[0],J[1]),X||h.lineEnd(),M=!1):X&&(h.lineStart(),h.point(N,z),M=!1)}x=N,k=z,T=X}return S}}function Sq(){var t=0,e=0,r=960,n=500,i,a,s;return s={stream:function(o){return i&&a===o?i:i=Fh(t,e,r,n)(a=o)},extent:function(o){return arguments.length?(t=+o[0][0],e=+o[0][1],r=+o[1][0],n=+o[1][1],i=a=null,s):[[t,e],[r,n]]}}}var b2,_2,Ph,qh,Ro={sphere:Je,point:Je,lineStart:Aq,lineEnd:Je,polygonStart:Je,polygonEnd:Je};function Aq(){Ro.point=Lq,Ro.lineEnd=Mq}function Mq(){Ro.point=Ro.lineEnd=Je}function Lq(t,e){t*=re,e*=re,_2=t,Ph=Ht(e),qh=Kt(e),Ro.point=Rq}function Rq(t,e){t*=re,e*=re;var r=Ht(e),n=Kt(e),i=Ne(t-_2),a=Kt(i),s=Ht(i),o=n*s,l=qh*r-Ph*n*a,u=Ph*r+qh*n*a;b2.add(Jr(Sr(o*o+l*l),u)),_2=t,Ph=r,qh=n}function B6(t){return b2=new _r,ti(t,Ro),+b2}var v2=[null,null],Iq={type:"LineString",coordinates:v2};function Vh(t,e){return v2[0]=t,v2[1]=e,B6(Iq)}var D6={Feature:function(t,e){return zh(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,n=-1,i=r.length;++n<i;)if(zh(r[n].geometry,e))return!0;return!1}},O6={Sphere:function(){return!0},Point:function(t,e){return F6(t.coordinates,e)},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(F6(r[n],e))return!0;return!1},LineString:function(t,e){return P6(t.coordinates,e)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(P6(r[n],e))return!0;return!1},Polygon:function(t,e){return q6(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)if(q6(r[n],e))return!0;return!1},GeometryCollection:function(t,e){for(var r=t.geometries,n=-1,i=r.length;++n<i;)if(zh(r[n],e))return!0;return!1}};function zh(t,e){return t&&O6.hasOwnProperty(t.type)?O6[t.type](t,e):!1}function F6(t,e){return Vh(t,e)===0}function P6(t,e){for(var r,n,i,a=0,s=t.length;a<s;a++){if(n=Vh(t[a],e),n===0||a>0&&(i=Vh(t[a],t[a-1]),i>0&&r<=i&&n<=i&&(r+n-i)*(1-Math.pow((r-n)/i,2))<Hl*i))return!0;r=n}return!1}function q6(t,e){return!!R6(t.map(Nq),V6(e))}function Nq(t){return t=t.map(V6),t.pop(),t}function V6(t){return[t[0]*re,t[1]*re]}function Bq(t,e){return(t&&D6.hasOwnProperty(t.type)?D6[t.type]:zh)(t,e)}function z6(t,e,r){var n=Ca(t,e-te,r).concat(e);return function(i){return n.map(function(a){return[i,a]})}}function Y6(t,e,r){var n=Ca(t,e-te,r).concat(e);return function(i){return n.map(function(a){return[a,i]})}}function U6(){var t,e,r,n,i,a,s,o,l=10,u=l,h=90,d=360,f,p,m,_,y=2.5;function b(){return{type:"MultiLineString",coordinates:x()}}function x(){return Ca(bh(n/h)*h,r,h).map(m).concat(Ca(bh(o/d)*d,s,d).map(_)).concat(Ca(bh(e/l)*l,t,l).filter(function(k){return Ne(k%h)>te}).map(f)).concat(Ca(bh(a/u)*u,i,u).filter(function(k){return Ne(k%d)>te}).map(p))}return b.lines=function(){return x().map(function(k){return{type:"LineString",coordinates:k}})},b.outline=function(){return{type:"Polygon",coordinates:[m(n).concat(_(s).slice(1),m(r).reverse().slice(1),_(o).reverse().slice(1))]}},b.extent=function(k){return arguments.length?b.extentMajor(k).extentMinor(k):b.extentMinor()},b.extentMajor=function(k){return arguments.length?(n=+k[0][0],r=+k[1][0],o=+k[0][1],s=+k[1][1],n>r&&(k=n,n=r,r=k),o>s&&(k=o,o=s,s=k),b.precision(y)):[[n,o],[r,s]]},b.extentMinor=function(k){return arguments.length?(e=+k[0][0],t=+k[1][0],a=+k[0][1],i=+k[1][1],e>t&&(k=e,e=t,t=k),a>i&&(k=a,a=i,i=k),b.precision(y)):[[e,a],[t,i]]},b.step=function(k){return arguments.length?b.stepMajor(k).stepMinor(k):b.stepMinor()},b.stepMajor=function(k){return arguments.length?(h=+k[0],d=+k[1],b):[h,d]},b.stepMinor=function(k){return arguments.length?(l=+k[0],u=+k[1],b):[l,u]},b.precision=function(k){return arguments.length?(y=+k,f=z6(a,i,90),p=Y6(e,t,y),m=z6(o,s,90),_=Y6(n,r,y),b):y},b.extentMajor([[-180,-90+te],[180,90-te]]).extentMinor([[-180,-80-te],[180,80+te]])}function Dq(){return U6()()}function Oq(t,e){var r=t[0]*re,n=t[1]*re,i=e[0]*re,a=e[1]*re,s=Kt(n),o=Ht(n),l=Kt(a),u=Ht(a),h=s*Kt(r),d=s*Ht(r),f=l*Kt(i),p=l*Ht(i),m=2*tn(Sr(n6(a-n)+s*l*n6(i-r))),_=Ht(m),y=m?function(b){var x=Ht(b*=m)/_,k=Ht(m-b)/_,T=k*h+x*f,C=k*d+x*p,M=k*o+x*u;return[Jr(C,T)*Ue,Jr(M,Sr(T*T+C*C))*Ue]}:function(){return[r*Ue,n*Ue]};return y.distance=m,y}const Kl=t=>t;var x2=new _r,k2=new _r,W6,H6,w2,T2,Da={point:Je,lineStart:Je,lineEnd:Je,polygonStart:function(){Da.lineStart=Fq,Da.lineEnd=qq},polygonEnd:function(){Da.lineStart=Da.lineEnd=Da.point=Je,x2.add(Ne(k2)),k2=new _r},result:function(){var t=x2/2;return x2=new _r,t}};function Fq(){Da.point=Pq}function Pq(t,e){Da.point=G6,W6=w2=t,H6=T2=e}function G6(t,e){k2.add(T2*t-w2*e),w2=t,T2=e}function qq(){G6(W6,H6)}const j6=Da;var Io=1/0,Yh=Io,Zl=-Io,Uh=Zl,Vq={point:zq,lineStart:Je,lineEnd:Je,polygonStart:Je,polygonEnd:Je,result:function(){var t=[[Io,Yh],[Zl,Uh]];return Zl=Uh=-(Yh=Io=1/0),t}};function zq(t,e){t<Io&&(Io=t),t>Zl&&(Zl=t),e<Yh&&(Yh=e),e>Uh&&(Uh=e)}const Wh=Vq;var E2=0,C2=0,Ql=0,Hh=0,Gh=0,No=0,S2=0,A2=0,Jl=0,$6,X6,Ai,Mi,ri={point:As,lineStart:K6,lineEnd:Z6,polygonStart:function(){ri.lineStart=Wq,ri.lineEnd=Hq},polygonEnd:function(){ri.point=As,ri.lineStart=K6,ri.lineEnd=Z6},result:function(){var t=Jl?[S2/Jl,A2/Jl]:No?[Hh/No,Gh/No]:Ql?[E2/Ql,C2/Ql]:[NaN,NaN];return E2=C2=Ql=Hh=Gh=No=S2=A2=Jl=0,t}};function As(t,e){E2+=t,C2+=e,++Ql}function K6(){ri.point=Yq}function Yq(t,e){ri.point=Uq,As(Ai=t,Mi=e)}function Uq(t,e){var r=t-Ai,n=e-Mi,i=Sr(r*r+n*n);Hh+=i*(Ai+t)/2,Gh+=i*(Mi+e)/2,No+=i,As(Ai=t,Mi=e)}function Z6(){ri.point=As}function Wq(){ri.point=Gq}function Hq(){Q6($6,X6)}function Gq(t,e){ri.point=Q6,As($6=Ai=t,X6=Mi=e)}function Q6(t,e){var r=t-Ai,n=e-Mi,i=Sr(r*r+n*n);Hh+=i*(Ai+t)/2,Gh+=i*(Mi+e)/2,No+=i,i=Mi*t-Ai*e,S2+=i*(Ai+t),A2+=i*(Mi+e),Jl+=i*3,As(Ai=t,Mi=e)}const J6=ri;function tx(t){this._context=t}tx.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:{this._context.moveTo(t,e),this._point=1;break}case 1:{this._context.lineTo(t,e);break}default:{this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,Qr);break}}},result:Je};var M2=new _r,L2,ex,rx,tc,ec,jh={point:Je,lineStart:function(){jh.point=jq},lineEnd:function(){L2&&nx(ex,rx),jh.point=Je},polygonStart:function(){L2=!0},polygonEnd:function(){L2=null},result:function(){var t=+M2;return M2=new _r,t}};function jq(t,e){jh.point=nx,ex=tc=t,rx=ec=e}function nx(t,e){tc-=t,ec-=e,M2.add(Sr(tc*tc+ec*ec)),tc=t,ec=e}const ix=jh;function ax(){this._string=[]}ax.prototype={_radius:4.5,_circle:sx(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:{this._string.push("M",t,",",e),this._point=1;break}case 1:{this._string.push("L",t,",",e);break}default:{this._circle==null&&(this._circle=sx(this._radius)),this._string.push("M",t,",",e,this._circle);break}}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}else return null}};function sx(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function $q(t,e){var r=4.5,n,i;function a(s){return s&&(typeof r=="function"&&i.pointRadius(+r.apply(this,arguments)),ti(s,n(i))),i.result()}return a.area=function(s){return ti(s,n(j6)),j6.result()},a.measure=function(s){return ti(s,n(ix)),ix.result()},a.bounds=function(s){return ti(s,n(Wh)),Wh.result()},a.centroid=function(s){return ti(s,n(J6)),J6.result()},a.projection=function(s){return arguments.length?(n=s==null?(t=null,Kl):(t=s).stream,a):t},a.context=function(s){return arguments.length?(i=s==null?(e=null,new ax):new tx(e=s),typeof r!="function"&&i.pointRadius(r),a):e},a.pointRadius=function(s){return arguments.length?(r=typeof s=="function"?s:(i.pointRadius(+s),+s),a):r},a.projection(t).context(e)}function Xq(t){return{stream:rc(t)}}function rc(t){return function(e){var r=new R2;for(var n in t)r[n]=t[n];return r.stream=e,r}}function R2(){}R2.prototype={constructor:R2,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};function I2(t,e,r){var n=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),n!=null&&t.clipExtent(null),ti(r,t.stream(Wh)),e(Wh.result()),n!=null&&t.clipExtent(n),t}function $h(t,e,r){return I2(t,function(n){var i=e[1][0]-e[0][0],a=e[1][1]-e[0][1],s=Math.min(i/(n[1][0]-n[0][0]),a/(n[1][1]-n[0][1])),o=+e[0][0]+(i-s*(n[1][0]+n[0][0]))/2,l=+e[0][1]+(a-s*(n[1][1]+n[0][1]))/2;t.scale(150*s).translate([o,l])},r)}function N2(t,e,r){return $h(t,[[0,0],e],r)}function B2(t,e,r){return I2(t,function(n){var i=+e,a=i/(n[1][0]-n[0][0]),s=(i-a*(n[1][0]+n[0][0]))/2,o=-a*n[0][1];t.scale(150*a).translate([s,o])},r)}function D2(t,e,r){return I2(t,function(n){var i=+e,a=i/(n[1][1]-n[0][1]),s=-a*n[0][0],o=(i-a*(n[1][1]+n[0][1]))/2;t.scale(150*a).translate([s,o])},r)}var ox=16,Kq=Kt(30*re);function lx(t,e){return+e?Qq(t,e):Zq(t)}function Zq(t){return rc({point:function(e,r){e=t(e,r),this.stream.point(e[0],e[1])}})}function Qq(t,e){function r(n,i,a,s,o,l,u,h,d,f,p,m,_,y){var b=u-n,x=h-i,k=b*b+x*x;if(k>4*e&&_--){var T=s+f,C=o+p,M=l+m,S=Sr(T*T+C*C+M*M),R=tn(M/=S),A=Ne(Ne(M)-1)<te||Ne(a-d)<te?(a+d)/2:Jr(C,T),L=t(A,R),v=L[0],B=L[1],w=v-n,D=B-i,N=x*w-b*D;(N*N/k>e||Ne((b*w+x*D)/k-.5)>.3||s*f+o*p+l*m<Kq)&&(r(n,i,a,s,o,l,v,B,A,T/=S,C/=S,M,_,y),y.point(v,B),r(v,B,A,T,C,M,u,h,d,f,p,m,_,y))}}return function(n){var i,a,s,o,l,u,h,d,f,p,m,_,y={point:b,lineStart:x,lineEnd:T,polygonStart:function(){n.polygonStart(),y.lineStart=C},polygonEnd:function(){n.polygonEnd(),y.lineStart=x}};function b(R,A){R=t(R,A),n.point(R[0],R[1])}function x(){d=NaN,y.point=k,n.lineStart()}function k(R,A){var L=Cs([R,A]),v=t(R,A);r(d,f,h,p,m,_,d=v[0],f=v[1],h=R,p=L[0],m=L[1],_=L[2],ox,n),n.point(d,f)}function T(){y.point=b,n.lineEnd()}function C(){x(),y.point=M,y.lineEnd=S}function M(R,A){k(i=R,A),a=d,s=f,o=p,l=m,u=_,y.point=k}function S(){r(d,f,h,p,m,_,a,s,i,o,l,u,ox,n),y.lineEnd=T,T()}return y}}var Jq=rc({point:function(t,e){this.stream.point(t*re,e*re)}});function tV(t){return rc({point:function(e,r){var n=t(e,r);return this.stream.point(n[0],n[1])}})}function eV(t,e,r,n,i){function a(s,o){return s*=n,o*=i,[e+t*s,r-t*o]}return a.invert=function(s,o){return[(s-e)/t*n,(r-o)/t*i]},a}function cx(t,e,r,n,i,a){if(!a)return eV(t,e,r,n,i);var s=Kt(a),o=Ht(a),l=s*t,u=o*t,h=s/t,d=o/t,f=(o*r-s*e)/t,p=(o*e+s*r)/t;function m(_,y){return _*=n,y*=i,[l*_-u*y+e,r-u*_-l*y]}return m.invert=function(_,y){return[n*(h*_-d*y+f),i*(p-d*_-h*y)]},m}function Li(t){return O2(function(){return t})()}function O2(t){var e,r=150,n=480,i=250,a=0,s=0,o=0,l=0,u=0,h,d=0,f=1,p=1,m=null,_=m2,y=null,b,x,k,T=Kl,C=.5,M,S,R,A,L;function v(N){return R(N[0]*re,N[1]*re)}function B(N){return N=R.invert(N[0],N[1]),N&&[N[0]*Ue,N[1]*Ue]}v.stream=function(N){return A&&L===N?A:A=Jq(tV(h)(_(M(T(L=N)))))},v.preclip=function(N){return arguments.length?(_=N,m=void 0,D()):_},v.postclip=function(N){return arguments.length?(T=N,y=b=x=k=null,D()):T},v.clipAngle=function(N){return arguments.length?(_=+N?N6(m=N*re):(m=null,m2),D()):m*Ue},v.clipExtent=function(N){return arguments.length?(T=N==null?(y=b=x=k=null,Kl):Fh(y=+N[0][0],b=+N[0][1],x=+N[1][0],k=+N[1][1]),D()):y==null?null:[[y,b],[x,k]]},v.scale=function(N){return arguments.length?(r=+N,w()):r},v.translate=function(N){return arguments.length?(n=+N[0],i=+N[1],w()):[n,i]},v.center=function(N){return arguments.length?(a=N[0]%360*re,s=N[1]%360*re,w()):[a*Ue,s*Ue]},v.rotate=function(N){return arguments.length?(o=N[0]%360*re,l=N[1]%360*re,u=N.length>2?N[2]%360*re:0,w()):[o*Ue,l*Ue,u*Ue]},v.angle=function(N){return arguments.length?(d=N%360*re,w()):d*Ue},v.reflectX=function(N){return arguments.length?(f=N?-1:1,w()):f<0},v.reflectY=function(N){return arguments.length?(p=N?-1:1,w()):p<0},v.precision=function(N){return arguments.length?(M=lx(S,C=N*N),D()):Sr(C)},v.fitExtent=function(N,z){return $h(v,N,z)},v.fitSize=function(N,z){return N2(v,N,z)},v.fitWidth=function(N,z){return B2(v,N,z)},v.fitHeight=function(N,z){return D2(v,N,z)};function w(){var N=cx(r,0,0,f,p,d).apply(null,e(a,s)),z=cx(r,n-N[0],i-N[1],f,p,d);return h=g2(o,l,u),S=d2(e,z),R=d2(h,S),M=lx(S,C),D()}function D(){return A=L=null,v}return function(){return e=t.apply(this,arguments),v.invert=e.invert&&B,w()}}function F2(t){var e=0,r=Ae/3,n=O2(t),i=n(e,r);return i.parallels=function(a){return arguments.length?n(e=a[0]*re,r=a[1]*re):[e*Ue,r*Ue]},i}function rV(t){var e=Kt(t);function r(n,i){return[n*e,Ht(i)/e]}return r.invert=function(n,i){return[n/e,tn(i*e)]},r}function ux(t,e){var r=Ht(t),n=(r+Ht(e))/2;if(Ne(n)<te)return rV(t);var i=1+r*(2*n-r),a=Sr(i)/n;function s(o,l){var u=Sr(i-2*n*Ht(l))/n;return[u*Ht(o*=n),a-u*Kt(o)]}return s.invert=function(o,l){var u=a-l,h=Jr(o,Ne(u))*Dn(u);return u*n<0&&(h-=Ae*Dn(o)*Dn(u)),[h/n,tn((i-(o*o+u*u)*n*n)/(2*n))]},s}function Xh(){return F2(ux).scale(155.424).center([0,33.6442])}function hx(){return Xh().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}function nV(t){var e=t.length;return{point:function(r,n){for(var i=-1;++i<e;)t[i].point(r,n)},sphere:function(){for(var r=-1;++r<e;)t[r].sphere()},lineStart:function(){for(var r=-1;++r<e;)t[r].lineStart()},lineEnd:function(){for(var r=-1;++r<e;)t[r].lineEnd()},polygonStart:function(){for(var r=-1;++r<e;)t[r].polygonStart()},polygonEnd:function(){for(var r=-1;++r<e;)t[r].polygonEnd()}}}function iV(){var t,e,r=hx(),n,i=Xh().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a,s=Xh().rotate([157,0]).center([-3,19.9]).parallels([8,18]),o,l,u={point:function(f,p){l=[f,p]}};function h(f){var p=f[0],m=f[1];return l=null,n.point(p,m),l||(a.point(p,m),l)||(o.point(p,m),l)}h.invert=function(f){var p=r.scale(),m=r.translate(),_=(f[0]-m[0])/p,y=(f[1]-m[1])/p;return(y>=.12&&y<.234&&_>=-.425&&_<-.214?i:y>=.166&&y<.234&&_>=-.214&&_<-.115?s:r).invert(f)},h.stream=function(f){return t&&e===f?t:t=nV([r.stream(e=f),i.stream(f),s.stream(f)])},h.precision=function(f){return arguments.length?(r.precision(f),i.precision(f),s.precision(f),d()):r.precision()},h.scale=function(f){return arguments.length?(r.scale(f),i.scale(f*.35),s.scale(f),h.translate(r.translate())):r.scale()},h.translate=function(f){if(!arguments.length)return r.translate();var p=r.scale(),m=+f[0],_=+f[1];return n=r.translate(f).clipExtent([[m-.455*p,_-.238*p],[m+.455*p,_+.238*p]]).stream(u),a=i.translate([m-.307*p,_+.201*p]).clipExtent([[m-.425*p+te,_+.12*p+te],[m-.214*p-te,_+.234*p-te]]).stream(u),o=s.translate([m-.205*p,_+.212*p]).clipExtent([[m-.214*p+te,_+.166*p+te],[m-.115*p-te,_+.234*p-te]]).stream(u),d()},h.fitExtent=function(f,p){return $h(h,f,p)},h.fitSize=function(f,p){return N2(h,f,p)},h.fitWidth=function(f,p){return B2(h,f,p)},h.fitHeight=function(f,p){return D2(h,f,p)};function d(){return t=e=null,h}return h.scale(1070)}function fx(t){return function(e,r){var n=Kt(e),i=Kt(r),a=t(n*i);return a===1/0?[2,0]:[a*i*Ht(e),a*Ht(r)]}}function nc(t){return function(e,r){var n=Sr(e*e+r*r),i=t(n),a=Ht(i),s=Kt(i);return[Jr(e*a,n*s),tn(n&&r*a/n)]}}var P2=fx(function(t){return Sr(2/(1+t))});P2.invert=nc(function(t){return 2*tn(t/2)});function aV(){return Li(P2).scale(124.75).clipAngle(180-.001)}var q2=fx(function(t){return(t=r6(t))&&t/Ht(t)});q2.invert=nc(function(t){return t});function sV(){return Li(q2).scale(79.4188).clipAngle(180-.001)}function ic(t,e){return[t,_h(r2((rr+e)/2))]}ic.invert=function(t,e){return[t,2*So(e6(e))-rr]};function oV(){return dx(ic).scale(961/Qr)}function dx(t){var e=Li(t),r=e.center,n=e.scale,i=e.translate,a=e.clipExtent,s=null,o,l,u;e.scale=function(d){return arguments.length?(n(d),h()):n()},e.translate=function(d){return arguments.length?(i(d),h()):i()},e.center=function(d){return arguments.length?(r(d),h()):r()},e.clipExtent=function(d){return arguments.length?(d==null?s=o=l=u=null:(s=+d[0][0],o=+d[0][1],l=+d[1][0],u=+d[1][1]),h()):s==null?null:[[s,o],[l,u]]};function h(){var d=Ae*n(),f=e(E6(e.rotate()).invert([0,0]));return a(s==null?[[f[0]-d,f[1]-d],[f[0]+d,f[1]+d]]:t===ic?[[Math.max(f[0]-d,s),o],[Math.min(f[0]+d,l),u]]:[[s,Math.max(f[1]-d,o)],[l,Math.min(f[1]+d,u)]])}return h()}function Kh(t){return r2((rr+t)/2)}function px(t,e){var r=Kt(t),n=t===e?Ht(t):_h(r/Kt(e))/_h(Kh(e)/Kh(t)),i=r*e2(Kh(t),n)/n;if(!n)return ic;function a(s,o){i>0?o<-rr+te&&(o=-rr+te):o>rr-te&&(o=rr-te);var l=i/e2(Kh(o),n);return[l*Ht(n*s),i-l*Kt(n*s)]}return a.invert=function(s,o){var l=i-o,u=Dn(n)*Sr(s*s+l*l),h=Jr(s,Ne(l))*Dn(l);return l*n<0&&(h-=Ae*Dn(s)*Dn(l)),[h/n,2*So(e2(i/u,1/n))-rr]},a}function lV(){return F2(px).scale(109.5).parallels([30,30])}function ac(t,e){return[t,e]}ac.invert=ac;function cV(){return Li(ac).scale(152.63)}function gx(t,e){var r=Kt(t),n=t===e?Ht(t):(r-Kt(e))/(e-t),i=r/n+t;if(Ne(n)<te)return ac;function a(s,o){var l=i-o,u=n*s;return[l*Ht(u),i-l*Kt(u)]}return a.invert=function(s,o){var l=i-o,u=Jr(s,Ne(l))*Dn(l);return l*n<0&&(u-=Ae*Dn(s)*Dn(l)),[u/n,i-Dn(n)*Sr(s*s+l*l)]},a}function uV(){return F2(gx).scale(131.154).center([0,13.9389])}var sc=1.340264,oc=-.081106,lc=893e-6,cc=.003796,Zh=Sr(3)/2,hV=12;function V2(t,e){var r=tn(Zh*Ht(e)),n=r*r,i=n*n*n;return[t*Kt(r)/(Zh*(sc+3*oc*n+i*(7*lc+9*cc*n))),r*(sc+oc*n+i*(lc+cc*n))]}V2.invert=function(t,e){for(var r=e,n=r*r,i=n*n*n,a=0,s,o,l;a<hV&&(o=r*(sc+oc*n+i*(lc+cc*n))-e,l=sc+3*oc*n+i*(7*lc+9*cc*n),r-=s=o/l,n=r*r,i=n*n*n,!(Ne(s)<Hl));++a);return[Zh*t*(sc+3*oc*n+i*(7*lc+9*cc*n))/Kt(r),tn(Ht(r)/Zh)]};function fV(){return Li(V2).scale(177.158)}function z2(t,e){var r=Kt(e),n=Kt(t)*r;return[r*Ht(t)/n,Ht(e)/n]}z2.invert=nc(So);function dV(){return Li(z2).scale(144.049).clipAngle(60)}function pV(){var t=1,e=0,r=0,n=1,i=1,a=0,s,o,l=null,u,h,d,f=1,p=1,m=rc({point:function(T,C){var M=k([T,C]);this.stream.point(M[0],M[1])}}),_=Kl,y,b;function x(){return f=t*n,p=t*i,y=b=null,k}function k(T){var C=T[0]*f,M=T[1]*p;if(a){var S=M*s-C*o;C=C*s+M*o,M=S}return[C+e,M+r]}return k.invert=function(T){var C=T[0]-e,M=T[1]-r;if(a){var S=M*s+C*o;C=C*s-M*o,M=S}return[C/f,M/p]},k.stream=function(T){return y&&b===T?y:y=m(_(b=T))},k.postclip=function(T){return arguments.length?(_=T,l=u=h=d=null,x()):_},k.clipExtent=function(T){return arguments.length?(_=T==null?(l=u=h=d=null,Kl):Fh(l=+T[0][0],u=+T[0][1],h=+T[1][0],d=+T[1][1]),x()):l==null?null:[[l,u],[h,d]]},k.scale=function(T){return arguments.length?(t=+T,x()):t},k.translate=function(T){return arguments.length?(e=+T[0],r=+T[1],x()):[e,r]},k.angle=function(T){return arguments.length?(a=T%360*re,o=Ht(a),s=Kt(a),x()):a*Ue},k.reflectX=function(T){return arguments.length?(n=T?-1:1,x()):n<0},k.reflectY=function(T){return arguments.length?(i=T?-1:1,x()):i<0},k.fitExtent=function(T,C){return $h(k,T,C)},k.fitSize=function(T,C){return N2(k,T,C)},k.fitWidth=function(T,C){return B2(k,T,C)},k.fitHeight=function(T,C){return D2(k,T,C)},k}function Y2(t,e){var r=e*e,n=r*r;return[t*(.8707-.131979*r+n*(-.013791+n*(.003971*r-.001529*n))),e*(1.007226+r*(.015085+n*(-.044475+.028874*r-.005916*n)))]}Y2.invert=function(t,e){var r=e,n=25,i;do{var a=r*r,s=a*a;r-=i=(r*(1.007226+a*(.015085+s*(-.044475+.028874*a-.005916*s)))-e)/(1.007226+a*(.015085*3+s*(-.044475*7+.028874*9*a-.005916*11*s)))}while(Ne(i)>te&&--n>0);return[t/(.8707+(a=r*r)*(-.131979+a*(-.013791+a*a*a*(.003971-.001529*a)))),r]};function gV(){return Li(Y2).scale(175.295)}function U2(t,e){return[Kt(e)*Ht(t),Ht(e)]}U2.invert=nc(tn);function yV(){return Li(U2).scale(249.5).clipAngle(90+te)}function W2(t,e){var r=Kt(e),n=1+Kt(t)*r;return[r*Ht(t)/n,Ht(e)/n]}W2.invert=nc(function(t){return 2*So(t)});function mV(){return Li(W2).scale(250).clipAngle(142)}function H2(t,e){return[_h(r2((rr+e)/2)),-t]}H2.invert=function(t,e){return[-e,2*So(e6(t))-rr]};function bV(){var t=dx(H2),e=t.center,r=t.rotate;return t.center=function(n){return arguments.length?e([-n[1],n[0]]):(n=e(),[n[1],-n[0]])},t.rotate=function(n){return arguments.length?r([n[0],n[1],n.length>2?n[2]+90:90]):(n=r(),[n[0],n[1],n[2]-90])},r([0,0,90]).scale(159.155)}function _V(t,e){return t.parent===e.parent?1:2}function vV(t){return t.reduce(xV,0)/t.length}function xV(t,e){return t+e.x}function kV(t){return 1+t.reduce(wV,0)}function wV(t,e){return Math.max(t,e.y)}function TV(t){for(var e;e=t.children;)t=e[0];return t}function EV(t){for(var e;e=t.children;)t=e[e.length-1];return t}function CV(){var t=_V,e=1,r=1,n=!1;function i(a){var s,o=0;a.eachAfter(function(f){var p=f.children;p?(f.x=vV(p),f.y=kV(p)):(f.x=s?o+=t(f,s):0,f.y=0,s=f)});var l=TV(a),u=EV(a),h=l.x-t(l,u)/2,d=u.x+t(u,l)/2;return a.eachAfter(n?function(f){f.x=(f.x-a.x)*e,f.y=(a.y-f.y)*r}:function(f){f.x=(f.x-h)/(d-h)*e,f.y=(1-(a.y?f.y/a.y:1))*r})}return i.separation=function(a){return arguments.length?(t=a,i):t},i.size=function(a){return arguments.length?(n=!1,e=+a[0],r=+a[1],i):n?null:[e,r]},i.nodeSize=function(a){return arguments.length?(n=!0,e=+a[0],r=+a[1],i):n?[e,r]:null},i}function SV(t){var e=0,r=t.children,n=r&&r.length;if(!n)e=1;else for(;--n>=0;)e+=r[n].value;t.value=e}function AV(){return this.eachAfter(SV)}function MV(t,e){let r=-1;for(const n of this)t.call(e,n,++r,this);return this}function LV(t,e){for(var r=this,n=[r],i,a,s=-1;r=n.pop();)if(t.call(e,r,++s,this),i=r.children)for(a=i.length-1;a>=0;--a)n.push(i[a]);return this}function RV(t,e){for(var r=this,n=[r],i=[],a,s,o,l=-1;r=n.pop();)if(i.push(r),a=r.children)for(s=0,o=a.length;s<o;++s)n.push(a[s]);for(;r=i.pop();)t.call(e,r,++l,this);return this}function IV(t,e){let r=-1;for(const n of this)if(t.call(e,n,++r,this))return n}function NV(t){return this.eachAfter(function(e){for(var r=+t(e.data)||0,n=e.children,i=n&&n.length;--i>=0;)r+=n[i].value;e.value=r})}function BV(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})}function DV(t){for(var e=this,r=OV(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var i=n.length;t!==r;)n.splice(i,0,t),t=t.parent;return n}function OV(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),i=null;for(t=r.pop(),e=n.pop();t===e;)i=t,t=r.pop(),e=n.pop();return i}function FV(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e}function PV(){return Array.from(this)}function qV(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t}function VV(){var t=this,e=[];return t.each(function(r){r!==t&&e.push({source:r.parent,target:r})}),e}function*zV(){var t=this,e,r=[t],n,i,a;do for(e=r.reverse(),r=[];t=e.pop();)if(yield t,n=t.children)for(i=0,a=n.length;i<a;++i)r.push(n[i]);while(r.length)}function G2(t,e){t instanceof Map?(t=[void 0,t],e===void 0&&(e=WV)):e===void 0&&(e=UV);for(var r=new Ms(t),n,i=[r],a,s,o,l;n=i.pop();)if((s=e(n.data))&&(l=(s=Array.from(s)).length))for(n.children=s,o=l-1;o>=0;--o)i.push(a=s[o]=new Ms(s[o])),a.parent=n,a.depth=n.depth+1;return r.eachBefore(yx)}function YV(){return G2(this).eachBefore(HV)}function UV(t){return t.children}function WV(t){return Array.isArray(t)?t[1]:null}function HV(t){t.data.value!==void 0&&(t.value=t.data.value),t.data=t.data.data}function yx(t){var e=0;do t.height=e;while((t=t.parent)&&t.height<++e)}function Ms(t){this.data=t,this.depth=this.height=0,this.parent=null}Ms.prototype=G2.prototype={constructor:Ms,count:AV,each:MV,eachAfter:RV,eachBefore:LV,find:IV,sum:NV,sort:BV,path:DV,ancestors:FV,descendants:PV,leaves:qV,links:VV,copy:YV,[Symbol.iterator]:zV};function Qh(t){return t==null?null:mx(t)}function mx(t){if(typeof t!="function")throw new Error;return t}function Ls(){return 0}function Bo(t){return function(){return t}}const GV=1664525,jV=1013904223,bx=4294967296;function j2(){let t=1;return()=>(t=(GV*t+jV)%bx)/bx}function $V(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function XV(t,e){let r=t.length,n,i;for(;r;)i=e()*r--|0,n=t[r],t[r]=t[i],t[i]=n;return t}function KV(t){return _x(t,j2())}function _x(t,e){for(var r=0,n=(t=XV(Array.from(t),e)).length,i=[],a,s;r<n;)a=t[r],s&&vx(s,a)?++r:(s=QV(i=ZV(i,a)),r=0);return s}function ZV(t,e){var r,n;if($2(e,t))return[e];for(r=0;r<t.length;++r)if(Jh(e,t[r])&&$2(uc(t[r],e),t))return[t[r],e];for(r=0;r<t.length-1;++r)for(n=r+1;n<t.length;++n)if(Jh(uc(t[r],t[n]),e)&&Jh(uc(t[r],e),t[n])&&Jh(uc(t[n],e),t[r])&&$2(xx(t[r],t[n],e),t))return[t[r],t[n],e];throw new Error}function Jh(t,e){var r=t.r-e.r,n=e.x-t.x,i=e.y-t.y;return r<0||r*r<n*n+i*i}function vx(t,e){var r=t.r-e.r+Math.max(t.r,e.r,1)*1e-9,n=e.x-t.x,i=e.y-t.y;return r>0&&r*r>n*n+i*i}function $2(t,e){for(var r=0;r<e.length;++r)if(!vx(t,e[r]))return!1;return!0}function QV(t){switch(t.length){case 1:return JV(t[0]);case 2:return uc(t[0],t[1]);case 3:return xx(t[0],t[1],t[2])}}function JV(t){return{x:t.x,y:t.y,r:t.r}}function uc(t,e){var r=t.x,n=t.y,i=t.r,a=e.x,s=e.y,o=e.r,l=a-r,u=s-n,h=o-i,d=Math.sqrt(l*l+u*u);return{x:(r+a+l/d*h)/2,y:(n+s+u/d*h)/2,r:(d+i+o)/2}}function xx(t,e,r){var n=t.x,i=t.y,a=t.r,s=e.x,o=e.y,l=e.r,u=r.x,h=r.y,d=r.r,f=n-s,p=n-u,m=i-o,_=i-h,y=l-a,b=d-a,x=n*n+i*i-a*a,k=x-s*s-o*o+l*l,T=x-u*u-h*h+d*d,C=p*m-f*_,M=(m*T-_*k)/(C*2)-n,S=(_*y-m*b)/C,R=(p*k-f*T)/(C*2)-i,A=(f*b-p*y)/C,L=S*S+A*A-1,v=2*(a+M*S+R*A),B=M*M+R*R-a*a,w=-(Math.abs(L)>1e-6?(v+Math.sqrt(v*v-4*L*B))/(2*L):B/v);return{x:n+M+S*w,y:i+R+A*w,r:w}}function kx(t,e,r){var n=t.x-e.x,i,a,s=t.y-e.y,o,l,u=n*n+s*s;u?(a=e.r+r.r,a*=a,l=t.r+r.r,l*=l,a>l?(i=(u+l-a)/(2*u),o=Math.sqrt(Math.max(0,l/u-i*i)),r.x=t.x-i*n-o*s,r.y=t.y-i*s+o*n):(i=(u+a-l)/(2*u),o=Math.sqrt(Math.max(0,a/u-i*i)),r.x=e.x+i*n-o*s,r.y=e.y+i*s+o*n)):(r.x=e.x+r.r,r.y=e.y)}function wx(t,e){var r=t.r+e.r-1e-6,n=e.x-t.x,i=e.y-t.y;return r>0&&r*r>n*n+i*i}function Tx(t){var e=t._,r=t.next._,n=e.r+r.r,i=(e.x*r.r+r.x*e.r)/n,a=(e.y*r.r+r.y*e.r)/n;return i*i+a*a}function tf(t){this._=t,this.next=null,this.previous=null}function Ex(t,e){if(!(a=(t=$V(t)).length))return 0;var r,n,i,a,s,o,l,u,h,d,f;if(r=t[0],r.x=0,r.y=0,!(a>1))return r.r;if(n=t[1],r.x=-n.r,n.x=r.r,n.y=0,!(a>2))return r.r+n.r;kx(n,r,i=t[2]),r=new tf(r),n=new tf(n),i=new tf(i),r.next=i.previous=n,n.next=r.previous=i,i.next=n.previous=r;t:for(l=3;l<a;++l){kx(r._,n._,i=t[l]),i=new tf(i),u=n.next,h=r.previous,d=n._.r,f=r._.r;do if(d<=f){if(wx(u._,i._)){n=u,r.next=n,n.previous=r,--l;continue t}d+=u._.r,u=u.next}else{if(wx(h._,i._)){r=h,r.next=n,n.previous=r,--l;continue t}f+=h._.r,h=h.previous}while(u!==h.next);for(i.previous=r,i.next=n,r.next=n.previous=n=i,s=Tx(r);(i=i.next)!==n;)(o=Tx(i))<s&&(r=i,s=o);n=r.next}for(r=[n._],i=n;(i=i.next)!==n;)r.push(i._);for(i=_x(r,e),l=0;l<a;++l)r=t[l],r.x-=i.x,r.y-=i.y;return i.r}function tz(t){return Ex(t,j2()),t}function ez(t){return Math.sqrt(t.value)}function rz(){var t=null,e=1,r=1,n=Ls;function i(a){const s=j2();return a.x=e/2,a.y=r/2,t?a.eachBefore(Cx(t)).eachAfter(X2(n,.5,s)).eachBefore(Sx(1)):a.eachBefore(Cx(ez)).eachAfter(X2(Ls,1,s)).eachAfter(X2(n,a.r/Math.min(e,r),s)).eachBefore(Sx(Math.min(e,r)/(2*a.r))),a}return i.radius=function(a){return arguments.length?(t=Qh(a),i):t},i.size=function(a){return arguments.length?(e=+a[0],r=+a[1],i):[e,r]},i.padding=function(a){return arguments.length?(n=typeof a=="function"?a:Bo(+a),i):n},i}function Cx(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function X2(t,e,r){return function(n){if(i=n.children){var i,a,s=i.length,o=t(n)*e||0,l;if(o)for(a=0;a<s;++a)i[a].r+=o;if(l=Ex(i,r),o)for(a=0;a<s;++a)i[a].r-=o;n.r=l+o}}}function Sx(t){return function(e){var r=e.parent;e.r*=t,r&&(e.x=r.x+t*e.x,e.y=r.y+t*e.y)}}function Ax(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function hc(t,e,r,n,i){for(var a=t.children,s,o=-1,l=a.length,u=t.value&&(n-e)/t.value;++o<l;)s=a[o],s.y0=r,s.y1=i,s.x0=e,s.x1=e+=s.value*u}function nz(){var t=1,e=1,r=0,n=!1;function i(s){var o=s.height+1;return s.x0=s.y0=r,s.x1=t,s.y1=e/o,s.eachBefore(a(e,o)),n&&s.eachBefore(Ax),s}function a(s,o){return function(l){l.children&&hc(l,l.x0,s*(l.depth+1)/o,l.x1,s*(l.depth+2)/o);var u=l.x0,h=l.y0,d=l.x1-r,f=l.y1-r;d<u&&(u=d=(u+d)/2),f<h&&(h=f=(h+f)/2),l.x0=u,l.y0=h,l.x1=d,l.y1=f}}return i.round=function(s){return arguments.length?(n=!!s,i):n},i.size=function(s){return arguments.length?(t=+s[0],e=+s[1],i):[t,e]},i.padding=function(s){return arguments.length?(r=+s,i):r},i}var iz={depth:-1},Mx={},K2={};function az(t){return t.id}function sz(t){return t.parentId}function oz(){var t=az,e=sz,r;function n(i){var a=Array.from(i),s=t,o=e,l,u,h,d,f,p,m,_,y=new Map;if(r!=null){const b=a.map((T,C)=>lz(r(T,C,i))),x=b.map(Lx),k=new Set(b).add("");for(const T of x)k.has(T)||(k.add(T),b.push(T),x.push(Lx(T)),a.push(K2));s=(T,C)=>b[C],o=(T,C)=>x[C]}for(h=0,l=a.length;h<l;++h)u=a[h],p=a[h]=new Ms(u),(m=s(u,h,i))!=null&&(m+="")&&(_=p.id=m,y.set(_,y.has(_)?Mx:p)),(m=o(u,h,i))!=null&&(m+="")&&(p.parent=m);for(h=0;h<l;++h)if(p=a[h],m=p.parent){if(f=y.get(m),!f)throw new Error("missing: "+m);if(f===Mx)throw new Error("ambiguous: "+m);f.children?f.children.push(p):f.children=[p],p.parent=f}else{if(d)throw new Error("multiple roots");d=p}if(!d)throw new Error("no root");if(r!=null){for(;d.data===K2&&d.children.length===1;)d=d.children[0],--l;for(let b=a.length-1;b>=0&&(p=a[b],p.data===K2);--b)p.data=null}if(d.parent=iz,d.eachBefore(function(b){b.depth=b.parent.depth+1,--l}).eachBefore(yx),d.parent=null,l>0)throw new Error("cycle");return d}return n.id=function(i){return arguments.length?(t=Qh(i),n):t},n.parentId=function(i){return arguments.length?(e=Qh(i),n):e},n.path=function(i){return arguments.length?(r=Qh(i),n):r},n}function lz(t){t=`${t}`;let e=t.length;return Z2(t,e-1)&&!Z2(t,e-2)&&(t=t.slice(0,-1)),t[0]==="/"?t:`/${t}`}function Lx(t){let e=t.length;if(e<2)return"";for(;--e>1&&!Z2(t,e););return t.slice(0,e)}function Z2(t,e){if(t[e]==="/"){let r=0;for(;e>0&&t[--e]==="\\";)++r;if((r&1)===0)return!0}return!1}function cz(t,e){return t.parent===e.parent?1:2}function Q2(t){var e=t.children;return e?e[0]:t.t}function J2(t){var e=t.children;return e?e[e.length-1]:t.t}function uz(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function hz(t){for(var e=0,r=0,n=t.children,i=n.length,a;--i>=0;)a=n[i],a.z+=e,a.m+=e,e+=a.s+(r+=a.c)}function fz(t,e,r){return t.a.parent===e.parent?t.a:r}function ef(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}ef.prototype=Object.create(Ms.prototype);function dz(t){for(var e=new ef(t,0),r,n=[e],i,a,s,o;r=n.pop();)if(a=r._.children)for(r.children=new Array(o=a.length),s=o-1;s>=0;--s)n.push(i=r.children[s]=new ef(a[s],s)),i.parent=r;return(e.parent=new ef(null,0)).children=[e],e}function pz(){var t=cz,e=1,r=1,n=null;function i(u){var h=dz(u);if(h.eachAfter(a),h.parent.m=-h.z,h.eachBefore(s),n)u.eachBefore(l);else{var d=u,f=u,p=u;u.eachBefore(function(x){x.x<d.x&&(d=x),x.x>f.x&&(f=x),x.depth>p.depth&&(p=x)});var m=d===f?1:t(d,f)/2,_=m-d.x,y=e/(f.x+m+_),b=r/(p.depth||1);u.eachBefore(function(x){x.x=(x.x+_)*y,x.y=x.depth*b})}return u}function a(u){var h=u.children,d=u.parent.children,f=u.i?d[u.i-1]:null;if(h){hz(u);var p=(h[0].z+h[h.length-1].z)/2;f?(u.z=f.z+t(u._,f._),u.m=u.z-p):u.z=p}else f&&(u.z=f.z+t(u._,f._));u.parent.A=o(u,f,u.parent.A||d[0])}function s(u){u._.x=u.z+u.parent.m,u.m+=u.parent.m}function o(u,h,d){if(h){for(var f=u,p=u,m=h,_=f.parent.children[0],y=f.m,b=p.m,x=m.m,k=_.m,T;m=J2(m),f=Q2(f),m&&f;)_=Q2(_),p=J2(p),p.a=u,T=m.z+x-f.z-y+t(m._,f._),T>0&&(uz(fz(m,u,d),u,T),y+=T,b+=T),x+=m.m,y+=f.m,k+=_.m,b+=p.m;m&&!J2(p)&&(p.t=m,p.m+=x-b),f&&!Q2(_)&&(_.t=f,_.m+=y-k,d=u)}return d}function l(u){u.x*=e,u.y=u.depth*r}return i.separation=function(u){return arguments.length?(t=u,i):t},i.size=function(u){return arguments.length?(n=!1,e=+u[0],r=+u[1],i):n?null:[e,r]},i.nodeSize=function(u){return arguments.length?(n=!0,e=+u[0],r=+u[1],i):n?[e,r]:null},i}function rf(t,e,r,n,i){for(var a=t.children,s,o=-1,l=a.length,u=t.value&&(i-r)/t.value;++o<l;)s=a[o],s.x0=e,s.x1=n,s.y0=r,s.y1=r+=s.value*u}var Rx=(1+Math.sqrt(5))/2;function Ix(t,e,r,n,i,a){for(var s=[],o=e.children,l,u,h=0,d=0,f=o.length,p,m,_=e.value,y,b,x,k,T,C,M;h<f;){p=i-r,m=a-n;do y=o[d++].value;while(!y&&d<f);for(b=x=y,C=Math.max(m/p,p/m)/(_*t),M=y*y*C,T=Math.max(x/M,M/b);d<f;++d){if(y+=u=o[d].value,u<b&&(b=u),u>x&&(x=u),M=y*y*C,k=Math.max(x/M,M/b),k>T){y-=u;break}T=k}s.push(l={value:y,dice:p<m,children:o.slice(h,d)}),l.dice?hc(l,r,n,i,_?n+=m*y/_:a):rf(l,r,n,_?r+=p*y/_:i,a),_-=y,h=d}return s}const Nx=function t(e){function r(n,i,a,s,o){Ix(e,n,i,a,s,o)}return r.ratio=function(n){return t((n=+n)>1?n:1)},r}(Rx);function gz(){var t=Nx,e=!1,r=1,n=1,i=[0],a=Ls,s=Ls,o=Ls,l=Ls,u=Ls;function h(f){return f.x0=f.y0=0,f.x1=r,f.y1=n,f.eachBefore(d),i=[0],e&&f.eachBefore(Ax),f}function d(f){var p=i[f.depth],m=f.x0+p,_=f.y0+p,y=f.x1-p,b=f.y1-p;y<m&&(m=y=(m+y)/2),b<_&&(_=b=(_+b)/2),f.x0=m,f.y0=_,f.x1=y,f.y1=b,f.children&&(p=i[f.depth+1]=a(f)/2,m+=u(f)-p,_+=s(f)-p,y-=o(f)-p,b-=l(f)-p,y<m&&(m=y=(m+y)/2),b<_&&(_=b=(_+b)/2),t(f,m,_,y,b))}return h.round=function(f){return arguments.length?(e=!!f,h):e},h.size=function(f){return arguments.length?(r=+f[0],n=+f[1],h):[r,n]},h.tile=function(f){return arguments.length?(t=mx(f),h):t},h.padding=function(f){return arguments.length?h.paddingInner(f).paddingOuter(f):h.paddingInner()},h.paddingInner=function(f){return arguments.length?(a=typeof f=="function"?f:Bo(+f),h):a},h.paddingOuter=function(f){return arguments.length?h.paddingTop(f).paddingRight(f).paddingBottom(f).paddingLeft(f):h.paddingTop()},h.paddingTop=function(f){return arguments.length?(s=typeof f=="function"?f:Bo(+f),h):s},h.paddingRight=function(f){return arguments.length?(o=typeof f=="function"?f:Bo(+f),h):o},h.paddingBottom=function(f){return arguments.length?(l=typeof f=="function"?f:Bo(+f),h):l},h.paddingLeft=function(f){return arguments.length?(u=typeof f=="function"?f:Bo(+f),h):u},h}function yz(t,e,r,n,i){var a=t.children,s,o=a.length,l,u=new Array(o+1);for(u[0]=l=s=0;s<o;++s)u[s+1]=l+=a[s].value;h(0,o,t.value,e,r,n,i);function h(d,f,p,m,_,y,b){if(d>=f-1){var x=a[d];x.x0=m,x.y0=_,x.x1=y,x.y1=b;return}for(var k=u[d],T=p/2+k,C=d+1,M=f-1;C<M;){var S=C+M>>>1;u[S]<T?C=S+1:M=S}T-u[C-1]<u[C]-T&&d+1<C&&--C;var R=u[C]-k,A=p-R;if(y-m>b-_){var L=p?(m*A+y*R)/p:y;h(d,C,R,m,_,L,b),h(C,f,A,L,_,y,b)}else{var v=p?(_*A+b*R)/p:b;h(d,C,R,m,_,y,v),h(C,f,A,m,v,y,b)}}}function mz(t,e,r,n,i){(t.depth&1?rf:hc)(t,e,r,n,i)}const bz=function t(e){function r(n,i,a,s,o){if((l=n._squarify)&&l.ratio===e)for(var l,u,h,d,f=-1,p,m=l.length,_=n.value;++f<m;){for(u=l[f],h=u.children,d=u.value=0,p=h.length;d<p;++d)u.value+=h[d].value;u.dice?hc(u,i,a,s,_?a+=(o-a)*u.value/_:o):rf(u,i,a,_?i+=(s-i)*u.value/_:s,o),_-=u.value}else n._squarify=l=Ix(e,n,i,a,s,o),l.ratio=e}return r.ratio=function(n){return t((n=+n)>1?n:1)},r}(Rx);function _z(t){for(var e=-1,r=t.length,n,i=t[r-1],a=0;++e<r;)n=i,i=t[e],a+=n[1]*i[0]-n[0]*i[1];return a/2}function vz(t){for(var e=-1,r=t.length,n=0,i=0,a,s=t[r-1],o,l=0;++e<r;)a=s,s=t[e],l+=o=a[0]*s[1]-s[0]*a[1],n+=(a[0]+s[0])*o,i+=(a[1]+s[1])*o;return l*=3,[n/l,i/l]}function xz(t,e,r){return(e[0]-t[0])*(r[1]-t[1])-(e[1]-t[1])*(r[0]-t[0])}function kz(t,e){return t[0]-e[0]||t[1]-e[1]}function Bx(t){const e=t.length,r=[0,1];let n=2,i;for(i=2;i<e;++i){for(;n>1&&xz(t[r[n-2]],t[r[n-1]],t[i])<=0;)--n;r[n++]=i}return r.slice(0,n)}function wz(t){if((r=t.length)<3)return null;var e,r,n=new Array(r),i=new Array(r);for(e=0;e<r;++e)n[e]=[+t[e][0],+t[e][1],e];for(n.sort(kz),e=0;e<r;++e)i[e]=[n[e][0],-n[e][1]];var a=Bx(n),s=Bx(i),o=s[0]===a[0],l=s[s.length-1]===a[a.length-1],u=[];for(e=a.length-1;e>=0;--e)u.push(t[n[a[e]][2]]);for(e=+o;e<s.length-l;++e)u.push(t[n[s[e]][2]]);return u}function Tz(t,e){for(var r=t.length,n=t[r-1],i=e[0],a=e[1],s=n[0],o=n[1],l,u,h=!1,d=0;d<r;++d)n=t[d],l=n[0],u=n[1],u>a!=o>a&&i<(s-l)*(a-u)/(o-u)+l&&(h=!h),s=l,o=u;return h}function Ez(t){for(var e=-1,r=t.length,n=t[r-1],i,a,s=n[0],o=n[1],l=0;++e<r;)i=s,a=o,n=t[e],s=n[0],o=n[1],i-=s,a-=o,l+=Math.hypot(i,a);return l}const Ir=Math.random,Cz=function t(e){function r(n,i){return n=n==null?0:+n,i=i==null?1:+i,arguments.length===1?(i=n,n=0):i-=n,function(){return e()*i+n}}return r.source=t,r}(Ir),Sz=function t(e){function r(n,i){return arguments.length<2&&(i=n,n=0),n=Math.floor(n),i=Math.floor(i)-n,function(){return Math.floor(e()*i+n)}}return r.source=t,r}(Ir),tp=function t(e){function r(n,i){var a,s;return n=n==null?0:+n,i=i==null?1:+i,function(){var o;if(a!=null)o=a,a=null;else do a=e()*2-1,o=e()*2-1,s=a*a+o*o;while(!s||s>1);return n+i*o*Math.sqrt(-2*Math.log(s)/s)}}return r.source=t,r}(Ir),Az=function t(e){var r=tp.source(e);function n(){var i=r.apply(this,arguments);return function(){return Math.exp(i())}}return n.source=t,n}(Ir),Dx=function t(e){function r(n){return(n=+n)<=0?()=>0:function(){for(var i=0,a=n;a>1;--a)i+=e();return i+a*e()}}return r.source=t,r}(Ir),Mz=function t(e){var r=Dx.source(e);function n(i){if((i=+i)==0)return e;var a=r(i);return function(){return a()/i}}return n.source=t,n}(Ir),Lz=function t(e){function r(n){return function(){return-Math.log1p(-e())/n}}return r.source=t,r}(Ir),Rz=function t(e){function r(n){if((n=+n)<0)throw new RangeError("invalid alpha");return n=1/-n,function(){return Math.pow(1-e(),n)}}return r.source=t,r}(Ir),Iz=function t(e){function r(n){if((n=+n)<0||n>1)throw new RangeError("invalid p");return function(){return Math.floor(e()+n)}}return r.source=t,r}(Ir),Ox=function t(e){function r(n){if((n=+n)<0||n>1)throw new RangeError("invalid p");return n===0?()=>1/0:n===1?()=>1:(n=Math.log1p(-n),function(){return 1+Math.floor(Math.log1p(-e())/n)})}return r.source=t,r}(Ir),ep=function t(e){var r=tp.source(e)();function n(i,a){if((i=+i)<0)throw new RangeError("invalid k");if(i===0)return()=>0;if(a=a==null?1:+a,i===1)return()=>-Math.log1p(-e())*a;var s=(i<1?i+1:i)-1/3,o=1/(3*Math.sqrt(s)),l=i<1?()=>Math.pow(e(),1/i):()=>1;return function(){do{do var u=r(),h=1+o*u;while(h<=0);h*=h*h;var d=1-e()}while(d>=1-.0331*u*u*u*u&&Math.log(d)>=.5*u*u+s*(1-h+Math.log(h)));return s*h*l()*a}}return n.source=t,n}(Ir),Fx=function t(e){var r=ep.source(e);function n(i,a){var s=r(i),o=r(a);return function(){var l=s();return l===0?0:l/(l+o())}}return n.source=t,n}(Ir),Px=function t(e){var r=Ox.source(e),n=Fx.source(e);function i(a,s){return a=+a,(s=+s)>=1?()=>a:s<=0?()=>0:function(){for(var o=0,l=a,u=s;l*u>16&&l*(1-u)>16;){var h=Math.floor((l+1)*u),d=n(h,l-h+1)();d<=u?(o+=h,l-=h,u=(u-d)/(1-d)):(l=h-1,u/=d)}for(var f=u<.5,p=f?u:1-u,m=r(p),_=m(),y=0;_<=l;++y)_+=m();return o+(f?y:l-y)}}return i.source=t,i}(Ir),Nz=function t(e){function r(n,i,a){var s;return(n=+n)==0?s=o=>-Math.log(o):(n=1/n,s=o=>Math.pow(o,n)),i=i==null?0:+i,a=a==null?1:+a,function(){return i+a*s(-Math.log1p(-e()))}}return r.source=t,r}(Ir),Bz=function t(e){function r(n,i){return n=n==null?0:+n,i=i==null?1:+i,function(){return n+i*Math.tan(Math.PI*e())}}return r.source=t,r}(Ir),Dz=function t(e){function r(n,i){return n=n==null?0:+n,i=i==null?1:+i,function(){var a=e();return n+i*Math.log(a/(1-a))}}return r.source=t,r}(Ir),Oz=function t(e){var r=ep.source(e),n=Px.source(e);function i(a){return function(){for(var s=0,o=a;o>16;){var l=Math.floor(.875*o),u=r(l)();if(u>o)return s+n(l-1,o/u)();s+=l,o-=u}for(var h=-Math.log1p(-e()),d=0;h<=o;++d)h-=Math.log1p(-e());return s+d}}return i.source=t,i}(Ir),Fz=1664525,Pz=1013904223,qx=1/4294967296;function qz(t=Math.random()){let e=(0<=t&&t<1?t/qx:Math.abs(t))|0;return()=>(e=Fz*e+Pz|0,qx*(e>>>0))}function On(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}function ta(t,e){switch(arguments.length){case 0:break;case 1:{typeof t=="function"?this.interpolator(t):this.range(t);break}default:{this.domain(t),typeof e=="function"?this.interpolator(e):this.range(e);break}}return this}const rp=Symbol("implicit");function nf(){var t=new kl,e=[],r=[],n=rp;function i(a){let s=t.get(a);if(s===void 0){if(n!==rp)return n;t.set(a,s=e.push(a)-1)}return r[s%r.length]}return i.domain=function(a){if(!arguments.length)return e.slice();e=[],t=new kl;for(const s of a)t.has(s)||t.set(s,e.push(s)-1);return i},i.range=function(a){return arguments.length?(r=Array.from(a),i):r.slice()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return nf(e,r).unknown(n)},On.apply(i,arguments),i}function np(){var t=nf().unknown(void 0),e=t.domain,r=t.range,n=0,i=1,a,s,o=!1,l=0,u=0,h=.5;delete t.unknown;function d(){var f=e().length,p=i<n,m=p?i:n,_=p?n:i;a=(_-m)/Math.max(1,f-l+u*2),o&&(a=Math.floor(a)),m+=(_-m-a*(f-l))*h,s=a*(1-l),o&&(m=Math.round(m),s=Math.round(s));var y=Ca(f).map(function(b){return m+a*b});return r(p?y.reverse():y)}return t.domain=function(f){return arguments.length?(e(f),d()):e()},t.range=function(f){return arguments.length?([n,i]=f,n=+n,i=+i,d()):[n,i]},t.rangeRound=function(f){return[n,i]=f,n=+n,i=+i,o=!0,d()},t.bandwidth=function(){return s},t.step=function(){return a},t.round=function(f){return arguments.length?(o=!!f,d()):o},t.padding=function(f){return arguments.length?(l=Math.min(1,u=+f),d()):l},t.paddingInner=function(f){return arguments.length?(l=Math.min(1,f),d()):l},t.paddingOuter=function(f){return arguments.length?(u=+f,d()):u},t.align=function(f){return arguments.length?(h=Math.max(0,Math.min(1,f)),d()):h},t.copy=function(){return np(e(),[n,i]).round(o).paddingInner(l).paddingOuter(u).align(h)},On.apply(d(),arguments)}function Vx(t){var e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,delete t.paddingOuter,t.copy=function(){return Vx(e())},t}function Vz(){return Vx(np.apply(null,arguments).paddingInner(1))}function zz(t){return function(){return t}}function af(t){return+t}var zx=[0,1];function an(t){return t}function ip(t,e){return(e-=t=+t)?function(r){return(r-t)/e}:zz(isNaN(e)?NaN:.5)}function Yz(t,e){var r;return t>e&&(r=t,t=e,e=r),function(n){return Math.max(t,Math.min(e,n))}}function Uz(t,e,r){var n=t[0],i=t[1],a=e[0],s=e[1];return i<n?(n=ip(i,n),a=r(s,a)):(n=ip(n,i),a=r(a,s)),function(o){return a(n(o))}}function Wz(t,e,r){var n=Math.min(t.length,e.length)-1,i=new Array(n),a=new Array(n),s=-1;for(t[n]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<n;)i[s]=ip(t[s],t[s+1]),a[s]=r(e[s],e[s+1]);return function(o){var l=cs(t,o,1,n)-1;return a[l](i[l](o))}}function fc(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function sf(){var t=zx,e=zx,r=Ma,n,i,a,s=an,o,l,u;function h(){var f=Math.min(t.length,e.length);return s!==an&&(s=Yz(t[0],t[f-1])),o=f>2?Wz:Uz,l=u=null,d}function d(f){return f==null||isNaN(f=+f)?a:(l||(l=o(t.map(n),e,r)))(n(s(f)))}return d.invert=function(f){return s(i((u||(u=o(e,t.map(n),Bn)))(f)))},d.domain=function(f){return arguments.length?(t=Array.from(f,af),h()):t.slice()},d.range=function(f){return arguments.length?(e=Array.from(f),h()):e.slice()},d.rangeRound=function(f){return e=Array.from(f),r=ju,h()},d.clamp=function(f){return arguments.length?(s=f?!0:an,h()):s!==an},d.interpolate=function(f){return arguments.length?(r=f,h()):r},d.unknown=function(f){return arguments.length?(a=f,d):a},function(f,p){return n=f,i=p,h()}}function ap(){return sf()(an,an)}function Yx(t,e,r,n){var i=wl(t,e,r),a;switch(n=Co(n==null?",f":n),n.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return n.precision==null&&!isNaN(a=Jv(i,s))&&(n.precision=a),Jd(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(a=t6(i,Math.max(Math.abs(t),Math.abs(e))))&&(n.precision=a-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(a=Qv(i))&&(n.precision=a-(n.type==="%")*2);break}}return yh(n)}function Oa(t){var e=t.domain;return t.ticks=function(r){var n=e();return hs(n[0],n[n.length-1],r==null?10:r)},t.tickFormat=function(r,n){var i=e();return Yx(i[0],i[i.length-1],r==null?10:r,n)},t.nice=function(r){r==null&&(r=10);var n=e(),i=0,a=n.length-1,s=n[i],o=n[a],l,u,h=10;for(o<s&&(u=s,s=o,o=u,u=i,i=a,a=u);h-- >0;){if(u=oo(s,o,r),u===l)return n[i]=s,n[a]=o,e(n);if(u>0)s=Math.floor(s/u)*u,o=Math.ceil(o/u)*u;else if(u<0)s=Math.ceil(s*u)/u,o=Math.floor(o*u)/u;else break;l=u}return t},t}function sp(){var t=ap();return t.copy=function(){return fc(t,sp())},On.apply(t,arguments),Oa(t)}function Ux(t){var e;function r(n){return n==null||isNaN(n=+n)?e:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(t=Array.from(n,af),r):t.slice()},r.unknown=function(n){return arguments.length?(e=n,r):e},r.copy=function(){return Ux(t).unknown(e)},t=arguments.length?Array.from(t,af):[0,1],Oa(r)}function Wx(t,e){t=t.slice();var r=0,n=t.length-1,i=t[r],a=t[n],s;return a<i&&(s=r,r=n,n=s,s=i,i=a,a=s),t[r]=e.floor(i),t[n]=e.ceil(a),t}function Hx(t){return Math.log(t)}function Gx(t){return Math.exp(t)}function Hz(t){return-Math.log(-t)}function Gz(t){return-Math.exp(-t)}function jz(t){return isFinite(t)?+("1e"+t):t<0?0:t}function $z(t){return t===10?jz:t===Math.E?Math.exp:e=>Math.pow(t,e)}function Xz(t){return t===Math.E?Math.log:t===10&&Math.log10||t===2&&Math.log2||(t=Math.log(t),e=>Math.log(e)/t)}function jx(t){return(e,r)=>-t(-e,r)}function op(t){const e=t(Hx,Gx),r=e.domain;let n=10,i,a;function s(){return i=Xz(n),a=$z(n),r()[0]<0?(i=jx(i),a=jx(a),t(Hz,Gz)):t(Hx,Gx),e}return e.base=function(o){return arguments.length?(n=+o,s()):n},e.domain=function(o){return arguments.length?(r(o),s()):r()},e.ticks=o=>{const l=r();let u=l[0],h=l[l.length-1];const d=h<u;d&&([u,h]=[h,u]);let f=i(u),p=i(h),m,_;const y=o==null?10:+o;let b=[];if(!(n%1)&&p-f<y){if(f=Math.floor(f),p=Math.ceil(p),u>0){for(;f<=p;++f)for(m=1;m<n;++m)if(_=f<0?m/a(-f):m*a(f),!(_<u)){if(_>h)break;b.push(_)}}else for(;f<=p;++f)for(m=n-1;m>=1;--m)if(_=f>0?m/a(-f):m*a(f),!(_<u)){if(_>h)break;b.push(_)}b.length*2<y&&(b=hs(u,h,y))}else b=hs(f,p,Math.min(p-f,y)).map(a);return d?b.reverse():b},e.tickFormat=(o,l)=>{if(o==null&&(o=10),l==null&&(l=n===10?"s":","),typeof l!="function"&&(!(n%1)&&(l=Co(l)).precision==null&&(l.trim=!0),l=yh(l)),o===1/0)return l;const u=Math.max(1,n*o/e.ticks().length);return h=>{let d=h/a(Math.round(i(h)));return d*n<n-.5&&(d*=n),d<=u?l(h):""}},e.nice=()=>r(Wx(r(),{floor:o=>a(Math.floor(i(o))),ceil:o=>a(Math.ceil(i(o)))})),e}function $x(){const t=op(sf()).domain([1,10]);return t.copy=()=>fc(t,$x()).base(t.base()),On.apply(t,arguments),t}function Xx(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function Kx(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function lp(t){var e=1,r=t(Xx(e),Kx(e));return r.constant=function(n){return arguments.length?t(Xx(e=+n),Kx(e)):e},Oa(r)}function Zx(){var t=lp(sf());return t.copy=function(){return fc(t,Zx()).constant(t.constant())},On.apply(t,arguments)}function Qx(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function Kz(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function Zz(t){return t<0?-t*t:t*t}function cp(t){var e=t(an,an),r=1;function n(){return r===1?t(an,an):r===.5?t(Kz,Zz):t(Qx(r),Qx(1/r))}return e.exponent=function(i){return arguments.length?(r=+i,n()):r},Oa(e)}function up(){var t=cp(sf());return t.copy=function(){return fc(t,up()).exponent(t.exponent())},On.apply(t,arguments),t}function Qz(){return up.apply(null,arguments).exponent(.5)}function Jx(t){return Math.sign(t)*t*t}function Jz(t){return Math.sign(t)*Math.sqrt(Math.abs(t))}function t8(){var t=ap(),e=[0,1],r=!1,n;function i(a){var s=Jz(t(a));return isNaN(s)?n:r?Math.round(s):s}return i.invert=function(a){return t.invert(Jx(a))},i.domain=function(a){return arguments.length?(t.domain(a),i):t.domain()},i.range=function(a){return arguments.length?(t.range((e=Array.from(a,af)).map(Jx)),i):e.slice()},i.rangeRound=function(a){return i.range(a).round(!0)},i.round=function(a){return arguments.length?(r=!!a,i):r},i.clamp=function(a){return arguments.length?(t.clamp(a),i):t.clamp()},i.unknown=function(a){return arguments.length?(n=a,i):n},i.copy=function(){return t8(t.domain(),e).round(r).clamp(t.clamp()).unknown(n)},On.apply(i,arguments),Oa(i)}function e8(){var t=[],e=[],r=[],n;function i(){var s=0,o=Math.max(1,e.length);for(r=new Array(o-1);++s<o;)r[s-1]=q_(t,s/o);return a}function a(s){return s==null||isNaN(s=+s)?n:e[cs(r,s)]}return a.invertExtent=function(s){var o=e.indexOf(s);return o<0?[NaN,NaN]:[o>0?r[o-1]:t[0],o<r.length?r[o]:t[t.length-1]]},a.domain=function(s){if(!arguments.length)return t.slice();t=[];for(let o of s)o!=null&&!isNaN(o=+o)&&t.push(o);return t.sort(Qe),i()},a.range=function(s){return arguments.length?(e=Array.from(s),i()):e.slice()},a.unknown=function(s){return arguments.length?(n=s,a):n},a.quantiles=function(){return r.slice()},a.copy=function(){return e8().domain(t).range(e).unknown(n)},On.apply(a,arguments)}function r8(){var t=0,e=1,r=1,n=[.5],i=[0,1],a;function s(l){return l!=null&&l<=l?i[cs(n,l,0,r)]:a}function o(){var l=-1;for(n=new Array(r);++l<r;)n[l]=((l+1)*e-(l-r)*t)/(r+1);return s}return s.domain=function(l){return arguments.length?([t,e]=l,t=+t,e=+e,o()):[t,e]},s.range=function(l){return arguments.length?(r=(i=Array.from(l)).length-1,o()):i.slice()},s.invertExtent=function(l){var u=i.indexOf(l);return u<0?[NaN,NaN]:u<1?[t,n[0]]:u>=r?[n[r-1],e]:[n[u-1],n[u]]},s.unknown=function(l){return arguments.length&&(a=l),s},s.thresholds=function(){return n.slice()},s.copy=function(){return r8().domain([t,e]).range(i).unknown(a)},On.apply(Oa(s),arguments)}function n8(){var t=[.5],e=[0,1],r,n=1;function i(a){return a!=null&&a<=a?e[cs(t,a,0,n)]:r}return i.domain=function(a){return arguments.length?(t=Array.from(a),n=Math.min(t.length,e.length-1),i):t.slice()},i.range=function(a){return arguments.length?(e=Array.from(a),n=Math.min(t.length,e.length-1),i):e.slice()},i.invertExtent=function(a){var s=e.indexOf(a);return[t[s-1],t[s]]},i.unknown=function(a){return arguments.length?(r=a,i):r},i.copy=function(){return n8().domain(t).range(e).unknown(r)},On.apply(i,arguments)}var hp=new Date,fp=new Date;function xr(t,e,r,n){function i(a){return t(a=arguments.length===0?new Date:new Date(+a)),a}return i.floor=function(a){return t(a=new Date(+a)),a},i.ceil=function(a){return t(a=new Date(a-1)),e(a,1),t(a),a},i.round=function(a){var s=i(a),o=i.ceil(a);return a-s<o-a?s:o},i.offset=function(a,s){return e(a=new Date(+a),s==null?1:Math.floor(s)),a},i.range=function(a,s,o){var l=[],u;if(a=i.ceil(a),o=o==null?1:Math.floor(o),!(a<s)||!(o>0))return l;do l.push(u=new Date(+a)),e(a,o),t(a);while(u<a&&a<s);return l},i.filter=function(a){return xr(function(s){if(s>=s)for(;t(s),!a(s);)s.setTime(s-1)},function(s,o){if(s>=s)if(o<0)for(;++o<=0;)for(;e(s,-1),!a(s););else for(;--o>=0;)for(;e(s,1),!a(s););})},r&&(i.count=function(a,s){return hp.setTime(+a),fp.setTime(+s),t(hp),t(fp),Math.floor(r(hp,fp))},i.every=function(a){return a=Math.floor(a),!isFinite(a)||!(a>0)?null:a>1?i.filter(n?function(s){return n(s)%a===0}:function(s){return i.count(0,s)%a===0}):i}),i}var of=xr(function(){},function(t,e){t.setTime(+t+e)},function(t,e){return e-t});of.every=function(t){return t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?xr(function(e){e.setTime(Math.floor(e/t)*t)},function(e,r){e.setTime(+e+r*t)},function(e,r){return(r-e)/t}):of};const dp=of;var i8=of.range;const ea=1e3,Fn=ea*60,ra=Fn*60,Rs=ra*24,pp=Rs*7,a8=Rs*30,gp=Rs*365;var s8=xr(function(t){t.setTime(t-t.getMilliseconds())},function(t,e){t.setTime(+t+e*ea)},function(t,e){return(e-t)/ea},function(t){return t.getUTCSeconds()});const Fa=s8;var o8=s8.range,l8=xr(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*ea)},function(t,e){t.setTime(+t+e*Fn)},function(t,e){return(e-t)/Fn},function(t){return t.getMinutes()});const yp=l8;var tY=l8.range,c8=xr(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*ea-t.getMinutes()*Fn)},function(t,e){t.setTime(+t+e*ra)},function(t,e){return(e-t)/ra},function(t){return t.getHours()});const mp=c8;var eY=c8.range,u8=xr(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Fn)/Rs,t=>t.getDate()-1);const dc=u8;var rY=u8.range;function Is(t){return xr(function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},function(e,r){e.setDate(e.getDate()+r*7)},function(e,r){return(r-e-(r.getTimezoneOffset()-e.getTimezoneOffset())*Fn)/pp})}var Do=Is(0),pc=Is(1),h8=Is(2),f8=Is(3),Ns=Is(4),d8=Is(5),p8=Is(6),g8=Do.range,nY=pc.range,iY=h8.range,aY=f8.range,sY=Ns.range,oY=d8.range,lY=p8.range,y8=xr(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,e){t.setMonth(t.getMonth()+e)},function(t,e){return e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12},function(t){return t.getMonth()});const bp=y8;var cY=y8.range,_p=xr(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t,e){return e.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});_p.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:xr(function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,r){e.setFullYear(e.getFullYear()+r*t)})};const Pa=_p;var uY=_p.range,m8=xr(function(t){t.setUTCSeconds(0,0)},function(t,e){t.setTime(+t+e*Fn)},function(t,e){return(e-t)/Fn},function(t){return t.getUTCMinutes()});const vp=m8;var hY=m8.range,b8=xr(function(t){t.setUTCMinutes(0,0,0)},function(t,e){t.setTime(+t+e*ra)},function(t,e){return(e-t)/ra},function(t){return t.getUTCHours()});const xp=b8;var fY=b8.range,_8=xr(function(t){t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+e)},function(t,e){return(e-t)/Rs},function(t){return t.getUTCDate()-1});const gc=_8;var dY=_8.range;function Bs(t){return xr(function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},function(e,r){e.setUTCDate(e.getUTCDate()+r*7)},function(e,r){return(r-e)/pp})}var Oo=Bs(0),yc=Bs(1),v8=Bs(2),x8=Bs(3),Ds=Bs(4),k8=Bs(5),w8=Bs(6),T8=Oo.range,pY=yc.range,gY=v8.range,yY=x8.range,mY=Ds.range,bY=k8.range,_Y=w8.range,E8=xr(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCMonth(t.getUTCMonth()+e)},function(t,e){return e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12},function(t){return t.getUTCMonth()});const kp=E8;var vY=E8.range,wp=xr(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)},function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});wp.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:xr(function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,r){e.setUTCFullYear(e.getUTCFullYear()+r*t)})};const qa=wp;var xY=wp.range;function C8(t,e,r,n,i,a){const s=[[Fa,1,ea],[Fa,5,5*ea],[Fa,15,15*ea],[Fa,30,30*ea],[a,1,Fn],[a,5,5*Fn],[a,15,15*Fn],[a,30,30*Fn],[i,1,ra],[i,3,3*ra],[i,6,6*ra],[i,12,12*ra],[n,1,Rs],[n,2,2*Rs],[r,1,pp],[e,1,a8],[e,3,3*a8],[t,1,gp]];function o(u,h,d){const f=h<u;f&&([u,h]=[h,u]);const p=d&&typeof d.range=="function"?d:l(u,h,d),m=p?p.range(u,+h+1):[];return f?m.reverse():m}function l(u,h,d){const f=Math.abs(h-u)/d,p=ku(([,,y])=>y).right(s,f);if(p===s.length)return t.every(wl(u/gp,h/gp,d));if(p===0)return dp.every(Math.max(wl(u,h,d),1));const[m,_]=s[f/s[p-1][2]<s[p][2]/f?p-1:p];return m.every(_)}return[o,l]}const[S8,A8]=C8(qa,kp,Oo,gc,xp,vp),[M8,L8]=C8(Pa,bp,Do,dc,mp,yp);function Tp(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Ep(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function mc(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function R8(t){var e=t.dateTime,r=t.date,n=t.time,i=t.periods,a=t.days,s=t.shortDays,o=t.months,l=t.shortMonths,u=bc(i),h=_c(i),d=bc(a),f=_c(a),p=bc(s),m=_c(s),_=bc(o),y=_c(o),b=bc(l),x=_c(l),k={a:X,A:ct,b:J,B:Y,c:null,d:F8,e:F8,f:WY,g:tU,G:rU,H:zY,I:YY,j:UY,L:P8,m:HY,M:GY,p:$,q:lt,Q:W8,s:H8,S:jY,u:$Y,U:XY,V:KY,w:ZY,W:QY,x:null,X:null,y:JY,Y:eU,Z:nU,"%":U8},T={a:ut,A:W,b:tt,B:K,c:null,d:V8,e:V8,f:oU,g:mU,G:_U,H:iU,I:aU,j:sU,L:z8,m:lU,M:cU,p:it,q:Z,Q:W8,s:H8,S:uU,u:hU,U:fU,V:dU,w:pU,W:gU,x:null,X:null,y:yU,Y:bU,Z:vU,"%":U8},C={a:L,A:v,b:B,B:w,c:D,d:D8,e:D8,f:FY,g:B8,G:N8,H:O8,I:O8,j:NY,L:OY,m:IY,M:BY,p:A,q:RY,Q:qY,s:VY,S:DY,u:CY,U:SY,V:AY,w:EY,W:MY,x:N,X:z,y:B8,Y:N8,Z:LY,"%":PY};k.x=M(r,k),k.X=M(n,k),k.c=M(e,k),T.x=M(r,T),T.X=M(n,T),T.c=M(e,T);function M(V,Q){return function(q){var U=[],F=-1,j=0,P=V.length,et,at,It;for(q instanceof Date||(q=new Date(+q));++F<P;)V.charCodeAt(F)===37&&(U.push(V.slice(j,F)),(at=I8[et=V.charAt(++F)])!=null?et=V.charAt(++F):at=et==="e"?" ":"0",(It=Q[et])&&(et=It(q,at)),U.push(et),j=F+1);return U.push(V.slice(j,F)),U.join("")}}function S(V,Q){return function(q){var U=mc(1900,void 0,1),F=R(U,V,q+="",0),j,P;if(F!=q.length)return null;if("Q"in U)return new Date(U.Q);if("s"in U)return new Date(U.s*1e3+("L"in U?U.L:0));if(Q&&!("Z"in U)&&(U.Z=0),"p"in U&&(U.H=U.H%12+U.p*12),U.m===void 0&&(U.m="q"in U?U.q:0),"V"in U){if(U.V<1||U.V>53)return null;"w"in U||(U.w=1),"Z"in U?(j=Ep(mc(U.y,0,1)),P=j.getUTCDay(),j=P>4||P===0?yc.ceil(j):yc(j),j=gc.offset(j,(U.V-1)*7),U.y=j.getUTCFullYear(),U.m=j.getUTCMonth(),U.d=j.getUTCDate()+(U.w+6)%7):(j=Tp(mc(U.y,0,1)),P=j.getDay(),j=P>4||P===0?pc.ceil(j):pc(j),j=dc.offset(j,(U.V-1)*7),U.y=j.getFullYear(),U.m=j.getMonth(),U.d=j.getDate()+(U.w+6)%7)}else("W"in U||"U"in U)&&("w"in U||(U.w="u"in U?U.u%7:"W"in U?1:0),P="Z"in U?Ep(mc(U.y,0,1)).getUTCDay():Tp(mc(U.y,0,1)).getDay(),U.m=0,U.d="W"in U?(U.w+6)%7+U.W*7-(P+5)%7:U.w+U.U*7-(P+6)%7);return"Z"in U?(U.H+=U.Z/100|0,U.M+=U.Z%100,Ep(U)):Tp(U)}}function R(V,Q,q,U){for(var F=0,j=Q.length,P=q.length,et,at;F<j;){if(U>=P)return-1;if(et=Q.charCodeAt(F++),et===37){if(et=Q.charAt(F++),at=C[et in I8?Q.charAt(F++):et],!at||(U=at(V,q,U))<0)return-1}else if(et!=q.charCodeAt(U++))return-1}return U}function A(V,Q,q){var U=u.exec(Q.slice(q));return U?(V.p=h.get(U[0].toLowerCase()),q+U[0].length):-1}function L(V,Q,q){var U=p.exec(Q.slice(q));return U?(V.w=m.get(U[0].toLowerCase()),q+U[0].length):-1}function v(V,Q,q){var U=d.exec(Q.slice(q));return U?(V.w=f.get(U[0].toLowerCase()),q+U[0].length):-1}function B(V,Q,q){var U=b.exec(Q.slice(q));return U?(V.m=x.get(U[0].toLowerCase()),q+U[0].length):-1}function w(V,Q,q){var U=_.exec(Q.slice(q));return U?(V.m=y.get(U[0].toLowerCase()),q+U[0].length):-1}function D(V,Q,q){return R(V,e,Q,q)}function N(V,Q,q){return R(V,r,Q,q)}function z(V,Q,q){return R(V,n,Q,q)}function X(V){return s[V.getDay()]}function ct(V){return a[V.getDay()]}function J(V){return l[V.getMonth()]}function Y(V){return o[V.getMonth()]}function $(V){return i[+(V.getHours()>=12)]}function lt(V){return 1+~~(V.getMonth()/3)}function ut(V){return s[V.getUTCDay()]}function W(V){return a[V.getUTCDay()]}function tt(V){return l[V.getUTCMonth()]}function K(V){return o[V.getUTCMonth()]}function it(V){return i[+(V.getUTCHours()>=12)]}function Z(V){return 1+~~(V.getUTCMonth()/3)}return{format:function(V){var Q=M(V+="",k);return Q.toString=function(){return V},Q},parse:function(V){var Q=S(V+="",!1);return Q.toString=function(){return V},Q},utcFormat:function(V){var Q=M(V+="",T);return Q.toString=function(){return V},Q},utcParse:function(V){var Q=S(V+="",!0);return Q.toString=function(){return V},Q}}}var I8={"-":"",_:" ",0:"0"},Ar=/^\s*\d+/,kY=/^%/,wY=/[\\^$*+?|[\]().{}]/g;function Oe(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a<r?new Array(r-a+1).join(e)+i:i)}function TY(t){return t.replace(wY,"\\$&")}function bc(t){return new RegExp("^(?:"+t.map(TY).join("|")+")","i")}function _c(t){return new Map(t.map((e,r)=>[e.toLowerCase(),r]))}function EY(t,e,r){var n=Ar.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function CY(t,e,r){var n=Ar.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function SY(t,e,r){var n=Ar.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function AY(t,e,r){var n=Ar.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function MY(t,e,r){var n=Ar.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function N8(t,e,r){var n=Ar.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function B8(t,e,r){var n=Ar.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function LY(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function RY(t,e,r){var n=Ar.exec(e.slice(r,r+1));return n?(t.q=n[0]*3-3,r+n[0].length):-1}function IY(t,e,r){var n=Ar.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function D8(t,e,r){var n=Ar.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function NY(t,e,r){var n=Ar.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function O8(t,e,r){var n=Ar.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function BY(t,e,r){var n=Ar.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function DY(t,e,r){var n=Ar.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function OY(t,e,r){var n=Ar.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function FY(t,e,r){var n=Ar.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function PY(t,e,r){var n=kY.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function qY(t,e,r){var n=Ar.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function VY(t,e,r){var n=Ar.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function F8(t,e){return Oe(t.getDate(),e,2)}function zY(t,e){return Oe(t.getHours(),e,2)}function YY(t,e){return Oe(t.getHours()%12||12,e,2)}function UY(t,e){return Oe(1+dc.count(Pa(t),t),e,3)}function P8(t,e){return Oe(t.getMilliseconds(),e,3)}function WY(t,e){return P8(t,e)+"000"}function HY(t,e){return Oe(t.getMonth()+1,e,2)}function GY(t,e){return Oe(t.getMinutes(),e,2)}function jY(t,e){return Oe(t.getSeconds(),e,2)}function $Y(t){var e=t.getDay();return e===0?7:e}function XY(t,e){return Oe(Do.count(Pa(t)-1,t),e,2)}function q8(t){var e=t.getDay();return e>=4||e===0?Ns(t):Ns.ceil(t)}function KY(t,e){return t=q8(t),Oe(Ns.count(Pa(t),t)+(Pa(t).getDay()===4),e,2)}function ZY(t){return t.getDay()}function QY(t,e){return Oe(pc.count(Pa(t)-1,t),e,2)}function JY(t,e){return Oe(t.getFullYear()%100,e,2)}function tU(t,e){return t=q8(t),Oe(t.getFullYear()%100,e,2)}function eU(t,e){return Oe(t.getFullYear()%1e4,e,4)}function rU(t,e){var r=t.getDay();return t=r>=4||r===0?Ns(t):Ns.ceil(t),Oe(t.getFullYear()%1e4,e,4)}function nU(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Oe(e/60|0,"0",2)+Oe(e%60,"0",2)}function V8(t,e){return Oe(t.getUTCDate(),e,2)}function iU(t,e){return Oe(t.getUTCHours(),e,2)}function aU(t,e){return Oe(t.getUTCHours()%12||12,e,2)}function sU(t,e){return Oe(1+gc.count(qa(t),t),e,3)}function z8(t,e){return Oe(t.getUTCMilliseconds(),e,3)}function oU(t,e){return z8(t,e)+"000"}function lU(t,e){return Oe(t.getUTCMonth()+1,e,2)}function cU(t,e){return Oe(t.getUTCMinutes(),e,2)}function uU(t,e){return Oe(t.getUTCSeconds(),e,2)}function hU(t){var e=t.getUTCDay();return e===0?7:e}function fU(t,e){return Oe(Oo.count(qa(t)-1,t),e,2)}function Y8(t){var e=t.getUTCDay();return e>=4||e===0?Ds(t):Ds.ceil(t)}function dU(t,e){return t=Y8(t),Oe(Ds.count(qa(t),t)+(qa(t).getUTCDay()===4),e,2)}function pU(t){return t.getUTCDay()}function gU(t,e){return Oe(yc.count(qa(t)-1,t),e,2)}function yU(t,e){return Oe(t.getUTCFullYear()%100,e,2)}function mU(t,e){return t=Y8(t),Oe(t.getUTCFullYear()%100,e,2)}function bU(t,e){return Oe(t.getUTCFullYear()%1e4,e,4)}function _U(t,e){var r=t.getUTCDay();return t=r>=4||r===0?Ds(t):Ds.ceil(t),Oe(t.getUTCFullYear()%1e4,e,4)}function vU(){return"+0000"}function U8(){return"%"}function W8(t){return+t}function H8(t){return Math.floor(+t/1e3)}var Fo,vc,G8,lf,Cp;j8({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function j8(t){return Fo=R8(t),vc=Fo.format,G8=Fo.parse,lf=Fo.utcFormat,Cp=Fo.utcParse,Fo}var $8="%Y-%m-%dT%H:%M:%S.%LZ";function xU(t){return t.toISOString()}var kU=Date.prototype.toISOString?xU:lf($8);const wU=kU;function TU(t){var e=new Date(t);return isNaN(e)?null:e}var EU=+new Date("2000-01-01T00:00:00.000Z")?TU:Cp($8);const CU=EU;function SU(t){return new Date(t)}function AU(t){return t instanceof Date?+t:+new Date(+t)}function Sp(t,e,r,n,i,a,s,o,l,u){var h=ap(),d=h.invert,f=h.domain,p=u(".%L"),m=u(":%S"),_=u("%I:%M"),y=u("%I %p"),b=u("%a %d"),x=u("%b %d"),k=u("%B"),T=u("%Y");function C(M){return(l(M)<M?p:o(M)<M?m:s(M)<M?_:a(M)<M?y:n(M)<M?i(M)<M?b:x:r(M)<M?k:T)(M)}return h.invert=function(M){return new Date(d(M))},h.domain=function(M){return arguments.length?f(Array.from(M,AU)):f().map(SU)},h.ticks=function(M){var S=f();return t(S[0],S[S.length-1],M==null?10:M)},h.tickFormat=function(M,S){return S==null?C:u(S)},h.nice=function(M){var S=f();return(!M||typeof M.range!="function")&&(M=e(S[0],S[S.length-1],M==null?10:M)),M?f(Wx(S,M)):h},h.copy=function(){return fc(h,Sp(t,e,r,n,i,a,s,o,l,u))},h}function X8(){return On.apply(Sp(M8,L8,Pa,bp,Do,dc,mp,yp,Fa,vc).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function MU(){return On.apply(Sp(S8,A8,qa,kp,Oo,gc,xp,vp,Fa,lf).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function cf(){var t=0,e=1,r,n,i,a,s=an,o=!1,l;function u(d){return d==null||isNaN(d=+d)?l:s(i===0?.5:(d=(a(d)-r)*i,o?Math.max(0,Math.min(1,d)):d))}u.domain=function(d){return arguments.length?([t,e]=d,r=a(t=+t),n=a(e=+e),i=r===n?0:1/(n-r),u):[t,e]},u.clamp=function(d){return arguments.length?(o=!!d,u):o},u.interpolator=function(d){return arguments.length?(s=d,u):s};function h(d){return function(f){var p,m;return arguments.length?([p,m]=f,s=d(p,m),u):[s(0),s(1)]}}return u.range=h(Ma),u.rangeRound=h(ju),u.unknown=function(d){return arguments.length?(l=d,u):l},function(d){return a=d,r=d(t),n=d(e),i=r===n?0:1/(n-r),u}}function Va(t,e){return e.domain(t.domain()).interpolator(t.interpolator()).clamp(t.clamp()).unknown(t.unknown())}function K8(){var t=Oa(cf()(an));return t.copy=function(){return Va(t,K8())},ta.apply(t,arguments)}function Z8(){var t=op(cf()).domain([1,10]);return t.copy=function(){return Va(t,Z8()).base(t.base())},ta.apply(t,arguments)}function Q8(){var t=lp(cf());return t.copy=function(){return Va(t,Q8()).constant(t.constant())},ta.apply(t,arguments)}function Ap(){var t=cp(cf());return t.copy=function(){return Va(t,Ap()).exponent(t.exponent())},ta.apply(t,arguments)}function LU(){return Ap.apply(null,arguments).exponent(.5)}function J8(){var t=[],e=an;function r(n){if(n!=null&&!isNaN(n=+n))return e((cs(t,n,1)-1)/(t.length-1))}return r.domain=function(n){if(!arguments.length)return t.slice();t=[];for(let i of n)i!=null&&!isNaN(i=+i)&&t.push(i);return t.sort(Qe),r},r.interpolator=function(n){return arguments.length?(e=n,r):e},r.range=function(){return t.map((n,i)=>e(i/(t.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,a)=>Cl(t,a/n))},r.copy=function(){return J8(e).domain(t)},ta.apply(r,arguments)}function uf(){var t=0,e=.5,r=1,n=1,i,a,s,o,l,u=an,h,d=!1,f;function p(_){return isNaN(_=+_)?f:(_=.5+((_=+h(_))-a)*(n*_<n*a?o:l),u(d?Math.max(0,Math.min(1,_)):_))}p.domain=function(_){return arguments.length?([t,e,r]=_,i=h(t=+t),a=h(e=+e),s=h(r=+r),o=i===a?0:.5/(a-i),l=a===s?0:.5/(s-a),n=a<i?-1:1,p):[t,e,r]},p.clamp=function(_){return arguments.length?(d=!!_,p):d},p.interpolator=function(_){return arguments.length?(u=_,p):u};function m(_){return function(y){var b,x,k;return arguments.length?([b,x,k]=y,u=K5(_,[b,x,k]),p):[u(0),u(.5),u(1)]}}return p.range=m(Ma),p.rangeRound=m(ju),p.unknown=function(_){return arguments.length?(f=_,p):f},function(_){return h=_,i=_(t),a=_(e),s=_(r),o=i===a?0:.5/(a-i),l=a===s?0:.5/(s-a),n=a<i?-1:1,p}}function t7(){var t=Oa(uf()(an));return t.copy=function(){return Va(t,t7())},ta.apply(t,arguments)}function e7(){var t=op(uf()).domain([.1,1,10]);return t.copy=function(){return Va(t,e7()).base(t.base())},ta.apply(t,arguments)}function r7(){var t=lp(uf());return t.copy=function(){return Va(t,r7()).constant(t.constant())},ta.apply(t,arguments)}function Mp(){var t=cp(uf());return t.copy=function(){return Va(t,Mp()).exponent(t.exponent())},ta.apply(t,arguments)}function RU(){return Mp.apply(null,arguments).exponent(.5)}function Ee(t){for(var e=t.length/6|0,r=new Array(e),n=0;n<e;)r[n]="#"+t.slice(n*6,++n*6);return r}const IU=Ee("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),NU=Ee("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"),BU=Ee("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"),DU=Ee("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"),OU=Ee("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"),FU=Ee("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"),PU=Ee("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"),qU=Ee("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"),VU=Ee("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"),zU=Ee("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab"),We=t=>B5(t[t.length-1]);var n7=new Array(3).concat("d8b365f5f5f55ab4ac","a6611adfc27d80cdc1018571","a6611adfc27df5f5f580cdc1018571","8c510ad8b365f6e8c3c7eae55ab4ac01665e","8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e","8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e","8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e","5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30","5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(Ee);const YU=We(n7);var i7=new Array(3).concat("af8dc3f7f7f77fbf7b","7b3294c2a5cfa6dba0008837","7b3294c2a5cff7f7f7a6dba0008837","762a83af8dc3e7d4e8d9f0d37fbf7b1b7837","762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837","762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837","762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837","40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b","40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(Ee);const UU=We(i7);var a7=new Array(3).concat("e9a3c9f7f7f7a1d76a","d01c8bf1b6dab8e1864dac26","d01c8bf1b6daf7f7f7b8e1864dac26","c51b7de9a3c9fde0efe6f5d0a1d76a4d9221","c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221","c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221","c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221","8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419","8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(Ee);const WU=We(a7);var s7=new Array(3).concat("998ec3f7f7f7f1a340","5e3c99b2abd2fdb863e66101","5e3c99b2abd2f7f7f7fdb863e66101","542788998ec3d8daebfee0b6f1a340b35806","542788998ec3d8daebf7f7f7fee0b6f1a340b35806","5427888073acb2abd2d8daebfee0b6fdb863e08214b35806","5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806","2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08","2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(Ee);const HU=We(s7);var o7=new Array(3).concat("ef8a62f7f7f767a9cf","ca0020f4a58292c5de0571b0","ca0020f4a582f7f7f792c5de0571b0","b2182bef8a62fddbc7d1e5f067a9cf2166ac","b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac","b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac","b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac","67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061","67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(Ee);const GU=We(o7);var l7=new Array(3).concat("ef8a62ffffff999999","ca0020f4a582bababa404040","ca0020f4a582ffffffbababa404040","b2182bef8a62fddbc7e0e0e09999994d4d4d","b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d","b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d","b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d","67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a","67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(Ee);const jU=We(l7);var c7=new Array(3).concat("fc8d59ffffbf91bfdb","d7191cfdae61abd9e92c7bb6","d7191cfdae61ffffbfabd9e92c7bb6","d73027fc8d59fee090e0f3f891bfdb4575b4","d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4","d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4","d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4","a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695","a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(Ee);const $U=We(c7);var u7=new Array(3).concat("fc8d59ffffbf91cf60","d7191cfdae61a6d96a1a9641","d7191cfdae61ffffbfa6d96a1a9641","d73027fc8d59fee08bd9ef8b91cf601a9850","d73027fc8d59fee08bffffbfd9ef8b91cf601a9850","d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850","d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850","a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837","a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(Ee);const XU=We(u7);var h7=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(Ee);const KU=We(h7);var f7=new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(Ee);const ZU=We(f7);var d7=new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(Ee);const QU=We(d7);var p7=new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(Ee);const JU=We(p7);var g7=new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(Ee);const tW=We(g7);var y7=new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(Ee);const eW=We(y7);var m7=new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(Ee);const rW=We(m7);var b7=new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(Ee);const nW=We(b7);var _7=new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(Ee);const iW=We(_7);var v7=new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(Ee);const aW=We(v7);var x7=new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(Ee);const sW=We(x7);var k7=new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(Ee);const oW=We(k7);var w7=new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(Ee);const lW=We(w7);var T7=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(Ee);const cW=We(T7);var E7=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(Ee);const uW=We(E7);var C7=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(Ee);const hW=We(C7);var S7=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(Ee);const fW=We(S7);var A7=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(Ee);const dW=We(A7);var M7=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(Ee);const pW=We(M7);function gW(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(-4.54-t*(35.34-t*(2381.73-t*(6402.7-t*(7024.72-t*2710.57)))))))+", "+Math.max(0,Math.min(255,Math.round(32.49+t*(170.73+t*(52.82-t*(131.46-t*(176.58-t*67.37)))))))+", "+Math.max(0,Math.min(255,Math.round(81.24+t*(442.36-t*(2482.43-t*(6167.24-t*(6614.94-t*2475.67)))))))+")"}const yW=Xu(Qn(300,.5,0),Qn(-240,.5,1));var mW=Xu(Qn(-100,.75,.35),Qn(80,1.5,.8)),bW=Xu(Qn(260,.75,.35),Qn(80,1.5,.8)),hf=Qn();function _W(t){(t<0||t>1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return hf.h=360*t-100,hf.s=1.5-1.5*e,hf.l=.8-.9*e,hf+""}var ff=po(),vW=Math.PI/3,xW=Math.PI*2/3;function kW(t){var e;return t=(.5-t)*Math.PI,ff.r=255*(e=Math.sin(t))*e,ff.g=255*(e=Math.sin(t+vW))*e,ff.b=255*(e=Math.sin(t+xW))*e,ff+""}function wW(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-t*14825.05)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+t*707.56)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-t*6838.66)))))))+")"}function df(t){var e=t.length;return function(r){return t[Math.max(0,Math.min(e-1,Math.floor(r*e)))]}}const TW=df(Ee("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));var EW=df(Ee("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),CW=df(Ee("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),SW=df(Ee("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));function xe(t){return function(){return t}}const L7=Math.abs,qr=Math.atan2,na=Math.cos,AW=Math.max,Po=Math.min,gn=Math.sin,He=Math.sqrt,Vr=1e-12,za=Math.PI,pf=za/2,Ya=2*za;function MW(t){return t>1?0:t<-1?za:Math.acos(t)}function R7(t){return t>=1?pf:t<=-1?-pf:Math.asin(t)}function LW(t){return t.innerRadius}function RW(t){return t.outerRadius}function IW(t){return t.startAngle}function NW(t){return t.endAngle}function BW(t){return t&&t.padAngle}function DW(t,e,r,n,i,a,s,o){var l=r-t,u=n-e,h=s-i,d=o-a,f=d*l-h*u;if(!(f*f<Vr))return f=(h*(e-a)-d*(t-i))/f,[t+f*l,e+f*u]}function gf(t,e,r,n,i,a,s){var o=t-r,l=e-n,u=(s?a:-a)/He(o*o+l*l),h=u*l,d=-u*o,f=t+h,p=e+d,m=r+h,_=n+d,y=(f+m)/2,b=(p+_)/2,x=m-f,k=_-p,T=x*x+k*k,C=i-a,M=f*_-m*p,S=(k<0?-1:1)*He(AW(0,C*C*T-M*M)),R=(M*k-x*S)/T,A=(-M*x-k*S)/T,L=(M*k+x*S)/T,v=(-M*x+k*S)/T,B=R-y,w=A-b,D=L-y,N=v-b;return B*B+w*w>D*D+N*N&&(R=L,A=v),{cx:R,cy:A,x01:-h,y01:-d,x11:R*(i/C-1),y11:A*(i/C-1)}}function yf(){var t=LW,e=RW,r=xe(0),n=null,i=IW,a=NW,s=BW,o=null;function l(){var u,h,d=+t.apply(this,arguments),f=+e.apply(this,arguments),p=i.apply(this,arguments)-pf,m=a.apply(this,arguments)-pf,_=L7(m-p),y=m>p;if(o||(o=u=Ra()),f<d&&(h=f,f=d,d=h),!(f>Vr))o.moveTo(0,0);else if(_>Ya-Vr)o.moveTo(f*na(p),f*gn(p)),o.arc(0,0,f,p,m,!y),d>Vr&&(o.moveTo(d*na(m),d*gn(m)),o.arc(0,0,d,m,p,y));else{var b=p,x=m,k=p,T=m,C=_,M=_,S=s.apply(this,arguments)/2,R=S>Vr&&(n?+n.apply(this,arguments):He(d*d+f*f)),A=Po(L7(f-d)/2,+r.apply(this,arguments)),L=A,v=A,B,w;if(R>Vr){var D=R7(R/d*gn(S)),N=R7(R/f*gn(S));(C-=D*2)>Vr?(D*=y?1:-1,k+=D,T-=D):(C=0,k=T=(p+m)/2),(M-=N*2)>Vr?(N*=y?1:-1,b+=N,x-=N):(M=0,b=x=(p+m)/2)}var z=f*na(b),X=f*gn(b),ct=d*na(T),J=d*gn(T);if(A>Vr){var Y=f*na(x),$=f*gn(x),lt=d*na(k),ut=d*gn(k),W;if(_<za&&(W=DW(z,X,lt,ut,Y,$,ct,J))){var tt=z-W[0],K=X-W[1],it=Y-W[0],Z=$-W[1],V=1/gn(MW((tt*it+K*Z)/(He(tt*tt+K*K)*He(it*it+Z*Z)))/2),Q=He(W[0]*W[0]+W[1]*W[1]);L=Po(A,(d-Q)/(V-1)),v=Po(A,(f-Q)/(V+1))}}M>Vr?v>Vr?(B=gf(lt,ut,z,X,f,v,y),w=gf(Y,$,ct,J,f,v,y),o.moveTo(B.cx+B.x01,B.cy+B.y01),v<A?o.arc(B.cx,B.cy,v,qr(B.y01,B.x01),qr(w.y01,w.x01),!y):(o.arc(B.cx,B.cy,v,qr(B.y01,B.x01),qr(B.y11,B.x11),!y),o.arc(0,0,f,qr(B.cy+B.y11,B.cx+B.x11),qr(w.cy+w.y11,w.cx+w.x11),!y),o.arc(w.cx,w.cy,v,qr(w.y11,w.x11),qr(w.y01,w.x01),!y))):(o.moveTo(z,X),o.arc(0,0,f,b,x,!y)):o.moveTo(z,X),!(d>Vr)||!(C>Vr)?o.lineTo(ct,J):L>Vr?(B=gf(ct,J,Y,$,d,-L,y),w=gf(z,X,lt,ut,d,-L,y),o.lineTo(B.cx+B.x01,B.cy+B.y01),L<A?o.arc(B.cx,B.cy,L,qr(B.y01,B.x01),qr(w.y01,w.x01),!y):(o.arc(B.cx,B.cy,L,qr(B.y01,B.x01),qr(B.y11,B.x11),!y),o.arc(0,0,d,qr(B.cy+B.y11,B.cx+B.x11),qr(w.cy+w.y11,w.cx+w.x11),y),o.arc(w.cx,w.cy,L,qr(w.y11,w.x11),qr(w.y01,w.x01),!y))):o.arc(0,0,d,T,k,y)}if(o.closePath(),u)return o=null,u+""||null}return l.centroid=function(){var u=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,h=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-za/2;return[na(h)*u,gn(h)*u]},l.innerRadius=function(u){return arguments.length?(t=typeof u=="function"?u:xe(+u),l):t},l.outerRadius=function(u){return arguments.length?(e=typeof u=="function"?u:xe(+u),l):e},l.cornerRadius=function(u){return arguments.length?(r=typeof u=="function"?u:xe(+u),l):r},l.padRadius=function(u){return arguments.length?(n=u==null?null:typeof u=="function"?u:xe(+u),l):n},l.startAngle=function(u){return arguments.length?(i=typeof u=="function"?u:xe(+u),l):i},l.endAngle=function(u){return arguments.length?(a=typeof u=="function"?u:xe(+u),l):a},l.padAngle=function(u){return arguments.length?(s=typeof u=="function"?u:xe(+u),l):s},l.context=function(u){return arguments.length?(o=u==null?null:u,l):o},l}var OW=Array.prototype.slice;function mf(t){return typeof t=="object"&&"length"in t?t:Array.from(t)}function I7(t){this._context=t}I7.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e);break}}};function yn(t){return new I7(t)}function Lp(t){return t[0]}function Rp(t){return t[1]}function Ua(t,e){var r=xe(!0),n=null,i=yn,a=null;t=typeof t=="function"?t:t===void 0?Lp:xe(t),e=typeof e=="function"?e:e===void 0?Rp:xe(e);function s(o){var l,u=(o=mf(o)).length,h,d=!1,f;for(n==null&&(a=i(f=Ra())),l=0;l<=u;++l)!(l<u&&r(h=o[l],l,o))===d&&((d=!d)?a.lineStart():a.lineEnd()),d&&a.point(+t(h,l,o),+e(h,l,o));if(f)return a=null,f+""||null}return s.x=function(o){return arguments.length?(t=typeof o=="function"?o:xe(+o),s):t},s.y=function(o){return arguments.length?(e=typeof o=="function"?o:xe(+o),s):e},s.defined=function(o){return arguments.length?(r=typeof o=="function"?o:xe(!!o),s):r},s.curve=function(o){return arguments.length?(i=o,n!=null&&(a=i(n)),s):i},s.context=function(o){return arguments.length?(o==null?n=a=null:a=i(n=o),s):n},s}function N7(t,e,r){var n=null,i=xe(!0),a=null,s=yn,o=null;t=typeof t=="function"?t:t===void 0?Lp:xe(+t),e=typeof e=="function"?e:xe(e===void 0?0:+e),r=typeof r=="function"?r:r===void 0?Rp:xe(+r);function l(h){var d,f,p,m=(h=mf(h)).length,_,y=!1,b,x=new Array(m),k=new Array(m);for(a==null&&(o=s(b=Ra())),d=0;d<=m;++d){if(!(d<m&&i(_=h[d],d,h))===y)if(y=!y)f=d,o.areaStart(),o.lineStart();else{for(o.lineEnd(),o.lineStart(),p=d-1;p>=f;--p)o.point(x[p],k[p]);o.lineEnd(),o.areaEnd()}y&&(x[d]=+t(_,d,h),k[d]=+e(_,d,h),o.point(n?+n(_,d,h):x[d],r?+r(_,d,h):k[d]))}if(b)return o=null,b+""||null}function u(){return Ua().defined(i).curve(s).context(a)}return l.x=function(h){return arguments.length?(t=typeof h=="function"?h:xe(+h),n=null,l):t},l.x0=function(h){return arguments.length?(t=typeof h=="function"?h:xe(+h),l):t},l.x1=function(h){return arguments.length?(n=h==null?null:typeof h=="function"?h:xe(+h),l):n},l.y=function(h){return arguments.length?(e=typeof h=="function"?h:xe(+h),r=null,l):e},l.y0=function(h){return arguments.length?(e=typeof h=="function"?h:xe(+h),l):e},l.y1=function(h){return arguments.length?(r=h==null?null:typeof h=="function"?h:xe(+h),l):r},l.lineX0=l.lineY0=function(){return u().x(t).y(e)},l.lineY1=function(){return u().x(t).y(r)},l.lineX1=function(){return u().x(n).y(e)},l.defined=function(h){return arguments.length?(i=typeof h=="function"?h:xe(!!h),l):i},l.curve=function(h){return arguments.length?(s=h,a!=null&&(o=s(a)),l):s},l.context=function(h){return arguments.length?(h==null?a=o=null:o=s(a=h),l):a},l}function FW(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function PW(t){return t}function B7(){var t=PW,e=FW,r=null,n=xe(0),i=xe(Ya),a=xe(0);function s(o){var l,u=(o=mf(o)).length,h,d,f=0,p=new Array(u),m=new Array(u),_=+n.apply(this,arguments),y=Math.min(Ya,Math.max(-Ya,i.apply(this,arguments)-_)),b,x=Math.min(Math.abs(y)/u,a.apply(this,arguments)),k=x*(y<0?-1:1),T;for(l=0;l<u;++l)(T=m[p[l]=l]=+t(o[l],l,o))>0&&(f+=T);for(e!=null?p.sort(function(C,M){return e(m[C],m[M])}):r!=null&&p.sort(function(C,M){return r(o[C],o[M])}),l=0,d=f?(y-u*k)/f:0;l<u;++l,_=b)h=p[l],T=m[h],b=_+(T>0?T*d:0)+k,m[h]={data:o[h],index:l,value:T,startAngle:_,endAngle:b,padAngle:x};return m}return s.value=function(o){return arguments.length?(t=typeof o=="function"?o:xe(+o),s):t},s.sortValues=function(o){return arguments.length?(e=o,r=null,s):e},s.sort=function(o){return arguments.length?(r=o,e=null,s):r},s.startAngle=function(o){return arguments.length?(n=typeof o=="function"?o:xe(+o),s):n},s.endAngle=function(o){return arguments.length?(i=typeof o=="function"?o:xe(+o),s):i},s.padAngle=function(o){return arguments.length?(a=typeof o=="function"?o:xe(+o),s):a},s}var D7=Ip(yn);function O7(t){this._curve=t}O7.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};function Ip(t){function e(r){return new O7(t(r))}return e._curve=t,e}function xc(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(r){return arguments.length?e(Ip(r)):e()._curve},t}function F7(){return xc(Ua().curve(D7))}function P7(){var t=N7().curve(D7),e=t.curve,r=t.lineX0,n=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return xc(r())},delete t.lineX0,t.lineEndAngle=function(){return xc(n())},delete t.lineX1,t.lineInnerRadius=function(){return xc(i())},delete t.lineY0,t.lineOuterRadius=function(){return xc(a())},delete t.lineY1,t.curve=function(s){return arguments.length?e(Ip(s)):e()._curve},t}function kc(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]}class q7{constructor(e,r){this._context=e,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(e,r){switch(e=+e,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+e)/2,this._y0,this._x0,r,e,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,e,this._y0,e,r);break}}this._x0=e,this._y0=r}}class qW{constructor(e){this._context=e}lineStart(){this._point=0}lineEnd(){}point(e,r){if(e=+e,r=+r,this._point++===0)this._x0=e,this._y0=r;else{const n=kc(this._x0,this._y0),i=kc(this._x0,this._y0=(this._y0+r)/2),a=kc(e,this._y0),s=kc(e,r);this._context.moveTo(...n),this._context.bezierCurveTo(...i,...a,...s)}}}function V7(t){return new q7(t,!0)}function z7(t){return new q7(t,!1)}function VW(t){return new qW(t)}function zW(t){return t.source}function YW(t){return t.target}function bf(t){let e=zW,r=YW,n=Lp,i=Rp,a=null,s=null;function o(){let l;const u=OW.call(arguments),h=e.apply(this,u),d=r.apply(this,u);if(a==null&&(s=t(l=Ra())),s.lineStart(),u[0]=h,s.point(+n.apply(this,u),+i.apply(this,u)),u[0]=d,s.point(+n.apply(this,u),+i.apply(this,u)),s.lineEnd(),l)return s=null,l+""||null}return o.source=function(l){return arguments.length?(e=l,o):e},o.target=function(l){return arguments.length?(r=l,o):r},o.x=function(l){return arguments.length?(n=typeof l=="function"?l:xe(+l),o):n},o.y=function(l){return arguments.length?(i=typeof l=="function"?l:xe(+l),o):i},o.context=function(l){return arguments.length?(l==null?a=s=null:s=t(a=l),o):a},o}function UW(){return bf(V7)}function WW(){return bf(z7)}function HW(){const t=bf(VW);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}const GW=He(3),Y7={draw(t,e){const r=He(e+Po(e/28,.75))*.59436,n=r/2,i=n*GW;t.moveTo(0,r),t.lineTo(0,-r),t.moveTo(-i,-n),t.lineTo(i,n),t.moveTo(-i,n),t.lineTo(i,-n)}},_f={draw(t,e){const r=He(e/za);t.moveTo(r,0),t.arc(0,0,r,0,Ya)}},U7={draw(t,e){const r=He(e/5)/2;t.moveTo(-3*r,-r),t.lineTo(-r,-r),t.lineTo(-r,-3*r),t.lineTo(r,-3*r),t.lineTo(r,-r),t.lineTo(3*r,-r),t.lineTo(3*r,r),t.lineTo(r,r),t.lineTo(r,3*r),t.lineTo(-r,3*r),t.lineTo(-r,r),t.lineTo(-3*r,r),t.closePath()}},W7=He(1/3),jW=W7*2,H7={draw(t,e){const r=He(e/jW),n=r*W7;t.moveTo(0,-r),t.lineTo(n,0),t.lineTo(0,r),t.lineTo(-n,0),t.closePath()}},G7={draw(t,e){const r=He(e)*.62625;t.moveTo(0,-r),t.lineTo(r,0),t.lineTo(0,r),t.lineTo(-r,0),t.closePath()}},j7={draw(t,e){const r=He(e-Po(e/7,2))*.87559;t.moveTo(-r,0),t.lineTo(r,0),t.moveTo(0,r),t.lineTo(0,-r)}},$7={draw(t,e){const r=He(e),n=-r/2;t.rect(n,n,r,r)}},X7={draw(t,e){const r=He(e)*.4431;t.moveTo(r,r),t.lineTo(r,-r),t.lineTo(-r,-r),t.lineTo(-r,r),t.closePath()}},$W=.8908130915292852,K7=gn(za/10)/gn(7*za/10),XW=gn(Ya/10)*K7,KW=-na(Ya/10)*K7,Z7={draw(t,e){const r=He(e*$W),n=XW*r,i=KW*r;t.moveTo(0,-r),t.lineTo(n,i);for(let a=1;a<5;++a){const s=Ya*a/5,o=na(s),l=gn(s);t.lineTo(l*r,-o*r),t.lineTo(o*n-l*i,l*n+o*i)}t.closePath()}},Np=He(3),Q7={draw(t,e){const r=-He(e/(Np*3));t.moveTo(0,r*2),t.lineTo(-Np*r,-r),t.lineTo(Np*r,-r),t.closePath()}},ZW=He(3),J7={draw(t,e){const r=He(e)*.6824,n=r/2,i=r*ZW/2;t.moveTo(0,-r),t.lineTo(i,n),t.lineTo(-i,n),t.closePath()}},Pn=-.5,qn=He(3)/2,Bp=1/He(12),QW=(Bp/2+1)*3,tk={draw(t,e){const r=He(e/QW),n=r/2,i=r*Bp,a=n,s=r*Bp+r,o=-a,l=s;t.moveTo(n,i),t.lineTo(a,s),t.lineTo(o,l),t.lineTo(Pn*n-qn*i,qn*n+Pn*i),t.lineTo(Pn*a-qn*s,qn*a+Pn*s),t.lineTo(Pn*o-qn*l,qn*o+Pn*l),t.lineTo(Pn*n+qn*i,Pn*i-qn*n),t.lineTo(Pn*a+qn*s,Pn*s-qn*a),t.lineTo(Pn*o+qn*l,Pn*l-qn*o),t.closePath()}},ek={draw(t,e){const r=He(e-Po(e/6,1.7))*.6189;t.moveTo(-r,-r),t.lineTo(r,r),t.moveTo(-r,r),t.lineTo(r,-r)}},rk=[_f,U7,H7,$7,Z7,Q7,tk],JW=[_f,j7,ek,J7,Y7,X7,G7];function tH(t,e){let r=null;t=typeof t=="function"?t:xe(t||_f),e=typeof e=="function"?e:xe(e===void 0?64:+e);function n(){let i;if(r||(r=i=Ra()),t.apply(this,arguments).draw(r,+e.apply(this,arguments)),i)return r=null,i+""||null}return n.type=function(i){return arguments.length?(t=typeof i=="function"?i:xe(i),n):t},n.size=function(i){return arguments.length?(e=typeof i=="function"?i:xe(+i),n):e},n.context=function(i){return arguments.length?(r=i==null?null:i,n):r},n}function Wa(){}function vf(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function xf(t){this._context=t}xf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:vf(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:vf(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function Os(t){return new xf(t)}function nk(t){this._context=t}nk.prototype={areaStart:Wa,areaEnd:Wa,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:vf(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function ik(t){return new nk(t)}function ak(t){this._context=t}ak.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:vf(this,t,e);break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};function sk(t){return new ak(t)}function ok(t,e){this._basis=new xf(t),this._beta=e}ok.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n=t[0],i=e[0],a=t[r]-n,s=e[r]-i,o=-1,l;++o<=r;)l=o/r,this._basis.point(this._beta*t[o]+(1-this._beta)*(n+l*a),this._beta*e[o]+(1-this._beta)*(i+l*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const eH=function t(e){function r(n){return e===1?new xf(n):new ok(n,e)}return r.beta=function(n){return t(+n)},r}(.85);function kf(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function Dp(t,e){this._context=t,this._k=(1-e)/6}Dp.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:kf(this,this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:kf(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const rH=function t(e){function r(n){return new Dp(n,e)}return r.tension=function(n){return t(+n)},r}(0);function Op(t,e){this._context=t,this._k=(1-e)/6}Op.prototype={areaStart:Wa,areaEnd:Wa,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:kf(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const nH=function t(e){function r(n){return new Op(n,e)}return r.tension=function(n){return t(+n)},r}(0);function Fp(t,e){this._context=t,this._k=(1-e)/6}Fp.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:kf(this,t,e);break}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const iH=function t(e){function r(n){return new Fp(n,e)}return r.tension=function(n){return t(+n)},r}(0);function Pp(t,e,r){var n=t._x1,i=t._y1,a=t._x2,s=t._y2;if(t._l01_a>Vr){var o=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*o-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,i=(i*o-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Vr){var u=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*u+t._x1*t._l23_2a-e*t._l12_2a)/h,s=(s*u+t._y1*t._l23_2a-r*t._l12_2a)/h}t._context.bezierCurveTo(n,i,a,s,t._x2,t._y2)}function lk(t,e){this._context=t,this._alpha=e}lk.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Pp(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const aH=function t(e){function r(n){return e?new lk(n,e):new Dp(n,0)}return r.alpha=function(n){return t(+n)},r}(.5);function ck(t,e){this._context=t,this._alpha=e}ck.prototype={areaStart:Wa,areaEnd:Wa,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x3,this._y3),this._context.closePath();break}case 2:{this._context.lineTo(this._x3,this._y3),this._context.closePath();break}case 3:{this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5);break}}},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Pp(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const sH=function t(e){function r(n){return e?new ck(n,e):new Op(n,0)}return r.alpha=function(n){return t(+n)},r}(.5);function uk(t,e){this._context=t,this._alpha=e}uk.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Pp(this,t,e);break}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const oH=function t(e){function r(n){return e?new uk(n,e):new Fp(n,0)}return r.alpha=function(n){return t(+n)},r}(.5);function hk(t){this._context=t}hk.prototype={areaStart:Wa,areaEnd:Wa,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};function fk(t){return new hk(t)}function dk(t){return t<0?-1:1}function pk(t,e,r){var n=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(n||i<0&&-0),s=(r-t._y1)/(i||n<0&&-0),o=(a*i+s*n)/(n+i);return(dk(a)+dk(s))*Math.min(Math.abs(a),Math.abs(s),.5*Math.abs(o))||0}function gk(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function qp(t,e,r){var n=t._x0,i=t._y0,a=t._x1,s=t._y1,o=(a-n)/3;t._context.bezierCurveTo(n+o,i+o*e,a-o,s-o*r,a,s)}function wf(t){this._context=t}wf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:qp(this,this._t0,gk(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var r=NaN;if(t=+t,e=+e,!(t===this._x1&&e===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,qp(this,gk(this,r=pk(this,t,e)),r);break;default:qp(this,this._t0,r=pk(this,t,e));break}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}}};function yk(t){this._context=new mk(t)}(yk.prototype=Object.create(wf.prototype)).point=function(t,e){wf.prototype.point.call(this,e,t)};function mk(t){this._context=t}mk.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)}};function bk(t){return new wf(t)}function _k(t){return new yk(t)}function vk(t){this._context=t}vk.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),r===2)this._context.lineTo(t[1],e[1]);else for(var n=xk(t),i=xk(e),a=0,s=1;s<r;++a,++s)this._context.bezierCurveTo(n[0][a],i[0][a],n[1][a],i[1][a],t[s],e[s]);(this._line||this._line!==0&&r===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}};function xk(t){var e,r=t.length-1,n,i=new Array(r),a=new Array(r),s=new Array(r);for(i[0]=0,a[0]=2,s[0]=t[0]+2*t[1],e=1;e<r-1;++e)i[e]=1,a[e]=4,s[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,a[r-1]=7,s[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)n=i[e]/a[e-1],a[e]-=n,s[e]-=n*s[e-1];for(i[r-1]=s[r-1]/a[r-1],e=r-2;e>=0;--e)i[e]=(s[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e<r-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}function kk(t){return new vk(t)}function Tf(t,e){this._context=t,this._t=e}Tf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}break}}this._x=t,this._y=e}};function wk(t){return new Tf(t,.5)}function Tk(t){return new Tf(t,0)}function Ek(t){return new Tf(t,1)}function qo(t,e){if((s=t.length)>1)for(var r=1,n,i,a=t[e[0]],s,o=a.length;r<s;++r)for(i=a,a=t[e[r]],n=0;n<o;++n)a[n][1]+=a[n][0]=isNaN(i[n][1])?i[n][0]:i[n][1]}function Vo(t){for(var e=t.length,r=new Array(e);--e>=0;)r[e]=e;return r}function lH(t,e){return t[e]}function cH(t){const e=[];return e.key=t,e}function uH(){var t=xe([]),e=Vo,r=qo,n=lH;function i(a){var s=Array.from(t.apply(this,arguments),cH),o,l=s.length,u=-1,h;for(const d of a)for(o=0,++u;o<l;++o)(s[o][u]=[0,+n(d,s[o].key,u,a)]).data=d;for(o=0,h=mf(e(s));o<l;++o)s[h[o]].index=o;return r(s,h),s}return i.keys=function(a){return arguments.length?(t=typeof a=="function"?a:xe(Array.from(a)),i):t},i.value=function(a){return arguments.length?(n=typeof a=="function"?a:xe(+a),i):n},i.order=function(a){return arguments.length?(e=a==null?Vo:typeof a=="function"?a:xe(Array.from(a)),i):e},i.offset=function(a){return arguments.length?(r=a==null?qo:a,i):r},i}function hH(t,e){if((n=t.length)>0){for(var r,n,i=0,a=t[0].length,s;i<a;++i){for(s=r=0;r<n;++r)s+=t[r][i][1]||0;if(s)for(r=0;r<n;++r)t[r][i][1]/=s}qo(t,e)}}function fH(t,e){if((l=t.length)>0)for(var r,n=0,i,a,s,o,l,u=t[e[0]].length;n<u;++n)for(s=o=0,r=0;r<l;++r)(a=(i=t[e[r]][n])[1]-i[0])>0?(i[0]=s,i[1]=s+=a):a<0?(i[1]=o,i[0]=o+=a):(i[0]=0,i[1]=a)}function dH(t,e){if((i=t.length)>0){for(var r=0,n=t[e[0]],i,a=n.length;r<a;++r){for(var s=0,o=0;s<i;++s)o+=t[s][r][1]||0;n[r][1]+=n[r][0]=-o/2}qo(t,e)}}function pH(t,e){if(!(!((s=t.length)>0)||!((a=(i=t[e[0]]).length)>0))){for(var r=0,n=1,i,a,s;n<a;++n){for(var o=0,l=0,u=0;o<s;++o){for(var h=t[e[o]],d=h[n][1]||0,f=h[n-1][1]||0,p=(d-f)/2,m=0;m<o;++m){var _=t[e[m]],y=_[n][1]||0,b=_[n-1][1]||0;p+=y-b}l+=d,u+=p*d}i[n-1][1]+=i[n-1][0]=r,l&&(r-=u/l)}i[n-1][1]+=i[n-1][0]=r,qo(t,e)}}function Ck(t){var e=t.map(gH);return Vo(t).sort(function(r,n){return e[r]-e[n]})}function gH(t){for(var e=-1,r=0,n=t.length,i,a=-1/0;++e<n;)(i=+t[e][1])>a&&(a=i,r=e);return r}function Sk(t){var e=t.map(Ak);return Vo(t).sort(function(r,n){return e[r]-e[n]})}function Ak(t){for(var e=0,r=-1,n=t.length,i;++r<n;)(i=+t[r][1])&&(e+=i);return e}function yH(t){return Sk(t).reverse()}function mH(t){var e=t.length,r,n,i=t.map(Ak),a=Ck(t),s=0,o=0,l=[],u=[];for(r=0;r<e;++r)n=a[r],s<o?(s+=i[n],l.push(n)):(o+=i[n],u.push(n));return u.reverse().concat(l)}function bH(t){return Vo(t).reverse()}const Ef=t=>()=>t;function _H(t,{sourceEvent:e,target:r,transform:n,dispatch:i}){Object.defineProperties(this,{type:{value:t,enumerable:!0,configurable:!0},sourceEvent:{value:e,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},transform:{value:n,enumerable:!0,configurable:!0},_:{value:i}})}function Ri(t,e,r){this.k=t,this.x=e,this.y=r}Ri.prototype={constructor:Ri,scale:function(t){return t===1?this:new Ri(this.k*t,this.x,this.y)},translate:function(t,e){return t===0&e===0?this:new Ri(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var Cf=new Ri(1,0,0);Mk.prototype=Ri.prototype;function Mk(t){for(;!t.__zoom;)if(!(t=t.parentNode))return Cf;return t.__zoom}function Vp(t){t.stopImmediatePropagation()}function wc(t){t.preventDefault(),t.stopImmediatePropagation()}function vH(t){return(!t.ctrlKey||t.type==="wheel")&&!t.button}function xH(){var t=this;return t instanceof SVGElement?(t=t.ownerSVGElement||t,t.hasAttribute("viewBox")?(t=t.viewBox.baseVal,[[t.x,t.y],[t.x+t.width,t.y+t.height]]):[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]):[[0,0],[t.clientWidth,t.clientHeight]]}function Lk(){return this.__zoom||Cf}function kH(t){return-t.deltaY*(t.deltaMode===1?.05:t.deltaMode?1:.002)*(t.ctrlKey?10:1)}function wH(){return navigator.maxTouchPoints||"ontouchstart"in this}function TH(t,e,r){var n=t.invertX(e[0][0])-r[0][0],i=t.invertX(e[1][0])-r[1][0],a=t.invertY(e[0][1])-r[0][1],s=t.invertY(e[1][1])-r[1][1];return t.translate(i>n?(n+i)/2:Math.min(0,n)||Math.max(0,i),s>a?(a+s)/2:Math.min(0,a)||Math.max(0,s))}function EH(){var t=vH,e=xH,r=TH,n=kH,i=wH,a=[0,1/0],s=[[-1/0,-1/0],[1/0,1/0]],o=250,l=H5,u=fs("start","zoom","end"),h,d,f,p=500,m=150,_=0,y=10;function b(D){D.property("__zoom",Lk).on("wheel.zoom",R,{passive:!1}).on("mousedown.zoom",A).on("dblclick.zoom",L).filter(i).on("touchstart.zoom",v).on("touchmove.zoom",B).on("touchend.zoom touchcancel.zoom",w).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}b.transform=function(D,N,z,X){var ct=D.selection?D.selection():D;ct.property("__zoom",Lk),D!==ct?C(D,N,z,X):ct.interrupt().each(function(){M(this,arguments).event(X).start().zoom(null,typeof N=="function"?N.apply(this,arguments):N).end()})},b.scaleBy=function(D,N,z,X){b.scaleTo(D,function(){var ct=this.__zoom.k,J=typeof N=="function"?N.apply(this,arguments):N;return ct*J},z,X)},b.scaleTo=function(D,N,z,X){b.transform(D,function(){var ct=e.apply(this,arguments),J=this.__zoom,Y=z==null?T(ct):typeof z=="function"?z.apply(this,arguments):z,$=J.invert(Y),lt=typeof N=="function"?N.apply(this,arguments):N;return r(k(x(J,lt),Y,$),ct,s)},z,X)},b.translateBy=function(D,N,z,X){b.transform(D,function(){return r(this.__zoom.translate(typeof N=="function"?N.apply(this,arguments):N,typeof z=="function"?z.apply(this,arguments):z),e.apply(this,arguments),s)},null,X)},b.translateTo=function(D,N,z,X,ct){b.transform(D,function(){var J=e.apply(this,arguments),Y=this.__zoom,$=X==null?T(J):typeof X=="function"?X.apply(this,arguments):X;return r(Cf.translate($[0],$[1]).scale(Y.k).translate(typeof N=="function"?-N.apply(this,arguments):-N,typeof z=="function"?-z.apply(this,arguments):-z),J,s)},X,ct)};function x(D,N){return N=Math.max(a[0],Math.min(a[1],N)),N===D.k?D:new Ri(N,D.x,D.y)}function k(D,N,z){var X=N[0]-z[0]*D.k,ct=N[1]-z[1]*D.k;return X===D.x&&ct===D.y?D:new Ri(D.k,X,ct)}function T(D){return[(+D[0][0]+ +D[1][0])/2,(+D[0][1]+ +D[1][1])/2]}function C(D,N,z,X){D.on("start.zoom",function(){M(this,arguments).event(X).start()}).on("interrupt.zoom end.zoom",function(){M(this,arguments).event(X).end()}).tween("zoom",function(){var ct=this,J=arguments,Y=M(ct,J).event(X),$=e.apply(ct,J),lt=z==null?T($):typeof z=="function"?z.apply(ct,J):z,ut=Math.max($[1][0]-$[0][0],$[1][1]-$[0][1]),W=ct.__zoom,tt=typeof N=="function"?N.apply(ct,J):N,K=l(W.invert(lt).concat(ut/W.k),tt.invert(lt).concat(ut/tt.k));return function(it){if(it===1)it=tt;else{var Z=K(it),V=ut/Z[2];it=new Ri(V,lt[0]-Z[0]*V,lt[1]-Z[1]*V)}Y.zoom(null,it)}})}function M(D,N,z){return!z&&D.__zooming||new S(D,N)}function S(D,N){this.that=D,this.args=N,this.active=0,this.sourceEvent=null,this.extent=e.apply(D,N),this.taps=0}S.prototype={event:function(D){return D&&(this.sourceEvent=D),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(D,N){return this.mouse&&D!=="mouse"&&(this.mouse[1]=N.invert(this.mouse[0])),this.touch0&&D!=="touch"&&(this.touch0[1]=N.invert(this.touch0[0])),this.touch1&&D!=="touch"&&(this.touch1[1]=N.invert(this.touch1[0])),this.that.__zoom=N,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(D){var N=St(this.that).datum();u.call(D,this.that,new _H(D,{sourceEvent:this.sourceEvent,target:b,type:D,transform:this.that.__zoom,dispatch:u}),N)}};function R(D,...N){if(!t.apply(this,arguments))return;var z=M(this,N).event(D),X=this.__zoom,ct=Math.max(a[0],Math.min(a[1],X.k*Math.pow(2,n.apply(this,arguments)))),J=Tn(D);if(z.wheel)(z.mouse[0][0]!==J[0]||z.mouse[0][1]!==J[1])&&(z.mouse[1]=X.invert(z.mouse[0]=J)),clearTimeout(z.wheel);else{if(X.k===ct)return;z.mouse=[J,X.invert(J)],vs(this),z.start()}wc(D),z.wheel=setTimeout(Y,m),z.zoom("mouse",r(k(x(X,ct),z.mouse[0],z.mouse[1]),z.extent,s));function Y(){z.wheel=null,z.end()}}function A(D,...N){if(f||!t.apply(this,arguments))return;var z=D.currentTarget,X=M(this,N,!0).event(D),ct=St(D.view).on("mousemove.zoom",lt,!0).on("mouseup.zoom",ut,!0),J=Tn(D,z),Y=D.clientX,$=D.clientY;Bu(D.view),Vp(D),X.mouse=[J,this.__zoom.invert(J)],vs(this),X.start();function lt(W){if(wc(W),!X.moved){var tt=W.clientX-Y,K=W.clientY-$;X.moved=tt*tt+K*K>_}X.event(W).zoom("mouse",r(k(X.that.__zoom,X.mouse[0]=Tn(W,z),X.mouse[1]),X.extent,s))}function ut(W){ct.on("mousemove.zoom mouseup.zoom",null),Du(W.view,X.moved),wc(W),X.event(W).end()}}function L(D,...N){if(!!t.apply(this,arguments)){var z=this.__zoom,X=Tn(D.changedTouches?D.changedTouches[0]:D,this),ct=z.invert(X),J=z.k*(D.shiftKey?.5:2),Y=r(k(x(z,J),X,ct),e.apply(this,N),s);wc(D),o>0?St(this).transition().duration(o).call(C,Y,X,D):St(this).call(b.transform,Y,X,D)}}function v(D,...N){if(!!t.apply(this,arguments)){var z=D.touches,X=z.length,ct=M(this,N,D.changedTouches.length===X).event(D),J,Y,$,lt;for(Vp(D),Y=0;Y<X;++Y)$=z[Y],lt=Tn($,this),lt=[lt,this.__zoom.invert(lt),$.identifier],ct.touch0?!ct.touch1&&ct.touch0[2]!==lt[2]&&(ct.touch1=lt,ct.taps=0):(ct.touch0=lt,J=!0,ct.taps=1+!!h);h&&(h=clearTimeout(h)),J&&(ct.taps<2&&(d=lt[0],h=setTimeout(function(){h=null},p)),vs(this),ct.start())}}function B(D,...N){if(!!this.__zooming){var z=M(this,N).event(D),X=D.changedTouches,ct=X.length,J,Y,$,lt;for(wc(D),J=0;J<ct;++J)Y=X[J],$=Tn(Y,this),z.touch0&&z.touch0[2]===Y.identifier?z.touch0[0]=$:z.touch1&&z.touch1[2]===Y.identifier&&(z.touch1[0]=$);if(Y=z.that.__zoom,z.touch1){var ut=z.touch0[0],W=z.touch0[1],tt=z.touch1[0],K=z.touch1[1],it=(it=tt[0]-ut[0])*it+(it=tt[1]-ut[1])*it,Z=(Z=K[0]-W[0])*Z+(Z=K[1]-W[1])*Z;Y=x(Y,Math.sqrt(it/Z)),$=[(ut[0]+tt[0])/2,(ut[1]+tt[1])/2],lt=[(W[0]+K[0])/2,(W[1]+K[1])/2]}else if(z.touch0)$=z.touch0[0],lt=z.touch0[1];else return;z.zoom("touch",r(k(Y,$,lt),z.extent,s))}}function w(D,...N){if(!!this.__zooming){var z=M(this,N).event(D),X=D.changedTouches,ct=X.length,J,Y;for(Vp(D),f&&clearTimeout(f),f=setTimeout(function(){f=null},p),J=0;J<ct;++J)Y=X[J],z.touch0&&z.touch0[2]===Y.identifier?delete z.touch0:z.touch1&&z.touch1[2]===Y.identifier&&delete z.touch1;if(z.touch1&&!z.touch0&&(z.touch0=z.touch1,delete z.touch1),z.touch0)z.touch0[1]=this.__zoom.invert(z.touch0[0]);else if(z.end(),z.taps===2&&(Y=Tn(Y,this),Math.hypot(d[0]-Y[0],d[1]-Y[1])<y)){var $=St(this).on("dblclick.zoom");$&&$.apply(this,arguments)}}}return b.wheelDelta=function(D){return arguments.length?(n=typeof D=="function"?D:Ef(+D),b):n},b.filter=function(D){return arguments.length?(t=typeof D=="function"?D:Ef(!!D),b):t},b.touchable=function(D){return arguments.length?(i=typeof D=="function"?D:Ef(!!D),b):i},b.extent=function(D){return arguments.length?(e=typeof D=="function"?D:Ef([[+D[0][0],+D[0][1]],[+D[1][0],+D[1][1]]]),b):e},b.scaleExtent=function(D){return arguments.length?(a[0]=+D[0],a[1]=+D[1],b):[a[0],a[1]]},b.translateExtent=function(D){return arguments.length?(s[0][0]=+D[0][0],s[1][0]=+D[1][0],s[0][1]=+D[0][1],s[1][1]=+D[1][1],b):[[s[0][0],s[0][1]],[s[1][0],s[1][1]]]},b.constrain=function(D){return arguments.length?(r=D,b):r},b.duration=function(D){return arguments.length?(o=+D,b):o},b.interpolate=function(D){return arguments.length?(l=D,b):l},b.on=function(){var D=u.on.apply(u,arguments);return D===u?b:D},b.clickDistance=function(D){return arguments.length?(_=(D=+D)*D,b):Math.sqrt(_)},b.tapDistance=function(D){return arguments.length?(y=+D,b):y},b}const CH=Object.freeze(Object.defineProperty({__proto__:null,bisect:cs,bisectRight:x_,bisectLeft:SR,bisectCenter:AR,ascending:Qe,bisector:ku,blur:MR,blur2:k_,blurImage:LR,count:wu,cross:FR,cumsum:PR,descending:m_,deviation:E_,extent:xl,Adder:_r,fsum:qR,fcumsum:VR,group:M_,flatGroup:zR,flatRollup:YR,groups:L_,index:UR,indexes:WR,rollup:I_,rollups:N_,groupSort:HR,bin:F_,histogram:F_,thresholdFreedmanDiaconis:$R,thresholdScott:XR,thresholdSturges:W0,max:lo,maxIndex:H0,mean:KR,median:ZR,medianIndex:QR,merge:j0,min:Tl,minIndex:G0,mode:tI,nice:O_,pairs:eI,permute:D_,quantile:Cl,quantileIndex:V_,quantileSorted:q_,quickselect:Eu,range:Ca,rank:nI,least:iI,leastIndex:z_,greatest:P_,greatestIndex:aI,scan:sI,shuffle:oI,shuffler:Y_,sum:lI,ticks:hs,tickIncrement:oo,tickStep:wl,transpose:U_,variance:T_,zip:uI,every:hI,some:fI,filter:dI,map:pI,reduce:gI,reverse:yI,sort:q0,difference:mI,disjoint:bI,intersection:_I,subset:xI,superset:W_,union:kI,InternMap:kl,InternSet:us,axisTop:j_,axisRight:MI,axisBottom:$_,axisLeft:LI,brush:KO,brushX:$O,brushY:XO,brushSelection:jO,chord:QO,chordTranspose:JO,chordDirected:tF,ribbon:cF,ribbonArrow:uF,color:Aa,rgb:po,hsl:qu,lab:Yu,hcl:Uu,lch:IB,gray:RB,cubehelix:Qn,contours:Ud,contourDensity:wF,Delaunay:jd,Voronoi:Nv,dispatch:fs,drag:_B,dragDisable:Bu,dragEnable:Du,dsvFormat:uh,csvParse:Fv,csvParseRows:GF,csvFormat:jF,csvFormatBody:$F,csvFormatRows:XF,csvFormatRow:KF,csvFormatValue:ZF,tsvParse:Pv,tsvParseRows:QF,tsvFormat:JF,tsvFormatBody:tP,tsvFormatRows:eP,tsvFormatRow:rP,tsvFormatValue:nP,autoType:iP,easeLinear:sO,easeQuad:ov,easeQuadIn:oO,easeQuadOut:lO,easeQuadInOut:ov,easeCubic:Ed,easeCubicIn:cO,easeCubicOut:uO,easeCubicInOut:Ed,easePoly:lv,easePolyIn:hO,easePolyOut:fO,easePolyInOut:lv,easeSin:hv,easeSinIn:dO,easeSinOut:pO,easeSinInOut:hv,easeExp:fv,easeExpIn:gO,easeExpOut:yO,easeExpInOut:fv,easeCircle:dv,easeCircleIn:mO,easeCircleOut:bO,easeCircleInOut:dv,easeBounce:Vl,easeBounceIn:SO,easeBounceOut:Vl,easeBounceInOut:AO,easeBack:pv,easeBackIn:MO,easeBackOut:LO,easeBackInOut:pv,easeElastic:gv,easeElasticIn:RO,easeElasticOut:gv,easeElasticInOut:IO,blob:oP,buffer:cP,dsv:hP,csv:fP,tsv:dP,image:pP,json:yP,text:hh,xml:mP,html:bP,svg:_P,forceCenter:vP,forceCollide:qP,forceLink:zP,forceManyBody:KP,forceRadial:ZP,forceSimulation:XP,forceX:QP,forceY:JP,formatDefaultLocale:Zv,get format(){return yh},get formatPrefix(){return Jd},formatLocale:Kv,formatSpecifier:Co,FormatSpecifier:ph,precisionFixed:Qv,precisionPrefix:Jv,precisionRound:t6,geoArea:cq,geoBounds:dq,geoCentroid:_q,geoCircle:vq,geoClipAntimeridian:m2,geoClipCircle:N6,geoClipExtent:Sq,geoClipRectangle:Fh,geoContains:Bq,geoDistance:Vh,geoGraticule:U6,geoGraticule10:Dq,geoInterpolate:Oq,geoLength:B6,geoPath:$q,geoAlbers:hx,geoAlbersUsa:iV,geoAzimuthalEqualArea:aV,geoAzimuthalEqualAreaRaw:P2,geoAzimuthalEquidistant:sV,geoAzimuthalEquidistantRaw:q2,geoConicConformal:lV,geoConicConformalRaw:px,geoConicEqualArea:Xh,geoConicEqualAreaRaw:ux,geoConicEquidistant:uV,geoConicEquidistantRaw:gx,geoEqualEarth:fV,geoEqualEarthRaw:V2,geoEquirectangular:cV,geoEquirectangularRaw:ac,geoGnomonic:dV,geoGnomonicRaw:z2,geoIdentity:pV,geoProjection:Li,geoProjectionMutator:O2,geoMercator:oV,geoMercatorRaw:ic,geoNaturalEarth1:gV,geoNaturalEarth1Raw:Y2,geoOrthographic:yV,geoOrthographicRaw:U2,geoStereographic:mV,geoStereographicRaw:W2,geoTransverseMercator:bV,geoTransverseMercatorRaw:H2,geoRotation:E6,geoStream:ti,geoTransform:Xq,cluster:CV,hierarchy:G2,Node:Ms,pack:rz,packSiblings:tz,packEnclose:KV,partition:nz,stratify:oz,tree:pz,treemap:gz,treemapBinary:yz,treemapDice:hc,treemapSlice:rf,treemapSliceDice:mz,treemapSquarify:Nx,treemapResquarify:bz,interpolate:Ma,interpolateArray:FB,interpolateBasis:L5,interpolateBasisClosed:R5,interpolateDate:F5,interpolateDiscrete:VB,interpolateHue:zB,interpolateNumber:Bn,interpolateNumberArray:dd,interpolateObject:P5,interpolateRound:ju,interpolateString:yd,interpolateTransformCss:Y5,interpolateTransformSvg:U5,interpolateZoom:H5,interpolateRgb:Nl,interpolateRgbBasis:B5,interpolateRgbBasisClosed:OB,interpolateHsl:jB,interpolateHslLong:$B,interpolateLab:XB,interpolateHcl:$5,interpolateHclLong:KB,interpolateCubehelix:ZB,interpolateCubehelixLong:Xu,piecewise:K5,quantize:QB,path:Ra,polygonArea:_z,polygonCentroid:vz,polygonHull:wz,polygonContains:Tz,polygonLength:Ez,quadtree:fh,randomUniform:Cz,randomInt:Sz,randomNormal:tp,randomLogNormal:Az,randomBates:Mz,randomIrwinHall:Dx,randomExponential:Lz,randomPareto:Rz,randomBernoulli:Iz,randomGeometric:Ox,randomBinomial:Px,randomGamma:ep,randomBeta:Fx,randomWeibull:Nz,randomCauchy:Bz,randomLogistic:Dz,randomPoisson:Oz,randomLcg:qz,scaleBand:np,scalePoint:Vz,scaleIdentity:Ux,scaleLinear:sp,scaleLog:$x,scaleSymlog:Zx,scaleOrdinal:nf,scaleImplicit:rp,scalePow:up,scaleSqrt:Qz,scaleRadial:t8,scaleQuantile:e8,scaleQuantize:r8,scaleThreshold:n8,scaleTime:X8,scaleUtc:MU,scaleSequential:K8,scaleSequentialLog:Z8,scaleSequentialPow:Ap,scaleSequentialSqrt:LU,scaleSequentialSymlog:Q8,scaleSequentialQuantile:J8,scaleDiverging:t7,scaleDivergingLog:e7,scaleDivergingPow:Mp,scaleDivergingSqrt:RU,scaleDivergingSymlog:r7,tickFormat:Yx,schemeCategory10:IU,schemeAccent:NU,schemeDark2:BU,schemePaired:DU,schemePastel1:OU,schemePastel2:FU,schemeSet1:PU,schemeSet2:qU,schemeSet3:VU,schemeTableau10:zU,interpolateBrBG:YU,schemeBrBG:n7,interpolatePRGn:UU,schemePRGn:i7,interpolatePiYG:WU,schemePiYG:a7,interpolatePuOr:HU,schemePuOr:s7,interpolateRdBu:GU,schemeRdBu:o7,interpolateRdGy:jU,schemeRdGy:l7,interpolateRdYlBu:$U,schemeRdYlBu:c7,interpolateRdYlGn:XU,schemeRdYlGn:u7,interpolateSpectral:KU,schemeSpectral:h7,interpolateBuGn:ZU,schemeBuGn:f7,interpolateBuPu:QU,schemeBuPu:d7,interpolateGnBu:JU,schemeGnBu:p7,interpolateOrRd:tW,schemeOrRd:g7,interpolatePuBuGn:eW,schemePuBuGn:y7,interpolatePuBu:rW,schemePuBu:m7,interpolatePuRd:nW,schemePuRd:b7,interpolateRdPu:iW,schemeRdPu:_7,interpolateYlGnBu:aW,schemeYlGnBu:v7,interpolateYlGn:sW,schemeYlGn:x7,interpolateYlOrBr:oW,schemeYlOrBr:k7,interpolateYlOrRd:lW,schemeYlOrRd:w7,interpolateBlues:cW,schemeBlues:T7,interpolateGreens:uW,schemeGreens:E7,interpolateGreys:hW,schemeGreys:C7,interpolatePurples:fW,schemePurples:S7,interpolateReds:dW,schemeReds:A7,interpolateOranges:pW,schemeOranges:M7,interpolateCividis:gW,interpolateCubehelixDefault:yW,interpolateRainbow:_W,interpolateWarm:mW,interpolateCool:bW,interpolateSinebow:kW,interpolateTurbo:wW,interpolateViridis:TW,interpolateMagma:EW,interpolateInferno:CW,interpolatePlasma:SW,create:hB,creator:Lu,local:i5,matcher:Q0,namespace:Al,namespaces:K0,pointer:Tn,pointers:dB,select:St,selectAll:Nu,selection:ps,selector:Ru,selectorAll:Z0,style:ds,window:J0,arc:yf,area:N7,line:Ua,pie:B7,areaRadial:P7,radialArea:P7,lineRadial:F7,radialLine:F7,pointRadial:kc,link:bf,linkHorizontal:UW,linkVertical:WW,linkRadial:HW,symbol:tH,symbolsStroke:JW,symbolsFill:rk,symbols:rk,symbolAsterisk:Y7,symbolCircle:_f,symbolCross:U7,symbolDiamond:H7,symbolDiamond2:G7,symbolPlus:j7,symbolSquare:$7,symbolSquare2:X7,symbolStar:Z7,symbolTriangle:Q7,symbolTriangle2:J7,symbolWye:tk,symbolX:ek,curveBasisClosed:ik,curveBasisOpen:sk,curveBasis:Os,curveBumpX:V7,curveBumpY:z7,curveBundle:eH,curveCardinalClosed:nH,curveCardinalOpen:iH,curveCardinal:rH,curveCatmullRomClosed:sH,curveCatmullRomOpen:oH,curveCatmullRom:aH,curveLinearClosed:fk,curveLinear:yn,curveMonotoneX:bk,curveMonotoneY:_k,curveNatural:kk,curveStep:wk,curveStepAfter:Ek,curveStepBefore:Tk,stack:uH,stackOffsetExpand:hH,stackOffsetDiverging:fH,stackOffsetNone:qo,stackOffsetSilhouette:dH,stackOffsetWiggle:pH,stackOrderAppearance:Ck,stackOrderAscending:Sk,stackOrderDescending:yH,stackOrderInsideOut:mH,stackOrderNone:Vo,stackOrderReverse:bH,timeInterval:xr,timeMillisecond:dp,timeMilliseconds:i8,utcMillisecond:dp,utcMilliseconds:i8,timeSecond:Fa,timeSeconds:o8,utcSecond:Fa,utcSeconds:o8,timeMinute:yp,timeMinutes:tY,timeHour:mp,timeHours:eY,timeDay:dc,timeDays:rY,timeWeek:Do,timeWeeks:g8,timeSunday:Do,timeSundays:g8,timeMonday:pc,timeMondays:nY,timeTuesday:h8,timeTuesdays:iY,timeWednesday:f8,timeWednesdays:aY,timeThursday:Ns,timeThursdays:sY,timeFriday:d8,timeFridays:oY,timeSaturday:p8,timeSaturdays:lY,timeMonth:bp,timeMonths:cY,timeYear:Pa,timeYears:uY,utcMinute:vp,utcMinutes:hY,utcHour:xp,utcHours:fY,utcDay:gc,utcDays:dY,utcWeek:Oo,utcWeeks:T8,utcSunday:Oo,utcSundays:T8,utcMonday:yc,utcMondays:pY,utcTuesday:v8,utcTuesdays:gY,utcWednesday:x8,utcWednesdays:yY,utcThursday:Ds,utcThursdays:mY,utcFriday:k8,utcFridays:bY,utcSaturday:w8,utcSaturdays:_Y,utcMonth:kp,utcMonths:vY,utcYear:qa,utcYears:xY,utcTicks:S8,utcTickInterval:A8,timeTicks:M8,timeTickInterval:L8,timeFormatDefaultLocale:j8,get timeFormat(){return vc},get timeParse(){return G8},get utcFormat(){return lf},get utcParse(){return Cp},timeFormatLocale:R8,isoFormat:wU,isoParse:CU,now:Pl,timer:Ju,timerFlush:J5,timeout:_d,interval:rD,transition:av,active:FO,interrupt:vs,zoom:EH,zoomTransform:Mk,zoomIdentity:Cf,ZoomTransform:Ri},Symbol.toStringTag,{value:"Module"}));/*! @license DOMPurify 2.4.0 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.0/LICENSE */function Ha(t){return Ha=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ha(t)}function zp(t,e){return zp=Object.setPrototypeOf||function(n,i){return n.__proto__=i,n},zp(t,e)}function SH(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Sf(t,e,r){return SH()?Sf=Reflect.construct:Sf=function(i,a,s){var o=[null];o.push.apply(o,a);var l=Function.bind.apply(i,o),u=new l;return s&&zp(u,s.prototype),u},Sf.apply(null,arguments)}function ni(t){return AH(t)||MH(t)||LH(t)||RH()}function AH(t){if(Array.isArray(t))return Yp(t)}function MH(t){if(typeof Symbol<"u"&&t[Symbol.iterator]!=null||t["@@iterator"]!=null)return Array.from(t)}function LH(t,e){if(!!t){if(typeof t=="string")return Yp(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor&&(r=t.constructor.name),r==="Map"||r==="Set")return Array.from(t);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Yp(t,e)}}function Yp(t,e){(e==null||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function RH(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var IH=Object.hasOwnProperty,Rk=Object.setPrototypeOf,NH=Object.isFrozen,BH=Object.getPrototypeOf,DH=Object.getOwnPropertyDescriptor,sn=Object.freeze,Ii=Object.seal,OH=Object.create,Ik=typeof Reflect<"u"&&Reflect,Af=Ik.apply,Up=Ik.construct;Af||(Af=function(e,r,n){return e.apply(r,n)}),sn||(sn=function(e){return e}),Ii||(Ii=function(e){return e}),Up||(Up=function(e,r){return Sf(e,ni(r))});var FH=ii(Array.prototype.forEach),Nk=ii(Array.prototype.pop),Tc=ii(Array.prototype.push),Mf=ii(String.prototype.toLowerCase),PH=ii(String.prototype.match),Ga=ii(String.prototype.replace),qH=ii(String.prototype.indexOf),VH=ii(String.prototype.trim),on=ii(RegExp.prototype.test),Wp=zH(TypeError);function ii(t){return function(e){for(var r=arguments.length,n=new Array(r>1?r-1:0),i=1;i<r;i++)n[i-1]=arguments[i];return Af(t,e,n)}}function zH(t){return function(){for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return Up(t,r)}}function Me(t,e,r){r=r||Mf,Rk&&Rk(t,null);for(var n=e.length;n--;){var i=e[n];if(typeof i=="string"){var a=r(i);a!==i&&(NH(e)||(e[n]=a),i=a)}t[i]=!0}return t}function Fs(t){var e=OH(null),r;for(r in t)Af(IH,t,[r])&&(e[r]=t[r]);return e}function Lf(t,e){for(;t!==null;){var r=DH(t,e);if(r){if(r.get)return ii(r.get);if(typeof r.value=="function")return ii(r.value)}t=BH(t)}function n(i){return console.warn("fallback value for",i),null}return n}var Bk=sn(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Hp=sn(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Gp=sn(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),YH=sn(["animate","color-profile","cursor","discard","fedropshadow","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),jp=sn(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),UH=sn(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Dk=sn(["#text"]),Ok=sn(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),$p=sn(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Fk=sn(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Rf=sn(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),WH=Ii(/\{\{[\w\W]*|[\w\W]*\}\}/gm),HH=Ii(/<%[\w\W]*|[\w\W]*%>/gm),GH=Ii(/^data-[\-\w.\u00B7-\uFFFF]/),jH=Ii(/^aria-[\-\w]+$/),$H=Ii(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),XH=Ii(/^(?:\w+script|data):/i),KH=Ii(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),ZH=Ii(/^html$/i),QH=function(){return typeof window>"u"?null:window},JH=function(e,r){if(Ha(e)!=="object"||typeof e.createPolicy!="function")return null;var n=null,i="data-tt-policy-suffix";r.currentScript&&r.currentScript.hasAttribute(i)&&(n=r.currentScript.getAttribute(i));var a="dompurify"+(n?"#"+n:"");try{return e.createPolicy(a,{createHTML:function(o){return o},createScriptURL:function(o){return o}})}catch{return console.warn("TrustedTypes policy "+a+" could not be created."),null}};function Pk(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:QH(),e=function(st){return Pk(st)};if(e.version="2.4.0",e.removed=[],!t||!t.document||t.document.nodeType!==9)return e.isSupported=!1,e;var r=t.document,n=t.document,i=t.DocumentFragment,a=t.HTMLTemplateElement,s=t.Node,o=t.Element,l=t.NodeFilter,u=t.NamedNodeMap,h=u===void 0?t.NamedNodeMap||t.MozNamedAttrMap:u,d=t.HTMLFormElement,f=t.DOMParser,p=t.trustedTypes,m=o.prototype,_=Lf(m,"cloneNode"),y=Lf(m,"nextSibling"),b=Lf(m,"childNodes"),x=Lf(m,"parentNode");if(typeof a=="function"){var k=n.createElement("template");k.content&&k.content.ownerDocument&&(n=k.content.ownerDocument)}var T=JH(p,r),C=T?T.createHTML(""):"",M=n,S=M.implementation,R=M.createNodeIterator,A=M.createDocumentFragment,L=M.getElementsByTagName,v=r.importNode,B={};try{B=Fs(n).documentMode?n.documentMode:{}}catch{}var w={};e.isSupported=typeof x=="function"&&S&&typeof S.createHTMLDocument<"u"&&B!==9;var D=WH,N=HH,z=GH,X=jH,ct=XH,J=KH,Y=$H,$=null,lt=Me({},[].concat(ni(Bk),ni(Hp),ni(Gp),ni(jp),ni(Dk))),ut=null,W=Me({},[].concat(ni(Ok),ni($p),ni(Fk),ni(Rf))),tt=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),K=null,it=null,Z=!0,V=!0,Q=!1,q=!1,U=!1,F=!1,j=!1,P=!1,et=!1,at=!1,It=!0,Lt=!1,Rt="user-content-",Ct=!0,pt=!1,mt={},vt=null,Tt=Me({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),ft=null,le=Me({},["audio","video","img","source","image","track"]),Dt=null,Gt=Me({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),$t="http://www.w3.org/1998/Math/MathML",Qt="http://www.w3.org/2000/svg",we="http://www.w3.org/1999/xhtml",jt=we,Ft=!1,zt,wt=["application/xhtml+xml","text/html"],bt="text/html",Et,kt=null,Ut=n.createElement("form"),gt=function(st){return st instanceof RegExp||st instanceof Function},he=function(st){kt&&kt===st||((!st||Ha(st)!=="object")&&(st={}),st=Fs(st),zt=wt.indexOf(st.PARSER_MEDIA_TYPE)===-1?zt=bt:zt=st.PARSER_MEDIA_TYPE,Et=zt==="application/xhtml+xml"?function(At){return At}:Mf,$="ALLOWED_TAGS"in st?Me({},st.ALLOWED_TAGS,Et):lt,ut="ALLOWED_ATTR"in st?Me({},st.ALLOWED_ATTR,Et):W,Dt="ADD_URI_SAFE_ATTR"in st?Me(Fs(Gt),st.ADD_URI_SAFE_ATTR,Et):Gt,ft="ADD_DATA_URI_TAGS"in st?Me(Fs(le),st.ADD_DATA_URI_TAGS,Et):le,vt="FORBID_CONTENTS"in st?Me({},st.FORBID_CONTENTS,Et):Tt,K="FORBID_TAGS"in st?Me({},st.FORBID_TAGS,Et):{},it="FORBID_ATTR"in st?Me({},st.FORBID_ATTR,Et):{},mt="USE_PROFILES"in st?st.USE_PROFILES:!1,Z=st.ALLOW_ARIA_ATTR!==!1,V=st.ALLOW_DATA_ATTR!==!1,Q=st.ALLOW_UNKNOWN_PROTOCOLS||!1,q=st.SAFE_FOR_TEMPLATES||!1,U=st.WHOLE_DOCUMENT||!1,P=st.RETURN_DOM||!1,et=st.RETURN_DOM_FRAGMENT||!1,at=st.RETURN_TRUSTED_TYPE||!1,j=st.FORCE_BODY||!1,It=st.SANITIZE_DOM!==!1,Lt=st.SANITIZE_NAMED_PROPS||!1,Ct=st.KEEP_CONTENT!==!1,pt=st.IN_PLACE||!1,Y=st.ALLOWED_URI_REGEXP||Y,jt=st.NAMESPACE||we,st.CUSTOM_ELEMENT_HANDLING&&gt(st.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(tt.tagNameCheck=st.CUSTOM_ELEMENT_HANDLING.tagNameCheck),st.CUSTOM_ELEMENT_HANDLING&&gt(st.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(tt.attributeNameCheck=st.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),st.CUSTOM_ELEMENT_HANDLING&&typeof st.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(tt.allowCustomizedBuiltInElements=st.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),q&&(V=!1),et&&(P=!0),mt&&($=Me({},ni(Dk)),ut=[],mt.html===!0&&(Me($,Bk),Me(ut,Ok)),mt.svg===!0&&(Me($,Hp),Me(ut,$p),Me(ut,Rf)),mt.svgFilters===!0&&(Me($,Gp),Me(ut,$p),Me(ut,Rf)),mt.mathMl===!0&&(Me($,jp),Me(ut,Fk),Me(ut,Rf))),st.ADD_TAGS&&($===lt&&($=Fs($)),Me($,st.ADD_TAGS,Et)),st.ADD_ATTR&&(ut===W&&(ut=Fs(ut)),Me(ut,st.ADD_ATTR,Et)),st.ADD_URI_SAFE_ATTR&&Me(Dt,st.ADD_URI_SAFE_ATTR,Et),st.FORBID_CONTENTS&&(vt===Tt&&(vt=Fs(vt)),Me(vt,st.FORBID_CONTENTS,Et)),Ct&&($["#text"]=!0),U&&Me($,["html","head","body"]),$.table&&(Me($,["tbody"]),delete K.tbody),sn&&sn(st),kt=st)},yt=Me({},["mi","mo","mn","ms","mtext"]),ne=Me({},["foreignobject","desc","title","annotation-xml"]),ve=Me({},["title","style","font","a","script"]),ye=Me({},Hp);Me(ye,Gp),Me(ye,YH);var be=Me({},jp);Me(be,UH);var Te=function(st){var At=x(st);(!At||!At.tagName)&&(At={namespaceURI:we,tagName:"template"});var Nt=Mf(st.tagName),Jt=Mf(At.tagName);return st.namespaceURI===Qt?At.namespaceURI===we?Nt==="svg":At.namespaceURI===$t?Nt==="svg"&&(Jt==="annotation-xml"||yt[Jt]):Boolean(ye[Nt]):st.namespaceURI===$t?At.namespaceURI===we?Nt==="math":At.namespaceURI===Qt?Nt==="math"&&ne[Jt]:Boolean(be[Nt]):st.namespaceURI===we?At.namespaceURI===Qt&&!ne[Jt]||At.namespaceURI===$t&&!yt[Jt]?!1:!be[Nt]&&(ve[Nt]||!ye[Nt]):!1},Wt=function(st){Tc(e.removed,{element:st});try{st.parentNode.removeChild(st)}catch{try{st.outerHTML=C}catch{st.remove()}}},se=function(st,At){try{Tc(e.removed,{attribute:At.getAttributeNode(st),from:At})}catch{Tc(e.removed,{attribute:null,from:At})}if(At.removeAttribute(st),st==="is"&&!ut[st])if(P||et)try{Wt(At)}catch{}else try{At.setAttribute(st,"")}catch{}},me=function(st){var At,Nt;if(j)st="<remove></remove>"+st;else{var Jt=PH(st,/^[\r\n\t ]+/);Nt=Jt&&Jt[0]}zt==="application/xhtml+xml"&&(st='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+st+"</body></html>");var ze=T?T.createHTML(st):st;if(jt===we)try{At=new f().parseFromString(ze,zt)}catch{}if(!At||!At.documentElement){At=S.createDocument(jt,"template",null);try{At.documentElement.innerHTML=Ft?"":ze}catch{}}var Pe=At.body||At.documentElement;return st&&Nt&&Pe.insertBefore(n.createTextNode(Nt),Pe.childNodes[0]||null),jt===we?L.call(At,U?"html":"body")[0]:U?At.documentElement:Pe},ue=function(st){return R.call(st.ownerDocument||st,st,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT,null,!1)},_a=function(st){return st instanceof d&&(typeof st.nodeName!="string"||typeof st.textContent!="string"||typeof st.removeChild!="function"||!(st.attributes instanceof h)||typeof st.removeAttribute!="function"||typeof st.setAttribute!="function"||typeof st.namespaceURI!="string"||typeof st.insertBefore!="function")},Hr=function(st){return Ha(s)==="object"?st instanceof s:st&&Ha(st)==="object"&&typeof st.nodeType=="number"&&typeof st.nodeName=="string"},Ie=function(st,At,Nt){!w[st]||FH(w[st],function(Jt){Jt.call(e,At,Nt,kt)})},oe=function(st){var At;if(Ie("beforeSanitizeElements",st,null),_a(st)||on(/[\u0080-\uFFFF]/,st.nodeName))return Wt(st),!0;var Nt=Et(st.nodeName);if(Ie("uponSanitizeElement",st,{tagName:Nt,allowedTags:$}),st.hasChildNodes()&&!Hr(st.firstElementChild)&&(!Hr(st.content)||!Hr(st.content.firstElementChild))&&on(/<[/\w]/g,st.innerHTML)&&on(/<[/\w]/g,st.textContent)||Nt==="select"&&on(/<template/i,st.innerHTML))return Wt(st),!0;if(!$[Nt]||K[Nt]){if(!K[Nt]&&wr(Nt)&&(tt.tagNameCheck instanceof RegExp&&on(tt.tagNameCheck,Nt)||tt.tagNameCheck instanceof Function&&tt.tagNameCheck(Nt)))return!1;if(Ct&&!vt[Nt]){var Jt=x(st)||st.parentNode,ze=b(st)||st.childNodes;if(ze&&Jt)for(var Pe=ze.length,qe=Pe-1;qe>=0;--qe)Jt.insertBefore(_(ze[qe],!0),y(st))}return Wt(st),!0}return st instanceof o&&!Te(st)||(Nt==="noscript"||Nt==="noembed")&&on(/<\/no(script|embed)/i,st.innerHTML)?(Wt(st),!0):(q&&st.nodeType===3&&(At=st.textContent,At=Ga(At,D," "),At=Ga(At,N," "),st.textContent!==At&&(Tc(e.removed,{element:st.cloneNode()}),st.textContent=At)),Ie("afterSanitizeElements",st,null),!1)},Ke=function(st,At,Nt){if(It&&(At==="id"||At==="name")&&(Nt in n||Nt in Ut))return!1;if(!(V&&!it[At]&&on(z,At))){if(!(Z&&on(X,At))){if(!ut[At]||it[At]){if(!(wr(st)&&(tt.tagNameCheck instanceof RegExp&&on(tt.tagNameCheck,st)||tt.tagNameCheck instanceof Function&&tt.tagNameCheck(st))&&(tt.attributeNameCheck instanceof RegExp&&on(tt.attributeNameCheck,At)||tt.attributeNameCheck instanceof Function&&tt.attributeNameCheck(At))||At==="is"&&tt.allowCustomizedBuiltInElements&&(tt.tagNameCheck instanceof RegExp&&on(tt.tagNameCheck,Nt)||tt.tagNameCheck instanceof Function&&tt.tagNameCheck(Nt))))return!1}else if(!Dt[At]){if(!on(Y,Ga(Nt,J,""))){if(!((At==="src"||At==="xlink:href"||At==="href")&&st!=="script"&&qH(Nt,"data:")===0&&ft[st])){if(!(Q&&!on(ct,Ga(Nt,J,"")))){if(Nt)return!1}}}}}}return!0},wr=function(st){return st.indexOf("-")>0},Ge=function(st){var At,Nt,Jt,ze;Ie("beforeSanitizeAttributes",st,null);var Pe=st.attributes;if(!!Pe){var qe={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ut};for(ze=Pe.length;ze--;){At=Pe[ze];var Tr=At,Ve=Tr.name,va=Tr.namespaceURI;if(Nt=Ve==="value"?At.value:VH(At.value),Jt=Et(Ve),qe.attrName=Jt,qe.attrValue=Nt,qe.keepAttr=!0,qe.forceKeepAttr=void 0,Ie("uponSanitizeAttribute",st,qe),Nt=qe.attrValue,!qe.forceKeepAttr&&(se(Ve,st),!!qe.keepAttr)){if(on(/\/>/i,Nt)){se(Ve,st);continue}q&&(Nt=Ga(Nt,D," "),Nt=Ga(Nt,N," "));var Ce=Et(st.nodeName);if(!!Ke(Ce,Jt,Nt)){if(Lt&&(Jt==="id"||Jt==="name")&&(se(Ve,st),Nt=Rt+Nt),T&&Ha(p)==="object"&&typeof p.getAttributeType=="function"&&!va)switch(p.getAttributeType(Ce,Jt)){case"TrustedHTML":Nt=T.createHTML(Nt);break;case"TrustedScriptURL":Nt=T.createScriptURL(Nt);break}try{va?st.setAttributeNS(va,Ve,Nt):st.setAttribute(Ve,Nt),Nk(e.removed)}catch{}}}}Ie("afterSanitizeAttributes",st,null)}},Ze=function qt(st){var At,Nt=ue(st);for(Ie("beforeSanitizeShadowDOM",st,null);At=Nt.nextNode();)Ie("uponSanitizeShadowNode",At,null),!oe(At)&&(At.content instanceof i&&qt(At.content),Ge(At));Ie("afterSanitizeShadowDOM",st,null)};return e.sanitize=function(qt){var st=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},At,Nt,Jt,ze,Pe;if(Ft=!qt,Ft&&(qt="<!-->"),typeof qt!="string"&&!Hr(qt)){if(typeof qt.toString!="function")throw Wp("toString is not a function");if(qt=qt.toString(),typeof qt!="string")throw Wp("dirty is not a string, aborting")}if(!e.isSupported){if(Ha(t.toStaticHTML)==="object"||typeof t.toStaticHTML=="function"){if(typeof qt=="string")return t.toStaticHTML(qt);if(Hr(qt))return t.toStaticHTML(qt.outerHTML)}return qt}if(F||he(st),e.removed=[],typeof qt=="string"&&(pt=!1),pt){if(qt.nodeName){var qe=Et(qt.nodeName);if(!$[qe]||K[qe])throw Wp("root node is forbidden and cannot be sanitized in-place")}}else if(qt instanceof s)At=me("<!---->"),Nt=At.ownerDocument.importNode(qt,!0),Nt.nodeType===1&&Nt.nodeName==="BODY"||Nt.nodeName==="HTML"?At=Nt:At.appendChild(Nt);else{if(!P&&!q&&!U&&qt.indexOf("<")===-1)return T&&at?T.createHTML(qt):qt;if(At=me(qt),!At)return P?null:at?C:""}At&&j&&Wt(At.firstChild);for(var Tr=ue(pt?qt:At);Jt=Tr.nextNode();)Jt.nodeType===3&&Jt===ze||oe(Jt)||(Jt.content instanceof i&&Ze(Jt.content),Ge(Jt),ze=Jt);if(ze=null,pt)return qt;if(P){if(et)for(Pe=A.call(At.ownerDocument);At.firstChild;)Pe.appendChild(At.firstChild);else Pe=At;return ut.shadowroot&&(Pe=v.call(r,Pe,!0)),Pe}var Ve=U?At.outerHTML:At.innerHTML;return U&&$["!doctype"]&&At.ownerDocument&&At.ownerDocument.doctype&&At.ownerDocument.doctype.name&&on(ZH,At.ownerDocument.doctype.name)&&(Ve="<!DOCTYPE "+At.ownerDocument.doctype.name+`>
+`+Ve),q&&(Ve=Ga(Ve,D," "),Ve=Ga(Ve,N," ")),T&&at?T.createHTML(Ve):Ve},e.setConfig=function(qt){he(qt),F=!0},e.clearConfig=function(){kt=null,F=!1},e.isValidAttribute=function(qt,st,At){kt||he({});var Nt=Et(qt),Jt=Et(st);return Ke(Nt,Jt,At)},e.addHook=function(qt,st){typeof st=="function"&&(w[qt]=w[qt]||[],Tc(w[qt],st))},e.removeHook=function(qt){if(w[qt])return Nk(w[qt])},e.removeHooks=function(qt){w[qt]&&(w[qt]=[])},e.removeAllHooks=function(){w={}},e}var Ec=Pk();const tG=t=>t?zk(t).replace(/\\n/g,"#br#").split("#br#"):[""],qk=t=>Ec.sanitize(t),Vk=(t,e)=>{var r;if(((r=e.flowchart)==null?void 0:r.htmlLabels)!==!1){const n=e.securityLevel;n==="antiscript"||n==="strict"?t=qk(t):n!=="loose"&&(t=zk(t),t=t.replace(/</g,"&lt;").replace(/>/g,"&gt;"),t=t.replace(/=/g,"&equals;"),t=iG(t))}return t},ai=(t,e)=>t&&(e.dompurifyConfig?t=Ec.sanitize(Vk(t,e),e.dompurifyConfig).toString():t=Ec.sanitize(Vk(t,e)),t),eG=(t,e)=>typeof t=="string"?ai(t,e):t.flat().map(r=>ai(r,e)),If=/<br\s*\/?>/gi,rG=t=>If.test(t),nG=t=>t.split(If),iG=t=>t.replace(/#br#/g,"<br/>"),zk=t=>t.replace(If,"#br#"),aG=t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},Mr=t=>!(t===!1||["false","null","0"].includes(String(t).trim().toLowerCase())),ja=function(t){let e=t;return t.indexOf("~")!==-1?(e=e.replace(/~([^~].*)/,"<$1"),e=e.replace(/~([^~]*)$/,">$1"),ja(e)):e},pe={getRows:tG,sanitizeText:ai,sanitizeTextOrArray:eG,hasBreaks:rG,splitBreaks:nG,lineBreakRegex:If,removeScript:qk,getUrl:aG,evaluate:Mr},Nf={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,r)=>(r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+(e-t)*6*r:r<1/2?e:r<2/3?t+(e-t)*(2/3-r)*6:t),hsl2rgb:({h:t,s:e,l:r},n)=>{if(!e)return r*2.55;t/=360,e/=100,r/=100;const i=r<.5?r*(1+e):r+e-r*e,a=2*r-i;switch(n){case"r":return Nf.hue2rgb(a,i,t+1/3)*255;case"g":return Nf.hue2rgb(a,i,t)*255;case"b":return Nf.hue2rgb(a,i,t-1/3)*255}},rgb2hsl:({r:t,g:e,b:r},n)=>{t/=255,e/=255,r/=255;const i=Math.max(t,e,r),a=Math.min(t,e,r),s=(i+a)/2;if(n==="l")return s*100;if(i===a)return 0;const o=i-a,l=s>.5?o/(2-i-a):o/(i+a);if(n==="s")return l*100;switch(i){case t:return((e-r)/o+(e<r?6:0))*60;case e:return((r-t)/o+2)*60;case r:return((t-e)/o+4)*60;default:return-1}}},ke={channel:Nf,lang:{clamp:(t,e,r)=>e>r?Math.min(e,Math.max(r,t)):Math.min(r,Math.max(e,t)),round:t=>Math.round(t*1e10)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}},$a={};for(let t=0;t<=255;t++)$a[t]=ke.unit.dec2hex(t);const zr={ALL:0,RGB:1,HSL:2};class sG{constructor(){this.type=zr.ALL}get(){return this.type}set(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e}reset(){this.type=zr.ALL}is(e){return this.type===e}}const oG=sG;class lG{constructor(e,r){this.color=r,this.changed=!1,this.data=e,this.type=new oG}set(e,r){return this.color=r,this.changed=!1,this.data=e,this.type.type=zr.ALL,this}_ensureHSL(){const e=this.data,{h:r,s:n,l:i}=e;r===void 0&&(e.h=ke.channel.rgb2hsl(e,"h")),n===void 0&&(e.s=ke.channel.rgb2hsl(e,"s")),i===void 0&&(e.l=ke.channel.rgb2hsl(e,"l"))}_ensureRGB(){const e=this.data,{r,g:n,b:i}=e;r===void 0&&(e.r=ke.channel.hsl2rgb(e,"r")),n===void 0&&(e.g=ke.channel.hsl2rgb(e,"g")),i===void 0&&(e.b=ke.channel.hsl2rgb(e,"b"))}get r(){const e=this.data,r=e.r;return!this.type.is(zr.HSL)&&r!==void 0?r:(this._ensureHSL(),ke.channel.hsl2rgb(e,"r"))}get g(){const e=this.data,r=e.g;return!this.type.is(zr.HSL)&&r!==void 0?r:(this._ensureHSL(),ke.channel.hsl2rgb(e,"g"))}get b(){const e=this.data,r=e.b;return!this.type.is(zr.HSL)&&r!==void 0?r:(this._ensureHSL(),ke.channel.hsl2rgb(e,"b"))}get h(){const e=this.data,r=e.h;return!this.type.is(zr.RGB)&&r!==void 0?r:(this._ensureRGB(),ke.channel.rgb2hsl(e,"h"))}get s(){const e=this.data,r=e.s;return!this.type.is(zr.RGB)&&r!==void 0?r:(this._ensureRGB(),ke.channel.rgb2hsl(e,"s"))}get l(){const e=this.data,r=e.l;return!this.type.is(zr.RGB)&&r!==void 0?r:(this._ensureRGB(),ke.channel.rgb2hsl(e,"l"))}get a(){return this.data.a}set r(e){this.type.set(zr.RGB),this.changed=!0,this.data.r=e}set g(e){this.type.set(zr.RGB),this.changed=!0,this.data.g=e}set b(e){this.type.set(zr.RGB),this.changed=!0,this.data.b=e}set h(e){this.type.set(zr.HSL),this.changed=!0,this.data.h=e}set s(e){this.type.set(zr.HSL),this.changed=!0,this.data.s=e}set l(e){this.type.set(zr.HSL),this.changed=!0,this.data.l=e}set a(e){this.changed=!0,this.data.a=e}}const cG=lG,Bf=new cG({r:0,g:0,b:0,a:0},"transparent"),Yk={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(t.charCodeAt(0)!==35)return;const e=t.match(Yk.re);if(!e)return;const r=e[1],n=parseInt(r,16),i=r.length,a=i%4===0,s=i>4,o=s?1:17,l=s?8:4,u=a?0:-1,h=s?255:15;return Bf.set({r:(n>>l*(u+3)&h)*o,g:(n>>l*(u+2)&h)*o,b:(n>>l*(u+1)&h)*o,a:a?(n&h)*o/255:1},t)},stringify:t=>{const{r:e,g:r,b:n,a:i}=t;return i<1?`#${$a[Math.round(e)]}${$a[Math.round(r)]}${$a[Math.round(n)]}${$a[Math.round(i*255)]}`:`#${$a[Math.round(e)]}${$a[Math.round(r)]}${$a[Math.round(n)]}`}},Cc=Yk,Df={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(Df.hueRe);if(e){const[,r,n]=e;switch(n){case"grad":return ke.channel.clamp.h(parseFloat(r)*.9);case"rad":return ke.channel.clamp.h(parseFloat(r)*180/Math.PI);case"turn":return ke.channel.clamp.h(parseFloat(r)*360)}}return ke.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(e!==104&&e!==72)return;const r=t.match(Df.re);if(!r)return;const[,n,i,a,s,o]=r;return Bf.set({h:Df._hue2deg(n),s:ke.channel.clamp.s(parseFloat(i)),l:ke.channel.clamp.l(parseFloat(a)),a:s?ke.channel.clamp.a(o?parseFloat(s)/100:parseFloat(s)):1},t)},stringify:t=>{const{h:e,s:r,l:n,a:i}=t;return i<1?`hsla(${ke.lang.round(e)}, ${ke.lang.round(r)}%, ${ke.lang.round(n)}%, ${i})`:`hsl(${ke.lang.round(e)}, ${ke.lang.round(r)}%, ${ke.lang.round(n)}%)`}},Of=Df,Ff={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=Ff.colors[t];if(!!e)return Cc.parse(e)},stringify:t=>{const e=Cc.stringify(t);for(const r in Ff.colors)if(Ff.colors[r]===e)return r}},Uk=Ff,Wk={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(e!==114&&e!==82)return;const r=t.match(Wk.re);if(!r)return;const[,n,i,a,s,o,l,u,h]=r;return Bf.set({r:ke.channel.clamp.r(i?parseFloat(n)*2.55:parseFloat(n)),g:ke.channel.clamp.g(s?parseFloat(a)*2.55:parseFloat(a)),b:ke.channel.clamp.b(l?parseFloat(o)*2.55:parseFloat(o)),a:u?ke.channel.clamp.a(h?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:r,b:n,a:i}=t;return i<1?`rgba(${ke.lang.round(e)}, ${ke.lang.round(r)}, ${ke.lang.round(n)}, ${ke.lang.round(i)})`:`rgb(${ke.lang.round(e)}, ${ke.lang.round(r)}, ${ke.lang.round(n)})`}},Pf=Wk,ia={format:{keyword:Uk,hex:Cc,rgb:Pf,rgba:Pf,hsl:Of,hsla:Of},parse:t=>{if(typeof t!="string")return t;const e=Cc.parse(t)||Pf.parse(t)||Of.parse(t)||Uk.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(zr.HSL)||t.data.r===void 0?Of.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?Pf.stringify(t):Cc.stringify(t)},Hk=(t,e)=>{const r=ia.parse(t);for(const n in e)r[n]=ke.channel.clamp[n](e[n]);return ia.stringify(r)},Sc=(t,e,r=0,n=1)=>{if(typeof t!="number")return Hk(t,{a:e});const i=Bf.set({r:ke.channel.clamp.r(t),g:ke.channel.clamp.g(e),b:ke.channel.clamp.b(r),a:ke.channel.clamp.a(n)});return ia.stringify(i)},Gk=(t,e,r)=>{const n=ia.parse(t),i=n[e],a=ke.channel.clamp[e](i+r);return i!==a&&(n[e]=a),ia.stringify(n)},ae=(t,e)=>Gk(t,"l",e),ge=(t,e)=>Gk(t,"l",-e),_t=(t,e)=>{const r=ia.parse(t),n={};for(const i in e)!e[i]||(n[i]=r[i]+e[i]);return Hk(t,n)},uG=(t,e,r=50)=>{const{r:n,g:i,b:a,a:s}=ia.parse(t),{r:o,g:l,b:u,a:h}=ia.parse(e),d=r/100,f=d*2-1,p=s-h,_=((f*p===-1?f:(f+p)/(1+f*p))+1)/2,y=1-_,b=n*_+o*y,x=i*_+l*y,k=a*_+u*y,T=s*d+h*(1-d);return Sc(b,x,k,T)},Yt=(t,e=100)=>{const r=ia.parse(t);return r.r=255-r.r,r.g=255-r.g,r.b=255-r.b,uG(r,t,e)},ln=(t,e)=>e?_t(t,{s:-40,l:10}):_t(t,{s:-40,l:-10}),qf="#ffffff",Vf="#f2f2f2";class hG{constructor(){this.background="#f4f4f4",this.darkMode=!1,this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||_t(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||_t(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||ln(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||ln(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||ln(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||ln(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||Yt(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||Yt(this.tertiaryColor),this.lineColor=this.lineColor||Yt(this.background),this.textColor=this.textColor||this.primaryTextColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?ge(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||ge(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||Yt(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||ae(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||_t(this.primaryColor,{h:30}),this.cScale4=this.cScale4||_t(this.primaryColor,{h:60}),this.cScale5=this.cScale5||_t(this.primaryColor,{h:90}),this.cScale6=this.cScale6||_t(this.primaryColor,{h:120}),this.cScale7=this.cScale7||_t(this.primaryColor,{h:150}),this.cScale8=this.cScale8||_t(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||_t(this.primaryColor,{h:270}),this.cScale10=this.cScale10||_t(this.primaryColor,{h:300}),this.cScale11=this.cScale11||_t(this.primaryColor,{h:330}),this.darkMode)for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=ge(this["cScale"+e],75);else for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=ge(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||Yt(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this.darkMode?this["cScalePeer"+e]=this["cScalePeer"+e]||ae(this["cScale"+e],10):this["cScalePeer"+e]=this["cScalePeer"+e]||ge(this["cScale"+e],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||_t(this.primaryColor,{h:64}),this.fillType3=this.fillType3||_t(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||_t(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||_t(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||_t(this.primaryColor,{h:128}),this.fillType7=this.fillType7||_t(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||_t(this.primaryColor,{l:-10}),this.pie5=this.pie5||_t(this.secondaryColor,{l:-10}),this.pie6=this.pie6||_t(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||_t(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||_t(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||_t(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||_t(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||_t(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||_t(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?ge(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||_t(this.primaryColor,{h:-30}),this.git4=this.git4||_t(this.primaryColor,{h:-60}),this.git5=this.git5||_t(this.primaryColor,{h:-90}),this.git6=this.git6||_t(this.primaryColor,{h:60}),this.git7=this.git7||_t(this.primaryColor,{h:120}),this.darkMode?(this.git0=ae(this.git0,25),this.git1=ae(this.git1,25),this.git2=ae(this.git2,25),this.git3=ae(this.git3,25),this.git4=ae(this.git4,25),this.git5=ae(this.git5,25),this.git6=ae(this.git6,25),this.git7=ae(this.git7,25)):(this.git0=ge(this.git0,25),this.git1=ge(this.git1,25),this.git2=ge(this.git2,25),this.git3=ge(this.git3,25),this.git4=ge(this.git4,25),this.git5=ge(this.git5,25),this.git6=ge(this.git6,25),this.git7=ge(this.git7,25)),this.gitInv0=this.gitInv0||Yt(this.git0),this.gitInv1=this.gitInv1||Yt(this.git1),this.gitInv2=this.gitInv2||Yt(this.git2),this.gitInv3=this.gitInv3||Yt(this.git3),this.gitInv4=this.gitInv4||Yt(this.git4),this.gitInv5=this.gitInv5||Yt(this.git5),this.gitInv6=this.gitInv6||Yt(this.git6),this.gitInv7=this.gitInv7||Yt(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||qf,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Vf}calculate(e){if(typeof e!="object"){this.updateColors();return}const r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}}const fG=t=>{const e=new hG;return e.calculate(t),e};class dG{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=ae(this.primaryColor,16),this.tertiaryColor=_t(this.primaryColor,{h:-160}),this.primaryBorderColor=Yt(this.background),this.secondaryBorderColor=ln(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ln(this.tertiaryColor,this.darkMode),this.primaryTextColor=Yt(this.primaryColor),this.secondaryTextColor=Yt(this.secondaryColor),this.tertiaryTextColor=Yt(this.tertiaryColor),this.lineColor=Yt(this.background),this.textColor=Yt(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=ae(Yt("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=Sc(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=ge("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.taskBorderColor=Sc(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=Sc(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){this.secondBkg=ae(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=ae(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=ae(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=_t(this.primaryColor,{h:64}),this.fillType3=_t(this.secondaryColor,{h:64}),this.fillType4=_t(this.primaryColor,{h:-64}),this.fillType5=_t(this.secondaryColor,{h:-64}),this.fillType6=_t(this.primaryColor,{h:128}),this.fillType7=_t(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||_t(this.primaryColor,{h:30}),this.cScale4=this.cScale4||_t(this.primaryColor,{h:60}),this.cScale5=this.cScale5||_t(this.primaryColor,{h:90}),this.cScale6=this.cScale6||_t(this.primaryColor,{h:120}),this.cScale7=this.cScale7||_t(this.primaryColor,{h:150}),this.cScale8=this.cScale8||_t(this.primaryColor,{h:210}),this.cScale9=this.cScale9||_t(this.primaryColor,{h:270}),this.cScale10=this.cScale10||_t(this.primaryColor,{h:300}),this.cScale11=this.cScale11||_t(this.primaryColor,{h:330});for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||Yt(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScalePeer"+e]=this["cScalePeer"+e]||ae(this["cScale"+e],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["pie"+e]=this["cScale"+e];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?ge(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=ae(this.secondaryColor,20),this.git1=ae(this.pie2||this.secondaryColor,20),this.git2=ae(this.pie3||this.tertiaryColor,20),this.git3=ae(this.pie4||_t(this.primaryColor,{h:-30}),20),this.git4=ae(this.pie5||_t(this.primaryColor,{h:-60}),20),this.git5=ae(this.pie6||_t(this.primaryColor,{h:-90}),10),this.git6=ae(this.pie7||_t(this.primaryColor,{h:60}),10),this.git7=ae(this.pie8||_t(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||Yt(this.git0),this.gitInv1=this.gitInv1||Yt(this.git1),this.gitInv2=this.gitInv2||Yt(this.git2),this.gitInv3=this.gitInv3||Yt(this.git3),this.gitInv4=this.gitInv4||Yt(this.git4),this.gitInv5=this.gitInv5||Yt(this.git5),this.gitInv6=this.gitInv6||Yt(this.git6),this.gitInv7=this.gitInv7||Yt(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||ae(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||ae(this.background,2)}calculate(e){if(typeof e!="object"){this.updateColors();return}const r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}}const pG=t=>{const e=new dG;return e.calculate(t),e};class gG{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=_t(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=_t(this.primaryColor,{h:-160}),this.primaryBorderColor=ln(this.primaryColor,this.darkMode),this.secondaryBorderColor=ln(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ln(this.tertiaryColor,this.darkMode),this.primaryTextColor=Yt(this.primaryColor),this.secondaryTextColor=Yt(this.secondaryColor),this.tertiaryTextColor=Yt(this.tertiaryColor),this.lineColor=Yt(this.background),this.textColor=Yt(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=Sc(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||_t(this.primaryColor,{h:30}),this.cScale4=this.cScale4||_t(this.primaryColor,{h:60}),this.cScale5=this.cScale5||_t(this.primaryColor,{h:90}),this.cScale6=this.cScale6||_t(this.primaryColor,{h:120}),this.cScale7=this.cScale7||_t(this.primaryColor,{h:150}),this.cScale8=this.cScale8||_t(this.primaryColor,{h:210}),this.cScale9=this.cScale9||_t(this.primaryColor,{h:270}),this.cScale10=this.cScale10||_t(this.primaryColor,{h:300}),this.cScale11=this.cScale11||_t(this.primaryColor,{h:330}),this["cScalePeer"+1]=this["cScalePeer"+1]||ge(this.secondaryColor,45),this["cScalePeer"+2]=this["cScalePeer"+2]||ge(this.tertiaryColor,40);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=ge(this["cScale"+e],10),this["cScalePeer"+e]=this["cScalePeer"+e]||ge(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||_t(this["cScale"+e],{h:180});if(this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,this.labelTextColor!=="calculated"){this.cScaleLabel0=this.cScaleLabel0||Yt(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||Yt(this.labelTextColor);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=ae(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=_t(this.primaryColor,{h:64}),this.fillType3=_t(this.secondaryColor,{h:64}),this.fillType4=_t(this.primaryColor,{h:-64}),this.fillType5=_t(this.secondaryColor,{h:-64}),this.fillType6=_t(this.primaryColor,{h:128}),this.fillType7=_t(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||_t(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||_t(this.primaryColor,{l:-10}),this.pie5=this.pie5||_t(this.secondaryColor,{l:-30}),this.pie6=this.pie6||_t(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||_t(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||_t(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||_t(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||_t(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||_t(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||_t(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||_t(this.primaryColor,{h:-30}),this.git4=this.git4||_t(this.primaryColor,{h:-60}),this.git5=this.git5||_t(this.primaryColor,{h:-90}),this.git6=this.git6||_t(this.primaryColor,{h:60}),this.git7=this.git7||_t(this.primaryColor,{h:120}),this.darkMode?(this.git0=ae(this.git0,25),this.git1=ae(this.git1,25),this.git2=ae(this.git2,25),this.git3=ae(this.git3,25),this.git4=ae(this.git4,25),this.git5=ae(this.git5,25),this.git6=ae(this.git6,25),this.git7=ae(this.git7,25)):(this.git0=ge(this.git0,25),this.git1=ge(this.git1,25),this.git2=ge(this.git2,25),this.git3=ge(this.git3,25),this.git4=ge(this.git4,25),this.git5=ge(this.git5,25),this.git6=ge(this.git6,25),this.git7=ge(this.git7,25)),this.gitInv0=this.gitInv0||ge(Yt(this.git0),25),this.gitInv1=this.gitInv1||Yt(this.git1),this.gitInv2=this.gitInv2||Yt(this.git2),this.gitInv3=this.gitInv3||Yt(this.git3),this.gitInv4=this.gitInv4||Yt(this.git4),this.gitInv5=this.gitInv5||Yt(this.git5),this.gitInv6=this.gitInv6||Yt(this.git6),this.gitInv7=this.gitInv7||Yt(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||Yt(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||Yt(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||qf,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Vf}calculate(e){if(typeof e!="object"){this.updateColors();return}const r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}}const yG=t=>{const e=new gG;return e.calculate(t),e};class mG{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=ae("#cde498",10),this.primaryBorderColor=ln(this.primaryColor,this.darkMode),this.secondaryBorderColor=ln(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ln(this.tertiaryColor,this.darkMode),this.primaryTextColor=Yt(this.primaryColor),this.secondaryTextColor=Yt(this.secondaryColor),this.tertiaryTextColor=Yt(this.primaryColor),this.lineColor=Yt(this.background),this.textColor=Yt(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||_t(this.primaryColor,{h:30}),this.cScale4=this.cScale4||_t(this.primaryColor,{h:60}),this.cScale5=this.cScale5||_t(this.primaryColor,{h:90}),this.cScale6=this.cScale6||_t(this.primaryColor,{h:120}),this.cScale7=this.cScale7||_t(this.primaryColor,{h:150}),this.cScale8=this.cScale8||_t(this.primaryColor,{h:210}),this.cScale9=this.cScale9||_t(this.primaryColor,{h:270}),this.cScale10=this.cScale10||_t(this.primaryColor,{h:300}),this.cScale11=this.cScale11||_t(this.primaryColor,{h:330}),this["cScalePeer"+1]=this["cScalePeer"+1]||ge(this.secondaryColor,45),this["cScalePeer"+2]=this["cScalePeer"+2]||ge(this.tertiaryColor,40);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScale"+e]=ge(this["cScale"+e],10),this["cScalePeer"+e]=this["cScalePeer"+e]||ge(this["cScale"+e],25);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||_t(this["cScale"+e],{h:180});this.scaleLabelColor=this.scaleLabelColor!=="calculated"&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.actorBorder=ge(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=_t(this.primaryColor,{h:64}),this.fillType3=_t(this.secondaryColor,{h:64}),this.fillType4=_t(this.primaryColor,{h:-64}),this.fillType5=_t(this.secondaryColor,{h:-64}),this.fillType6=_t(this.primaryColor,{h:128}),this.fillType7=_t(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||_t(this.primaryColor,{l:-30}),this.pie5=this.pie5||_t(this.secondaryColor,{l:-30}),this.pie6=this.pie6||_t(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||_t(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||_t(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||_t(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||_t(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||_t(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||_t(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||_t(this.primaryColor,{h:-30}),this.git4=this.git4||_t(this.primaryColor,{h:-60}),this.git5=this.git5||_t(this.primaryColor,{h:-90}),this.git6=this.git6||_t(this.primaryColor,{h:60}),this.git7=this.git7||_t(this.primaryColor,{h:120}),this.darkMode?(this.git0=ae(this.git0,25),this.git1=ae(this.git1,25),this.git2=ae(this.git2,25),this.git3=ae(this.git3,25),this.git4=ae(this.git4,25),this.git5=ae(this.git5,25),this.git6=ae(this.git6,25),this.git7=ae(this.git7,25)):(this.git0=ge(this.git0,25),this.git1=ge(this.git1,25),this.git2=ge(this.git2,25),this.git3=ge(this.git3,25),this.git4=ge(this.git4,25),this.git5=ge(this.git5,25),this.git6=ge(this.git6,25),this.git7=ge(this.git7,25)),this.gitInv0=this.gitInv0||Yt(this.git0),this.gitInv1=this.gitInv1||Yt(this.git1),this.gitInv2=this.gitInv2||Yt(this.git2),this.gitInv3=this.gitInv3||Yt(this.git3),this.gitInv4=this.gitInv4||Yt(this.git4),this.gitInv5=this.gitInv5||Yt(this.git5),this.gitInv6=this.gitInv6||Yt(this.git6),this.gitInv7=this.gitInv7||Yt(this.git7),this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||qf,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Vf}calculate(e){if(typeof e!="object"){this.updateColors();return}const r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}}const bG=t=>{const e=new mG;return e.calculate(t),e};class _G{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=ae(this.contrast,55),this.background="#ffffff",this.tertiaryColor=_t(this.primaryColor,{h:-160}),this.primaryBorderColor=ln(this.primaryColor,this.darkMode),this.secondaryBorderColor=ln(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=ln(this.tertiaryColor,this.darkMode),this.primaryTextColor=Yt(this.primaryColor),this.secondaryTextColor=Yt(this.secondaryColor),this.tertiaryTextColor=Yt(this.tertiaryColor),this.lineColor=Yt(this.background),this.textColor=Yt(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder="calculated",this.personBkg="calculated",this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){this.secondBkg=ae(this.contrast,55),this.border2=this.contrast,this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleInv"+e]=this["cScaleInv"+e]||Yt(this["cScale"+e]);for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this.darkMode?this["cScalePeer"+e]=this["cScalePeer"+e]||ae(this["cScale"+e],10):this["cScalePeer"+e]=this["cScalePeer"+e]||ge(this["cScale"+e],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["cScaleLabel"+e]=this["cScaleLabel"+e]||this.scaleLabelColor;this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.actorBorder=ae(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.sectionBkgColor=ae(this.contrast,30),this.sectionBkgColor2=ae(this.contrast,30),this.taskBorderColor=ge(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=ae(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=ge(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=_t(this.primaryColor,{h:64}),this.fillType3=_t(this.secondaryColor,{h:64}),this.fillType4=_t(this.primaryColor,{h:-64}),this.fillType5=_t(this.secondaryColor,{h:-64}),this.fillType6=_t(this.primaryColor,{h:128}),this.fillType7=_t(this.secondaryColor,{h:128});for(let e=0;e<this.THEME_COLOR_LIMIT;e++)this["pie"+e]=this["cScale"+e];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOpacity=this.pieOpacity||"0.7",this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||this.primaryBorderColor,this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=ge(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||_t(this.primaryColor,{h:-30}),this.git4=this.pie5||_t(this.primaryColor,{h:-60}),this.git5=this.pie6||_t(this.primaryColor,{h:-90}),this.git6=this.pie7||_t(this.primaryColor,{h:60}),this.git7=this.pie8||_t(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||Yt(this.git0),this.gitInv1=this.gitInv1||Yt(this.git1),this.gitInv2=this.gitInv2||Yt(this.git2),this.gitInv3=this.gitInv3||Yt(this.git3),this.gitInv4=this.gitInv4||Yt(this.git4),this.gitInv5=this.gitInv5||Yt(this.git5),this.gitInv6=this.gitInv6||Yt(this.git6),this.gitInv7=this.gitInv7||Yt(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||qf,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Vf}calculate(e){if(typeof e!="object"){this.updateColors();return}const r=Object.keys(e);r.forEach(n=>{this[n]=e[n]}),this.updateColors(),r.forEach(n=>{this[n]=e[n]})}}const aa={base:{getThemeVariables:fG},dark:{getThemeVariables:pG},default:{getThemeVariables:yG},forest:{getThemeVariables:bG},neutral:{getThemeVariables:t=>{const e=new _G;return e.calculate(t),e}}},Xa={theme:"default",themeVariables:aa.default.getThemeVariables(),themeCSS:void 0,maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,deterministicIDSeed:void 0,flowchart:{diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},sequence:{hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",useMaxWidth:!0,topAxis:!1,useWidth:void 0},journey:{diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},state:{dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,useMaxWidth:!0,defaultRenderer:"dagre-wrapper"},er:{diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12,useMaxWidth:!0},pie:{useWidth:void 0,useMaxWidth:!0},requirement:{useWidth:void 0,useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},gitGraph:{diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0},c4:{useWidth:void 0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,useMaxWidth:!0,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},fontSize:16};Xa.class&&(Xa.class.arrowMarkerAbsolute=Xa.arrowMarkerAbsolute),Xa.gitGraph&&(Xa.gitGraph.arrowMarkerAbsolute=Xa.arrowMarkerAbsolute);const jk=(t,e="")=>Object.keys(t).reduce((r,n)=>Array.isArray(t[n])?r:typeof t[n]=="object"&&t[n]!==null?[...r,e+n,...jk(t[n],"")]:[...r,e+n],[]),vG=jk(Xa,""),xG=/[%]{2}[{]\s*(?:(?:(\w+)\s*:|(\w+))\s*(?:(?:(\w+))|((?:(?![}][%]{2}).|\r?\n)*))?\s*)(?:[}][%]{2})?/gi,kG=/\s*%%.*\n/gm,zf={},Xp=function(t,e){t=t.replace(xG,"").replace(kG,`
+`);for(const[r,{detector:n}]of Object.entries(zf))if(n(t,e))return r;throw new Error(`No diagram type detected for text: ${t}`)},$k=(t,e,r)=>{if(zf[t])throw new Error(`Detector with key ${t} already exists`);zf[t]={detector:e,loader:r},H.debug(`Detector with key ${t} added${r?" with loader":""}`)},wG=t=>zf[t].loader,fr=function(t,e,r){const{depth:n,clobber:i}=Object.assign({depth:2,clobber:!1},r);return Array.isArray(e)&&!Array.isArray(t)?(e.forEach(a=>fr(t,a,r)),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach(a=>{t.indexOf(a)===-1&&t.push(a)}),t):typeof t>"u"||n<=0?t!=null&&typeof t=="object"&&typeof e=="object"?Object.assign(t,e):e:(typeof e<"u"&&typeof t=="object"&&typeof e=="object"&&Object.keys(e).forEach(a=>{typeof e[a]=="object"&&(t[a]===void 0||typeof t[a]=="object")?(t[a]===void 0&&(t[a]=Array.isArray(e[a])?[]:{}),t[a]=fr(t[a],e[a],{depth:n-1,clobber:i})):(i||typeof t[a]!="object"&&typeof e[a]!="object")&&(t[a]=e[a])}),t)};var TG=typeof jr=="object"&&jr&&jr.Object===Object&&jr,Xk=TG,EG=Xk,CG=typeof self=="object"&&self&&self.Object===Object&&self,SG=EG||CG||Function("return this")(),si=SG,AG=si,MG=AG.Symbol,zo=MG,Kk=zo,Zk=Object.prototype,LG=Zk.hasOwnProperty,RG=Zk.toString,Ac=Kk?Kk.toStringTag:void 0;function IG(t){var e=LG.call(t,Ac),r=t[Ac];try{t[Ac]=void 0;var n=!0}catch{}var i=RG.call(t);return n&&(e?t[Ac]=r:delete t[Ac]),i}var NG=IG,BG=Object.prototype,DG=BG.toString;function OG(t){return DG.call(t)}var FG=OG,Qk=zo,PG=NG,qG=FG,VG="[object Null]",zG="[object Undefined]",Jk=Qk?Qk.toStringTag:void 0;function YG(t){return t==null?t===void 0?zG:VG:Jk&&Jk in Object(t)?PG(t):qG(t)}var Ps=YG;function UG(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var Vn=UG,WG=Ps,HG=Vn,GG="[object AsyncFunction]",jG="[object Function]",$G="[object GeneratorFunction]",XG="[object Proxy]";function KG(t){if(!HG(t))return!1;var e=WG(t);return e==jG||e==$G||e==GG||e==XG}var Yo=KG,ZG=si,QG=ZG["__core-js_shared__"],JG=QG,Kp=JG,tw=function(){var t=/[^.]+$/.exec(Kp&&Kp.keys&&Kp.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}();function tj(t){return!!tw&&tw in t}var ej=tj,rj=Function.prototype,nj=rj.toString;function ij(t){if(t!=null){try{return nj.call(t)}catch{}try{return t+""}catch{}}return""}var ew=ij,aj=Yo,sj=ej,oj=Vn,lj=ew,cj=/[\\^$.*+?()[\]{}|]/g,uj=/^\[object .+?Constructor\]$/,hj=Function.prototype,fj=Object.prototype,dj=hj.toString,pj=fj.hasOwnProperty,gj=RegExp("^"+dj.call(pj).replace(cj,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function yj(t){if(!oj(t)||sj(t))return!1;var e=aj(t)?gj:uj;return e.test(lj(t))}var mj=yj;function bj(t,e){return t==null?void 0:t[e]}var _j=bj,vj=mj,xj=_j;function kj(t,e){var r=xj(t,e);return vj(r)?r:void 0}var qs=kj,wj=qs,Tj=wj(Object,"create"),Yf=Tj,rw=Yf;function Ej(){this.__data__=rw?rw(null):{},this.size=0}var Cj=Ej;function Sj(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var Aj=Sj,Mj=Yf,Lj="__lodash_hash_undefined__",Rj=Object.prototype,Ij=Rj.hasOwnProperty;function Nj(t){var e=this.__data__;if(Mj){var r=e[t];return r===Lj?void 0:r}return Ij.call(e,t)?e[t]:void 0}var Bj=Nj,Dj=Yf,Oj=Object.prototype,Fj=Oj.hasOwnProperty;function Pj(t){var e=this.__data__;return Dj?e[t]!==void 0:Fj.call(e,t)}var qj=Pj,Vj=Yf,zj="__lodash_hash_undefined__";function Yj(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Vj&&e===void 0?zj:e,this}var Uj=Yj,Wj=Cj,Hj=Aj,Gj=Bj,jj=qj,$j=Uj;function Uo(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}Uo.prototype.clear=Wj,Uo.prototype.delete=Hj,Uo.prototype.get=Gj,Uo.prototype.has=jj,Uo.prototype.set=$j;var Xj=Uo;function Kj(){this.__data__=[],this.size=0}var Zj=Kj;function Qj(t,e){return t===e||t!==t&&e!==e}var Wo=Qj,Jj=Wo;function t$(t,e){for(var r=t.length;r--;)if(Jj(t[r][0],e))return r;return-1}var Uf=t$,e$=Uf,r$=Array.prototype,n$=r$.splice;function i$(t){var e=this.__data__,r=e$(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():n$.call(e,r,1),--this.size,!0}var a$=i$,s$=Uf;function o$(t){var e=this.__data__,r=s$(e,t);return r<0?void 0:e[r][1]}var l$=o$,c$=Uf;function u$(t){return c$(this.__data__,t)>-1}var h$=u$,f$=Uf;function d$(t,e){var r=this.__data__,n=f$(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}var p$=d$,g$=Zj,y$=a$,m$=l$,b$=h$,_$=p$;function Ho(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}Ho.prototype.clear=g$,Ho.prototype.delete=y$,Ho.prototype.get=m$,Ho.prototype.has=b$,Ho.prototype.set=_$;var Wf=Ho,v$=qs,x$=si,k$=v$(x$,"Map"),Zp=k$,nw=Xj,w$=Wf,T$=Zp;function E$(){this.size=0,this.__data__={hash:new nw,map:new(T$||w$),string:new nw}}var C$=E$;function S$(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}var A$=S$,M$=A$;function L$(t,e){var r=t.__data__;return M$(e)?r[typeof e=="string"?"string":"hash"]:r.map}var Hf=L$,R$=Hf;function I$(t){var e=R$(this,t).delete(t);return this.size-=e?1:0,e}var N$=I$,B$=Hf;function D$(t){return B$(this,t).get(t)}var O$=D$,F$=Hf;function P$(t){return F$(this,t).has(t)}var q$=P$,V$=Hf;function z$(t,e){var r=V$(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}var Y$=z$,U$=C$,W$=N$,H$=O$,G$=q$,j$=Y$;function Go(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}Go.prototype.clear=U$,Go.prototype.delete=W$,Go.prototype.get=H$,Go.prototype.has=G$,Go.prototype.set=j$;var Qp=Go,iw=Qp,$$="Expected a function";function Jp(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError($$);var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],a=r.cache;if(a.has(i))return a.get(i);var s=t.apply(this,n);return r.cache=a.set(i,s)||a,s};return r.cache=new(Jp.Cache||iw),r}Jp.Cache=iw;var Gf=Jp;const X$={curveBasis:Os,curveBasisClosed:ik,curveBasisOpen:sk,curveLinear:yn,curveLinearClosed:fk,curveMonotoneX:bk,curveMonotoneY:_k,curveNatural:kk,curveStep:wk,curveStepAfter:Ek,curveStepBefore:Tk},tg=/[%]{2}[{]\s*(?:(?:(\w+)\s*:|(\w+))\s*(?:(?:(\w+))|((?:(?![}][%]{2}).|\r?\n)*))?\s*)(?:[}][%]{2})?/gi,K$=/\s*(?:(?:(\w+)(?=:):|(\w+))\s*(?:(?:(\w+))|((?:(?![}][%]{2}).|\r?\n)*))?\s*)(?:[}][%]{2})?/gi,Z$=function(t,e){const r=aw(t,/(?:init\b)|(?:initialize\b)/);let n={};if(Array.isArray(r)){const i=r.map(a=>a.args);Vs(i),n=fr(n,[...i])}else n=r.args;if(n){let i=Xp(t,e);["config"].forEach(a=>{typeof n[a]<"u"&&(i==="flowchart-v2"&&(i="flowchart"),n[i]=n[a],delete n[a])})}return n},aw=function(t,e=null){try{const r=new RegExp(`[%]{2}(?![{]${K$.source})(?=[}][%]{2}).*
+`,"ig");t=t.trim().replace(r,"").replace(/'/gm,'"'),H.debug(`Detecting diagram directive${e!==null?" type:"+e:""} based on the text:${t}`);let n;const i=[];for(;(n=tg.exec(t))!==null;)if(n.index===tg.lastIndex&&tg.lastIndex++,n&&!e||e&&n[1]&&n[1].match(e)||e&&n[2]&&n[2].match(e)){const a=n[1]?n[1]:n[2],s=n[3]?n[3].trim():n[4]?JSON.parse(n[4].trim()):null;i.push({type:a,args:s})}return i.length===0&&i.push({type:t,args:null}),i.length===1?i[0]:i}catch(r){return H.error(`ERROR: ${r.message} - Unable to parse directive
+      ${e!==null?" type:"+e:""} based on the text:${t}`),{type:null,args:null}}},Q$=function(t,e){for(let r=0;r<e.length;r++)if(e[r].match(t))return r;return-1},Ni=(t,e)=>{if(!t)return e;const r=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return X$[r]||e},J$=(t,e)=>{const r=t.trim();if(r)return e.securityLevel!=="loose"?ki(r):r},tX=(t,...e)=>{const r=t.split("."),n=r.length-1,i=r[n];let a=window;for(let s=0;s<n;s++)if(a=a[r[s]],!a)return;a[i](...e)},Mc=(t,e)=>t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0,eX=t=>{let e,r=0;t.forEach(a=>{r+=Mc(a,e),e=a});let n=r/2,i;return e=void 0,t.forEach(a=>{if(e&&!i){const s=Mc(a,e);if(s<n)n-=s;else{const o=n/s;o<=0&&(i=e),o>=1&&(i={x:a.x,y:a.y}),o>0&&o<1&&(i={x:(1-o)*e.x+o*a.x,y:(1-o)*e.y+o*a.y})}}e=a}),i},rX=t=>t.length===1?t[0]:eX(t),nX=(t,e,r)=>{let n;H.info("our points",e),e[0]!==r&&(e=e.reverse()),e.forEach(h=>{totalDistance+=Mc(h,n),n=h});let a=25,s;n=void 0,e.forEach(h=>{if(n&&!s){const d=Mc(h,n);if(d<a)a-=d;else{const f=a/d;f<=0&&(s=n),f>=1&&(s={x:h.x,y:h.y}),f>0&&f<1&&(s={x:(1-f)*n.x+f*h.x,y:(1-f)*n.y+f*h.y})}}n=h});const o=t?10:5,l=Math.atan2(e[0].y-s.y,e[0].x-s.x),u={x:0,y:0};return u.x=Math.sin(l)*o+(e[0].x+s.x)/2,u.y=-Math.cos(l)*o+(e[0].y+s.y)/2,u},iX=(t,e,r)=>{let n=JSON.parse(JSON.stringify(r)),i;H.info("our points",n),e!=="start_left"&&e!=="start_right"&&(n=n.reverse()),n.forEach(d=>{i=d});let s=25+t,o;i=void 0,n.forEach(d=>{if(i&&!o){const f=Mc(d,i);if(f<s)s-=f;else{const p=s/f;p<=0&&(o=i),p>=1&&(o={x:d.x,y:d.y}),p>0&&p<1&&(o={x:(1-p)*i.x+p*d.x,y:(1-p)*i.y+p*d.y})}}i=d});const l=10+t*.5,u=Math.atan2(n[0].y-o.y,n[0].x-o.x),h={x:0,y:0};return h.x=Math.sin(u)*l+(n[0].x+o.x)/2,h.y=-Math.cos(u)*l+(n[0].y+o.y)/2,e==="start_left"&&(h.x=Math.sin(u+Math.PI)*l+(n[0].x+o.x)/2,h.y=-Math.cos(u+Math.PI)*l+(n[0].y+o.y)/2),e==="end_right"&&(h.x=Math.sin(u-Math.PI)*l+(n[0].x+o.x)/2-5,h.y=-Math.cos(u-Math.PI)*l+(n[0].y+o.y)/2-5),e==="end_left"&&(h.x=Math.sin(u)*l+(n[0].x+o.x)/2-5,h.y=-Math.cos(u)*l+(n[0].y+o.y)/2-5),h},Ka=t=>{let e="",r="";for(let n=0;n<t.length;n++)typeof t[n]<"u"&&(t[n].startsWith("color:")||t[n].startsWith("text-align:")?r=r+t[n]+";":e=e+t[n]+";");return{style:e,labelStyle:r}};let sw=0;const ow=()=>(sw++,"id-"+Math.random().toString(36).substr(2,12)+"-"+sw);function aX(t){let e="";const r="0123456789abcdef",n=r.length;for(let i=0;i<t;i++)e+=r.charAt(Math.floor(Math.random()*n));return e}const lw=t=>aX(t.length),sX=function(){return{x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0}},oX=function(t,e){const r=e.text.replace(pe.lineBreakRegex," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",e.fontSize),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),typeof e.class<"u"&&n.attr("class",e.class);const i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.attr("fill",e.fill),i.text(r),n},cw=Gf((t,e,r)=>{if(!t||(r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},r),pe.lineBreakRegex.test(t)))return t;const n=t.split(" "),i=[];let a="";return n.forEach((s,o)=>{const l=Bi(`${s} `,r),u=Bi(a,r);if(l>e){const{hyphenatedStrings:f,remainingWord:p}=lX(s,e,"-",r);i.push(a,...f),a=p}else u+l>=e?(i.push(a),a=s):a=[a,s].filter(Boolean).join(" ");o+1===n.length&&i.push(a)}),i.filter(s=>s!=="").join(r.joinWith)},(t,e,r)=>`${t}${e}${r.fontSize}${r.fontWeight}${r.fontFamily}${r.joinWith}`),lX=Gf((t,e,r="-",n)=>{n=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},n);const i=t.split(""),a=[];let s="";return i.forEach((o,l)=>{const u=`${s}${o}`;if(Bi(u,n)>=e){const d=l+1,f=i.length===d,p=`${u}${r}`;a.push(f?u:p),s=""}else s=u}),{hyphenatedStrings:a,remainingWord:s}},(t,e,r="-",n)=>`${t}${e}${r}${n.fontSize}${n.fontWeight}${n.fontFamily}`),eg=function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},e),rg(t,e).height},Bi=function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),rg(t,e).width},rg=Gf(function(t,e){e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e);const{fontSize:r,fontFamily:n,fontWeight:i}=e;if(!t)return{width:0,height:0};const a=["sans-serif",n],s=t.split(pe.lineBreakRegex),o=[],l=St("body");if(!l.remove)return{width:0,height:0,lineHeight:0};const u=l.append("svg");for(const d of a){let f=0;const p={width:0,height:0,lineHeight:0};for(const m of s){const _=sX();_.text=m;const y=oX(u,_).style("font-size",r).style("font-weight",i).style("font-family",d),b=(y._groups||y)[0][0].getBBox();p.width=Math.round(Math.max(p.width,b.width)),f=Math.round(b.height),p.height+=f,p.lineHeight=Math.round(Math.max(p.lineHeight,f))}o.push(p)}u.remove();const h=isNaN(o[1].height)||isNaN(o[1].width)||isNaN(o[1].lineHeight)||o[0].height>o[1].height&&o[0].width>o[1].width&&o[0].lineHeight>o[1].lineHeight?0:1;return o[h]},(t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`),cX=class{constructor(e,r){this.deterministic=e,this.seed=r,this.count=r?r.length:0}next(){return this.deterministic?this.count++:Date.now()}};let jf;const uX=function(t){return jf=jf||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),jf.innerHTML=t,unescape(jf.textContent)},Vs=t=>{if(H.debug("directiveSanitizer called with",t),typeof t=="object"&&(t.length?t.forEach(e=>Vs(e)):Object.keys(t).forEach(e=>{H.debug("Checking key",e),e.indexOf("__")===0&&(H.debug("sanitize deleting __ option",e),delete t[e]),e.indexOf("proto")>=0&&(H.debug("sanitize deleting proto option",e),delete t[e]),e.indexOf("constr")>=0&&(H.debug("sanitize deleting constr option",e),delete t[e]),e.indexOf("themeCSS")>=0&&(H.debug("sanitizing themeCss option"),t[e]=$f(t[e])),e.indexOf("fontFamily")>=0&&(H.debug("sanitizing fontFamily option"),t[e]=$f(t[e])),e.indexOf("altFontFamily")>=0&&(H.debug("sanitizing altFontFamily option"),t[e]=$f(t[e])),vG.indexOf(e)<0?(H.debug("sanitize deleting option",e),delete t[e]):typeof t[e]=="object"&&(H.debug("sanitize deleting object",e),Vs(t[e]))})),t.themeVariables){const e=Object.keys(t.themeVariables);for(let r=0;r<e.length;r++){const n=e[r],i=t.themeVariables[n];i&&i.match&&!i.match(/^[a-zA-Z0-9#,";()%. ]+$/)&&(t.themeVariables[n]="")}}H.debug("After sanitization",t)},$f=t=>{let e=0,r=0;for(let n=0;n<t.length;n++){if(e<r)return"{ /* ERROR: Unbalanced CSS */ }";t[n]==="{"?e++:t[n]==="}"&&r++}return e!==r?"{ /* ERROR: Unbalanced CSS */ }":t};function ng(t){return"str"in t}function hX(t){return t instanceof Error?t.message:String(t)}const Se={assignWithDepth:fr,wrapLabel:cw,calculateTextHeight:eg,calculateTextWidth:Bi,calculateTextDimensions:rg,detectInit:Z$,detectDirective:aw,isSubstringInArray:Q$,interpolateToCurve:Ni,calcLabelPosition:rX,calcCardinalityPosition:nX,calcTerminalLabelPosition:iX,formatUrl:J$,getStylesFromArray:Ka,generateId:ow,random:lw,runFunc:tX,entityDecode:uX,initIdGenerator:cX,directiveSanitizer:Vs,sanitizeCss:$f};var uw="comm",hw="rule",fw="decl",fX="@import",dX="@keyframes",pX=Math.abs,ig=String.fromCharCode;function dw(t){return t.trim()}function ag(t,e,r){return t.replace(e,r)}function gX(t,e){return t.indexOf(e)}function Xf(t,e){return t.charCodeAt(e)|0}function Lc(t,e,r){return t.slice(e,r)}function Za(t){return t.length}function pw(t){return t.length}function Kf(t,e){return e.push(t),t}var Zf=1,jo=1,gw=0,zn=0,dr=0,$o="";function sg(t,e,r,n,i,a,s){return{value:t,root:e,parent:r,type:n,props:i,children:a,line:Zf,column:jo,length:s,return:""}}function yX(){return dr}function mX(){return dr=zn>0?Xf($o,--zn):0,jo--,dr===10&&(jo=1,Zf--),dr}function oi(){return dr=zn<gw?Xf($o,zn++):0,jo++,dr===10&&(jo=1,Zf++),dr}function zs(){return Xf($o,zn)}function Qf(){return zn}function Jf(t,e){return Lc($o,t,e)}function og(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function bX(t){return Zf=jo=1,gw=Za($o=t),zn=0,[]}function _X(t){return $o="",t}function lg(t){return dw(Jf(zn-1,cg(t===91?t+2:t===40?t+1:t)))}function vX(t){for(;(dr=zs())&&dr<33;)oi();return og(t)>2||og(dr)>3?"":" "}function xX(t,e){for(;--e&&oi()&&!(dr<48||dr>102||dr>57&&dr<65||dr>70&&dr<97););return Jf(t,Qf()+(e<6&&zs()==32&&oi()==32))}function cg(t){for(;oi();)switch(dr){case t:return zn;case 34:case 39:t!==34&&t!==39&&cg(dr);break;case 40:t===41&&cg(t);break;case 92:oi();break}return zn}function kX(t,e){for(;oi()&&t+dr!==47+10;)if(t+dr===42+42&&zs()===47)break;return"/*"+Jf(e,zn-1)+"*"+ig(t===47?t:oi())}function wX(t){for(;!og(zs());)oi();return Jf(t,zn)}function yw(t){return _X(t1("",null,null,null,[""],t=bX(t),0,[0],t))}function t1(t,e,r,n,i,a,s,o,l){for(var u=0,h=0,d=s,f=0,p=0,m=0,_=1,y=1,b=1,x=0,k="",T=i,C=a,M=n,S=k;y;)switch(m=x,x=oi()){case 40:if(m!=108&&Xf(S,d-1)==58){gX(S+=ag(lg(x),"&","&\f"),"&\f")!=-1&&(b=-1);break}case 34:case 39:case 91:S+=lg(x);break;case 9:case 10:case 13:case 32:S+=vX(m);break;case 92:S+=xX(Qf()-1,7);continue;case 47:switch(zs()){case 42:case 47:Kf(TX(kX(oi(),Qf()),e,r),l);break;default:S+="/"}break;case 123*_:o[u++]=Za(S)*b;case 125*_:case 59:case 0:switch(x){case 0:case 125:y=0;case 59+h:p>0&&Za(S)-d&&Kf(p>32?bw(S+";",n,r,d-1):bw(ag(S," ","")+";",n,r,d-2),l);break;case 59:S+=";";default:if(Kf(M=mw(S,e,r,u,h,i,o,k,T=[],C=[],d),a),x===123)if(h===0)t1(S,e,M,M,T,a,d,o,C);else switch(f){case 100:case 109:case 115:t1(t,M,M,n&&Kf(mw(t,M,M,0,0,i,o,k,i,T=[],d),C),i,C,d,o,n?T:C);break;default:t1(S,M,M,M,[""],C,0,o,C)}}u=h=p=0,_=b=1,k=S="",d=s;break;case 58:d=1+Za(S),p=m;default:if(_<1){if(x==123)--_;else if(x==125&&_++==0&&mX()==125)continue}switch(S+=ig(x),x*_){case 38:b=h>0?1:(S+="\f",-1);break;case 44:o[u++]=(Za(S)-1)*b,b=1;break;case 64:zs()===45&&(S+=lg(oi())),f=zs(),h=d=Za(k=S+=wX(Qf())),x++;break;case 45:m===45&&Za(S)==2&&(_=0)}}return a}function mw(t,e,r,n,i,a,s,o,l,u,h){for(var d=i-1,f=i===0?a:[""],p=pw(f),m=0,_=0,y=0;m<n;++m)for(var b=0,x=Lc(t,d+1,d=pX(_=s[m])),k=t;b<p;++b)(k=dw(_>0?f[b]+" "+x:ag(x,/&\f/g,f[b])))&&(l[y++]=k);return sg(t,e,r,i===0?hw:o,l,u,h)}function TX(t,e,r){return sg(t,e,r,uw,ig(yX()),Lc(t,2,-2),0)}function bw(t,e,r,n){return sg(t,e,r,fw,Lc(t,0,n),Lc(t,n+1,-1),n)}function e1(t,e){for(var r="",n=pw(t),i=0;i<n;i++)r+=e(t[i],i,t,e)||"";return r}function _w(t,e,r,n){switch(t.type){case fX:case fw:return t.return=t.return||t.value;case uw:return"";case dX:return t.return=t.value+"{"+e1(t.children,n)+"}";case hw:t.value=t.props.join(",")}return Za(r=e1(t.children,n))?t.return=t.value+"{"+r+"}":""}const r1={name:"mermaid",version:"9.2.2",description:"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.",main:"./dist/mermaid.min.js",module:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts",type:"commonjs",exports:{".":{require:"./dist/mermaid.min.js",import:"./dist/mermaid.core.mjs",types:"./dist/mermaid.d.ts"},"./*":"./*"},keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],scripts:{clean:"rimraf dist","build:code":"node .esbuild/esbuild.cjs","build:types":"tsc -p ./tsconfig.json --emitDeclarationOnly","build:watch":"yarn build:code --watch","build:esbuild":'concurrently "yarn build:code" "yarn build:types"',build:"yarn clean; yarn build:esbuild",dev:"node .esbuild/serve.cjs","docs:build":"ts-node-esm src/docs.mts","docs:verify":"yarn docs:build --verify","todo-postbuild":"documentation build src/mermaidAPI.ts src/config.ts src/defaultConfig.ts --shallow -f md --markdown-toc false > src/docs/Setup.md && prettier --write src/docs/Setup.md",release:"yarn build",lint:"eslint --cache --ignore-path .gitignore . && yarn lint:jison && prettier --check .","lint:fix":"eslint --fix --ignore-path .gitignore . && prettier --write .","lint:jison":"ts-node-esm src/jison/lint.mts",cypress:"cypress run","cypress:open":"cypress open",e2e:"start-server-and-test dev http://localhost:9000/ cypress","todo-prepare":'concurrently "husky install" "yarn build"',"pre-commit":"lint-staged"},repository:{type:"git",url:"https://github.com/mermaid-js/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],globals:["page"]},dependencies:{"@braintree/sanitize-url":"^6.0.0",d3:"^7.0.0",dagre:"^0.8.5","dagre-d3":"^0.6.4",dompurify:"2.4.0","fast-clone":"^1.5.13",graphlib:"^2.1.8",khroma:"^2.0.0",lodash:"^4.17.21","moment-mini":"^2.24.0","non-layered-tidy-tree-layout":"^2.0.2",stylis:"^4.1.2",uuid:"^9.0.0"},devDependencies:{"@applitools/eyes-cypress":"^3.25.7","@commitlint/cli":"^17.1.2","@commitlint/config-conventional":"^17.0.0","@types/d3":"^7.4.0","@types/dompurify":"^2.3.4","@types/eslint":"^8.4.6","@types/express":"^4.17.13","@types/jsdom":"^20.0.0","@types/lodash":"^4.14.185","@types/prettier":"^2.7.0","@types/stylis":"^4.0.2","@types/uuid":"^8.3.4","@typescript-eslint/eslint-plugin":"^5.37.0","@typescript-eslint/parser":"^5.37.0",concurrently:"^7.4.0",coveralls:"^3.1.1",cypress:"^10.0.0","cypress-image-snapshot":"^4.0.1",documentation:"13.2.0",esbuild:"^0.15.8",eslint:"^8.23.1","eslint-config-prettier":"^8.5.0","eslint-plugin-cypress":"^2.12.1","eslint-plugin-html":"^7.1.0","eslint-plugin-jest":"^27.0.4","eslint-plugin-jsdoc":"^39.3.6","eslint-plugin-json":"^3.1.0","eslint-plugin-markdown":"^3.0.0",express:"^4.18.1",globby:"^13.1.2",husky:"^8.0.0","identity-obj-proxy":"^3.0.0",jison:"^0.4.18","js-base64":"3.7.2",jsdom:"^20.0.0","lint-staged":"^13.0.0",moment:"^2.23.0","path-browserify":"^1.0.1",prettier:"^2.7.1","prettier-plugin-jsdoc":"^0.4.2",remark:"^14.0.2",rimraf:"^3.0.2","start-server-and-test":"^1.12.6","ts-node":"^10.9.1",typescript:"^4.8.3","unist-util-flatmap":"^1.0.0"},resolutions:{d3:"^7.0.0"},files:["dist","README.md"],sideEffects:["**/*.css","**/*.scss"]},Xo=Object.freeze(Xa);let mn=fr({},Xo),vw,Ko=[],Rc=fr({},Xo);const n1=(t,e)=>{let r=fr({},t),n={};for(let i=0;i<e.length;i++){const a=e[i];ww(a),n=fr(n,a)}if(r=fr(r,n),n.theme&&n.theme in aa){const i=fr({},vw),a=fr(i.themeVariables||{},n.themeVariables);r.theme&&r.theme in aa&&(r.themeVariables=aa[r.theme].getThemeVariables(a))}return Rc=r,Cw(Rc),Rc},EX=t=>(mn=fr({},Xo),mn=fr(mn,t),t.theme&&aa[t.theme]&&(mn.themeVariables=aa[t.theme].getThemeVariables(t.themeVariables)),n1(mn,Ko),mn),CX=t=>{vw=fr({},t)},SX=t=>(mn=fr(mn,t),n1(mn,Ko),mn),xw=()=>fr({},mn),kw=t=>(Cw(t),fr(Rc,t),nt()),nt=()=>fr({},Rc),ww=t=>{var e;["secure",...(e=mn.secure)!=null?e:[]].forEach(r=>{typeof t[r]<"u"&&(H.debug(`Denied attempt to modify a secure key ${r}`,t[r]),delete t[r])}),Object.keys(t).forEach(r=>{r.indexOf("__")===0&&delete t[r]}),Object.keys(t).forEach(r=>{typeof t[r]=="string"&&(t[r].indexOf("<")>-1||t[r].indexOf(">")>-1||t[r].indexOf("url(data:")>-1)&&delete t[r],typeof t[r]=="object"&&ww(t[r])})},ug=t=>{t.fontFamily&&(t.themeVariables?t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily}):t.themeVariables={fontFamily:t.fontFamily}),Ko.push(t),n1(mn,Ko)},Ic=(t=mn)=>{Ko=[],n1(t,Ko)};var Tw=(t=>(t.LAZY_LOAD_DEPRECATED="The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.",t))(Tw||{});const Ew={},AX=t=>{Ew[t]||(H.warn(Tw[t]),Ew[t]=!0)},Cw=t=>{!t||(t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&AX("LAZY_LOAD_DEPRECATED")},MX=function(t,e){for(let r of e)t.attr(r[0],r[1])},LX=function(t,e,r){let n=new Map;return r?(n.set("width","100%"),n.set("style",`max-width: ${e}px;`)):n.set("width",e),n},li=function(t,e,r,n){const i=LX(e,r,n);MX(t,i)},i1=function(t,e,r,n){const i=e.node().getBBox(),a=i.width,s=i.height;H.info(`SVG bounds: ${a}x${s}`,i);let o=0,l=0;H.info(`Graph bounds: ${o}x${l}`,t),o=a+r*2,l=s+r*2,H.info(`Calculated bounds: ${o}x${l}`),li(e,l,o,n);const u=`${i.x-r} ${i.y-r} ${i.width+2*r} ${i.height+2*r}`;e.attr("viewBox",u)},Nc=t=>`g.classGroup text {
+  fill: ${t.nodeBorder};
+  fill: ${t.classText};
+  stroke: none;
+  font-family: ${t.fontFamily};
+  font-size: 10px;
+
+  .title {
+    font-weight: bolder;
+  }
+
+}
+
+.nodeLabel, .edgeLabel {
+  color: ${t.classText};
+}
+.edgeLabel .label rect {
+  fill: ${t.mainBkg};
+}
+.label text {
+  fill: ${t.classText};
+}
+.edgeLabel .label span {
+  background: ${t.mainBkg};
+}
+
+.classTitle {
+  font-weight: bolder;
+}
+.node rect,
+  .node circle,
+  .node ellipse,
+  .node polygon,
+  .node path {
+    fill: ${t.mainBkg};
+    stroke: ${t.nodeBorder};
+    stroke-width: 1px;
+  }
+
+
+.divider {
+  stroke: ${t.nodeBorder};
+  stroke: 1;
+}
+
+g.clickable {
+  cursor: pointer;
+}
+
+g.classGroup rect {
+  fill: ${t.mainBkg};
+  stroke: ${t.nodeBorder};
+}
+
+g.classGroup line {
+  stroke: ${t.nodeBorder};
+  stroke-width: 1;
+}
+
+.classLabel .box {
+  stroke: none;
+  stroke-width: 0;
+  fill: ${t.mainBkg};
+  opacity: 0.5;
+}
+
+.classLabel .label {
+  fill: ${t.nodeBorder};
+  font-size: 10px;
+}
+
+.relation {
+  stroke: ${t.lineColor};
+  stroke-width: 1;
+  fill: none;
+}
+
+.dashed-line{
+  stroke-dasharray: 3;
+}
+
+#compositionStart, .composition {
+  fill: ${t.lineColor} !important;
+  stroke: ${t.lineColor} !important;
+  stroke-width: 1;
+}
+
+#compositionEnd, .composition {
+  fill: ${t.lineColor} !important;
+  stroke: ${t.lineColor} !important;
+  stroke-width: 1;
+}
+
+#dependencyStart, .dependency {
+  fill: ${t.lineColor} !important;
+  stroke: ${t.lineColor} !important;
+  stroke-width: 1;
+}
+
+#dependencyStart, .dependency {
+  fill: ${t.lineColor} !important;
+  stroke: ${t.lineColor} !important;
+  stroke-width: 1;
+}
+
+#extensionStart, .extension {
+  fill: ${t.lineColor} !important;
+  stroke: ${t.lineColor} !important;
+  stroke-width: 1;
+}
+
+#extensionEnd, .extension {
+  fill: ${t.lineColor} !important;
+  stroke: ${t.lineColor} !important;
+  stroke-width: 1;
+}
+
+#aggregationStart, .aggregation {
+  fill: ${t.mainBkg} !important;
+  stroke: ${t.lineColor} !important;
+  stroke-width: 1;
+}
+
+#aggregationEnd, .aggregation {
+  fill: ${t.mainBkg} !important;
+  stroke: ${t.lineColor} !important;
+  stroke-width: 1;
+}
+
+#lollipopStart, .lollipop {
+  fill: ${t.mainBkg} !important;
+  stroke: ${t.lineColor} !important;
+  stroke-width: 1;
+}
+
+#lollipopEnd, .lollipop {
+  fill: ${t.mainBkg} !important;
+  stroke: ${t.lineColor} !important;
+  stroke-width: 1;
+}
+
+.edgeTerminals {
+  font-size: 11px;
+}
+
+`,Sw=t=>`
+  .entityBox {
+    fill: ${t.mainBkg};
+    stroke: ${t.nodeBorder};
+  }
+
+  .attributeBoxOdd {
+    fill: ${t.attributeBackgroundColorOdd};
+    stroke: ${t.nodeBorder};
+  }
+
+  .attributeBoxEven {
+    fill:  ${t.attributeBackgroundColorEven};
+    stroke: ${t.nodeBorder};
+  }
+
+  .relationshipLabelBox {
+    fill: ${t.tertiaryColor};
+    opacity: 0.7;
+    background-color: ${t.tertiaryColor};
+      rect {
+        opacity: 0.5;
+      }
+  }
+
+    .relationshipLine {
+      stroke: ${t.lineColor};
+    }
+`,Aw=()=>"",a1=t=>`.label {
+    font-family: ${t.fontFamily};
+    color: ${t.nodeTextColor||t.textColor};
+  }
+  .cluster-label text {
+    fill: ${t.titleColor};
+  }
+  .cluster-label span {
+    color: ${t.titleColor};
+  }
+
+  .label text,span {
+    fill: ${t.nodeTextColor||t.textColor};
+    color: ${t.nodeTextColor||t.textColor};
+  }
+
+  .node rect,
+  .node circle,
+  .node ellipse,
+  .node polygon,
+  .node path {
+    fill: ${t.mainBkg};
+    stroke: ${t.nodeBorder};
+    stroke-width: 1px;
+  }
+
+  .node .label {
+    text-align: center;
+  }
+  .node.clickable {
+    cursor: pointer;
+  }
+
+  .arrowheadPath {
+    fill: ${t.arrowheadColor};
+  }
+
+  .edgePath .path {
+    stroke: ${t.lineColor};
+    stroke-width: 2.0px;
+  }
+
+  .flowchart-link {
+    stroke: ${t.lineColor};
+    fill: none;
+  }
+
+  .edgeLabel {
+    background-color: ${t.edgeLabelBackground};
+    rect {
+      opacity: 0.5;
+      background-color: ${t.edgeLabelBackground};
+      fill: ${t.edgeLabelBackground};
+    }
+    text-align: center;
+  }
+
+  .cluster rect {
+    fill: ${t.clusterBkg};
+    stroke: ${t.clusterBorder};
+    stroke-width: 1px;
+  }
+
+  .cluster text {
+    fill: ${t.titleColor};
+  }
+
+  .cluster span {
+    color: ${t.titleColor};
+  }
+  /* .cluster div {
+    color: ${t.titleColor};
+  } */
+
+  div.mermaidTooltip {
+    position: absolute;
+    text-align: center;
+    max-width: 200px;
+    padding: 2px;
+    font-family: ${t.fontFamily};
+    font-size: 12px;
+    background: ${t.tertiaryColor};
+    border: 1px solid ${t.border2};
+    border-radius: 2px;
+    pointer-events: none;
+    z-index: 100;
+  }
+`,Mw=t=>`
+  .mermaid-main-font {
+    font-family: "trebuchet ms", verdana, arial, sans-serif;
+    font-family: var(--mermaid-font-family);
+  }
+  .exclude-range {
+    fill: ${t.excludeBkgColor};
+  }
+
+  .section {
+    stroke: none;
+    opacity: 0.2;
+  }
+
+  .section0 {
+    fill: ${t.sectionBkgColor};
+  }
+
+  .section2 {
+    fill: ${t.sectionBkgColor2};
+  }
+
+  .section1,
+  .section3 {
+    fill: ${t.altSectionBkgColor};
+    opacity: 0.2;
+  }
+
+  .sectionTitle0 {
+    fill: ${t.titleColor};
+  }
+
+  .sectionTitle1 {
+    fill: ${t.titleColor};
+  }
+
+  .sectionTitle2 {
+    fill: ${t.titleColor};
+  }
+
+  .sectionTitle3 {
+    fill: ${t.titleColor};
+  }
+
+  .sectionTitle {
+    text-anchor: start;
+    // font-size: ${t.ganttFontSize};
+    // text-height: 14px;
+    font-family: 'trebuchet ms', verdana, arial, sans-serif;
+    font-family: var(--mermaid-font-family);
+
+  }
+
+
+  /* Grid and axis */
+
+  .grid .tick {
+    stroke: ${t.gridColor};
+    opacity: 0.8;
+    shape-rendering: crispEdges;
+    text {
+      font-family: ${t.fontFamily};
+      fill: ${t.textColor};
+    }
+  }
+
+  .grid path {
+    stroke-width: 0;
+  }
+
+
+  /* Today line */
+
+  .today {
+    fill: none;
+    stroke: ${t.todayLineColor};
+    stroke-width: 2px;
+  }
+
+
+  /* Task styling */
+
+  /* Default task */
+
+  .task {
+    stroke-width: 2;
+  }
+
+  .taskText {
+    text-anchor: middle;
+    font-family: 'trebuchet ms', verdana, arial, sans-serif;
+    font-family: var(--mermaid-font-family);
+  }
+
+  // .taskText:not([font-size]) {
+  //   font-size: ${t.ganttFontSize};
+  // }
+
+  .taskTextOutsideRight {
+    fill: ${t.taskTextDarkColor};
+    text-anchor: start;
+    // font-size: ${t.ganttFontSize};
+    font-family: 'trebuchet ms', verdana, arial, sans-serif;
+    font-family: var(--mermaid-font-family);
+
+  }
+
+  .taskTextOutsideLeft {
+    fill: ${t.taskTextDarkColor};
+    text-anchor: end;
+    // font-size: ${t.ganttFontSize};
+  }
+
+  /* Special case clickable */
+  .task.clickable {
+    cursor: pointer;
+  }
+  .taskText.clickable {
+    cursor: pointer;
+    fill: ${t.taskTextClickableColor} !important;
+    font-weight: bold;
+  }
+
+  .taskTextOutsideLeft.clickable {
+    cursor: pointer;
+    fill: ${t.taskTextClickableColor} !important;
+    font-weight: bold;
+  }
+
+  .taskTextOutsideRight.clickable {
+    cursor: pointer;
+    fill: ${t.taskTextClickableColor} !important;
+    font-weight: bold;
+  }
+
+  /* Specific task settings for the sections*/
+
+  .taskText0,
+  .taskText1,
+  .taskText2,
+  .taskText3 {
+    fill: ${t.taskTextColor};
+  }
+
+  .task0,
+  .task1,
+  .task2,
+  .task3 {
+    fill: ${t.taskBkgColor};
+    stroke: ${t.taskBorderColor};
+  }
+
+  .taskTextOutside0,
+  .taskTextOutside2
+  {
+    fill: ${t.taskTextOutsideColor};
+  }
+
+  .taskTextOutside1,
+  .taskTextOutside3 {
+    fill: ${t.taskTextOutsideColor};
+  }
+
+
+  /* Active task */
+
+  .active0,
+  .active1,
+  .active2,
+  .active3 {
+    fill: ${t.activeTaskBkgColor};
+    stroke: ${t.activeTaskBorderColor};
+  }
+
+  .activeText0,
+  .activeText1,
+  .activeText2,
+  .activeText3 {
+    fill: ${t.taskTextDarkColor} !important;
+  }
+
+
+  /* Completed task */
+
+  .done0,
+  .done1,
+  .done2,
+  .done3 {
+    stroke: ${t.doneTaskBorderColor};
+    fill: ${t.doneTaskBkgColor};
+    stroke-width: 2;
+  }
+
+  .doneText0,
+  .doneText1,
+  .doneText2,
+  .doneText3 {
+    fill: ${t.taskTextDarkColor} !important;
+  }
+
+
+  /* Tasks on the critical line */
+
+  .crit0,
+  .crit1,
+  .crit2,
+  .crit3 {
+    stroke: ${t.critBorderColor};
+    fill: ${t.critBkgColor};
+    stroke-width: 2;
+  }
+
+  .activeCrit0,
+  .activeCrit1,
+  .activeCrit2,
+  .activeCrit3 {
+    stroke: ${t.critBorderColor};
+    fill: ${t.activeTaskBkgColor};
+    stroke-width: 2;
+  }
+
+  .doneCrit0,
+  .doneCrit1,
+  .doneCrit2,
+  .doneCrit3 {
+    stroke: ${t.critBorderColor};
+    fill: ${t.doneTaskBkgColor};
+    stroke-width: 2;
+    cursor: pointer;
+    shape-rendering: crispEdges;
+  }
+
+  .milestone {
+    transform: rotate(45deg) scale(0.8,0.8);
+  }
+
+  .milestoneText {
+    font-style: italic;
+  }
+  .doneCritText0,
+  .doneCritText1,
+  .doneCritText2,
+  .doneCritText3 {
+    fill: ${t.taskTextDarkColor} !important;
+  }
+
+  .activeCritText0,
+  .activeCritText1,
+  .activeCritText2,
+  .activeCritText3 {
+    fill: ${t.taskTextDarkColor} !important;
+  }
+
+  .titleText {
+    text-anchor: middle;
+    font-size: 18px;
+    fill: ${t.textColor}    ;
+    font-family: 'trebuchet ms', verdana, arial, sans-serif;
+    font-family: var(--mermaid-font-family);
+  }
+`,Lw=()=>"",Rw=t=>`
+  .pieCircle{
+    stroke: ${t.pieStrokeColor};
+    stroke-width : ${t.pieStrokeWidth};
+    opacity : ${t.pieOpacity};
+  }
+  .pieTitleText {
+    text-anchor: middle;
+    font-size: ${t.pieTitleTextSize};
+    fill: ${t.pieTitleTextColor};
+    font-family: ${t.fontFamily};
+  }
+  .slice {
+    font-family: ${t.fontFamily};
+    fill: ${t.pieSectionTextColor};
+    font-size:${t.pieSectionTextSize};
+    // fill: white;
+  }
+  .legend text {
+    fill: ${t.pieLegendTextColor};
+    font-family: ${t.fontFamily};
+    font-size: ${t.pieLegendTextSize};
+  }
+`,Iw=t=>`
+
+  marker {
+    fill: ${t.relationColor};
+    stroke: ${t.relationColor};
+  }
+
+  marker.cross {
+    stroke: ${t.lineColor};
+  }
+
+  svg {
+    font-family: ${t.fontFamily};
+    font-size: ${t.fontSize};
+  }
+
+  .reqBox {
+    fill: ${t.requirementBackground};
+    fill-opacity: 100%;
+    stroke: ${t.requirementBorderColor};
+    stroke-width: ${t.requirementBorderSize};
+  }
+  
+  .reqTitle, .reqLabel{
+    fill:  ${t.requirementTextColor};
+  }
+  .reqLabelBox {
+    fill: ${t.relationLabelBackground};
+    fill-opacity: 100%;
+  }
+
+  .req-title-line {
+    stroke: ${t.requirementBorderColor};
+    stroke-width: ${t.requirementBorderSize};
+  }
+  .relationshipLine {
+    stroke: ${t.relationColor};
+    stroke-width: 1;
+  }
+  .relationshipLabel {
+    fill: ${t.relationLabelColor};
+  }
+
+`,Nw=t=>`.actor {
+    stroke: ${t.actorBorder};
+    fill: ${t.actorBkg};
+  }
+
+  text.actor > tspan {
+    fill: ${t.actorTextColor};
+    stroke: none;
+  }
+
+  .actor-line {
+    stroke: ${t.actorLineColor};
+  }
+
+  .messageLine0 {
+    stroke-width: 1.5;
+    stroke-dasharray: none;
+    stroke: ${t.signalColor};
+  }
+
+  .messageLine1 {
+    stroke-width: 1.5;
+    stroke-dasharray: 2, 2;
+    stroke: ${t.signalColor};
+  }
+
+  #arrowhead path {
+    fill: ${t.signalColor};
+    stroke: ${t.signalColor};
+  }
+
+  .sequenceNumber {
+    fill: ${t.sequenceNumberColor};
+  }
+
+  #sequencenumber {
+    fill: ${t.signalColor};
+  }
+
+  #crosshead path {
+    fill: ${t.signalColor};
+    stroke: ${t.signalColor};
+  }
+
+  .messageText {
+    fill: ${t.signalTextColor};
+    stroke: none;
+  }
+
+  .labelBox {
+    stroke: ${t.labelBoxBorderColor};
+    fill: ${t.labelBoxBkgColor};
+  }
+
+  .labelText, .labelText > tspan {
+    fill: ${t.labelTextColor};
+    stroke: none;
+  }
+
+  .loopText, .loopText > tspan {
+    fill: ${t.loopTextColor};
+    stroke: none;
+  }
+
+  .loopLine {
+    stroke-width: 2px;
+    stroke-dasharray: 2, 2;
+    stroke: ${t.labelBoxBorderColor};
+    fill: ${t.labelBoxBorderColor};
+  }
+
+  .note {
+    //stroke: #decc93;
+    stroke: ${t.noteBorderColor};
+    fill: ${t.noteBkgColor};
+  }
+
+  .noteText, .noteText > tspan {
+    fill: ${t.noteTextColor};
+    stroke: none;
+  }
+
+  .activation0 {
+    fill: ${t.activationBkgColor};
+    stroke: ${t.activationBorderColor};
+  }
+
+  .activation1 {
+    fill: ${t.activationBkgColor};
+    stroke: ${t.activationBorderColor};
+  }
+
+  .activation2 {
+    fill: ${t.activationBkgColor};
+    stroke: ${t.activationBorderColor};
+  }
+
+  .actorPopupMenu {
+    position: absolute;
+  }
+
+  .actorPopupMenuPanel {
+    position: absolute;
+    fill: ${t.actorBkg};
+    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+    filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));
+}
+  .actor-man line {
+    stroke: ${t.actorBorder};
+    fill: ${t.actorBkg};
+  }
+  .actor-man circle, line {
+    stroke: ${t.actorBorder};
+    fill: ${t.actorBkg};
+    stroke-width: 2px;
+  }
+`,s1=t=>`
+defs #statediagram-barbEnd {
+    fill: ${t.transitionColor};
+    stroke: ${t.transitionColor};
+  }
+g.stateGroup text {
+  fill: ${t.nodeBorder};
+  stroke: none;
+  font-size: 10px;
+}
+g.stateGroup text {
+  fill: ${t.textColor};
+  stroke: none;
+  font-size: 10px;
+
+}
+g.stateGroup .state-title {
+  font-weight: bolder;
+  fill: ${t.stateLabelColor};
+}
+
+g.stateGroup rect {
+  fill: ${t.mainBkg};
+  stroke: ${t.nodeBorder};
+}
+
+g.stateGroup line {
+  stroke: ${t.lineColor};
+  stroke-width: 1;
+}
+
+.transition {
+  stroke: ${t.transitionColor};
+  stroke-width: 1;
+  fill: none;
+}
+
+.stateGroup .composit {
+  fill: ${t.background};
+  border-bottom: 1px
+}
+
+.stateGroup .alt-composit {
+  fill: #e0e0e0;
+  border-bottom: 1px
+}
+
+.state-note {
+  stroke: ${t.noteBorderColor};
+  fill: ${t.noteBkgColor};
+
+  text {
+    fill: ${t.noteTextColor};
+    stroke: none;
+    font-size: 10px;
+  }
+}
+
+.stateLabel .box {
+  stroke: none;
+  stroke-width: 0;
+  fill: ${t.mainBkg};
+  opacity: 0.5;
+}
+
+.edgeLabel .label rect {
+  fill: ${t.labelBackgroundColor};
+  opacity: 0.5;
+}
+.edgeLabel .label text {
+  fill: ${t.transitionLabelColor||t.tertiaryTextColor};
+}
+.label div .edgeLabel {
+  color: ${t.transitionLabelColor||t.tertiaryTextColor};
+}
+
+.stateLabel text {
+  fill: ${t.stateLabelColor};
+  font-size: 10px;
+  font-weight: bold;
+}
+
+.node circle.state-start {
+  fill: ${t.specialStateColor};
+  stroke: ${t.specialStateColor};
+}
+
+.node .fork-join {
+  fill: ${t.specialStateColor};
+  stroke: ${t.specialStateColor};
+}
+
+.node circle.state-end {
+  fill: ${t.innerEndBackground};
+  stroke: ${t.background};
+  stroke-width: 1.5
+}
+.end-state-inner {
+  fill: ${t.compositeBackground||t.background};
+  // stroke: ${t.background};
+  stroke-width: 1.5
+}
+
+.node rect {
+  fill: ${t.stateBkg||t.mainBkg};
+  stroke: ${t.stateBorder||t.nodeBorder};
+  stroke-width: 1px;
+}
+.node polygon {
+  fill: ${t.mainBkg};
+  stroke: ${t.stateBorder||t.nodeBorder};;
+  stroke-width: 1px;
+}
+#statediagram-barbEnd {
+  fill: ${t.lineColor};
+}
+
+.statediagram-cluster rect {
+  fill: ${t.compositeTitleBackground};
+  stroke: ${t.stateBorder||t.nodeBorder};
+  stroke-width: 1px;
+}
+
+.cluster-label, .nodeLabel {
+  color: ${t.stateLabelColor};
+}
+
+.statediagram-cluster rect.outer {
+  rx: 5px;
+  ry: 5px;
+}
+.statediagram-state .divider {
+  stroke: ${t.stateBorder||t.nodeBorder};
+}
+
+.statediagram-state .title-state {
+  rx: 5px;
+  ry: 5px;
+}
+.statediagram-cluster.statediagram-cluster .inner {
+  fill: ${t.compositeBackground||t.background};
+}
+.statediagram-cluster.statediagram-cluster-alt .inner {
+  fill: ${t.altBackground?t.altBackground:"#efefef"};
+}
+
+.statediagram-cluster .inner {
+  rx:0;
+  ry:0;
+}
+
+.statediagram-state rect.basic {
+  rx: 5px;
+  ry: 5px;
+}
+.statediagram-state rect.divider {
+  stroke-dasharray: 10,10;
+  fill: ${t.altBackground?t.altBackground:"#efefef"};
+}
+
+.note-edge {
+  stroke-dasharray: 5;
+}
+
+.statediagram-note rect {
+  fill: ${t.noteBkgColor};
+  stroke: ${t.noteBorderColor};
+  stroke-width: 1px;
+  rx: 0;
+  ry: 0;
+}
+.statediagram-note rect {
+  fill: ${t.noteBkgColor};
+  stroke: ${t.noteBorderColor};
+  stroke-width: 1px;
+  rx: 0;
+  ry: 0;
+}
+
+.statediagram-note text {
+  fill: ${t.noteTextColor};
+}
+
+.statediagram-note .nodeLabel {
+  color: ${t.noteTextColor};
+}
+.statediagram .edgeLabel {
+  color: red; // ${t.noteTextColor};
+}
+
+#dependencyStart, #dependencyEnd {
+  fill: ${t.lineColor};
+  stroke: ${t.lineColor};
+  stroke-width: 1;
+}
+`,Bw=t=>`.label {
+    font-family: 'trebuchet ms', verdana, arial, sans-serif;
+    font-family: var(--mermaid-font-family);
+    color: ${t.textColor};
+  }
+  .mouth {
+    stroke: #666;
+  }
+
+  line {
+    stroke: ${t.textColor}
+  }
+
+  .legend {
+    fill: ${t.textColor};
+  }
+
+  .label text {
+    fill: #333;
+  }
+  .label {
+    color: ${t.textColor}
+  }
+
+  .face {
+    ${t.faceColor?`fill: ${t.faceColor}`:"fill: #FFF8DC"};
+    stroke: #999;
+  }
+
+  .node rect,
+  .node circle,
+  .node ellipse,
+  .node polygon,
+  .node path {
+    fill: ${t.mainBkg};
+    stroke: ${t.nodeBorder};
+    stroke-width: 1px;
+  }
+
+  .node .label {
+    text-align: center;
+  }
+  .node.clickable {
+    cursor: pointer;
+  }
+
+  .arrowheadPath {
+    fill: ${t.arrowheadColor};
+  }
+
+  .edgePath .path {
+    stroke: ${t.lineColor};
+    stroke-width: 1.5px;
+  }
+
+  .flowchart-link {
+    stroke: ${t.lineColor};
+    fill: none;
+  }
+
+  .edgeLabel {
+    background-color: ${t.edgeLabelBackground};
+    rect {
+      opacity: 0.5;
+    }
+    text-align: center;
+  }
+
+  .cluster rect {
+  }
+
+  .cluster text {
+    fill: ${t.titleColor};
+  }
+
+  div.mermaidTooltip {
+    position: absolute;
+    text-align: center;
+    max-width: 200px;
+    padding: 2px;
+    font-family: 'trebuchet ms', verdana, arial, sans-serif;
+    font-family: var(--mermaid-font-family);
+    font-size: 12px;
+    background: ${t.tertiaryColor};
+    border: 1px solid ${t.border2};
+    border-radius: 2px;
+    pointer-events: none;
+    z-index: 100;
+  }
+
+  .task-type-0, .section-type-0  {
+    ${t.fillType0?`fill: ${t.fillType0}`:""};
+  }
+  .task-type-1, .section-type-1  {
+    ${t.fillType0?`fill: ${t.fillType1}`:""};
+  }
+  .task-type-2, .section-type-2  {
+    ${t.fillType0?`fill: ${t.fillType2}`:""};
+  }
+  .task-type-3, .section-type-3  {
+    ${t.fillType0?`fill: ${t.fillType3}`:""};
+  }
+  .task-type-4, .section-type-4  {
+    ${t.fillType0?`fill: ${t.fillType4}`:""};
+  }
+  .task-type-5, .section-type-5  {
+    ${t.fillType0?`fill: ${t.fillType5}`:""};
+  }
+  .task-type-6, .section-type-6  {
+    ${t.fillType0?`fill: ${t.fillType6}`:""};
+  }
+  .task-type-7, .section-type-7  {
+    ${t.fillType0?`fill: ${t.fillType7}`:""};
+  }
+
+  .actor-0 {
+    ${t.actor0?`fill: ${t.actor0}`:""};
+  }
+  .actor-1 {
+    ${t.actor1?`fill: ${t.actor1}`:""};
+  }
+  .actor-2 {
+    ${t.actor2?`fill: ${t.actor2}`:""};
+  }
+  .actor-3 {
+    ${t.actor3?`fill: ${t.actor3}`:""};
+  }
+  .actor-4 {
+    ${t.actor4?`fill: ${t.actor4}`:""};
+  }
+  .actor-5 {
+    ${t.actor5?`fill: ${t.actor5}`:""};
+  }
+`,Dw=t=>`.person {
+    stroke: ${t.personBorder};
+    fill: ${t.personBkg};
+  }
+`,o1={flowchart:a1,"flowchart-v2":a1,sequence:Nw,gantt:Mw,classDiagram:Nc,"classDiagram-v2":Nc,class:Nc,stateDiagram:s1,state:s1,info:Lw,pie:Rw,er:Sw,error:Aw,journey:Bw,requirement:Iw,c4:Dw},Ow=(t,e,r)=>{let n="";return t in o1&&o1[t]?n=o1[t](r):H.warn(`No theme found for ${t}`),` {
+    font-family: ${r.fontFamily};
+    font-size: ${r.fontSize};
+    fill: ${r.textColor}
+  }
+
+  /* Classes common for multiple diagrams */
+
+  .error-icon {
+    fill: ${r.errorBkgColor};
+  }
+  .error-text {
+    fill: ${r.errorTextColor};
+    stroke: ${r.errorTextColor};
+  }
+
+  .edge-thickness-normal {
+    stroke-width: 2px;
+  }
+  .edge-thickness-thick {
+    stroke-width: 3.5px
+  }
+  .edge-pattern-solid {
+    stroke-dasharray: 0;
+  }
+
+  .edge-pattern-dashed{
+    stroke-dasharray: 3;
+  }
+  .edge-pattern-dotted {
+    stroke-dasharray: 2;
+  }
+
+  .marker {
+    fill: ${r.lineColor};
+    stroke: ${r.lineColor};
+  }
+  .marker.cross {
+    stroke: ${r.lineColor};
+  }
+
+  svg {
+    font-family: ${r.fontFamily};
+    font-size: ${r.fontSize};
+  }
+
+  ${n}
+
+  ${e}
+`},RX=(t,e)=>{o1[t]=e},Bc=H,IX=D0,Zo=nt,NX=t=>ai(t,Zo()),Fw=i1,Qo={},Lr=(t,e,r)=>{Bc.debug(`Registering diagram ${t}`),Qo[t]&&Bc.warn(`Diagram ${t} already registered.`),Qo[t]=e,r&&$k(t,r),RX(t,e.styles),e.injectUtils&&e.injectUtils(Bc,IX,Zo,NX,Fw),Bc.debug(`Registered diagram ${t}. ${Object.keys(Qo).join(", ")} diagrams registered.`)},Pw=t=>{if(Bc.debug(`Getting diagram ${t}. ${Object.keys(Qo).join(", ")} diagrams registered.`),t in Qo)return Qo[t];throw new qw(t)};class qw extends Error{constructor(e){super(`Diagram ${e} not found.`)}}var hg=function(){var t=function(C,M,S,R){for(S=S||{},R=C.length;R--;S[C[R]]=M);return S},e=[1,4],r=[1,7],n=[1,5],i=[1,9],a=[1,6],s=[2,6],o=[1,16],l=[6,8,14,20,22,24,25,27,29,32,37,40,50,54],u=[8,14,20,22,24,25,27,29,32,37,40],h=[8,13,14,20,22,24,25,27,29,32,37,40],d=[1,26],f=[6,8,14,50,54],p=[8,14,54],m=[1,65],_=[1,66],y=[1,67],b=[8,14,33,35,42,54],x={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,GG:6,document:7,EOF:8,":":9,DIR:10,options:11,body:12,OPT:13,NL:14,line:15,statement:16,commitStatement:17,mergeStatement:18,cherryPickStatement:19,acc_title:20,acc_title_value:21,acc_descr:22,acc_descr_value:23,acc_descr_multiline_value:24,section:25,branchStatement:26,CHECKOUT:27,ID:28,BRANCH:29,ORDER:30,NUM:31,CHERRY_PICK:32,COMMIT_ID:33,STR:34,COMMIT_TAG:35,EMPTYSTR:36,MERGE:37,COMMIT_TYPE:38,commitType:39,COMMIT:40,commit_arg:41,COMMIT_MSG:42,NORMAL:43,REVERSE:44,HIGHLIGHT:45,openDirective:46,typeDirective:47,closeDirective:48,argDirective:49,open_directive:50,type_directive:51,arg_directive:52,close_directive:53,";":54,$accept:0,$end:1},terminals_:{2:"error",6:"GG",8:"EOF",9:":",10:"DIR",13:"OPT",14:"NL",20:"acc_title",21:"acc_title_value",22:"acc_descr",23:"acc_descr_value",24:"acc_descr_multiline_value",25:"section",27:"CHECKOUT",28:"ID",29:"BRANCH",30:"ORDER",31:"NUM",32:"CHERRY_PICK",33:"COMMIT_ID",34:"STR",35:"COMMIT_TAG",36:"EMPTYSTR",37:"MERGE",38:"COMMIT_TYPE",40:"COMMIT",42:"COMMIT_MSG",43:"NORMAL",44:"REVERSE",45:"HIGHLIGHT",50:"open_directive",51:"type_directive",52:"arg_directive",53:"close_directive",54:";"},productions_:[0,[3,2],[3,2],[3,3],[3,4],[3,5],[7,0],[7,2],[11,2],[11,1],[12,0],[12,2],[15,2],[15,1],[16,1],[16,1],[16,1],[16,2],[16,2],[16,1],[16,1],[16,1],[16,2],[26,2],[26,4],[19,3],[19,5],[19,5],[19,5],[19,5],[18,2],[18,4],[18,4],[18,4],[18,6],[18,6],[18,6],[18,6],[18,6],[18,6],[18,8],[18,8],[18,8],[18,8],[18,8],[18,8],[17,2],[17,3],[17,3],[17,5],[17,5],[17,3],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,3],[17,5],[17,5],[17,5],[17,5],[17,5],[17,5],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,7],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[17,9],[41,0],[41,1],[39,1],[39,1],[39,1],[5,3],[5,5],[46,1],[47,1],[49,1],[48,1],[4,1],[4,1],[4,1]],performAction:function(M,S,R,A,L,v,B){var w=v.length-1;switch(L){case 3:return v[w];case 4:return v[w-1];case 5:return A.setDirection(v[w-3]),v[w-1];case 7:A.setOptions(v[w-1]),this.$=v[w];break;case 8:v[w-1]+=v[w],this.$=v[w-1];break;case 10:this.$=[];break;case 11:v[w-1].push(v[w]),this.$=v[w-1];break;case 12:this.$=v[w-1];break;case 17:this.$=v[w].trim(),A.setAccTitle(this.$);break;case 18:case 19:this.$=v[w].trim(),A.setAccDescription(this.$);break;case 20:A.addSection(v[w].substr(8)),this.$=v[w].substr(8);break;case 22:A.checkout(v[w]);break;case 23:A.branch(v[w]);break;case 24:A.branch(v[w-2],v[w]);break;case 25:A.cherryPick(v[w],"",void 0);break;case 26:A.cherryPick(v[w-2],"",v[w]);break;case 27:case 29:A.cherryPick(v[w-2],"","");break;case 28:A.cherryPick(v[w],"",v[w-2]);break;case 30:A.merge(v[w],"","","");break;case 31:A.merge(v[w-2],v[w],"","");break;case 32:A.merge(v[w-2],"",v[w],"");break;case 33:A.merge(v[w-2],"","",v[w]);break;case 34:A.merge(v[w-4],v[w],"",v[w-2]);break;case 35:A.merge(v[w-4],"",v[w],v[w-2]);break;case 36:A.merge(v[w-4],"",v[w-2],v[w]);break;case 37:A.merge(v[w-4],v[w-2],v[w],"");break;case 38:A.merge(v[w-4],v[w-2],"",v[w]);break;case 39:A.merge(v[w-4],v[w],v[w-2],"");break;case 40:A.merge(v[w-6],v[w-4],v[w-2],v[w]);break;case 41:A.merge(v[w-6],v[w],v[w-4],v[w-2]);break;case 42:A.merge(v[w-6],v[w-4],v[w],v[w-2]);break;case 43:A.merge(v[w-6],v[w-2],v[w-4],v[w]);break;case 44:A.merge(v[w-6],v[w],v[w-2],v[w-4]);break;case 45:A.merge(v[w-6],v[w-2],v[w],v[w-4]);break;case 46:A.commit(v[w]);break;case 47:A.commit("","",A.commitType.NORMAL,v[w]);break;case 48:A.commit("","",v[w],"");break;case 49:A.commit("","",v[w],v[w-2]);break;case 50:A.commit("","",v[w-2],v[w]);break;case 51:A.commit("",v[w],A.commitType.NORMAL,"");break;case 52:A.commit("",v[w-2],A.commitType.NORMAL,v[w]);break;case 53:A.commit("",v[w],A.commitType.NORMAL,v[w-2]);break;case 54:A.commit("",v[w-2],v[w],"");break;case 55:A.commit("",v[w],v[w-2],"");break;case 56:A.commit("",v[w-4],v[w-2],v[w]);break;case 57:A.commit("",v[w-4],v[w],v[w-2]);break;case 58:A.commit("",v[w-2],v[w-4],v[w]);break;case 59:A.commit("",v[w],v[w-4],v[w-2]);break;case 60:A.commit("",v[w],v[w-2],v[w-4]);break;case 61:A.commit("",v[w-2],v[w],v[w-4]);break;case 62:A.commit(v[w],"",A.commitType.NORMAL,"");break;case 63:A.commit(v[w],"",A.commitType.NORMAL,v[w-2]);break;case 64:A.commit(v[w-2],"",A.commitType.NORMAL,v[w]);break;case 65:A.commit(v[w-2],"",v[w],"");break;case 66:A.commit(v[w],"",v[w-2],"");break;case 67:A.commit(v[w],v[w-2],A.commitType.NORMAL,"");break;case 68:A.commit(v[w-2],v[w],A.commitType.NORMAL,"");break;case 69:A.commit(v[w-4],"",v[w-2],v[w]);break;case 70:A.commit(v[w-4],"",v[w],v[w-2]);break;case 71:A.commit(v[w-2],"",v[w-4],v[w]);break;case 72:A.commit(v[w],"",v[w-4],v[w-2]);break;case 73:A.commit(v[w],"",v[w-2],v[w-4]);break;case 74:A.commit(v[w-2],"",v[w],v[w-4]);break;case 75:A.commit(v[w-4],v[w],v[w-2],"");break;case 76:A.commit(v[w-4],v[w-2],v[w],"");break;case 77:A.commit(v[w-2],v[w],v[w-4],"");break;case 78:A.commit(v[w],v[w-2],v[w-4],"");break;case 79:A.commit(v[w],v[w-4],v[w-2],"");break;case 80:A.commit(v[w-2],v[w-4],v[w],"");break;case 81:A.commit(v[w-4],v[w],A.commitType.NORMAL,v[w-2]);break;case 82:A.commit(v[w-4],v[w-2],A.commitType.NORMAL,v[w]);break;case 83:A.commit(v[w-2],v[w],A.commitType.NORMAL,v[w-4]);break;case 84:A.commit(v[w],v[w-2],A.commitType.NORMAL,v[w-4]);break;case 85:A.commit(v[w],v[w-4],A.commitType.NORMAL,v[w-2]);break;case 86:A.commit(v[w-2],v[w-4],A.commitType.NORMAL,v[w]);break;case 87:A.commit(v[w-6],v[w-4],v[w-2],v[w]);break;case 88:A.commit(v[w-6],v[w-4],v[w],v[w-2]);break;case 89:A.commit(v[w-6],v[w-2],v[w-4],v[w]);break;case 90:A.commit(v[w-6],v[w],v[w-4],v[w-2]);break;case 91:A.commit(v[w-6],v[w-2],v[w],v[w-4]);break;case 92:A.commit(v[w-6],v[w],v[w-2],v[w-4]);break;case 93:A.commit(v[w-4],v[w-6],v[w-2],v[w]);break;case 94:A.commit(v[w-4],v[w-6],v[w],v[w-2]);break;case 95:A.commit(v[w-2],v[w-6],v[w-4],v[w]);break;case 96:A.commit(v[w],v[w-6],v[w-4],v[w-2]);break;case 97:A.commit(v[w-2],v[w-6],v[w],v[w-4]);break;case 98:A.commit(v[w],v[w-6],v[w-2],v[w-4]);break;case 99:A.commit(v[w],v[w-4],v[w-2],v[w-6]);break;case 100:A.commit(v[w-2],v[w-4],v[w],v[w-6]);break;case 101:A.commit(v[w],v[w-2],v[w-4],v[w-6]);break;case 102:A.commit(v[w-2],v[w],v[w-4],v[w-6]);break;case 103:A.commit(v[w-4],v[w-2],v[w],v[w-6]);break;case 104:A.commit(v[w-4],v[w],v[w-2],v[w-6]);break;case 105:A.commit(v[w-2],v[w-4],v[w-6],v[w]);break;case 106:A.commit(v[w],v[w-4],v[w-6],v[w-2]);break;case 107:A.commit(v[w-2],v[w],v[w-6],v[w-4]);break;case 108:A.commit(v[w],v[w-2],v[w-6],v[w-4]);break;case 109:A.commit(v[w-4],v[w-2],v[w-6],v[w]);break;case 110:A.commit(v[w-4],v[w],v[w-6],v[w-2]);break;case 111:this.$="";break;case 112:this.$=v[w];break;case 113:this.$=A.commitType.NORMAL;break;case 114:this.$=A.commitType.REVERSE;break;case 115:this.$=A.commitType.HIGHLIGHT;break;case 118:A.parseDirective("%%{","open_directive");break;case 119:A.parseDirective(v[w],"type_directive");break;case 120:v[w]=v[w].trim().replace(/'/g,'"'),A.parseDirective(v[w],"arg_directive");break;case 121:A.parseDirective("}%%","close_directive","gitGraph");break}},table:[{3:1,4:2,5:3,6:e,8:r,14:n,46:8,50:i,54:a},{1:[3]},{3:10,4:2,5:3,6:e,8:r,14:n,46:8,50:i,54:a},{3:11,4:2,5:3,6:e,8:r,14:n,46:8,50:i,54:a},{7:12,8:s,9:[1,13],10:[1,14],11:15,14:o},t(l,[2,122]),t(l,[2,123]),t(l,[2,124]),{47:17,51:[1,18]},{51:[2,118]},{1:[2,1]},{1:[2,2]},{8:[1,19]},{7:20,8:s,11:15,14:o},{9:[1,21]},t(u,[2,10],{12:22,13:[1,23]}),t(h,[2,9]),{9:[1,25],48:24,53:d},t([9,53],[2,119]),{1:[2,3]},{8:[1,27]},{7:28,8:s,11:15,14:o},{8:[2,7],14:[1,31],15:29,16:30,17:32,18:33,19:34,20:[1,35],22:[1,36],24:[1,37],25:[1,38],26:39,27:[1,40],29:[1,44],32:[1,43],37:[1,42],40:[1,41]},t(h,[2,8]),t(f,[2,116]),{49:45,52:[1,46]},t(f,[2,121]),{1:[2,4]},{8:[1,47]},t(u,[2,11]),{4:48,8:r,14:n,54:a},t(u,[2,13]),t(p,[2,14]),t(p,[2,15]),t(p,[2,16]),{21:[1,49]},{23:[1,50]},t(p,[2,19]),t(p,[2,20]),t(p,[2,21]),{28:[1,51]},t(p,[2,111],{41:52,33:[1,55],34:[1,57],35:[1,53],38:[1,54],42:[1,56]}),{28:[1,58]},{33:[1,59],35:[1,60]},{28:[1,61]},{48:62,53:d},{53:[2,120]},{1:[2,5]},t(u,[2,12]),t(p,[2,17]),t(p,[2,18]),t(p,[2,22]),t(p,[2,46]),{34:[1,63]},{39:64,43:m,44:_,45:y},{34:[1,68]},{34:[1,69]},t(p,[2,112]),t(p,[2,30],{33:[1,70],35:[1,72],38:[1,71]}),{34:[1,73]},{34:[1,74],36:[1,75]},t(p,[2,23],{30:[1,76]}),t(f,[2,117]),t(p,[2,47],{33:[1,78],38:[1,77],42:[1,79]}),t(p,[2,48],{33:[1,81],35:[1,80],42:[1,82]}),t(b,[2,113]),t(b,[2,114]),t(b,[2,115]),t(p,[2,51],{35:[1,83],38:[1,84],42:[1,85]}),t(p,[2,62],{33:[1,88],35:[1,86],38:[1,87]}),{34:[1,89]},{39:90,43:m,44:_,45:y},{34:[1,91]},t(p,[2,25],{35:[1,92]}),{33:[1,93]},{33:[1,94]},{31:[1,95]},{39:96,43:m,44:_,45:y},{34:[1,97]},{34:[1,98]},{34:[1,99]},{34:[1,100]},{34:[1,101]},{34:[1,102]},{39:103,43:m,44:_,45:y},{34:[1,104]},{34:[1,105]},{39:106,43:m,44:_,45:y},{34:[1,107]},t(p,[2,31],{35:[1,109],38:[1,108]}),t(p,[2,32],{33:[1,111],35:[1,110]}),t(p,[2,33],{33:[1,112],38:[1,113]}),{34:[1,114],36:[1,115]},{34:[1,116]},{34:[1,117]},t(p,[2,24]),t(p,[2,49],{33:[1,118],42:[1,119]}),t(p,[2,53],{38:[1,120],42:[1,121]}),t(p,[2,63],{33:[1,123],38:[1,122]}),t(p,[2,50],{33:[1,124],42:[1,125]}),t(p,[2,55],{35:[1,126],42:[1,127]}),t(p,[2,66],{33:[1,129],35:[1,128]}),t(p,[2,52],{38:[1,130],42:[1,131]}),t(p,[2,54],{35:[1,132],42:[1,133]}),t(p,[2,67],{35:[1,135],38:[1,134]}),t(p,[2,64],{33:[1,137],38:[1,136]}),t(p,[2,65],{33:[1,139],35:[1,138]}),t(p,[2,68],{35:[1,141],38:[1,140]}),{39:142,43:m,44:_,45:y},{34:[1,143]},{34:[1,144]},{34:[1,145]},{34:[1,146]},{39:147,43:m,44:_,45:y},t(p,[2,26]),t(p,[2,27]),t(p,[2,28]),t(p,[2,29]),{34:[1,148]},{34:[1,149]},{39:150,43:m,44:_,45:y},{34:[1,151]},{39:152,43:m,44:_,45:y},{34:[1,153]},{34:[1,154]},{34:[1,155]},{34:[1,156]},{34:[1,157]},{34:[1,158]},{34:[1,159]},{39:160,43:m,44:_,45:y},{34:[1,161]},{34:[1,162]},{34:[1,163]},{39:164,43:m,44:_,45:y},{34:[1,165]},{39:166,43:m,44:_,45:y},{34:[1,167]},{34:[1,168]},{34:[1,169]},{39:170,43:m,44:_,45:y},{34:[1,171]},t(p,[2,37],{35:[1,172]}),t(p,[2,38],{38:[1,173]}),t(p,[2,36],{33:[1,174]}),t(p,[2,39],{35:[1,175]}),t(p,[2,34],{38:[1,176]}),t(p,[2,35],{33:[1,177]}),t(p,[2,60],{42:[1,178]}),t(p,[2,73],{33:[1,179]}),t(p,[2,61],{42:[1,180]}),t(p,[2,84],{38:[1,181]}),t(p,[2,74],{33:[1,182]}),t(p,[2,83],{38:[1,183]}),t(p,[2,59],{42:[1,184]}),t(p,[2,72],{33:[1,185]}),t(p,[2,58],{42:[1,186]}),t(p,[2,78],{35:[1,187]}),t(p,[2,71],{33:[1,188]}),t(p,[2,77],{35:[1,189]}),t(p,[2,57],{42:[1,190]}),t(p,[2,85],{38:[1,191]}),t(p,[2,56],{42:[1,192]}),t(p,[2,79],{35:[1,193]}),t(p,[2,80],{35:[1,194]}),t(p,[2,86],{38:[1,195]}),t(p,[2,70],{33:[1,196]}),t(p,[2,81],{38:[1,197]}),t(p,[2,69],{33:[1,198]}),t(p,[2,75],{35:[1,199]}),t(p,[2,76],{35:[1,200]}),t(p,[2,82],{38:[1,201]}),{34:[1,202]},{39:203,43:m,44:_,45:y},{34:[1,204]},{34:[1,205]},{39:206,43:m,44:_,45:y},{34:[1,207]},{34:[1,208]},{34:[1,209]},{34:[1,210]},{39:211,43:m,44:_,45:y},{34:[1,212]},{39:213,43:m,44:_,45:y},{34:[1,214]},{34:[1,215]},{34:[1,216]},{34:[1,217]},{34:[1,218]},{34:[1,219]},{34:[1,220]},{39:221,43:m,44:_,45:y},{34:[1,222]},{34:[1,223]},{34:[1,224]},{39:225,43:m,44:_,45:y},{34:[1,226]},{39:227,43:m,44:_,45:y},{34:[1,228]},{34:[1,229]},{34:[1,230]},{39:231,43:m,44:_,45:y},t(p,[2,40]),t(p,[2,42]),t(p,[2,41]),t(p,[2,43]),t(p,[2,45]),t(p,[2,44]),t(p,[2,101]),t(p,[2,102]),t(p,[2,99]),t(p,[2,100]),t(p,[2,104]),t(p,[2,103]),t(p,[2,108]),t(p,[2,107]),t(p,[2,106]),t(p,[2,105]),t(p,[2,110]),t(p,[2,109]),t(p,[2,98]),t(p,[2,97]),t(p,[2,96]),t(p,[2,95]),t(p,[2,93]),t(p,[2,94]),t(p,[2,92]),t(p,[2,91]),t(p,[2,90]),t(p,[2,89]),t(p,[2,87]),t(p,[2,88])],defaultActions:{9:[2,118],10:[2,1],11:[2,2],19:[2,3],27:[2,4],46:[2,120],47:[2,5]},parseError:function(M,S){if(S.recoverable)this.trace(M);else{var R=new Error(M);throw R.hash=S,R}},parse:function(M){var S=this,R=[0],A=[],L=[null],v=[],B=this.table,w="",D=0,N=0,z=2,X=1,ct=v.slice.call(arguments,1),J=Object.create(this.lexer),Y={yy:{}};for(var $ in this.yy)Object.prototype.hasOwnProperty.call(this.yy,$)&&(Y.yy[$]=this.yy[$]);J.setInput(M,Y.yy),Y.yy.lexer=J,Y.yy.parser=this,typeof J.yylloc>"u"&&(J.yylloc={});var lt=J.yylloc;v.push(lt);var ut=J.options&&J.options.ranges;typeof Y.yy.parseError=="function"?this.parseError=Y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function W(){var P;return P=A.pop()||J.lex()||X,typeof P!="number"&&(P instanceof Array&&(A=P,P=A.pop()),P=S.symbols_[P]||P),P}for(var tt,K,it,Z,V={},Q,q,U,F;;){if(K=R[R.length-1],this.defaultActions[K]?it=this.defaultActions[K]:((tt===null||typeof tt>"u")&&(tt=W()),it=B[K]&&B[K][tt]),typeof it>"u"||!it.length||!it[0]){var j="";F=[];for(Q in B[K])this.terminals_[Q]&&Q>z&&F.push("'"+this.terminals_[Q]+"'");J.showPosition?j="Parse error on line "+(D+1)+`:
+`+J.showPosition()+`
+Expecting `+F.join(", ")+", got '"+(this.terminals_[tt]||tt)+"'":j="Parse error on line "+(D+1)+": Unexpected "+(tt==X?"end of input":"'"+(this.terminals_[tt]||tt)+"'"),this.parseError(j,{text:J.match,token:this.terminals_[tt]||tt,line:J.yylineno,loc:lt,expected:F})}if(it[0]instanceof Array&&it.length>1)throw new Error("Parse Error: multiple actions possible at state: "+K+", token: "+tt);switch(it[0]){case 1:R.push(tt),L.push(J.yytext),v.push(J.yylloc),R.push(it[1]),tt=null,N=J.yyleng,w=J.yytext,D=J.yylineno,lt=J.yylloc;break;case 2:if(q=this.productions_[it[1]][1],V.$=L[L.length-q],V._$={first_line:v[v.length-(q||1)].first_line,last_line:v[v.length-1].last_line,first_column:v[v.length-(q||1)].first_column,last_column:v[v.length-1].last_column},ut&&(V._$.range=[v[v.length-(q||1)].range[0],v[v.length-1].range[1]]),Z=this.performAction.apply(V,[w,N,D,Y.yy,it[1],L,v].concat(ct)),typeof Z<"u")return Z;q&&(R=R.slice(0,-1*q*2),L=L.slice(0,-1*q),v=v.slice(0,-1*q)),R.push(this.productions_[it[1]][0]),L.push(V.$),v.push(V._$),U=B[R[R.length-2]][R[R.length-1]],R.push(U);break;case 3:return!0}}return!0}},k=function(){var C={EOF:1,parseError:function(S,R){if(this.yy.parser)this.yy.parser.parseError(S,R);else throw new Error(S)},setInput:function(M,S){return this.yy=S||this.yy||{},this._input=M,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var M=this._input[0];this.yytext+=M,this.yyleng++,this.offset++,this.match+=M,this.matched+=M;var S=M.match(/(?:\r\n?|\n).*/g);return S?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),M},unput:function(M){var S=M.length,R=M.split(/(?:\r\n?|\n)/g);this._input=M+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-S),this.offset-=S;var A=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),R.length-1&&(this.yylineno-=R.length-1);var L=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:R?(R.length===A.length?this.yylloc.first_column:0)+A[A.length-R.length].length-R[0].length:this.yylloc.first_column-S},this.options.ranges&&(this.yylloc.range=[L[0],L[0]+this.yyleng-S]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(M){this.unput(this.match.slice(M))},pastInput:function(){var M=this.matched.substr(0,this.matched.length-this.match.length);return(M.length>20?"...":"")+M.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var M=this.match;return M.length<20&&(M+=this._input.substr(0,20-M.length)),(M.substr(0,20)+(M.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var M=this.pastInput(),S=new Array(M.length+1).join("-");return M+this.upcomingInput()+`
+`+S+"^"},test_match:function(M,S){var R,A,L;if(this.options.backtrack_lexer&&(L={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(L.yylloc.range=this.yylloc.range.slice(0))),A=M[0].match(/(?:\r\n?|\n).*/g),A&&(this.yylineno+=A.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:A?A[A.length-1].length-A[A.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+M[0].length},this.yytext+=M[0],this.match+=M[0],this.matches=M,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(M[0].length),this.matched+=M[0],R=this.performAction.call(this,this.yy,this,S,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),R)return R;if(this._backtrack){for(var v in L)this[v]=L[v];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var M,S,R,A;this._more||(this.yytext="",this.match="");for(var L=this._currentRules(),v=0;v<L.length;v++)if(R=this._input.match(this.rules[L[v]]),R&&(!S||R[0].length>S[0].length)){if(S=R,A=v,this.options.backtrack_lexer){if(M=this.test_match(R,L[v]),M!==!1)return M;if(this._backtrack){S=!1;continue}else return!1}else if(!this.options.flex)break}return S?(M=this.test_match(S,L[A]),M!==!1?M:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var S=this.next();return S||this.lex()},begin:function(S){this.conditionStack.push(S)},popState:function(){var S=this.conditionStack.length-1;return S>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(S){return S=this.conditionStack.length-1-Math.abs(S||0),S>=0?this.conditionStack[S]:"INITIAL"},pushState:function(S){this.begin(S)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(S,R,A,L){switch(A){case 0:return this.begin("open_directive"),50;case 1:return this.begin("type_directive"),51;case 2:return this.popState(),this.begin("arg_directive"),9;case 3:return this.popState(),this.popState(),53;case 4:return 52;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:return 14;case 13:break;case 14:break;case 15:return 6;case 16:return 40;case 17:return 33;case 18:return 38;case 19:return 42;case 20:return 43;case 21:return 44;case 22:return 45;case 23:return 35;case 24:return 29;case 25:return 30;case 26:return 37;case 27:return 32;case 28:return 27;case 29:return 10;case 30:return 10;case 31:return 9;case 32:return"CARET";case 33:this.begin("options");break;case 34:this.popState();break;case 35:return 13;case 36:return 36;case 37:this.begin("string");break;case 38:this.popState();break;case 39:return 34;case 40:return 31;case 41:return 28;case 42:return 8}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit(?=\s|$))/i,/^(?:id:)/i,/^(?:type:)/i,/^(?:msg:)/i,/^(?:NORMAL\b)/i,/^(?:REVERSE\b)/i,/^(?:HIGHLIGHT\b)/i,/^(?:tag:)/i,/^(?:branch(?=\s|$))/i,/^(?:order:)/i,/^(?:merge(?=\s|$))/i,/^(?:cherry-pick(?=\s|$))/i,/^(?:checkout(?=\s|$))/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:[ \r\n\t]+end\b)/i,/^(?:[\s\S]+(?=[ \r\n\t]+end))/i,/^(?:["]["])/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[0-9]+(?=\s|$))/i,/^(?:\w([-\./\w]*[-\w])?)/i,/^(?:$)/i,/^(?:\s+)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},options:{rules:[34,35],inclusive:!1},string:{rules:[38,39],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,36,37,40,41,42,43],inclusive:!0}}};return C}();x.lexer=k;function T(){this.yy={}}return T.prototype=x,x.Parser=T,new T}();hg.parser=hg;const BX=t=>t.match(/^\s*gitGraph/)!==null;let fg="",l1="",dg="";const pg=t=>ai(t,nt()),ci=function(){fg="",dg="",l1=""},Yn=function(t){fg=pg(t).replace(/^\s+/g,"")},ui=function(){return fg||l1},hi=function(t){dg=pg(t).replace(/\n\s+/g,`
+`)},fi=function(){return dg},c1=function(t){l1=pg(t)},u1=function(){return l1};let h1=nt().gitGraph.mainBranchName,DX=nt().gitGraph.mainBranchOrder,kr={},cn=null,Dc={};Dc[h1]={name:h1,order:DX};let pr={};pr[h1]=cn;let Rr=h1,Vw="LR",Ys=0;function gg(){return lw({length:7})}const OX=function(t,e,r){Xe.parseDirective(this,t,e,r)};function FX(t,e){const r=Object.create(null);return t.reduce((n,i)=>{const a=e(i);return r[a]||(r[a]=!0,n.push(i)),n},[])}const PX=function(t){Vw=t};let zw={};const qX=function(t){H.debug("options str",t),t=t&&t.trim(),t=t||"{}";try{zw=JSON.parse(t)}catch(e){H.error("error while parsing gitGraph options",e.message)}},VX=function(){return zw},zX=function(t,e,r,n){H.debug("Entering commit:",t,e,r,n),e=pe.sanitizeText(e,nt()),t=pe.sanitizeText(t,nt()),n=pe.sanitizeText(n,nt());const i={id:e||Ys+"-"+gg(),message:t,seq:Ys++,type:r||Oc.NORMAL,tag:n||"",parents:cn==null?[]:[cn.id],branch:Rr};cn=i,kr[i.id]=i,pr[Rr]=i.id,H.debug("in pushCommit "+i.id)},YX=function(t,e){if(t=pe.sanitizeText(t,nt()),typeof pr[t]>"u")pr[t]=cn!=null?cn.id:null,Dc[t]={name:t,order:e?parseInt(e,10):null},Yw(t),H.debug("in createBranch");else{let r=new Error('Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout '+t+'")');throw r.hash={text:"branch "+t,token:"branch "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"checkout '+t+'"']},r}},UX=function(t,e,r,n){t=pe.sanitizeText(t,nt()),e=pe.sanitizeText(e,nt());const i=kr[pr[Rr]],a=kr[pr[t]];if(Rr===t){let o=new Error('Incorrect usage of "merge". Cannot merge a branch to itself');throw o.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},o}else if(typeof i>"u"||!i){let o=new Error('Incorrect usage of "merge". Current branch ('+Rr+")has no commits");throw o.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["commit"]},o}else if(typeof pr[t]>"u"){let o=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") does not exist");throw o.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch "+t]},o}else if(typeof a>"u"||!a){let o=new Error('Incorrect usage of "merge". Branch to be merged ('+t+") has no commits");throw o.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"commit"']},o}else if(i===a){let o=new Error('Incorrect usage of "merge". Both branches have same head');throw o.hash={text:"merge "+t,token:"merge "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["branch abc"]},o}else if(e&&typeof kr[e]<"u"){let o=new Error('Incorrect usage of "merge". Commit with id:'+e+" already exists, use different custom Id");throw o.hash={text:"merge "+t+e+r+n,token:"merge "+t+e+r+n,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["merge "+t+" "+e+"_UNIQUE "+r+" "+n]},o}const s={id:e||Ys+"-"+gg(),message:"merged branch "+t+" into "+Rr,seq:Ys++,parents:[cn==null?null:cn.id,pr[t]],branch:Rr,type:Oc.MERGE,customType:r,customId:!!e,tag:n||""};cn=s,kr[s.id]=s,pr[Rr]=s.id,H.debug(pr),H.debug("in mergeBranch")},WX=function(t,e,r){if(H.debug("Entering cherryPick:",t,e,r),t=pe.sanitizeText(t,nt()),e=pe.sanitizeText(e,nt()),r=pe.sanitizeText(r,nt()),!t||typeof kr[t]>"u"){let a=new Error('Incorrect usage of "cherryPick". Source commit id should exist and provided');throw a.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},a}let n=kr[t],i=n.branch;if(n.type===Oc.MERGE){let a=new Error('Incorrect usage of "cherryPick". Source commit should not be a merge commit');throw a.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},a}if(!e||typeof kr[e]>"u"){if(i===Rr){let o=new Error('Incorrect usage of "cherryPick". Source commit is already on current branch');throw o.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},o}const a=kr[pr[Rr]];if(typeof a>"u"||!a){let o=new Error('Incorrect usage of "cherry-pick". Current branch ('+Rr+")has no commits");throw o.hash={text:"cherryPick "+t+" "+e,token:"cherryPick "+t+" "+e,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["cherry-pick abc"]},o}const s={id:Ys+"-"+gg(),message:"cherry-picked "+n+" into "+Rr,seq:Ys++,parents:[cn==null?null:cn.id,n.id],branch:Rr,type:Oc.CHERRY_PICK,tag:r!=null?r:"cherry-pick:"+n.id};cn=s,kr[s.id]=s,pr[Rr]=s.id,H.debug(pr),H.debug("in cherryPick")}},Yw=function(t){if(t=pe.sanitizeText(t,nt()),typeof pr[t]>"u"){let e=new Error('Trying to checkout branch which is not yet created. (Help try using "branch '+t+'")');throw e.hash={text:"checkout "+t,token:"checkout "+t,line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:['"branch '+t+'"']},e}else{Rr=t;const e=pr[Rr];cn=kr[e]}};function Uw(t,e,r){const n=t.indexOf(e);n===-1?t.push(r):t.splice(n,1,r)}function Ww(t){const e=t.reduce((i,a)=>i.seq>a.seq?i:a,t[0]);let r="";t.forEach(function(i){i===e?r+="	*":r+="	|"});const n=[r,e.id,e.seq];for(let i in pr)pr[i]===e.id&&n.push(i);if(H.debug(n.join(" ")),e.parents&&e.parents.length==2){const i=kr[e.parents[0]];Uw(t,e,i),t.push(kr[e.parents[1]])}else{if(e.parents.length==0)return;{const i=kr[e.parents];Uw(t,e,i)}}t=FX(t,i=>i.id),Ww(t)}const HX=function(){H.debug(kr);const t=Hw()[0];Ww([t])},GX=function(){kr={},cn=null;let t=nt().gitGraph.mainBranchName,e=nt().gitGraph.mainBranchOrder;pr={},pr[t]=null,Dc={},Dc[t]={name:t,order:e},Rr=t,Ys=0,ci()},jX=function(){return Object.values(Dc).map((e,r)=>e.order!==null?e:{...e,order:parseFloat(`0.${r}`,10)}).sort((e,r)=>e.order-r.order).map(({name:e})=>({name:e}))},$X=function(){return pr},XX=function(){return kr},Hw=function(){const t=Object.keys(kr).map(function(e){return kr[e]});return t.forEach(function(e){H.debug(e.id)}),t.sort((e,r)=>e.seq-r.seq),t},KX=function(){return Rr},ZX=function(){return Vw},QX=function(){return cn},Oc={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},JX={parseDirective:OX,getConfig:()=>nt().gitGraph,setDirection:PX,setOptions:qX,getOptions:VX,commit:zX,branch:YX,merge:UX,cherryPick:WX,checkout:Yw,prettyPrint:HX,clear:GX,getBranchesAsObjArray:jX,getBranches:$X,getCommits:XX,getCommitsArray:Hw,getCurrentBranch:KX,getDirection:ZX,getHead:QX,setAccTitle:Yn,getAccTitle:ui,getAccDescription:fi,setAccDescription:hi,commitType:Oc};function bn(t,e,r){if(typeof e.insert>"u")return;let n=t.getAccTitle(),i=t.getAccDescription();e.attr("role","img").attr("aria-labelledby","chart-title-"+r+" chart-desc-"+r),e.insert("desc",":first-child").attr("id","chart-desc-"+r).text(i),e.insert("title",":first-child").attr("id","chart-title-"+r).text(n)}let Fc={};const Sn={NORMAL:0,REVERSE:1,HIGHLIGHT:2,MERGE:3,CHERRY_PICK:4},Us=8;let _n={},f1={},Pc=[],d1=0;const tK=()=>{_n={},f1={},Fc={},d1=0,Pc=[]},eK=t=>{const e=document.createElementNS("http://www.w3.org/2000/svg","text");let r=[];typeof t=="string"?r=t.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(t)?r=t:r=[];for(let n=0;n<r.length;n++){const i=document.createElementNS("http://www.w3.org/2000/svg","tspan");i.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),i.setAttribute("dy","1em"),i.setAttribute("x","0"),i.setAttribute("class","row"),i.textContent=r[n].trim(),e.appendChild(i)}return e},Gw=(t,e,r)=>{const n=Zo().gitGraph,i=t.append("g").attr("class","commit-bullets"),a=t.append("g").attr("class","commit-labels");let s=0;Object.keys(e).sort((u,h)=>e[u].seq-e[h].seq).forEach(u=>{const h=e[u],d=_n[h.branch].pos,f=s+10;if(r){let p,m=typeof h.customType<"u"&&h.customType!==""?h.customType:h.type;switch(m){case Sn.NORMAL:p="commit-normal";break;case Sn.REVERSE:p="commit-reverse";break;case Sn.HIGHLIGHT:p="commit-highlight";break;case Sn.MERGE:p="commit-merge";break;case Sn.CHERRY_PICK:p="commit-cherry-pick";break;default:p="commit-normal"}if(m===Sn.HIGHLIGHT){const _=i.append("rect");_.attr("x",f-10),_.attr("y",d-10),_.attr("height",20),_.attr("width",20),_.attr("class",`commit ${h.id} commit-highlight${_n[h.branch].index%Us} ${p}-outer`),i.append("rect").attr("x",f-6).attr("y",d-6).attr("height",12).attr("width",12).attr("class",`commit ${h.id} commit${_n[h.branch].index%Us} ${p}-inner`)}else if(m===Sn.CHERRY_PICK)i.append("circle").attr("cx",f).attr("cy",d).attr("r",10).attr("class",`commit ${h.id} ${p}`),i.append("circle").attr("cx",f-3).attr("cy",d+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${h.id} ${p}`),i.append("circle").attr("cx",f+3).attr("cy",d+2).attr("r",2.75).attr("fill","#fff").attr("class",`commit ${h.id} ${p}`),i.append("line").attr("x1",f+3).attr("y1",d+1).attr("x2",f).attr("y2",d-5).attr("stroke","#fff").attr("class",`commit ${h.id} ${p}`),i.append("line").attr("x1",f-3).attr("y1",d+1).attr("x2",f).attr("y2",d-5).attr("stroke","#fff").attr("class",`commit ${h.id} ${p}`);else{const _=i.append("circle");if(_.attr("cx",f),_.attr("cy",d),_.attr("r",h.type===Sn.MERGE?9:10),_.attr("class",`commit ${h.id} commit${_n[h.branch].index%Us}`),m===Sn.MERGE){const y=i.append("circle");y.attr("cx",f),y.attr("cy",d),y.attr("r",6),y.attr("class",`commit ${p} ${h.id} commit${_n[h.branch].index%Us}`)}m===Sn.REVERSE&&i.append("path").attr("d",`M ${f-5},${d-5}L${f+5},${d+5}M${f-5},${d+5}L${f+5},${d-5}`).attr("class",`commit ${p} ${h.id} commit${_n[h.branch].index%Us}`)}}if(f1[h.id]={x:s+10,y:d},r){if(h.type!==Sn.CHERRY_PICK&&(h.customId&&h.type===Sn.MERGE||h.type!==Sn.MERGE)&&n.showCommitLabel){const _=a.append("g"),y=_.insert("rect").attr("class","commit-label-bkg"),b=_.append("text").attr("x",s).attr("y",d+25).attr("class","commit-label").text(h.id);let x=b.node().getBBox();if(y.attr("x",s+10-x.width/2-2).attr("y",d+13.5).attr("width",x.width+2*2).attr("height",x.height+2*2),b.attr("x",s+10-x.width/2),n.rotateCommitLabel){let k=-7.5-(x.width+10)/25*9.5,T=10+x.width/25*8.5;_.attr("transform","translate("+k+", "+T+") rotate("+-45+", "+s+", "+d+")")}}if(h.tag){const _=a.insert("polygon"),y=a.append("circle"),b=a.append("text").attr("y",d-16).attr("class","tag-label").text(h.tag);let x=b.node().getBBox();b.attr("x",s+10-x.width/2);const k=x.height/2,T=d-19.2;_.attr("class","tag-label-bkg").attr("points",`
+          ${s-x.width/2-4/2},${T+2}
+          ${s-x.width/2-4/2},${T-2}
+          ${s+10-x.width/2-4},${T-k-2}
+          ${s+10+x.width/2+4},${T-k-2}
+          ${s+10+x.width/2+4},${T+k+2}
+          ${s+10-x.width/2-4},${T+k+2}`),y.attr("cx",s-x.width/2+4/2).attr("cy",T).attr("r",1.5).attr("class","tag-hole")}}s+=50,s>d1&&(d1=s)})},rK=(t,e,r)=>Object.keys(r).filter(a=>r[a].branch===e.branch&&r[a].seq>t.seq&&r[a].seq<e.seq).length>0,yg=(t,e,r)=>{const n=r||0,i=t+Math.abs(t-e)/2;if(n>5)return i;let a=!0;for(let o=0;o<Pc.length;o++)Math.abs(Pc[o]-i)<10&&(a=!1);if(a)return Pc.push(i),i;const s=Math.abs(t-e);return yg(t,e-s/5,n+1)},nK=(t,e,r,n)=>{const i=f1[e.id],a=f1[r.id],s=rK(e,r,n);let o="",l="",u=0,h=0,d=_n[r.branch].index,f;if(s){o="A 10 10, 0, 0, 0,",l="A 10 10, 0, 0, 1,",u=10,h=10,d=_n[r.branch].index;const p=i.y<a.y?yg(i.y,a.y):yg(a.y,i.y);i.y<a.y?f=`M ${i.x} ${i.y} L ${i.x} ${p-u} ${o} ${i.x+h} ${p} L ${a.x-u} ${p} ${l} ${a.x} ${p+h} L ${a.x} ${a.y}`:f=`M ${i.x} ${i.y} L ${i.x} ${p+u} ${l} ${i.x+h} ${p} L ${a.x-u} ${p} ${o} ${a.x} ${p-h} L ${a.x} ${a.y}`}else i.y<a.y&&(o="A 20 20, 0, 0, 0,",u=20,h=20,d=_n[r.branch].index,f=`M ${i.x} ${i.y} L ${i.x} ${a.y-u} ${o} ${i.x+h} ${a.y} L ${a.x} ${a.y}`),i.y>a.y&&(o="A 20 20, 0, 0, 0,",u=20,h=20,d=_n[e.branch].index,f=`M ${i.x} ${i.y} L ${a.x-u} ${i.y} ${o} ${a.x} ${i.y-h} L ${a.x} ${a.y}`),i.y===a.y&&(d=_n[e.branch].index,f=`M ${i.x} ${i.y} L ${i.x} ${a.y-u} ${o} ${i.x+h} ${a.y} L ${a.x} ${a.y}`);t.append("path").attr("d",f).attr("class","arrow arrow"+d%Us)},iK=(t,e)=>{const r=t.append("g").attr("class","commit-arrows");Object.keys(e).forEach(n=>{const i=e[n];i.parents&&i.parents.length>0&&i.parents.forEach(a=>{nK(r,e[a],i,e)})})},aK=(t,e)=>{const r=Zo().gitGraph,n=t.append("g");e.forEach((i,a)=>{const s=a%Us,o=_n[i.name].pos,l=n.append("line");l.attr("x1",0),l.attr("y1",o),l.attr("x2",d1),l.attr("y2",o),l.attr("class","branch branch"+s),Pc.push(o);let u=i.name;const h=eK(u),d=n.insert("rect"),p=n.insert("g").attr("class","branchLabel").insert("g").attr("class","label branch-label"+s);p.node().appendChild(h);let m=h.getBBox();d.attr("class","branchLabelBkg label"+s).attr("rx",4).attr("ry",4).attr("x",-m.width-4-(r.rotateCommitLabel===!0?30:0)).attr("y",-m.height/2+8).attr("width",m.width+18).attr("height",m.height+4),p.attr("transform","translate("+(-m.width-14-(r.rotateCommitLabel===!0?30:0))+", "+(o-m.height/2-1)+")"),d.attr("transform","translate("+-19+", "+(o-m.height/2)+")")})},sK={draw:function(t,e,r,n){tK();const i=Zo(),a=Zo().gitGraph;H.debug("in gitgraph renderer",t+`
+`,"id:",e,r),Fc=n.db.getCommits();const s=n.db.getBranchesAsObjArray();let o=0;s.forEach((u,h)=>{_n[u.name]={pos:o,index:h},o+=50+(a.rotateCommitLabel?40:0)});const l=St(`[id="${e}"]`);bn(n.db,l,e),Gw(l,Fc,!1),a.showBranches&&aK(l,s),iK(l,Fc),Gw(l,Fc,!0),Fw(void 0,l,a.diagramPadding,i.useMaxWidth)}},oK=t=>`
+  .commit-id,
+  .commit-msg,
+  .branch-label {
+    fill: lightgrey;
+    color: lightgrey;
+    font-family: 'trebuchet ms', verdana, arial, sans-serif;
+    font-family: var(--mermaid-font-family);
+  }
+  ${[0,1,2,3,4,5,6,7].map(e=>`
+        .branch-label${e} { fill: ${t["gitBranchLabel"+e]}; }
+        .commit${e} { stroke: ${t["git"+e]}; fill: ${t["git"+e]}; }
+        .commit-highlight${e} { stroke: ${t["gitInv"+e]}; fill: ${t["gitInv"+e]}; }
+        .label${e}  { fill: ${t["git"+e]}; }
+        .arrow${e} { stroke: ${t["git"+e]}; }
+        `).join(`
+`)}
+
+  .branch {
+    stroke-width: 1;
+    stroke: ${t.lineColor};
+    stroke-dasharray: 2;
+  }
+  .commit-label { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelColor};}
+  .commit-label-bkg { font-size: ${t.commitLabelFontSize}; fill: ${t.commitLabelBackground}; opacity: 0.5; }
+  .tag-label { font-size: ${t.tagLabelFontSize}; fill: ${t.tagLabelColor};}
+  .tag-label-bkg { fill: ${t.tagLabelBackground}; stroke: ${t.tagLabelBorder}; }
+  .tag-hole { fill: ${t.textColor}; }
+
+  .commit-merge {
+    stroke: ${t.primaryColor};
+    fill: ${t.primaryColor};
+  }
+  .commit-reverse {
+    stroke: ${t.primaryColor};
+    fill: ${t.primaryColor};
+    stroke-width: 3;
+  }
+  .commit-highlight-outer {
+  }
+  .commit-highlight-inner {
+    stroke: ${t.primaryColor};
+    fill: ${t.primaryColor};
+  }
+
+  .arrow { stroke-width: 8; stroke-linecap: round; fill: none}
+  }
+`;var qc=function(){var t=function(zt,wt,bt,Et){for(bt=bt||{},Et=zt.length;Et--;bt[zt[Et]]=wt);return bt},e=[1,6],r=[1,7],n=[1,8],i=[1,9],a=[1,16],s=[1,11],o=[1,12],l=[1,13],u=[1,14],h=[1,15],d=[1,27],f=[1,33],p=[1,34],m=[1,35],_=[1,36],y=[1,37],b=[1,72],x=[1,73],k=[1,74],T=[1,75],C=[1,76],M=[1,77],S=[1,78],R=[1,38],A=[1,39],L=[1,40],v=[1,41],B=[1,42],w=[1,43],D=[1,44],N=[1,45],z=[1,46],X=[1,47],ct=[1,48],J=[1,49],Y=[1,50],$=[1,51],lt=[1,52],ut=[1,53],W=[1,54],tt=[1,55],K=[1,56],it=[1,57],Z=[1,59],V=[1,60],Q=[1,61],q=[1,62],U=[1,63],F=[1,64],j=[1,65],P=[1,66],et=[1,67],at=[1,68],It=[1,69],Lt=[24,52],Rt=[24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],Ct=[15,24,44,46,47,48,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],pt=[1,94],mt=[1,95],vt=[1,96],Tt=[1,97],ft=[15,24,52],le=[7,8,9,10,18,22,25,26,27,28],Dt=[15,24,43,52],Gt=[15,24,43,52,86,87,89,90],$t=[15,43],Qt=[44,46,47,48,49,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],we={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,direction:5,directive:6,direction_tb:7,direction_bt:8,direction_rl:9,direction_lr:10,graphConfig:11,openDirective:12,typeDirective:13,closeDirective:14,NEWLINE:15,":":16,argDirective:17,open_directive:18,type_directive:19,arg_directive:20,close_directive:21,C4_CONTEXT:22,statements:23,EOF:24,C4_CONTAINER:25,C4_COMPONENT:26,C4_DYNAMIC:27,C4_DEPLOYMENT:28,otherStatements:29,diagramStatements:30,otherStatement:31,title:32,accDescription:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,boundaryStatement:39,boundaryStartStatement:40,boundaryStopStatement:41,boundaryStart:42,LBRACE:43,ENTERPRISE_BOUNDARY:44,attributes:45,SYSTEM_BOUNDARY:46,BOUNDARY:47,CONTAINER_BOUNDARY:48,NODE:49,NODE_L:50,NODE_R:51,RBRACE:52,diagramStatement:53,PERSON:54,PERSON_EXT:55,SYSTEM:56,SYSTEM_DB:57,SYSTEM_QUEUE:58,SYSTEM_EXT:59,SYSTEM_EXT_DB:60,SYSTEM_EXT_QUEUE:61,CONTAINER:62,CONTAINER_DB:63,CONTAINER_QUEUE:64,CONTAINER_EXT:65,CONTAINER_EXT_DB:66,CONTAINER_EXT_QUEUE:67,COMPONENT:68,COMPONENT_DB:69,COMPONENT_QUEUE:70,COMPONENT_EXT:71,COMPONENT_EXT_DB:72,COMPONENT_EXT_QUEUE:73,REL:74,BIREL:75,REL_U:76,REL_D:77,REL_L:78,REL_R:79,REL_B:80,REL_INDEX:81,UPDATE_EL_STYLE:82,UPDATE_REL_STYLE:83,UPDATE_LAYOUT_CONFIG:84,attribute:85,STR:86,STR_KEY:87,STR_VALUE:88,ATTRIBUTE:89,ATTRIBUTE_EMPTY:90,$accept:0,$end:1},terminals_:{2:"error",7:"direction_tb",8:"direction_bt",9:"direction_rl",10:"direction_lr",15:"NEWLINE",16:":",18:"open_directive",19:"type_directive",20:"arg_directive",21:"close_directive",22:"C4_CONTEXT",24:"EOF",25:"C4_CONTAINER",26:"C4_COMPONENT",27:"C4_DYNAMIC",28:"C4_DEPLOYMENT",32:"title",33:"accDescription",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",43:"LBRACE",44:"ENTERPRISE_BOUNDARY",46:"SYSTEM_BOUNDARY",47:"BOUNDARY",48:"CONTAINER_BOUNDARY",49:"NODE",50:"NODE_L",51:"NODE_R",52:"RBRACE",54:"PERSON",55:"PERSON_EXT",56:"SYSTEM",57:"SYSTEM_DB",58:"SYSTEM_QUEUE",59:"SYSTEM_EXT",60:"SYSTEM_EXT_DB",61:"SYSTEM_EXT_QUEUE",62:"CONTAINER",63:"CONTAINER_DB",64:"CONTAINER_QUEUE",65:"CONTAINER_EXT",66:"CONTAINER_EXT_DB",67:"CONTAINER_EXT_QUEUE",68:"COMPONENT",69:"COMPONENT_DB",70:"COMPONENT_QUEUE",71:"COMPONENT_EXT",72:"COMPONENT_EXT_DB",73:"COMPONENT_EXT_QUEUE",74:"REL",75:"BIREL",76:"REL_U",77:"REL_D",78:"REL_L",79:"REL_R",80:"REL_B",81:"REL_INDEX",82:"UPDATE_EL_STYLE",83:"UPDATE_REL_STYLE",84:"UPDATE_LAYOUT_CONFIG",86:"STR",87:"STR_KEY",88:"STR_VALUE",89:"ATTRIBUTE",90:"ATTRIBUTE_EMPTY"},productions_:[0,[3,1],[3,1],[3,2],[5,1],[5,1],[5,1],[5,1],[4,1],[6,4],[6,6],[12,1],[13,1],[17,1],[14,1],[11,4],[11,4],[11,4],[11,4],[11,4],[23,1],[23,1],[23,2],[29,1],[29,2],[29,3],[31,1],[31,1],[31,2],[31,2],[31,1],[39,3],[40,3],[40,3],[40,4],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[42,2],[41,1],[30,1],[30,2],[30,3],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,1],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[53,2],[45,1],[45,2],[85,1],[85,2],[85,1],[85,1]],performAction:function(wt,bt,Et,kt,Ut,gt,he){var yt=gt.length-1;switch(Ut){case 4:kt.setDirection("TB");break;case 5:kt.setDirection("BT");break;case 6:kt.setDirection("RL");break;case 7:kt.setDirection("LR");break;case 11:kt.parseDirective("%%{","open_directive");break;case 12:break;case 13:gt[yt]=gt[yt].trim().replace(/'/g,'"'),kt.parseDirective(gt[yt],"arg_directive");break;case 14:kt.parseDirective("}%%","close_directive","c4Context");break;case 15:case 16:case 17:case 18:case 19:kt.setC4Type(gt[yt-3]);break;case 26:kt.setTitle(gt[yt].substring(6)),this.$=gt[yt].substring(6);break;case 27:kt.setAccDescription(gt[yt].substring(15)),this.$=gt[yt].substring(15);break;case 28:this.$=gt[yt].trim(),kt.setTitle(this.$);break;case 29:case 30:this.$=gt[yt].trim(),kt.setAccDescription(this.$);break;case 35:case 36:gt[yt].splice(2,0,"ENTERPRISE"),kt.addPersonOrSystemBoundary(...gt[yt]),this.$=gt[yt];break;case 37:kt.addPersonOrSystemBoundary(...gt[yt]),this.$=gt[yt];break;case 38:gt[yt].splice(2,0,"CONTAINER"),kt.addContainerBoundary(...gt[yt]),this.$=gt[yt];break;case 39:kt.addDeploymentNode("node",...gt[yt]),this.$=gt[yt];break;case 40:kt.addDeploymentNode("nodeL",...gt[yt]),this.$=gt[yt];break;case 41:kt.addDeploymentNode("nodeR",...gt[yt]),this.$=gt[yt];break;case 42:kt.popBoundaryParseStack();break;case 46:kt.addPersonOrSystem("person",...gt[yt]),this.$=gt[yt];break;case 47:kt.addPersonOrSystem("external_person",...gt[yt]),this.$=gt[yt];break;case 48:kt.addPersonOrSystem("system",...gt[yt]),this.$=gt[yt];break;case 49:kt.addPersonOrSystem("system_db",...gt[yt]),this.$=gt[yt];break;case 50:kt.addPersonOrSystem("system_queue",...gt[yt]),this.$=gt[yt];break;case 51:kt.addPersonOrSystem("external_system",...gt[yt]),this.$=gt[yt];break;case 52:kt.addPersonOrSystem("external_system_db",...gt[yt]),this.$=gt[yt];break;case 53:kt.addPersonOrSystem("external_system_queue",...gt[yt]),this.$=gt[yt];break;case 54:kt.addContainer("container",...gt[yt]),this.$=gt[yt];break;case 55:kt.addContainer("container_db",...gt[yt]),this.$=gt[yt];break;case 56:kt.addContainer("container_queue",...gt[yt]),this.$=gt[yt];break;case 57:kt.addContainer("external_container",...gt[yt]),this.$=gt[yt];break;case 58:kt.addContainer("external_container_db",...gt[yt]),this.$=gt[yt];break;case 59:kt.addContainer("external_container_queue",...gt[yt]),this.$=gt[yt];break;case 60:kt.addComponent("component",...gt[yt]),this.$=gt[yt];break;case 61:kt.addComponent("component_db",...gt[yt]),this.$=gt[yt];break;case 62:kt.addComponent("component_queue",...gt[yt]),this.$=gt[yt];break;case 63:kt.addComponent("external_component",...gt[yt]),this.$=gt[yt];break;case 64:kt.addComponent("external_component_db",...gt[yt]),this.$=gt[yt];break;case 65:kt.addComponent("external_component_queue",...gt[yt]),this.$=gt[yt];break;case 67:kt.addRel("rel",...gt[yt]),this.$=gt[yt];break;case 68:kt.addRel("birel",...gt[yt]),this.$=gt[yt];break;case 69:kt.addRel("rel_u",...gt[yt]),this.$=gt[yt];break;case 70:kt.addRel("rel_d",...gt[yt]),this.$=gt[yt];break;case 71:kt.addRel("rel_l",...gt[yt]),this.$=gt[yt];break;case 72:kt.addRel("rel_r",...gt[yt]),this.$=gt[yt];break;case 73:kt.addRel("rel_b",...gt[yt]),this.$=gt[yt];break;case 74:gt[yt].splice(0,1),kt.addRel("rel",...gt[yt]),this.$=gt[yt];break;case 75:kt.updateElStyle("update_el_style",...gt[yt]),this.$=gt[yt];break;case 76:kt.updateRelStyle("update_rel_style",...gt[yt]),this.$=gt[yt];break;case 77:kt.updateLayoutConfig("update_layout_config",...gt[yt]),this.$=gt[yt];break;case 78:this.$=[gt[yt]];break;case 79:gt[yt].unshift(gt[yt-1]),this.$=gt[yt];break;case 80:case 82:this.$=gt[yt].trim();break;case 81:let ne={};ne[gt[yt-1].trim()]=gt[yt].trim(),this.$=ne;break;case 83:this.$="";break}},table:[{3:1,4:2,5:3,6:4,7:e,8:r,9:n,10:i,11:5,12:10,18:a,22:s,25:o,26:l,27:u,28:h},{1:[3]},{1:[2,1]},{1:[2,2]},{3:17,4:2,5:3,6:4,7:e,8:r,9:n,10:i,11:5,12:10,18:a,22:s,25:o,26:l,27:u,28:h},{1:[2,8]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{1:[2,7]},{13:18,19:[1,19]},{15:[1,20]},{15:[1,21]},{15:[1,22]},{15:[1,23]},{15:[1,24]},{19:[2,11]},{1:[2,3]},{14:25,16:[1,26],21:d},t([16,21],[2,12]),{23:28,29:29,30:30,31:31,32:f,33:p,34:m,36:_,38:y,39:58,40:70,42:71,44:b,46:x,47:k,48:T,49:C,50:M,51:S,53:32,54:R,55:A,56:L,57:v,58:B,59:w,60:D,61:N,62:z,63:X,64:ct,65:J,66:Y,67:$,68:lt,69:ut,70:W,71:tt,72:K,73:it,74:Z,75:V,76:Q,77:q,78:U,79:F,80:j,81:P,82:et,83:at,84:It},{23:79,29:29,30:30,31:31,32:f,33:p,34:m,36:_,38:y,39:58,40:70,42:71,44:b,46:x,47:k,48:T,49:C,50:M,51:S,53:32,54:R,55:A,56:L,57:v,58:B,59:w,60:D,61:N,62:z,63:X,64:ct,65:J,66:Y,67:$,68:lt,69:ut,70:W,71:tt,72:K,73:it,74:Z,75:V,76:Q,77:q,78:U,79:F,80:j,81:P,82:et,83:at,84:It},{23:80,29:29,30:30,31:31,32:f,33:p,34:m,36:_,38:y,39:58,40:70,42:71,44:b,46:x,47:k,48:T,49:C,50:M,51:S,53:32,54:R,55:A,56:L,57:v,58:B,59:w,60:D,61:N,62:z,63:X,64:ct,65:J,66:Y,67:$,68:lt,69:ut,70:W,71:tt,72:K,73:it,74:Z,75:V,76:Q,77:q,78:U,79:F,80:j,81:P,82:et,83:at,84:It},{23:81,29:29,30:30,31:31,32:f,33:p,34:m,36:_,38:y,39:58,40:70,42:71,44:b,46:x,47:k,48:T,49:C,50:M,51:S,53:32,54:R,55:A,56:L,57:v,58:B,59:w,60:D,61:N,62:z,63:X,64:ct,65:J,66:Y,67:$,68:lt,69:ut,70:W,71:tt,72:K,73:it,74:Z,75:V,76:Q,77:q,78:U,79:F,80:j,81:P,82:et,83:at,84:It},{23:82,29:29,30:30,31:31,32:f,33:p,34:m,36:_,38:y,39:58,40:70,42:71,44:b,46:x,47:k,48:T,49:C,50:M,51:S,53:32,54:R,55:A,56:L,57:v,58:B,59:w,60:D,61:N,62:z,63:X,64:ct,65:J,66:Y,67:$,68:lt,69:ut,70:W,71:tt,72:K,73:it,74:Z,75:V,76:Q,77:q,78:U,79:F,80:j,81:P,82:et,83:at,84:It},{15:[1,83]},{17:84,20:[1,85]},{15:[2,14]},{24:[1,86]},t(Lt,[2,20],{53:32,39:58,40:70,42:71,30:87,44:b,46:x,47:k,48:T,49:C,50:M,51:S,54:R,55:A,56:L,57:v,58:B,59:w,60:D,61:N,62:z,63:X,64:ct,65:J,66:Y,67:$,68:lt,69:ut,70:W,71:tt,72:K,73:it,74:Z,75:V,76:Q,77:q,78:U,79:F,80:j,81:P,82:et,83:at,84:It}),t(Lt,[2,21]),t(Rt,[2,23],{15:[1,88]}),t(Lt,[2,43],{15:[1,89]}),t(Ct,[2,26]),t(Ct,[2,27]),{35:[1,90]},{37:[1,91]},t(Ct,[2,30]),{45:92,85:93,86:pt,87:mt,89:vt,90:Tt},{45:98,85:93,86:pt,87:mt,89:vt,90:Tt},{45:99,85:93,86:pt,87:mt,89:vt,90:Tt},{45:100,85:93,86:pt,87:mt,89:vt,90:Tt},{45:101,85:93,86:pt,87:mt,89:vt,90:Tt},{45:102,85:93,86:pt,87:mt,89:vt,90:Tt},{45:103,85:93,86:pt,87:mt,89:vt,90:Tt},{45:104,85:93,86:pt,87:mt,89:vt,90:Tt},{45:105,85:93,86:pt,87:mt,89:vt,90:Tt},{45:106,85:93,86:pt,87:mt,89:vt,90:Tt},{45:107,85:93,86:pt,87:mt,89:vt,90:Tt},{45:108,85:93,86:pt,87:mt,89:vt,90:Tt},{45:109,85:93,86:pt,87:mt,89:vt,90:Tt},{45:110,85:93,86:pt,87:mt,89:vt,90:Tt},{45:111,85:93,86:pt,87:mt,89:vt,90:Tt},{45:112,85:93,86:pt,87:mt,89:vt,90:Tt},{45:113,85:93,86:pt,87:mt,89:vt,90:Tt},{45:114,85:93,86:pt,87:mt,89:vt,90:Tt},{45:115,85:93,86:pt,87:mt,89:vt,90:Tt},{45:116,85:93,86:pt,87:mt,89:vt,90:Tt},t(ft,[2,66]),{45:117,85:93,86:pt,87:mt,89:vt,90:Tt},{45:118,85:93,86:pt,87:mt,89:vt,90:Tt},{45:119,85:93,86:pt,87:mt,89:vt,90:Tt},{45:120,85:93,86:pt,87:mt,89:vt,90:Tt},{45:121,85:93,86:pt,87:mt,89:vt,90:Tt},{45:122,85:93,86:pt,87:mt,89:vt,90:Tt},{45:123,85:93,86:pt,87:mt,89:vt,90:Tt},{45:124,85:93,86:pt,87:mt,89:vt,90:Tt},{45:125,85:93,86:pt,87:mt,89:vt,90:Tt},{45:126,85:93,86:pt,87:mt,89:vt,90:Tt},{45:127,85:93,86:pt,87:mt,89:vt,90:Tt},{30:128,39:58,40:70,42:71,44:b,46:x,47:k,48:T,49:C,50:M,51:S,53:32,54:R,55:A,56:L,57:v,58:B,59:w,60:D,61:N,62:z,63:X,64:ct,65:J,66:Y,67:$,68:lt,69:ut,70:W,71:tt,72:K,73:it,74:Z,75:V,76:Q,77:q,78:U,79:F,80:j,81:P,82:et,83:at,84:It},{15:[1,130],43:[1,129]},{45:131,85:93,86:pt,87:mt,89:vt,90:Tt},{45:132,85:93,86:pt,87:mt,89:vt,90:Tt},{45:133,85:93,86:pt,87:mt,89:vt,90:Tt},{45:134,85:93,86:pt,87:mt,89:vt,90:Tt},{45:135,85:93,86:pt,87:mt,89:vt,90:Tt},{45:136,85:93,86:pt,87:mt,89:vt,90:Tt},{45:137,85:93,86:pt,87:mt,89:vt,90:Tt},{24:[1,138]},{24:[1,139]},{24:[1,140]},{24:[1,141]},t(le,[2,9]),{14:142,21:d},{21:[2,13]},{1:[2,15]},t(Lt,[2,22]),t(Rt,[2,24],{31:31,29:143,32:f,33:p,34:m,36:_,38:y}),t(Lt,[2,44],{29:29,30:30,31:31,53:32,39:58,40:70,42:71,23:144,32:f,33:p,34:m,36:_,38:y,44:b,46:x,47:k,48:T,49:C,50:M,51:S,54:R,55:A,56:L,57:v,58:B,59:w,60:D,61:N,62:z,63:X,64:ct,65:J,66:Y,67:$,68:lt,69:ut,70:W,71:tt,72:K,73:it,74:Z,75:V,76:Q,77:q,78:U,79:F,80:j,81:P,82:et,83:at,84:It}),t(Ct,[2,28]),t(Ct,[2,29]),t(ft,[2,46]),t(Dt,[2,78],{85:93,45:145,86:pt,87:mt,89:vt,90:Tt}),t(Gt,[2,80]),{88:[1,146]},t(Gt,[2,82]),t(Gt,[2,83]),t(ft,[2,47]),t(ft,[2,48]),t(ft,[2,49]),t(ft,[2,50]),t(ft,[2,51]),t(ft,[2,52]),t(ft,[2,53]),t(ft,[2,54]),t(ft,[2,55]),t(ft,[2,56]),t(ft,[2,57]),t(ft,[2,58]),t(ft,[2,59]),t(ft,[2,60]),t(ft,[2,61]),t(ft,[2,62]),t(ft,[2,63]),t(ft,[2,64]),t(ft,[2,65]),t(ft,[2,67]),t(ft,[2,68]),t(ft,[2,69]),t(ft,[2,70]),t(ft,[2,71]),t(ft,[2,72]),t(ft,[2,73]),t(ft,[2,74]),t(ft,[2,75]),t(ft,[2,76]),t(ft,[2,77]),{41:147,52:[1,148]},{15:[1,149]},{43:[1,150]},t($t,[2,35]),t($t,[2,36]),t($t,[2,37]),t($t,[2,38]),t($t,[2,39]),t($t,[2,40]),t($t,[2,41]),{1:[2,16]},{1:[2,17]},{1:[2,18]},{1:[2,19]},{15:[1,151]},t(Rt,[2,25]),t(Lt,[2,45]),t(Dt,[2,79]),t(Gt,[2,81]),t(ft,[2,31]),t(ft,[2,42]),t(Qt,[2,32]),t(Qt,[2,33],{15:[1,152]}),t(le,[2,10]),t(Qt,[2,34])],defaultActions:{2:[2,1],3:[2,2],5:[2,8],6:[2,4],7:[2,5],8:[2,6],9:[2,7],16:[2,11],17:[2,3],27:[2,14],85:[2,13],86:[2,15],138:[2,16],139:[2,17],140:[2,18],141:[2,19]},parseError:function(wt,bt){if(bt.recoverable)this.trace(wt);else{var Et=new Error(wt);throw Et.hash=bt,Et}},parse:function(wt){var bt=this,Et=[0],kt=[],Ut=[null],gt=[],he=this.table,yt="",ne=0,ve=0,ye=2,be=1,Te=gt.slice.call(arguments,1),Wt=Object.create(this.lexer),se={yy:{}};for(var me in this.yy)Object.prototype.hasOwnProperty.call(this.yy,me)&&(se.yy[me]=this.yy[me]);Wt.setInput(wt,se.yy),se.yy.lexer=Wt,se.yy.parser=this,typeof Wt.yylloc>"u"&&(Wt.yylloc={});var ue=Wt.yylloc;gt.push(ue);var _a=Wt.options&&Wt.options.ranges;typeof se.yy.parseError=="function"?this.parseError=se.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Hr(){var Jt;return Jt=kt.pop()||Wt.lex()||be,typeof Jt!="number"&&(Jt instanceof Array&&(kt=Jt,Jt=kt.pop()),Jt=bt.symbols_[Jt]||Jt),Jt}for(var Ie,oe,Ke,wr,Ge={},Ze,qt,st,At;;){if(oe=Et[Et.length-1],this.defaultActions[oe]?Ke=this.defaultActions[oe]:((Ie===null||typeof Ie>"u")&&(Ie=Hr()),Ke=he[oe]&&he[oe][Ie]),typeof Ke>"u"||!Ke.length||!Ke[0]){var Nt="";At=[];for(Ze in he[oe])this.terminals_[Ze]&&Ze>ye&&At.push("'"+this.terminals_[Ze]+"'");Wt.showPosition?Nt="Parse error on line "+(ne+1)+`:
+`+Wt.showPosition()+`
+Expecting `+At.join(", ")+", got '"+(this.terminals_[Ie]||Ie)+"'":Nt="Parse error on line "+(ne+1)+": Unexpected "+(Ie==be?"end of input":"'"+(this.terminals_[Ie]||Ie)+"'"),this.parseError(Nt,{text:Wt.match,token:this.terminals_[Ie]||Ie,line:Wt.yylineno,loc:ue,expected:At})}if(Ke[0]instanceof Array&&Ke.length>1)throw new Error("Parse Error: multiple actions possible at state: "+oe+", token: "+Ie);switch(Ke[0]){case 1:Et.push(Ie),Ut.push(Wt.yytext),gt.push(Wt.yylloc),Et.push(Ke[1]),Ie=null,ve=Wt.yyleng,yt=Wt.yytext,ne=Wt.yylineno,ue=Wt.yylloc;break;case 2:if(qt=this.productions_[Ke[1]][1],Ge.$=Ut[Ut.length-qt],Ge._$={first_line:gt[gt.length-(qt||1)].first_line,last_line:gt[gt.length-1].last_line,first_column:gt[gt.length-(qt||1)].first_column,last_column:gt[gt.length-1].last_column},_a&&(Ge._$.range=[gt[gt.length-(qt||1)].range[0],gt[gt.length-1].range[1]]),wr=this.performAction.apply(Ge,[yt,ve,ne,se.yy,Ke[1],Ut,gt].concat(Te)),typeof wr<"u")return wr;qt&&(Et=Et.slice(0,-1*qt*2),Ut=Ut.slice(0,-1*qt),gt=gt.slice(0,-1*qt)),Et.push(this.productions_[Ke[1]][0]),Ut.push(Ge.$),gt.push(Ge._$),st=he[Et[Et.length-2]][Et[Et.length-1]],Et.push(st);break;case 3:return!0}}return!0}},jt=function(){var zt={EOF:1,parseError:function(bt,Et){if(this.yy.parser)this.yy.parser.parseError(bt,Et);else throw new Error(bt)},setInput:function(wt,bt){return this.yy=bt||this.yy||{},this._input=wt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var wt=this._input[0];this.yytext+=wt,this.yyleng++,this.offset++,this.match+=wt,this.matched+=wt;var bt=wt.match(/(?:\r\n?|\n).*/g);return bt?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),wt},unput:function(wt){var bt=wt.length,Et=wt.split(/(?:\r\n?|\n)/g);this._input=wt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-bt),this.offset-=bt;var kt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Et.length-1&&(this.yylineno-=Et.length-1);var Ut=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Et?(Et.length===kt.length?this.yylloc.first_column:0)+kt[kt.length-Et.length].length-Et[0].length:this.yylloc.first_column-bt},this.options.ranges&&(this.yylloc.range=[Ut[0],Ut[0]+this.yyleng-bt]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(wt){this.unput(this.match.slice(wt))},pastInput:function(){var wt=this.matched.substr(0,this.matched.length-this.match.length);return(wt.length>20?"...":"")+wt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var wt=this.match;return wt.length<20&&(wt+=this._input.substr(0,20-wt.length)),(wt.substr(0,20)+(wt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var wt=this.pastInput(),bt=new Array(wt.length+1).join("-");return wt+this.upcomingInput()+`
+`+bt+"^"},test_match:function(wt,bt){var Et,kt,Ut;if(this.options.backtrack_lexer&&(Ut={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(Ut.yylloc.range=this.yylloc.range.slice(0))),kt=wt[0].match(/(?:\r\n?|\n).*/g),kt&&(this.yylineno+=kt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:kt?kt[kt.length-1].length-kt[kt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+wt[0].length},this.yytext+=wt[0],this.match+=wt[0],this.matches=wt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(wt[0].length),this.matched+=wt[0],Et=this.performAction.call(this,this.yy,this,bt,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Et)return Et;if(this._backtrack){for(var gt in Ut)this[gt]=Ut[gt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var wt,bt,Et,kt;this._more||(this.yytext="",this.match="");for(var Ut=this._currentRules(),gt=0;gt<Ut.length;gt++)if(Et=this._input.match(this.rules[Ut[gt]]),Et&&(!bt||Et[0].length>bt[0].length)){if(bt=Et,kt=gt,this.options.backtrack_lexer){if(wt=this.test_match(Et,Ut[gt]),wt!==!1)return wt;if(this._backtrack){bt=!1;continue}else return!1}else if(!this.options.flex)break}return bt?(wt=this.test_match(bt,Ut[kt]),wt!==!1?wt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var bt=this.next();return bt||this.lex()},begin:function(bt){this.conditionStack.push(bt)},popState:function(){var bt=this.conditionStack.length-1;return bt>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(bt){return bt=this.conditionStack.length-1-Math.abs(bt||0),bt>=0?this.conditionStack[bt]:"INITIAL"},pushState:function(bt){this.begin(bt)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(bt,Et,kt,Ut){switch(kt){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:return 32;case 10:return 33;case 11:return this.begin("acc_title"),34;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),36;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:break;case 19:c;break;case 20:return 15;case 21:break;case 22:return 22;case 23:return 25;case 24:return 26;case 25:return 27;case 26:return 28;case 27:return this.begin("person_ext"),55;case 28:return this.begin("person"),54;case 29:return this.begin("system_ext_queue"),61;case 30:return this.begin("system_ext_db"),60;case 31:return this.begin("system_ext"),59;case 32:return this.begin("system_queue"),58;case 33:return this.begin("system_db"),57;case 34:return this.begin("system"),56;case 35:return this.begin("boundary"),47;case 36:return this.begin("enterprise_boundary"),44;case 37:return this.begin("system_boundary"),46;case 38:return this.begin("container_ext_queue"),67;case 39:return this.begin("container_ext_db"),66;case 40:return this.begin("container_ext"),65;case 41:return this.begin("container_queue"),64;case 42:return this.begin("container_db"),63;case 43:return this.begin("container"),62;case 44:return this.begin("container_boundary"),48;case 45:return this.begin("component_ext_queue"),73;case 46:return this.begin("component_ext_db"),72;case 47:return this.begin("component_ext"),71;case 48:return this.begin("component_queue"),70;case 49:return this.begin("component_db"),69;case 50:return this.begin("component"),68;case 51:return this.begin("node"),49;case 52:return this.begin("node"),49;case 53:return this.begin("node_l"),50;case 54:return this.begin("node_r"),51;case 55:return this.begin("rel"),74;case 56:return this.begin("birel"),75;case 57:return this.begin("rel_u"),76;case 58:return this.begin("rel_u"),76;case 59:return this.begin("rel_d"),77;case 60:return this.begin("rel_d"),77;case 61:return this.begin("rel_l"),78;case 62:return this.begin("rel_l"),78;case 63:return this.begin("rel_r"),79;case 64:return this.begin("rel_r"),79;case 65:return this.begin("rel_b"),80;case 66:return this.begin("rel_index"),81;case 67:return this.begin("update_el_style"),82;case 68:return this.begin("update_rel_style"),83;case 69:return this.begin("update_layout_config"),84;case 70:return"EOF_IN_STRUCT";case 71:return this.begin("attribute"),"ATTRIBUTE_EMPTY";case 72:this.begin("attribute");break;case 73:this.popState(),this.popState();break;case 74:return 90;case 75:break;case 76:return 90;case 77:this.begin("string");break;case 78:this.popState();break;case 79:return"STR";case 80:this.begin("string_kv");break;case 81:return this.begin("string_kv_key"),"STR_KEY";case 82:this.popState(),this.begin("string_kv_value");break;case 83:return"STR_VALUE";case 84:this.popState(),this.popState();break;case 85:return"STR";case 86:return"LBRACE";case 87:return"RBRACE";case 88:return"SPACE";case 89:return"EOL";case 90:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:title\s[^#\n;]+)/,/^(?:accDescription\s[^#\n;]+)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:C4Context\b)/,/^(?:C4Container\b)/,/^(?:C4Component\b)/,/^(?:C4Dynamic\b)/,/^(?:C4Deployment\b)/,/^(?:Person_Ext\b)/,/^(?:Person\b)/,/^(?:SystemQueue_Ext\b)/,/^(?:SystemDb_Ext\b)/,/^(?:System_Ext\b)/,/^(?:SystemQueue\b)/,/^(?:SystemDb\b)/,/^(?:System\b)/,/^(?:Boundary\b)/,/^(?:Enterprise_Boundary\b)/,/^(?:System_Boundary\b)/,/^(?:ContainerQueue_Ext\b)/,/^(?:ContainerDb_Ext\b)/,/^(?:Container_Ext\b)/,/^(?:ContainerQueue\b)/,/^(?:ContainerDb\b)/,/^(?:Container\b)/,/^(?:Container_Boundary\b)/,/^(?:ComponentQueue_Ext\b)/,/^(?:ComponentDb_Ext\b)/,/^(?:Component_Ext\b)/,/^(?:ComponentQueue\b)/,/^(?:ComponentDb\b)/,/^(?:Component\b)/,/^(?:Deployment_Node\b)/,/^(?:Node\b)/,/^(?:Node_L\b)/,/^(?:Node_R\b)/,/^(?:Rel\b)/,/^(?:BiRel\b)/,/^(?:Rel_Up\b)/,/^(?:Rel_U\b)/,/^(?:Rel_Down\b)/,/^(?:Rel_D\b)/,/^(?:Rel_Left\b)/,/^(?:Rel_L\b)/,/^(?:Rel_Right\b)/,/^(?:Rel_R\b)/,/^(?:Rel_Back\b)/,/^(?:RelIndex\b)/,/^(?:UpdateElementStyle\b)/,/^(?:UpdateRelStyle\b)/,/^(?:UpdateLayoutConfig\b)/,/^(?:$)/,/^(?:[(][ ]*[,])/,/^(?:[(])/,/^(?:[)])/,/^(?:,,)/,/^(?:,)/,/^(?:[ ]*["]["])/,/^(?:[ ]*["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[ ]*[\$])/,/^(?:[^=]*)/,/^(?:[=][ ]*["])/,/^(?:[^"]+)/,/^(?:["])/,/^(?:[^,]+)/,/^(?:\{)/,/^(?:\})/,/^(?:[\s]+)/,/^(?:[\n\r]+)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},string_kv_value:{rules:[83,84],inclusive:!1},string_kv_key:{rules:[82],inclusive:!1},string_kv:{rules:[81],inclusive:!1},string:{rules:[78,79],inclusive:!1},attribute:{rules:[73,74,75,76,77,80,85],inclusive:!1},update_layout_config:{rules:[70,71,72,73],inclusive:!1},update_rel_style:{rules:[70,71,72,73],inclusive:!1},update_el_style:{rules:[70,71,72,73],inclusive:!1},rel_b:{rules:[70,71,72,73],inclusive:!1},rel_r:{rules:[70,71,72,73],inclusive:!1},rel_l:{rules:[70,71,72,73],inclusive:!1},rel_d:{rules:[70,71,72,73],inclusive:!1},rel_u:{rules:[70,71,72,73],inclusive:!1},rel_bi:{rules:[],inclusive:!1},rel:{rules:[70,71,72,73],inclusive:!1},node_r:{rules:[70,71,72,73],inclusive:!1},node_l:{rules:[70,71,72,73],inclusive:!1},node:{rules:[70,71,72,73],inclusive:!1},index:{rules:[],inclusive:!1},rel_index:{rules:[70,71,72,73],inclusive:!1},component_ext_queue:{rules:[],inclusive:!1},component_ext_db:{rules:[70,71,72,73],inclusive:!1},component_ext:{rules:[70,71,72,73],inclusive:!1},component_queue:{rules:[70,71,72,73],inclusive:!1},component_db:{rules:[70,71,72,73],inclusive:!1},component:{rules:[70,71,72,73],inclusive:!1},container_boundary:{rules:[70,71,72,73],inclusive:!1},container_ext_queue:{rules:[],inclusive:!1},container_ext_db:{rules:[70,71,72,73],inclusive:!1},container_ext:{rules:[70,71,72,73],inclusive:!1},container_queue:{rules:[70,71,72,73],inclusive:!1},container_db:{rules:[70,71,72,73],inclusive:!1},container:{rules:[70,71,72,73],inclusive:!1},birel:{rules:[70,71,72,73],inclusive:!1},system_boundary:{rules:[70,71,72,73],inclusive:!1},enterprise_boundary:{rules:[70,71,72,73],inclusive:!1},boundary:{rules:[70,71,72,73],inclusive:!1},system_ext_queue:{rules:[70,71,72,73],inclusive:!1},system_ext_db:{rules:[70,71,72,73],inclusive:!1},system_ext:{rules:[70,71,72,73],inclusive:!1},system_queue:{rules:[70,71,72,73],inclusive:!1},system_db:{rules:[70,71,72,73],inclusive:!1},system:{rules:[70,71,72,73],inclusive:!1},person_ext:{rules:[70,71,72,73],inclusive:!1},person:{rules:[70,71,72,73],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,86,87,88,89,90],inclusive:!0}}};return zt}();we.lexer=jt;function Ft(){this.yy={}}return Ft.prototype=we,we.Parser=Ft,new Ft}();qc.parser=qc;const lK=t=>t.match(/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/)!==null;let di=[],Qa=[""],un="global",pi="",Di=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],Vc=[],mg="",bg=!1,p1=4,g1=2;var jw;const cK=function(){return jw},uK=function(t){jw=ai(t,nt())},hK=function(t,e,r){Xe.parseDirective(this,t,e,r)},fK=function(t,e,r,n,i,a,s,o,l){if(t==null||e===void 0||e===null||r===void 0||r===null||n===void 0||n===null)return;let u={};const h=Vc.find(d=>d.from===e&&d.to===r);if(h?u=h:Vc.push(u),u.type=t,u.from=e,u.to=r,u.label={text:n},i==null)u.techn={text:""};else if(typeof i=="object"){let[d,f]=Object.entries(i)[0];u[d]={text:f}}else u.techn={text:i};if(a==null)u.descr={text:""};else if(typeof a=="object"){let[d,f]=Object.entries(a)[0];u[d]={text:f}}else u.descr={text:a};if(typeof s=="object"){let[d,f]=Object.entries(s)[0];u[d]=f}else u.sprite=s;if(typeof o=="object"){let[d,f]=Object.entries(o)[0];u[d]=f}else u.tags=o;if(typeof l=="object"){let[d,f]=Object.entries(l)[0];u[d]=f}else u.link=l;u.wrap=Ja()},dK=function(t,e,r,n,i,a,s){if(e===null||r===null)return;let o={};const l=di.find(u=>u.alias===e);if(l&&e===l.alias?o=l:(o.alias=e,di.push(o)),r==null?o.label={text:""}:o.label={text:r},n==null)o.descr={text:""};else if(typeof n=="object"){let[u,h]=Object.entries(n)[0];o[u]={text:h}}else o.descr={text:n};if(typeof i=="object"){let[u,h]=Object.entries(i)[0];o[u]=h}else o.sprite=i;if(typeof a=="object"){let[u,h]=Object.entries(a)[0];o[u]=h}else o.tags=a;if(typeof s=="object"){let[u,h]=Object.entries(s)[0];o[u]=h}else o.link=s;o.typeC4Shape={text:t},o.parentBoundary=un,o.wrap=Ja()},pK=function(t,e,r,n,i,a,s,o){if(e===null||r===null)return;let l={};const u=di.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,di.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.techn={text:""};else if(typeof n=="object"){let[h,d]=Object.entries(n)[0];l[h]={text:d}}else l.techn={text:n};if(i==null)l.descr={text:""};else if(typeof i=="object"){let[h,d]=Object.entries(i)[0];l[h]={text:d}}else l.descr={text:i};if(typeof a=="object"){let[h,d]=Object.entries(a)[0];l[h]=d}else l.sprite=a;if(typeof s=="object"){let[h,d]=Object.entries(s)[0];l[h]=d}else l.tags=s;if(typeof o=="object"){let[h,d]=Object.entries(o)[0];l[h]=d}else l.link=o;l.wrap=Ja(),l.typeC4Shape={text:t},l.parentBoundary=un},gK=function(t,e,r,n,i,a,s,o){if(e===null||r===null)return;let l={};const u=di.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,di.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.techn={text:""};else if(typeof n=="object"){let[h,d]=Object.entries(n)[0];l[h]={text:d}}else l.techn={text:n};if(i==null)l.descr={text:""};else if(typeof i=="object"){let[h,d]=Object.entries(i)[0];l[h]={text:d}}else l.descr={text:i};if(typeof a=="object"){let[h,d]=Object.entries(a)[0];l[h]=d}else l.sprite=a;if(typeof s=="object"){let[h,d]=Object.entries(s)[0];l[h]=d}else l.tags=s;if(typeof o=="object"){let[h,d]=Object.entries(o)[0];l[h]=d}else l.link=o;l.wrap=Ja(),l.typeC4Shape={text:t},l.parentBoundary=un},yK=function(t,e,r,n,i){if(t===null||e===null)return;let a={};const s=Di.find(o=>o.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,Di.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"system"};else if(typeof r=="object"){let[o,l]=Object.entries(r)[0];a[o]={text:l}}else a.type={text:r};if(typeof n=="object"){let[o,l]=Object.entries(n)[0];a[o]=l}else a.tags=n;if(typeof i=="object"){let[o,l]=Object.entries(i)[0];a[o]=l}else a.link=i;a.parentBoundary=un,a.wrap=Ja(),pi=un,un=t,Qa.push(pi)},mK=function(t,e,r,n,i){if(t===null||e===null)return;let a={};const s=Di.find(o=>o.alias===t);if(s&&t===s.alias?a=s:(a.alias=t,Di.push(a)),e==null?a.label={text:""}:a.label={text:e},r==null)a.type={text:"container"};else if(typeof r=="object"){let[o,l]=Object.entries(r)[0];a[o]={text:l}}else a.type={text:r};if(typeof n=="object"){let[o,l]=Object.entries(n)[0];a[o]=l}else a.tags=n;if(typeof i=="object"){let[o,l]=Object.entries(i)[0];a[o]=l}else a.link=i;a.parentBoundary=un,a.wrap=Ja(),pi=un,un=t,Qa.push(pi)},bK=function(t,e,r,n,i,a,s,o){if(e===null||r===null)return;let l={};const u=Di.find(h=>h.alias===e);if(u&&e===u.alias?l=u:(l.alias=e,Di.push(l)),r==null?l.label={text:""}:l.label={text:r},n==null)l.type={text:"node"};else if(typeof n=="object"){let[h,d]=Object.entries(n)[0];l[h]={text:d}}else l.type={text:n};if(i==null)l.descr={text:""};else if(typeof i=="object"){let[h,d]=Object.entries(i)[0];l[h]={text:d}}else l.descr={text:i};if(typeof s=="object"){let[h,d]=Object.entries(s)[0];l[h]=d}else l.tags=s;if(typeof o=="object"){let[h,d]=Object.entries(o)[0];l[h]=d}else l.link=o;l.nodeType=t,l.parentBoundary=un,l.wrap=Ja(),pi=un,un=e,Qa.push(pi)},_K=function(){un=pi,Qa.pop(),pi=Qa.pop(),Qa.push(pi)},vK=function(t,e,r,n,i,a,s,o,l,u,h){let d=di.find(f=>f.alias===e);if(!(d===void 0&&(d=Di.find(f=>f.alias===e),d===void 0))){if(r!=null)if(typeof r=="object"){let[f,p]=Object.entries(r)[0];d[f]=p}else d.bgColor=r;if(n!=null)if(typeof n=="object"){let[f,p]=Object.entries(n)[0];d[f]=p}else d.fontColor=n;if(i!=null)if(typeof i=="object"){let[f,p]=Object.entries(i)[0];d[f]=p}else d.borderColor=i;if(a!=null)if(typeof a=="object"){let[f,p]=Object.entries(a)[0];d[f]=p}else d.shadowing=a;if(s!=null)if(typeof s=="object"){let[f,p]=Object.entries(s)[0];d[f]=p}else d.shape=s;if(o!=null)if(typeof o=="object"){let[f,p]=Object.entries(o)[0];d[f]=p}else d.sprite=o;if(l!=null)if(typeof l=="object"){let[f,p]=Object.entries(l)[0];d[f]=p}else d.techn=l;if(u!=null)if(typeof u=="object"){let[f,p]=Object.entries(u)[0];d[f]=p}else d.legendText=u;if(h!=null)if(typeof h=="object"){let[f,p]=Object.entries(h)[0];d[f]=p}else d.legendSprite=h}},xK=function(t,e,r,n,i,a,s){const o=Vc.find(l=>l.from===e&&l.to===r);if(o!==void 0){if(n!=null)if(typeof n=="object"){let[l,u]=Object.entries(n)[0];o[l]=u}else o.textColor=n;if(i!=null)if(typeof i=="object"){let[l,u]=Object.entries(i)[0];o[l]=u}else o.lineColor=i;if(a!=null)if(typeof a=="object"){let[l,u]=Object.entries(a)[0];o[l]=parseInt(u)}else o.offsetX=parseInt(a);if(s!=null)if(typeof s=="object"){let[l,u]=Object.entries(s)[0];o[l]=parseInt(u)}else o.offsetY=parseInt(s)}},kK=function(t,e,r){let n=p1,i=g1;if(typeof e=="object"){const a=Object.values(e)[0];n=parseInt(a)}else n=parseInt(e);if(typeof r=="object"){const a=Object.values(r)[0];i=parseInt(a)}else i=parseInt(r);n>=1&&(p1=n),i>=1&&(g1=i)},wK=function(){return p1},TK=function(){return g1},EK=function(){return un},CK=function(){return pi},$w=function(t){return t==null?di:di.filter(e=>e.parentBoundary===t)},SK=function(t){return di.find(e=>e.alias===t)},AK=function(t){return Object.keys($w(t))},MK=function(t){return t==null?Di:Di.filter(e=>e.parentBoundary===t)},LK=function(){return Vc},RK=function(){return mg},IK=function(t){bg=t},Ja=function(){return bg},Xw={addPersonOrSystem:dK,addPersonOrSystemBoundary:yK,addContainer:pK,addContainerBoundary:mK,addComponent:gK,addDeploymentNode:bK,popBoundaryParseStack:_K,addRel:fK,updateElStyle:vK,updateRelStyle:xK,updateLayoutConfig:kK,autoWrap:Ja,setWrap:IK,getC4ShapeArray:$w,getC4Shape:SK,getC4ShapeKeys:AK,getBoundarys:MK,getCurrentBoundaryParse:EK,getParentBoundaryParse:CK,getRels:LK,getTitle:RK,getC4Type:cK,getC4ShapeInRow:wK,getC4BoundaryInRow:TK,setAccTitle:Yn,getAccTitle:ui,getAccDescription:fi,setAccDescription:hi,parseDirective:hK,getConfig:()=>nt().c4,clear:function(){di=[],Di=[{alias:"global",label:{text:"global"},type:{text:"global"},tags:null,link:null,parentBoundary:""}],pi="",un="global",Qa=[""],Vc=[],Qa=[""],mg="",bg=!1,p1=4,g1=2},LINETYPE:{SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},setTitle:function(t){mg=ai(t,nt())},setC4Type:uK},_g=function(t,e){const r=t.append("rect");if(r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),e.attrs!=="undefined"&&e.attrs!==null)for(let n in e.attrs)r.attr(n,e.attrs[n]);return e.class!=="undefined"&&r.attr("class",e.class),r},Kw=function(t,e,r,n,i,a){const s=t.append("image");s.attr("width",e),s.attr("height",r),s.attr("x",n),s.attr("y",i);let o=a.startsWith("data:image/png;base64")?a:ki(a);s.attr("xlink:href",o)},NK=function(t,e,r,n){const i=t.append("use");i.attr("x",e),i.attr("y",r);var a=ki(n);i.attr("xlink:href","#"+a)},Zw=function(t,e){let r=0,n=0;const i=e.text.split(pe.lineBreakRegex);let a=[],s=0,o=()=>e.y;if(typeof e.valign<"u"&&typeof e.textMargin<"u"&&e.textMargin>0)switch(e.valign){case"top":case"start":o=()=>Math.round(e.y+e.textMargin);break;case"middle":case"center":o=()=>Math.round(e.y+(r+n+e.textMargin)/2);break;case"bottom":case"end":o=()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin);break}if(typeof e.anchor<"u"&&typeof e.textMargin<"u"&&typeof e.width<"u")switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="text-after-edge",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="text-before-edge",e.alignmentBaseline="middle";break}for(let l=0;l<i.length;l++){let u=i[l];typeof e.textMargin<"u"&&e.textMargin===0&&typeof e.fontSize<"u"&&(s=l*e.fontSize);const h=t.append("text");if(h.attr("x",e.x),h.attr("y",o()),typeof e.anchor<"u"&&h.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),typeof e.fontFamily<"u"&&h.style("font-family",e.fontFamily),typeof e.fontSize<"u"&&h.style("font-size",e.fontSize),typeof e.fontWeight<"u"&&h.style("font-weight",e.fontWeight),typeof e.fill<"u"&&h.attr("fill",e.fill),typeof e.class<"u"&&h.attr("class",e.class),typeof e.dy<"u"?h.attr("dy",e.dy):s!==0&&h.attr("dy",s),e.tspan){const d=h.append("tspan");d.attr("x",e.x),typeof e.fill<"u"&&d.attr("fill",e.fill),d.text(u)}else h.text(u);typeof e.valign<"u"&&typeof e.textMargin<"u"&&e.textMargin>0&&(n+=(h._groups||h)[0][0].getBBox().height,r=n),a.push(h)}return a},BK=function(t,e){function r(i,a,s,o,l){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+o-l)+" "+(i+s-l*1.2)+","+(a+o)+" "+i+","+(a+o)}const n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,Zw(t,e),n},DK=(t,e,r)=>{const n=t.append("g");let i=0;for(let a of e){let s=a.textColor?a.textColor:"#444444",o=a.lineColor?a.lineColor:"#444444",l=a.offsetX?parseInt(a.offsetX):0,u=a.offsetY?parseInt(a.offsetY):0,h="";if(i===0){let f=n.append("line");f.attr("x1",a.startPoint.x),f.attr("y1",a.startPoint.y),f.attr("x2",a.endPoint.x),f.attr("y2",a.endPoint.y),f.attr("stroke-width","1"),f.attr("stroke",o),f.style("fill","none"),a.type!=="rel_b"&&f.attr("marker-end","url("+h+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&f.attr("marker-start","url("+h+"#arrowend)"),i=-1}else{let f=n.append("path");f.attr("fill","none").attr("stroke-width","1").attr("stroke",o).attr("d","Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx",a.startPoint.x).replaceAll("starty",a.startPoint.y).replaceAll("controlx",a.startPoint.x+(a.endPoint.x-a.startPoint.x)/2-(a.endPoint.x-a.startPoint.x)/4).replaceAll("controly",a.startPoint.y+(a.endPoint.y-a.startPoint.y)/2).replaceAll("stopx",a.endPoint.x).replaceAll("stopy",a.endPoint.y)),a.type!=="rel_b"&&f.attr("marker-end","url("+h+"#arrowhead)"),(a.type==="birel"||a.type==="rel_b")&&f.attr("marker-start","url("+h+"#arrowend)")}let d=r.messageFont();sa(r)(a.label.text,n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+l,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+u,a.label.width,a.label.height,{fill:s},d),a.techn&&a.techn.text!==""&&(d=r.messageFont(),sa(r)("["+a.techn.text+"]",n,Math.min(a.startPoint.x,a.endPoint.x)+Math.abs(a.endPoint.x-a.startPoint.x)/2+l,Math.min(a.startPoint.y,a.endPoint.y)+Math.abs(a.endPoint.y-a.startPoint.y)/2+r.messageFontSize+5+u,Math.max(a.label.width,a.techn.width),a.techn.height,{fill:s,"font-style":"italic"},d))}},OK=function(t,e,r){const n=t.append("g");let i=e.bgColor?e.bgColor:"none",a=e.borderColor?e.borderColor:"#444444",s=e.fontColor?e.fontColor:"black",o={"stroke-width":1,"stroke-dasharray":"7.0,7.0"};e.nodeType&&(o={"stroke-width":1});let l={x:e.x,y:e.y,fill:i,stroke:a,width:e.width,height:e.height,rx:2.5,ry:2.5,attrs:o};_g(n,l);let u=r.boundaryFont();u.fontWeight="bold",u.fontSize=u.fontSize+2,u.fontColor=s,sa(r)(e.label.text,n,e.x,e.y+e.label.Y,e.width,e.height,{fill:"#444444"},u),e.type&&e.type.text!==""&&(u=r.boundaryFont(),u.fontColor=s,sa(r)(e.type.text,n,e.x,e.y+e.type.Y,e.width,e.height,{fill:"#444444"},u)),e.descr&&e.descr.text!==""&&(u=r.boundaryFont(),u.fontSize=u.fontSize-2,u.fontColor=s,sa(r)(e.descr.text,n,e.x,e.y+e.descr.Y,e.width,e.height,{fill:"#444444"},u))},FK=function(t,e,r){let n=e.bgColor?e.bgColor:r[e.typeC4Shape.text+"_bg_color"],i=e.borderColor?e.borderColor:r[e.typeC4Shape.text+"_border_color"],a=e.fontColor?e.fontColor:"#FFFFFF",s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";switch(e.typeC4Shape.text){case"person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";break;case"external_person":s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";break}const o=t.append("g");o.attr("class","person-man");const l=Qw();switch(e.typeC4Shape.text){case"person":case"external_person":case"system":case"external_system":case"container":case"external_container":case"component":case"external_component":l.x=e.x,l.y=e.y,l.fill=n,l.width=e.width,l.height=e.height,l.style="stroke:"+i+";stroke-width:0.5;",l.rx=2.5,l.ry=2.5,_g(o,l);break;case"system_db":case"external_system_db":case"container_db":case"external_container_db":case"component_db":case"external_component_db":o.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2).replaceAll("height",e.height)),o.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("half",e.width/2));break;case"system_queue":case"external_system_queue":case"container_queue":case"external_container_queue":case"component_queue":case"external_component_queue":o.append("path").attr("fill",n).attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx",e.x).replaceAll("starty",e.y).replaceAll("width",e.width).replaceAll("half",e.height/2)),o.append("path").attr("fill","none").attr("stroke-width","0.5").attr("stroke",i).attr("d","Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx",e.x+e.width).replaceAll("starty",e.y).replaceAll("half",e.height/2));break}let u=jK(r,e.typeC4Shape.text);switch(o.append("text").attr("fill",a).attr("font-family",u.fontFamily).attr("font-size",u.fontSize-2).attr("font-style","italic").attr("lengthAdjust","spacing").attr("textLength",e.typeC4Shape.width).attr("x",e.x+e.width/2-e.typeC4Shape.width/2).attr("y",e.y+e.typeC4Shape.Y).text("<<"+e.typeC4Shape.text+">>"),e.typeC4Shape.text){case"person":case"external_person":Kw(o,48,48,e.x+e.width/2-24,e.y+e.image.Y,s);break}let h=r[e.typeC4Shape.text+"Font"]();return h.fontWeight="bold",h.fontSize=h.fontSize+2,h.fontColor=a,sa(r)(e.label.text,o,e.x,e.y+e.label.Y,e.width,e.height,{fill:a},h),h=r[e.typeC4Shape.text+"Font"](),h.fontColor=a,e.thchn&&e.thchn.text!==""?sa(r)(e.thchn.text,o,e.x,e.y+e.thchn.Y,e.width,e.height,{fill:a,"font-style":"italic"},h):e.type&&e.type.text!==""&&sa(r)(e.type.text,o,e.x,e.y+e.type.Y,e.width,e.height,{fill:a,"font-style":"italic"},h),e.descr&&e.descr.text!==""&&(h=r.personFont(),h.fontColor=a,sa(r)(e.descr.text,o,e.x,e.y+e.descr.Y,e.width,e.height,{fill:a},h)),e.height},PK=function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},qK=function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},VK=function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},zK=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},YK=function(t){t.append("defs").append("marker").attr("id","arrowend").attr("refX",1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 10 0 L 0 5 L 10 10 z")},UK=function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},WK=function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},HK=function(t){const r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},GK=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},Qw=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},jK=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),sa=function(){function t(i,a,s,o,l,u,h){const d=a.append("text").attr("x",s+l/2).attr("y",o+u/2+5).style("text-anchor","middle").text(i);n(d,h)}function e(i,a,s,o,l,u,h,d){const{fontSize:f,fontFamily:p,fontWeight:m}=d,_=i.split(pe.lineBreakRegex);for(let y=0;y<_.length;y++){const b=y*f-f*(_.length-1)/2,x=a.append("text").attr("x",s+l/2).attr("y",o).style("text-anchor","middle").attr("dominant-baseline","middle").style("font-size",f).style("font-weight",m).style("font-family",p);x.append("tspan").attr("dy",b).text(_[y]).attr("alignment-baseline","mathematical"),n(x,h)}}function r(i,a,s,o,l,u,h,d){const f=a.append("switch"),m=f.append("foreignObject").attr("x",s).attr("y",o).attr("width",l).attr("height",u).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");m.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,f,s,o,l,u,h,d),n(m,h)}function n(i,a){for(const s in a)a.hasOwnProperty(s)&&i.attr(s,a[s])}return function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),Oi={drawRect:_g,drawText:Zw,drawLabel:BK,drawBoundary:OK,drawC4Shape:FK,drawRels:DK,drawImage:Kw,drawEmbeddedImage:NK,insertArrowHead:zK,insertArrowEnd:YK,insertArrowFilledHead:UK,insertDynamicNumber:WK,insertArrowCrossHead:HK,insertDatabaseIcon:PK,insertComputerIcon:qK,insertClockIcon:VK,getTextObj:GK,getNoteRect:Qw,sanitizeUrl:ki};let y1=0,m1=0,Jw=4,vg=2;qc.yy=Xw;let Zt={};class t9{constructor(e){this.name="",this.data={},this.data.startx=void 0,this.data.stopx=void 0,this.data.starty=void 0,this.data.stopy=void 0,this.data.widthLimit=void 0,this.nextData={},this.nextData.startx=void 0,this.nextData.stopx=void 0,this.nextData.starty=void 0,this.nextData.stopy=void 0,this.nextData.cnt=0,xg(e.db.getConfig())}setData(e,r,n,i){this.nextData.startx=this.data.startx=e,this.nextData.stopx=this.data.stopx=r,this.nextData.starty=this.data.starty=n,this.nextData.stopy=this.data.stopy=i}updateVal(e,r,n,i){typeof e[r]>"u"?e[r]=n:e[r]=i(n,e[r])}insert(e){this.nextData.cnt=this.nextData.cnt+1;let r=this.nextData.startx===this.nextData.stopx?this.nextData.stopx+e.margin:this.nextData.stopx+e.margin*2,n=r+e.width,i=this.nextData.starty+e.margin*2,a=i+e.height;(r>=this.data.widthLimit||n>=this.data.widthLimit||this.nextData.cnt>Jw)&&(r=this.nextData.startx+e.margin+Zt.nextLinePaddingX,i=this.nextData.stopy+e.margin*2,this.nextData.stopx=n=r+e.width,this.nextData.starty=this.nextData.stopy,this.nextData.stopy=a=i+e.height,this.nextData.cnt=1),e.x=r,e.y=i,this.updateVal(this.data,"startx",r,Math.min),this.updateVal(this.data,"starty",i,Math.min),this.updateVal(this.data,"stopx",n,Math.max),this.updateVal(this.data,"stopy",a,Math.max),this.updateVal(this.nextData,"startx",r,Math.min),this.updateVal(this.nextData,"starty",i,Math.min),this.updateVal(this.nextData,"stopx",n,Math.max),this.updateVal(this.nextData,"stopy",a,Math.max)}init(e){this.name="",this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,widthLimit:void 0},this.nextData={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0,cnt:0},xg(e.db.getConfig())}bumpLastMargin(e){this.data.stopx+=e,this.data.stopy+=e}}const xg=function(t){fr(Zt,t),t.fontFamily&&(Zt.personFontFamily=Zt.systemFontFamily=Zt.messageFontFamily=t.fontFamily),t.fontSize&&(Zt.personFontSize=Zt.systemFontSize=Zt.messageFontSize=t.fontSize),t.fontWeight&&(Zt.personFontWeight=Zt.systemFontWeight=Zt.messageFontWeight=t.fontWeight)},zc=(t,e)=>({fontFamily:t[e+"FontFamily"],fontSize:t[e+"FontSize"],fontWeight:t[e+"FontWeight"]}),b1=t=>({fontFamily:t.boundaryFontFamily,fontSize:t.boundaryFontSize,fontWeight:t.boundaryFontWeight}),$K=t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight});function gi(t,e,r,n,i){if(!e[t].width)if(r)e[t].text=cw(e[t].text,i,n),e[t].textLines=e[t].text.split(pe.lineBreakRegex).length,e[t].width=i,e[t].height=eg(e[t].text,n);else{let a=e[t].text.split(pe.lineBreakRegex);e[t].textLines=a.length;let s=0;e[t].height=0,e[t].width=0;for(let o=0;o<a.length;o++)e[t].width=Math.max(Bi(a[o],n),e[t].width),s=eg(a[o],n),e[t].height=e[t].height+s}}const e9=function(t,e,r){e.x=r.data.startx,e.y=r.data.starty,e.width=r.data.stopx-r.data.startx,e.height=r.data.stopy-r.data.starty,e.label.y=Zt.c4ShapeMargin-35;let n=e.wrap&&Zt.wrap,i=b1(Zt);i.fontSize=i.fontSize+2,i.fontWeight="bold";let a=Bi(e.label.text,i);gi("label",e,n,i,a),Oi.drawBoundary(t,e,Zt)},r9=function(t,e,r,n){let i=0;for(let a=0;a<n.length;a++){i=0;const s=r[n[a]];let o=zc(Zt,s.typeC4Shape.text);switch(o.fontSize=o.fontSize-2,s.typeC4Shape.width=Bi("<<"+s.typeC4Shape.text+">>",o),s.typeC4Shape.height=o.fontSize+2,s.typeC4Shape.Y=Zt.c4ShapePadding,i=s.typeC4Shape.Y+s.typeC4Shape.height-4,s.image={width:0,height:0,Y:0},s.typeC4Shape.text){case"person":case"external_person":s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height;break}s.sprite&&(s.image.width=48,s.image.height=48,s.image.Y=i,i=s.image.Y+s.image.height);let l=s.wrap&&Zt.wrap,u=Zt.width-Zt.c4ShapePadding*2,h=zc(Zt,s.typeC4Shape.text);if(h.fontSize=h.fontSize+2,h.fontWeight="bold",gi("label",s,l,h,u),s.label.Y=i+8,i=s.label.Y+s.label.height,s.type&&s.type.text!==""){s.type.text="["+s.type.text+"]";let p=zc(Zt,s.typeC4Shape.text);gi("type",s,l,p,u),s.type.Y=i+5,i=s.type.Y+s.type.height}else if(s.techn&&s.techn.text!==""){s.techn.text="["+s.techn.text+"]";let p=zc(Zt,s.techn.text);gi("techn",s,l,p,u),s.techn.Y=i+5,i=s.techn.Y+s.techn.height}let d=i,f=s.label.width;if(s.descr&&s.descr.text!==""){let p=zc(Zt,s.typeC4Shape.text);gi("descr",s,l,p,u),s.descr.Y=i+20,i=s.descr.Y+s.descr.height,f=Math.max(s.label.width,s.descr.width),d=i-s.descr.textLines*5}f=f+Zt.c4ShapePadding,s.width=Math.max(s.width||Zt.width,f,Zt.width),s.height=Math.max(s.height||Zt.height,d,Zt.height),s.margin=s.margin||Zt.c4ShapeMargin,t.insert(s),Oi.drawC4Shape(e,s,Zt)}t.bumpLastMargin(Zt.c4ShapeMargin)};class Un{constructor(e,r){this.x=e,this.y=r}}let n9=function(t,e){let r=t.x,n=t.y,i=e.x,a=e.y,s=r+t.width/2,o=n+t.height/2,l=Math.abs(r-i),u=Math.abs(n-a),h=u/l,d=t.height/t.width,f=null;return n==a&&r<i?f=new Un(r+t.width,o):n==a&&r>i?f=new Un(r,o):r==i&&n<a?f=new Un(s,n+t.height):r==i&&n>a&&(f=new Un(s,n)),r>i&&n<a?d>=h?f=new Un(r,o+h*t.width/2):f=new Un(s-l/u*t.height/2,n+t.height):r<i&&n<a?d>=h?f=new Un(r+t.width,o+h*t.width/2):f=new Un(s+l/u*t.height/2,n+t.height):r<i&&n>a?d>=h?f=new Un(r+t.width,o-h*t.width/2):f=new Un(s+t.height/2*l/u,n):r>i&&n>a&&(d>=h?f=new Un(r,o-t.width/2*h):f=new Un(s-t.height/2*l/u,n)),f},XK=function(t,e){let r={x:0,y:0};r.x=e.x+e.width/2,r.y=e.y+e.height/2;let n=n9(t,r);r.x=t.x+t.width/2,r.y=t.y+t.height/2;let i=n9(e,r);return{startPoint:n,endPoint:i}};const KK=function(t,e,r,n){let i=0;for(let a of e){i=i+1;let s=a.wrap&&Zt.wrap,o=$K(Zt);n.db.getC4Type()==="C4Dynamic"&&(a.label.text=i+": "+a.label.text);let u=Bi(a.label.text,o);gi("label",a,s,o,u),a.techn&&a.techn.text!==""&&(u=Bi(a.techn.text,o),gi("techn",a,s,o,u)),a.descr&&a.descr.text!==""&&(u=Bi(a.descr.text,o),gi("descr",a,s,o,u));let h=r(a.from),d=r(a.to),f=XK(h,d);a.startPoint=f.startPoint,a.endPoint=f.endPoint}Oi.drawRels(t,e,Zt)};function i9(t,e,r,n,i){let a=new t9(i);a.data.widthLimit=r.data.widthLimit/Math.min(vg,n.length);for(let s=0;s<n.length;s++){let o=n[s],l=0;o.image={width:0,height:0,Y:0},o.sprite&&(o.image.width=48,o.image.height=48,o.image.Y=l,l=o.image.Y+o.image.height);let u=o.wrap&&Zt.wrap,h=b1(Zt);if(h.fontSize=h.fontSize+2,h.fontWeight="bold",gi("label",o,u,h,a.data.widthLimit),o.label.Y=l+8,l=o.label.Y+o.label.height,o.type&&o.type.text!==""){o.type.text="["+o.type.text+"]";let m=b1(Zt);gi("type",o,u,m,a.data.widthLimit),o.type.Y=l+5,l=o.type.Y+o.type.height}if(o.descr&&o.descr.text!==""){let m=b1(Zt);m.fontSize=m.fontSize-2,gi("descr",o,u,m,a.data.widthLimit),o.descr.Y=l+20,l=o.descr.Y+o.descr.height}if(s==0||s%vg===0){let m=r.data.startx+Zt.diagramMarginX,_=r.data.stopy+Zt.diagramMarginY+l;a.setData(m,m,_,_)}else{let m=a.data.stopx!==a.data.startx?a.data.stopx+Zt.diagramMarginX:a.data.startx,_=a.data.starty;a.setData(m,m,_,_)}a.name=o.alias;let d=i.db.getC4ShapeArray(o.alias),f=i.db.getC4ShapeKeys(o.alias);f.length>0&&r9(a,t,d,f),e=o.alias;let p=i.db.getBoundarys(e);p.length>0&&i9(t,e,a,p,i),o.alias!=="global"&&e9(t,o,a),r.data.stopy=Math.max(a.data.stopy+Zt.c4ShapeMargin,r.data.stopy),r.data.stopx=Math.max(a.data.stopx+Zt.c4ShapeMargin,r.data.stopx),y1=Math.max(y1,r.data.stopx),m1=Math.max(m1,r.data.stopy)}}const a9={drawPersonOrSystemArray:r9,drawBoundary:e9,setConf:xg,draw:function(t,e,r,n){Zt=nt().c4;const i=nt().securityLevel;let a;i==="sandbox"&&(a=St("#i"+e));const s=St(i==="sandbox"?a.nodes()[0].contentDocument.body:"body");let o=n.db;n.db.setWrap(Zt.wrap),Jw=o.getC4ShapeInRow(),vg=o.getC4BoundaryInRow(),H.debug(`C:${JSON.stringify(Zt,null,2)}`);const l=i==="sandbox"?s.select(`[id="${e}"]`):St(`[id="${e}"]`);Oi.insertComputerIcon(l),Oi.insertDatabaseIcon(l),Oi.insertClockIcon(l);let u=new t9(n);u.setData(Zt.diagramMarginX,Zt.diagramMarginX,Zt.diagramMarginY,Zt.diagramMarginY),u.data.widthLimit=screen.availWidth,y1=Zt.diagramMarginX,m1=Zt.diagramMarginY;const h=n.db.getTitle();let d=n.db.getBoundarys("");i9(l,"",u,d,n),Oi.insertArrowHead(l),Oi.insertArrowEnd(l),Oi.insertArrowCrossHead(l),Oi.insertArrowFilledHead(l),KK(l,n.db.getRels(),n.db.getC4Shape,n),u.data.stopx=y1,u.data.stopy=m1;const f=u.data;let m=f.stopy-f.starty+2*Zt.diagramMarginY;const y=f.stopx-f.startx+2*Zt.diagramMarginX;h&&l.append("text").text(h).attr("x",(f.stopx-f.startx)/2-4*Zt.diagramMarginX).attr("y",f.starty+Zt.diagramMarginY),li(l,m,y,Zt.useMaxWidth);const b=h?60:0;l.attr("viewBox",f.startx-Zt.diagramMarginX+" -"+(Zt.diagramMarginY+b)+" "+y+" "+(m+b)),bn(qc.yy,l,e),H.debug("models:",f)}};var _1=function(){var t=function(Z,V,Q,q){for(Q=Q||{},q=Z.length;q--;Q[Z[q]]=V);return Q},e=[1,3],r=[1,7],n=[1,8],i=[1,9],a=[1,10],s=[1,13],o=[1,12],l=[1,16,25],u=[1,20],h=[1,31],d=[1,32],f=[1,33],p=[1,35],m=[1,38],_=[1,36],y=[1,37],b=[1,39],x=[1,40],k=[1,41],T=[1,42],C=[1,45],M=[1,46],S=[1,47],R=[1,48],A=[16,25],L=[1,62],v=[1,63],B=[1,64],w=[1,65],D=[1,66],N=[1,67],z=[1,68],X=[16,25,32,44,45,53,56,57,58,59,60,61,62,67,69],ct=[16,25,30,32,44,45,49,53,56,57,58,59,60,61,62,67,69,84,85,86,87],J=[5,8,9,10,11,16,19,23,25],Y=[53,84,85,86,87],$=[53,61,62,84,85,86,87],lt=[53,56,57,58,59,60,84,85,86,87],ut=[16,25,32],W=[1,100],tt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,statments:5,direction:6,directive:7,direction_tb:8,direction_bt:9,direction_rl:10,direction_lr:11,graphConfig:12,openDirective:13,typeDirective:14,closeDirective:15,NEWLINE:16,":":17,argDirective:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,CLASS_DIAGRAM:23,statements:24,EOF:25,statement:26,className:27,alphaNumToken:28,classLiteralName:29,GENERICTYPE:30,relationStatement:31,LABEL:32,classStatement:33,methodStatement:34,annotationStatement:35,clickStatement:36,cssClassStatement:37,acc_title:38,acc_title_value:39,acc_descr:40,acc_descr_value:41,acc_descr_multiline_value:42,CLASS:43,STYLE_SEPARATOR:44,STRUCT_START:45,members:46,STRUCT_STOP:47,ANNOTATION_START:48,ANNOTATION_END:49,MEMBER:50,SEPARATOR:51,relation:52,STR:53,relationType:54,lineType:55,AGGREGATION:56,EXTENSION:57,COMPOSITION:58,DEPENDENCY:59,LOLLIPOP:60,LINE:61,DOTTED_LINE:62,CALLBACK:63,LINK:64,LINK_TARGET:65,CLICK:66,CALLBACK_NAME:67,CALLBACK_ARGS:68,HREF:69,CSSCLASS:70,commentToken:71,textToken:72,graphCodeTokens:73,textNoTagsToken:74,TAGSTART:75,TAGEND:76,"==":77,"--":78,PCT:79,DEFAULT:80,SPACE:81,MINUS:82,keywords:83,UNICODE_TEXT:84,NUM:85,ALPHA:86,BQUOTE_STR:87,$accept:0,$end:1},terminals_:{2:"error",5:"statments",8:"direction_tb",9:"direction_bt",10:"direction_rl",11:"direction_lr",16:"NEWLINE",17:":",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",23:"CLASS_DIAGRAM",25:"EOF",30:"GENERICTYPE",32:"LABEL",38:"acc_title",39:"acc_title_value",40:"acc_descr",41:"acc_descr_value",42:"acc_descr_multiline_value",43:"CLASS",44:"STYLE_SEPARATOR",45:"STRUCT_START",47:"STRUCT_STOP",48:"ANNOTATION_START",49:"ANNOTATION_END",50:"MEMBER",51:"SEPARATOR",53:"STR",56:"AGGREGATION",57:"EXTENSION",58:"COMPOSITION",59:"DEPENDENCY",60:"LOLLIPOP",61:"LINE",62:"DOTTED_LINE",63:"CALLBACK",64:"LINK",65:"LINK_TARGET",66:"CLICK",67:"CALLBACK_NAME",68:"CALLBACK_ARGS",69:"HREF",70:"CSSCLASS",73:"graphCodeTokens",75:"TAGSTART",76:"TAGEND",77:"==",78:"--",79:"PCT",80:"DEFAULT",81:"SPACE",82:"MINUS",83:"keywords",84:"UNICODE_TEXT",85:"NUM",86:"ALPHA",87:"BQUOTE_STR"},productions_:[0,[3,1],[3,1],[3,1],[3,2],[6,1],[6,1],[6,1],[6,1],[4,1],[7,4],[7,6],[13,1],[14,1],[18,1],[15,1],[12,4],[24,1],[24,2],[24,3],[27,1],[27,1],[27,2],[27,2],[27,2],[26,1],[26,2],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,2],[26,2],[26,1],[33,2],[33,4],[33,5],[33,7],[35,4],[46,1],[46,2],[34,1],[34,2],[34,1],[34,1],[31,3],[31,4],[31,4],[31,5],[52,3],[52,2],[52,2],[52,1],[54,1],[54,1],[54,1],[54,1],[54,1],[55,1],[55,1],[36,3],[36,4],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[36,3],[36,4],[36,4],[36,5],[37,3],[71,1],[71,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[74,1],[74,1],[74,1],[74,1],[28,1],[28,1],[28,1],[29,1]],performAction:function(V,Q,q,U,F,j,P){var et=j.length-1;switch(F){case 5:U.setDirection("TB");break;case 6:U.setDirection("BT");break;case 7:U.setDirection("RL");break;case 8:U.setDirection("LR");break;case 12:U.parseDirective("%%{","open_directive");break;case 13:U.parseDirective(j[et],"type_directive");break;case 14:j[et]=j[et].trim().replace(/'/g,'"'),U.parseDirective(j[et],"arg_directive");break;case 15:U.parseDirective("}%%","close_directive","class");break;case 20:case 21:this.$=j[et];break;case 22:this.$=j[et-1]+j[et];break;case 23:case 24:this.$=j[et-1]+"~"+j[et];break;case 25:U.addRelation(j[et]);break;case 26:j[et-1].title=U.cleanupLabel(j[et]),U.addRelation(j[et-1]);break;case 34:this.$=j[et].trim(),U.setAccTitle(this.$);break;case 35:case 36:this.$=j[et].trim(),U.setAccDescription(this.$);break;case 37:U.addClass(j[et]);break;case 38:U.addClass(j[et-2]),U.setCssClass(j[et-2],j[et]);break;case 39:U.addClass(j[et-3]),U.addMembers(j[et-3],j[et-1]);break;case 40:U.addClass(j[et-5]),U.setCssClass(j[et-5],j[et-3]),U.addMembers(j[et-5],j[et-1]);break;case 41:U.addAnnotation(j[et],j[et-2]);break;case 42:this.$=[j[et]];break;case 43:j[et].push(j[et-1]),this.$=j[et];break;case 44:break;case 45:U.addMember(j[et-1],U.cleanupLabel(j[et]));break;case 46:break;case 47:break;case 48:this.$={id1:j[et-2],id2:j[et],relation:j[et-1],relationTitle1:"none",relationTitle2:"none"};break;case 49:this.$={id1:j[et-3],id2:j[et],relation:j[et-1],relationTitle1:j[et-2],relationTitle2:"none"};break;case 50:this.$={id1:j[et-3],id2:j[et],relation:j[et-2],relationTitle1:"none",relationTitle2:j[et-1]};break;case 51:this.$={id1:j[et-4],id2:j[et],relation:j[et-2],relationTitle1:j[et-3],relationTitle2:j[et-1]};break;case 52:this.$={type1:j[et-2],type2:j[et],lineType:j[et-1]};break;case 53:this.$={type1:"none",type2:j[et],lineType:j[et-1]};break;case 54:this.$={type1:j[et-1],type2:"none",lineType:j[et]};break;case 55:this.$={type1:"none",type2:"none",lineType:j[et]};break;case 56:this.$=U.relationType.AGGREGATION;break;case 57:this.$=U.relationType.EXTENSION;break;case 58:this.$=U.relationType.COMPOSITION;break;case 59:this.$=U.relationType.DEPENDENCY;break;case 60:this.$=U.relationType.LOLLIPOP;break;case 61:this.$=U.lineType.LINE;break;case 62:this.$=U.lineType.DOTTED_LINE;break;case 63:case 69:this.$=j[et-2],U.setClickEvent(j[et-1],j[et]);break;case 64:case 70:this.$=j[et-3],U.setClickEvent(j[et-2],j[et-1]),U.setTooltip(j[et-2],j[et]);break;case 65:case 73:this.$=j[et-2],U.setLink(j[et-1],j[et]);break;case 66:this.$=j[et-3],U.setLink(j[et-2],j[et-1],j[et]);break;case 67:case 75:this.$=j[et-3],U.setLink(j[et-2],j[et-1]),U.setTooltip(j[et-2],j[et]);break;case 68:case 76:this.$=j[et-4],U.setLink(j[et-3],j[et-2],j[et]),U.setTooltip(j[et-3],j[et-1]);break;case 71:this.$=j[et-3],U.setClickEvent(j[et-2],j[et-1],j[et]);break;case 72:this.$=j[et-4],U.setClickEvent(j[et-3],j[et-2],j[et-1]),U.setTooltip(j[et-3],j[et]);break;case 74:this.$=j[et-3],U.setLink(j[et-2],j[et-1],j[et]);break;case 77:U.setCssClass(j[et-1],j[et]);break}},table:[{3:1,4:2,5:e,6:4,7:5,8:r,9:n,10:i,11:a,12:6,13:11,19:s,23:o},{1:[3]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{3:14,4:2,5:e,6:4,7:5,8:r,9:n,10:i,11:a,12:6,13:11,19:s,23:o},{1:[2,9]},t(l,[2,5]),t(l,[2,6]),t(l,[2,7]),t(l,[2,8]),{14:15,20:[1,16]},{16:[1,17]},{20:[2,12]},{1:[2,4]},{15:18,17:[1,19],22:u},t([17,22],[2,13]),{6:30,7:29,8:r,9:n,10:i,11:a,13:11,19:s,24:21,26:22,27:34,28:43,29:44,31:23,33:24,34:25,35:26,36:27,37:28,38:h,40:d,42:f,43:p,48:m,50:_,51:y,63:b,64:x,66:k,70:T,84:C,85:M,86:S,87:R},{16:[1,49]},{18:50,21:[1,51]},{16:[2,15]},{25:[1,52]},{16:[1,53],25:[2,17]},t(A,[2,25],{32:[1,54]}),t(A,[2,27]),t(A,[2,28]),t(A,[2,29]),t(A,[2,30]),t(A,[2,31]),t(A,[2,32]),t(A,[2,33]),{39:[1,55]},{41:[1,56]},t(A,[2,36]),t(A,[2,44],{52:57,54:60,55:61,32:[1,59],53:[1,58],56:L,57:v,58:B,59:w,60:D,61:N,62:z}),{27:69,28:43,29:44,84:C,85:M,86:S,87:R},t(A,[2,46]),t(A,[2,47]),{28:70,84:C,85:M,86:S},{27:71,28:43,29:44,84:C,85:M,86:S,87:R},{27:72,28:43,29:44,84:C,85:M,86:S,87:R},{27:73,28:43,29:44,84:C,85:M,86:S,87:R},{53:[1,74]},t(X,[2,20],{28:43,29:44,27:75,30:[1,76],84:C,85:M,86:S,87:R}),t(X,[2,21],{30:[1,77]}),t(ct,[2,91]),t(ct,[2,92]),t(ct,[2,93]),t([16,25,30,32,44,45,53,56,57,58,59,60,61,62,67,69],[2,94]),t(J,[2,10]),{15:78,22:u},{22:[2,14]},{1:[2,16]},{6:30,7:29,8:r,9:n,10:i,11:a,13:11,19:s,24:79,25:[2,18],26:22,27:34,28:43,29:44,31:23,33:24,34:25,35:26,36:27,37:28,38:h,40:d,42:f,43:p,48:m,50:_,51:y,63:b,64:x,66:k,70:T,84:C,85:M,86:S,87:R},t(A,[2,26]),t(A,[2,34]),t(A,[2,35]),{27:80,28:43,29:44,53:[1,81],84:C,85:M,86:S,87:R},{52:82,54:60,55:61,56:L,57:v,58:B,59:w,60:D,61:N,62:z},t(A,[2,45]),{55:83,61:N,62:z},t(Y,[2,55],{54:84,56:L,57:v,58:B,59:w,60:D}),t($,[2,56]),t($,[2,57]),t($,[2,58]),t($,[2,59]),t($,[2,60]),t(lt,[2,61]),t(lt,[2,62]),t(A,[2,37],{44:[1,85],45:[1,86]}),{49:[1,87]},{53:[1,88]},{53:[1,89]},{67:[1,90],69:[1,91]},{28:92,84:C,85:M,86:S},t(X,[2,22]),t(X,[2,23]),t(X,[2,24]),{16:[1,93]},{25:[2,19]},t(ut,[2,48]),{27:94,28:43,29:44,84:C,85:M,86:S,87:R},{27:95,28:43,29:44,53:[1,96],84:C,85:M,86:S,87:R},t(Y,[2,54],{54:97,56:L,57:v,58:B,59:w,60:D}),t(Y,[2,53]),{28:98,84:C,85:M,86:S},{46:99,50:W},{27:101,28:43,29:44,84:C,85:M,86:S,87:R},t(A,[2,63],{53:[1,102]}),t(A,[2,65],{53:[1,104],65:[1,103]}),t(A,[2,69],{53:[1,105],68:[1,106]}),t(A,[2,73],{53:[1,108],65:[1,107]}),t(A,[2,77]),t(J,[2,11]),t(ut,[2,50]),t(ut,[2,49]),{27:109,28:43,29:44,84:C,85:M,86:S,87:R},t(Y,[2,52]),t(A,[2,38],{45:[1,110]}),{47:[1,111]},{46:112,47:[2,42],50:W},t(A,[2,41]),t(A,[2,64]),t(A,[2,66]),t(A,[2,67],{65:[1,113]}),t(A,[2,70]),t(A,[2,71],{53:[1,114]}),t(A,[2,74]),t(A,[2,75],{65:[1,115]}),t(ut,[2,51]),{46:116,50:W},t(A,[2,39]),{47:[2,43]},t(A,[2,68]),t(A,[2,72]),t(A,[2,76]),{47:[1,117]},t(A,[2,40])],defaultActions:{2:[2,1],3:[2,2],4:[2,3],6:[2,9],13:[2,12],14:[2,4],20:[2,15],51:[2,14],52:[2,16],79:[2,19],112:[2,43]},parseError:function(V,Q){if(Q.recoverable)this.trace(V);else{var q=new Error(V);throw q.hash=Q,q}},parse:function(V){var Q=this,q=[0],U=[],F=[null],j=[],P=this.table,et="",at=0,It=0,Lt=2,Rt=1,Ct=j.slice.call(arguments,1),pt=Object.create(this.lexer),mt={yy:{}};for(var vt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,vt)&&(mt.yy[vt]=this.yy[vt]);pt.setInput(V,mt.yy),mt.yy.lexer=pt,mt.yy.parser=this,typeof pt.yylloc>"u"&&(pt.yylloc={});var Tt=pt.yylloc;j.push(Tt);var ft=pt.options&&pt.options.ranges;typeof mt.yy.parseError=="function"?this.parseError=mt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function le(){var Et;return Et=U.pop()||pt.lex()||Rt,typeof Et!="number"&&(Et instanceof Array&&(U=Et,Et=U.pop()),Et=Q.symbols_[Et]||Et),Et}for(var Dt,Gt,$t,Qt,we={},jt,Ft,zt,wt;;){if(Gt=q[q.length-1],this.defaultActions[Gt]?$t=this.defaultActions[Gt]:((Dt===null||typeof Dt>"u")&&(Dt=le()),$t=P[Gt]&&P[Gt][Dt]),typeof $t>"u"||!$t.length||!$t[0]){var bt="";wt=[];for(jt in P[Gt])this.terminals_[jt]&&jt>Lt&&wt.push("'"+this.terminals_[jt]+"'");pt.showPosition?bt="Parse error on line "+(at+1)+`:
+`+pt.showPosition()+`
+Expecting `+wt.join(", ")+", got '"+(this.terminals_[Dt]||Dt)+"'":bt="Parse error on line "+(at+1)+": Unexpected "+(Dt==Rt?"end of input":"'"+(this.terminals_[Dt]||Dt)+"'"),this.parseError(bt,{text:pt.match,token:this.terminals_[Dt]||Dt,line:pt.yylineno,loc:Tt,expected:wt})}if($t[0]instanceof Array&&$t.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Gt+", token: "+Dt);switch($t[0]){case 1:q.push(Dt),F.push(pt.yytext),j.push(pt.yylloc),q.push($t[1]),Dt=null,It=pt.yyleng,et=pt.yytext,at=pt.yylineno,Tt=pt.yylloc;break;case 2:if(Ft=this.productions_[$t[1]][1],we.$=F[F.length-Ft],we._$={first_line:j[j.length-(Ft||1)].first_line,last_line:j[j.length-1].last_line,first_column:j[j.length-(Ft||1)].first_column,last_column:j[j.length-1].last_column},ft&&(we._$.range=[j[j.length-(Ft||1)].range[0],j[j.length-1].range[1]]),Qt=this.performAction.apply(we,[et,It,at,mt.yy,$t[1],F,j].concat(Ct)),typeof Qt<"u")return Qt;Ft&&(q=q.slice(0,-1*Ft*2),F=F.slice(0,-1*Ft),j=j.slice(0,-1*Ft)),q.push(this.productions_[$t[1]][0]),F.push(we.$),j.push(we._$),zt=P[q[q.length-2]][q[q.length-1]],q.push(zt);break;case 3:return!0}}return!0}},K=function(){var Z={EOF:1,parseError:function(Q,q){if(this.yy.parser)this.yy.parser.parseError(Q,q);else throw new Error(Q)},setInput:function(V,Q){return this.yy=Q||this.yy||{},this._input=V,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var V=this._input[0];this.yytext+=V,this.yyleng++,this.offset++,this.match+=V,this.matched+=V;var Q=V.match(/(?:\r\n?|\n).*/g);return Q?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),V},unput:function(V){var Q=V.length,q=V.split(/(?:\r\n?|\n)/g);this._input=V+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Q),this.offset-=Q;var U=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),q.length-1&&(this.yylineno-=q.length-1);var F=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:q?(q.length===U.length?this.yylloc.first_column:0)+U[U.length-q.length].length-q[0].length:this.yylloc.first_column-Q},this.options.ranges&&(this.yylloc.range=[F[0],F[0]+this.yyleng-Q]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(V){this.unput(this.match.slice(V))},pastInput:function(){var V=this.matched.substr(0,this.matched.length-this.match.length);return(V.length>20?"...":"")+V.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var V=this.match;return V.length<20&&(V+=this._input.substr(0,20-V.length)),(V.substr(0,20)+(V.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var V=this.pastInput(),Q=new Array(V.length+1).join("-");return V+this.upcomingInput()+`
+`+Q+"^"},test_match:function(V,Q){var q,U,F;if(this.options.backtrack_lexer&&(F={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(F.yylloc.range=this.yylloc.range.slice(0))),U=V[0].match(/(?:\r\n?|\n).*/g),U&&(this.yylineno+=U.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:U?U[U.length-1].length-U[U.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+V[0].length},this.yytext+=V[0],this.match+=V[0],this.matches=V,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(V[0].length),this.matched+=V[0],q=this.performAction.call(this,this.yy,this,Q,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),q)return q;if(this._backtrack){for(var j in F)this[j]=F[j];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var V,Q,q,U;this._more||(this.yytext="",this.match="");for(var F=this._currentRules(),j=0;j<F.length;j++)if(q=this._input.match(this.rules[F[j]]),q&&(!Q||q[0].length>Q[0].length)){if(Q=q,U=j,this.options.backtrack_lexer){if(V=this.test_match(q,F[j]),V!==!1)return V;if(this._backtrack){Q=!1;continue}else return!1}else if(!this.options.flex)break}return Q?(V=this.test_match(Q,F[U]),V!==!1?V:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Q=this.next();return Q||this.lex()},begin:function(Q){this.conditionStack.push(Q)},popState:function(){var Q=this.conditionStack.length-1;return Q>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Q){return Q=this.conditionStack.length-1-Math.abs(Q||0),Q>=0?this.conditionStack[Q]:"INITIAL"},pushState:function(Q){this.begin(Q)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(Q,q,U,F){switch(U){case 0:return this.begin("open_directive"),19;case 1:return 8;case 2:return 9;case 3:return 10;case 4:return 11;case 5:return this.begin("type_directive"),20;case 6:return this.popState(),this.begin("arg_directive"),17;case 7:return this.popState(),this.popState(),22;case 8:return 21;case 9:break;case 10:break;case 11:return this.begin("acc_title"),38;case 12:return this.popState(),"acc_title_value";case 13:return this.begin("acc_descr"),40;case 14:return this.popState(),"acc_descr_value";case 15:this.begin("acc_descr_multiline");break;case 16:this.popState();break;case 17:return"acc_descr_multiline_value";case 18:return 16;case 19:break;case 20:return 23;case 21:return 23;case 22:return this.begin("struct"),45;case 23:return"EDGE_STATE";case 24:return"EOF_IN_STRUCT";case 25:return"OPEN_IN_STRUCT";case 26:return this.popState(),47;case 27:break;case 28:return"MEMBER";case 29:return 43;case 30:return 70;case 31:return 63;case 32:return 64;case 33:return 66;case 34:return 48;case 35:return 49;case 36:this.begin("generic");break;case 37:this.popState();break;case 38:return"GENERICTYPE";case 39:this.begin("string");break;case 40:this.popState();break;case 41:return"STR";case 42:this.begin("bqstring");break;case 43:this.popState();break;case 44:return"BQUOTE_STR";case 45:this.begin("href");break;case 46:this.popState();break;case 47:return 69;case 48:this.begin("callback_name");break;case 49:this.popState();break;case 50:this.popState(),this.begin("callback_args");break;case 51:return 67;case 52:this.popState();break;case 53:return 68;case 54:return 65;case 55:return 65;case 56:return 65;case 57:return 65;case 58:return 57;case 59:return 57;case 60:return 59;case 61:return 59;case 62:return 58;case 63:return 56;case 64:return 60;case 65:return 61;case 66:return 62;case 67:return 32;case 68:return 44;case 69:return 82;case 70:return"DOT";case 71:return"PLUS";case 72:return 79;case 73:return"EQUALS";case 74:return"EQUALS";case 75:return 86;case 76:return"PUNCTUATION";case 77:return 85;case 78:return 84;case 79:return 81;case 80:return 25}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:\s*(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:\[\*\])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:\s*\(\))/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{acc_descr_multiline:{rules:[16,17],inclusive:!1},acc_descr:{rules:[14],inclusive:!1},acc_title:{rules:[12],inclusive:!1},arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},callback_args:{rules:[52,53],inclusive:!1},callback_name:{rules:[49,50,51],inclusive:!1},href:{rules:[46,47],inclusive:!1},struct:{rules:[23,24,25,26,27,28],inclusive:!1},generic:{rules:[37,38],inclusive:!1},bqstring:{rules:[43,44],inclusive:!1},string:{rules:[40,41],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,13,15,18,19,20,21,22,23,29,30,31,32,33,34,35,36,39,42,45,48,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80],inclusive:!0}}};return Z}();tt.lexer=K;function it(){this.yy={}}return it.prototype=tt,tt.Parser=it,new it}();_1.parser=_1;const ZK=(t,e)=>{var r;return((r=e==null?void 0:e.class)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!1:t.match(/^\s*classDiagram/)!==null},QK=(t,e)=>{var r;return t.match(/^\s*classDiagram/)!==null&&((r=e==null?void 0:e.class)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!0:t.match(/^\s*classDiagram-v2/)!==null},kg="classid-";let wg=[],lr={},s9=0,Yc=[];const Uc=t=>pe.sanitizeText(t,nt()),JK=function(t,e,r){Xe.parseDirective(this,t,e,r)},Wc=function(t){let e="",r=t;if(t.indexOf("~")>0){let n=t.split("~");r=n[0],e=pe.sanitizeText(n[1],nt())}return{className:r,type:e}},Tg=function(t){let e=Wc(t);typeof lr[e.className]<"u"||(lr[e.className]={id:e.className,type:e.type,cssClasses:[],methods:[],members:[],annotations:[],domId:kg+e.className+"-"+s9},s9++)},o9=function(t){const e=Object.keys(lr);for(let r=0;r<e.length;r++)if(lr[e[r]].id===t)return lr[e[r]].domId},tZ=function(){wg=[],lr={},Yc=[],Yc.push(c9),ci()},eZ=function(t){return lr[t]},rZ=function(){return lr},nZ=function(){return wg},iZ=function(t){H.debug("Adding relation: "+JSON.stringify(t)),Tg(t.id1),Tg(t.id2),t.id1=Wc(t.id1).className,t.id2=Wc(t.id2).className,t.relationTitle1=pe.sanitizeText(t.relationTitle1.trim(),nt()),t.relationTitle2=pe.sanitizeText(t.relationTitle2.trim(),nt()),wg.push(t)},aZ=function(t,e){const r=Wc(t).className;lr[r].annotations.push(e)},l9=function(t,e){const r=Wc(t).className,n=lr[r];if(typeof e=="string"){const i=e.trim();i.startsWith("<<")&&i.endsWith(">>")?n.annotations.push(Uc(i.substring(2,i.length-2))):i.indexOf(")")>0?n.methods.push(Uc(i)):i&&n.members.push(Uc(i))}},sZ=function(t,e){Array.isArray(e)&&(e.reverse(),e.forEach(r=>l9(t,r)))},oZ=function(t){return t.substring(0,1)===":"?pe.sanitizeText(t.substr(1).trim(),nt()):Uc(t.trim())},Eg=function(t,e){t.split(",").forEach(function(r){let n=r;r[0].match(/\d/)&&(n=kg+n),typeof lr[n]<"u"&&lr[n].cssClasses.push(e)})},lZ=function(t,e){const r=nt();t.split(",").forEach(function(n){typeof e<"u"&&(lr[n].tooltip=pe.sanitizeText(e,r))})},cZ=function(t){return lr[t].tooltip},uZ=function(t,e,r){const n=nt();t.split(",").forEach(function(i){let a=i;i[0].match(/\d/)&&(a=kg+a),typeof lr[a]<"u"&&(lr[a].link=Se.formatUrl(e,n),n.securityLevel==="sandbox"?lr[a].linkTarget="_top":typeof r=="string"?lr[a].linkTarget=Uc(r):lr[a].linkTarget="_blank")}),Eg(t,"clickable")},hZ=function(t,e,r){t.split(",").forEach(function(n){fZ(n,e,r),lr[n].haveCallback=!0}),Eg(t,"clickable")},fZ=function(t,e,r){const n=nt();let i=t,a=o9(i);if(n.securityLevel==="loose"&&!(typeof e>"u")&&typeof lr[i]<"u"){let s=[];if(typeof r=="string"){s=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let o=0;o<s.length;o++){let l=s[o].trim();l.charAt(0)==='"'&&l.charAt(l.length-1)==='"'&&(l=l.substr(1,l.length-2)),s[o]=l}}s.length===0&&s.push(a),Yc.push(function(){const o=document.querySelector(`[id="${a}"]`);o!==null&&o.addEventListener("click",function(){Se.runFunc(e,...s)},!1)})}},dZ=function(t){Yc.forEach(function(e){e(t)})},pZ={LINE:0,DOTTED_LINE:1},gZ={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3,LOLLIPOP:4},c9=function(t){let e=St(".mermaidTooltip");(e._groups||e)[0][0]===null&&(e=St("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),St(t).select("svg").selectAll("g.node").on("mouseover",function(){const i=St(this);if(i.attr("title")===null)return;const s=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(i.attr("title")).style("left",window.scrollX+s.left+(s.right-s.left)/2+"px").style("top",window.scrollY+s.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/&lt;br\/&gt;/g,"<br/>")),i.classed("hover",!0)}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),St(this).classed("hover",!1)})};Yc.push(c9);let u9="TB";const Jo={parseDirective:JK,setAccTitle:Yn,getAccTitle:ui,getAccDescription:fi,setAccDescription:hi,getConfig:()=>nt().class,addClass:Tg,bindFunctions:dZ,clear:tZ,getClass:eZ,getClasses:rZ,addAnnotation:aZ,getRelations:nZ,addRelation:iZ,getDirection:()=>u9,setDirection:t=>{u9=t},addMember:l9,addMembers:sZ,cleanupLabel:oZ,lineType:pZ,relationType:gZ,setClickEvent:hZ,setCssClass:Eg,setLink:uZ,getTooltip:cZ,setTooltip:lZ,lookUpDomId:o9};var Cg,h9;function yZ(){if(h9)return Cg;h9=1;var t=Wf;function e(){this.__data__=new t,this.size=0}return Cg=e,Cg}var Sg,f9;function mZ(){if(f9)return Sg;f9=1;function t(e){var r=this.__data__,n=r.delete(e);return this.size=r.size,n}return Sg=t,Sg}var Ag,d9;function bZ(){if(d9)return Ag;d9=1;function t(e){return this.__data__.get(e)}return Ag=t,Ag}var Mg,p9;function _Z(){if(p9)return Mg;p9=1;function t(e){return this.__data__.has(e)}return Mg=t,Mg}var Lg,g9;function vZ(){if(g9)return Lg;g9=1;var t=Wf,e=Zp,r=Qp,n=200;function i(a,s){var o=this.__data__;if(o instanceof t){var l=o.__data__;if(!e||l.length<n-1)return l.push([a,s]),this.size=++o.size,this;o=this.__data__=new r(l)}return o.set(a,s),this.size=o.size,this}return Lg=i,Lg}var Rg,y9;function v1(){if(y9)return Rg;y9=1;var t=Wf,e=yZ(),r=mZ(),n=bZ(),i=_Z(),a=vZ();function s(o){var l=this.__data__=new t(o);this.size=l.size}return s.prototype.clear=e,s.prototype.delete=r,s.prototype.get=n,s.prototype.has=i,s.prototype.set=a,Rg=s,Rg}var Ig,m9;function Ng(){if(m9)return Ig;m9=1;function t(e,r){for(var n=-1,i=e==null?0:e.length;++n<i&&r(e[n],n,e)!==!1;);return e}return Ig=t,Ig}var Bg,b9;function _9(){if(b9)return Bg;b9=1;var t=qs,e=function(){try{var r=t(Object,"defineProperty");return r({},"",{}),r}catch{}}();return Bg=e,Bg}var Dg,v9;function x1(){if(v9)return Dg;v9=1;var t=_9();function e(r,n,i){n=="__proto__"&&t?t(r,n,{configurable:!0,enumerable:!0,value:i,writable:!0}):r[n]=i}return Dg=e,Dg}var Og,x9;function k1(){if(x9)return Og;x9=1;var t=x1(),e=Wo,r=Object.prototype,n=r.hasOwnProperty;function i(a,s,o){var l=a[s];(!(n.call(a,s)&&e(l,o))||o===void 0&&!(s in a))&&t(a,s,o)}return Og=i,Og}var Fg,k9;function Hc(){if(k9)return Fg;k9=1;var t=k1(),e=x1();function r(n,i,a,s){var o=!a;a||(a={});for(var l=-1,u=i.length;++l<u;){var h=i[l],d=s?s(a[h],n[h],h,a,n):void 0;d===void 0&&(d=n[h]),o?e(a,h,d):t(a,h,d)}return a}return Fg=r,Fg}var Pg,w9;function xZ(){if(w9)return Pg;w9=1;function t(e,r){for(var n=-1,i=Array(e);++n<e;)i[n]=r(n);return i}return Pg=t,Pg}var qg,T9;function Fi(){if(T9)return qg;T9=1;function t(e){return e!=null&&typeof e=="object"}return qg=t,qg}var Vg,E9;function kZ(){if(E9)return Vg;E9=1;var t=Ps,e=Fi(),r="[object Arguments]";function n(i){return e(i)&&t(i)==r}return Vg=n,Vg}var zg,C9;function Gc(){if(C9)return zg;C9=1;var t=kZ(),e=Fi(),r=Object.prototype,n=r.hasOwnProperty,i=r.propertyIsEnumerable,a=t(function(){return arguments}())?t:function(s){return e(s)&&n.call(s,"callee")&&!i.call(s,"callee")};return zg=a,zg}var Yg,S9;function gr(){if(S9)return Yg;S9=1;var t=Array.isArray;return Yg=t,Yg}var w1={exports:{}},Ug,A9;function wZ(){if(A9)return Ug;A9=1;function t(){return!1}return Ug=t,Ug}var M9;function tl(){return M9||(M9=1,function(t,e){var r=si,n=wZ(),i=e&&!e.nodeType&&e,a=i&&!0&&t&&!t.nodeType&&t,s=a&&a.exports===i,o=s?r.Buffer:void 0,l=o?o.isBuffer:void 0,u=l||n;t.exports=u}(w1,w1.exports)),w1.exports}var Wg,L9;function T1(){if(L9)return Wg;L9=1;var t=9007199254740991,e=/^(?:0|[1-9]\d*)$/;function r(n,i){var a=typeof n;return i=i==null?t:i,!!i&&(a=="number"||a!="symbol"&&e.test(n))&&n>-1&&n%1==0&&n<i}return Wg=r,Wg}var Hg,R9;function Gg(){if(R9)return Hg;R9=1;var t=9007199254740991;function e(r){return typeof r=="number"&&r>-1&&r%1==0&&r<=t}return Hg=e,Hg}var jg,I9;function TZ(){if(I9)return jg;I9=1;var t=Ps,e=Gg(),r=Fi(),n="[object Arguments]",i="[object Array]",a="[object Boolean]",s="[object Date]",o="[object Error]",l="[object Function]",u="[object Map]",h="[object Number]",d="[object Object]",f="[object RegExp]",p="[object Set]",m="[object String]",_="[object WeakMap]",y="[object ArrayBuffer]",b="[object DataView]",x="[object Float32Array]",k="[object Float64Array]",T="[object Int8Array]",C="[object Int16Array]",M="[object Int32Array]",S="[object Uint8Array]",R="[object Uint8ClampedArray]",A="[object Uint16Array]",L="[object Uint32Array]",v={};v[x]=v[k]=v[T]=v[C]=v[M]=v[S]=v[R]=v[A]=v[L]=!0,v[n]=v[i]=v[y]=v[a]=v[b]=v[s]=v[o]=v[l]=v[u]=v[h]=v[d]=v[f]=v[p]=v[m]=v[_]=!1;function B(w){return r(w)&&e(w.length)&&!!v[t(w)]}return jg=B,jg}var $g,N9;function E1(){if(N9)return $g;N9=1;function t(e){return function(r){return e(r)}}return $g=t,$g}var C1={exports:{}},B9;function Xg(){return B9||(B9=1,function(t,e){var r=Xk,n=e&&!e.nodeType&&e,i=n&&!0&&t&&!t.nodeType&&t,a=i&&i.exports===n,s=a&&r.process,o=function(){try{var l=i&&i.require&&i.require("util").types;return l||s&&s.binding&&s.binding("util")}catch{}}();t.exports=o}(C1,C1.exports)),C1.exports}var Kg,D9;function jc(){if(D9)return Kg;D9=1;var t=TZ(),e=E1(),r=Xg(),n=r&&r.isTypedArray,i=n?e(n):t;return Kg=i,Kg}var Zg,O9;function F9(){if(O9)return Zg;O9=1;var t=xZ(),e=Gc(),r=gr(),n=tl(),i=T1(),a=jc(),s=Object.prototype,o=s.hasOwnProperty;function l(u,h){var d=r(u),f=!d&&e(u),p=!d&&!f&&n(u),m=!d&&!f&&!p&&a(u),_=d||f||p||m,y=_?t(u.length,String):[],b=y.length;for(var x in u)(h||o.call(u,x))&&!(_&&(x=="length"||p&&(x=="offset"||x=="parent")||m&&(x=="buffer"||x=="byteLength"||x=="byteOffset")||i(x,b)))&&y.push(x);return y}return Zg=l,Zg}var Qg,P9;function S1(){if(P9)return Qg;P9=1;var t=Object.prototype;function e(r){var n=r&&r.constructor,i=typeof n=="function"&&n.prototype||t;return r===i}return Qg=e,Qg}var Jg,q9;function V9(){if(q9)return Jg;q9=1;function t(e,r){return function(n){return e(r(n))}}return Jg=t,Jg}var ty,z9;function EZ(){if(z9)return ty;z9=1;var t=V9(),e=t(Object.keys,Object);return ty=e,ty}var ey,Y9;function ry(){if(Y9)return ey;Y9=1;var t=S1(),e=EZ(),r=Object.prototype,n=r.hasOwnProperty;function i(a){if(!t(a))return e(a);var s=[];for(var o in Object(a))n.call(a,o)&&o!="constructor"&&s.push(o);return s}return ey=i,ey}var ny,U9;function oa(){if(U9)return ny;U9=1;var t=Yo,e=Gg();function r(n){return n!=null&&e(n.length)&&!t(n)}return ny=r,ny}var iy,W9;function ts(){if(W9)return iy;W9=1;var t=F9(),e=ry(),r=oa();function n(i){return r(i)?t(i):e(i)}return iy=n,iy}var ay,H9;function CZ(){if(H9)return ay;H9=1;var t=Hc(),e=ts();function r(n,i){return n&&t(i,e(i),n)}return ay=r,ay}var sy,G9;function SZ(){if(G9)return sy;G9=1;function t(e){var r=[];if(e!=null)for(var n in Object(e))r.push(n);return r}return sy=t,sy}var oy,j9;function AZ(){if(j9)return oy;j9=1;var t=Vn,e=S1(),r=SZ(),n=Object.prototype,i=n.hasOwnProperty;function a(s){if(!t(s))return r(s);var o=e(s),l=[];for(var u in s)u=="constructor"&&(o||!i.call(s,u))||l.push(u);return l}return oy=a,oy}var ly,$9;function Ws(){if($9)return ly;$9=1;var t=F9(),e=AZ(),r=oa();function n(i){return r(i)?t(i,!0):e(i)}return ly=n,ly}var cy,X9;function MZ(){if(X9)return cy;X9=1;var t=Hc(),e=Ws();function r(n,i){return n&&t(i,e(i),n)}return cy=r,cy}var A1={exports:{}},K9;function Z9(){return K9||(K9=1,function(t,e){var r=si,n=e&&!e.nodeType&&e,i=n&&!0&&t&&!t.nodeType&&t,a=i&&i.exports===n,s=a?r.Buffer:void 0,o=s?s.allocUnsafe:void 0;function l(u,h){if(h)return u.slice();var d=u.length,f=o?o(d):new u.constructor(d);return u.copy(f),f}t.exports=l}(A1,A1.exports)),A1.exports}var uy,Q9;function J9(){if(Q9)return uy;Q9=1;function t(e,r){var n=-1,i=e.length;for(r||(r=Array(i));++n<i;)r[n]=e[n];return r}return uy=t,uy}var hy,tT;function eT(){if(tT)return hy;tT=1;function t(e,r){for(var n=-1,i=e==null?0:e.length,a=0,s=[];++n<i;){var o=e[n];r(o,n,e)&&(s[a++]=o)}return s}return hy=t,hy}var fy,rT;function nT(){if(rT)return fy;rT=1;function t(){return[]}return fy=t,fy}var dy,iT;function py(){if(iT)return dy;iT=1;var t=eT(),e=nT(),r=Object.prototype,n=r.propertyIsEnumerable,i=Object.getOwnPropertySymbols,a=i?function(s){return s==null?[]:(s=Object(s),t(i(s),function(o){return n.call(s,o)}))}:e;return dy=a,dy}var gy,aT;function LZ(){if(aT)return gy;aT=1;var t=Hc(),e=py();function r(n,i){return t(n,e(n),i)}return gy=r,gy}var yy,sT;function my(){if(sT)return yy;sT=1;function t(e,r){for(var n=-1,i=r.length,a=e.length;++n<i;)e[a+n]=r[n];return e}return yy=t,yy}var by,oT;function M1(){if(oT)return by;oT=1;var t=V9(),e=t(Object.getPrototypeOf,Object);return by=e,by}var _y,lT;function cT(){if(lT)return _y;lT=1;var t=my(),e=M1(),r=py(),n=nT(),i=Object.getOwnPropertySymbols,a=i?function(s){for(var o=[];s;)t(o,r(s)),s=e(s);return o}:n;return _y=a,_y}var vy,uT;function RZ(){if(uT)return vy;uT=1;var t=Hc(),e=cT();function r(n,i){return t(n,e(n),i)}return vy=r,vy}var xy,hT;function fT(){if(hT)return xy;hT=1;var t=my(),e=gr();function r(n,i,a){var s=i(n);return e(n)?s:t(s,a(n))}return xy=r,xy}var ky,dT;function pT(){if(dT)return ky;dT=1;var t=fT(),e=py(),r=ts();function n(i){return t(i,r,e)}return ky=n,ky}var wy,gT;function IZ(){if(gT)return wy;gT=1;var t=fT(),e=cT(),r=Ws();function n(i){return t(i,r,e)}return wy=n,wy}var Ty,yT;function NZ(){if(yT)return Ty;yT=1;var t=qs,e=si,r=t(e,"DataView");return Ty=r,Ty}var Ey,mT;function BZ(){if(mT)return Ey;mT=1;var t=qs,e=si,r=t(e,"Promise");return Ey=r,Ey}var Cy,bT;function _T(){if(bT)return Cy;bT=1;var t=qs,e=si,r=t(e,"Set");return Cy=r,Cy}var Sy,vT;function DZ(){if(vT)return Sy;vT=1;var t=qs,e=si,r=t(e,"WeakMap");return Sy=r,Sy}var Ay,xT;function el(){if(xT)return Ay;xT=1;var t=NZ(),e=Zp,r=BZ(),n=_T(),i=DZ(),a=Ps,s=ew,o="[object Map]",l="[object Object]",u="[object Promise]",h="[object Set]",d="[object WeakMap]",f="[object DataView]",p=s(t),m=s(e),_=s(r),y=s(n),b=s(i),x=a;return(t&&x(new t(new ArrayBuffer(1)))!=f||e&&x(new e)!=o||r&&x(r.resolve())!=u||n&&x(new n)!=h||i&&x(new i)!=d)&&(x=function(k){var T=a(k),C=T==l?k.constructor:void 0,M=C?s(C):"";if(M)switch(M){case p:return f;case m:return o;case _:return u;case y:return h;case b:return d}return T}),Ay=x,Ay}var My,kT;function OZ(){if(kT)return My;kT=1;var t=Object.prototype,e=t.hasOwnProperty;function r(n){var i=n.length,a=new n.constructor(i);return i&&typeof n[0]=="string"&&e.call(n,"index")&&(a.index=n.index,a.input=n.input),a}return My=r,My}var Ly,wT;function TT(){if(wT)return Ly;wT=1;var t=si,e=t.Uint8Array;return Ly=e,Ly}var Ry,ET;function Iy(){if(ET)return Ry;ET=1;var t=TT();function e(r){var n=new r.constructor(r.byteLength);return new t(n).set(new t(r)),n}return Ry=e,Ry}var Ny,CT;function FZ(){if(CT)return Ny;CT=1;var t=Iy();function e(r,n){var i=n?t(r.buffer):r.buffer;return new r.constructor(i,r.byteOffset,r.byteLength)}return Ny=e,Ny}var By,ST;function PZ(){if(ST)return By;ST=1;var t=/\w*$/;function e(r){var n=new r.constructor(r.source,t.exec(r));return n.lastIndex=r.lastIndex,n}return By=e,By}var Dy,AT;function qZ(){if(AT)return Dy;AT=1;var t=zo,e=t?t.prototype:void 0,r=e?e.valueOf:void 0;function n(i){return r?Object(r.call(i)):{}}return Dy=n,Dy}var Oy,MT;function LT(){if(MT)return Oy;MT=1;var t=Iy();function e(r,n){var i=n?t(r.buffer):r.buffer;return new r.constructor(i,r.byteOffset,r.length)}return Oy=e,Oy}var Fy,RT;function VZ(){if(RT)return Fy;RT=1;var t=Iy(),e=FZ(),r=PZ(),n=qZ(),i=LT(),a="[object Boolean]",s="[object Date]",o="[object Map]",l="[object Number]",u="[object RegExp]",h="[object Set]",d="[object String]",f="[object Symbol]",p="[object ArrayBuffer]",m="[object DataView]",_="[object Float32Array]",y="[object Float64Array]",b="[object Int8Array]",x="[object Int16Array]",k="[object Int32Array]",T="[object Uint8Array]",C="[object Uint8ClampedArray]",M="[object Uint16Array]",S="[object Uint32Array]";function R(A,L,v){var B=A.constructor;switch(L){case p:return t(A);case a:case s:return new B(+A);case m:return e(A,v);case _:case y:case b:case x:case k:case T:case C:case M:case S:return i(A,v);case o:return new B;case l:case d:return new B(A);case u:return r(A);case h:return new B;case f:return n(A)}}return Fy=R,Fy}var Py,IT;function NT(){if(IT)return Py;IT=1;var t=Vn,e=Object.create,r=function(){function n(){}return function(i){if(!t(i))return{};if(e)return e(i);n.prototype=i;var a=new n;return n.prototype=void 0,a}}();return Py=r,Py}var qy,BT;function DT(){if(BT)return qy;BT=1;var t=NT(),e=M1(),r=S1();function n(i){return typeof i.constructor=="function"&&!r(i)?t(e(i)):{}}return qy=n,qy}var Vy,OT;function zZ(){if(OT)return Vy;OT=1;var t=el(),e=Fi(),r="[object Map]";function n(i){return e(i)&&t(i)==r}return Vy=n,Vy}var zy,FT;function YZ(){if(FT)return zy;FT=1;var t=zZ(),e=E1(),r=Xg(),n=r&&r.isMap,i=n?e(n):t;return zy=i,zy}var Yy,PT;function UZ(){if(PT)return Yy;PT=1;var t=el(),e=Fi(),r="[object Set]";function n(i){return e(i)&&t(i)==r}return Yy=n,Yy}var Uy,qT;function WZ(){if(qT)return Uy;qT=1;var t=UZ(),e=E1(),r=Xg(),n=r&&r.isSet,i=n?e(n):t;return Uy=i,Uy}var Wy,VT;function zT(){if(VT)return Wy;VT=1;var t=v1(),e=Ng(),r=k1(),n=CZ(),i=MZ(),a=Z9(),s=J9(),o=LZ(),l=RZ(),u=pT(),h=IZ(),d=el(),f=OZ(),p=VZ(),m=DT(),_=gr(),y=tl(),b=YZ(),x=Vn,k=WZ(),T=ts(),C=Ws(),M=1,S=2,R=4,A="[object Arguments]",L="[object Array]",v="[object Boolean]",B="[object Date]",w="[object Error]",D="[object Function]",N="[object GeneratorFunction]",z="[object Map]",X="[object Number]",ct="[object Object]",J="[object RegExp]",Y="[object Set]",$="[object String]",lt="[object Symbol]",ut="[object WeakMap]",W="[object ArrayBuffer]",tt="[object DataView]",K="[object Float32Array]",it="[object Float64Array]",Z="[object Int8Array]",V="[object Int16Array]",Q="[object Int32Array]",q="[object Uint8Array]",U="[object Uint8ClampedArray]",F="[object Uint16Array]",j="[object Uint32Array]",P={};P[A]=P[L]=P[W]=P[tt]=P[v]=P[B]=P[K]=P[it]=P[Z]=P[V]=P[Q]=P[z]=P[X]=P[ct]=P[J]=P[Y]=P[$]=P[lt]=P[q]=P[U]=P[F]=P[j]=!0,P[w]=P[D]=P[ut]=!1;function et(at,It,Lt,Rt,Ct,pt){var mt,vt=It&M,Tt=It&S,ft=It&R;if(Lt&&(mt=Ct?Lt(at,Rt,Ct,pt):Lt(at)),mt!==void 0)return mt;if(!x(at))return at;var le=_(at);if(le){if(mt=f(at),!vt)return s(at,mt)}else{var Dt=d(at),Gt=Dt==D||Dt==N;if(y(at))return a(at,vt);if(Dt==ct||Dt==A||Gt&&!Ct){if(mt=Tt||Gt?{}:m(at),!vt)return Tt?l(at,i(mt,at)):o(at,n(mt,at))}else{if(!P[Dt])return Ct?at:{};mt=p(at,Dt,vt)}}pt||(pt=new t);var $t=pt.get(at);if($t)return $t;pt.set(at,mt),k(at)?at.forEach(function(jt){mt.add(et(jt,It,Lt,jt,at,pt))}):b(at)&&at.forEach(function(jt,Ft){mt.set(Ft,et(jt,It,Lt,Ft,at,pt))});var Qt=ft?Tt?h:u:Tt?C:T,we=le?void 0:Qt(at);return e(we||at,function(jt,Ft){we&&(Ft=jt,jt=at[Ft]),r(mt,Ft,et(jt,It,Lt,Ft,at,pt))}),mt}return Wy=et,Wy}var Hy,YT;function HZ(){if(YT)return Hy;YT=1;var t=zT(),e=4;function r(n){return t(n,e)}return Hy=r,Hy}var Gy,UT;function jy(){if(UT)return Gy;UT=1;function t(e){return function(){return e}}return Gy=t,Gy}var $y={exports:{}},Xy,WT;function GZ(){if(WT)return Xy;WT=1;function t(e){return function(r,n,i){for(var a=-1,s=Object(r),o=i(r),l=o.length;l--;){var u=o[e?l:++a];if(n(s[u],u,s)===!1)break}return r}}return Xy=t,Xy}var Ky,HT;function Zy(){if(HT)return Ky;HT=1;var t=GZ(),e=t();return Ky=e,Ky}var Qy,GT;function Jy(){if(GT)return Qy;GT=1;var t=Zy(),e=ts();function r(n,i){return n&&t(n,i,e)}return Qy=r,Qy}var tm,jT;function jZ(){if(jT)return tm;jT=1;var t=oa();function e(r,n){return function(i,a){if(i==null)return i;if(!t(i))return r(i,a);for(var s=i.length,o=n?s:-1,l=Object(i);(n?o--:++o<s)&&a(l[o],o,l)!==!1;);return i}}return tm=e,tm}var em,$T;function L1(){if($T)return em;$T=1;var t=Jy(),e=jZ(),r=e(t);return em=r,em}var rm,XT;function Hs(){if(XT)return rm;XT=1;function t(e){return e}return rm=t,rm}var nm,KT;function ZT(){if(KT)return nm;KT=1;var t=Hs();function e(r){return typeof r=="function"?r:t}return nm=e,nm}var im,QT;function JT(){if(QT)return im;QT=1;var t=Ng(),e=L1(),r=ZT(),n=gr();function i(a,s){var o=n(a)?t:e;return o(a,r(s))}return im=i,im}var tE;function am(){return tE||(tE=1,function(t){t.exports=JT()}($y)),$y.exports}var sm,eE;function $Z(){if(eE)return sm;eE=1;var t=L1();function e(r,n){var i=[];return t(r,function(a,s,o){n(a,s,o)&&i.push(a)}),i}return sm=e,sm}var om,rE;function XZ(){if(rE)return om;rE=1;var t="__lodash_hash_undefined__";function e(r){return this.__data__.set(r,t),this}return om=e,om}var lm,nE;function KZ(){if(nE)return lm;nE=1;function t(e){return this.__data__.has(e)}return lm=t,lm}var cm,iE;function aE(){if(iE)return cm;iE=1;var t=Qp,e=XZ(),r=KZ();function n(i){var a=-1,s=i==null?0:i.length;for(this.__data__=new t;++a<s;)this.add(i[a])}return n.prototype.add=n.prototype.push=e,n.prototype.has=r,cm=n,cm}var um,sE;function ZZ(){if(sE)return um;sE=1;function t(e,r){for(var n=-1,i=e==null?0:e.length;++n<i;)if(r(e[n],n,e))return!0;return!1}return um=t,um}var hm,oE;function lE(){if(oE)return hm;oE=1;function t(e,r){return e.has(r)}return hm=t,hm}var fm,cE;function uE(){if(cE)return fm;cE=1;var t=aE(),e=ZZ(),r=lE(),n=1,i=2;function a(s,o,l,u,h,d){var f=l&n,p=s.length,m=o.length;if(p!=m&&!(f&&m>p))return!1;var _=d.get(s),y=d.get(o);if(_&&y)return _==o&&y==s;var b=-1,x=!0,k=l&i?new t:void 0;for(d.set(s,o),d.set(o,s);++b<p;){var T=s[b],C=o[b];if(u)var M=f?u(C,T,b,o,s,d):u(T,C,b,s,o,d);if(M!==void 0){if(M)continue;x=!1;break}if(k){if(!e(o,function(S,R){if(!r(k,R)&&(T===S||h(T,S,l,u,d)))return k.push(R)})){x=!1;break}}else if(!(T===C||h(T,C,l,u,d))){x=!1;break}}return d.delete(s),d.delete(o),x}return fm=a,fm}var dm,hE;function QZ(){if(hE)return dm;hE=1;function t(e){var r=-1,n=Array(e.size);return e.forEach(function(i,a){n[++r]=[a,i]}),n}return dm=t,dm}var pm,fE;function gm(){if(fE)return pm;fE=1;function t(e){var r=-1,n=Array(e.size);return e.forEach(function(i){n[++r]=i}),n}return pm=t,pm}var ym,dE;function JZ(){if(dE)return ym;dE=1;var t=zo,e=TT(),r=Wo,n=uE(),i=QZ(),a=gm(),s=1,o=2,l="[object Boolean]",u="[object Date]",h="[object Error]",d="[object Map]",f="[object Number]",p="[object RegExp]",m="[object Set]",_="[object String]",y="[object Symbol]",b="[object ArrayBuffer]",x="[object DataView]",k=t?t.prototype:void 0,T=k?k.valueOf:void 0;function C(M,S,R,A,L,v,B){switch(R){case x:if(M.byteLength!=S.byteLength||M.byteOffset!=S.byteOffset)return!1;M=M.buffer,S=S.buffer;case b:return!(M.byteLength!=S.byteLength||!v(new e(M),new e(S)));case l:case u:case f:return r(+M,+S);case h:return M.name==S.name&&M.message==S.message;case p:case _:return M==S+"";case d:var w=i;case m:var D=A&s;if(w||(w=a),M.size!=S.size&&!D)return!1;var N=B.get(M);if(N)return N==S;A|=o,B.set(M,S);var z=n(w(M),w(S),A,L,v,B);return B.delete(M),z;case y:if(T)return T.call(M)==T.call(S)}return!1}return ym=C,ym}var mm,pE;function tQ(){if(pE)return mm;pE=1;var t=pT(),e=1,r=Object.prototype,n=r.hasOwnProperty;function i(a,s,o,l,u,h){var d=o&e,f=t(a),p=f.length,m=t(s),_=m.length;if(p!=_&&!d)return!1;for(var y=p;y--;){var b=f[y];if(!(d?b in s:n.call(s,b)))return!1}var x=h.get(a),k=h.get(s);if(x&&k)return x==s&&k==a;var T=!0;h.set(a,s),h.set(s,a);for(var C=d;++y<p;){b=f[y];var M=a[b],S=s[b];if(l)var R=d?l(S,M,b,s,a,h):l(M,S,b,a,s,h);if(!(R===void 0?M===S||u(M,S,o,l,h):R)){T=!1;break}C||(C=b=="constructor")}if(T&&!C){var A=a.constructor,L=s.constructor;A!=L&&"constructor"in a&&"constructor"in s&&!(typeof A=="function"&&A instanceof A&&typeof L=="function"&&L instanceof L)&&(T=!1)}return h.delete(a),h.delete(s),T}return mm=i,mm}var bm,gE;function eQ(){if(gE)return bm;gE=1;var t=v1(),e=uE(),r=JZ(),n=tQ(),i=el(),a=gr(),s=tl(),o=jc(),l=1,u="[object Arguments]",h="[object Array]",d="[object Object]",f=Object.prototype,p=f.hasOwnProperty;function m(_,y,b,x,k,T){var C=a(_),M=a(y),S=C?h:i(_),R=M?h:i(y);S=S==u?d:S,R=R==u?d:R;var A=S==d,L=R==d,v=S==R;if(v&&s(_)){if(!s(y))return!1;C=!0,A=!1}if(v&&!A)return T||(T=new t),C||o(_)?e(_,y,b,x,k,T):r(_,y,S,b,x,k,T);if(!(b&l)){var B=A&&p.call(_,"__wrapped__"),w=L&&p.call(y,"__wrapped__");if(B||w){var D=B?_.value():_,N=w?y.value():y;return T||(T=new t),k(D,N,b,x,T)}}return v?(T||(T=new t),n(_,y,b,x,k,T)):!1}return bm=m,bm}var _m,yE;function mE(){if(yE)return _m;yE=1;var t=eQ(),e=Fi();function r(n,i,a,s,o){return n===i?!0:n==null||i==null||!e(n)&&!e(i)?n!==n&&i!==i:t(n,i,a,s,r,o)}return _m=r,_m}var vm,bE;function rQ(){if(bE)return vm;bE=1;var t=v1(),e=mE(),r=1,n=2;function i(a,s,o,l){var u=o.length,h=u,d=!l;if(a==null)return!h;for(a=Object(a);u--;){var f=o[u];if(d&&f[2]?f[1]!==a[f[0]]:!(f[0]in a))return!1}for(;++u<h;){f=o[u];var p=f[0],m=a[p],_=f[1];if(d&&f[2]){if(m===void 0&&!(p in a))return!1}else{var y=new t;if(l)var b=l(m,_,p,a,s,y);if(!(b===void 0?e(_,m,r|n,l,y):b))return!1}}return!0}return vm=i,vm}var xm,_E;function vE(){if(_E)return xm;_E=1;var t=Vn;function e(r){return r===r&&!t(r)}return xm=e,xm}var km,xE;function nQ(){if(xE)return km;xE=1;var t=vE(),e=ts();function r(n){for(var i=e(n),a=i.length;a--;){var s=i[a],o=n[s];i[a]=[s,o,t(o)]}return i}return km=r,km}var wm,kE;function wE(){if(kE)return wm;kE=1;function t(e,r){return function(n){return n==null?!1:n[e]===r&&(r!==void 0||e in Object(n))}}return wm=t,wm}var Tm,TE;function iQ(){if(TE)return Tm;TE=1;var t=rQ(),e=nQ(),r=wE();function n(i){var a=e(i);return a.length==1&&a[0][2]?r(a[0][0],a[0][1]):function(s){return s===i||t(s,i,a)}}return Tm=n,Tm}var Em,EE;function rl(){if(EE)return Em;EE=1;var t=Ps,e=Fi(),r="[object Symbol]";function n(i){return typeof i=="symbol"||e(i)&&t(i)==r}return Em=n,Em}var Cm,CE;function Sm(){if(CE)return Cm;CE=1;var t=gr(),e=rl(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;function i(a,s){if(t(a))return!1;var o=typeof a;return o=="number"||o=="symbol"||o=="boolean"||a==null||e(a)?!0:n.test(a)||!r.test(a)||s!=null&&a in Object(s)}return Cm=i,Cm}var Am,SE;function aQ(){if(SE)return Am;SE=1;var t=Gf,e=500;function r(n){var i=t(n,function(s){return a.size===e&&a.clear(),s}),a=i.cache;return i}return Am=r,Am}var Mm,AE;function sQ(){if(AE)return Mm;AE=1;var t=aQ(),e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,r=/\\(\\)?/g,n=t(function(i){var a=[];return i.charCodeAt(0)===46&&a.push(""),i.replace(e,function(s,o,l,u){a.push(l?u.replace(r,"$1"):o||s)}),a});return Mm=n,Mm}var Lm,ME;function R1(){if(ME)return Lm;ME=1;function t(e,r){for(var n=-1,i=e==null?0:e.length,a=Array(i);++n<i;)a[n]=r(e[n],n,e);return a}return Lm=t,Lm}var Rm,LE;function oQ(){if(LE)return Rm;LE=1;var t=zo,e=R1(),r=gr(),n=rl(),i=1/0,a=t?t.prototype:void 0,s=a?a.toString:void 0;function o(l){if(typeof l=="string")return l;if(r(l))return e(l,o)+"";if(n(l))return s?s.call(l):"";var u=l+"";return u=="0"&&1/l==-i?"-0":u}return Rm=o,Rm}var Im,RE;function IE(){if(RE)return Im;RE=1;var t=oQ();function e(r){return r==null?"":t(r)}return Im=e,Im}var Nm,NE;function I1(){if(NE)return Nm;NE=1;var t=gr(),e=Sm(),r=sQ(),n=IE();function i(a,s){return t(a)?a:e(a,s)?[a]:r(n(a))}return Nm=i,Nm}var Bm,BE;function $c(){if(BE)return Bm;BE=1;var t=rl(),e=1/0;function r(n){if(typeof n=="string"||t(n))return n;var i=n+"";return i=="0"&&1/n==-e?"-0":i}return Bm=r,Bm}var Dm,DE;function N1(){if(DE)return Dm;DE=1;var t=I1(),e=$c();function r(n,i){i=t(i,n);for(var a=0,s=i.length;n!=null&&a<s;)n=n[e(i[a++])];return a&&a==s?n:void 0}return Dm=r,Dm}var Om,OE;function lQ(){if(OE)return Om;OE=1;var t=N1();function e(r,n,i){var a=r==null?void 0:t(r,n);return a===void 0?i:a}return Om=e,Om}var Fm,FE;function cQ(){if(FE)return Fm;FE=1;function t(e,r){return e!=null&&r in Object(e)}return Fm=t,Fm}var Pm,PE;function qE(){if(PE)return Pm;PE=1;var t=I1(),e=Gc(),r=gr(),n=T1(),i=Gg(),a=$c();function s(o,l,u){l=t(l,o);for(var h=-1,d=l.length,f=!1;++h<d;){var p=a(l[h]);if(!(f=o!=null&&u(o,p)))break;o=o[p]}return f||++h!=d?f:(d=o==null?0:o.length,!!d&&i(d)&&n(p,d)&&(r(o)||e(o)))}return Pm=s,Pm}var qm,VE;function zE(){if(VE)return qm;VE=1;var t=cQ(),e=qE();function r(n,i){return n!=null&&e(n,i,t)}return qm=r,qm}var Vm,YE;function uQ(){if(YE)return Vm;YE=1;var t=mE(),e=lQ(),r=zE(),n=Sm(),i=vE(),a=wE(),s=$c(),o=1,l=2;function u(h,d){return n(h)&&i(d)?a(s(h),d):function(f){var p=e(f,h);return p===void 0&&p===d?r(f,h):t(d,p,o|l)}}return Vm=u,Vm}var zm,UE;function WE(){if(UE)return zm;UE=1;function t(e){return function(r){return r==null?void 0:r[e]}}return zm=t,zm}var Ym,HE;function hQ(){if(HE)return Ym;HE=1;var t=N1();function e(r){return function(n){return t(n,r)}}return Ym=e,Ym}var Um,GE;function fQ(){if(GE)return Um;GE=1;var t=WE(),e=hQ(),r=Sm(),n=$c();function i(a){return r(a)?t(n(a)):e(a)}return Um=i,Um}var Wm,jE;function la(){if(jE)return Wm;jE=1;var t=iQ(),e=uQ(),r=Hs(),n=gr(),i=fQ();function a(s){return typeof s=="function"?s:s==null?r:typeof s=="object"?n(s)?e(s[0],s[1]):t(s):i(s)}return Wm=a,Wm}var Hm,$E;function XE(){if($E)return Hm;$E=1;var t=eT(),e=$Z(),r=la(),n=gr();function i(a,s){var o=n(a)?t:e;return o(a,r(s,3))}return Hm=i,Hm}var Gm,KE;function dQ(){if(KE)return Gm;KE=1;var t=Object.prototype,e=t.hasOwnProperty;function r(n,i){return n!=null&&e.call(n,i)}return Gm=r,Gm}var jm,ZE;function $m(){if(ZE)return jm;ZE=1;var t=dQ(),e=qE();function r(n,i){return n!=null&&e(n,i,t)}return jm=r,jm}var Xm,QE;function pQ(){if(QE)return Xm;QE=1;var t=ry(),e=el(),r=Gc(),n=gr(),i=oa(),a=tl(),s=S1(),o=jc(),l="[object Map]",u="[object Set]",h=Object.prototype,d=h.hasOwnProperty;function f(p){if(p==null)return!0;if(i(p)&&(n(p)||typeof p=="string"||typeof p.splice=="function"||a(p)||o(p)||r(p)))return!p.length;var m=e(p);if(m==l||m==u)return!p.size;if(s(p))return!t(p).length;for(var _ in p)if(d.call(p,_))return!1;return!0}return Xm=f,Xm}var Km,JE;function tC(){if(JE)return Km;JE=1;function t(e){return e===void 0}return Km=t,Km}var Zm,eC;function rC(){if(eC)return Zm;eC=1;var t=L1(),e=oa();function r(n,i){var a=-1,s=e(n)?Array(n.length):[];return t(n,function(o,l,u){s[++a]=i(o,l,u)}),s}return Zm=r,Zm}var Qm,nC;function iC(){if(nC)return Qm;nC=1;var t=R1(),e=la(),r=rC(),n=gr();function i(a,s){var o=n(a)?t:r;return o(a,e(s,3))}return Qm=i,Qm}var Jm,aC;function gQ(){if(aC)return Jm;aC=1;function t(e,r,n,i){var a=-1,s=e==null?0:e.length;for(i&&s&&(n=e[++a]);++a<s;)n=r(n,e[a],a,e);return n}return Jm=t,Jm}var tb,sC;function yQ(){if(sC)return tb;sC=1;function t(e,r,n,i,a){return a(e,function(s,o,l){n=i?(i=!1,s):r(n,s,o,l)}),n}return tb=t,tb}var eb,oC;function lC(){if(oC)return eb;oC=1;var t=gQ(),e=L1(),r=la(),n=yQ(),i=gr();function a(s,o,l){var u=i(s)?t:n,h=arguments.length<3;return u(s,r(o,4),l,h,e)}return eb=a,eb}var rb,cC;function mQ(){if(cC)return rb;cC=1;var t=Ps,e=gr(),r=Fi(),n="[object String]";function i(a){return typeof a=="string"||!e(a)&&r(a)&&t(a)==n}return rb=i,rb}var nb,uC;function bQ(){if(uC)return nb;uC=1;var t=WE(),e=t("length");return nb=e,nb}var ib,hC;function _Q(){if(hC)return ib;hC=1;var t="\\ud800-\\udfff",e="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",i=e+r+n,a="\\ufe0e\\ufe0f",s="\\u200d",o=RegExp("["+s+t+i+a+"]");function l(u){return o.test(u)}return ib=l,ib}var ab,fC;function vQ(){if(fC)return ab;fC=1;var t="\\ud800-\\udfff",e="\\u0300-\\u036f",r="\\ufe20-\\ufe2f",n="\\u20d0-\\u20ff",i=e+r+n,a="\\ufe0e\\ufe0f",s="["+t+"]",o="["+i+"]",l="\\ud83c[\\udffb-\\udfff]",u="(?:"+o+"|"+l+")",h="[^"+t+"]",d="(?:\\ud83c[\\udde6-\\uddff]){2}",f="[\\ud800-\\udbff][\\udc00-\\udfff]",p="\\u200d",m=u+"?",_="["+a+"]?",y="(?:"+p+"(?:"+[h,d,f].join("|")+")"+_+m+")*",b=_+m+y,x="(?:"+[h+o+"?",o,d,f,s].join("|")+")",k=RegExp(l+"(?="+l+")|"+x+b,"g");function T(C){for(var M=k.lastIndex=0;k.test(C);)++M;return M}return ab=T,ab}var sb,dC;function xQ(){if(dC)return sb;dC=1;var t=bQ(),e=_Q(),r=vQ();function n(i){return e(i)?r(i):t(i)}return sb=n,sb}var ob,pC;function kQ(){if(pC)return ob;pC=1;var t=ry(),e=el(),r=oa(),n=mQ(),i=xQ(),a="[object Map]",s="[object Set]";function o(l){if(l==null)return 0;if(r(l))return n(l)?i(l):l.length;var u=e(l);return u==a||u==s?l.size:t(l).length}return ob=o,ob}var lb,gC;function wQ(){if(gC)return lb;gC=1;var t=Ng(),e=NT(),r=Jy(),n=la(),i=M1(),a=gr(),s=tl(),o=Yo,l=Vn,u=jc();function h(d,f,p){var m=a(d),_=m||s(d)||u(d);if(f=n(f,4),p==null){var y=d&&d.constructor;_?p=m?new y:[]:l(d)?p=o(y)?e(i(d)):{}:p={}}return(_?t:r)(d,function(b,x,k){return f(p,b,x,k)}),p}return lb=h,lb}var cb,yC;function TQ(){if(yC)return cb;yC=1;var t=zo,e=Gc(),r=gr(),n=t?t.isConcatSpreadable:void 0;function i(a){return r(a)||e(a)||!!(n&&a&&a[n])}return cb=i,cb}var ub,mC;function hb(){if(mC)return ub;mC=1;var t=my(),e=TQ();function r(n,i,a,s,o){var l=-1,u=n.length;for(a||(a=e),o||(o=[]);++l<u;){var h=n[l];i>0&&a(h)?i>1?r(h,i-1,a,s,o):t(o,h):s||(o[o.length]=h)}return o}return ub=r,ub}var fb,bC;function EQ(){if(bC)return fb;bC=1;function t(e,r,n){switch(n.length){case 0:return e.call(r);case 1:return e.call(r,n[0]);case 2:return e.call(r,n[0],n[1]);case 3:return e.call(r,n[0],n[1],n[2])}return e.apply(r,n)}return fb=t,fb}var db,_C;function vC(){if(_C)return db;_C=1;var t=EQ(),e=Math.max;function r(n,i,a){return i=e(i===void 0?n.length-1:i,0),function(){for(var s=arguments,o=-1,l=e(s.length-i,0),u=Array(l);++o<l;)u[o]=s[i+o];o=-1;for(var h=Array(i+1);++o<i;)h[o]=s[o];return h[i]=a(u),t(n,this,h)}}return db=r,db}var pb,xC;function CQ(){if(xC)return pb;xC=1;var t=jy(),e=_9(),r=Hs(),n=e?function(i,a){return e(i,"toString",{configurable:!0,enumerable:!1,value:t(a),writable:!0})}:r;return pb=n,pb}var gb,kC;function SQ(){if(kC)return gb;kC=1;var t=800,e=16,r=Date.now;function n(i){var a=0,s=0;return function(){var o=r(),l=e-(o-s);if(s=o,l>0){if(++a>=t)return arguments[0]}else a=0;return i.apply(void 0,arguments)}}return gb=n,gb}var yb,wC;function TC(){if(wC)return yb;wC=1;var t=CQ(),e=SQ(),r=e(t);return yb=r,yb}var mb,EC;function B1(){if(EC)return mb;EC=1;var t=Hs(),e=vC(),r=TC();function n(i,a){return r(e(i,a,t),i+"")}return mb=n,mb}var bb,CC;function SC(){if(CC)return bb;CC=1;function t(e,r,n,i){for(var a=e.length,s=n+(i?1:-1);i?s--:++s<a;)if(r(e[s],s,e))return s;return-1}return bb=t,bb}var _b,AC;function AQ(){if(AC)return _b;AC=1;function t(e){return e!==e}return _b=t,_b}var vb,MC;function MQ(){if(MC)return vb;MC=1;function t(e,r,n){for(var i=n-1,a=e.length;++i<a;)if(e[i]===r)return i;return-1}return vb=t,vb}var xb,LC;function LQ(){if(LC)return xb;LC=1;var t=SC(),e=AQ(),r=MQ();function n(i,a,s){return a===a?r(i,a,s):t(i,e,s)}return xb=n,xb}var kb,RC;function RQ(){if(RC)return kb;RC=1;var t=LQ();function e(r,n){var i=r==null?0:r.length;return!!i&&t(r,n,0)>-1}return kb=e,kb}var wb,IC;function IQ(){if(IC)return wb;IC=1;function t(e,r,n){for(var i=-1,a=e==null?0:e.length;++i<a;)if(n(r,e[i]))return!0;return!1}return wb=t,wb}var Tb,NC;function NQ(){if(NC)return Tb;NC=1;function t(){}return Tb=t,Tb}var Eb,BC;function BQ(){if(BC)return Eb;BC=1;var t=_T(),e=NQ(),r=gm(),n=1/0,i=t&&1/r(new t([,-0]))[1]==n?function(a){return new t(a)}:e;return Eb=i,Eb}var Cb,DC;function DQ(){if(DC)return Cb;DC=1;var t=aE(),e=RQ(),r=IQ(),n=lE(),i=BQ(),a=gm(),s=200;function o(l,u,h){var d=-1,f=e,p=l.length,m=!0,_=[],y=_;if(h)m=!1,f=r;else if(p>=s){var b=u?null:i(l);if(b)return a(b);m=!1,f=n,y=new t}else y=u?[]:_;t:for(;++d<p;){var x=l[d],k=u?u(x):x;if(x=h||x!==0?x:0,m&&k===k){for(var T=y.length;T--;)if(y[T]===k)continue t;u&&y.push(k),_.push(x)}else f(y,k,h)||(y!==_&&y.push(k),_.push(x))}return _}return Cb=o,Cb}var Sb,OC;function FC(){if(OC)return Sb;OC=1;var t=oa(),e=Fi();function r(n){return e(n)&&t(n)}return Sb=r,Sb}var Ab,PC;function OQ(){if(PC)return Ab;PC=1;var t=hb(),e=B1(),r=DQ(),n=FC(),i=e(function(a){return r(t(a,1,n,!0))});return Ab=i,Ab}var Mb,qC;function FQ(){if(qC)return Mb;qC=1;var t=R1();function e(r,n){return t(n,function(i){return r[i]})}return Mb=e,Mb}var Lb,VC;function zC(){if(VC)return Lb;VC=1;var t=FQ(),e=ts();function r(n){return n==null?[]:t(n,e(n))}return Lb=r,Lb}var D1;if(typeof fn=="function")try{D1={clone:HZ(),constant:jy(),each:am(),filter:XE(),has:$m(),isArray:gr(),isEmpty:pQ(),isFunction:Yo,isUndefined:tC(),keys:ts(),map:iC(),reduce:lC(),size:kQ(),transform:wQ(),union:OQ(),values:zC()}}catch{}D1||(D1=window._);var Wn=D1,_e=Wn,Rb=Le,PQ="\0",Gs="\0",YC="";function Le(t){this._isDirected=_e.has(t,"directed")?t.directed:!0,this._isMultigraph=_e.has(t,"multigraph")?t.multigraph:!1,this._isCompound=_e.has(t,"compound")?t.compound:!1,this._label=void 0,this._defaultNodeLabelFn=_e.constant(void 0),this._defaultEdgeLabelFn=_e.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[Gs]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}Le.prototype._nodeCount=0,Le.prototype._edgeCount=0,Le.prototype.isDirected=function(){return this._isDirected},Le.prototype.isMultigraph=function(){return this._isMultigraph},Le.prototype.isCompound=function(){return this._isCompound},Le.prototype.setGraph=function(t){return this._label=t,this},Le.prototype.graph=function(){return this._label},Le.prototype.setDefaultNodeLabel=function(t){return _e.isFunction(t)||(t=_e.constant(t)),this._defaultNodeLabelFn=t,this},Le.prototype.nodeCount=function(){return this._nodeCount},Le.prototype.nodes=function(){return _e.keys(this._nodes)},Le.prototype.sources=function(){var t=this;return _e.filter(this.nodes(),function(e){return _e.isEmpty(t._in[e])})},Le.prototype.sinks=function(){var t=this;return _e.filter(this.nodes(),function(e){return _e.isEmpty(t._out[e])})},Le.prototype.setNodes=function(t,e){var r=arguments,n=this;return _e.each(t,function(i){r.length>1?n.setNode(i,e):n.setNode(i)}),this},Le.prototype.setNode=function(t,e){return _e.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=Gs,this._children[t]={},this._children[Gs][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},Le.prototype.node=function(t){return this._nodes[t]},Le.prototype.hasNode=function(t){return _e.has(this._nodes,t)},Le.prototype.removeNode=function(t){var e=this;if(_e.has(this._nodes,t)){var r=function(n){e.removeEdge(e._edgeObjs[n])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],_e.each(this.children(t),function(n){e.setParent(n)}),delete this._children[t]),_e.each(_e.keys(this._in[t]),r),delete this._in[t],delete this._preds[t],_e.each(_e.keys(this._out[t]),r),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},Le.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(_e.isUndefined(e))e=Gs;else{e+="";for(var r=e;!_e.isUndefined(r);r=this.parent(r))if(r===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},Le.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},Le.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if(e!==Gs)return e}},Le.prototype.children=function(t){if(_e.isUndefined(t)&&(t=Gs),this._isCompound){var e=this._children[t];if(e)return _e.keys(e)}else{if(t===Gs)return this.nodes();if(this.hasNode(t))return[]}},Le.prototype.predecessors=function(t){var e=this._preds[t];if(e)return _e.keys(e)},Le.prototype.successors=function(t){var e=this._sucs[t];if(e)return _e.keys(e)},Le.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return _e.union(e,this.successors(t))},Le.prototype.isLeaf=function(t){var e;return this.isDirected()?e=this.successors(t):e=this.neighbors(t),e.length===0},Le.prototype.filterNodes=function(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var r=this;_e.each(this._nodes,function(a,s){t(s)&&e.setNode(s,a)}),_e.each(this._edgeObjs,function(a){e.hasNode(a.v)&&e.hasNode(a.w)&&e.setEdge(a,r.edge(a))});var n={};function i(a){var s=r.parent(a);return s===void 0||e.hasNode(s)?(n[a]=s,s):s in n?n[s]:i(s)}return this._isCompound&&_e.each(e.nodes(),function(a){e.setParent(a,i(a))}),e},Le.prototype.setDefaultEdgeLabel=function(t){return _e.isFunction(t)||(t=_e.constant(t)),this._defaultEdgeLabelFn=t,this},Le.prototype.edgeCount=function(){return this._edgeCount},Le.prototype.edges=function(){return _e.values(this._edgeObjs)},Le.prototype.setPath=function(t,e){var r=this,n=arguments;return _e.reduce(t,function(i,a){return n.length>1?r.setEdge(i,a,e):r.setEdge(i,a),a}),this},Le.prototype.setEdge=function(){var t,e,r,n,i=!1,a=arguments[0];typeof a=="object"&&a!==null&&"v"in a?(t=a.v,e=a.w,r=a.name,arguments.length===2&&(n=arguments[1],i=!0)):(t=a,e=arguments[1],r=arguments[3],arguments.length>2&&(n=arguments[2],i=!0)),t=""+t,e=""+e,_e.isUndefined(r)||(r=""+r);var s=Xc(this._isDirected,t,e,r);if(_e.has(this._edgeLabels,s))return i&&(this._edgeLabels[s]=n),this;if(!_e.isUndefined(r)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[s]=i?n:this._defaultEdgeLabelFn(t,e,r);var o=qQ(this._isDirected,t,e,r);return t=o.v,e=o.w,Object.freeze(o),this._edgeObjs[s]=o,UC(this._preds[e],t),UC(this._sucs[t],e),this._in[e][s]=o,this._out[t][s]=o,this._edgeCount++,this},Le.prototype.edge=function(t,e,r){var n=arguments.length===1?Ib(this._isDirected,arguments[0]):Xc(this._isDirected,t,e,r);return this._edgeLabels[n]},Le.prototype.hasEdge=function(t,e,r){var n=arguments.length===1?Ib(this._isDirected,arguments[0]):Xc(this._isDirected,t,e,r);return _e.has(this._edgeLabels,n)},Le.prototype.removeEdge=function(t,e,r){var n=arguments.length===1?Ib(this._isDirected,arguments[0]):Xc(this._isDirected,t,e,r),i=this._edgeObjs[n];return i&&(t=i.v,e=i.w,delete this._edgeLabels[n],delete this._edgeObjs[n],WC(this._preds[e],t),WC(this._sucs[t],e),delete this._in[e][n],delete this._out[t][n],this._edgeCount--),this},Le.prototype.inEdges=function(t,e){var r=this._in[t];if(r){var n=_e.values(r);return e?_e.filter(n,function(i){return i.v===e}):n}},Le.prototype.outEdges=function(t,e){var r=this._out[t];if(r){var n=_e.values(r);return e?_e.filter(n,function(i){return i.w===e}):n}},Le.prototype.nodeEdges=function(t,e){var r=this.inEdges(t,e);if(r)return r.concat(this.outEdges(t,e))};function UC(t,e){t[e]?t[e]++:t[e]=1}function WC(t,e){--t[e]||delete t[e]}function Xc(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}return i+YC+a+YC+(_e.isUndefined(n)?PQ:n)}function qQ(t,e,r,n){var i=""+e,a=""+r;if(!t&&i>a){var s=i;i=a,a=s}var o={v:i,w:a};return n&&(o.name=n),o}function Ib(t,e){return Xc(t,e.v,e.w,e.name)}var VQ="2.1.8",zQ={Graph:Rb,version:VQ},Pi=Wn,YQ=Rb,UQ={write:WQ,read:jQ};function WQ(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:HQ(t),edges:GQ(t)};return Pi.isUndefined(t.graph())||(e.value=Pi.clone(t.graph())),e}function HQ(t){return Pi.map(t.nodes(),function(e){var r=t.node(e),n=t.parent(e),i={v:e};return Pi.isUndefined(r)||(i.value=r),Pi.isUndefined(n)||(i.parent=n),i})}function GQ(t){return Pi.map(t.edges(),function(e){var r=t.edge(e),n={v:e.v,w:e.w};return Pi.isUndefined(e.name)||(n.name=e.name),Pi.isUndefined(r)||(n.value=r),n})}function jQ(t){var e=new YQ(t.options).setGraph(t.value);return Pi.each(t.nodes,function(r){e.setNode(r.v,r.value),r.parent&&e.setParent(r.v,r.parent)}),Pi.each(t.edges,function(r){e.setEdge({v:r.v,w:r.w,name:r.name},r.value)}),e}var O1=Wn,$Q=XQ;function XQ(t){var e={},r=[],n;function i(a){O1.has(e,a)||(e[a]=!0,n.push(a),O1.each(t.successors(a),i),O1.each(t.predecessors(a),i))}return O1.each(t.nodes(),function(a){n=[],i(a),n.length&&r.push(n)}),r}var HC=Wn,GC=Hn;function Hn(){this._arr=[],this._keyIndices={}}Hn.prototype.size=function(){return this._arr.length},Hn.prototype.keys=function(){return this._arr.map(function(t){return t.key})},Hn.prototype.has=function(t){return HC.has(this._keyIndices,t)},Hn.prototype.priority=function(t){var e=this._keyIndices[t];if(e!==void 0)return this._arr[e].priority},Hn.prototype.min=function(){if(this.size()===0)throw new Error("Queue underflow");return this._arr[0].key},Hn.prototype.add=function(t,e){var r=this._keyIndices;if(t=String(t),!HC.has(r,t)){var n=this._arr,i=n.length;return r[t]=i,n.push({key:t,priority:e}),this._decrease(i),!0}return!1},Hn.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},Hn.prototype.decrease=function(t,e){var r=this._keyIndices[t];if(e>this._arr[r].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[r].priority+" New: "+e);this._arr[r].priority=e,this._decrease(r)},Hn.prototype._heapify=function(t){var e=this._arr,r=2*t,n=r+1,i=t;r<e.length&&(i=e[r].priority<e[i].priority?r:i,n<e.length&&(i=e[n].priority<e[i].priority?n:i),i!==t&&(this._swap(t,i),this._heapify(i)))},Hn.prototype._decrease=function(t){for(var e=this._arr,r=e[t].priority,n;t!==0&&(n=t>>1,!(e[n].priority<r));)this._swap(t,n),t=n},Hn.prototype._swap=function(t,e){var r=this._arr,n=this._keyIndices,i=r[t],a=r[e];r[t]=a,r[e]=i,n[a.key]=t,n[i.key]=e};var KQ=Wn,ZQ=GC,jC=JQ,QQ=KQ.constant(1);function JQ(t,e,r,n){return tJ(t,String(e),r||QQ,n||function(i){return t.outEdges(i)})}function tJ(t,e,r,n){var i={},a=new ZQ,s,o,l=function(u){var h=u.v!==s?u.v:u.w,d=i[h],f=r(u),p=o.distance+f;if(f<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+u+" Weight: "+f);p<d.distance&&(d.distance=p,d.predecessor=s,a.decrease(h,p))};for(t.nodes().forEach(function(u){var h=u===e?0:Number.POSITIVE_INFINITY;i[u]={distance:h},a.add(u,h)});a.size()>0&&(s=a.removeMin(),o=i[s],o.distance!==Number.POSITIVE_INFINITY);)n(s).forEach(l);return i}var eJ=jC,rJ=Wn,nJ=iJ;function iJ(t,e,r){return rJ.transform(t.nodes(),function(n,i){n[i]=eJ(t,i,e,r)},{})}var $C=Wn,XC=aJ;function aJ(t){var e=0,r=[],n={},i=[];function a(s){var o=n[s]={onStack:!0,lowlink:e,index:e++};if(r.push(s),t.successors(s).forEach(function(h){$C.has(n,h)?n[h].onStack&&(o.lowlink=Math.min(o.lowlink,n[h].index)):(a(h),o.lowlink=Math.min(o.lowlink,n[h].lowlink))}),o.lowlink===o.index){var l=[],u;do u=r.pop(),n[u].onStack=!1,l.push(u);while(s!==u);i.push(l)}}return t.nodes().forEach(function(s){$C.has(n,s)||a(s)}),i}var sJ=Wn,oJ=XC,lJ=cJ;function cJ(t){return sJ.filter(oJ(t),function(e){return e.length>1||e.length===1&&t.hasEdge(e[0],e[0])})}var uJ=Wn,hJ=dJ,fJ=uJ.constant(1);function dJ(t,e,r){return pJ(t,e||fJ,r||function(n){return t.outEdges(n)})}function pJ(t,e,r){var n={},i=t.nodes();return i.forEach(function(a){n[a]={},n[a][a]={distance:0},i.forEach(function(s){a!==s&&(n[a][s]={distance:Number.POSITIVE_INFINITY})}),r(a).forEach(function(s){var o=s.v===a?s.w:s.v,l=e(s);n[a][o]={distance:l,predecessor:a}})}),i.forEach(function(a){var s=n[a];i.forEach(function(o){var l=n[o];i.forEach(function(u){var h=l[a],d=s[u],f=l[u],p=h.distance+d.distance;p<f.distance&&(f.distance=p,f.predecessor=d.predecessor)})})}),n}var Kc=Wn,KC=ZC;ZC.CycleException=F1;function ZC(t){var e={},r={},n=[];function i(a){if(Kc.has(r,a))throw new F1;Kc.has(e,a)||(r[a]=!0,e[a]=!0,Kc.each(t.predecessors(a),i),delete r[a],n.push(a))}if(Kc.each(t.sinks(),i),Kc.size(e)!==t.nodeCount())throw new F1;return n}function F1(){}F1.prototype=new Error;var QC=KC,gJ=yJ;function yJ(t){try{QC(t)}catch(e){if(e instanceof QC.CycleException)return!1;throw e}return!0}var P1=Wn,JC=mJ;function mJ(t,e,r){P1.isArray(e)||(e=[e]);var n=(t.isDirected()?t.successors:t.neighbors).bind(t),i=[],a={};return P1.each(e,function(s){if(!t.hasNode(s))throw new Error("Graph does not have node: "+s);tS(t,s,r==="post",a,n,i)}),i}function tS(t,e,r,n,i,a){P1.has(n,e)||(n[e]=!0,r||a.push(e),P1.each(i(e),function(s){tS(t,s,r,n,i,a)}),r&&a.push(e))}var bJ=JC,_J=vJ;function vJ(t,e){return bJ(t,e,"post")}var xJ=JC,kJ=wJ;function wJ(t,e){return xJ(t,e,"pre")}var eS=Wn,TJ=Rb,EJ=GC,CJ=SJ;function SJ(t,e){var r=new TJ,n={},i=new EJ,a;function s(l){var u=l.v===a?l.w:l.v,h=i.priority(u);if(h!==void 0){var d=e(l);d<h&&(n[u]=a,i.decrease(u,d))}}if(t.nodeCount()===0)return r;eS.each(t.nodes(),function(l){i.add(l,Number.POSITIVE_INFINITY),r.setNode(l)}),i.decrease(t.nodes()[0],0);for(var o=!1;i.size()>0;){if(a=i.removeMin(),eS.has(n,a))r.setEdge(a,n[a]);else{if(o)throw new Error("Input graph is not connected: "+t);o=!0}t.nodeEdges(a).forEach(s)}return r}var AJ={components:$Q,dijkstra:jC,dijkstraAll:nJ,findCycles:lJ,floydWarshall:hJ,isAcyclic:gJ,postorder:_J,preorder:kJ,prim:CJ,tarjan:XC,topsort:KC},rS=zQ,cr={Graph:rS.Graph,json:UQ,alg:AJ,version:rS.version},Nb,nS;function yi(){if(nS)return Nb;nS=1;var t;if(typeof fn=="function")try{t=cr}catch{}return t||(t=window.graphlib),Nb=t,Nb}var Bb,iS;function MJ(){if(iS)return Bb;iS=1;var t=zT(),e=1,r=4;function n(i){return t(i,e|r)}return Bb=n,Bb}var Db,aS;function q1(){if(aS)return Db;aS=1;var t=Wo,e=oa(),r=T1(),n=Vn;function i(a,s,o){if(!n(o))return!1;var l=typeof s;return(l=="number"?e(o)&&r(s,o.length):l=="string"&&s in o)?t(o[s],a):!1}return Db=i,Db}var Ob,sS;function oS(){if(sS)return Ob;sS=1;var t=B1(),e=Wo,r=q1(),n=Ws(),i=Object.prototype,a=i.hasOwnProperty,s=t(function(o,l){o=Object(o);var u=-1,h=l.length,d=h>2?l[2]:void 0;for(d&&r(l[0],l[1],d)&&(h=1);++u<h;)for(var f=l[u],p=n(f),m=-1,_=p.length;++m<_;){var y=p[m],b=o[y];(b===void 0||e(b,i[y])&&!a.call(o,y))&&(o[y]=f[y])}return o});return Ob=s,Ob}var Fb,lS;function LJ(){if(lS)return Fb;lS=1;var t=la(),e=oa(),r=ts();function n(i){return function(a,s,o){var l=Object(a);if(!e(a)){var u=t(s,3);a=r(a),s=function(d){return u(l[d],d,l)}}var h=i(a,s,o);return h>-1?l[u?a[h]:h]:void 0}}return Fb=n,Fb}var Pb,cS;function RJ(){if(cS)return Pb;cS=1;var t=/\s/;function e(r){for(var n=r.length;n--&&t.test(r.charAt(n)););return n}return Pb=e,Pb}var qb,uS;function IJ(){if(uS)return qb;uS=1;var t=RJ(),e=/^\s+/;function r(n){return n&&n.slice(0,t(n)+1).replace(e,"")}return qb=r,qb}var Vb,hS;function NJ(){if(hS)return Vb;hS=1;var t=IJ(),e=Vn,r=rl(),n=0/0,i=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,s=/^0o[0-7]+$/i,o=parseInt;function l(u){if(typeof u=="number")return u;if(r(u))return n;if(e(u)){var h=typeof u.valueOf=="function"?u.valueOf():u;u=e(h)?h+"":h}if(typeof u!="string")return u===0?u:+u;u=t(u);var d=a.test(u);return d||s.test(u)?o(u.slice(2),d?2:8):i.test(u)?n:+u}return Vb=l,Vb}var zb,fS;function dS(){if(fS)return zb;fS=1;var t=NJ(),e=1/0,r=17976931348623157e292;function n(i){if(!i)return i===0?i:0;if(i=t(i),i===e||i===-e){var a=i<0?-1:1;return a*r}return i===i?i:0}return zb=n,zb}var Yb,pS;function BJ(){if(pS)return Yb;pS=1;var t=dS();function e(r){var n=t(r),i=n%1;return n===n?i?n-i:n:0}return Yb=e,Yb}var Ub,gS;function DJ(){if(gS)return Ub;gS=1;var t=SC(),e=la(),r=BJ(),n=Math.max;function i(a,s,o){var l=a==null?0:a.length;if(!l)return-1;var u=o==null?0:r(o);return u<0&&(u=n(l+u,0)),t(a,e(s,3),u)}return Ub=i,Ub}var Wb,yS;function OJ(){if(yS)return Wb;yS=1;var t=LJ(),e=DJ(),r=t(e);return Wb=r,Wb}var Hb,mS;function bS(){if(mS)return Hb;mS=1;var t=hb();function e(r){var n=r==null?0:r.length;return n?t(r,1):[]}return Hb=e,Hb}var Gb,_S;function FJ(){if(_S)return Gb;_S=1;var t=Zy(),e=ZT(),r=Ws();function n(i,a){return i==null?i:t(i,e(a),r)}return Gb=n,Gb}var jb,vS;function PJ(){if(vS)return jb;vS=1;function t(e){var r=e==null?0:e.length;return r?e[r-1]:void 0}return jb=t,jb}var $b,xS;function qJ(){if(xS)return $b;xS=1;var t=x1(),e=Jy(),r=la();function n(i,a){var s={};return a=r(a,3),e(i,function(o,l,u){t(s,l,a(o,l,u))}),s}return $b=n,$b}var Xb,kS;function Kb(){if(kS)return Xb;kS=1;var t=rl();function e(r,n,i){for(var a=-1,s=r.length;++a<s;){var o=r[a],l=n(o);if(l!=null&&(u===void 0?l===l&&!t(l):i(l,u)))var u=l,h=o}return h}return Xb=e,Xb}var Zb,wS;function VJ(){if(wS)return Zb;wS=1;function t(e,r){return e>r}return Zb=t,Zb}var Qb,TS;function zJ(){if(TS)return Qb;TS=1;var t=Kb(),e=VJ(),r=Hs();function n(i){return i&&i.length?t(i,r,e):void 0}return Qb=n,Qb}var Jb,ES;function CS(){if(ES)return Jb;ES=1;var t=x1(),e=Wo;function r(n,i,a){(a!==void 0&&!e(n[i],a)||a===void 0&&!(i in n))&&t(n,i,a)}return Jb=r,Jb}var t3,SS;function AS(){if(SS)return t3;SS=1;var t=Ps,e=M1(),r=Fi(),n="[object Object]",i=Function.prototype,a=Object.prototype,s=i.toString,o=a.hasOwnProperty,l=s.call(Object);function u(h){if(!r(h)||t(h)!=n)return!1;var d=e(h);if(d===null)return!0;var f=o.call(d,"constructor")&&d.constructor;return typeof f=="function"&&f instanceof f&&s.call(f)==l}return t3=u,t3}var e3,MS;function LS(){if(MS)return e3;MS=1;function t(e,r){if(!(r==="constructor"&&typeof e[r]=="function")&&r!="__proto__")return e[r]}return e3=t,e3}var r3,RS;function YJ(){if(RS)return r3;RS=1;var t=Hc(),e=Ws();function r(n){return t(n,e(n))}return r3=r,r3}var n3,IS;function UJ(){if(IS)return n3;IS=1;var t=CS(),e=Z9(),r=LT(),n=J9(),i=DT(),a=Gc(),s=gr(),o=FC(),l=tl(),u=Yo,h=Vn,d=AS(),f=jc(),p=LS(),m=YJ();function _(y,b,x,k,T,C,M){var S=p(y,x),R=p(b,x),A=M.get(R);if(A){t(y,x,A);return}var L=C?C(S,R,x+"",y,b,M):void 0,v=L===void 0;if(v){var B=s(R),w=!B&&l(R),D=!B&&!w&&f(R);L=R,B||w||D?s(S)?L=S:o(S)?L=n(S):w?(v=!1,L=e(R,!0)):D?(v=!1,L=r(R,!0)):L=[]:d(R)||a(R)?(L=S,a(S)?L=m(S):(!h(S)||u(S))&&(L=i(R))):v=!1}v&&(M.set(R,L),T(L,R,k,C,M),M.delete(R)),t(y,x,L)}return n3=_,n3}var i3,NS;function WJ(){if(NS)return i3;NS=1;var t=v1(),e=CS(),r=Zy(),n=UJ(),i=Vn,a=Ws(),s=LS();function o(l,u,h,d,f){l!==u&&r(u,function(p,m){if(f||(f=new t),i(p))n(l,u,m,h,o,d,f);else{var _=d?d(s(l,m),p,m+"",l,u,f):void 0;_===void 0&&(_=p),e(l,m,_)}},a)}return i3=o,i3}var a3,BS;function HJ(){if(BS)return a3;BS=1;var t=B1(),e=q1();function r(n){return t(function(i,a){var s=-1,o=a.length,l=o>1?a[o-1]:void 0,u=o>2?a[2]:void 0;for(l=n.length>3&&typeof l=="function"?(o--,l):void 0,u&&e(a[0],a[1],u)&&(l=o<3?void 0:l,o=1),i=Object(i);++s<o;){var h=a[s];h&&n(i,h,s,l)}return i})}return a3=r,a3}var s3,DS;function GJ(){if(DS)return s3;DS=1;var t=WJ(),e=HJ(),r=e(function(n,i,a){t(n,i,a)});return s3=r,s3}var o3,OS;function FS(){if(OS)return o3;OS=1;function t(e,r){return e<r}return o3=t,o3}var l3,PS;function jJ(){if(PS)return l3;PS=1;var t=Kb(),e=FS(),r=Hs();function n(i){return i&&i.length?t(i,r,e):void 0}return l3=n,l3}var c3,qS;function $J(){if(qS)return c3;qS=1;var t=Kb(),e=la(),r=FS();function n(i,a){return i&&i.length?t(i,e(a,2),r):void 0}return c3=n,c3}var u3,VS;function XJ(){if(VS)return u3;VS=1;var t=si,e=function(){return t.Date.now()};return u3=e,u3}var h3,zS;function KJ(){if(zS)return h3;zS=1;var t=k1(),e=I1(),r=T1(),n=Vn,i=$c();function a(s,o,l,u){if(!n(s))return s;o=e(o,s);for(var h=-1,d=o.length,f=d-1,p=s;p!=null&&++h<d;){var m=i(o[h]),_=l;if(m==="__proto__"||m==="constructor"||m==="prototype")return s;if(h!=f){var y=p[m];_=u?u(y,m,p):void 0,_===void 0&&(_=n(y)?y:r(o[h+1])?[]:{})}t(p,m,_),p=p[m]}return s}return h3=a,h3}var f3,YS;function ZJ(){if(YS)return f3;YS=1;var t=N1(),e=KJ(),r=I1();function n(i,a,s){for(var o=-1,l=a.length,u={};++o<l;){var h=a[o],d=t(i,h);s(d,h)&&e(u,r(h,i),d)}return u}return f3=n,f3}var d3,US;function QJ(){if(US)return d3;US=1;var t=ZJ(),e=zE();function r(n,i){return t(n,i,function(a,s){return e(n,s)})}return d3=r,d3}var p3,WS;function JJ(){if(WS)return p3;WS=1;var t=bS(),e=vC(),r=TC();function n(i){return r(e(i,void 0,t),i+"")}return p3=n,p3}var g3,HS;function GS(){if(HS)return g3;HS=1;var t=QJ(),e=JJ(),r=e(function(n,i){return n==null?{}:t(n,i)});return g3=r,g3}var y3,jS;function ttt(){if(jS)return y3;jS=1;var t=Math.ceil,e=Math.max;function r(n,i,a,s){for(var o=-1,l=e(t((i-n)/(a||1)),0),u=Array(l);l--;)u[s?l:++o]=n,n+=a;return u}return y3=r,y3}var m3,$S;function ett(){if($S)return m3;$S=1;var t=ttt(),e=q1(),r=dS();function n(i){return function(a,s,o){return o&&typeof o!="number"&&e(a,s,o)&&(s=o=void 0),a=r(a),s===void 0?(s=a,a=0):s=r(s),o=o===void 0?a<s?1:-1:r(o),t(a,s,o,i)}}return m3=n,m3}var b3,XS;function KS(){if(XS)return b3;XS=1;var t=ett(),e=t();return b3=e,b3}var _3,ZS;function rtt(){if(ZS)return _3;ZS=1;function t(e,r){var n=e.length;for(e.sort(r);n--;)e[n]=e[n].value;return e}return _3=t,_3}var v3,QS;function ntt(){if(QS)return v3;QS=1;var t=rl();function e(r,n){if(r!==n){var i=r!==void 0,a=r===null,s=r===r,o=t(r),l=n!==void 0,u=n===null,h=n===n,d=t(n);if(!u&&!d&&!o&&r>n||o&&l&&h&&!u&&!d||a&&l&&h||!i&&h||!s)return 1;if(!a&&!o&&!d&&r<n||d&&i&&s&&!a&&!o||u&&i&&s||!l&&s||!h)return-1}return 0}return v3=e,v3}var x3,JS;function itt(){if(JS)return x3;JS=1;var t=ntt();function e(r,n,i){for(var a=-1,s=r.criteria,o=n.criteria,l=s.length,u=i.length;++a<l;){var h=t(s[a],o[a]);if(h){if(a>=u)return h;var d=i[a];return h*(d=="desc"?-1:1)}}return r.index-n.index}return x3=e,x3}var k3,tA;function att(){if(tA)return k3;tA=1;var t=R1(),e=N1(),r=la(),n=rC(),i=rtt(),a=E1(),s=itt(),o=Hs(),l=gr();function u(h,d,f){d.length?d=t(d,function(_){return l(_)?function(y){return e(y,_.length===1?_[0]:_)}:_}):d=[o];var p=-1;d=t(d,a(r));var m=n(h,function(_,y,b){var x=t(d,function(k){return k(_)});return{criteria:x,index:++p,value:_}});return i(m,function(_,y){return s(_,y,f)})}return k3=u,k3}var w3,eA;function stt(){if(eA)return w3;eA=1;var t=hb(),e=att(),r=B1(),n=q1(),i=r(function(a,s){if(a==null)return[];var o=s.length;return o>1&&n(a,s[0],s[1])?s=[]:o>2&&n(s[0],s[1],s[2])&&(s=[s[0]]),e(a,t(s,1),[])});return w3=i,w3}var T3,rA;function nA(){if(rA)return T3;rA=1;var t=IE(),e=0;function r(n){var i=++e;return t(n)+i}return T3=r,T3}var E3,iA;function ott(){if(iA)return E3;iA=1;function t(e,r,n){for(var i=-1,a=e.length,s=r.length,o={};++i<a;){var l=i<s?r[i]:void 0;n(o,e[i],l)}return o}return E3=t,E3}var C3,aA;function ltt(){if(aA)return C3;aA=1;var t=k1(),e=ott();function r(n,i){return e(n||[],i||[],t)}return C3=r,C3}var S3,sA;function $e(){if(sA)return S3;sA=1;var t;if(typeof fn=="function")try{t={cloneDeep:MJ(),constant:jy(),defaults:oS(),each:am(),filter:XE(),find:OJ(),flatten:bS(),forEach:JT(),forIn:FJ(),has:$m(),isUndefined:tC(),last:PJ(),map:iC(),mapValues:qJ(),max:zJ(),merge:GJ(),min:jJ(),minBy:$J(),now:XJ(),pick:GS(),range:KS(),reduce:lC(),sortBy:stt(),uniqueId:nA(),values:zC(),zipObject:ltt()}}catch{}return t||(t=window._),S3=t,S3}var A3,oA;function ctt(){if(oA)return A3;oA=1,A3=t;function t(){var n={};n._next=n._prev=n,this._sentinel=n}t.prototype.dequeue=function(){var n=this._sentinel,i=n._prev;if(i!==n)return e(i),i},t.prototype.enqueue=function(n){var i=this._sentinel;n._prev&&n._next&&e(n),n._next=i._next,i._next._prev=n,i._next=n,n._prev=i},t.prototype.toString=function(){for(var n=[],i=this._sentinel,a=i._prev;a!==i;)n.push(JSON.stringify(a,r)),a=a._prev;return"["+n.join(", ")+"]"};function e(n){n._prev._next=n._next,n._next._prev=n._prev,delete n._next,delete n._prev}function r(n,i){if(n!=="_next"&&n!=="_prev")return i}return A3}var M3,lA;function utt(){if(lA)return M3;lA=1;var t=$e(),e=yi().Graph,r=ctt();M3=i;var n=t.constant(1);function i(u,h){if(u.nodeCount()<=1)return[];var d=o(u,h||n),f=a(d.graph,d.buckets,d.zeroIdx);return t.flatten(t.map(f,function(p){return u.outEdges(p.v,p.w)}),!0)}function a(u,h,d){for(var f=[],p=h[h.length-1],m=h[0],_;u.nodeCount();){for(;_=m.dequeue();)s(u,h,d,_);for(;_=p.dequeue();)s(u,h,d,_);if(u.nodeCount()){for(var y=h.length-2;y>0;--y)if(_=h[y].dequeue(),_){f=f.concat(s(u,h,d,_,!0));break}}}return f}function s(u,h,d,f,p){var m=p?[]:void 0;return t.forEach(u.inEdges(f.v),function(_){var y=u.edge(_),b=u.node(_.v);p&&m.push({v:_.v,w:_.w}),b.out-=y,l(h,d,b)}),t.forEach(u.outEdges(f.v),function(_){var y=u.edge(_),b=_.w,x=u.node(b);x.in-=y,l(h,d,x)}),u.removeNode(f.v),m}function o(u,h){var d=new e,f=0,p=0;t.forEach(u.nodes(),function(y){d.setNode(y,{v:y,in:0,out:0})}),t.forEach(u.edges(),function(y){var b=d.edge(y.v,y.w)||0,x=h(y),k=b+x;d.setEdge(y.v,y.w,k),p=Math.max(p,d.node(y.v).out+=x),f=Math.max(f,d.node(y.w).in+=x)});var m=t.range(p+f+3).map(function(){return new r}),_=f+1;return t.forEach(d.nodes(),function(y){l(m,_,d.node(y))}),{graph:d,buckets:m,zeroIdx:_}}function l(u,h,d){d.out?d.in?u[d.out-d.in+h].enqueue(d):u[u.length-1].enqueue(d):u[0].enqueue(d)}return M3}var L3,cA;function htt(){if(cA)return L3;cA=1;var t=$e(),e=utt();L3={run:r,undo:i};function r(a){var s=a.graph().acyclicer==="greedy"?e(a,o(a)):n(a);t.forEach(s,function(l){var u=a.edge(l);a.removeEdge(l),u.forwardName=l.name,u.reversed=!0,a.setEdge(l.w,l.v,u,t.uniqueId("rev"))});function o(l){return function(u){return l.edge(u).weight}}}function n(a){var s=[],o={},l={};function u(h){t.has(l,h)||(l[h]=!0,o[h]=!0,t.forEach(a.outEdges(h),function(d){t.has(o,d.w)?s.push(d):u(d.w)}),delete o[h])}return t.forEach(a.nodes(),u),s}function i(a){t.forEach(a.edges(),function(s){var o=a.edge(s);if(o.reversed){a.removeEdge(s);var l=o.forwardName;delete o.reversed,delete o.forwardName,a.setEdge(s.w,s.v,o,l)}})}return L3}var R3,uA;function vn(){if(uA)return R3;uA=1;var t=$e(),e=yi().Graph;R3={addDummyNode:r,simplify:n,asNonCompoundGraph:i,successorWeights:a,predecessorWeights:s,intersectRect:o,buildLayerMatrix:l,normalizeRanks:u,removeEmptyRanks:h,addBorderNode:d,maxRank:f,partition:p,time:m,notime:_};function r(y,b,x,k){var T;do T=t.uniqueId(k);while(y.hasNode(T));return x.dummy=b,y.setNode(T,x),T}function n(y){var b=new e().setGraph(y.graph());return t.forEach(y.nodes(),function(x){b.setNode(x,y.node(x))}),t.forEach(y.edges(),function(x){var k=b.edge(x.v,x.w)||{weight:0,minlen:1},T=y.edge(x);b.setEdge(x.v,x.w,{weight:k.weight+T.weight,minlen:Math.max(k.minlen,T.minlen)})}),b}function i(y){var b=new e({multigraph:y.isMultigraph()}).setGraph(y.graph());return t.forEach(y.nodes(),function(x){y.children(x).length||b.setNode(x,y.node(x))}),t.forEach(y.edges(),function(x){b.setEdge(x,y.edge(x))}),b}function a(y){var b=t.map(y.nodes(),function(x){var k={};return t.forEach(y.outEdges(x),function(T){k[T.w]=(k[T.w]||0)+y.edge(T).weight}),k});return t.zipObject(y.nodes(),b)}function s(y){var b=t.map(y.nodes(),function(x){var k={};return t.forEach(y.inEdges(x),function(T){k[T.v]=(k[T.v]||0)+y.edge(T).weight}),k});return t.zipObject(y.nodes(),b)}function o(y,b){var x=y.x,k=y.y,T=b.x-x,C=b.y-k,M=y.width/2,S=y.height/2;if(!T&&!C)throw new Error("Not possible to find intersection inside of the rectangle");var R,A;return Math.abs(C)*M>Math.abs(T)*S?(C<0&&(S=-S),R=S*T/C,A=S):(T<0&&(M=-M),R=M,A=M*C/T),{x:x+R,y:k+A}}function l(y){var b=t.map(t.range(f(y)+1),function(){return[]});return t.forEach(y.nodes(),function(x){var k=y.node(x),T=k.rank;t.isUndefined(T)||(b[T][k.order]=x)}),b}function u(y){var b=t.min(t.map(y.nodes(),function(x){return y.node(x).rank}));t.forEach(y.nodes(),function(x){var k=y.node(x);t.has(k,"rank")&&(k.rank-=b)})}function h(y){var b=t.min(t.map(y.nodes(),function(C){return y.node(C).rank})),x=[];t.forEach(y.nodes(),function(C){var M=y.node(C).rank-b;x[M]||(x[M]=[]),x[M].push(C)});var k=0,T=y.graph().nodeRankFactor;t.forEach(x,function(C,M){t.isUndefined(C)&&M%T!==0?--k:k&&t.forEach(C,function(S){y.node(S).rank+=k})})}function d(y,b,x,k){var T={width:0,height:0};return arguments.length>=4&&(T.rank=x,T.order=k),r(y,"border",T,b)}function f(y){return t.max(t.map(y.nodes(),function(b){var x=y.node(b).rank;if(!t.isUndefined(x))return x}))}function p(y,b){var x={lhs:[],rhs:[]};return t.forEach(y,function(k){b(k)?x.lhs.push(k):x.rhs.push(k)}),x}function m(y,b){var x=t.now();try{return b()}finally{console.log(y+" time: "+(t.now()-x)+"ms")}}function _(y,b){return b()}return R3}var I3,hA;function ftt(){if(hA)return I3;hA=1;var t=$e(),e=vn();I3={run:r,undo:i};function r(a){a.graph().dummyChains=[],t.forEach(a.edges(),function(s){n(a,s)})}function n(a,s){var o=s.v,l=a.node(o).rank,u=s.w,h=a.node(u).rank,d=s.name,f=a.edge(s),p=f.labelRank;if(h!==l+1){a.removeEdge(s);var m,_,y;for(y=0,++l;l<h;++y,++l)f.points=[],_={width:0,height:0,edgeLabel:f,edgeObj:s,rank:l},m=e.addDummyNode(a,"edge",_,"_d"),l===p&&(_.width=f.width,_.height=f.height,_.dummy="edge-label",_.labelpos=f.labelpos),a.setEdge(o,m,{weight:f.weight},d),y===0&&a.graph().dummyChains.push(m),o=m;a.setEdge(o,u,{weight:f.weight},d)}}function i(a){t.forEach(a.graph().dummyChains,function(s){var o=a.node(s),l=o.edgeLabel,u;for(a.setEdge(o.edgeObj,l);o.dummy;)u=a.successors(s)[0],a.removeNode(s),l.points.push({x:o.x,y:o.y}),o.dummy==="edge-label"&&(l.x=o.x,l.y=o.y,l.width=o.width,l.height=o.height),s=u,o=a.node(s)})}return I3}var N3,fA;function V1(){if(fA)return N3;fA=1;var t=$e();N3={longestPath:e,slack:r};function e(n){var i={};function a(s){var o=n.node(s);if(t.has(i,s))return o.rank;i[s]=!0;var l=t.min(t.map(n.outEdges(s),function(u){return a(u.w)-n.edge(u).minlen}));return(l===Number.POSITIVE_INFINITY||l===void 0||l===null)&&(l=0),o.rank=l}t.forEach(n.sources(),a)}function r(n,i){return n.node(i.w).rank-n.node(i.v).rank-n.edge(i).minlen}return N3}var B3,dA;function pA(){if(dA)return B3;dA=1;var t=$e(),e=yi().Graph,r=V1().slack;B3=n;function n(o){var l=new e({directed:!1}),u=o.nodes()[0],h=o.nodeCount();l.setNode(u,{});for(var d,f;i(l,o)<h;)d=a(l,o),f=l.hasNode(d.v)?r(o,d):-r(o,d),s(l,o,f);return l}function i(o,l){function u(h){t.forEach(l.nodeEdges(h),function(d){var f=d.v,p=h===f?d.w:f;!o.hasNode(p)&&!r(l,d)&&(o.setNode(p,{}),o.setEdge(h,p,{}),u(p))})}return t.forEach(o.nodes(),u),o.nodeCount()}function a(o,l){return t.minBy(l.edges(),function(u){if(o.hasNode(u.v)!==o.hasNode(u.w))return r(l,u)})}function s(o,l,u){t.forEach(o.nodes(),function(h){l.node(h).rank+=u})}return B3}var D3,gA;function dtt(){if(gA)return D3;gA=1;var t=$e(),e=pA(),r=V1().slack,n=V1().longestPath,i=yi().alg.preorder,a=yi().alg.postorder,s=vn().simplify;D3=o,o.initLowLimValues=d,o.initCutValues=l,o.calcCutValue=h,o.leaveEdge=p,o.enterEdge=m,o.exchangeEdges=_;function o(k){k=s(k),n(k);var T=e(k);d(T),l(T,k);for(var C,M;C=p(T);)M=m(T,k,C),_(T,k,C,M)}function l(k,T){var C=a(k,k.nodes());C=C.slice(0,C.length-1),t.forEach(C,function(M){u(k,T,M)})}function u(k,T,C){var M=k.node(C),S=M.parent;k.edge(C,S).cutvalue=h(k,T,C)}function h(k,T,C){var M=k.node(C),S=M.parent,R=!0,A=T.edge(C,S),L=0;return A||(R=!1,A=T.edge(S,C)),L=A.weight,t.forEach(T.nodeEdges(C),function(v){var B=v.v===C,w=B?v.w:v.v;if(w!==S){var D=B===R,N=T.edge(v).weight;if(L+=D?N:-N,b(k,C,w)){var z=k.edge(C,w).cutvalue;L+=D?-z:z}}}),L}function d(k,T){arguments.length<2&&(T=k.nodes()[0]),f(k,{},1,T)}function f(k,T,C,M,S){var R=C,A=k.node(M);return T[M]=!0,t.forEach(k.neighbors(M),function(L){t.has(T,L)||(C=f(k,T,C,L,M))}),A.low=R,A.lim=C++,S?A.parent=S:delete A.parent,C}function p(k){return t.find(k.edges(),function(T){return k.edge(T).cutvalue<0})}function m(k,T,C){var M=C.v,S=C.w;T.hasEdge(M,S)||(M=C.w,S=C.v);var R=k.node(M),A=k.node(S),L=R,v=!1;R.lim>A.lim&&(L=A,v=!0);var B=t.filter(T.edges(),function(w){return v===x(k,k.node(w.v),L)&&v!==x(k,k.node(w.w),L)});return t.minBy(B,function(w){return r(T,w)})}function _(k,T,C,M){var S=C.v,R=C.w;k.removeEdge(S,R),k.setEdge(M.v,M.w,{}),d(k),l(k,T),y(k,T)}function y(k,T){var C=t.find(k.nodes(),function(S){return!T.node(S).parent}),M=i(k,C);M=M.slice(1),t.forEach(M,function(S){var R=k.node(S).parent,A=T.edge(S,R),L=!1;A||(A=T.edge(R,S),L=!0),T.node(S).rank=T.node(R).rank+(L?A.minlen:-A.minlen)})}function b(k,T,C){return k.hasEdge(T,C)}function x(k,T,C){return C.low<=T.lim&&T.lim<=C.lim}return D3}var O3,yA;function ptt(){if(yA)return O3;yA=1;var t=V1(),e=t.longestPath,r=pA(),n=dtt();O3=i;function i(l){switch(l.graph().ranker){case"network-simplex":o(l);break;case"tight-tree":s(l);break;case"longest-path":a(l);break;default:o(l)}}var a=e;function s(l){e(l),r(l)}function o(l){n(l)}return O3}var F3,mA;function gtt(){if(mA)return F3;mA=1;var t=$e();F3=e;function e(i){var a=n(i);t.forEach(i.graph().dummyChains,function(s){for(var o=i.node(s),l=o.edgeObj,u=r(i,a,l.v,l.w),h=u.path,d=u.lca,f=0,p=h[f],m=!0;s!==l.w;){if(o=i.node(s),m){for(;(p=h[f])!==d&&i.node(p).maxRank<o.rank;)f++;p===d&&(m=!1)}if(!m){for(;f<h.length-1&&i.node(p=h[f+1]).minRank<=o.rank;)f++;p=h[f]}i.setParent(s,p),s=i.successors(s)[0]}})}function r(i,a,s,o){var l=[],u=[],h=Math.min(a[s].low,a[o].low),d=Math.max(a[s].lim,a[o].lim),f,p;f=s;do f=i.parent(f),l.push(f);while(f&&(a[f].low>h||d>a[f].lim));for(p=f,f=o;(f=i.parent(f))!==p;)u.push(f);return{path:l.concat(u.reverse()),lca:p}}function n(i){var a={},s=0;function o(l){var u=s;t.forEach(i.children(l),o),a[l]={low:u,lim:s++}}return t.forEach(i.children(),o),a}return F3}var P3,bA;function ytt(){if(bA)return P3;bA=1;var t=$e(),e=vn();P3={run:r,cleanup:s};function r(o){var l=e.addDummyNode(o,"root",{},"_root"),u=i(o),h=t.max(t.values(u))-1,d=2*h+1;o.graph().nestingRoot=l,t.forEach(o.edges(),function(p){o.edge(p).minlen*=d});var f=a(o)+1;t.forEach(o.children(),function(p){n(o,l,d,f,h,u,p)}),o.graph().nodeRankFactor=d}function n(o,l,u,h,d,f,p){var m=o.children(p);if(!m.length){p!==l&&o.setEdge(l,p,{weight:0,minlen:u});return}var _=e.addBorderNode(o,"_bt"),y=e.addBorderNode(o,"_bb"),b=o.node(p);o.setParent(_,p),b.borderTop=_,o.setParent(y,p),b.borderBottom=y,t.forEach(m,function(x){n(o,l,u,h,d,f,x);var k=o.node(x),T=k.borderTop?k.borderTop:x,C=k.borderBottom?k.borderBottom:x,M=k.borderTop?h:2*h,S=T!==C?1:d-f[p]+1;o.setEdge(_,T,{weight:M,minlen:S,nestingEdge:!0}),o.setEdge(C,y,{weight:M,minlen:S,nestingEdge:!0})}),o.parent(p)||o.setEdge(l,_,{weight:0,minlen:d+f[p]})}function i(o){var l={};function u(h,d){var f=o.children(h);f&&f.length&&t.forEach(f,function(p){u(p,d+1)}),l[h]=d}return t.forEach(o.children(),function(h){u(h,1)}),l}function a(o){return t.reduce(o.edges(),function(l,u){return l+o.edge(u).weight},0)}function s(o){var l=o.graph();o.removeNode(l.nestingRoot),delete l.nestingRoot,t.forEach(o.edges(),function(u){var h=o.edge(u);h.nestingEdge&&o.removeEdge(u)})}return P3}var q3,_A;function mtt(){if(_A)return q3;_A=1;var t=$e(),e=vn();q3=r;function r(i){function a(s){var o=i.children(s),l=i.node(s);if(o.length&&t.forEach(o,a),t.has(l,"minRank")){l.borderLeft=[],l.borderRight=[];for(var u=l.minRank,h=l.maxRank+1;u<h;++u)n(i,"borderLeft","_bl",s,l,u),n(i,"borderRight","_br",s,l,u)}}t.forEach(i.children(),a)}function n(i,a,s,o,l,u){var h={width:0,height:0,rank:u,borderType:a},d=l[a][u-1],f=e.addDummyNode(i,"border",h,s);l[a][u]=f,i.setParent(f,o),d&&i.setEdge(d,f,{weight:1})}return q3}var V3,vA;function btt(){if(vA)return V3;vA=1;var t=$e();V3={adjust:e,undo:r};function e(u){var h=u.graph().rankdir.toLowerCase();(h==="lr"||h==="rl")&&n(u)}function r(u){var h=u.graph().rankdir.toLowerCase();(h==="bt"||h==="rl")&&a(u),(h==="lr"||h==="rl")&&(o(u),n(u))}function n(u){t.forEach(u.nodes(),function(h){i(u.node(h))}),t.forEach(u.edges(),function(h){i(u.edge(h))})}function i(u){var h=u.width;u.width=u.height,u.height=h}function a(u){t.forEach(u.nodes(),function(h){s(u.node(h))}),t.forEach(u.edges(),function(h){var d=u.edge(h);t.forEach(d.points,s),t.has(d,"y")&&s(d)})}function s(u){u.y=-u.y}function o(u){t.forEach(u.nodes(),function(h){l(u.node(h))}),t.forEach(u.edges(),function(h){var d=u.edge(h);t.forEach(d.points,l),t.has(d,"x")&&l(d)})}function l(u){var h=u.x;u.x=u.y,u.y=h}return V3}var z3,xA;function _tt(){if(xA)return z3;xA=1;var t=$e();z3=e;function e(r){var n={},i=t.filter(r.nodes(),function(u){return!r.children(u).length}),a=t.max(t.map(i,function(u){return r.node(u).rank})),s=t.map(t.range(a+1),function(){return[]});function o(u){if(!t.has(n,u)){n[u]=!0;var h=r.node(u);s[h.rank].push(u),t.forEach(r.successors(u),o)}}var l=t.sortBy(i,function(u){return r.node(u).rank});return t.forEach(l,o),s}return z3}var Y3,kA;function vtt(){if(kA)return Y3;kA=1;var t=$e();Y3=e;function e(n,i){for(var a=0,s=1;s<i.length;++s)a+=r(n,i[s-1],i[s]);return a}function r(n,i,a){for(var s=t.zipObject(a,t.map(a,function(f,p){return p})),o=t.flatten(t.map(i,function(f){return t.sortBy(t.map(n.outEdges(f),function(p){return{pos:s[p.w],weight:n.edge(p).weight}}),"pos")}),!0),l=1;l<a.length;)l<<=1;var u=2*l-1;l-=1;var h=t.map(new Array(u),function(){return 0}),d=0;return t.forEach(o.forEach(function(f){var p=f.pos+l;h[p]+=f.weight;for(var m=0;p>0;)p%2&&(m+=h[p+1]),p=p-1>>1,h[p]+=f.weight;d+=f.weight*m})),d}return Y3}var U3,wA;function xtt(){if(wA)return U3;wA=1;var t=$e();U3=e;function e(r,n){return t.map(n,function(i){var a=r.inEdges(i);if(a.length){var s=t.reduce(a,function(o,l){var u=r.edge(l),h=r.node(l.v);return{sum:o.sum+u.weight*h.order,weight:o.weight+u.weight}},{sum:0,weight:0});return{v:i,barycenter:s.sum/s.weight,weight:s.weight}}else return{v:i}})}return U3}var W3,TA;function ktt(){if(TA)return W3;TA=1;var t=$e();W3=e;function e(i,a){var s={};t.forEach(i,function(l,u){var h=s[l.v]={indegree:0,in:[],out:[],vs:[l.v],i:u};t.isUndefined(l.barycenter)||(h.barycenter=l.barycenter,h.weight=l.weight)}),t.forEach(a.edges(),function(l){var u=s[l.v],h=s[l.w];!t.isUndefined(u)&&!t.isUndefined(h)&&(h.indegree++,u.out.push(s[l.w]))});var o=t.filter(s,function(l){return!l.indegree});return r(o)}function r(i){var a=[];function s(u){return function(h){h.merged||(t.isUndefined(h.barycenter)||t.isUndefined(u.barycenter)||h.barycenter>=u.barycenter)&&n(u,h)}}function o(u){return function(h){h.in.push(u),--h.indegree===0&&i.push(h)}}for(;i.length;){var l=i.pop();a.push(l),t.forEach(l.in.reverse(),s(l)),t.forEach(l.out,o(l))}return t.map(t.filter(a,function(u){return!u.merged}),function(u){return t.pick(u,["vs","i","barycenter","weight"])})}function n(i,a){var s=0,o=0;i.weight&&(s+=i.barycenter*i.weight,o+=i.weight),a.weight&&(s+=a.barycenter*a.weight,o+=a.weight),i.vs=a.vs.concat(i.vs),i.barycenter=s/o,i.weight=o,i.i=Math.min(a.i,i.i),a.merged=!0}return W3}var H3,EA;function wtt(){if(EA)return H3;EA=1;var t=$e(),e=vn();H3=r;function r(a,s){var o=e.partition(a,function(_){return t.has(_,"barycenter")}),l=o.lhs,u=t.sortBy(o.rhs,function(_){return-_.i}),h=[],d=0,f=0,p=0;l.sort(i(!!s)),p=n(h,u,p),t.forEach(l,function(_){p+=_.vs.length,h.push(_.vs),d+=_.barycenter*_.weight,f+=_.weight,p=n(h,u,p)});var m={vs:t.flatten(h,!0)};return f&&(m.barycenter=d/f,m.weight=f),m}function n(a,s,o){for(var l;s.length&&(l=t.last(s)).i<=o;)s.pop(),a.push(l.vs),o++;return o}function i(a){return function(s,o){return s.barycenter<o.barycenter?-1:s.barycenter>o.barycenter?1:a?o.i-s.i:s.i-o.i}}return H3}var G3,CA;function Ttt(){if(CA)return G3;CA=1;var t=$e(),e=xtt(),r=ktt(),n=wtt();G3=i;function i(o,l,u,h){var d=o.children(l),f=o.node(l),p=f?f.borderLeft:void 0,m=f?f.borderRight:void 0,_={};p&&(d=t.filter(d,function(C){return C!==p&&C!==m}));var y=e(o,d);t.forEach(y,function(C){if(o.children(C.v).length){var M=i(o,C.v,u,h);_[C.v]=M,t.has(M,"barycenter")&&s(C,M)}});var b=r(y,u);a(b,_);var x=n(b,h);if(p&&(x.vs=t.flatten([p,x.vs,m],!0),o.predecessors(p).length)){var k=o.node(o.predecessors(p)[0]),T=o.node(o.predecessors(m)[0]);t.has(x,"barycenter")||(x.barycenter=0,x.weight=0),x.barycenter=(x.barycenter*x.weight+k.order+T.order)/(x.weight+2),x.weight+=2}return x}function a(o,l){t.forEach(o,function(u){u.vs=t.flatten(u.vs.map(function(h){return l[h]?l[h].vs:h}),!0)})}function s(o,l){t.isUndefined(o.barycenter)?(o.barycenter=l.barycenter,o.weight=l.weight):(o.barycenter=(o.barycenter*o.weight+l.barycenter*l.weight)/(o.weight+l.weight),o.weight+=l.weight)}return G3}var j3,SA;function Ett(){if(SA)return j3;SA=1;var t=$e(),e=yi().Graph;j3=r;function r(i,a,s){var o=n(i),l=new e({compound:!0}).setGraph({root:o}).setDefaultNodeLabel(function(u){return i.node(u)});return t.forEach(i.nodes(),function(u){var h=i.node(u),d=i.parent(u);(h.rank===a||h.minRank<=a&&a<=h.maxRank)&&(l.setNode(u),l.setParent(u,d||o),t.forEach(i[s](u),function(f){var p=f.v===u?f.w:f.v,m=l.edge(p,u),_=t.isUndefined(m)?0:m.weight;l.setEdge(p,u,{weight:i.edge(f).weight+_})}),t.has(h,"minRank")&&l.setNode(u,{borderLeft:h.borderLeft[a],borderRight:h.borderRight[a]}))}),l}function n(i){for(var a;i.hasNode(a=t.uniqueId("_root")););return a}return j3}var $3,AA;function Ctt(){if(AA)return $3;AA=1;var t=$e();$3=e;function e(r,n,i){var a={},s;t.forEach(i,function(o){for(var l=r.parent(o),u,h;l;){if(u=r.parent(l),u?(h=a[u],a[u]=l):(h=s,s=l),h&&h!==l){n.setEdge(h,l);return}l=u}})}return $3}var X3,MA;function Stt(){if(MA)return X3;MA=1;var t=$e(),e=_tt(),r=vtt(),n=Ttt(),i=Ett(),a=Ctt(),s=yi().Graph,o=vn();X3=l;function l(f){var p=o.maxRank(f),m=u(f,t.range(1,p+1),"inEdges"),_=u(f,t.range(p-1,-1,-1),"outEdges"),y=e(f);d(f,y);for(var b=Number.POSITIVE_INFINITY,x,k=0,T=0;T<4;++k,++T){h(k%2?m:_,k%4>=2),y=o.buildLayerMatrix(f);var C=r(f,y);C<b&&(T=0,x=t.cloneDeep(y),b=C)}d(f,x)}function u(f,p,m){return t.map(p,function(_){return i(f,_,m)})}function h(f,p){var m=new s;t.forEach(f,function(_){var y=_.graph().root,b=n(_,y,m,p);t.forEach(b.vs,function(x,k){_.node(x).order=k}),a(_,m,b.vs)})}function d(f,p){t.forEach(p,function(m){t.forEach(m,function(_,y){f.node(_).order=y})})}return X3}var K3,LA;function Att(){if(LA)return K3;LA=1;var t=$e(),e=yi().Graph,r=vn();K3={positionX:m,findType1Conflicts:n,findType2Conflicts:i,addConflict:s,hasConflict:o,verticalAlignment:l,horizontalCompaction:u,alignCoordinates:f,findSmallestWidthAlignment:d,balance:p};function n(b,x){var k={};function T(C,M){var S=0,R=0,A=C.length,L=t.last(M);return t.forEach(M,function(v,B){var w=a(b,v),D=w?b.node(w).order:A;(w||v===L)&&(t.forEach(M.slice(R,B+1),function(N){t.forEach(b.predecessors(N),function(z){var X=b.node(z),ct=X.order;(ct<S||D<ct)&&!(X.dummy&&b.node(N).dummy)&&s(k,z,N)})}),R=B+1,S=D)}),M}return t.reduce(x,T),k}function i(b,x){var k={};function T(M,S,R,A,L){var v;t.forEach(t.range(S,R),function(B){v=M[B],b.node(v).dummy&&t.forEach(b.predecessors(v),function(w){var D=b.node(w);D.dummy&&(D.order<A||D.order>L)&&s(k,w,v)})})}function C(M,S){var R=-1,A,L=0;return t.forEach(S,function(v,B){if(b.node(v).dummy==="border"){var w=b.predecessors(v);w.length&&(A=b.node(w[0]).order,T(S,L,B,R,A),L=B,R=A)}T(S,L,S.length,A,M.length)}),S}return t.reduce(x,C),k}function a(b,x){if(b.node(x).dummy)return t.find(b.predecessors(x),function(k){return b.node(k).dummy})}function s(b,x,k){if(x>k){var T=x;x=k,k=T}var C=b[x];C||(b[x]=C={}),C[k]=!0}function o(b,x,k){if(x>k){var T=x;x=k,k=T}return t.has(b[x],k)}function l(b,x,k,T){var C={},M={},S={};return t.forEach(x,function(R){t.forEach(R,function(A,L){C[A]=A,M[A]=A,S[A]=L})}),t.forEach(x,function(R){var A=-1;t.forEach(R,function(L){var v=T(L);if(v.length){v=t.sortBy(v,function(z){return S[z]});for(var B=(v.length-1)/2,w=Math.floor(B),D=Math.ceil(B);w<=D;++w){var N=v[w];M[L]===L&&A<S[N]&&!o(k,L,N)&&(M[N]=L,M[L]=C[L]=C[N],A=S[N])}}})}),{root:C,align:M}}function u(b,x,k,T,C){var M={},S=h(b,x,k,C),R=C?"borderLeft":"borderRight";function A(B,w){for(var D=S.nodes(),N=D.pop(),z={};N;)z[N]?B(N):(z[N]=!0,D.push(N),D=D.concat(w(N))),N=D.pop()}function L(B){M[B]=S.inEdges(B).reduce(function(w,D){return Math.max(w,M[D.v]+S.edge(D))},0)}function v(B){var w=S.outEdges(B).reduce(function(N,z){return Math.min(N,M[z.w]-S.edge(z))},Number.POSITIVE_INFINITY),D=b.node(B);w!==Number.POSITIVE_INFINITY&&D.borderType!==R&&(M[B]=Math.max(M[B],w))}return A(L,S.predecessors.bind(S)),A(v,S.successors.bind(S)),t.forEach(T,function(B){M[B]=M[k[B]]}),M}function h(b,x,k,T){var C=new e,M=b.graph(),S=_(M.nodesep,M.edgesep,T);return t.forEach(x,function(R){var A;t.forEach(R,function(L){var v=k[L];if(C.setNode(v),A){var B=k[A],w=C.edge(B,v);C.setEdge(B,v,Math.max(S(b,L,A),w||0))}A=L})}),C}function d(b,x){return t.minBy(t.values(x),function(k){var T=Number.NEGATIVE_INFINITY,C=Number.POSITIVE_INFINITY;return t.forIn(k,function(M,S){var R=y(b,S)/2;T=Math.max(M+R,T),C=Math.min(M-R,C)}),T-C})}function f(b,x){var k=t.values(x),T=t.min(k),C=t.max(k);t.forEach(["u","d"],function(M){t.forEach(["l","r"],function(S){var R=M+S,A=b[R],L;if(A!==x){var v=t.values(A);L=S==="l"?T-t.min(v):C-t.max(v),L&&(b[R]=t.mapValues(A,function(B){return B+L}))}})})}function p(b,x){return t.mapValues(b.ul,function(k,T){if(x)return b[x.toLowerCase()][T];var C=t.sortBy(t.map(b,T));return(C[1]+C[2])/2})}function m(b){var x=r.buildLayerMatrix(b),k=t.merge(n(b,x),i(b,x)),T={},C;t.forEach(["u","d"],function(S){C=S==="u"?x:t.values(x).reverse(),t.forEach(["l","r"],function(R){R==="r"&&(C=t.map(C,function(B){return t.values(B).reverse()}));var A=(S==="u"?b.predecessors:b.successors).bind(b),L=l(b,C,k,A),v=u(b,C,L.root,L.align,R==="r");R==="r"&&(v=t.mapValues(v,function(B){return-B})),T[S+R]=v})});var M=d(b,T);return f(T,M),p(T,b.graph().align)}function _(b,x,k){return function(T,C,M){var S=T.node(C),R=T.node(M),A=0,L;if(A+=S.width/2,t.has(S,"labelpos"))switch(S.labelpos.toLowerCase()){case"l":L=-S.width/2;break;case"r":L=S.width/2;break}if(L&&(A+=k?L:-L),L=0,A+=(S.dummy?x:b)/2,A+=(R.dummy?x:b)/2,A+=R.width/2,t.has(R,"labelpos"))switch(R.labelpos.toLowerCase()){case"l":L=R.width/2;break;case"r":L=-R.width/2;break}return L&&(A+=k?L:-L),L=0,A}}function y(b,x){return b.node(x).width}return K3}var Z3,RA;function Mtt(){if(RA)return Z3;RA=1;var t=$e(),e=vn(),r=Att().positionX;Z3=n;function n(a){a=e.asNonCompoundGraph(a),i(a),t.forEach(r(a),function(s,o){a.node(o).x=s})}function i(a){var s=e.buildLayerMatrix(a),o=a.graph().ranksep,l=0;t.forEach(s,function(u){var h=t.max(t.map(u,function(d){return a.node(d).height}));t.forEach(u,function(d){a.node(d).y=l+h/2}),l+=h+o})}return Z3}var Q3,IA;function Ltt(){if(IA)return Q3;IA=1;var t=$e(),e=htt(),r=ftt(),n=ptt(),i=vn().normalizeRanks,a=gtt(),s=vn().removeEmptyRanks,o=ytt(),l=mtt(),u=btt(),h=Stt(),d=Mtt(),f=vn(),p=yi().Graph;Q3=m;function m(W,tt){var K=tt&&tt.debugTiming?f.time:f.notime;K("layout",function(){var it=K("  buildLayoutGraph",function(){return A(W)});K("  runLayout",function(){_(it,K)}),K("  updateInputGraph",function(){y(W,it)})})}function _(W,tt){tt("    makeSpaceForEdgeLabels",function(){L(W)}),tt("    removeSelfEdges",function(){J(W)}),tt("    acyclic",function(){e.run(W)}),tt("    nestingGraph.run",function(){o.run(W)}),tt("    rank",function(){n(f.asNonCompoundGraph(W))}),tt("    injectEdgeLabelProxies",function(){v(W)}),tt("    removeEmptyRanks",function(){s(W)}),tt("    nestingGraph.cleanup",function(){o.cleanup(W)}),tt("    normalizeRanks",function(){i(W)}),tt("    assignRankMinMax",function(){B(W)}),tt("    removeEdgeLabelProxies",function(){w(W)}),tt("    normalize.run",function(){r.run(W)}),tt("    parentDummyChains",function(){a(W)}),tt("    addBorderSegments",function(){l(W)}),tt("    order",function(){h(W)}),tt("    insertSelfEdges",function(){Y(W)}),tt("    adjustCoordinateSystem",function(){u.adjust(W)}),tt("    position",function(){d(W)}),tt("    positionSelfEdges",function(){$(W)}),tt("    removeBorderNodes",function(){ct(W)}),tt("    normalize.undo",function(){r.undo(W)}),tt("    fixupEdgeLabelCoords",function(){z(W)}),tt("    undoCoordinateSystem",function(){u.undo(W)}),tt("    translateGraph",function(){D(W)}),tt("    assignNodeIntersects",function(){N(W)}),tt("    reversePoints",function(){X(W)}),tt("    acyclic.undo",function(){e.undo(W)})}function y(W,tt){t.forEach(W.nodes(),function(K){var it=W.node(K),Z=tt.node(K);it&&(it.x=Z.x,it.y=Z.y,tt.children(K).length&&(it.width=Z.width,it.height=Z.height))}),t.forEach(W.edges(),function(K){var it=W.edge(K),Z=tt.edge(K);it.points=Z.points,t.has(Z,"x")&&(it.x=Z.x,it.y=Z.y)}),W.graph().width=tt.graph().width,W.graph().height=tt.graph().height}var b=["nodesep","edgesep","ranksep","marginx","marginy"],x={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},k=["acyclicer","ranker","rankdir","align"],T=["width","height"],C={width:0,height:0},M=["minlen","weight","width","height","labeloffset"],S={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},R=["labelpos"];function A(W){var tt=new p({multigraph:!0,compound:!0}),K=ut(W.graph());return tt.setGraph(t.merge({},x,lt(K,b),t.pick(K,k))),t.forEach(W.nodes(),function(it){var Z=ut(W.node(it));tt.setNode(it,t.defaults(lt(Z,T),C)),tt.setParent(it,W.parent(it))}),t.forEach(W.edges(),function(it){var Z=ut(W.edge(it));tt.setEdge(it,t.merge({},S,lt(Z,M),t.pick(Z,R)))}),tt}function L(W){var tt=W.graph();tt.ranksep/=2,t.forEach(W.edges(),function(K){var it=W.edge(K);it.minlen*=2,it.labelpos.toLowerCase()!=="c"&&(tt.rankdir==="TB"||tt.rankdir==="BT"?it.width+=it.labeloffset:it.height+=it.labeloffset)})}function v(W){t.forEach(W.edges(),function(tt){var K=W.edge(tt);if(K.width&&K.height){var it=W.node(tt.v),Z=W.node(tt.w),V={rank:(Z.rank-it.rank)/2+it.rank,e:tt};f.addDummyNode(W,"edge-proxy",V,"_ep")}})}function B(W){var tt=0;t.forEach(W.nodes(),function(K){var it=W.node(K);it.borderTop&&(it.minRank=W.node(it.borderTop).rank,it.maxRank=W.node(it.borderBottom).rank,tt=t.max(tt,it.maxRank))}),W.graph().maxRank=tt}function w(W){t.forEach(W.nodes(),function(tt){var K=W.node(tt);K.dummy==="edge-proxy"&&(W.edge(K.e).labelRank=K.rank,W.removeNode(tt))})}function D(W){var tt=Number.POSITIVE_INFINITY,K=0,it=Number.POSITIVE_INFINITY,Z=0,V=W.graph(),Q=V.marginx||0,q=V.marginy||0;function U(F){var j=F.x,P=F.y,et=F.width,at=F.height;tt=Math.min(tt,j-et/2),K=Math.max(K,j+et/2),it=Math.min(it,P-at/2),Z=Math.max(Z,P+at/2)}t.forEach(W.nodes(),function(F){U(W.node(F))}),t.forEach(W.edges(),function(F){var j=W.edge(F);t.has(j,"x")&&U(j)}),tt-=Q,it-=q,t.forEach(W.nodes(),function(F){var j=W.node(F);j.x-=tt,j.y-=it}),t.forEach(W.edges(),function(F){var j=W.edge(F);t.forEach(j.points,function(P){P.x-=tt,P.y-=it}),t.has(j,"x")&&(j.x-=tt),t.has(j,"y")&&(j.y-=it)}),V.width=K-tt+Q,V.height=Z-it+q}function N(W){t.forEach(W.edges(),function(tt){var K=W.edge(tt),it=W.node(tt.v),Z=W.node(tt.w),V,Q;K.points?(V=K.points[0],Q=K.points[K.points.length-1]):(K.points=[],V=Z,Q=it),K.points.unshift(f.intersectRect(it,V)),K.points.push(f.intersectRect(Z,Q))})}function z(W){t.forEach(W.edges(),function(tt){var K=W.edge(tt);if(t.has(K,"x"))switch((K.labelpos==="l"||K.labelpos==="r")&&(K.width-=K.labeloffset),K.labelpos){case"l":K.x-=K.width/2+K.labeloffset;break;case"r":K.x+=K.width/2+K.labeloffset;break}})}function X(W){t.forEach(W.edges(),function(tt){var K=W.edge(tt);K.reversed&&K.points.reverse()})}function ct(W){t.forEach(W.nodes(),function(tt){if(W.children(tt).length){var K=W.node(tt),it=W.node(K.borderTop),Z=W.node(K.borderBottom),V=W.node(t.last(K.borderLeft)),Q=W.node(t.last(K.borderRight));K.width=Math.abs(Q.x-V.x),K.height=Math.abs(Z.y-it.y),K.x=V.x+K.width/2,K.y=it.y+K.height/2}}),t.forEach(W.nodes(),function(tt){W.node(tt).dummy==="border"&&W.removeNode(tt)})}function J(W){t.forEach(W.edges(),function(tt){if(tt.v===tt.w){var K=W.node(tt.v);K.selfEdges||(K.selfEdges=[]),K.selfEdges.push({e:tt,label:W.edge(tt)}),W.removeEdge(tt)}})}function Y(W){var tt=f.buildLayerMatrix(W);t.forEach(tt,function(K){var it=0;t.forEach(K,function(Z,V){var Q=W.node(Z);Q.order=V+it,t.forEach(Q.selfEdges,function(q){f.addDummyNode(W,"selfedge",{width:q.label.width,height:q.label.height,rank:Q.rank,order:V+ ++it,e:q.e,label:q.label},"_se")}),delete Q.selfEdges})})}function $(W){t.forEach(W.nodes(),function(tt){var K=W.node(tt);if(K.dummy==="selfedge"){var it=W.node(K.e.v),Z=it.x+it.width/2,V=it.y,Q=K.x-Z,q=it.height/2;W.setEdge(K.e,K.label),W.removeNode(tt),K.label.points=[{x:Z+2*Q/3,y:V-q},{x:Z+5*Q/6,y:V-q},{x:Z+Q,y:V},{x:Z+5*Q/6,y:V+q},{x:Z+2*Q/3,y:V+q}],K.label.x=K.x,K.label.y=K.y}})}function lt(W,tt){return t.mapValues(t.pick(W,tt),Number)}function ut(W){var tt={};return t.forEach(W,function(K,it){tt[it.toLowerCase()]=K}),tt}return Q3}var J3,NA;function Rtt(){if(NA)return J3;NA=1;var t=$e(),e=vn(),r=yi().Graph;J3={debugOrdering:n};function n(i){var a=e.buildLayerMatrix(i),s=new r({compound:!0,multigraph:!0}).setGraph({});return t.forEach(i.nodes(),function(o){s.setNode(o,{label:o}),s.setParent(o,"layer"+i.node(o).rank)}),t.forEach(i.edges(),function(o){s.setEdge(o.v,o.w,{},o.name)}),t.forEach(a,function(o,l){var u="layer"+l;s.setNode(u,{rank:"same"}),t.reduce(o,function(h,d){return s.setEdge(h,d,{style:"invis"}),d})}),s}return J3}var t4,BA;function Itt(){return BA||(BA=1,t4="0.8.5"),t4}var e4,DA;function OA(){return DA||(DA=1,e4={graphlib:yi(),layout:Ltt(),debug:Rtt(),util:{time:vn().time,notime:vn().notime},version:Itt()}),e4}var Zc=OA();let FA=0;const Ntt=function(t,e,r,n,i){const a=function(x){switch(x){case i.db.relationType.AGGREGATION:return"aggregation";case i.db.EXTENSION:return"extension";case i.db.COMPOSITION:return"composition";case i.db.DEPENDENCY:return"dependency";case i.db.LOLLIPOP:return"lollipop"}};e.points=e.points.filter(x=>!Number.isNaN(x.y));const s=e.points,o=Ua().x(function(x){return x.x}).y(function(x){return x.y}).curve(Os),l=t.append("path").attr("d",o(s)).attr("id","edge"+FA).attr("class","relation");let u="";n.arrowMarkerAbsolute&&(u=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,u=u.replace(/\(/g,"\\("),u=u.replace(/\)/g,"\\)")),r.relation.lineType==1&&l.attr("class","relation dashed-line"),r.relation.type1!=="none"&&l.attr("marker-start","url("+u+"#"+a(r.relation.type1)+"Start)"),r.relation.type2!=="none"&&l.attr("marker-end","url("+u+"#"+a(r.relation.type2)+"End)");let h,d;const f=e.points.length;let p=Se.calcLabelPosition(e.points);h=p.x,d=p.y;let m,_,y,b;if(f%2!==0&&f>1){let x=Se.calcCardinalityPosition(r.relation.type1!=="none",e.points,e.points[0]),k=Se.calcCardinalityPosition(r.relation.type2!=="none",e.points,e.points[f-1]);H.debug("cardinality_1_point "+JSON.stringify(x)),H.debug("cardinality_2_point "+JSON.stringify(k)),m=x.x,_=x.y,y=k.x,b=k.y}if(typeof r.title<"u"){const x=t.append("g").attr("class","classLabel"),k=x.append("text").attr("class","label").attr("x",h).attr("y",d).attr("fill","red").attr("text-anchor","middle").text(r.title);window.label=k;const T=k.node().getBBox();x.insert("rect",":first-child").attr("class","box").attr("x",T.x-n.padding/2).attr("y",T.y-n.padding/2).attr("width",T.width+n.padding).attr("height",T.height+n.padding)}H.info("Rendering relation "+JSON.stringify(r)),typeof r.relationTitle1<"u"&&r.relationTitle1!=="none"&&t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",m).attr("y",_).attr("fill","black").attr("font-size","6").text(r.relationTitle1),typeof r.relationTitle2<"u"&&r.relationTitle2!=="none"&&t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",y).attr("y",b).attr("fill","black").attr("font-size","6").text(r.relationTitle2),FA++},Btt=function(t,e,r,n){H.debug("Rendering class ",e,r);const i=e.id,a={id:i,label:e.id,width:0,height:0},s=t.append("g").attr("id",n.db.lookUpDomId(i)).attr("class","classGroup");let o;e.link?o=s.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",r.textHeight+r.padding).attr("x",0):o=s.append("text").attr("y",r.textHeight+r.padding).attr("x",0);let l=!0;e.annotations.forEach(function(C){const M=o.append("tspan").text("\xAB"+C+"\xBB");l||M.attr("dy",r.textHeight),l=!1});let u=e.id;e.type!==void 0&&e.type!==""&&(u+="<"+e.type+">");const h=o.append("tspan").text(u).attr("class","title");l||h.attr("dy",r.textHeight);const d=o.node().getBBox().height,f=s.append("line").attr("x1",0).attr("y1",r.padding+d+r.dividerMargin/2).attr("y2",r.padding+d+r.dividerMargin/2),p=s.append("text").attr("x",r.padding).attr("y",d+r.dividerMargin+r.textHeight).attr("fill","white").attr("class","classText");l=!0,e.members.forEach(function(C){PA(p,C,l,r),l=!1});const m=p.node().getBBox(),_=s.append("line").attr("x1",0).attr("y1",r.padding+d+r.dividerMargin+m.height).attr("y2",r.padding+d+r.dividerMargin+m.height),y=s.append("text").attr("x",r.padding).attr("y",d+2*r.dividerMargin+m.height+r.textHeight).attr("fill","white").attr("class","classText");l=!0,e.methods.forEach(function(C){PA(y,C,l,r),l=!1});const b=s.node().getBBox();var x=" ";e.cssClasses.length>0&&(x=x+e.cssClasses.join(" "));const T=s.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",b.width+2*r.padding).attr("height",b.height+r.padding+.5*r.dividerMargin).attr("class",x).node().getBBox().width;return o.node().childNodes.forEach(function(C){C.setAttribute("x",(T-C.getBBox().width)/2)}),e.tooltip&&o.insert("title").text(e.tooltip),f.attr("x2",T),_.attr("x2",T),a.width=T,a.height=b.height+r.padding+.5*r.dividerMargin,a},z1=function(t){const e=/^(\+|-|~|#)?(\w+)(~\w+~|\[\])?\s+(\w+) *(\*|\$)?$/,r=/^([+|\-|~|#])?(\w+) *\( *(.*)\) *(\*|\$)? *(\w*[~|[\]]*\s*\w*~?)$/;let n=t.match(e),i=t.match(r);return n&&!i?Dtt(n):i?Ott(i):Ftt(t)},Dtt=function(t){let e="",r="";try{let n=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",a=t[3]?ja(t[3].trim()):"",s=t[4]?t[4].trim():"",o=t[5]?t[5].trim():"";r=n+i+a+" "+s,e=r4(o)}catch{r=t}return{displayText:r,cssStyle:e}},Ott=function(t){let e="",r="";try{let n=t[1]?t[1].trim():"",i=t[2]?t[2].trim():"",a=t[3]?ja(t[3].trim()):"",s=t[4]?t[4].trim():"",o=t[5]?" : "+ja(t[5]).trim():"";r=n+i+"("+a+")"+o,e=r4(s)}catch{r=t}return{displayText:r,cssStyle:e}},Ftt=function(t){let e="",r="",n="",i=t.indexOf("("),a=t.indexOf(")");if(i>1&&a>i&&a<=t.length){let s="",o="",l=t.substring(0,1);l.match(/\w/)?o=t.substring(0,i).trim():(l.match(/\+|-|~|#/)&&(s=l),o=t.substring(1,i).trim());const u=t.substring(i+1,a);t.substring(a+1,1),r=r4(t.substring(a+1,a+2)),e=s+o+"("+ja(u.trim())+")",a<t.length&&(n=t.substring(a+2).trim(),n!==""&&(n=" : "+ja(n),e+=n))}else e=ja(t);return{displayText:e,cssStyle:r}},PA=function(t,e,r,n){let i=z1(e);const a=t.append("tspan").attr("x",n.padding).text(i.displayText);i.cssStyle!==""&&a.attr("style",i.cssStyle),r||a.attr("dy",n.textHeight)},r4=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},qA={drawClass:Btt,drawEdge:Ntt,parseMember:z1};let n4={};const Y1=20,U1=function(t){const e=Object.entries(n4).find(r=>r[1].label===t);if(e)return e[0]},Ptt=function(t){t.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),t.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},qtt={draw:function(t,e,r,n){const i=nt().class;n4={},H.info("Rendering diagram "+t);const a=nt().securityLevel;let s;a==="sandbox"&&(s=St("#i"+e));const o=St(a==="sandbox"?s.nodes()[0].contentDocument.body:"body"),l=o.select(`[id='${e}']`);Ptt(l);const u=new cr.Graph({multigraph:!0});u.setGraph({isMultiGraph:!0}),u.setDefaultEdgeLabel(function(){return{}});const h=n.db.getClasses(),d=Object.keys(h);for(let b=0;b<d.length;b++){const x=h[d[b]],k=qA.drawClass(l,x,i,n);n4[k.id]=k,u.setNode(k.id,k),H.info("Org height: "+k.height)}n.db.getRelations().forEach(function(b){H.info("tjoho"+U1(b.id1)+U1(b.id2)+JSON.stringify(b)),u.setEdge(U1(b.id1),U1(b.id2),{relation:b},b.title||"DEFAULT")}),Zc.layout(u),u.nodes().forEach(function(b){typeof b<"u"&&typeof u.node(b)<"u"&&(H.debug("Node "+b+": "+JSON.stringify(u.node(b))),o.select("#"+n.db.lookUpDomId(b)).attr("transform","translate("+(u.node(b).x-u.node(b).width/2)+","+(u.node(b).y-u.node(b).height/2)+" )"))}),u.edges().forEach(function(b){typeof b<"u"&&typeof u.edge(b)<"u"&&(H.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(u.edge(b))),qA.drawEdge(l,u.edge(b),u.edge(b).relation,i,n))});const p=l.node().getBBox(),m=p.width+Y1*2,_=p.height+Y1*2;li(l,_,m,i.useMaxWidth);const y=`${p.x-Y1} ${p.y-Y1} ${m} ${_}`;H.debug(`viewBox ${y}`),l.attr("viewBox",y),bn(n.db,l,e)}},Vtt=(t,e,r,n)=>{e.forEach(i=>{ztt[i](t,r,n)})},ztt={extension:(t,e,r)=>{H.trace("Making markers for ",r),t.append("defs").append("marker").attr("id",e+"-extensionStart").attr("class","marker extension "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-compositionStart").attr("class","marker composition "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},lollipop:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-lollipopStart").attr("class","marker lollipop "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("circle").attr("stroke","black").attr("fill","white").attr("cx",6).attr("cy",7).attr("r",6)},point:(t,e)=>{t.append("marker").attr("id",e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",10).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:(t,e)=>{t.append("marker").attr("id",e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:(t,e)=>{t.append("marker").attr("id",e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:(t,e)=>{t.append("defs").append("marker").attr("id",e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}};function Ytt(t,e){e&&t.attr("style",e)}function Utt(t){const e=St(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=e.append("xhtml:div"),n=t.label,i=t.isNode?"nodeLabel":"edgeLabel";return r.html('<span class="'+i+'" '+(t.labelStyle?'style="'+t.labelStyle+'"':"")+">"+n+"</span>"),Ytt(r,t.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),e.node()}const xn=(t,e,r,n)=>{let i=t||"";if(typeof i=="object"&&(i=i[0]),Mr(nt().flowchart.htmlLabels)){i=i.replace(/\\n|\n/g,"<br />"),H.info("vertexText"+i);const a={isNode:n,label:w0(i).replace(/fa[lrsb]?:fa-[\w-]+/g,o=>`<i class='${o.replace(":"," ")}'></i>`),labelStyle:e.replace("fill:","color:")};return Utt(a)}else{const a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));let s=[];typeof i=="string"?s=i.split(/\\n|\n|<br\s*\/?>/gi):Array.isArray(i)?s=i:s=[];for(let o=0;o<s.length;o++){const l=document.createElementNS("http://www.w3.org/2000/svg","tspan");l.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),l.setAttribute("dy","1em"),l.setAttribute("x","0"),r?l.setAttribute("class","title-row"):l.setAttribute("class","row"),l.textContent=s[o].trim(),a.appendChild(l)}return a}},Yr=(t,e,r,n)=>{let i;r?i=r:i="node default";const a=t.insert("g").attr("class",i).attr("id",e.domId||e.id),s=a.insert("g").attr("class","label").attr("style",e.labelStyle);let o;typeof e.labelText>"u"?o="":o=typeof e.labelText=="string"?e.labelText:e.labelText[0];const l=s.node().appendChild(xn(ai(w0(o),nt()),e.labelStyle,!1,n));let u=l.getBBox();if(Mr(nt().flowchart.htmlLabels)){const d=l.children[0],f=St(l);u=d.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}const h=e.padding/2;return s.attr("transform","translate("+-u.width/2+", "+-u.height/2+")"),{shapeSvg:a,bbox:u,halfPadding:h,label:s}},ur=(t,e)=>{const r=e.node().getBBox();t.width=r.width,t.height=r.height};function ca(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("class","label-container").attr("transform","translate("+-e/2+","+r/2+")")}let Re={},mi={},VA={};const Wtt=()=>{mi={},VA={},Re={}},W1=(t,e)=>(H.trace("In isDecendant",e," ",t," = ",mi[e].indexOf(t)>=0),mi[e].indexOf(t)>=0),Htt=(t,e)=>(H.info("Decendants of ",e," is ",mi[e]),H.info("Edge is ",t),t.v===e||t.w===e?!1:mi[e]?!!(mi[e].indexOf(t.v)>=0||W1(t.v,e)||W1(t.w,e)||mi[e].indexOf(t.w)>=0):(H.debug("Tilt, ",e,",not in decendants"),!1)),zA=(t,e,r,n)=>{H.warn("Copying children of ",t,"root",n,"data",e.node(t),n);const i=e.children(t)||[];t!==n&&i.push(t),H.warn("Copying (nodes) clusterId",t,"nodes",i),i.forEach(a=>{if(e.children(a).length>0)zA(a,e,r,n);else{const s=e.node(a);H.info("cp ",a," to ",n," with parent ",t),r.setNode(a,s),n!==e.parent(a)&&(H.warn("Setting parent",a,e.parent(a)),r.setParent(a,e.parent(a))),t!==n&&a!==t?(H.debug("Setting parent",a,t),r.setParent(a,t)):(H.info("In copy ",t,"root",n,"data",e.node(t),n),H.debug("Not Setting parent for node=",a,"cluster!==rootId",t!==n,"node!==clusterId",a!==t));const o=e.edges(a);H.debug("Copying Edges",o),o.forEach(l=>{H.info("Edge",l);const u=e.edge(l.v,l.w,l.name);H.info("Edge data",u,n);try{Htt(l,n)?(H.info("Copying as ",l.v,l.w,u,l.name),r.setEdge(l.v,l.w,u,l.name),H.info("newGraph edges ",r.edges(),r.edge(r.edges()[0]))):H.info("Skipping copy of edge ",l.v,"-->",l.w," rootId: ",n," clusterId:",t)}catch(h){H.error(h)}})}H.debug("Removing node",a),e.removeNode(a)})},YA=(t,e)=>{const r=e.children(t);let n=[].concat(r);for(let i=0;i<r.length;i++)VA[r[i]]=t,n=n.concat(YA(r[i],e));return n},Qc=(t,e)=>{H.trace("Searching",t);const r=e.children(t);if(H.trace("Searching children of id ",t,r),r.length<1)return H.trace("This is a valid node",t),t;for(let n=0;n<r.length;n++){const i=Qc(r[n],e);if(i)return H.trace("Found replacement for",t," => ",i),i}},H1=t=>!Re[t]||!Re[t].externalConnections?t:Re[t]?Re[t].id:t,Gtt=(t,e)=>{if(!t||e>10){H.debug("Opting out, no graph ");return}else H.debug("Opting in, graph ");t.nodes().forEach(function(r){t.children(r).length>0&&(H.warn("Cluster identified",r," Replacement id in edges: ",Qc(r,t)),mi[r]=YA(r,t),Re[r]={id:Qc(r,t),clusterData:t.node(r)})}),t.nodes().forEach(function(r){const n=t.children(r),i=t.edges();n.length>0?(H.debug("Cluster identified",r,mi),i.forEach(a=>{if(a.v!==r&&a.w!==r){const s=W1(a.v,r),o=W1(a.w,r);s^o&&(H.warn("Edge: ",a," leaves cluster ",r),H.warn("Decendants of XXX ",r,": ",mi[r]),Re[r].externalConnections=!0)}})):H.debug("Not a cluster ",r,mi)}),t.edges().forEach(function(r){const n=t.edge(r);H.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(r)),H.warn("Edge "+r.v+" -> "+r.w+": "+JSON.stringify(t.edge(r)));let i=r.v,a=r.w;if(H.warn("Fix XXX",Re,"ids:",r.v,r.w,"Translateing: ",Re[r.v]," --- ",Re[r.w]),Re[r.v]&&Re[r.w]&&Re[r.v]===Re[r.w]){H.warn("Fixing and trixing link to self - removing XXX",r.v,r.w,r.name),H.warn("Fixing and trixing - removing XXX",r.v,r.w,r.name),i=H1(r.v),a=H1(r.w),t.removeEdge(r.v,r.w,r.name);const s=r.w+"---"+r.v;t.setNode(s,{domId:s,id:s,labelStyle:"",labelText:n.label,padding:0,shape:"labelRect",style:""});const o=JSON.parse(JSON.stringify(n)),l=JSON.parse(JSON.stringify(n));o.label="",o.arrowTypeEnd="none",l.label="",o.fromCluster=r.v,l.toCluster=r.v,t.setEdge(i,s,o,r.name+"-cyclic-special"),t.setEdge(s,a,l,r.name+"-cyclic-special")}else(Re[r.v]||Re[r.w])&&(H.warn("Fixing and trixing - removing XXX",r.v,r.w,r.name),i=H1(r.v),a=H1(r.w),t.removeEdge(r.v,r.w,r.name),i!==r.v&&(n.fromCluster=r.v),a!==r.w&&(n.toCluster=r.w),H.warn("Fix Replacing with XXX",i,a,r.name),t.setEdge(i,a,n,r.name))}),H.warn("Adjusted Graph",cr.json.write(t)),UA(t,0),H.trace(Re)},UA=(t,e)=>{if(H.warn("extractor - ",e,cr.json.write(t),t.children("D")),e>10){H.error("Bailing out");return}let r=t.nodes(),n=!1;for(let i=0;i<r.length;i++){const a=r[i],s=t.children(a);n=n||s.length>0}if(!n){H.debug("Done, no node has children",t.nodes());return}H.debug("Nodes = ",r,e);for(let i=0;i<r.length;i++){const a=r[i];if(H.debug("Extracting node",a,Re,Re[a]&&!Re[a].externalConnections,!t.parent(a),t.node(a),t.children("D")," Depth ",e),!Re[a])H.debug("Not a cluster",a,e);else if(!Re[a].externalConnections&&t.children(a)&&t.children(a).length>0){H.warn("Cluster without external connections, without a parent and with children",a,e);let o=t.graph().rankdir==="TB"?"LR":"TB";Re[a]&&Re[a].clusterData&&Re[a].clusterData.dir&&(o=Re[a].clusterData.dir,H.warn("Fixing dir",Re[a].clusterData.dir,o));const l=new cr.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:o,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});H.warn("Old graph before copy",cr.json.write(t)),zA(a,t,l,a),t.setNode(a,{clusterNode:!0,id:a,clusterData:Re[a].clusterData,labelText:Re[a].labelText,graph:l}),H.warn("New graph after copy node: (",a,")",cr.json.write(l)),H.debug("Old graph after copy",cr.json.write(t))}else H.warn("Cluster ** ",a," **not meeting the criteria !externalConnections:",!Re[a].externalConnections," no parent: ",!t.parent(a)," children ",t.children(a)&&t.children(a).length>0,t.children("D"),e),H.debug(Re)}r=t.nodes(),H.warn("New list of nodes",r);for(let i=0;i<r.length;i++){const a=r[i],s=t.node(a);H.warn(" Now next level",a,s),s.clusterNode&&UA(s.graph,e+1)}},WA=(t,e)=>{if(e.length===0)return[];let r=Object.assign(e);return e.forEach(n=>{const i=t.children(n),a=WA(t,i);r=r.concat(a)}),r},jtt=t=>WA(t,t.children());function $tt(t,e){return t.intersect(e)}function HA(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,o=a-n.y,l=Math.sqrt(e*e*o*o+r*r*s*s),u=Math.abs(e*r*s/l);n.x<i&&(u=-u);var h=Math.abs(e*r*o/l);return n.y<a&&(h=-h),{x:i+u,y:a+h}}function Xtt(t,e,r){return HA(t,e,e,r)}function Ktt(t,e,r,n){var i,a,s,o,l,u,h,d,f,p,m,_,y,b,x;if(i=e.y-t.y,s=t.x-e.x,l=e.x*t.y-t.x*e.y,f=i*r.x+s*r.y+l,p=i*n.x+s*n.y+l,!(f!==0&&p!==0&&GA(f,p))&&(a=n.y-r.y,o=r.x-n.x,u=n.x*r.y-r.x*n.y,h=a*t.x+o*t.y+u,d=a*e.x+o*e.y+u,!(h!==0&&d!==0&&GA(h,d))&&(m=i*o-a*s,m!==0)))return _=Math.abs(m/2),y=s*u-o*l,b=y<0?(y-_)/m:(y+_)/m,y=a*l-i*u,x=y<0?(y-_)/m:(y+_)/m,{x:b,y:x}}function GA(t,e){return t*e>0}function Ztt(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY;typeof e.forEach=="function"?e.forEach(function(m){s=Math.min(s,m.x),o=Math.min(o,m.y)}):(s=Math.min(s,e.x),o=Math.min(o,e.y));for(var l=n-t.width/2-s,u=i-t.height/2-o,h=0;h<e.length;h++){var d=e[h],f=e[h<e.length-1?h+1:0],p=Ktt(t,r,{x:l+d.x,y:u+d.y},{x:l+f.x,y:u+f.y});p&&a.push(p)}return a.length?(a.length>1&&a.sort(function(m,_){var y=m.x-r.x,b=m.y-r.y,x=Math.sqrt(y*y+b*b),k=_.x-r.x,T=_.y-r.y,C=Math.sqrt(k*k+T*T);return x<C?-1:x===C?0:1}),a[0]):t}const Jc=(t,e)=>{var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,o=t.height/2,l,u;return Math.abs(a)*s>Math.abs(i)*o?(a<0&&(o=-o),l=a===0?0:o*i/a,u=o):(i<0&&(s=-s),l=s,u=i===0?0:s*a/i),{x:r+l,y:n+u}},ir={node:$tt,circle:Xtt,ellipse:HA,polygon:Ztt,rect:Jc},Qtt=(t,e)=>{const{shapeSvg:r,bbox:n,halfPadding:i}=Yr(t,e,"node "+e.classes,!0);H.info("Classes = ",e.classes);const a=r.insert("rect",":first-child");return a.attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2-i).attr("y",-n.height/2-i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),ur(e,a),e.intersect=function(s){return ir.rect(e,s)},r},Jtt=(t,e)=>{const{shapeSvg:r,bbox:n}=Yr(t,e,void 0,!0),i=n.width+e.padding,a=n.height+e.padding,s=i+a,o=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}];H.info("Question main (Circle)");const l=ca(r,s,s,o);return l.attr("style",e.style),ur(e,l),e.intersect=function(u){return H.warn("Intersect called"),ir.polygon(e,o,u)},r},tet=(t,e)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=28,i=[{x:0,y:n/2},{x:n/2,y:0},{x:0,y:-n/2},{x:-n/2,y:0}];return r.insert("polygon",":first-child").attr("points",i.map(function(s){return s.x+","+s.y}).join(" ")).attr("class","state-start").attr("r",7).attr("width",28).attr("height",28),e.width=28,e.height=28,e.intersect=function(s){return ir.circle(e,14,s)},r},eet=(t,e)=>{const{shapeSvg:r,bbox:n}=Yr(t,e,void 0,!0),i=4,a=n.height+e.padding,s=a/i,o=n.width+2*s+e.padding,l=[{x:s,y:0},{x:o-s,y:0},{x:o,y:-a/2},{x:o-s,y:-a},{x:s,y:-a},{x:0,y:-a/2}],u=ca(r,o,a,l);return u.attr("style",e.style),ur(e,u),e.intersect=function(h){return ir.polygon(e,l,h)},r},ret=(t,e)=>{const{shapeSvg:r,bbox:n}=Yr(t,e,void 0,!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-a/2,y:0},{x:i,y:0},{x:i,y:-a},{x:-a/2,y:-a},{x:0,y:-a/2}];return ca(r,i,a,s).attr("style",e.style),e.width=i+a,e.height=a,e.intersect=function(l){return ir.polygon(e,s,l)},r},net=(t,e)=>{const{shapeSvg:r,bbox:n}=Yr(t,e,void 0,!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:a/6,y:-a}],o=ca(r,i,a,s);return o.attr("style",e.style),ur(e,o),e.intersect=function(l){return ir.polygon(e,s,l)},r},iet=(t,e)=>{const{shapeSvg:r,bbox:n}=Yr(t,e,void 0,!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:2*a/6,y:0},{x:i+a/6,y:0},{x:i-2*a/6,y:-a},{x:-a/6,y:-a}],o=ca(r,i,a,s);return o.attr("style",e.style),ur(e,o),e.intersect=function(l){return ir.polygon(e,s,l)},r},aet=(t,e)=>{const{shapeSvg:r,bbox:n}=Yr(t,e,void 0,!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:-2*a/6,y:0},{x:i+2*a/6,y:0},{x:i-a/6,y:-a},{x:a/6,y:-a}],o=ca(r,i,a,s);return o.attr("style",e.style),ur(e,o),e.intersect=function(l){return ir.polygon(e,s,l)},r},set=(t,e)=>{const{shapeSvg:r,bbox:n}=Yr(t,e,void 0,!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:a/6,y:0},{x:i-a/6,y:0},{x:i+2*a/6,y:-a},{x:-2*a/6,y:-a}],o=ca(r,i,a,s);return o.attr("style",e.style),ur(e,o),e.intersect=function(l){return ir.polygon(e,s,l)},r},oet=(t,e)=>{const{shapeSvg:r,bbox:n}=Yr(t,e,void 0,!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i+a/2,y:0},{x:i,y:-a/2},{x:i+a/2,y:-a},{x:0,y:-a}],o=ca(r,i,a,s);return o.attr("style",e.style),ur(e,o),e.intersect=function(l){return ir.polygon(e,s,l)},r},cet=(t,e)=>{const{shapeSvg:r,bbox:n}=Yr(t,e,void 0,!0),i=n.width+e.padding,a=i/2,s=a/(2.5+i/50),o=n.height+s+e.padding,l="M 0,"+s+" a "+a+","+s+" 0,0,0 "+i+" 0 a "+a+","+s+" 0,0,0 "+-i+" 0 l 0,"+o+" a "+a+","+s+" 0,0,0 "+i+" 0 l 0,"+-o,u=r.attr("label-offset-y",s).insert("path",":first-child").attr("style",e.style).attr("d",l).attr("transform","translate("+-i/2+","+-(o/2+s)+")");return ur(e,u),e.intersect=function(h){const d=ir.rect(e,h),f=d.x-e.x;if(a!=0&&(Math.abs(f)<e.width/2||Math.abs(f)==e.width/2&&Math.abs(d.y-e.y)>e.height/2-s)){let p=s*s*(1-f*f/(a*a));p!=0&&(p=Math.sqrt(p)),p=s-p,h.y-e.y>0&&(p=-p),d.y+=p}return d},r},uet=(t,e)=>{const{shapeSvg:r,bbox:n,halfPadding:i}=Yr(t,e,"node "+e.classes,!0);H.trace("Classes = ",e.classes);const a=r.insert("rect",":first-child"),s=n.width+e.padding,o=n.height+e.padding;if(a.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-n.width/2-i).attr("y",-n.height/2-i).attr("width",s).attr("height",o),e.props){const l=new Set(Object.keys(e.props));e.props.borders&&(jA(a,e.props.borders,s,o),l.delete("borders")),l.forEach(u=>{H.warn(`Unknown node property ${u}`)})}return ur(e,a),e.intersect=function(l){return ir.rect(e,l)},r},het=(t,e)=>{const{shapeSvg:r}=Yr(t,e,"label",!0);H.trace("Classes = ",e.classes);const n=r.insert("rect",":first-child"),i=0,a=0;if(n.attr("width",i).attr("height",a),r.attr("class","label edgeLabel"),e.props){const s=new Set(Object.keys(e.props));e.props.borders&&(jA(n,e.props.borders,i,a),s.delete("borders")),s.forEach(o=>{H.warn(`Unknown node property ${o}`)})}return ur(e,n),e.intersect=function(s){return ir.rect(e,s)},r};function jA(t,e,r,n){const i=[],a=o=>{i.push(o),i.push(0)},s=o=>{i.push(0),i.push(o)};e.includes("t")?(H.debug("add top border"),a(r)):s(r),e.includes("r")?(H.debug("add right border"),a(n)):s(n),e.includes("b")?(H.debug("add bottom border"),a(r)):s(r),e.includes("l")?(H.debug("add left border"),a(n)):s(n),t.attr("stroke-dasharray",i.join(" "))}const fet=(t,e)=>{let r;e.classes?r="node "+e.classes:r="node default";const n=t.insert("g").attr("class",r).attr("id",e.domId||e.id),i=n.insert("rect",":first-child"),a=n.insert("line"),s=n.insert("g").attr("class","label"),o=e.labelText.flat?e.labelText.flat():e.labelText;let l="";typeof o=="object"?l=o[0]:l=o,H.info("Label text abc79",l,o,typeof o=="object");const u=s.node().appendChild(xn(l,e.labelStyle,!0,!0));let h={width:0,height:0};if(Mr(nt().flowchart.htmlLabels)){const _=u.children[0],y=St(u);h=_.getBoundingClientRect(),y.attr("width",h.width),y.attr("height",h.height)}H.info("Text 2",o);const d=o.slice(1,o.length);let f=u.getBBox();const p=s.node().appendChild(xn(d.join?d.join("<br/>"):d,e.labelStyle,!0,!0));if(Mr(nt().flowchart.htmlLabels)){const _=p.children[0],y=St(p);h=_.getBoundingClientRect(),y.attr("width",h.width),y.attr("height",h.height)}const m=e.padding/2;return St(p).attr("transform","translate( "+(h.width>f.width?0:(f.width-h.width)/2)+", "+(f.height+m+5)+")"),St(u).attr("transform","translate( "+(h.width<f.width?0:-(f.width-h.width)/2)+", "+0+")"),h=s.node().getBBox(),s.attr("transform","translate("+-h.width/2+", "+(-h.height/2-m+3)+")"),i.attr("class","outer title-state").attr("x",-h.width/2-m).attr("y",-h.height/2-m).attr("width",h.width+e.padding).attr("height",h.height+e.padding),a.attr("class","divider").attr("x1",-h.width/2-m).attr("x2",h.width/2+m).attr("y1",-h.height/2-m+f.height+m).attr("y2",-h.height/2-m+f.height+m),ur(e,i),e.intersect=function(_){return ir.rect(e,_)},n},det=(t,e)=>{const{shapeSvg:r,bbox:n}=Yr(t,e,void 0,!0),i=n.height+e.padding,a=n.width+i/4+e.padding,s=r.insert("rect",":first-child").attr("style",e.style).attr("rx",i/2).attr("ry",i/2).attr("x",-a/2).attr("y",-i/2).attr("width",a).attr("height",i);return ur(e,s),e.intersect=function(o){return ir.rect(e,o)},r},pet=(t,e)=>{const{shapeSvg:r,bbox:n,halfPadding:i}=Yr(t,e,void 0,!0),a=r.insert("circle",":first-child");return a.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),H.info("Circle main"),ur(e,a),e.intersect=function(s){return H.info("Circle intersect",e,n.width/2+i,s),ir.circle(e,n.width/2+i,s)},r},get=(t,e)=>{const{shapeSvg:r,bbox:n,halfPadding:i}=Yr(t,e,void 0,!0),a=5,s=r.insert("g",":first-child"),o=s.insert("circle"),l=s.insert("circle");return o.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i+a).attr("width",n.width+e.padding+a*2).attr("height",n.height+e.padding+a*2),l.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("r",n.width/2+i).attr("width",n.width+e.padding).attr("height",n.height+e.padding),H.info("DoubleCircle main"),ur(e,o),e.intersect=function(u){return H.info("DoubleCircle intersect",e,n.width/2+i+a,u),ir.circle(e,n.width/2+i+a,u)},r},yet=(t,e)=>{const{shapeSvg:r,bbox:n}=Yr(t,e,void 0,!0),i=n.width+e.padding,a=n.height+e.padding,s=[{x:0,y:0},{x:i,y:0},{x:i,y:-a},{x:0,y:-a},{x:0,y:0},{x:-8,y:0},{x:i+8,y:0},{x:i+8,y:-a},{x:-8,y:-a},{x:-8,y:0}],o=ca(r,i,a,s);return o.attr("style",e.style),ur(e,o),e.intersect=function(l){return ir.polygon(e,s,l)},r},met=(t,e)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child");return n.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),ur(e,n),e.intersect=function(i){return ir.circle(e,7,i)},r},$A=(t,e,r)=>{const n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id);let i=70,a=10;r==="LR"&&(i=10,a=70);const s=n.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return ur(e,s),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(o){return ir.rect(e,o)},n},XA={question:Jtt,rect:uet,labelRect:het,rectWithTitle:fet,choice:tet,circle:pet,doublecircle:get,stadium:det,hexagon:eet,rect_left_inv_arrow:ret,lean_right:net,lean_left:iet,trapezoid:aet,inv_trapezoid:set,rect_right_inv_arrow:oet,cylinder:cet,start:met,end:(t,e)=>{const r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),n=r.insert("circle",":first-child"),i=r.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),n.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),ur(e,i),e.intersect=function(a){return ir.circle(e,7,a)},r},note:Qtt,subroutine:yet,fork:$A,join:$A,class_box:(t,e)=>{const r=e.padding/2,n=4,i=8;let a;e.classes?a="node "+e.classes:a="node default";const s=t.insert("g").attr("class",a).attr("id",e.domId||e.id),o=s.insert("rect",":first-child"),l=s.insert("line"),u=s.insert("line");let h=0,d=n;const f=s.insert("g").attr("class","label");let p=0;const m=e.classData.annotations&&e.classData.annotations[0],_=e.classData.annotations[0]?"\xAB"+e.classData.annotations[0]+"\xBB":"",y=f.node().appendChild(xn(_,e.labelStyle,!0,!0));let b=y.getBBox();if(Mr(nt().flowchart.htmlLabels)){const R=y.children[0],A=St(y);b=R.getBoundingClientRect(),A.attr("width",b.width),A.attr("height",b.height)}e.classData.annotations[0]&&(d+=b.height+n,h+=b.width);let x=e.classData.id;e.classData.type!==void 0&&e.classData.type!==""&&(nt().flowchart.htmlLabels?x+="&lt;"+e.classData.type+"&gt;":x+="<"+e.classData.type+">");const k=f.node().appendChild(xn(x,e.labelStyle,!0,!0));St(k).attr("class","classTitle");let T=k.getBBox();if(Mr(nt().flowchart.htmlLabels)){const R=k.children[0],A=St(k);T=R.getBoundingClientRect(),A.attr("width",T.width),A.attr("height",T.height)}d+=T.height+n,T.width>h&&(h=T.width);const C=[];e.classData.members.forEach(R=>{const A=z1(R);let L=A.displayText;nt().flowchart.htmlLabels&&(L=L.replace(/</g,"&lt;").replace(/>/g,"&gt;"));const v=f.node().appendChild(xn(L,A.cssStyle?A.cssStyle:e.labelStyle,!0,!0));let B=v.getBBox();if(Mr(nt().flowchart.htmlLabels)){const w=v.children[0],D=St(v);B=w.getBoundingClientRect(),D.attr("width",B.width),D.attr("height",B.height)}B.width>h&&(h=B.width),d+=B.height+n,C.push(v)}),d+=i;const M=[];if(e.classData.methods.forEach(R=>{const A=z1(R);let L=A.displayText;nt().flowchart.htmlLabels&&(L=L.replace(/</g,"&lt;").replace(/>/g,"&gt;"));const v=f.node().appendChild(xn(L,A.cssStyle?A.cssStyle:e.labelStyle,!0,!0));let B=v.getBBox();if(Mr(nt().flowchart.htmlLabels)){const w=v.children[0],D=St(v);B=w.getBoundingClientRect(),D.attr("width",B.width),D.attr("height",B.height)}B.width>h&&(h=B.width),d+=B.height+n,M.push(v)}),d+=i,m){let R=(h-b.width)/2;St(y).attr("transform","translate( "+(-1*h/2+R)+", "+-1*d/2+")"),p=b.height+n}let S=(h-T.width)/2;return St(k).attr("transform","translate( "+(-1*h/2+S)+", "+(-1*d/2+p)+")"),p+=T.height+n,l.attr("class","divider").attr("x1",-h/2-r).attr("x2",h/2+r).attr("y1",-d/2-r+i+p).attr("y2",-d/2-r+i+p),p+=i,C.forEach(R=>{St(R).attr("transform","translate( "+-h/2+", "+(-1*d/2+p+i/2)+")"),p+=T.height+n}),p+=i,u.attr("class","divider").attr("x1",-h/2-r).attr("x2",h/2+r).attr("y1",-d/2-r+i+p).attr("y2",-d/2-r+i+p),p+=i,M.forEach(R=>{St(R).attr("transform","translate( "+-h/2+", "+(-1*d/2+p)+")"),p+=T.height+n}),o.attr("class","outer title-state").attr("x",-h/2-r).attr("y",-(d/2)-r).attr("width",h+e.padding).attr("height",d+e.padding),ur(e,o),e.intersect=function(R){return ir.rect(e,R)},s}};let nl={};const bet=(t,e,r)=>{let n,i;if(e.link){let a;nt().securityLevel==="sandbox"?a="_top":e.linkTarget&&(a=e.linkTarget||"_blank"),n=t.insert("svg:a").attr("xlink:href",e.link).attr("target",a),i=XA[e.shape](n,e,r)}else i=XA[e.shape](t,e,r),n=i;e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),nl[e.id]=n,e.haveCallback&&nl[e.id].attr("class",nl[e.id].attr("class")+" clickable")},_et=(t,e)=>{nl[e.id]=t},vet=()=>{nl={}},KA=t=>{const e=nl[t.id];H.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");const r=8,n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-r)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},xet={rect:(t,e)=>{H.trace("Creating subgraph rect for ",e.id,e);const r=t.insert("g").attr("class","cluster"+(e.class?" "+e.class:"")).attr("id",e.id),n=r.insert("rect",":first-child"),i=r.insert("g").attr("class","cluster-label"),a=i.node().appendChild(xn(e.labelText,e.labelStyle,void 0,!0));let s=a.getBBox();if(Mr(nt().flowchart.htmlLabels)){const d=a.children[0],f=St(a);s=d.getBoundingClientRect(),f.attr("width",s.width),f.attr("height",s.height)}const o=0*e.padding,l=o/2,u=e.width<=s.width+o?s.width+o:e.width;e.width<=s.width+o?e.diff=(s.width-e.width)/2-e.padding/2:e.diff=-e.padding/2,H.trace("Data ",e,JSON.stringify(e)),n.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-u/2).attr("y",e.y-e.height/2-l).attr("width",u).attr("height",e.height+o),i.attr("transform","translate("+(e.x-s.width/2)+", "+(e.y-e.height/2+e.padding/3)+")");const h=n.node().getBBox();return e.width=h.width,e.height=h.height,e.intersect=function(d){return Jc(e,d)},r},roundedWithTitle:(t,e)=>{const r=t.insert("g").attr("class",e.classes).attr("id",e.id),n=r.insert("rect",":first-child"),i=r.insert("g").attr("class","cluster-label"),a=r.append("rect"),s=i.node().appendChild(xn(e.labelText,e.labelStyle,void 0,!0));let o=s.getBBox();if(Mr(nt().flowchart.htmlLabels)){const f=s.children[0],p=St(s);o=f.getBoundingClientRect(),p.attr("width",o.width),p.attr("height",o.height)}o=s.getBBox();const l=0*e.padding,u=l/2,h=e.width<=o.width+e.padding?o.width+e.padding:e.width;e.width<=o.width+e.padding?e.diff=(o.width+e.padding*0-e.width)/2:e.diff=-e.padding/2,n.attr("class","outer").attr("x",e.x-h/2-u).attr("y",e.y-e.height/2-u).attr("width",h+l).attr("height",e.height+l),a.attr("class","inner").attr("x",e.x-h/2-u).attr("y",e.y-e.height/2-u+o.height-1).attr("width",h+l).attr("height",e.height+l-o.height-3),i.attr("transform","translate("+(e.x-o.width/2)+", "+(e.y-e.height/2-e.padding/3+(Mr(nt().flowchart.htmlLabels)?5:3))+")");const d=n.node().getBBox();return e.height=d.height,e.intersect=function(f){return Jc(e,f)},r},noteGroup:(t,e)=>{const r=t.insert("g").attr("class","note-cluster").attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");const s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.intersect=function(o){return Jc(e,o)},r},divider:(t,e)=>{const r=t.insert("g").attr("class",e.classes).attr("id",e.id),n=r.insert("rect",":first-child"),i=0*e.padding,a=i/2;n.attr("class","divider").attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2).attr("width",e.width+i).attr("height",e.height+i);const s=n.node().getBBox();return e.width=s.width,e.height=s.height,e.diff=-e.padding/2,e.intersect=function(o){return Jc(e,o)},r}};let ZA={};const ket=(t,e)=>{H.trace("Inserting cluster");const r=e.shape||"rect";ZA[e.id]=xet[r](t,e)},wet=()=>{ZA={}};let G1={},Nr={};const Tet=()=>{G1={},Nr={}},Eet=(t,e)=>{const r=xn(e.label,e.labelStyle),n=t.insert("g").attr("class","edgeLabel"),i=n.insert("g").attr("class","label");i.node().appendChild(r);let a=r.getBBox();if(Mr(nt().flowchart.htmlLabels)){const o=r.children[0],l=St(r);a=o.getBoundingClientRect(),l.attr("width",a.width),l.attr("height",a.height)}i.attr("transform","translate("+-a.width/2+", "+-a.height/2+")"),G1[e.id]=n,e.width=a.width,e.height=a.height;let s;if(e.startLabelLeft){const o=xn(e.startLabelLeft,e.labelStyle),l=t.insert("g").attr("class","edgeTerminals"),u=l.insert("g").attr("class","inner");s=u.node().appendChild(o);const h=o.getBBox();u.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),Nr[e.id]||(Nr[e.id]={}),Nr[e.id].startLeft=l,j1(s,e.startLabelLeft)}if(e.startLabelRight){const o=xn(e.startLabelRight,e.labelStyle),l=t.insert("g").attr("class","edgeTerminals"),u=l.insert("g").attr("class","inner");s=l.node().appendChild(o),u.node().appendChild(o);const h=o.getBBox();u.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),Nr[e.id]||(Nr[e.id]={}),Nr[e.id].startRight=l,j1(s,e.startLabelRight)}if(e.endLabelLeft){const o=xn(e.endLabelLeft,e.labelStyle),l=t.insert("g").attr("class","edgeTerminals"),u=l.insert("g").attr("class","inner");s=u.node().appendChild(o);const h=o.getBBox();u.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),l.node().appendChild(o),Nr[e.id]||(Nr[e.id]={}),Nr[e.id].endLeft=l,j1(s,e.endLabelLeft)}if(e.endLabelRight){const o=xn(e.endLabelRight,e.labelStyle),l=t.insert("g").attr("class","edgeTerminals"),u=l.insert("g").attr("class","inner");s=u.node().appendChild(o);const h=o.getBBox();u.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),l.node().appendChild(o),Nr[e.id]||(Nr[e.id]={}),Nr[e.id].endRight=l,j1(s,e.endLabelRight)}};function j1(t,e){nt().flowchart.htmlLabels&&t&&(t.style.width=e.length*9+"px",t.style.height="12px")}const Cet=(t,e)=>{H.info("Moving label abc78 ",t.id,t.label,G1[t.id]);let r=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){const n=G1[t.id];let i=t.x,a=t.y;if(r){const s=Se.calcLabelPosition(r);H.info("Moving label from (",i,",",a,") to (",s.x,",",s.y,") abc78")}n.attr("transform","translate("+i+", "+a+")")}if(t.startLabelLeft){const n=Nr[t.id].startLeft;let i=t.x,a=t.y;if(r){const s=Se.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_left",r);i=s.x,a=s.y}n.attr("transform","translate("+i+", "+a+")")}if(t.startLabelRight){const n=Nr[t.id].startRight;let i=t.x,a=t.y;if(r){const s=Se.calcTerminalLabelPosition(t.arrowTypeStart?10:0,"start_right",r);i=s.x,a=s.y}n.attr("transform","translate("+i+", "+a+")")}if(t.endLabelLeft){const n=Nr[t.id].endLeft;let i=t.x,a=t.y;if(r){const s=Se.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_left",r);i=s.x,a=s.y}n.attr("transform","translate("+i+", "+a+")")}if(t.endLabelRight){const n=Nr[t.id].endRight;let i=t.x,a=t.y;if(r){const s=Se.calcTerminalLabelPosition(t.arrowTypeEnd?10:0,"end_right",r);i=s.x,a=s.y}n.attr("transform","translate("+i+", "+a+")")}},Aet=(t,e)=>{const r=t.x,n=t.y,i=Math.abs(e.x-r),a=Math.abs(e.y-n),s=t.width/2,o=t.height/2;return i>=s||a>=o},Met=(t,e,r)=>{H.warn(`intersection calc abc89:
+  outsidePoint: ${JSON.stringify(e)}
+  insidePoint : ${JSON.stringify(r)}
+  node        : x:${t.x} y:${t.y} w:${t.width} h:${t.height}`);const n=t.x,i=t.y,a=Math.abs(n-r.x),s=t.width/2;let o=r.x<e.x?s-a:s+a;const l=t.height/2,u=Math.abs(e.y-r.y),h=Math.abs(e.x-r.x);if(Math.abs(i-e.y)*s>Math.abs(n-e.x)*l){let d=r.y<e.y?e.y-l-i:i-l-e.y;o=h*d/u;const f={x:r.x<e.x?r.x+o:r.x-h+o,y:r.y<e.y?r.y+u-d:r.y-u+d};return o===0&&(f.x=e.x,f.y=e.y),h===0&&(f.x=e.x),u===0&&(f.y=e.y),H.warn(`abc89 topp/bott calc, Q ${u}, q ${d}, R ${h}, r ${o}`,f),f}else{r.x<e.x?o=e.x-s-n:o=n-s-e.x;let d=u*o/h,f=r.x<e.x?r.x+h-o:r.x-h+o,p=r.y<e.y?r.y+d:r.y-d;return H.warn(`sides calc abc89, Q ${u}, q ${d}, R ${h}, r ${o}`,{_x:f,_y:p}),o===0&&(f=e.x,p=e.y),h===0&&(f=e.x),u===0&&(p=e.y),{x:f,y:p}}},QA=(t,e)=>{H.warn("abc88 cutPathAtIntersect",t,e);let r=[],n=t[0],i=!1;return t.forEach(a=>{if(H.info("abc88 checking point",a,e),!Aet(e,a)&&!i){const s=Met(e,n,a);H.warn("abc88 inside",a,n,s),H.warn("abc88 intersection",s);let o=!1;r.forEach(l=>{o=o||l.x===s.x&&l.y===s.y}),r.find(l=>l.x===s.x&&l.y===s.y)?H.warn("abc88 no intersect",s,r):r.push(s),i=!0}else H.warn("abc88 outside",a,n),n=a,i||r.push(a)}),H.warn("abc88 returning points",r),r},Let=function(t,e,r,n,i,a){let s=r.points,o=!1;const l=a.node(e.v);var u=a.node(e.w);H.info("abc88 InsertEdge: ",r),u.intersect&&l.intersect&&(s=s.slice(1,r.points.length-1),s.unshift(l.intersect(s[0])),H.info("Last point",s[s.length-1],u,u.intersect(s[s.length-1])),s.push(u.intersect(s[s.length-1]))),r.toCluster&&(H.info("to cluster abc88",n[r.toCluster]),s=QA(r.points,n[r.toCluster].node),o=!0),r.fromCluster&&(H.info("from cluster abc88",n[r.fromCluster]),s=QA(s.reverse(),n[r.fromCluster].node).reverse(),o=!0);const h=s.filter(b=>!Number.isNaN(b.y));let d;i==="graph"||i==="flowchart"?d=r.curve||Os:d=Os;const f=Ua().x(function(b){return b.x}).y(function(b){return b.y}).curve(d);let p;switch(r.thickness){case"normal":p="edge-thickness-normal";break;case"thick":p="edge-thickness-thick";break;case"invisible":p="edge-thickness-thick";break;default:p=""}switch(r.pattern){case"solid":p+=" edge-pattern-solid";break;case"dotted":p+=" edge-pattern-dotted";break;case"dashed":p+=" edge-pattern-dashed";break}const m=t.append("path").attr("d",f(h)).attr("id",r.id).attr("class"," "+p+(r.classes?" "+r.classes:"")).attr("style",r.style);let _="";switch((nt().flowchart.arrowMarkerAbsolute||nt().state.arrowMarkerAbsolute)&&(_=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,_=_.replace(/\(/g,"\\("),_=_.replace(/\)/g,"\\)")),H.info("arrowTypeStart",r.arrowTypeStart),H.info("arrowTypeEnd",r.arrowTypeEnd),r.arrowTypeStart){case"arrow_cross":m.attr("marker-start","url("+_+"#"+i+"-crossStart)");break;case"arrow_point":m.attr("marker-start","url("+_+"#"+i+"-pointStart)");break;case"arrow_barb":m.attr("marker-start","url("+_+"#"+i+"-barbStart)");break;case"arrow_circle":m.attr("marker-start","url("+_+"#"+i+"-circleStart)");break;case"aggregation":m.attr("marker-start","url("+_+"#"+i+"-aggregationStart)");break;case"extension":m.attr("marker-start","url("+_+"#"+i+"-extensionStart)");break;case"composition":m.attr("marker-start","url("+_+"#"+i+"-compositionStart)");break;case"dependency":m.attr("marker-start","url("+_+"#"+i+"-dependencyStart)");break;case"lollipop":m.attr("marker-start","url("+_+"#"+i+"-lollipopStart)");break}switch(r.arrowTypeEnd){case"arrow_cross":m.attr("marker-end","url("+_+"#"+i+"-crossEnd)");break;case"arrow_point":m.attr("marker-end","url("+_+"#"+i+"-pointEnd)");break;case"arrow_barb":m.attr("marker-end","url("+_+"#"+i+"-barbEnd)");break;case"arrow_circle":m.attr("marker-end","url("+_+"#"+i+"-circleEnd)");break;case"aggregation":m.attr("marker-end","url("+_+"#"+i+"-aggregationEnd)");break;case"extension":m.attr("marker-end","url("+_+"#"+i+"-extensionEnd)");break;case"composition":m.attr("marker-end","url("+_+"#"+i+"-compositionEnd)");break;case"dependency":m.attr("marker-end","url("+_+"#"+i+"-dependencyEnd)");break;case"lollipop":m.attr("marker-end","url("+_+"#"+i+"-lollipopEnd)");break}let y={};return o&&(y.updatedPath=s),y.originalPath=r.points,y},JA=(t,e,r,n)=>{H.info("Graph in recursive render: XXX",cr.json.write(e),n);const i=e.graph().rankdir;H.trace("Dir in recursive render - dir:",i);const a=t.insert("g").attr("class","root");e.nodes()?H.info("Recursive render XXX",e.nodes()):H.info("No nodes found for",e),e.edges().length>0&&H.trace("Recursive edges",e.edge(e.edges()[0]));const s=a.insert("g").attr("class","clusters"),o=a.insert("g").attr("class","edgePaths"),l=a.insert("g").attr("class","edgeLabels"),u=a.insert("g").attr("class","nodes");e.nodes().forEach(function(d){const f=e.node(d);if(typeof n<"u"){const p=JSON.parse(JSON.stringify(n.clusterData));H.info("Setting data for cluster XXX (",d,") ",p,n),e.setNode(n.id,p),e.parent(d)||(H.trace("Setting parent",d,n.id),e.setParent(d,n.id,p))}if(H.info("(Insert) Node XXX"+d+": "+JSON.stringify(e.node(d))),f&&f.clusterNode){H.info("Cluster identified",d,f.width,e.node(d));const p=JA(u,f.graph,r,e.node(d)),m=p.elem;ur(f,m),f.diff=p.diff||0,H.info("Node bounds (abc123)",d,f,f.width,f.x,f.y),_et(m,f),H.warn("Recursive render complete ",m,f)}else e.children(d).length>0?(H.info("Cluster - the non recursive path XXX",d,f.id,f,e),H.info(Qc(f.id,e)),Re[f.id]={id:Qc(f.id,e),node:f}):(H.info("Node - the non recursive path",d,f.id,f),bet(u,e.node(d),i))}),e.edges().forEach(function(d){const f=e.edge(d.v,d.w,d.name);H.info("Edge "+d.v+" -> "+d.w+": "+JSON.stringify(d)),H.info("Edge "+d.v+" -> "+d.w+": ",d," ",JSON.stringify(e.edge(d))),H.info("Fix",Re,"ids:",d.v,d.w,"Translateing: ",Re[d.v],Re[d.w]),Eet(l,f)}),e.edges().forEach(function(d){H.info("Edge "+d.v+" -> "+d.w+": "+JSON.stringify(d))}),H.info("#############################################"),H.info("###                Layout                 ###"),H.info("#############################################"),H.info(e),Zc.layout(e),H.info("Graph after layout:",cr.json.write(e));let h=0;return jtt(e).forEach(function(d){const f=e.node(d);H.info("Position "+d+": "+JSON.stringify(e.node(d))),H.info("Position "+d+": ("+f.x,","+f.y,") width: ",f.width," height: ",f.height),f&&f.clusterNode?KA(f):e.children(d).length>0?(ket(s,f),Re[f.id].node=f):KA(f)}),e.edges().forEach(function(d){const f=e.edge(d);H.info("Edge "+d.v+" -> "+d.w+": "+JSON.stringify(f),f);const p=Let(o,d,f,Re,r,e);Cet(f,p)}),e.nodes().forEach(function(d){const f=e.node(d);H.info(d,f.type,f.diff),f.type==="group"&&(h=f.diff)}),{elem:a,diff:h}},i4=(t,e,r,n,i)=>{Vtt(t,r,n,i),vet(),Tet(),wet(),Wtt(),H.warn("Graph at first:",cr.json.write(e)),Gtt(e),H.warn("Graph after:",cr.json.write(e)),JA(t,e,n)},Ret=t=>pe.sanitizeText(t,nt()),Iet=function(t,e,r,n){const i=Object.keys(t);H.info("keys:",i),H.info(t),i.forEach(function(a){const s=t[a];let o="";s.cssClasses.length>0&&(o=o+" "+s.cssClasses.join(" "));const l={labelStyle:""};let u=s.text!==void 0?s.text:s.id,h=0,d="";switch(s.type){case"class":d="class_box";break;default:d="class_box"}e.setNode(s.id,{labelStyle:l.labelStyle,shape:d,labelText:Ret(u),classData:s,rx:h,ry:h,class:o,style:l.style,id:s.id,domId:s.domId,tooltip:n.db.getTooltip(s.id)||"",haveCallback:s.haveCallback,link:s.link,width:s.type==="group"?500:void 0,type:s.type,padding:nt().flowchart.padding}),H.info("setNode",{labelStyle:l.labelStyle,shape:d,labelText:u,rx:h,ry:h,class:o,style:l.style,id:s.id,width:s.type==="group"?500:void 0,type:s.type,padding:nt().flowchart.padding})})},Net=function(t,e){const r=nt().flowchart;let n=0;t.forEach(function(i){n++;const a={};a.classes="relation",a.pattern=i.relation.lineType==1?"dashed":"solid",a.id="id"+n,i.type==="arrow_open"?a.arrowhead="none":a.arrowhead="normal",H.info(a,i),a.startLabelRight=i.relationTitle1==="none"?"":i.relationTitle1,a.endLabelLeft=i.relationTitle2==="none"?"":i.relationTitle2,a.arrowTypeStart=tM(i.relation.type1),a.arrowTypeEnd=tM(i.relation.type2);let s="",o="";if(typeof i.style<"u"){const l=Ka(i.style);s=l.style,o=l.labelStyle}else s="fill:none";a.style=s,a.labelStyle=o,typeof i.interpolate<"u"?a.curve=Ni(i.interpolate,yn):typeof t.defaultInterpolate<"u"?a.curve=Ni(t.defaultInterpolate,yn):a.curve=Ni(r.curve,yn),i.text=i.title,typeof i.text>"u"?typeof i.style<"u"&&(a.arrowheadStyle="fill: #333"):(a.arrowheadStyle="fill: #333",a.labelpos="c",nt().flowchart.htmlLabels?(a.labelType="html",a.label='<span class="edgeLabel">'+i.text+"</span>"):(a.labelType="text",a.label=i.text.replace(pe.lineBreakRegex,`
+`),typeof i.style>"u"&&(a.style=a.style||"stroke: #333; stroke-width: 1.5px;fill:none"),a.labelStyle=a.labelStyle.replace("color:","fill:"))),e.setEdge(i.id1,i.id2,a,n)})},Bet=function(t){Object.keys(t).forEach(function(r){t[r]})},Det=function(t,e,r,n){H.info("Drawing class - ",e);const i=nt().flowchart,a=nt().securityLevel;H.info("config:",i);const s=i.nodeSpacing||50,o=i.rankSpacing||50,l=new cr.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:n.db.getDirection(),nodesep:s,ranksep:o,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}}),u=n.db.getClasses(),h=n.db.getRelations();H.info(h),Iet(u,l,e,n),Net(h,l);let d;a==="sandbox"&&(d=St("#i"+e));const f=St(a==="sandbox"?d.nodes()[0].contentDocument.body:"body"),p=f.select(`[id="${e}"]`),m=f.select("#"+e+" g");if(i4(m,l,["aggregation","extension","composition","dependency","lollipop"],"classDiagram",e),i1(l,p,i.diagramPadding,i.useMaxWidth),!i.htmlLabels){const _=a==="sandbox"?d.nodes()[0].contentDocument:document,y=_.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(let b=0;b<y.length;b++){const x=y[b],k=x.getBBox(),T=_.createElementNS("http://www.w3.org/2000/svg","rect");T.setAttribute("rx",0),T.setAttribute("ry",0),T.setAttribute("width",k.width),T.setAttribute("height",k.height),x.insertBefore(T,x.firstChild)}}bn(n.db,p,e)};function tM(t){let e;switch(t){case 0:e="aggregation";break;case 1:e="extension";break;case 2:e="composition";break;case 3:e="dependency";break;case 4:e="lollipop";break;default:e="none"}return e}const Oet={setConf:Bet,draw:Det};var a4=function(){var t=function(A,L,v,B){for(v=v||{},B=A.length;B--;v[A[B]]=L);return v},e=[1,2],r=[1,5],n=[6,9,11,23,25,27,29,30,31,49],i=[1,17],a=[1,18],s=[1,19],o=[1,20],l=[1,21],u=[1,22],h=[1,25],d=[1,30],f=[1,31],p=[1,32],m=[1,33],_=[6,9,11,15,20,23,25,27,29,30,31,42,43,44,45,49],y=[1,45],b=[30,31,46,47],x=[4,6,9,11,23,25,27,29,30,31,49],k=[42,43,44,45],T=[22,37],C=[1,64],M={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,title:23,title_value:24,acc_title:25,acc_title_value:26,acc_descr:27,acc_descr_value:28,acc_descr_multiline_value:29,ALPHANUM:30,ENTITY_NAME:31,attribute:32,attributeType:33,attributeName:34,attributeKeyType:35,attributeComment:36,ATTRIBUTE_WORD:37,ATTRIBUTE_KEY:38,COMMENT:39,cardinality:40,relType:41,ZERO_OR_ONE:42,ZERO_OR_MORE:43,ONE_OR_MORE:44,ONLY_ONE:45,NON_IDENTIFYING:46,IDENTIFYING:47,WORD:48,open_directive:49,type_directive:50,arg_directive:51,close_directive:52,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"title",24:"title_value",25:"acc_title",26:"acc_title_value",27:"acc_descr",28:"acc_descr_value",29:"acc_descr_multiline_value",30:"ALPHANUM",31:"ENTITY_NAME",37:"ATTRIBUTE_WORD",38:"ATTRIBUTE_KEY",39:"COMMENT",42:"ZERO_OR_ONE",43:"ZERO_OR_MORE",44:"ONE_OR_MORE",45:"ONLY_ONE",46:"NON_IDENTIFYING",47:"IDENTIFYING",48:"WORD",49:"open_directive",50:"type_directive",51:"arg_directive",52:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[10,2],[10,2],[10,2],[10,1],[17,1],[17,1],[21,1],[21,2],[32,2],[32,3],[32,3],[32,4],[33,1],[34,1],[35,1],[36,1],[18,3],[40,1],[40,1],[40,1],[40,1],[41,1],[41,1],[19,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(L,v,B,w,D,N,z){var X=N.length-1;switch(D){case 1:break;case 3:this.$=[];break;case 4:N[X-1].push(N[X]),this.$=N[X-1];break;case 5:case 6:this.$=N[X];break;case 7:case 8:this.$=[];break;case 12:w.addEntity(N[X-4]),w.addEntity(N[X-2]),w.addRelationship(N[X-4],N[X],N[X-2],N[X-3]);break;case 13:w.addEntity(N[X-3]),w.addAttributes(N[X-3],N[X-1]);break;case 14:w.addEntity(N[X-2]);break;case 15:w.addEntity(N[X]);break;case 16:case 17:this.$=N[X].trim(),w.setAccTitle(this.$);break;case 18:case 19:this.$=N[X].trim(),w.setAccDescription(this.$);break;case 20:case 41:this.$=N[X];break;case 21:case 39:case 40:this.$=N[X].replace(/"/g,"");break;case 22:this.$=[N[X]];break;case 23:N[X].push(N[X-1]),this.$=N[X];break;case 24:this.$={attributeType:N[X-1],attributeName:N[X]};break;case 25:this.$={attributeType:N[X-2],attributeName:N[X-1],attributeKeyType:N[X]};break;case 26:this.$={attributeType:N[X-2],attributeName:N[X-1],attributeComment:N[X]};break;case 27:this.$={attributeType:N[X-3],attributeName:N[X-2],attributeKeyType:N[X-1],attributeComment:N[X]};break;case 28:case 29:case 30:this.$=N[X];break;case 31:this.$=N[X].replace(/"/g,"");break;case 32:this.$={cardA:N[X],relType:N[X-1],cardB:N[X-2]};break;case 33:this.$=w.Cardinality.ZERO_OR_ONE;break;case 34:this.$=w.Cardinality.ZERO_OR_MORE;break;case 35:this.$=w.Cardinality.ONE_OR_MORE;break;case 36:this.$=w.Cardinality.ONLY_ONE;break;case 37:this.$=w.Identification.NON_IDENTIFYING;break;case 38:this.$=w.Identification.IDENTIFYING;break;case 42:w.parseDirective("%%{","open_directive");break;case 43:w.parseDirective(N[X],"type_directive");break;case 44:N[X]=N[X].trim().replace(/'/g,'"'),w.parseDirective(N[X],"arg_directive");break;case 45:w.parseDirective("}%%","close_directive","er");break}},table:[{3:1,4:e,7:3,12:4,49:r},{1:[3]},t(n,[2,3],{5:6}),{3:7,4:e,7:3,12:4,49:r},{13:8,50:[1,9]},{50:[2,42]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:i,25:a,27:s,29:o,30:l,31:u,49:r},{1:[2,2]},{14:23,15:[1,24],52:h},t([15,52],[2,43]),t(n,[2,8],{1:[2,1]}),t(n,[2,4]),{7:15,10:26,12:4,17:16,23:i,25:a,27:s,29:o,30:l,31:u,49:r},t(n,[2,6]),t(n,[2,7]),t(n,[2,11]),t(n,[2,15],{18:27,40:29,20:[1,28],42:d,43:f,44:p,45:m}),{24:[1,34]},{26:[1,35]},{28:[1,36]},t(n,[2,19]),t(_,[2,20]),t(_,[2,21]),{11:[1,37]},{16:38,51:[1,39]},{11:[2,45]},t(n,[2,5]),{17:40,30:l,31:u},{21:41,22:[1,42],32:43,33:44,37:y},{41:46,46:[1,47],47:[1,48]},t(b,[2,33]),t(b,[2,34]),t(b,[2,35]),t(b,[2,36]),t(n,[2,16]),t(n,[2,17]),t(n,[2,18]),t(x,[2,9]),{14:49,52:h},{52:[2,44]},{15:[1,50]},{22:[1,51]},t(n,[2,14]),{21:52,22:[2,22],32:43,33:44,37:y},{34:53,37:[1,54]},{37:[2,28]},{40:55,42:d,43:f,44:p,45:m},t(k,[2,37]),t(k,[2,38]),{11:[1,56]},{19:57,30:[1,60],31:[1,59],48:[1,58]},t(n,[2,13]),{22:[2,23]},t(T,[2,24],{35:61,36:62,38:[1,63],39:C}),t([22,37,38,39],[2,29]),t([30,31],[2,32]),t(x,[2,10]),t(n,[2,12]),t(n,[2,39]),t(n,[2,40]),t(n,[2,41]),t(T,[2,25],{36:65,39:C}),t(T,[2,26]),t([22,37,39],[2,30]),t(T,[2,31]),t(T,[2,27])],defaultActions:{5:[2,42],7:[2,2],25:[2,45],39:[2,44],45:[2,28],52:[2,23]},parseError:function(L,v){if(v.recoverable)this.trace(L);else{var B=new Error(L);throw B.hash=v,B}},parse:function(L){var v=this,B=[0],w=[],D=[null],N=[],z=this.table,X="",ct=0,J=0,Y=2,$=1,lt=N.slice.call(arguments,1),ut=Object.create(this.lexer),W={yy:{}};for(var tt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,tt)&&(W.yy[tt]=this.yy[tt]);ut.setInput(L,W.yy),W.yy.lexer=ut,W.yy.parser=this,typeof ut.yylloc>"u"&&(ut.yylloc={});var K=ut.yylloc;N.push(K);var it=ut.options&&ut.options.ranges;typeof W.yy.parseError=="function"?this.parseError=W.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function Z(){var Lt;return Lt=w.pop()||ut.lex()||$,typeof Lt!="number"&&(Lt instanceof Array&&(w=Lt,Lt=w.pop()),Lt=v.symbols_[Lt]||Lt),Lt}for(var V,Q,q,U,F={},j,P,et,at;;){if(Q=B[B.length-1],this.defaultActions[Q]?q=this.defaultActions[Q]:((V===null||typeof V>"u")&&(V=Z()),q=z[Q]&&z[Q][V]),typeof q>"u"||!q.length||!q[0]){var It="";at=[];for(j in z[Q])this.terminals_[j]&&j>Y&&at.push("'"+this.terminals_[j]+"'");ut.showPosition?It="Parse error on line "+(ct+1)+`:
+`+ut.showPosition()+`
+Expecting `+at.join(", ")+", got '"+(this.terminals_[V]||V)+"'":It="Parse error on line "+(ct+1)+": Unexpected "+(V==$?"end of input":"'"+(this.terminals_[V]||V)+"'"),this.parseError(It,{text:ut.match,token:this.terminals_[V]||V,line:ut.yylineno,loc:K,expected:at})}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Q+", token: "+V);switch(q[0]){case 1:B.push(V),D.push(ut.yytext),N.push(ut.yylloc),B.push(q[1]),V=null,J=ut.yyleng,X=ut.yytext,ct=ut.yylineno,K=ut.yylloc;break;case 2:if(P=this.productions_[q[1]][1],F.$=D[D.length-P],F._$={first_line:N[N.length-(P||1)].first_line,last_line:N[N.length-1].last_line,first_column:N[N.length-(P||1)].first_column,last_column:N[N.length-1].last_column},it&&(F._$.range=[N[N.length-(P||1)].range[0],N[N.length-1].range[1]]),U=this.performAction.apply(F,[X,J,ct,W.yy,q[1],D,N].concat(lt)),typeof U<"u")return U;P&&(B=B.slice(0,-1*P*2),D=D.slice(0,-1*P),N=N.slice(0,-1*P)),B.push(this.productions_[q[1]][0]),D.push(F.$),N.push(F._$),et=z[B[B.length-2]][B[B.length-1]],B.push(et);break;case 3:return!0}}return!0}},S=function(){var A={EOF:1,parseError:function(v,B){if(this.yy.parser)this.yy.parser.parseError(v,B);else throw new Error(v)},setInput:function(L,v){return this.yy=v||this.yy||{},this._input=L,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var L=this._input[0];this.yytext+=L,this.yyleng++,this.offset++,this.match+=L,this.matched+=L;var v=L.match(/(?:\r\n?|\n).*/g);return v?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),L},unput:function(L){var v=L.length,B=L.split(/(?:\r\n?|\n)/g);this._input=L+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-v),this.offset-=v;var w=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),B.length-1&&(this.yylineno-=B.length-1);var D=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:B?(B.length===w.length?this.yylloc.first_column:0)+w[w.length-B.length].length-B[0].length:this.yylloc.first_column-v},this.options.ranges&&(this.yylloc.range=[D[0],D[0]+this.yyleng-v]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(L){this.unput(this.match.slice(L))},pastInput:function(){var L=this.matched.substr(0,this.matched.length-this.match.length);return(L.length>20?"...":"")+L.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var L=this.match;return L.length<20&&(L+=this._input.substr(0,20-L.length)),(L.substr(0,20)+(L.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var L=this.pastInput(),v=new Array(L.length+1).join("-");return L+this.upcomingInput()+`
+`+v+"^"},test_match:function(L,v){var B,w,D;if(this.options.backtrack_lexer&&(D={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(D.yylloc.range=this.yylloc.range.slice(0))),w=L[0].match(/(?:\r\n?|\n).*/g),w&&(this.yylineno+=w.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:w?w[w.length-1].length-w[w.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+L[0].length},this.yytext+=L[0],this.match+=L[0],this.matches=L,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(L[0].length),this.matched+=L[0],B=this.performAction.call(this,this.yy,this,v,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),B)return B;if(this._backtrack){for(var N in D)this[N]=D[N];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var L,v,B,w;this._more||(this.yytext="",this.match="");for(var D=this._currentRules(),N=0;N<D.length;N++)if(B=this._input.match(this.rules[D[N]]),B&&(!v||B[0].length>v[0].length)){if(v=B,w=N,this.options.backtrack_lexer){if(L=this.test_match(B,D[N]),L!==!1)return L;if(this._backtrack){v=!1;continue}else return!1}else if(!this.options.flex)break}return v?(L=this.test_match(v,D[w]),L!==!1?L:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var v=this.next();return v||this.lex()},begin:function(v){this.conditionStack.push(v)},popState:function(){var v=this.conditionStack.length-1;return v>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(v){return v=this.conditionStack.length-1-Math.abs(v||0),v>=0?this.conditionStack[v]:"INITIAL"},pushState:function(v){this.begin(v)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(v,B,w,D){switch(w){case 0:return this.begin("acc_title"),25;case 1:return this.popState(),"acc_title_value";case 2:return this.begin("acc_descr"),27;case 3:return this.popState(),"acc_descr_value";case 4:this.begin("acc_descr_multiline");break;case 5:this.popState();break;case 6:return"acc_descr_multiline_value";case 7:return this.begin("open_directive"),49;case 8:return this.begin("type_directive"),50;case 9:return this.popState(),this.begin("arg_directive"),15;case 10:return this.popState(),this.popState(),52;case 11:return 51;case 12:break;case 13:break;case 14:return 11;case 15:break;case 16:return 9;case 17:return 31;case 18:return 48;case 19:return 4;case 20:return this.begin("block"),20;case 21:break;case 22:return 38;case 23:return 37;case 24:return 37;case 25:return 39;case 26:break;case 27:return this.popState(),22;case 28:return B.yytext[0];case 29:return 42;case 30:return 43;case 31:return 44;case 32:return 45;case 33:return 42;case 34:return 43;case 35:return 44;case 36:return 46;case 37:return 47;case 38:return 46;case 39:return 46;case 40:return 30;case 41:return B.yytext[0];case 42:return 6}},rules:[/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"%\r\n\v\b\\]+")/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:\s+)/i,/^(?:\b((?:PK)|(?:FK))\b)/i,/^(?:(.*?)[~](.*?)*[~])/i,/^(?:[A-Za-z][A-Za-z0-9\-_\[\]]*)/i,/^(?:"[^"]*")/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[5,6],inclusive:!1},acc_descr:{rules:[3],inclusive:!1},acc_title:{rules:[1],inclusive:!1},open_directive:{rules:[8],inclusive:!1},type_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[10,11],inclusive:!1},block:{rules:[21,22,23,24,25,26,27,28],inclusive:!1},INITIAL:{rules:[0,2,4,7,12,13,14,15,16,17,18,19,20,29,30,31,32,33,34,35,36,37,38,39,40,41,42],inclusive:!0}}};return A}();M.lexer=S;function R(){this.yy={}}return R.prototype=M,M.Parser=R,new R}();a4.parser=a4;const Fet=t=>t.match(/^\s*erDiagram/)!==null;let tu={},s4=[];const Pet={ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},qet={NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},Vet=function(t,e,r){Xe.parseDirective(this,t,e,r)},eM=function(t){return typeof tu[t]>"u"&&(tu[t]={attributes:[]},H.info("Added new entity :",t)),tu[t]},zet={Cardinality:Pet,Identification:qet,parseDirective:Vet,getConfig:()=>nt().er,addEntity:eM,addAttributes:function(t,e){let r=eM(t),n;for(n=e.length-1;n>=0;n--)r.attributes.push(e[n]),H.debug("Added attribute ",e[n].attributeName)},getEntities:()=>tu,addRelationship:function(t,e,r,n){let i={entityA:t,roleA:e,entityB:r,relSpec:n};s4.push(i),H.debug("Added new relationship :",i)},getRelationships:()=>s4,clear:function(){tu={},s4=[],ci()},setAccTitle:Yn,getAccTitle:ui,setAccDescription:hi,getAccDescription:fi},ua={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END"},ha={ERMarkers:ua,insertMarkers:function(t,e){let r;t.append("defs").append("marker").attr("id",ua.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",ua.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",ua.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),r=t.append("defs").append("marker").attr("id",ua.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",ua.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",ua.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),r=t.append("defs").append("marker").attr("id",ua.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),r=t.append("defs").append("marker").attr("id",ua.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto"),r.append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),r.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")}};let $1;const Yet=new Uint8Array(16);function Uet(){if(!$1&&($1=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!$1))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return $1(Yet)}const Br=[];for(let t=0;t<256;++t)Br.push((t+256).toString(16).slice(1));function Wet(t,e=0){return(Br[t[e+0]]+Br[t[e+1]]+Br[t[e+2]]+Br[t[e+3]]+"-"+Br[t[e+4]]+Br[t[e+5]]+"-"+Br[t[e+6]]+Br[t[e+7]]+"-"+Br[t[e+8]]+Br[t[e+9]]+"-"+Br[t[e+10]]+Br[t[e+11]]+Br[t[e+12]]+Br[t[e+13]]+Br[t[e+14]]+Br[t[e+15]]).toLowerCase()}const rM={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function Het(t,e,r){if(rM.randomUUID&&!e&&!t)return rM.randomUUID();t=t||{};const n=t.random||(t.rng||Uet)();if(n[6]=n[6]&15|64,n[8]=n[8]&63|128,e){r=r||0;for(let i=0;i<16;++i)e[r+i]=n[i];return e}return Wet(n)}const Get=/[^A-Za-z0-9]([\W])*/g;let Ye={},eu=new Map;const jet=function(t){const e=Object.keys(t);for(let r=0;r<e.length;r++)Ye[e[r]]=t[e[r]]},$et=(t,e,r)=>{const n=Ye.entityPadding/3,i=Ye.entityPadding/3,a=Ye.fontSize*.85,s=e.node().getBBox(),o=[];let l=!1,u=!1,h=0,d=0,f=0,p=0,m=s.height+n*2,_=1;r.forEach(k=>{k.attributeKeyType!==void 0&&(l=!0),k.attributeComment!==void 0&&(u=!0)}),r.forEach(k=>{const T=`${e.node().id}-attr-${_}`;let C=0;const M=ja(k.attributeType),S=t.append("text").attr("class","er entityLabel").attr("id",`${T}-type`).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+nt().fontFamily+"; font-size: "+a+"px").text(M),R=t.append("text").attr("class","er entityLabel").attr("id",`${T}-name`).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+nt().fontFamily+"; font-size: "+a+"px").text(k.attributeName),A={};A.tn=S,A.nn=R;const L=S.node().getBBox(),v=R.node().getBBox();if(h=Math.max(h,L.width),d=Math.max(d,v.width),C=Math.max(L.height,v.height),l){const B=t.append("text").attr("class","er entityLabel").attr("id",`${T}-key`).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+nt().fontFamily+"; font-size: "+a+"px").text(k.attributeKeyType||"");A.kn=B;const w=B.node().getBBox();f=Math.max(f,w.width),C=Math.max(C,w.height)}if(u){const B=t.append("text").attr("class","er entityLabel").attr("id",`${T}-comment`).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+nt().fontFamily+"; font-size: "+a+"px").text(k.attributeComment||"");A.cn=B;const w=B.node().getBBox();p=Math.max(p,w.width),C=Math.max(C,w.height)}A.height=C,o.push(A),m+=C+n*2,_+=1});let y=4;l&&(y+=2),u&&(y+=2);const b=h+d+f+p,x={width:Math.max(Ye.minEntityWidth,Math.max(s.width+Ye.entityPadding*2,b+i*y)),height:r.length>0?m:Math.max(Ye.minEntityHeight,s.height+Ye.entityPadding*2)};if(r.length>0){const k=Math.max(0,(x.width-b-i*y)/(y/2));e.attr("transform","translate("+x.width/2+","+(n+s.height/2)+")");let T=s.height+n*2,C="attributeBoxOdd";o.forEach(M=>{const S=T+n+M.height/2;M.tn.attr("transform","translate("+i+","+S+")");const R=t.insert("rect","#"+M.tn.node().id).attr("class",`er ${C}`).attr("fill",Ye.fill).attr("fill-opacity","100%").attr("stroke",Ye.stroke).attr("x",0).attr("y",T).attr("width",h+i*2+k).attr("height",M.height+n*2),A=parseFloat(R.attr("x"))+parseFloat(R.attr("width"));M.nn.attr("transform","translate("+(A+i)+","+S+")");const L=t.insert("rect","#"+M.nn.node().id).attr("class",`er ${C}`).attr("fill",Ye.fill).attr("fill-opacity","100%").attr("stroke",Ye.stroke).attr("x",A).attr("y",T).attr("width",d+i*2+k).attr("height",M.height+n*2);let v=parseFloat(L.attr("x"))+parseFloat(L.attr("width"));if(l){M.kn.attr("transform","translate("+(v+i)+","+S+")");const B=t.insert("rect","#"+M.kn.node().id).attr("class",`er ${C}`).attr("fill",Ye.fill).attr("fill-opacity","100%").attr("stroke",Ye.stroke).attr("x",v).attr("y",T).attr("width",f+i*2+k).attr("height",M.height+n*2);v=parseFloat(B.attr("x"))+parseFloat(B.attr("width"))}u&&(M.cn.attr("transform","translate("+(v+i)+","+S+")"),t.insert("rect","#"+M.cn.node().id).attr("class",`er ${C}`).attr("fill",Ye.fill).attr("fill-opacity","100%").attr("stroke",Ye.stroke).attr("x",v).attr("y",T).attr("width",p+i*2+k).attr("height",M.height+n*2)),T+=M.height+n*2,C=C==="attributeBoxOdd"?"attributeBoxEven":"attributeBoxOdd"})}else x.height=Math.max(Ye.minEntityHeight,m),e.attr("transform","translate("+x.width/2+","+x.height/2+")");return x},Xet=function(t,e,r){const n=Object.keys(e);let i;return n.forEach(function(a){const s=trt(a,"entity");eu.set(a,s);const o=t.append("g").attr("id",s);i=i===void 0?s:i;const l="text-"+s,u=o.append("text").attr("class","er entityLabel").attr("id",l).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("style","font-family: "+nt().fontFamily+"; font-size: "+Ye.fontSize+"px").text(a),{width:h,height:d}=$et(o,u,e[a].attributes),p=o.insert("rect","#"+l).attr("class","er entityBox").attr("fill",Ye.fill).attr("fill-opacity","100%").attr("stroke",Ye.stroke).attr("x",0).attr("y",0).attr("width",h).attr("height",d).node().getBBox();r.setNode(s,{width:p.width,height:p.height,shape:"rect",id:s})}),i},Ket=function(t,e){e.nodes().forEach(function(r){typeof r<"u"&&typeof e.node(r)<"u"&&t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )")})},nM=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},Zet=function(t,e){return t.forEach(function(r){e.setEdge(eu.get(r.entityA),eu.get(r.entityB),{relationship:r},nM(r))}),t};let iM=0;const Qet=function(t,e,r,n,i){iM++;const a=r.edge(eu.get(e.entityA),eu.get(e.entityB),nM(e)),s=Ua().x(function(m){return m.x}).y(function(m){return m.y}).curve(Os),o=t.insert("path","#"+n).attr("class","er relationshipLine").attr("d",s(a.points)).attr("stroke",Ye.stroke).attr("fill","none");e.relSpec.relType===i.db.Identification.NON_IDENTIFYING&&o.attr("stroke-dasharray","8,8");let l="";switch(Ye.arrowMarkerAbsolute&&(l=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,l=l.replace(/\(/g,"\\("),l=l.replace(/\)/g,"\\)")),e.relSpec.cardA){case i.db.Cardinality.ZERO_OR_ONE:o.attr("marker-end","url("+l+"#"+ha.ERMarkers.ZERO_OR_ONE_END+")");break;case i.db.Cardinality.ZERO_OR_MORE:o.attr("marker-end","url("+l+"#"+ha.ERMarkers.ZERO_OR_MORE_END+")");break;case i.db.Cardinality.ONE_OR_MORE:o.attr("marker-end","url("+l+"#"+ha.ERMarkers.ONE_OR_MORE_END+")");break;case i.db.Cardinality.ONLY_ONE:o.attr("marker-end","url("+l+"#"+ha.ERMarkers.ONLY_ONE_END+")");break}switch(e.relSpec.cardB){case i.db.Cardinality.ZERO_OR_ONE:o.attr("marker-start","url("+l+"#"+ha.ERMarkers.ZERO_OR_ONE_START+")");break;case i.db.Cardinality.ZERO_OR_MORE:o.attr("marker-start","url("+l+"#"+ha.ERMarkers.ZERO_OR_MORE_START+")");break;case i.db.Cardinality.ONE_OR_MORE:o.attr("marker-start","url("+l+"#"+ha.ERMarkers.ONE_OR_MORE_START+")");break;case i.db.Cardinality.ONLY_ONE:o.attr("marker-start","url("+l+"#"+ha.ERMarkers.ONLY_ONE_START+")");break}const u=o.node().getTotalLength(),h=o.node().getPointAtLength(u*.5),d="rel"+iM,p=t.append("text").attr("class","er relationshipLabel").attr("id",d).attr("x",h.x).attr("y",h.y).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("style","font-family: "+nt().fontFamily+"; font-size: "+Ye.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+d).attr("class","er relationshipLabelBox").attr("x",h.x-p.width/2).attr("y",h.y-p.height/2).attr("width",p.width).attr("height",p.height).attr("fill","white").attr("fill-opacity","85%")},Jet=function(t,e,r,n){Ye=nt().er,H.info("Drawing ER diagram");const i=nt().securityLevel;let a;i==="sandbox"&&(a=St("#i"+e));const o=St(i==="sandbox"?a.nodes()[0].contentDocument.body:"body").select(`[id='${e}']`);ha.insertMarkers(o,Ye);let l;l=new cr.Graph({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:Ye.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});const u=Xet(o,n.db.getEntities(),l),h=Zet(n.db.getRelationships(),l);Zc.layout(l),Ket(o,l),h.forEach(function(_){Qet(o,_,l,u,n)});const d=Ye.diagramPadding,f=o.node().getBBox(),p=f.width+d*2,m=f.height+d*2;li(o,m,p,Ye.useMaxWidth),o.attr("viewBox",`${f.x-d} ${f.y-d} ${p} ${m}`),bn(n.db,o,e)};function trt(t="",e=""){const r=t.replace(Get,"");return`${aM(e)}${aM(r)}${Het()}`}function aM(t=""){return t.length>0?`${t}-`:""}const ert={setConf:jet,draw:Jet};var X1=function(){var t=function(Ln,Xt,ee,ce){for(ee=ee||{},ce=Ln.length;ce--;ee[Ln[ce]]=Xt);return ee},e=[1,9],r=[1,7],n=[1,6],i=[1,8],a=[1,20,21,22,23,38,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],s=[2,10],o=[1,20],l=[1,21],u=[1,22],h=[1,23],d=[1,30],f=[1,32],p=[1,33],m=[1,34],_=[1,62],y=[1,48],b=[1,52],x=[1,36],k=[1,37],T=[1,38],C=[1,39],M=[1,40],S=[1,56],R=[1,63],A=[1,51],L=[1,53],v=[1,55],B=[1,59],w=[1,60],D=[1,41],N=[1,42],z=[1,43],X=[1,44],ct=[1,61],J=[1,50],Y=[1,54],$=[1,57],lt=[1,58],ut=[1,49],W=[1,66],tt=[1,71],K=[1,20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],it=[1,75],Z=[1,74],V=[1,76],Q=[20,21,23,81,82],q=[1,99],U=[1,104],F=[1,107],j=[1,108],P=[1,101],et=[1,106],at=[1,109],It=[1,102],Lt=[1,114],Rt=[1,113],Ct=[1,103],pt=[1,105],mt=[1,110],vt=[1,111],Tt=[1,112],ft=[1,115],le=[20,21,22,23,81,82],Dt=[20,21,22,23,53,81,82],Gt=[20,21,22,23,40,52,53,55,57,59,61,63,65,66,67,69,71,73,74,76,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],$t=[20,21,23],Qt=[20,21,23,52,66,67,81,82,91,95,105,106,109,111,112,122,123,124,125,126,127],we=[1,12,20,21,22,23,24,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],jt=[52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],Ft=[1,149],zt=[1,157],wt=[1,158],bt=[1,159],Et=[1,160],kt=[1,144],Ut=[1,145],gt=[1,141],he=[1,152],yt=[1,153],ne=[1,154],ve=[1,155],ye=[1,156],be=[1,161],Te=[1,162],Wt=[1,147],se=[1,150],me=[1,146],ue=[1,143],_a=[20,21,22,23,38,42,44,46,48,52,66,67,86,87,88,89,90,91,95,105,106,109,111,112,118,119,120,121,122,123,124,125,126,127],Hr=[1,165],Ie=[20,21,22,23,26,52,66,67,91,105,106,109,111,112,122,123,124,125,126,127],oe=[20,21,22,23,24,26,38,40,41,42,52,56,58,60,62,64,66,67,68,70,72,73,75,77,81,82,86,87,88,89,90,91,92,95,105,106,109,111,112,113,114,122,123,124,125,126,127],Ke=[12,21,22,24],wr=[22,106],Ge=[1,250],Ze=[1,245],qt=[1,246],st=[1,254],At=[1,251],Nt=[1,248],Jt=[1,247],ze=[1,249],Pe=[1,252],qe=[1,253],Tr=[1,255],Ve=[1,273],va=[20,21,23,106],Ce=[20,21,22,23,66,67,86,102,105,106,109,110,111,112,113],Wi={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,acc_title:44,acc_title_value:45,acc_descr:46,acc_descr_value:47,acc_descr_multiline_value:48,link:49,node:50,vertex:51,AMP:52,STYLE_SEPARATOR:53,idString:54,DOUBLECIRCLESTART:55,DOUBLECIRCLEEND:56,PS:57,PE:58,"(-":59,"-)":60,STADIUMSTART:61,STADIUMEND:62,SUBROUTINESTART:63,SUBROUTINEEND:64,VERTEX_WITH_PROPS_START:65,ALPHA:66,COLON:67,PIPE:68,CYLINDERSTART:69,CYLINDEREND:70,DIAMOND_START:71,DIAMOND_STOP:72,TAGEND:73,TRAPSTART:74,TRAPEND:75,INVTRAPSTART:76,INVTRAPEND:77,linkStatement:78,arrowText:79,TESTSTR:80,START_LINK:81,LINK:82,textToken:83,STR:84,keywords:85,STYLE:86,LINKSTYLE:87,CLASSDEF:88,CLASS:89,CLICK:90,DOWN:91,UP:92,textNoTags:93,textNoTagsToken:94,DEFAULT:95,stylesOpt:96,alphaNum:97,CALLBACKNAME:98,CALLBACKARGS:99,HREF:100,LINK_TARGET:101,HEX:102,numList:103,INTERPOLATE:104,NUM:105,COMMA:106,style:107,styleComponent:108,MINUS:109,UNIT:110,BRKT:111,DOT:112,PCT:113,TAGSTART:114,alphaNumToken:115,idStringToken:116,alphaNumStatement:117,direction_tb:118,direction_bt:119,direction_rl:120,direction_lr:121,PUNCTUATION:122,UNICODE_TEXT:123,PLUS:124,EQUALS:125,MULT:126,UNDERSCORE:127,graphCodeTokens:128,ARROW_CROSS:129,ARROW_POINT:130,ARROW_CIRCLE:131,ARROW_OPEN:132,QUOTE:133,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",44:"acc_title",45:"acc_title_value",46:"acc_descr",47:"acc_descr_value",48:"acc_descr_multiline_value",52:"AMP",53:"STYLE_SEPARATOR",55:"DOUBLECIRCLESTART",56:"DOUBLECIRCLEEND",57:"PS",58:"PE",59:"(-",60:"-)",61:"STADIUMSTART",62:"STADIUMEND",63:"SUBROUTINESTART",64:"SUBROUTINEEND",65:"VERTEX_WITH_PROPS_START",66:"ALPHA",67:"COLON",68:"PIPE",69:"CYLINDERSTART",70:"CYLINDEREND",71:"DIAMOND_START",72:"DIAMOND_STOP",73:"TAGEND",74:"TRAPSTART",75:"TRAPEND",76:"INVTRAPSTART",77:"INVTRAPEND",80:"TESTSTR",81:"START_LINK",82:"LINK",84:"STR",86:"STYLE",87:"LINKSTYLE",88:"CLASSDEF",89:"CLASS",90:"CLICK",91:"DOWN",92:"UP",95:"DEFAULT",98:"CALLBACKNAME",99:"CALLBACKARGS",100:"HREF",101:"LINK_TARGET",102:"HEX",104:"INTERPOLATE",105:"NUM",106:"COMMA",109:"MINUS",110:"UNIT",111:"BRKT",112:"DOT",113:"PCT",114:"TAGSTART",118:"direction_tb",119:"direction_bt",120:"direction_rl",121:"direction_lr",122:"PUNCTUATION",123:"UNICODE_TEXT",124:"PLUS",125:"EQUALS",126:"MULT",127:"UNDERSCORE",129:"ARROW_CROSS",130:"ARROW_POINT",131:"ARROW_CIRCLE",132:"ARROW_OPEN",133:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[19,2],[19,2],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[50,1],[50,5],[50,3],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,8],[51,4],[51,4],[51,4],[51,6],[51,4],[51,4],[51,4],[51,4],[51,4],[51,1],[49,2],[49,3],[49,3],[49,1],[49,3],[78,1],[79,3],[39,1],[39,2],[39,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[85,1],[93,1],[93,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[103,1],[103,3],[96,1],[96,3],[107,1],[107,2],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[83,1],[83,1],[83,1],[83,1],[83,1],[83,1],[94,1],[94,1],[94,1],[94,1],[54,1],[54,2],[97,1],[97,2],[117,1],[117,1],[117,1],[117,1],[43,1],[43,1],[43,1],[43,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[115,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[116,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1],[128,1]],performAction:function(Xt,ee,ce,Pt,je,rt,Ks){var ot=rt.length-1;switch(je){case 5:Pt.parseDirective("%%{","open_directive");break;case 6:Pt.parseDirective(rt[ot],"type_directive");break;case 7:rt[ot]=rt[ot].trim().replace(/'/g,'"'),Pt.parseDirective(rt[ot],"arg_directive");break;case 8:Pt.parseDirective("}%%","close_directive","flowchart");break;case 10:this.$=[];break;case 11:(!Array.isArray(rt[ot])||rt[ot].length>0)&&rt[ot-1].push(rt[ot]),this.$=rt[ot-1];break;case 12:case 82:case 84:case 96:case 152:case 154:case 155:this.$=rt[ot];break;case 19:Pt.setDirection("TB"),this.$="TB";break;case 20:Pt.setDirection(rt[ot-1]),this.$=rt[ot-1];break;case 35:this.$=rt[ot-1].nodes;break;case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 41:this.$=Pt.addSubGraph(rt[ot-6],rt[ot-1],rt[ot-4]);break;case 42:this.$=Pt.addSubGraph(rt[ot-3],rt[ot-1],rt[ot-3]);break;case 43:this.$=Pt.addSubGraph(void 0,rt[ot-1],void 0);break;case 45:this.$=rt[ot].trim(),Pt.setAccTitle(this.$);break;case 46:case 47:this.$=rt[ot].trim(),Pt.setAccDescription(this.$);break;case 51:Pt.addLink(rt[ot-2].stmt,rt[ot],rt[ot-1]),this.$={stmt:rt[ot],nodes:rt[ot].concat(rt[ot-2].nodes)};break;case 52:Pt.addLink(rt[ot-3].stmt,rt[ot-1],rt[ot-2]),this.$={stmt:rt[ot-1],nodes:rt[ot-1].concat(rt[ot-3].nodes)};break;case 53:this.$={stmt:rt[ot-1],nodes:rt[ot-1]};break;case 54:this.$={stmt:rt[ot],nodes:rt[ot]};break;case 55:this.$=[rt[ot]];break;case 56:this.$=rt[ot-4].concat(rt[ot]);break;case 57:this.$=[rt[ot-2]],Pt.setClass(rt[ot-2],rt[ot]);break;case 58:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"square");break;case 59:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"doublecircle");break;case 60:this.$=rt[ot-5],Pt.addVertex(rt[ot-5],rt[ot-2],"circle");break;case 61:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"ellipse");break;case 62:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"stadium");break;case 63:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"subroutine");break;case 64:this.$=rt[ot-7],Pt.addVertex(rt[ot-7],rt[ot-1],"rect",void 0,void 0,void 0,Object.fromEntries([[rt[ot-5],rt[ot-3]]]));break;case 65:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"cylinder");break;case 66:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"round");break;case 67:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"diamond");break;case 68:this.$=rt[ot-5],Pt.addVertex(rt[ot-5],rt[ot-2],"hexagon");break;case 69:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"odd");break;case 70:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"trapezoid");break;case 71:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"inv_trapezoid");break;case 72:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"lean_right");break;case 73:this.$=rt[ot-3],Pt.addVertex(rt[ot-3],rt[ot-1],"lean_left");break;case 74:this.$=rt[ot],Pt.addVertex(rt[ot]);break;case 75:rt[ot-1].text=rt[ot],this.$=rt[ot-1];break;case 76:case 77:rt[ot-2].text=rt[ot-1],this.$=rt[ot-2];break;case 78:this.$=rt[ot];break;case 79:var Gr=Pt.destructLink(rt[ot],rt[ot-2]);this.$={type:Gr.type,stroke:Gr.stroke,length:Gr.length,text:rt[ot-1]};break;case 80:var Gr=Pt.destructLink(rt[ot]);this.$={type:Gr.type,stroke:Gr.stroke,length:Gr.length};break;case 81:this.$=rt[ot-1];break;case 83:case 97:case 153:this.$=rt[ot-1]+""+rt[ot];break;case 98:case 99:this.$=rt[ot-4],Pt.addClass(rt[ot-2],rt[ot]);break;case 100:this.$=rt[ot-4],Pt.setClass(rt[ot-2],rt[ot]);break;case 101:case 109:this.$=rt[ot-1],Pt.setClickEvent(rt[ot-1],rt[ot]);break;case 102:case 110:this.$=rt[ot-3],Pt.setClickEvent(rt[ot-3],rt[ot-2]),Pt.setTooltip(rt[ot-3],rt[ot]);break;case 103:this.$=rt[ot-2],Pt.setClickEvent(rt[ot-2],rt[ot-1],rt[ot]);break;case 104:this.$=rt[ot-4],Pt.setClickEvent(rt[ot-4],rt[ot-3],rt[ot-2]),Pt.setTooltip(rt[ot-4],rt[ot]);break;case 105:case 111:this.$=rt[ot-1],Pt.setLink(rt[ot-1],rt[ot]);break;case 106:case 112:this.$=rt[ot-3],Pt.setLink(rt[ot-3],rt[ot-2]),Pt.setTooltip(rt[ot-3],rt[ot]);break;case 107:case 113:this.$=rt[ot-3],Pt.setLink(rt[ot-3],rt[ot-2],rt[ot]);break;case 108:case 114:this.$=rt[ot-5],Pt.setLink(rt[ot-5],rt[ot-4],rt[ot]),Pt.setTooltip(rt[ot-5],rt[ot-2]);break;case 115:this.$=rt[ot-4],Pt.addVertex(rt[ot-2],void 0,void 0,rt[ot]);break;case 116:case 118:this.$=rt[ot-4],Pt.updateLink(rt[ot-2],rt[ot]);break;case 117:this.$=rt[ot-4],Pt.updateLink([rt[ot-2]],rt[ot]);break;case 119:this.$=rt[ot-8],Pt.updateLinkInterpolate([rt[ot-6]],rt[ot-2]),Pt.updateLink([rt[ot-6]],rt[ot]);break;case 120:this.$=rt[ot-8],Pt.updateLinkInterpolate(rt[ot-6],rt[ot-2]),Pt.updateLink(rt[ot-6],rt[ot]);break;case 121:this.$=rt[ot-6],Pt.updateLinkInterpolate([rt[ot-4]],rt[ot]);break;case 122:this.$=rt[ot-6],Pt.updateLinkInterpolate(rt[ot-4],rt[ot]);break;case 123:case 125:this.$=[rt[ot]];break;case 124:case 126:rt[ot-2].push(rt[ot]),this.$=rt[ot-2];break;case 128:this.$=rt[ot-1]+rt[ot];break;case 150:this.$=rt[ot];break;case 151:this.$=rt[ot-1]+""+rt[ot];break;case 156:this.$="v";break;case 157:this.$="-";break;case 158:this.$={stmt:"dir",value:"TB"};break;case 159:this.$={stmt:"dir",value:"BT"};break;case 160:this.$={stmt:"dir",value:"RL"};break;case 161:this.$={stmt:"dir",value:"LR"};break}},table:[{3:1,4:2,5:3,6:5,12:e,16:4,21:r,22:n,24:i},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:e,16:4,21:r,22:n,24:i},t(a,s,{17:11}),{7:12,13:[1,13]},{16:14,21:r,22:n,24:i},{16:15,21:r,22:n,24:i},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:o,21:l,22:u,23:h,32:24,33:25,34:26,35:27,36:28,37:29,38:d,43:31,44:f,46:p,48:m,50:35,51:45,52:_,54:46,66:y,67:b,86:x,87:k,88:T,89:C,90:M,91:S,95:R,105:A,106:L,109:v,111:B,112:w,116:47,118:D,119:N,120:z,121:X,122:ct,123:J,124:Y,125:$,126:lt,127:ut},{8:64,10:[1,65],15:W},t([10,15],[2,6]),t(a,[2,17]),t(a,[2,18]),t(a,[2,19]),{20:[1,68],21:[1,69],22:tt,27:67,30:70},t(K,[2,11]),t(K,[2,12]),t(K,[2,13]),t(K,[2,14]),t(K,[2,15]),t(K,[2,16]),{9:72,20:it,21:Z,23:V,49:73,78:77,81:[1,78],82:[1,79]},{9:80,20:it,21:Z,23:V},{9:81,20:it,21:Z,23:V},{9:82,20:it,21:Z,23:V},{9:83,20:it,21:Z,23:V},{9:84,20:it,21:Z,23:V},{9:86,20:it,21:Z,22:[1,85],23:V},t(K,[2,44]),{45:[1,87]},{47:[1,88]},t(K,[2,47]),t(Q,[2,54],{30:89,22:tt}),{22:[1,90]},{22:[1,91]},{22:[1,92]},{22:[1,93]},{26:q,52:U,66:F,67:j,84:[1,97],91:P,97:96,98:[1,94],100:[1,95],105:et,106:at,109:It,111:Lt,112:Rt,115:100,117:98,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t(K,[2,158]),t(K,[2,159]),t(K,[2,160]),t(K,[2,161]),t(le,[2,55],{53:[1,116]}),t(Dt,[2,74],{116:129,40:[1,117],52:_,55:[1,118],57:[1,119],59:[1,120],61:[1,121],63:[1,122],65:[1,123],66:y,67:b,69:[1,124],71:[1,125],73:[1,126],74:[1,127],76:[1,128],91:S,95:R,105:A,106:L,109:v,111:B,112:w,122:ct,123:J,124:Y,125:$,126:lt,127:ut}),t(Gt,[2,150]),t(Gt,[2,175]),t(Gt,[2,176]),t(Gt,[2,177]),t(Gt,[2,178]),t(Gt,[2,179]),t(Gt,[2,180]),t(Gt,[2,181]),t(Gt,[2,182]),t(Gt,[2,183]),t(Gt,[2,184]),t(Gt,[2,185]),t(Gt,[2,186]),t(Gt,[2,187]),t(Gt,[2,188]),t(Gt,[2,189]),t(Gt,[2,190]),{9:130,20:it,21:Z,23:V},{11:131,14:[1,132]},t($t,[2,8]),t(a,[2,20]),t(a,[2,26]),t(a,[2,27]),{21:[1,133]},t(Qt,[2,34],{30:134,22:tt}),t(K,[2,35]),{50:135,51:45,52:_,54:46,66:y,67:b,91:S,95:R,105:A,106:L,109:v,111:B,112:w,116:47,122:ct,123:J,124:Y,125:$,126:lt,127:ut},t(we,[2,48]),t(we,[2,49]),t(we,[2,50]),t(jt,[2,78],{79:136,68:[1,138],80:[1,137]}),{22:Ft,24:zt,26:wt,38:bt,39:139,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t([52,66,67,68,80,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,80]),t(K,[2,36]),t(K,[2,37]),t(K,[2,38]),t(K,[2,39]),t(K,[2,40]),{22:Ft,24:zt,26:wt,38:bt,39:163,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t(_a,s,{17:164}),t(K,[2,45]),t(K,[2,46]),t(Q,[2,53],{52:Hr}),{26:q,52:U,66:F,67:j,91:P,97:166,102:[1,167],105:et,106:at,109:It,111:Lt,112:Rt,115:100,117:98,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{95:[1,168],103:169,105:[1,170]},{26:q,52:U,66:F,67:j,91:P,95:[1,171],97:172,105:et,106:at,109:It,111:Lt,112:Rt,115:100,117:98,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{26:q,52:U,66:F,67:j,91:P,97:173,105:et,106:at,109:It,111:Lt,112:Rt,115:100,117:98,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t($t,[2,101],{22:[1,174],99:[1,175]}),t($t,[2,105],{22:[1,176]}),t($t,[2,109],{115:100,117:178,22:[1,177],26:q,52:U,66:F,67:j,91:P,105:et,106:at,109:It,111:Lt,112:Rt,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft}),t($t,[2,111],{22:[1,179]}),t(Ie,[2,152]),t(Ie,[2,154]),t(Ie,[2,155]),t(Ie,[2,156]),t(Ie,[2,157]),t(oe,[2,162]),t(oe,[2,163]),t(oe,[2,164]),t(oe,[2,165]),t(oe,[2,166]),t(oe,[2,167]),t(oe,[2,168]),t(oe,[2,169]),t(oe,[2,170]),t(oe,[2,171]),t(oe,[2,172]),t(oe,[2,173]),t(oe,[2,174]),{52:_,54:180,66:y,67:b,91:S,95:R,105:A,106:L,109:v,111:B,112:w,116:47,122:ct,123:J,124:Y,125:$,126:lt,127:ut},{22:Ft,24:zt,26:wt,38:bt,39:181,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,39:182,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,39:184,42:Et,52:U,57:[1,183],66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,39:185,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,39:186,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,39:187,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{66:[1,188]},{22:Ft,24:zt,26:wt,38:bt,39:189,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,39:190,42:Et,52:U,66:F,67:j,71:[1,191],73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,39:192,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,39:193,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,39:194,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t(Gt,[2,151]),t(Ke,[2,3]),{8:195,15:W},{15:[2,7]},t(a,[2,28]),t(Qt,[2,33]),t(Q,[2,51],{30:196,22:tt}),t(jt,[2,75],{22:[1,197]}),{22:[1,198]},{22:Ft,24:zt,26:wt,38:bt,39:199,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,66:F,67:j,73:kt,81:Ut,82:[1,200],83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t(oe,[2,82]),t(oe,[2,84]),t(oe,[2,140]),t(oe,[2,141]),t(oe,[2,142]),t(oe,[2,143]),t(oe,[2,144]),t(oe,[2,145]),t(oe,[2,146]),t(oe,[2,147]),t(oe,[2,148]),t(oe,[2,149]),t(oe,[2,85]),t(oe,[2,86]),t(oe,[2,87]),t(oe,[2,88]),t(oe,[2,89]),t(oe,[2,90]),t(oe,[2,91]),t(oe,[2,92]),t(oe,[2,93]),t(oe,[2,94]),t(oe,[2,95]),{9:203,20:it,21:Z,22:Ft,23:V,24:zt,26:wt,38:bt,40:[1,202],42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{18:18,19:19,20:o,21:l,22:u,23:h,32:24,33:25,34:26,35:27,36:28,37:29,38:d,42:[1,204],43:31,44:f,46:p,48:m,50:35,51:45,52:_,54:46,66:y,67:b,86:x,87:k,88:T,89:C,90:M,91:S,95:R,105:A,106:L,109:v,111:B,112:w,116:47,118:D,119:N,120:z,121:X,122:ct,123:J,124:Y,125:$,126:lt,127:ut},{22:tt,30:205},{22:[1,206],26:q,52:U,66:F,67:j,91:P,105:et,106:at,109:It,111:Lt,112:Rt,115:100,117:178,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:[1,207]},{22:[1,208]},{22:[1,209],106:[1,210]},t(wr,[2,123]),{22:[1,211]},{22:[1,212],26:q,52:U,66:F,67:j,91:P,105:et,106:at,109:It,111:Lt,112:Rt,115:100,117:178,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:[1,213],26:q,52:U,66:F,67:j,91:P,105:et,106:at,109:It,111:Lt,112:Rt,115:100,117:178,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{84:[1,214]},t($t,[2,103],{22:[1,215]}),{84:[1,216],101:[1,217]},{84:[1,218]},t(Ie,[2,153]),{84:[1,219],101:[1,220]},t(le,[2,57],{116:129,52:_,66:y,67:b,91:S,95:R,105:A,106:L,109:v,111:B,112:w,122:ct,123:J,124:Y,125:$,126:lt,127:ut}),{22:Ft,24:zt,26:wt,38:bt,41:[1,221],42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,56:[1,222],66:F,67:j,73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,39:223,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,58:[1,224],66:F,67:j,73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,60:[1,225],66:F,67:j,73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,62:[1,226],66:F,67:j,73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,64:[1,227],66:F,67:j,73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{67:[1,228]},{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,66:F,67:j,70:[1,229],73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,66:F,67:j,72:[1,230],73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,39:231,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,41:[1,232],42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,66:F,67:j,73:kt,75:[1,233],77:[1,234],81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,66:F,67:j,73:kt,75:[1,236],77:[1,235],81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{9:237,20:it,21:Z,23:V},t(Q,[2,52],{52:Hr}),t(jt,[2,77]),t(jt,[2,76]),{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,66:F,67:j,68:[1,238],73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t(jt,[2,79]),t(oe,[2,83]),{22:Ft,24:zt,26:wt,38:bt,39:239,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t(_a,s,{17:240}),t(K,[2,43]),{51:241,52:_,54:46,66:y,67:b,91:S,95:R,105:A,106:L,109:v,111:B,112:w,116:47,122:ct,123:J,124:Y,125:$,126:lt,127:ut},{22:Ge,66:Ze,67:qt,86:st,96:242,102:At,105:Nt,107:243,108:244,109:Jt,110:ze,111:Pe,112:qe,113:Tr},{22:Ge,66:Ze,67:qt,86:st,96:256,102:At,105:Nt,107:243,108:244,109:Jt,110:ze,111:Pe,112:qe,113:Tr},{22:Ge,66:Ze,67:qt,86:st,96:257,102:At,104:[1,258],105:Nt,107:243,108:244,109:Jt,110:ze,111:Pe,112:qe,113:Tr},{22:Ge,66:Ze,67:qt,86:st,96:259,102:At,104:[1,260],105:Nt,107:243,108:244,109:Jt,110:ze,111:Pe,112:qe,113:Tr},{105:[1,261]},{22:Ge,66:Ze,67:qt,86:st,96:262,102:At,105:Nt,107:243,108:244,109:Jt,110:ze,111:Pe,112:qe,113:Tr},{22:Ge,66:Ze,67:qt,86:st,96:263,102:At,105:Nt,107:243,108:244,109:Jt,110:ze,111:Pe,112:qe,113:Tr},{26:q,52:U,66:F,67:j,91:P,97:264,105:et,106:at,109:It,111:Lt,112:Rt,115:100,117:98,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t($t,[2,102]),{84:[1,265]},t($t,[2,106],{22:[1,266]}),t($t,[2,107]),t($t,[2,110]),t($t,[2,112],{22:[1,267]}),t($t,[2,113]),t(Dt,[2,58]),t(Dt,[2,59]),{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,58:[1,268],66:F,67:j,73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t(Dt,[2,66]),t(Dt,[2,61]),t(Dt,[2,62]),t(Dt,[2,63]),{66:[1,269]},t(Dt,[2,65]),t(Dt,[2,67]),{22:Ft,24:zt,26:wt,38:bt,42:Et,52:U,66:F,67:j,72:[1,270],73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t(Dt,[2,69]),t(Dt,[2,70]),t(Dt,[2,72]),t(Dt,[2,71]),t(Dt,[2,73]),t(Ke,[2,4]),t([22,52,66,67,91,95,105,106,109,111,112,122,123,124,125,126,127],[2,81]),{22:Ft,24:zt,26:wt,38:bt,41:[1,271],42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{18:18,19:19,20:o,21:l,22:u,23:h,32:24,33:25,34:26,35:27,36:28,37:29,38:d,42:[1,272],43:31,44:f,46:p,48:m,50:35,51:45,52:_,54:46,66:y,67:b,86:x,87:k,88:T,89:C,90:M,91:S,95:R,105:A,106:L,109:v,111:B,112:w,116:47,118:D,119:N,120:z,121:X,122:ct,123:J,124:Y,125:$,126:lt,127:ut},t(le,[2,56]),t($t,[2,115],{106:Ve}),t(va,[2,125],{108:274,22:Ge,66:Ze,67:qt,86:st,102:At,105:Nt,109:Jt,110:ze,111:Pe,112:qe,113:Tr}),t(Ce,[2,127]),t(Ce,[2,129]),t(Ce,[2,130]),t(Ce,[2,131]),t(Ce,[2,132]),t(Ce,[2,133]),t(Ce,[2,134]),t(Ce,[2,135]),t(Ce,[2,136]),t(Ce,[2,137]),t(Ce,[2,138]),t(Ce,[2,139]),t($t,[2,116],{106:Ve}),t($t,[2,117],{106:Ve}),{22:[1,275]},t($t,[2,118],{106:Ve}),{22:[1,276]},t(wr,[2,124]),t($t,[2,98],{106:Ve}),t($t,[2,99],{106:Ve}),t($t,[2,100],{115:100,117:178,26:q,52:U,66:F,67:j,91:P,105:et,106:at,109:It,111:Lt,112:Rt,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft}),t($t,[2,104]),{101:[1,277]},{101:[1,278]},{58:[1,279]},{68:[1,280]},{72:[1,281]},{9:282,20:it,21:Z,23:V},t(K,[2,42]),{22:Ge,66:Ze,67:qt,86:st,102:At,105:Nt,107:283,108:244,109:Jt,110:ze,111:Pe,112:qe,113:Tr},t(Ce,[2,128]),{26:q,52:U,66:F,67:j,91:P,97:284,105:et,106:at,109:It,111:Lt,112:Rt,115:100,117:98,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{26:q,52:U,66:F,67:j,91:P,97:285,105:et,106:at,109:It,111:Lt,112:Rt,115:100,117:98,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t($t,[2,108]),t($t,[2,114]),t(Dt,[2,60]),{22:Ft,24:zt,26:wt,38:bt,39:286,42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:140,84:gt,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},t(Dt,[2,68]),t(_a,s,{17:287}),t(va,[2,126],{108:274,22:Ge,66:Ze,67:qt,86:st,102:At,105:Nt,109:Jt,110:ze,111:Pe,112:qe,113:Tr}),t($t,[2,121],{115:100,117:178,22:[1,288],26:q,52:U,66:F,67:j,91:P,105:et,106:at,109:It,111:Lt,112:Rt,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft}),t($t,[2,122],{115:100,117:178,22:[1,289],26:q,52:U,66:F,67:j,91:P,105:et,106:at,109:It,111:Lt,112:Rt,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft}),{22:Ft,24:zt,26:wt,38:bt,41:[1,290],42:Et,52:U,66:F,67:j,73:kt,81:Ut,83:201,85:151,86:he,87:yt,88:ne,89:ve,90:ye,91:be,92:Te,94:142,95:Wt,105:et,106:at,109:se,111:Lt,112:Rt,113:me,114:ue,115:148,122:Ct,123:pt,124:mt,125:vt,126:Tt,127:ft},{18:18,19:19,20:o,21:l,22:u,23:h,32:24,33:25,34:26,35:27,36:28,37:29,38:d,42:[1,291],43:31,44:f,46:p,48:m,50:35,51:45,52:_,54:46,66:y,67:b,86:x,87:k,88:T,89:C,90:M,91:S,95:R,105:A,106:L,109:v,111:B,112:w,116:47,118:D,119:N,120:z,121:X,122:ct,123:J,124:Y,125:$,126:lt,127:ut},{22:Ge,66:Ze,67:qt,86:st,96:292,102:At,105:Nt,107:243,108:244,109:Jt,110:ze,111:Pe,112:qe,113:Tr},{22:Ge,66:Ze,67:qt,86:st,96:293,102:At,105:Nt,107:243,108:244,109:Jt,110:ze,111:Pe,112:qe,113:Tr},t(Dt,[2,64]),t(K,[2,41]),t($t,[2,119],{106:Ve}),t($t,[2,120],{106:Ve})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],132:[2,7]},parseError:function(Xt,ee){if(ee.recoverable)this.trace(Xt);else{var ce=new Error(Xt);throw ce.hash=ee,ce}},parse:function(Xt){var ee=this,ce=[0],Pt=[],je=[null],rt=[],Ks=this.table,ot="",Gr=0,C0=0,l_=2,S0=1,A0=rt.slice.call(arguments,1),mr=Object.create(this.lexer),Hi={yy:{}};for(var Gi in this.yy)Object.prototype.hasOwnProperty.call(this.yy,Gi)&&(Hi.yy[Gi]=this.yy[Gi]);mr.setInput(Xt,Hi.yy),Hi.yy.lexer=mr,Hi.yy.parser=this,typeof mr.yylloc>"u"&&(mr.yylloc={});var Zs=mr.yylloc;rt.push(Zs);var vu=mr.options&&mr.options.ranges;typeof Hi.yy.parseError=="function"?this.parseError=Hi.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function M0(){var In;return In=Pt.pop()||mr.lex()||S0,typeof In!="number"&&(In instanceof Array&&(Pt=In,In=Pt.pop()),In=ee.symbols_[In]||In),In}for(var Dr,De,hn,xa,_i={},ka,Rn,xu,yl;;){if(De=ce[ce.length-1],this.defaultActions[De]?hn=this.defaultActions[De]:((Dr===null||typeof Dr>"u")&&(Dr=M0()),hn=Ks[De]&&Ks[De][Dr]),typeof hn>"u"||!hn.length||!hn[0]){var Qs="";yl=[];for(ka in Ks[De])this.terminals_[ka]&&ka>l_&&yl.push("'"+this.terminals_[ka]+"'");mr.showPosition?Qs="Parse error on line "+(Gr+1)+`:
+`+mr.showPosition()+`
+Expecting `+yl.join(", ")+", got '"+(this.terminals_[Dr]||Dr)+"'":Qs="Parse error on line "+(Gr+1)+": Unexpected "+(Dr==S0?"end of input":"'"+(this.terminals_[Dr]||Dr)+"'"),this.parseError(Qs,{text:mr.match,token:this.terminals_[Dr]||Dr,line:mr.yylineno,loc:Zs,expected:yl})}if(hn[0]instanceof Array&&hn.length>1)throw new Error("Parse Error: multiple actions possible at state: "+De+", token: "+Dr);switch(hn[0]){case 1:ce.push(Dr),je.push(mr.yytext),rt.push(mr.yylloc),ce.push(hn[1]),Dr=null,C0=mr.yyleng,ot=mr.yytext,Gr=mr.yylineno,Zs=mr.yylloc;break;case 2:if(Rn=this.productions_[hn[1]][1],_i.$=je[je.length-Rn],_i._$={first_line:rt[rt.length-(Rn||1)].first_line,last_line:rt[rt.length-1].last_line,first_column:rt[rt.length-(Rn||1)].first_column,last_column:rt[rt.length-1].last_column},vu&&(_i._$.range=[rt[rt.length-(Rn||1)].range[0],rt[rt.length-1].range[1]]),xa=this.performAction.apply(_i,[ot,C0,Gr,Hi.yy,hn[1],je,rt].concat(A0)),typeof xa<"u")return xa;Rn&&(ce=ce.slice(0,-1*Rn*2),je=je.slice(0,-1*Rn),rt=rt.slice(0,-1*Rn)),ce.push(this.productions_[hn[1]][0]),je.push(_i.$),rt.push(_i._$),xu=Ks[ce[ce.length-2]][ce[ce.length-1]],ce.push(xu);break;case 3:return!0}}return!0}},E0=function(){var Ln={EOF:1,parseError:function(ee,ce){if(this.yy.parser)this.yy.parser.parseError(ee,ce);else throw new Error(ee)},setInput:function(Xt,ee){return this.yy=ee||this.yy||{},this._input=Xt,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Xt=this._input[0];this.yytext+=Xt,this.yyleng++,this.offset++,this.match+=Xt,this.matched+=Xt;var ee=Xt.match(/(?:\r\n?|\n).*/g);return ee?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Xt},unput:function(Xt){var ee=Xt.length,ce=Xt.split(/(?:\r\n?|\n)/g);this._input=Xt+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-ee),this.offset-=ee;var Pt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),ce.length-1&&(this.yylineno-=ce.length-1);var je=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:ce?(ce.length===Pt.length?this.yylloc.first_column:0)+Pt[Pt.length-ce.length].length-ce[0].length:this.yylloc.first_column-ee},this.options.ranges&&(this.yylloc.range=[je[0],je[0]+this.yyleng-ee]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Xt){this.unput(this.match.slice(Xt))},pastInput:function(){var Xt=this.matched.substr(0,this.matched.length-this.match.length);return(Xt.length>20?"...":"")+Xt.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Xt=this.match;return Xt.length<20&&(Xt+=this._input.substr(0,20-Xt.length)),(Xt.substr(0,20)+(Xt.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Xt=this.pastInput(),ee=new Array(Xt.length+1).join("-");return Xt+this.upcomingInput()+`
+`+ee+"^"},test_match:function(Xt,ee){var ce,Pt,je;if(this.options.backtrack_lexer&&(je={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(je.yylloc.range=this.yylloc.range.slice(0))),Pt=Xt[0].match(/(?:\r\n?|\n).*/g),Pt&&(this.yylineno+=Pt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:Pt?Pt[Pt.length-1].length-Pt[Pt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Xt[0].length},this.yytext+=Xt[0],this.match+=Xt[0],this.matches=Xt,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Xt[0].length),this.matched+=Xt[0],ce=this.performAction.call(this,this.yy,this,ee,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),ce)return ce;if(this._backtrack){for(var rt in je)this[rt]=je[rt];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Xt,ee,ce,Pt;this._more||(this.yytext="",this.match="");for(var je=this._currentRules(),rt=0;rt<je.length;rt++)if(ce=this._input.match(this.rules[je[rt]]),ce&&(!ee||ce[0].length>ee[0].length)){if(ee=ce,Pt=rt,this.options.backtrack_lexer){if(Xt=this.test_match(ce,je[rt]),Xt!==!1)return Xt;if(this._backtrack){ee=!1;continue}else return!1}else if(!this.options.flex)break}return ee?(Xt=this.test_match(ee,je[Pt]),Xt!==!1?Xt:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var ee=this.next();return ee||this.lex()},begin:function(ee){this.conditionStack.push(ee)},popState:function(){var ee=this.conditionStack.length-1;return ee>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(ee){return ee=this.conditionStack.length-1-Math.abs(ee||0),ee>=0?this.conditionStack[ee]:"INITIAL"},pushState:function(ee){this.begin(ee)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(ee,ce,Pt,je){switch(Pt){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:break;case 6:break;case 7:return this.begin("acc_title"),44;case 8:return this.popState(),"acc_title_value";case 9:return this.begin("acc_descr"),46;case 10:return this.popState(),"acc_descr_value";case 11:this.begin("acc_descr_multiline");break;case 12:this.popState();break;case 13:return"acc_descr_multiline_value";case 14:this.begin("string");break;case 15:this.popState();break;case 16:return"STR";case 17:return 86;case 18:return 95;case 19:return 87;case 20:return 104;case 21:return 88;case 22:return 89;case 23:this.begin("href");break;case 24:this.popState();break;case 25:return 100;case 26:this.begin("callbackname");break;case 27:this.popState();break;case 28:this.popState(),this.begin("callbackargs");break;case 29:return 98;case 30:this.popState();break;case 31:return 99;case 32:this.begin("click");break;case 33:this.popState();break;case 34:return 90;case 35:return ee.lex.firstGraph()&&this.begin("dir"),24;case 36:return ee.lex.firstGraph()&&this.begin("dir"),24;case 37:return 38;case 38:return 42;case 39:return 101;case 40:return 101;case 41:return 101;case 42:return 101;case 43:return this.popState(),25;case 44:return this.popState(),26;case 45:return this.popState(),26;case 46:return this.popState(),26;case 47:return this.popState(),26;case 48:return this.popState(),26;case 49:return this.popState(),26;case 50:return this.popState(),26;case 51:return this.popState(),26;case 52:return this.popState(),26;case 53:return this.popState(),26;case 54:return 118;case 55:return 119;case 56:return 120;case 57:return 121;case 58:return 105;case 59:return 111;case 60:return 53;case 61:return 67;case 62:return 52;case 63:return 20;case 64:return 106;case 65:return 126;case 66:return 82;case 67:return 82;case 68:return 82;case 69:return 82;case 70:return 81;case 71:return 81;case 72:return 81;case 73:return 59;case 74:return 60;case 75:return 61;case 76:return 62;case 77:return 63;case 78:return 64;case 79:return 65;case 80:return 69;case 81:return 70;case 82:return 55;case 83:return 56;case 84:return 109;case 85:return 112;case 86:return 127;case 87:return 124;case 88:return 113;case 89:return 125;case 90:return 125;case 91:return 114;case 92:return 73;case 93:return 92;case 94:return"SEP";case 95:return 91;case 96:return 66;case 97:return 75;case 98:return 74;case 99:return 77;case 100:return 76;case 101:return 122;case 102:return 123;case 103:return 68;case 104:return 57;case 105:return 58;case 106:return 40;case 107:return 41;case 108:return 71;case 109:return 72;case 110:return 133;case 111:return 21;case 112:return 22;case 113:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:accTitle\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*:\s*)/,/^(?:(?!\n||)*[^\n]*)/,/^(?:accDescr\s*\{\s*)/,/^(?:[\}])/,/^(?:[^\}]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*~~[\~]+\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\|)/,/^(?:\[\()/,/^(?:\)\])/,/^(?:\(\(\()/,/^(?:\)\)\))/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[30,31],inclusive:!1},callbackname:{rules:[27,28,29],inclusive:!1},href:{rules:[24,25],inclusive:!1},click:{rules:[33,34],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[43,44,45,46,47,48,49,50,51,52,53],inclusive:!1},acc_descr_multiline:{rules:[12,13],inclusive:!1},acc_descr:{rules:[10],inclusive:!1},acc_title:{rules:[8],inclusive:!1},string:{rules:[15,16],inclusive:!1},INITIAL:{rules:[0,5,6,7,9,11,14,17,18,19,20,21,22,23,26,32,35,36,37,38,39,40,41,42,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113],inclusive:!0}}};return Ln}();Wi.lexer=E0;function _u(){this.yy={}}return _u.prototype=Wi,Wi.Parser=_u,new _u}();X1.parser=X1;const rrt=(t,e)=>{var r;return((r=e==null?void 0:e.flowchart)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!1:t.match(/^\s*graph/)!==null},nrt=(t,e)=>{var r;return((r=e==null?void 0:e.flowchart)==null?void 0:r.defaultRenderer)==="dagre-wrapper"&&t.match(/^\s*graph/)!==null?!0:t.match(/^\s*flowchart/)!==null},irt="flowchart-";let sM=0,o4=nt(),ar={},js=[],il=[],qi=[],K1={},l4={},Z1=0,c4=!0,Vi,Q1,J1=[];const t0=t=>pe.sanitizeText(t,o4),art=function(t,e,r){Xe.parseDirective(this,t,e,r)},e0=function(t){const e=Object.keys(ar);for(let r=0;r<e.length;r++)if(ar[e[r]].id===t)return ar[e[r]].domId;return t},srt=function(t,e,r,n,i,a,s={}){let o,l=t;typeof l>"u"||l.trim().length!==0&&(typeof ar[l]>"u"&&(ar[l]={id:l,domId:irt+l+"-"+sM,styles:[],classes:[]}),sM++,typeof e<"u"?(o4=nt(),o=t0(e.trim()),o[0]==='"'&&o[o.length-1]==='"'&&(o=o.substring(1,o.length-1)),ar[l].text=o):typeof ar[l].text>"u"&&(ar[l].text=t),typeof r<"u"&&(ar[l].type=r),typeof n<"u"&&n!==null&&n.forEach(function(u){ar[l].styles.push(u)}),typeof i<"u"&&i!==null&&i.forEach(function(u){ar[l].classes.push(u)}),typeof a<"u"&&(ar[l].dir=a),ar[l].props=s)},ort=function(t,e,r,n){const s={start:t,end:e,type:void 0,text:""};n=r.text,typeof n<"u"&&(s.text=t0(n.trim()),s.text[0]==='"'&&s.text[s.text.length-1]==='"'&&(s.text=s.text.substring(1,s.text.length-1))),typeof r<"u"&&(s.type=r.type,s.stroke=r.stroke,s.length=r.length),js.push(s)},lrt=function(t,e,r,n){let i,a;for(i=0;i<t.length;i++)for(a=0;a<e.length;a++)ort(t[i],e[a],r,n)},crt=function(t,e){t.forEach(function(r){r==="default"?js.defaultInterpolate=e:js[r].interpolate=e})},urt=function(t,e){t.forEach(function(r){r==="default"?js.defaultStyle=e:(Se.isSubstringInArray("fill",e)===-1&&e.push("fill:none"),js[r].style=e)})},hrt=function(t,e){typeof il[t]>"u"&&(il[t]={id:t,styles:[],textStyles:[]}),typeof e<"u"&&e!==null&&e.forEach(function(r){if(r.match("color")){const i=r.replace("fill","bgFill").replace("color","fill");il[t].textStyles.push(i)}il[t].styles.push(r)})},frt=function(t){Vi=t,Vi.match(/.*</)&&(Vi="RL"),Vi.match(/.*\^/)&&(Vi="BT"),Vi.match(/.*>/)&&(Vi="LR"),Vi.match(/.*v/)&&(Vi="TB")},u4=function(t,e){t.split(",").forEach(function(r){let n=r;typeof ar[n]<"u"&&ar[n].classes.push(e),typeof K1[n]<"u"&&K1[n].classes.push(e)})},drt=function(t,e){t.split(",").forEach(function(r){typeof e<"u"&&(l4[Q1==="gen-1"?e0(r):r]=t0(e))})},prt=function(t,e,r){let n=e0(t);if(nt().securityLevel!=="loose"||typeof e>"u")return;let i=[];if(typeof r=="string"){i=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a<i.length;a++){let s=i[a].trim();s.charAt(0)==='"'&&s.charAt(s.length-1)==='"'&&(s=s.substr(1,s.length-2)),i[a]=s}}i.length===0&&i.push(t),typeof ar[t]<"u"&&(ar[t].haveCallback=!0,J1.push(function(){const a=document.querySelector(`[id="${n}"]`);a!==null&&a.addEventListener("click",function(){Se.runFunc(e,...i)},!1)}))},grt=function(t,e,r){t.split(",").forEach(function(n){typeof ar[n]<"u"&&(ar[n].link=Se.formatUrl(e,o4),ar[n].linkTarget=r)}),u4(t,"clickable")},yrt=function(t){return l4[t]},mrt=function(t,e,r){t.split(",").forEach(function(n){prt(n,e,r)}),u4(t,"clickable")},brt=function(t){J1.forEach(function(e){e(t)})},_rt=function(){return Vi.trim()},vrt=function(){return ar},xrt=function(){return js},krt=function(){return il},oM=function(t){let e=St(".mermaidTooltip");(e._groups||e)[0][0]===null&&(e=St("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),St(t).select("svg").selectAll("g.node").on("mouseover",function(){const i=St(this);if(i.attr("title")===null)return;const s=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.text(i.attr("title")).style("left",window.scrollX+s.left+(s.right-s.left)/2+"px").style("top",window.scrollY+s.top-14+document.body.scrollTop+"px"),e.html(e.html().replace(/&lt;br\/&gt;/g,"<br/>")),i.classed("hover",!0)}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),St(this).classed("hover",!1)})};J1.push(oM);const wrt=function(t="gen-1"){ar={},il={},js=[],J1=[oM],qi=[],K1={},Z1=0,l4=[],c4=!0,Q1=t,ci()},Trt=t=>{Q1=t||"gen-1"},Ert=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},Crt=function(t,e,r){let n=t.trim(),i=r.trim();n===i&&i.match(/\s/)&&(n=void 0);function a(h){const d={boolean:{},number:{},string:{}},f=[];let p;return{nodeList:h.filter(function(_){const y=typeof _;return _.stmt&&_.stmt==="dir"?(p=_.value,!1):_.trim()===""?!1:y in d?d[y].hasOwnProperty(_)?!1:d[y][_]=!0:f.indexOf(_)>=0?!1:f.push(_)}),dir:p}}let s=[];const{nodeList:o,dir:l}=a(s.concat.apply(s,e));if(s=o,Q1==="gen-1")for(let h=0;h<s.length;h++)s[h]=e0(s[h]);n=n||"subGraph"+Z1,i=i||"",i=t0(i),Z1=Z1+1;const u={id:n,nodes:s,title:i.trim(),classes:[],dir:l};return H.info("Adding",u.id,u.nodes,u.dir),u.nodes=hM(u,qi).nodes,qi.push(u),K1[n]=u,n},Srt=function(t){for(let e=0;e<qi.length;e++)if(qi[e].id===t)return e;return-1};let ru=-1;const lM=[],cM=function(t,e){const r=qi[e].nodes;if(ru=ru+1,ru>2e3)return;if(lM[ru]=e,qi[e].id===t)return{result:!0,count:0};let n=0,i=1;for(;n<r.length;){const a=Srt(r[n]);if(a>=0){const s=cM(t,a);if(s.result)return{result:!0,count:i+s.count};i=i+s.count}n=n+1}return{result:!1,count:i}},Art=function(t){return lM[t]},Mrt=function(){ru=-1,qi.length>0&&cM("none",qi.length-1)},Lrt=function(){return qi},Rrt=()=>c4?(c4=!1,!0):!1,Irt=t=>{let e=t.trim(),r="arrow_open";switch(e[0]){case"<":r="arrow_point",e=e.slice(1);break;case"x":r="arrow_cross",e=e.slice(1);break;case"o":r="arrow_circle",e=e.slice(1);break}let n="normal";return e.indexOf("=")!==-1&&(n="thick"),e.indexOf(".")!==-1&&(n="dotted"),{type:r,stroke:n}},Nrt=(t,e)=>{const r=e.length;let n=0;for(let i=0;i<r;++i)e[i]===t&&++n;return n},Brt=t=>{const e=t.trim();let r=e.slice(0,-1),n="arrow_open";switch(e.slice(-1)){case"x":n="arrow_cross",e[0]==="x"&&(n="double_"+n,r=r.slice(1));break;case">":n="arrow_point",e[0]==="<"&&(n="double_"+n,r=r.slice(1));break;case"o":n="arrow_circle",e[0]==="o"&&(n="double_"+n,r=r.slice(1));break}let i="normal",a=r.length-1;r[0]==="="&&(i="thick"),r[0]==="~"&&(i="invisible");let s=Nrt(".",r);return s&&(i="dotted",a=s),{type:n,stroke:i,length:a}},Drt=(t,e)=>{const r=Brt(t);let n;if(e){if(n=Irt(e),n.stroke!==r.stroke)return{type:"INVALID",stroke:"INVALID"};if(n.type==="arrow_open")n.type=r.type;else{if(n.type!==r.type)return{type:"INVALID",stroke:"INVALID"};n.type="double_"+n.type}return n.type==="double_arrow"&&(n.type="double_arrow_point"),n.length=r.length,n}return r},uM=(t,e)=>{let r=!1;return t.forEach(n=>{n.nodes.indexOf(e)>=0&&(r=!0)}),r},hM=(t,e)=>{const r=[];return t.nodes.forEach((n,i)=>{uM(e,n)||r.push(t.nodes[i])}),{nodes:r}},fa={parseDirective:art,defaultConfig:()=>Xo.flowchart,setAccTitle:Yn,getAccTitle:ui,getAccDescription:fi,setAccDescription:hi,addVertex:srt,lookUpDomId:e0,addLink:lrt,updateLinkInterpolate:crt,updateLink:urt,addClass:hrt,setDirection:frt,setClass:u4,setTooltip:drt,getTooltip:yrt,setClickEvent:mrt,setLink:grt,bindFunctions:brt,getDirection:_rt,getVertices:vrt,getEdges:xrt,getClasses:krt,clear:wrt,setGen:Trt,defaultStyle:Ert,addSubGraph:Crt,getDepthFirstPos:Art,indexNodes:Mrt,getSubGraphs:Lrt,destructLink:Drt,lex:{firstGraph:Rrt},exists:uM,makeUniq:hM};var r0;if(typeof fn=="function")try{r0=cr}catch{}r0||(r0=window.graphlib);var Ort=r0,n0;if(typeof fn=="function")try{n0=OA()}catch{}n0||(n0=window.dagre);var fM=n0,dM=Frt;function Frt(t,e){return t.intersect(e)}var h4=Prt;function Prt(t,e,r,n){var i=t.x,a=t.y,s=i-n.x,o=a-n.y,l=Math.sqrt(e*e*o*o+r*r*s*s),u=Math.abs(e*r*s/l);n.x<i&&(u=-u);var h=Math.abs(e*r*o/l);return n.y<a&&(h=-h),{x:i+u,y:a+h}}var qrt=h4,pM=Vrt;function Vrt(t,e,r){return qrt(t,e,e,r)}var zrt=Yrt;function Yrt(t,e,r,n){var i,a,s,o,l,u,h,d,f,p,m,_,y,b,x;if(i=e.y-t.y,s=t.x-e.x,l=e.x*t.y-t.x*e.y,f=i*r.x+s*r.y+l,p=i*n.x+s*n.y+l,!(f!==0&&p!==0&&gM(f,p))&&(a=n.y-r.y,o=r.x-n.x,u=n.x*r.y-r.x*n.y,h=a*t.x+o*t.y+u,d=a*e.x+o*e.y+u,!(h!==0&&d!==0&&gM(h,d))&&(m=i*o-a*s,m!==0)))return _=Math.abs(m/2),y=s*u-o*l,b=y<0?(y-_)/m:(y+_)/m,y=a*l-i*u,x=y<0?(y-_)/m:(y+_)/m,{x:b,y:x}}function gM(t,e){return t*e>0}var Urt=zrt,yM=Wrt;function Wrt(t,e,r){var n=t.x,i=t.y,a=[],s=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY;e.forEach(function(m){s=Math.min(s,m.x),o=Math.min(o,m.y)});for(var l=n-t.width/2-s,u=i-t.height/2-o,h=0;h<e.length;h++){var d=e[h],f=e[h<e.length-1?h+1:0],p=Urt(t,r,{x:l+d.x,y:u+d.y},{x:l+f.x,y:u+f.y});p&&a.push(p)}return a.length?(a.length>1&&a.sort(function(m,_){var y=m.x-r.x,b=m.y-r.y,x=Math.sqrt(y*y+b*b),k=_.x-r.x,T=_.y-r.y,C=Math.sqrt(k*k+T*T);return x<C?-1:x===C?0:1}),a[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",t),t)}var mM=Hrt;function Hrt(t,e){var r=t.x,n=t.y,i=e.x-r,a=e.y-n,s=t.width/2,o=t.height/2,l,u;return Math.abs(a)*s>Math.abs(i)*o?(a<0&&(o=-o),l=a===0?0:o*i/a,u=o):(i<0&&(s=-s),l=s,u=i===0?0:s*a/i),{x:r+l,y:n+u}}var Grt={node:dM,circle:pM,ellipse:h4,polygon:yM,rect:mM},i0;if(typeof fn=="function")try{i0={defaults:oS(),each:am(),isFunction:Yo,isPlainObject:AS(),pick:GS(),has:$m(),range:KS(),uniqueId:nA()}}catch{}i0||(i0=window._);var al=i0;const jrt=wn(CH);var nu;if(!nu&&typeof fn=="function")try{nu=jrt}catch{}nu||(nu=window.d3);var es=nu,bM=al,Gn={isSubgraph:$rt,edgeToId:Xrt,applyStyle:Zrt,applyClass:Qrt,applyTransition:Jrt};function $rt(t,e){return!!t.children(e).length}function Xrt(t){return f4(t.v)+":"+f4(t.w)+":"+f4(t.name)}var Krt=/:/g;function f4(t){return t?String(t).replace(Krt,"\\:"):""}function Zrt(t,e){e&&t.attr("style",e)}function Qrt(t,e,r){e&&t.attr("class",e).attr("class",r+" "+t.attr("class"))}function Jrt(t,e){var r=e.graph();if(bM.isPlainObject(r)){var n=r.transition;if(bM.isFunction(n))return n(t)}return t}var d4,_M;function tnt(){if(_M)return d4;_M=1;var t=Gn;d4=e;function e(n,i){for(var a=n.append("text"),s=r(i.label).split(`
+`),o=0;o<s.length;o++)a.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(s[o]);return t.applyStyle(a,i.labelStyle),a}function r(n){for(var i="",a=!1,s,o=0;o<n.length;++o)if(s=n[o],a){switch(s){case"n":i+=`
+`;break;default:i+=s}a=!1}else s==="\\"?a=!0:i+=s;return i}return d4}var ent=Gn,p4=rnt;function rnt(t,e){var r=t.append("foreignObject").attr("width","100000"),n=r.append("xhtml:div");n.attr("xmlns","http://www.w3.org/1999/xhtml");var i=e.label;switch(typeof i){case"function":n.insert(i);break;case"object":n.insert(function(){return i});break;default:n.html(i)}ent.applyStyle(n,e.labelStyle),n.style("display","inline-block"),n.style("white-space","nowrap");var a=n.node().getBoundingClientRect();return r.attr("width",a.width).attr("height",a.height),r}var g4,vM;function nnt(){if(vM)return g4;vM=1;var t=Gn;g4=e;function e(r,n){var i=r;return i.node().appendChild(n.label),t.applyStyle(i,n.labelStyle),i}return g4}var y4,xM;function m4(){if(xM)return y4;xM=1;var t=tnt(),e=p4,r=nnt();y4=n;function n(i,a,s){var o=a.label,l=i.append("g");a.labelType==="svg"?r(l,a):typeof o!="string"||a.labelType==="html"?e(l,a):t(l,a);var u=l.node().getBBox(),h;switch(s){case"top":h=-a.height/2;break;case"bottom":h=a.height/2-u.height;break;default:h=-u.height/2}return l.attr("transform","translate("+-u.width/2+","+h+")"),l}return y4}var b4,kM;function int(){if(kM)return b4;kM=1;var t=al,e=m4(),r=Gn,n=es;b4=i;function i(a,s,o){var l=s.nodes().filter(function(d){return!r.isSubgraph(s,d)}),u=a.selectAll("g.node").data(l,function(d){return d}).classed("update",!0);u.exit().remove(),u.enter().append("g").attr("class","node").style("opacity",0),u=a.selectAll("g.node"),u.each(function(d){var f=s.node(d),p=n.select(this);r.applyClass(p,f.class,(p.classed("update")?"update ":"")+"node"),p.select("g.label").remove();var m=p.append("g").attr("class","label"),_=e(m,f),y=o[f.shape],b=t.pick(_.node().getBBox(),"width","height");f.elem=this,f.id&&p.attr("id",f.id),f.labelId&&m.attr("id",f.labelId),t.has(f,"width")&&(b.width=f.width),t.has(f,"height")&&(b.height=f.height),b.width+=f.paddingLeft+f.paddingRight,b.height+=f.paddingTop+f.paddingBottom,m.attr("transform","translate("+(f.paddingLeft-f.paddingRight)/2+","+(f.paddingTop-f.paddingBottom)/2+")");var x=n.select(this);x.select(".label-container").remove();var k=y(x,b,f).classed("label-container",!0);r.applyStyle(k,f.style);var T=k.node().getBBox();f.width=T.width,f.height=T.height});var h;return u.exit?h=u.exit():h=u.selectAll(null),r.applyTransition(h,s).style("opacity",0).remove(),u}return b4}var _4,wM;function ant(){if(wM)return _4;wM=1;var t=Gn,e=es,r=m4();_4=n;function n(i,a){var s=a.nodes().filter(function(u){return t.isSubgraph(a,u)}),o=i.selectAll("g.cluster").data(s,function(u){return u});o.selectAll("*").remove(),o.enter().append("g").attr("class","cluster").attr("id",function(u){var h=a.node(u);return h.id}).style("opacity",0),o=i.selectAll("g.cluster"),t.applyTransition(o,a).style("opacity",1),o.each(function(u){var h=a.node(u),d=e.select(this);e.select(this).append("rect");var f=d.append("g").attr("class","label");r(f,h,h.clusterLabelPos)}),o.selectAll("rect").each(function(u){var h=a.node(u),d=e.select(this);t.applyStyle(d,h.style)});var l;return o.exit?l=o.exit():l=o.selectAll(null),t.applyTransition(l,a).style("opacity",0).remove(),o}return _4}var v4,TM;function snt(){if(TM)return v4;TM=1;var t=al,e=m4(),r=Gn,n=es;v4=i;function i(a,s){var o=a.selectAll("g.edgeLabel").data(s.edges(),function(u){return r.edgeToId(u)}).classed("update",!0);o.exit().remove(),o.enter().append("g").classed("edgeLabel",!0).style("opacity",0),o=a.selectAll("g.edgeLabel"),o.each(function(u){var h=n.select(this);h.select(".label").remove();var d=s.edge(u),f=e(h,s.edge(u),0,0).classed("label",!0),p=f.node().getBBox();d.labelId&&f.attr("id",d.labelId),t.has(d,"width")||(d.width=p.width),t.has(d,"height")||(d.height=p.height)});var l;return o.exit?l=o.exit():l=o.selectAll(null),r.applyTransition(l,s).style("opacity",0).remove(),o}return v4}var x4,EM;function ont(){if(EM)return x4;EM=1;var t=al,e=dM,r=Gn,n=es;x4=i;function i(d,f,p){var m=d.selectAll("g.edgePath").data(f.edges(),function(b){return r.edgeToId(b)}).classed("update",!0),_=u(m,f);h(m,f);var y=m.merge!==void 0?m.merge(_):m;return r.applyTransition(y,f).style("opacity",1),y.each(function(b){var x=n.select(this),k=f.edge(b);k.elem=this,k.id&&x.attr("id",k.id),r.applyClass(x,k.class,(x.classed("update")?"update ":"")+"edgePath")}),y.selectAll("path.path").each(function(b){var x=f.edge(b);x.arrowheadId=t.uniqueId("arrowhead");var k=n.select(this).attr("marker-end",function(){return"url("+a(location.href,x.arrowheadId)+")"}).style("fill","none");r.applyTransition(k,f).attr("d",function(T){return s(f,T)}),r.applyStyle(k,x.style)}),y.selectAll("defs *").remove(),y.selectAll("defs").each(function(b){var x=f.edge(b),k=p[x.arrowhead];k(n.select(this),x.arrowheadId,x,"arrowhead")}),y}function a(d,f){var p=d.split("#")[0];return p+"#"+f}function s(d,f){var p=d.edge(f),m=d.node(f.v),_=d.node(f.w),y=p.points.slice(1,p.points.length-1);return y.unshift(e(m,y[0])),y.push(e(_,y[y.length-1])),o(p,y)}function o(d,f){var p=(n.line||n.svg.line)().x(function(m){return m.x}).y(function(m){return m.y});return(p.curve||p.interpolate)(d.curve),p(f)}function l(d){var f=d.getBBox(),p=d.ownerSVGElement.getScreenCTM().inverse().multiply(d.getScreenCTM()).translate(f.width/2,f.height/2);return{x:p.e,y:p.f}}function u(d,f){var p=d.enter().append("g").attr("class","edgePath").style("opacity",0);return p.append("path").attr("class","path").attr("d",function(m){var _=f.edge(m),y=f.node(m.v).elem,b=t.range(_.points.length).map(function(){return l(y)});return o(_,b)}),p.append("defs"),p}function h(d,f){var p=d.exit();r.applyTransition(p,f).style("opacity",0).remove()}return x4}var k4,CM;function lnt(){if(CM)return k4;CM=1;var t=Gn,e=es;k4=r;function r(n,i){var a=n.filter(function(){return!e.select(this).classed("update")});function s(o){var l=i.node(o);return"translate("+l.x+","+l.y+")"}a.attr("transform",s),t.applyTransition(n,i).style("opacity",1).attr("transform",s)}return k4}var w4,SM;function cnt(){if(SM)return w4;SM=1;var t=Gn,e=es,r=al;w4=n;function n(i,a){var s=i.filter(function(){return!e.select(this).classed("update")});function o(l){var u=a.edge(l);return r.has(u,"x")?"translate("+u.x+","+u.y+")":""}s.attr("transform",o),t.applyTransition(i,a).style("opacity",1).attr("transform",o)}return w4}var T4,AM;function unt(){if(AM)return T4;AM=1;var t=Gn,e=es;T4=r;function r(n,i){var a=n.filter(function(){return!e.select(this).classed("update")});function s(o){var l=i.node(o);return"translate("+l.x+","+l.y+")"}a.attr("transform",s),t.applyTransition(n,i).style("opacity",1).attr("transform",s),t.applyTransition(a.selectAll("rect"),i).attr("width",function(o){return i.node(o).width}).attr("height",function(o){return i.node(o).height}).attr("x",function(o){var l=i.node(o);return-l.width/2}).attr("y",function(o){var l=i.node(o);return-l.height/2})}return T4}var E4,MM;function hnt(){if(MM)return E4;MM=1;var t=mM,e=h4,r=pM,n=yM;E4={rect:i,ellipse:a,circle:s,diamond:o};function i(l,u,h){var d=l.insert("rect",":first-child").attr("rx",h.rx).attr("ry",h.ry).attr("x",-u.width/2).attr("y",-u.height/2).attr("width",u.width).attr("height",u.height);return h.intersect=function(f){return t(h,f)},d}function a(l,u,h){var d=u.width/2,f=u.height/2,p=l.insert("ellipse",":first-child").attr("x",-u.width/2).attr("y",-u.height/2).attr("rx",d).attr("ry",f);return h.intersect=function(m){return e(h,d,f,m)},p}function s(l,u,h){var d=Math.max(u.width,u.height)/2,f=l.insert("circle",":first-child").attr("x",-u.width/2).attr("y",-u.height/2).attr("r",d);return h.intersect=function(p){return r(h,d,p)},f}function o(l,u,h){var d=u.width*Math.SQRT2/2,f=u.height*Math.SQRT2/2,p=[{x:0,y:-f},{x:-d,y:0},{x:0,y:f},{x:d,y:0}],m=l.insert("polygon",":first-child").attr("points",p.map(function(_){return _.x+","+_.y}).join(" "));return h.intersect=function(_){return n(h,p,_)},m}return E4}var C4,LM;function fnt(){if(LM)return C4;LM=1;var t=Gn;C4={default:e,normal:e,vee:r,undirected:n};function e(i,a,s,o){var l=i.append("marker").attr("id",a).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),u=l.append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");t.applyStyle(u,s[o+"Style"]),s[o+"Class"]&&u.attr("class",s[o+"Class"])}function r(i,a,s,o){var l=i.append("marker").attr("id",a).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),u=l.append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");t.applyStyle(u,s[o+"Style"]),s[o+"Class"]&&u.attr("class",s[o+"Class"])}function n(i,a,s,o){var l=i.append("marker").attr("id",a).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),u=l.append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");t.applyStyle(u,s[o+"Style"]),s[o+"Class"]&&u.attr("class",s[o+"Class"])}return C4}var Ur=al,dnt=es,pnt=fM.layout,gnt=ynt;function ynt(){var t=int(),e=ant(),r=snt(),n=ont(),i=lnt(),a=cnt(),s=unt(),o=hnt(),l=fnt(),u=function(h,d){_nt(d);var f=iu(h,"output"),p=iu(f,"clusters"),m=iu(f,"edgePaths"),_=r(iu(f,"edgeLabels"),d),y=t(iu(f,"nodes"),d,o);pnt(d),i(y,d),a(_,d),n(m,d,l);var b=e(p,d);s(b,d),vnt(d)};return u.createNodes=function(h){return arguments.length?(t=h,u):t},u.createClusters=function(h){return arguments.length?(e=h,u):e},u.createEdgeLabels=function(h){return arguments.length?(r=h,u):r},u.createEdgePaths=function(h){return arguments.length?(n=h,u):n},u.shapes=function(h){return arguments.length?(o=h,u):o},u.arrows=function(h){return arguments.length?(l=h,u):l},u}var mnt={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},bnt={arrowhead:"normal",curve:dnt.curveLinear};function _nt(t){t.nodes().forEach(function(e){var r=t.node(e);!Ur.has(r,"label")&&!t.children(e).length&&(r.label=e),Ur.has(r,"paddingX")&&Ur.defaults(r,{paddingLeft:r.paddingX,paddingRight:r.paddingX}),Ur.has(r,"paddingY")&&Ur.defaults(r,{paddingTop:r.paddingY,paddingBottom:r.paddingY}),Ur.has(r,"padding")&&Ur.defaults(r,{paddingLeft:r.padding,paddingRight:r.padding,paddingTop:r.padding,paddingBottom:r.padding}),Ur.defaults(r,mnt),Ur.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(n){r[n]=Number(r[n])}),Ur.has(r,"width")&&(r._prevWidth=r.width),Ur.has(r,"height")&&(r._prevHeight=r.height)}),t.edges().forEach(function(e){var r=t.edge(e);Ur.has(r,"label")||(r.label=""),Ur.defaults(r,bnt)})}function vnt(t){Ur.each(t.nodes(),function(e){var r=t.node(e);Ur.has(r,"_prevWidth")?r.width=r._prevWidth:delete r.width,Ur.has(r,"_prevHeight")?r.height=r._prevHeight:delete r.height,delete r._prevWidth,delete r._prevHeight})}function iu(t,e){var r=t.select("g."+e);return r.empty()&&(r=t.append("g").attr("class",e)),r}var xnt="0.6.4";/**
+ * @license
+ * Copyright (c) 2012-2013 Chris Pettitt
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */var An={graphlib:Ort,dagre:fM,intersect:Grt,render:gnt,util:Gn,version:xnt};function RM(t,e,r){const n=e.width,i=e.height,a=(n+i)*.9,s=[{x:a/2,y:0},{x:a,y:-a/2},{x:a/2,y:-a},{x:0,y:-a/2}],o=da(t,a,a,s);return r.intersect=function(l){return An.intersect.polygon(r,s,l)},o}function IM(t,e,r){const i=e.height,a=i/4,s=e.width+2*a,o=[{x:a,y:0},{x:s-a,y:0},{x:s,y:-i/2},{x:s-a,y:-i},{x:a,y:-i},{x:0,y:-i/2}],l=da(t,s,i,o);return r.intersect=function(u){return An.intersect.polygon(r,o,u)},l}function NM(t,e,r){const n=e.width,i=e.height,a=[{x:-i/2,y:0},{x:n,y:0},{x:n,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}],s=da(t,n,i,a);return r.intersect=function(o){return An.intersect.polygon(r,a,o)},s}function BM(t,e,r){const n=e.width,i=e.height,a=[{x:-2*i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:i/6,y:-i}],s=da(t,n,i,a);return r.intersect=function(o){return An.intersect.polygon(r,a,o)},s}function DM(t,e,r){const n=e.width,i=e.height,a=[{x:2*i/6,y:0},{x:n+i/6,y:0},{x:n-2*i/6,y:-i},{x:-i/6,y:-i}],s=da(t,n,i,a);return r.intersect=function(o){return An.intersect.polygon(r,a,o)},s}function OM(t,e,r){const n=e.width,i=e.height,a=[{x:-2*i/6,y:0},{x:n+2*i/6,y:0},{x:n-i/6,y:-i},{x:i/6,y:-i}],s=da(t,n,i,a);return r.intersect=function(o){return An.intersect.polygon(r,a,o)},s}function FM(t,e,r){const n=e.width,i=e.height,a=[{x:i/6,y:0},{x:n-i/6,y:0},{x:n+2*i/6,y:-i},{x:-2*i/6,y:-i}],s=da(t,n,i,a);return r.intersect=function(o){return An.intersect.polygon(r,a,o)},s}function PM(t,e,r){const n=e.width,i=e.height,a=[{x:0,y:0},{x:n+i/2,y:0},{x:n,y:-i/2},{x:n+i/2,y:-i},{x:0,y:-i}],s=da(t,n,i,a);return r.intersect=function(o){return An.intersect.polygon(r,a,o)},s}function qM(t,e,r){const n=e.height,i=e.width+n/4,a=t.insert("rect",":first-child").attr("rx",n/2).attr("ry",n/2).attr("x",-i/2).attr("y",-n/2).attr("width",i).attr("height",n);return r.intersect=function(s){return An.intersect.rect(r,s)},a}function VM(t,e,r){const n=e.width,i=e.height,a=[{x:0,y:0},{x:n,y:0},{x:n,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:n+8,y:0},{x:n+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],s=da(t,n,i,a);return r.intersect=function(o){return An.intersect.polygon(r,a,o)},s}function zM(t,e,r){const n=e.width,i=n/2,a=i/(2.5+n/50),s=e.height+a,o="M 0,"+a+" a "+i+","+a+" 0,0,0 "+n+" 0 a "+i+","+a+" 0,0,0 "+-n+" 0 l 0,"+s+" a "+i+","+a+" 0,0,0 "+n+" 0 l 0,"+-s,l=t.attr("label-offset-y",a).insert("path",":first-child").attr("d",o).attr("transform","translate("+-n/2+","+-(s/2+a)+")");return r.intersect=function(u){const h=An.intersect.rect(r,u),d=h.x-r.x;if(i!=0&&(Math.abs(d)<r.width/2||Math.abs(d)==r.width/2&&Math.abs(h.y-r.y)>r.height/2-a)){let f=a*a*(1-d*d/(i*i));f!=0&&(f=Math.sqrt(f)),f=a-f,u.y-r.y>0&&(f=-f),h.y+=f}return h},l}function knt(t){t.shapes().question=RM,t.shapes().hexagon=IM,t.shapes().stadium=qM,t.shapes().subroutine=VM,t.shapes().cylinder=zM,t.shapes().rect_left_inv_arrow=NM,t.shapes().lean_right=BM,t.shapes().lean_left=DM,t.shapes().trapezoid=OM,t.shapes().inv_trapezoid=FM,t.shapes().rect_right_inv_arrow=PM}function wnt(t){t({question:RM}),t({hexagon:IM}),t({stadium:qM}),t({subroutine:VM}),t({cylinder:zM}),t({rect_left_inv_arrow:NM}),t({lean_right:BM}),t({lean_left:DM}),t({trapezoid:OM}),t({inv_trapezoid:FM}),t({rect_right_inv_arrow:PM})}function da(t,e,r,n){return t.insert("polygon",":first-child").attr("points",n.map(function(i){return i.x+","+i.y}).join(" ")).attr("transform","translate("+-e/2+","+r/2+")")}const Tnt={addToRender:knt,addToRenderV2:wnt},YM={},Ent=function(t){const e=Object.keys(t);for(let r=0;r<e.length;r++)YM[e[r]]=t[e[r]]},UM=function(t,e,r,n,i,a){const s=n?n.select(`[id="${r}"]`):St(`[id="${r}"]`),o=i||document;Object.keys(t).forEach(function(u){const h=t[u];let d="default";h.classes.length>0&&(d=h.classes.join(" "));const f=Ka(h.styles);let p=h.text!==void 0?h.text:h.id,m;if(Mr(nt().flowchart.htmlLabels)){const b={label:p.replace(/fa[lrsb]?:fa-[\w-]+/g,x=>`<i class='${x.replace(":"," ")}'></i>`)};m=p4(s,b).node(),m.parentNode.removeChild(m)}else{const b=o.createElementNS("http://www.w3.org/2000/svg","text");b.setAttribute("style",f.labelStyle.replace("color:","fill:"));const x=p.split(pe.lineBreakRegex);for(let k=0;k<x.length;k++){const T=o.createElementNS("http://www.w3.org/2000/svg","tspan");T.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),T.setAttribute("dy","1em"),T.setAttribute("x","1"),T.textContent=x[k],b.appendChild(T)}m=b}let _=0,y="";switch(h.type){case"round":_=5,y="rect";break;case"square":y="rect";break;case"diamond":y="question";break;case"hexagon":y="hexagon";break;case"odd":y="rect_left_inv_arrow";break;case"lean_right":y="lean_right";break;case"lean_left":y="lean_left";break;case"trapezoid":y="trapezoid";break;case"inv_trapezoid":y="inv_trapezoid";break;case"odd_right":y="rect_left_inv_arrow";break;case"circle":y="circle";break;case"ellipse":y="ellipse";break;case"stadium":y="stadium";break;case"subroutine":y="subroutine";break;case"cylinder":y="cylinder";break;case"group":y="rect";break;default:y="rect"}H.warn("Adding node",h.id,h.domId),e.setNode(a.db.lookUpDomId(h.id),{labelType:"svg",labelStyle:f.labelStyle,shape:y,label:m,rx:_,ry:_,class:d,style:f.style,id:a.db.lookUpDomId(h.id)})})},WM=function(t,e,r){let n=0,i,a;if(typeof t.defaultStyle<"u"){const s=Ka(t.defaultStyle);i=s.style,a=s.labelStyle}t.forEach(function(s){n++;var o="L-"+s.start+"-"+s.end,l="LS-"+s.start,u="LE-"+s.end;const h={};s.type==="arrow_open"?h.arrowhead="none":h.arrowhead="normal";let d="",f="";if(typeof s.style<"u"){const p=Ka(s.style);d=p.style,f=p.labelStyle}else switch(s.stroke){case"normal":d="fill:none",typeof i<"u"&&(d=i),typeof a<"u"&&(f=a);break;case"dotted":d="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":d=" stroke-width: 3.5px;fill:none";break}h.style=d,h.labelStyle=f,typeof s.interpolate<"u"?h.curve=Ni(s.interpolate,yn):typeof t.defaultInterpolate<"u"?h.curve=Ni(t.defaultInterpolate,yn):h.curve=Ni(YM.curve,yn),typeof s.text>"u"?typeof s.style<"u"&&(h.arrowheadStyle="fill: #333"):(h.arrowheadStyle="fill: #333",h.labelpos="c",Mr(nt().flowchart.htmlLabels)?(h.labelType="html",h.label=`<span id="L-${o}" class="edgeLabel L-${l}' L-${u}" style="${h.labelStyle}">${s.text.replace(/fa[lrsb]?:fa-[\w-]+/g,p=>`<i class='${p.replace(":"," ")}'></i>`)}</span>`):(h.labelType="text",h.label=s.text.replace(pe.lineBreakRegex,`
+`),typeof s.style>"u"&&(h.style=h.style||"stroke: #333; stroke-width: 1.5px;fill:none"),h.labelStyle=h.labelStyle.replace("color:","fill:"))),h.id=o,h.class=l+" "+u,h.minlen=s.length||1,e.setEdge(r.db.lookUpDomId(s.start),r.db.lookUpDomId(s.end),h,n)})},S4={setConf:Ent,addVertices:UM,addEdges:WM,getClasses:function(t,e){H.info("Extracting classes"),e.db.clear();try{return e.parse(t),e.db.getClasses()}catch{return}},draw:function(t,e,r,n){H.info("Drawing flowchart"),n.db.clear();const{securityLevel:i,flowchart:a}=nt();let s;i==="sandbox"&&(s=St("#i"+e));const o=St(i==="sandbox"?s.nodes()[0].contentDocument.body:"body"),l=i==="sandbox"?s.nodes()[0].contentDocument:document;try{n.parser.parse(t)}catch{H.debug("Parsing failed")}let u=n.db.getDirection();typeof u>"u"&&(u="TD");const h=a.nodeSpacing||50,d=a.rankSpacing||50,f=new cr.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:u,nodesep:h,ranksep:d,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});let p;const m=n.db.getSubGraphs();for(let S=m.length-1;S>=0;S--)p=m[S],n.db.addVertex(p.id,p.title,"group",void 0,p.classes);const _=n.db.getVertices();H.warn("Get vertices",_);const y=n.db.getEdges();let b=0;for(b=m.length-1;b>=0;b--){p=m[b],Nu("cluster").append("text");for(let S=0;S<p.nodes.length;S++)H.warn("Setting subgraph",p.nodes[S],n.db.lookUpDomId(p.nodes[S]),n.db.lookUpDomId(p.id)),f.setParent(n.db.lookUpDomId(p.nodes[S]),n.db.lookUpDomId(p.id))}UM(_,f,e,o,l,n),WM(y,f,n);const x=An.render,k=new x;Tnt.addToRender(k),k.arrows().none=function(R,A,L,v){const w=R.append("marker").attr("id",A).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 0 0 L 0 0 z");An.util.applyStyle(w,L[v+"Style"])},k.arrows().normal=function(R,A){R.append("marker").attr("id",A).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowheadPath").style("stroke-width",1).style("stroke-dasharray","1,0")};const T=o.select(`[id="${e}"]`);bn(n.db,T,e);const C=o.select("#"+e+" g");for(k(C,f),C.selectAll("g.node").attr("title",function(){return n.db.getTooltip(this.id)}),n.db.indexNodes("subGraph"+b),b=0;b<m.length;b++)if(p=m[b],p.title!=="undefined"){const S=l.querySelectorAll("#"+e+' [id="'+n.db.lookUpDomId(p.id)+'"] rect'),R=l.querySelectorAll("#"+e+' [id="'+n.db.lookUpDomId(p.id)+'"]'),A=S[0].x.baseVal.value,L=S[0].y.baseVal.value,v=S[0].width.baseVal.value,w=St(R[0]).select(".label");w.attr("transform",`translate(${A+v/2}, ${L+14})`),w.attr("id",e+"Text");for(let D=0;D<p.classes.length;D++)R[0].classList.add(p.classes[D])}if(!a.htmlLabels){const S=l.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(let R=0;R<S.length;R++){const A=S[R],L=A.getBBox(),v=l.createElementNS("http://www.w3.org/2000/svg","rect");v.setAttribute("rx",0),v.setAttribute("ry",0),v.setAttribute("width",L.width),v.setAttribute("height",L.height),A.insertBefore(v,A.firstChild)}}i1(f,T,a.diagramPadding,a.useMaxWidth),Object.keys(_).forEach(function(S){const R=_[S];if(R.link){const A=o.select("#"+e+' [id="'+n.db.lookUpDomId(S)+'"]');if(A){const L=l.createElementNS("http://www.w3.org/2000/svg","a");L.setAttributeNS("http://www.w3.org/2000/svg","class",R.classes.join(" ")),L.setAttributeNS("http://www.w3.org/2000/svg","href",R.link),L.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),i==="sandbox"?L.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):R.linkTarget&&L.setAttributeNS("http://www.w3.org/2000/svg","target",R.linkTarget);const v=A.insert(function(){return L},":first-child"),B=A.select(".label-container");B&&v.append(function(){return B.node()});const w=A.select(".label");w&&v.append(function(){return w.node()})}}})}},HM={},Cnt=function(t){const e=Object.keys(t);for(let r=0;r<e.length;r++)HM[e[r]]=t[e[r]]},GM=function(t,e,r,n,i,a){const s=n.select(`[id="${r}"]`);Object.keys(t).forEach(function(l){const u=t[l];let h="default";u.classes.length>0&&(h=u.classes.join(" "));const d=Ka(u.styles);let f=u.text!==void 0?u.text:u.id,p;if(Mr(nt().flowchart.htmlLabels)){const y={label:f.replace(/fa[lrsb]?:fa-[\w-]+/g,b=>`<i class='${b.replace(":"," ")}'></i>`)};p=p4(s,y).node(),p.parentNode.removeChild(p)}else{const y=i.createElementNS("http://www.w3.org/2000/svg","text");y.setAttribute("style",d.labelStyle.replace("color:","fill:"));const b=f.split(pe.lineBreakRegex);for(let x=0;x<b.length;x++){const k=i.createElementNS("http://www.w3.org/2000/svg","tspan");k.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),k.setAttribute("dy","1em"),k.setAttribute("x","1"),k.textContent=b[x],y.appendChild(k)}p=y}let m=0,_="";switch(u.type){case"round":m=5,_="rect";break;case"square":_="rect";break;case"diamond":_="question";break;case"hexagon":_="hexagon";break;case"odd":_="rect_left_inv_arrow";break;case"lean_right":_="lean_right";break;case"lean_left":_="lean_left";break;case"trapezoid":_="trapezoid";break;case"inv_trapezoid":_="inv_trapezoid";break;case"odd_right":_="rect_left_inv_arrow";break;case"circle":_="circle";break;case"ellipse":_="ellipse";break;case"stadium":_="stadium";break;case"subroutine":_="subroutine";break;case"cylinder":_="cylinder";break;case"group":_="rect";break;case"doublecircle":_="doublecircle";break;default:_="rect"}e.setNode(u.id,{labelStyle:d.labelStyle,shape:_,labelText:f,rx:m,ry:m,class:h,style:d.style,id:u.id,link:u.link,linkTarget:u.linkTarget,tooltip:a.db.getTooltip(u.id)||"",domId:a.db.lookUpDomId(u.id),haveCallback:u.haveCallback,width:u.type==="group"?500:void 0,dir:u.dir,type:u.type,props:u.props,padding:nt().flowchart.padding}),H.info("setNode",{labelStyle:d.labelStyle,shape:_,labelText:f,rx:m,ry:m,class:h,style:d.style,id:u.id,domId:a.db.lookUpDomId(u.id),width:u.type==="group"?500:void 0,type:u.type,dir:u.dir,props:u.props,padding:nt().flowchart.padding})})},jM=function(t,e,r){H.info("abc78 edges = ",t);let n=0,i={},a,s;if(typeof t.defaultStyle<"u"){const o=Ka(t.defaultStyle);a=o.style,s=o.labelStyle}t.forEach(function(o){n++;var l="L-"+o.start+"-"+o.end;typeof i[l]>"u"?(i[l]=0,H.info("abc78 new entry",l,i[l])):(i[l]++,H.info("abc78 new entry",l,i[l]));let u=l+"-"+i[l];H.info("abc78 new link id to be used is",l,u,i[l]);var h="LS-"+o.start,d="LE-"+o.end;const f={style:"",labelStyle:""};switch(f.minlen=o.length||1,o.type==="arrow_open"?f.arrowhead="none":f.arrowhead="normal",f.arrowTypeStart="arrow_open",f.arrowTypeEnd="arrow_open",o.type){case"double_arrow_cross":f.arrowTypeStart="arrow_cross";case"arrow_cross":f.arrowTypeEnd="arrow_cross";break;case"double_arrow_point":f.arrowTypeStart="arrow_point";case"arrow_point":f.arrowTypeEnd="arrow_point";break;case"double_arrow_circle":f.arrowTypeStart="arrow_circle";case"arrow_circle":f.arrowTypeEnd="arrow_circle";break}let p="",m="";switch(o.stroke){case"normal":p="fill:none;",typeof a<"u"&&(p=a),typeof s<"u"&&(m=s),f.thickness="normal",f.pattern="solid";break;case"dotted":f.thickness="normal",f.pattern="dotted",f.style="fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":f.thickness="thick",f.pattern="solid",f.style="stroke-width: 3.5px;fill:none;";break;case"invisible":f.thickness="invisible",f.pattern="solid",f.style="stroke-width: 0;fill:none;";break}if(typeof o.style<"u"){const _=Ka(o.style);p=_.style,m=_.labelStyle}f.style=f.style+=p,f.labelStyle=f.labelStyle+=m,typeof o.interpolate<"u"?f.curve=Ni(o.interpolate,yn):typeof t.defaultInterpolate<"u"?f.curve=Ni(t.defaultInterpolate,yn):f.curve=Ni(HM.curve,yn),typeof o.text>"u"?typeof o.style<"u"&&(f.arrowheadStyle="fill: #333"):(f.arrowheadStyle="fill: #333",f.labelpos="c"),f.labelType="text",f.label=o.text.replace(pe.lineBreakRegex,`
+`),typeof o.style>"u"&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none;"),f.labelStyle=f.labelStyle.replace("color:","fill:"),f.id=u,f.classes="flowchart-link "+h+" "+d,e.setEdge(o.start,o.end,f,n)})},A4={setConf:Cnt,addVertices:GM,addEdges:jM,getClasses:function(t,e){H.info("Extracting classes"),e.db.clear();try{return e.parse(t),e.db.getClasses()}catch{return}},draw:function(t,e,r,n){H.info("Drawing flowchart"),n.db.clear(),fa.setGen("gen-2"),n.parser.parse(t);let i=n.db.getDirection();typeof i>"u"&&(i="TD");const{securityLevel:a,flowchart:s}=nt(),o=s.nodeSpacing||50,l=s.rankSpacing||50;let u;a==="sandbox"&&(u=St("#i"+e));const h=St(a==="sandbox"?u.nodes()[0].contentDocument.body:"body"),d=a==="sandbox"?u.nodes()[0].contentDocument:document,f=new cr.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:i,nodesep:o,ranksep:l,marginx:0,marginy:0}).setDefaultEdgeLabel(function(){return{}});let p;const m=n.db.getSubGraphs();H.info("Subgraphs - ",m);for(let C=m.length-1;C>=0;C--)p=m[C],H.info("Subgraph - ",p),n.db.addVertex(p.id,p.title,"group",void 0,p.classes,p.dir);const _=n.db.getVertices(),y=n.db.getEdges();H.info(y);let b=0;for(b=m.length-1;b>=0;b--){p=m[b],Nu("cluster").append("text");for(let C=0;C<p.nodes.length;C++)H.info("Setting up subgraphs",p.nodes[C],p.id),f.setParent(p.nodes[C],p.id)}GM(_,f,e,h,d,n),jM(y,f);const x=h.select(`[id="${e}"]`);bn(n.db,x,e);const k=h.select("#"+e+" g");if(i4(k,f,["point","circle","cross"],"flowchart",e),i1(f,x,s.diagramPadding,s.useMaxWidth),n.db.indexNodes("subGraph"+b),!s.htmlLabels){const C=d.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(let M=0;M<C.length;M++){const S=C[M],R=S.getBBox(),A=d.createElementNS("http://www.w3.org/2000/svg","rect");A.setAttribute("rx",0),A.setAttribute("ry",0),A.setAttribute("width",R.width),A.setAttribute("height",R.height),S.insertBefore(A,S.firstChild)}}Object.keys(_).forEach(function(C){const M=_[C];if(M.link){const S=St("#"+e+' [id="'+C+'"]');if(S){const R=d.createElementNS("http://www.w3.org/2000/svg","a");R.setAttributeNS("http://www.w3.org/2000/svg","class",M.classes.join(" ")),R.setAttributeNS("http://www.w3.org/2000/svg","href",M.link),R.setAttributeNS("http://www.w3.org/2000/svg","rel","noopener"),a==="sandbox"?R.setAttributeNS("http://www.w3.org/2000/svg","target","_top"):M.linkTarget&&R.setAttributeNS("http://www.w3.org/2000/svg","target",M.linkTarget);const A=S.insert(function(){return R},":first-child"),L=S.select(".label-container");L&&A.append(function(){return L.node()});const v=S.select(".label");v&&A.append(function(){return v.node()})}}})}};var M4=function(){var t=function(S,R,A,L){for(A=A||{},L=S.length;L--;A[S[L]]=R);return A},e=[1,3],r=[1,5],n=[7,9,11,12,13,14,15,16,17,18,19,20,22,24,25,27,34,39],i=[1,15],a=[1,16],s=[1,17],o=[1,18],l=[1,19],u=[1,20],h=[1,21],d=[1,22],f=[1,23],p=[1,24],m=[1,25],_=[1,26],y=[1,28],b=[1,30],x=[1,33],k=[5,7,9,11,12,13,14,15,16,17,18,19,20,22,24,25,27,34,39],T={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,topAxis:14,axisFormat:15,excludes:16,includes:17,todayMarker:18,title:19,acc_title:20,acc_title_value:21,acc_descr:22,acc_descr_value:23,acc_descr_multiline_value:24,section:25,clickStatement:26,taskTxt:27,taskData:28,openDirective:29,typeDirective:30,closeDirective:31,":":32,argDirective:33,click:34,callbackname:35,callbackargs:36,href:37,clickStatementDebug:38,open_directive:39,type_directive:40,arg_directive:41,close_directive:42,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"topAxis",15:"axisFormat",16:"excludes",17:"includes",18:"todayMarker",19:"title",20:"acc_title",21:"acc_title_value",22:"acc_descr",23:"acc_descr_value",24:"acc_descr_multiline_value",25:"section",27:"taskTxt",28:"taskData",32:":",34:"click",35:"callbackname",36:"callbackargs",37:"href",39:"open_directive",40:"type_directive",41:"arg_directive",42:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,2],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[26,2],[26,3],[26,3],[26,4],[26,3],[26,4],[26,2],[38,2],[38,3],[38,3],[38,4],[38,3],[38,4],[38,2],[29,1],[30,1],[33,1],[31,1]],performAction:function(R,A,L,v,B,w,D){var N=w.length-1;switch(B){case 2:return w[N-1];case 3:this.$=[];break;case 4:w[N-1].push(w[N]),this.$=w[N-1];break;case 5:case 6:this.$=w[N];break;case 7:case 8:this.$=[];break;case 9:v.setDateFormat(w[N].substr(11)),this.$=w[N].substr(11);break;case 10:v.enableInclusiveEndDates(),this.$=w[N].substr(18);break;case 11:v.TopAxis(),this.$=w[N].substr(8);break;case 12:v.setAxisFormat(w[N].substr(11)),this.$=w[N].substr(11);break;case 13:v.setExcludes(w[N].substr(9)),this.$=w[N].substr(9);break;case 14:v.setIncludes(w[N].substr(9)),this.$=w[N].substr(9);break;case 15:v.setTodayMarker(w[N].substr(12)),this.$=w[N].substr(12);break;case 16:v.setDiagramTitle(w[N].substr(6)),this.$=w[N].substr(6);break;case 17:this.$=w[N].trim(),v.setAccTitle(this.$);break;case 18:case 19:this.$=w[N].trim(),v.setAccDescription(this.$);break;case 20:v.addSection(w[N].substr(8)),this.$=w[N].substr(8);break;case 22:v.addTask(w[N-1],w[N]),this.$="task";break;case 26:this.$=w[N-1],v.setClickEvent(w[N-1],w[N],null);break;case 27:this.$=w[N-2],v.setClickEvent(w[N-2],w[N-1],w[N]);break;case 28:this.$=w[N-2],v.setClickEvent(w[N-2],w[N-1],null),v.setLink(w[N-2],w[N]);break;case 29:this.$=w[N-3],v.setClickEvent(w[N-3],w[N-2],w[N-1]),v.setLink(w[N-3],w[N]);break;case 30:this.$=w[N-2],v.setClickEvent(w[N-2],w[N],null),v.setLink(w[N-2],w[N-1]);break;case 31:this.$=w[N-3],v.setClickEvent(w[N-3],w[N-1],w[N]),v.setLink(w[N-3],w[N-2]);break;case 32:this.$=w[N-1],v.setLink(w[N-1],w[N]);break;case 33:case 39:this.$=w[N-1]+" "+w[N];break;case 34:case 35:case 37:this.$=w[N-2]+" "+w[N-1]+" "+w[N];break;case 36:case 38:this.$=w[N-3]+" "+w[N-2]+" "+w[N-1]+" "+w[N];break;case 40:v.parseDirective("%%{","open_directive");break;case 41:v.parseDirective(w[N],"type_directive");break;case 42:w[N]=w[N].trim().replace(/'/g,'"'),v.parseDirective(w[N],"arg_directive");break;case 43:v.parseDirective("}%%","close_directive","gantt");break}},table:[{3:1,4:2,5:e,29:4,39:r},{1:[3]},{3:6,4:2,5:e,29:4,39:r},t(n,[2,3],{6:7}),{30:8,40:[1,9]},{40:[2,40]},{1:[2,1]},{4:29,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:i,13:a,14:s,15:o,16:l,17:u,18:h,19:d,20:f,22:p,24:m,25:_,26:27,27:y,29:4,34:b,39:r},{31:31,32:[1,32],42:x},t([32,42],[2,41]),t(n,[2,8],{1:[2,2]}),t(n,[2,4]),{4:29,10:34,12:i,13:a,14:s,15:o,16:l,17:u,18:h,19:d,20:f,22:p,24:m,25:_,26:27,27:y,29:4,34:b,39:r},t(n,[2,6]),t(n,[2,7]),t(n,[2,9]),t(n,[2,10]),t(n,[2,11]),t(n,[2,12]),t(n,[2,13]),t(n,[2,14]),t(n,[2,15]),t(n,[2,16]),{21:[1,35]},{23:[1,36]},t(n,[2,19]),t(n,[2,20]),t(n,[2,21]),{28:[1,37]},t(n,[2,23]),{35:[1,38],37:[1,39]},{11:[1,40]},{33:41,41:[1,42]},{11:[2,43]},t(n,[2,5]),t(n,[2,17]),t(n,[2,18]),t(n,[2,22]),t(n,[2,26],{36:[1,43],37:[1,44]}),t(n,[2,32],{35:[1,45]}),t(k,[2,24]),{31:46,42:x},{42:[2,42]},t(n,[2,27],{37:[1,47]}),t(n,[2,28]),t(n,[2,30],{36:[1,48]}),{11:[1,49]},t(n,[2,29]),t(n,[2,31]),t(k,[2,25])],defaultActions:{5:[2,40],6:[2,1],33:[2,43],42:[2,42]},parseError:function(R,A){if(A.recoverable)this.trace(R);else{var L=new Error(R);throw L.hash=A,L}},parse:function(R){var A=this,L=[0],v=[],B=[null],w=[],D=this.table,N="",z=0,X=0,ct=2,J=1,Y=w.slice.call(arguments,1),$=Object.create(this.lexer),lt={yy:{}};for(var ut in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ut)&&(lt.yy[ut]=this.yy[ut]);$.setInput(R,lt.yy),lt.yy.lexer=$,lt.yy.parser=this,typeof $.yylloc>"u"&&($.yylloc={});var W=$.yylloc;w.push(W);var tt=$.options&&$.options.ranges;typeof lt.yy.parseError=="function"?this.parseError=lt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function K(){var at;return at=v.pop()||$.lex()||J,typeof at!="number"&&(at instanceof Array&&(v=at,at=v.pop()),at=A.symbols_[at]||at),at}for(var it,Z,V,Q,q={},U,F,j,P;;){if(Z=L[L.length-1],this.defaultActions[Z]?V=this.defaultActions[Z]:((it===null||typeof it>"u")&&(it=K()),V=D[Z]&&D[Z][it]),typeof V>"u"||!V.length||!V[0]){var et="";P=[];for(U in D[Z])this.terminals_[U]&&U>ct&&P.push("'"+this.terminals_[U]+"'");$.showPosition?et="Parse error on line "+(z+1)+`:
+`+$.showPosition()+`
+Expecting `+P.join(", ")+", got '"+(this.terminals_[it]||it)+"'":et="Parse error on line "+(z+1)+": Unexpected "+(it==J?"end of input":"'"+(this.terminals_[it]||it)+"'"),this.parseError(et,{text:$.match,token:this.terminals_[it]||it,line:$.yylineno,loc:W,expected:P})}if(V[0]instanceof Array&&V.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Z+", token: "+it);switch(V[0]){case 1:L.push(it),B.push($.yytext),w.push($.yylloc),L.push(V[1]),it=null,X=$.yyleng,N=$.yytext,z=$.yylineno,W=$.yylloc;break;case 2:if(F=this.productions_[V[1]][1],q.$=B[B.length-F],q._$={first_line:w[w.length-(F||1)].first_line,last_line:w[w.length-1].last_line,first_column:w[w.length-(F||1)].first_column,last_column:w[w.length-1].last_column},tt&&(q._$.range=[w[w.length-(F||1)].range[0],w[w.length-1].range[1]]),Q=this.performAction.apply(q,[N,X,z,lt.yy,V[1],B,w].concat(Y)),typeof Q<"u")return Q;F&&(L=L.slice(0,-1*F*2),B=B.slice(0,-1*F),w=w.slice(0,-1*F)),L.push(this.productions_[V[1]][0]),B.push(q.$),w.push(q._$),j=D[L[L.length-2]][L[L.length-1]],L.push(j);break;case 3:return!0}}return!0}},C=function(){var S={EOF:1,parseError:function(A,L){if(this.yy.parser)this.yy.parser.parseError(A,L);else throw new Error(A)},setInput:function(R,A){return this.yy=A||this.yy||{},this._input=R,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var R=this._input[0];this.yytext+=R,this.yyleng++,this.offset++,this.match+=R,this.matched+=R;var A=R.match(/(?:\r\n?|\n).*/g);return A?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),R},unput:function(R){var A=R.length,L=R.split(/(?:\r\n?|\n)/g);this._input=R+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-A),this.offset-=A;var v=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),L.length-1&&(this.yylineno-=L.length-1);var B=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:L?(L.length===v.length?this.yylloc.first_column:0)+v[v.length-L.length].length-L[0].length:this.yylloc.first_column-A},this.options.ranges&&(this.yylloc.range=[B[0],B[0]+this.yyleng-A]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(R){this.unput(this.match.slice(R))},pastInput:function(){var R=this.matched.substr(0,this.matched.length-this.match.length);return(R.length>20?"...":"")+R.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var R=this.match;return R.length<20&&(R+=this._input.substr(0,20-R.length)),(R.substr(0,20)+(R.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var R=this.pastInput(),A=new Array(R.length+1).join("-");return R+this.upcomingInput()+`
+`+A+"^"},test_match:function(R,A){var L,v,B;if(this.options.backtrack_lexer&&(B={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(B.yylloc.range=this.yylloc.range.slice(0))),v=R[0].match(/(?:\r\n?|\n).*/g),v&&(this.yylineno+=v.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:v?v[v.length-1].length-v[v.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+R[0].length},this.yytext+=R[0],this.match+=R[0],this.matches=R,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(R[0].length),this.matched+=R[0],L=this.performAction.call(this,this.yy,this,A,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),L)return L;if(this._backtrack){for(var w in B)this[w]=B[w];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var R,A,L,v;this._more||(this.yytext="",this.match="");for(var B=this._currentRules(),w=0;w<B.length;w++)if(L=this._input.match(this.rules[B[w]]),L&&(!A||L[0].length>A[0].length)){if(A=L,v=w,this.options.backtrack_lexer){if(R=this.test_match(L,B[w]),R!==!1)return R;if(this._backtrack){A=!1;continue}else return!1}else if(!this.options.flex)break}return A?(R=this.test_match(A,B[v]),R!==!1?R:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var A=this.next();return A||this.lex()},begin:function(A){this.conditionStack.push(A)},popState:function(){var A=this.conditionStack.length-1;return A>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(A){return A=this.conditionStack.length-1-Math.abs(A||0),A>=0?this.conditionStack[A]:"INITIAL"},pushState:function(A){this.begin(A)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(A,L,v,B){switch(v){case 0:return this.begin("open_directive"),39;case 1:return this.begin("type_directive"),40;case 2:return this.popState(),this.begin("arg_directive"),32;case 3:return this.popState(),this.popState(),42;case 4:return 41;case 5:return this.begin("acc_title"),20;case 6:return this.popState(),"acc_title_value";case 7:return this.begin("acc_descr"),22;case 8:return this.popState(),"acc_descr_value";case 9:this.begin("acc_descr_multiline");break;case 10:this.popState();break;case 11:return"acc_descr_multiline_value";case 12:break;case 13:break;case 14:break;case 15:return 11;case 16:break;case 17:break;case 18:break;case 19:this.begin("href");break;case 20:this.popState();break;case 21:return 37;case 22:this.begin("callbackname");break;case 23:this.popState();break;case 24:this.popState(),this.begin("callbackargs");break;case 25:return 35;case 26:this.popState();break;case 27:return 36;case 28:this.begin("click");break;case 29:this.popState();break;case 30:return 34;case 31:return 5;case 32:return 12;case 33:return 13;case 34:return 14;case 35:return 15;case 36:return 17;case 37:return 16;case 38:return 18;case 39:return"date";case 40:return 19;case 41:return"accDescription";case 42:return 25;case 43:return 27;case 44:return 28;case 45:return 32;case 46:return 7;case 47:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:includes\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accDescription\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[10,11],inclusive:!1},acc_descr:{rules:[8],inclusive:!1},acc_title:{rules:[6],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[26,27],inclusive:!1},callbackname:{rules:[23,24,25],inclusive:!1},href:{rules:[20,21],inclusive:!1},click:{rules:[29,30],inclusive:!1},INITIAL:{rules:[0,5,7,9,12,13,14,15,16,17,18,19,22,28,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],inclusive:!0}}};return S}();T.lexer=C;function M(){this.yy={}}return M.prototype=T,T.Parser=M,new M}();M4.parser=M4;const Snt=t=>t.match(/^\s*gantt/)!==null;let zi="",L4="",R4="",au=[],su=[],I4={},N4=[],a0=[],sl="";const $M=["active","done","crit","milestone"];let s0=[],ou=!1,B4=!1,D4=0;const Ant=function(t,e,r){Xe.parseDirective(this,t,e,r)},Mnt=function(){N4=[],a0=[],sl="",s0=[],o0=0,F4=void 0,l0=void 0,yr=[],zi="",L4="",R4="",au=[],su=[],ou=!1,B4=!1,D4=0,I4={},ci()},Lnt=function(t){L4=t},Rnt=function(){return L4},Int=function(t){R4=t},Nnt=function(){return R4},Bnt=function(t){zi=t},Dnt=function(){ou=!0},Ont=function(){return ou},Fnt=function(){B4=!0},Pnt=function(){return B4},qnt=function(){return zi},Vnt=function(t){au=t.toLowerCase().split(/[\s,]+/)},znt=function(){return au},Ynt=function(t){su=t.toLowerCase().split(/[\s,]+/)},Unt=function(){return su},Wnt=function(){return I4},Hnt=function(t){sl=t,N4.push(t)},Gnt=function(){return N4},jnt=function(){let t=tL();const e=10;let r=0;for(;!t&&r<e;)t=tL(),r++;return a0=yr,a0},XM=function(t,e,r,n){return n.indexOf(t.format(e.trim()))>=0?!1:t.isoWeekday()>=6&&r.indexOf("weekends")>=0||r.indexOf(t.format("dddd").toLowerCase())>=0?!0:r.indexOf(t.format(e.trim()))>=0},KM=function(t,e,r,n){if(!r.length||t.manualEndTime)return;let i=Xn(t.startTime,e,!0);i.add(1,"d");let a=Xn(t.endTime,e,!0),s=$nt(i,a,e,r,n);t.endTime=a.toDate(),t.renderEndTime=s},$nt=function(t,e,r,n,i){let a=!1,s=null;for(;t<=e;)a||(s=e.toDate()),a=XM(t,r,n,i),a&&e.add(1,"d"),t.add(1,"d");return s},O4=function(t,e,r){r=r.trim();const i=/^after\s+([\d\w- ]+)/.exec(r.trim());if(i!==null){let s=null;if(i[1].split(" ").forEach(function(o){let l=ll(o);typeof l<"u"&&(s?l.endTime>s.endTime&&(s=l):s=l)}),s)return s.endTime;{const o=new Date;return o.setHours(0,0,0,0),o}}let a=Xn(r,e.trim(),!0);if(a.isValid())return a.toDate();{H.debug("Invalid date:"+r),H.debug("With date format:"+e.trim());const s=new Date(r);if(typeof s>"u"||isNaN(s.getTime()))throw new Error("Invalid date:"+r);return s}},ZM=function(t){const e=/^(\d+(?:\.\d+)?)([yMwdhms]|ms)$/.exec(t.trim());return e!==null?Xn.duration(Number.parseFloat(e[1]),e[2]):Xn.duration.invalid()},QM=function(t,e,r,n){n=n||!1,r=r.trim();let i=Xn(r,e.trim(),!0);if(i.isValid())return n&&i.add(1,"d"),i.toDate();const a=Xn(t),s=ZM(r);return s.isValid()&&a.add(s),a.toDate()};let o0=0;const ol=function(t){return typeof t>"u"?(o0=o0+1,"task"+o0):t},Xnt=function(t,e){let r;e.substr(0,1)===":"?r=e.substr(1,e.length):r=e;const n=r.split(","),i={};nL(n,i,$M);for(let s=0;s<n.length;s++)n[s]=n[s].trim();let a="";switch(n.length){case 1:i.id=ol(),i.startTime=t.endTime,a=n[0];break;case 2:i.id=ol(),i.startTime=O4(void 0,zi,n[0]),a=n[1];break;case 3:i.id=ol(n[0]),i.startTime=O4(void 0,zi,n[1]),a=n[2];break}return a&&(i.endTime=QM(i.startTime,zi,a,ou),i.manualEndTime=Xn(a,"YYYY-MM-DD",!0).isValid(),KM(i,zi,su,au)),i},Knt=function(t,e){let r;e.substr(0,1)===":"?r=e.substr(1,e.length):r=e;const n=r.split(","),i={};nL(n,i,$M);for(let a=0;a<n.length;a++)n[a]=n[a].trim();switch(n.length){case 1:i.id=ol(),i.startTime={type:"prevTaskEnd",id:t},i.endTime={data:n[0]};break;case 2:i.id=ol(),i.startTime={type:"getStartDate",startData:n[0]},i.endTime={data:n[1]};break;case 3:i.id=ol(n[0]),i.startTime={type:"getStartDate",startData:n[1]},i.endTime={data:n[2]};break}return i};let F4,l0,yr=[];const JM={},Znt=function(t,e){const r={section:sl,type:sl,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},n=Knt(l0,e);r.raw.startTime=n.startTime,r.raw.endTime=n.endTime,r.id=n.id,r.prevTaskId=l0,r.active=n.active,r.done=n.done,r.crit=n.crit,r.milestone=n.milestone,r.order=D4,D4++;const i=yr.push(r);l0=r.id,JM[r.id]=i-1},ll=function(t){const e=JM[t];return yr[e]},Qnt=function(t,e){const r={section:sl,type:sl,description:t,task:t,classes:[]},n=Xnt(F4,e);r.startTime=n.startTime,r.endTime=n.endTime,r.id=n.id,r.active=n.active,r.done=n.done,r.crit=n.crit,r.milestone=n.milestone,F4=r,a0.push(r)},tL=function(){const t=function(r){const n=yr[r];let i="";switch(yr[r].raw.startTime.type){case"prevTaskEnd":{const a=ll(n.prevTaskId);n.startTime=a.endTime;break}case"getStartDate":i=O4(void 0,zi,yr[r].raw.startTime.startData),i&&(yr[r].startTime=i);break}return yr[r].startTime&&(yr[r].endTime=QM(yr[r].startTime,zi,yr[r].raw.endTime.data,ou),yr[r].endTime&&(yr[r].processed=!0,yr[r].manualEndTime=Xn(yr[r].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),KM(yr[r],zi,su,au))),yr[r].processed};let e=!0;for(let r=0;r<yr.length;r++)t(r),e=e&&yr[r].processed;return e},Jnt=function(t,e){let r=e;nt().securityLevel!=="loose"&&(r=ki(e)),t.split(",").forEach(function(n){typeof ll(n)<"u"&&(rL(n,()=>{window.open(r,"_self")}),I4[n]=r)}),eL(t,"clickable")},eL=function(t,e){t.split(",").forEach(function(r){let n=ll(r);typeof n<"u"&&n.classes.push(e)})},tit=function(t,e,r){if(nt().securityLevel!=="loose"||typeof e>"u")return;let n=[];if(typeof r=="string"){n=r.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(let a=0;a<n.length;a++){let s=n[a].trim();s.charAt(0)==='"'&&s.charAt(s.length-1)==='"'&&(s=s.substr(1,s.length-2)),n[a]=s}}n.length===0&&n.push(t),typeof ll(t)<"u"&&rL(t,()=>{Se.runFunc(e,...n)})},rL=function(t,e){s0.push(function(){const r=document.querySelector(`[id="${t}"]`);r!==null&&r.addEventListener("click",function(){e()})}),s0.push(function(){const r=document.querySelector(`[id="${t}-text"]`);r!==null&&r.addEventListener("click",function(){e()})})},P4={parseDirective:Ant,getConfig:()=>nt().gantt,clear:Mnt,setDateFormat:Bnt,getDateFormat:qnt,enableInclusiveEndDates:Dnt,endDatesAreInclusive:Ont,enableTopAxis:Fnt,topAxisEnabled:Pnt,setAxisFormat:Lnt,getAxisFormat:Rnt,setTodayMarker:Int,getTodayMarker:Nnt,setAccTitle:Yn,getAccTitle:ui,setDiagramTitle:c1,getDiagramTitle:u1,setAccDescription:hi,getAccDescription:fi,addSection:Hnt,getSections:Gnt,getTasks:jnt,addTask:Znt,findTaskById:ll,addTaskOrg:Qnt,setIncludes:Vnt,getIncludes:znt,setExcludes:Ynt,getExcludes:Unt,setClickEvent:function(t,e,r){t.split(",").forEach(function(n){tit(n,e,r)}),eL(t,"clickable")},setLink:Jnt,getLinks:Wnt,bindFunctions:function(t){s0.forEach(function(e){e(t)})},parseDuration:ZM,isInvalidDate:XM};function nL(t,e,r){let n=!0;for(;n;)n=!1,r.forEach(function(i){const a="^\\s*"+i+"\\s*$",s=new RegExp(a);t[0].match(s)&&(e[i]=!0,t.shift(1),n=!0)})}const eit=function(){H.debug("Something is calling, setConf, remove the call")};let pa;const rit={setConf:eit,draw:function(t,e,r,n){const i=nt().gantt,a=nt().securityLevel;let s;a==="sandbox"&&(s=St("#i"+e));const o=St(a==="sandbox"?s.nodes()[0].contentDocument.body:"body"),l=a==="sandbox"?s.nodes()[0].contentDocument:document,u=l.getElementById(e);pa=u.parentElement.offsetWidth,typeof pa>"u"&&(pa=1200),typeof i.useWidth<"u"&&(pa=i.useWidth);const h=n.db.getTasks(),d=h.length*(i.barHeight+i.barGap)+2*i.topPadding;u.setAttribute("viewBox","0 0 "+pa+" "+d);const f=o.select(`[id="${e}"]`),p=X8().domain([Tl(h,function(L){return L.startTime}),lo(h,function(L){return L.endTime})]).rangeRound([0,pa-i.leftPadding-i.rightPadding]);let m=[];for(let L=0;L<h.length;L++)m.push(h[L].type);const _=m;m=S(m);function y(L,v){const B=L.startTime,w=v.startTime;let D=0;return B>w?D=1:B<w&&(D=-1),D}h.sort(y),b(h,pa,d),li(f,d,pa,i.useMaxWidth),f.append("text").text(n.db.getDiagramTitle()).attr("x",pa/2).attr("y",i.titleTopMargin).attr("class","titleText"),bn(n.db,f,e);function b(L,v,B){const w=i.barHeight,D=w+i.barGap,N=i.topPadding,z=i.leftPadding,X=sp().domain([0,m.length]).range(["#00B9FA","#F95002"]).interpolate($5);k(D,N,z,v,B,L,n.db.getExcludes(),n.db.getIncludes()),T(z,N,v,B),x(L,D,N,z,w,X,v),C(D,N),M(z,N,v,B)}function x(L,v,B,w,D,N,z){f.append("g").selectAll("rect").data(L).enter().append("rect").attr("x",0).attr("y",function(Y,$){return $=Y.order,$*v+B-2}).attr("width",function(){return z-i.rightPadding/2}).attr("height",v).attr("class",function(Y){for(let $=0;$<m.length;$++)if(Y.type===m[$])return"section section"+$%i.numberSectionStyles;return"section section0"});const X=f.append("g").selectAll("rect").data(L).enter(),ct=n.db.getLinks();if(X.append("rect").attr("id",function(Y){return Y.id}).attr("rx",3).attr("ry",3).attr("x",function(Y){return Y.milestone?p(Y.startTime)+w+.5*(p(Y.endTime)-p(Y.startTime))-.5*D:p(Y.startTime)+w}).attr("y",function(Y,$){return $=Y.order,$*v+B}).attr("width",function(Y){return Y.milestone?D:p(Y.renderEndTime||Y.endTime)-p(Y.startTime)}).attr("height",D).attr("transform-origin",function(Y,$){return $=Y.order,(p(Y.startTime)+w+.5*(p(Y.endTime)-p(Y.startTime))).toString()+"px "+($*v+B+.5*D).toString()+"px"}).attr("class",function(Y){const $="task";let lt="";Y.classes.length>0&&(lt=Y.classes.join(" "));let ut=0;for(let tt=0;tt<m.length;tt++)Y.type===m[tt]&&(ut=tt%i.numberSectionStyles);let W="";return Y.active?Y.crit?W+=" activeCrit":W=" active":Y.done?Y.crit?W=" doneCrit":W=" done":Y.crit&&(W+=" crit"),W.length===0&&(W=" task"),Y.milestone&&(W=" milestone "+W),W+=ut,W+=" "+lt,$+W}),X.append("text").attr("id",function(Y){return Y.id+"-text"}).text(function(Y){return Y.task}).attr("font-size",i.fontSize).attr("x",function(Y){let $=p(Y.startTime),lt=p(Y.renderEndTime||Y.endTime);Y.milestone&&($+=.5*(p(Y.endTime)-p(Y.startTime))-.5*D),Y.milestone&&(lt=$+D);const ut=this.getBBox().width;return ut>lt-$?lt+ut+1.5*i.leftPadding>z?$+w-5:lt+w+5:(lt-$)/2+$+w}).attr("y",function(Y,$){return $=Y.order,$*v+i.barHeight/2+(i.fontSize/2-2)+B}).attr("text-height",D).attr("class",function(Y){const $=p(Y.startTime);let lt=p(Y.endTime);Y.milestone&&(lt=$+D);const ut=this.getBBox().width;let W="";Y.classes.length>0&&(W=Y.classes.join(" "));let tt=0;for(let it=0;it<m.length;it++)Y.type===m[it]&&(tt=it%i.numberSectionStyles);let K="";return Y.active&&(Y.crit?K="activeCritText"+tt:K="activeText"+tt),Y.done?Y.crit?K=K+" doneCritText"+tt:K=K+" doneText"+tt:Y.crit&&(K=K+" critText"+tt),Y.milestone&&(K+=" milestoneText"),ut>lt-$?lt+ut+1.5*i.leftPadding>z?W+" taskTextOutsideLeft taskTextOutside"+tt+" "+K:W+" taskTextOutsideRight taskTextOutside"+tt+" "+K+" width-"+ut:W+" taskText taskText"+tt+" "+K+" width-"+ut}),nt().securityLevel==="sandbox"){let Y;Y=St("#i"+e);const $=Y.nodes()[0].contentDocument;X.filter(function(lt){return typeof ct[lt.id]<"u"}).each(function(lt){var ut=$.querySelector("#"+lt.id),W=$.querySelector("#"+lt.id+"-text");const tt=ut.parentNode;var K=$.createElement("a");K.setAttribute("xlink:href",ct[lt.id]),K.setAttribute("target","_top"),tt.appendChild(K),K.appendChild(ut),K.appendChild(W)})}}function k(L,v,B,w,D,N,z,X){const ct=N.reduce((tt,{startTime:K})=>tt?Math.min(tt,K):K,0),J=N.reduce((tt,{endTime:K})=>tt?Math.max(tt,K):K,0),Y=n.db.getDateFormat();if(!ct||!J)return;const $=[];let lt=null,ut=Xn(ct);for(;ut.valueOf()<=J;)n.db.isInvalidDate(ut,Y,z,X)?lt?lt.end=ut.clone():lt={start:ut.clone(),end:ut.clone()}:lt&&($.push(lt),lt=null),ut.add(1,"d");f.append("g").selectAll("rect").data($).enter().append("rect").attr("id",function(tt){return"exclude-"+tt.start.format("YYYY-MM-DD")}).attr("x",function(tt){return p(tt.start)+B}).attr("y",i.gridLineStartPadding).attr("width",function(tt){const K=tt.end.clone().add(1,"day");return p(K)-p(tt.start)}).attr("height",D-v-i.gridLineStartPadding).attr("transform-origin",function(tt,K){return(p(tt.start)+B+.5*(p(tt.end)-p(tt.start))).toString()+"px "+(K*L+.5*D).toString()+"px"}).attr("class","exclude-range")}function T(L,v,B,w){let D=$_(p).tickSize(-w+v+i.gridLineStartPadding).tickFormat(vc(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));if(f.append("g").attr("class","grid").attr("transform","translate("+L+", "+(w-50)+")").call(D).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),n.db.topAxisEnabled()||i.topAxis){let N=j_(p).tickSize(-w+v+i.gridLineStartPadding).tickFormat(vc(n.db.getAxisFormat()||i.axisFormat||"%Y-%m-%d"));f.append("g").attr("class","grid").attr("transform","translate("+L+", "+v+")").call(N).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10)}}function C(L,v){const B=[];let w=0;for(let D=0;D<m.length;D++)B[D]=[m[D],A(m[D],_)];f.append("g").selectAll("text").data(B).enter().append(function(D){const N=D[0].split(pe.lineBreakRegex),z=-(N.length-1)/2,X=l.createElementNS("http://www.w3.org/2000/svg","text");X.setAttribute("dy",z+"em");for(let ct=0;ct<N.length;ct++){const J=l.createElementNS("http://www.w3.org/2000/svg","tspan");J.setAttribute("alignment-baseline","central"),J.setAttribute("x","10"),ct>0&&J.setAttribute("dy","1em"),J.textContent=N[ct],X.appendChild(J)}return X}).attr("x",10).attr("y",function(D,N){if(N>0)for(let z=0;z<N;z++)return w+=B[N-1][1],D[1]*L/2+w*L+v;else return D[1]*L/2+v}).attr("font-size",i.sectionFontSize).attr("font-size",i.sectionFontSize).attr("class",function(D){for(let N=0;N<m.length;N++)if(D[0]===m[N])return"sectionTitle sectionTitle"+N%i.numberSectionStyles;return"sectionTitle"})}function M(L,v,B,w){const D=n.db.getTodayMarker();if(D==="off")return;const N=f.append("g").attr("class","today"),z=new Date,X=N.append("line");X.attr("x1",p(z)+L).attr("x2",p(z)+L).attr("y1",i.titleTopMargin).attr("y2",w-i.titleTopMargin).attr("class","today"),D!==""&&X.attr("style",D.replace(/,/g,";"))}function S(L){const v={},B=[];for(let w=0,D=L.length;w<D;++w)Object.prototype.hasOwnProperty.call(v,L[w])||(v[L[w]]=!0,B.push(L[w]));return B}function R(L){let v=L.length;const B={};for(;v;)B[L[--v]]=(B[L[v]]||0)+1;return B}function A(L,v){return R(v)[L]||0}}};var q4=function(){var t=function(a,s,o,l){for(o=o||{},l=a.length;l--;o[a[l]]=s);return o},e=[6,9,10],r={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(s,o,l,u,h,d,f){switch(d.length-1,h){case 1:return u;case 4:break;case 6:u.setInfo(!0);break}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(s,o){if(o.recoverable)this.trace(s);else{var l=new Error(s);throw l.hash=o,l}},parse:function(s){var o=this,l=[0],u=[],h=[null],d=[],f=this.table,p="",m=0,_=0,y=2,b=1,x=d.slice.call(arguments,1),k=Object.create(this.lexer),T={yy:{}};for(var C in this.yy)Object.prototype.hasOwnProperty.call(this.yy,C)&&(T.yy[C]=this.yy[C]);k.setInput(s,T.yy),T.yy.lexer=k,T.yy.parser=this,typeof k.yylloc>"u"&&(k.yylloc={});var M=k.yylloc;d.push(M);var S=k.options&&k.options.ranges;typeof T.yy.parseError=="function"?this.parseError=T.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function R(){var J;return J=u.pop()||k.lex()||b,typeof J!="number"&&(J instanceof Array&&(u=J,J=u.pop()),J=o.symbols_[J]||J),J}for(var A,L,v,B,w={},D,N,z,X;;){if(L=l[l.length-1],this.defaultActions[L]?v=this.defaultActions[L]:((A===null||typeof A>"u")&&(A=R()),v=f[L]&&f[L][A]),typeof v>"u"||!v.length||!v[0]){var ct="";X=[];for(D in f[L])this.terminals_[D]&&D>y&&X.push("'"+this.terminals_[D]+"'");k.showPosition?ct="Parse error on line "+(m+1)+`:
+`+k.showPosition()+`
+Expecting `+X.join(", ")+", got '"+(this.terminals_[A]||A)+"'":ct="Parse error on line "+(m+1)+": Unexpected "+(A==b?"end of input":"'"+(this.terminals_[A]||A)+"'"),this.parseError(ct,{text:k.match,token:this.terminals_[A]||A,line:k.yylineno,loc:M,expected:X})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+L+", token: "+A);switch(v[0]){case 1:l.push(A),h.push(k.yytext),d.push(k.yylloc),l.push(v[1]),A=null,_=k.yyleng,p=k.yytext,m=k.yylineno,M=k.yylloc;break;case 2:if(N=this.productions_[v[1]][1],w.$=h[h.length-N],w._$={first_line:d[d.length-(N||1)].first_line,last_line:d[d.length-1].last_line,first_column:d[d.length-(N||1)].first_column,last_column:d[d.length-1].last_column},S&&(w._$.range=[d[d.length-(N||1)].range[0],d[d.length-1].range[1]]),B=this.performAction.apply(w,[p,_,m,T.yy,v[1],h,d].concat(x)),typeof B<"u")return B;N&&(l=l.slice(0,-1*N*2),h=h.slice(0,-1*N),d=d.slice(0,-1*N)),l.push(this.productions_[v[1]][0]),h.push(w.$),d.push(w._$),z=f[l[l.length-2]][l[l.length-1]],l.push(z);break;case 3:return!0}}return!0}},n=function(){var a={EOF:1,parseError:function(o,l){if(this.yy.parser)this.yy.parser.parseError(o,l);else throw new Error(o)},setInput:function(s,o){return this.yy=o||this.yy||{},this._input=s,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var s=this._input[0];this.yytext+=s,this.yyleng++,this.offset++,this.match+=s,this.matched+=s;var o=s.match(/(?:\r\n?|\n).*/g);return o?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),s},unput:function(s){var o=s.length,l=s.split(/(?:\r\n?|\n)/g);this._input=s+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-o),this.offset-=o;var u=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),l.length-1&&(this.yylineno-=l.length-1);var h=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:l?(l.length===u.length?this.yylloc.first_column:0)+u[u.length-l.length].length-l[0].length:this.yylloc.first_column-o},this.options.ranges&&(this.yylloc.range=[h[0],h[0]+this.yyleng-o]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(s){this.unput(this.match.slice(s))},pastInput:function(){var s=this.matched.substr(0,this.matched.length-this.match.length);return(s.length>20?"...":"")+s.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var s=this.match;return s.length<20&&(s+=this._input.substr(0,20-s.length)),(s.substr(0,20)+(s.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var s=this.pastInput(),o=new Array(s.length+1).join("-");return s+this.upcomingInput()+`
+`+o+"^"},test_match:function(s,o){var l,u,h;if(this.options.backtrack_lexer&&(h={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(h.yylloc.range=this.yylloc.range.slice(0))),u=s[0].match(/(?:\r\n?|\n).*/g),u&&(this.yylineno+=u.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:u?u[u.length-1].length-u[u.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+s[0].length},this.yytext+=s[0],this.match+=s[0],this.matches=s,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(s[0].length),this.matched+=s[0],l=this.performAction.call(this,this.yy,this,o,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),l)return l;if(this._backtrack){for(var d in h)this[d]=h[d];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var s,o,l,u;this._more||(this.yytext="",this.match="");for(var h=this._currentRules(),d=0;d<h.length;d++)if(l=this._input.match(this.rules[h[d]]),l&&(!o||l[0].length>o[0].length)){if(o=l,u=d,this.options.backtrack_lexer){if(s=this.test_match(l,h[d]),s!==!1)return s;if(this._backtrack){o=!1;continue}else return!1}else if(!this.options.flex)break}return o?(s=this.test_match(o,h[u]),s!==!1?s:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var o=this.next();return o||this.lex()},begin:function(o){this.conditionStack.push(o)},popState:function(){var o=this.conditionStack.length-1;return o>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(o){return o=this.conditionStack.length-1-Math.abs(o||0),o>=0?this.conditionStack[o]:"INITIAL"},pushState:function(o){this.begin(o)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(o,l,u,h){switch(u){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};return a}();r.lexer=n;function i(){this.yy={}}return i.prototype=r,r.Parser=i,new i}();q4.parser=q4;var iL="",aL=!1;const nit={setMessage:t=>{H.debug("Setting message to: "+t),iL=t},getMessage:()=>iL,setInfo:t=>{aL=t},getInfo:()=>aL,clear:ci},iit={draw:(t,e,r,n)=>{try{H.debug(`Rendering info diagram
+`+t);const i=nt().securityLevel;let a;i==="sandbox"&&(a=St("#i"+e));const o=St(i==="sandbox"?a.nodes()[0].contentDocument.body:"body").select("#"+e);o.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+r),o.attr("height",100),o.attr("width",400)}catch(i){H.error("Error while rendering info diagram"),H.error(i.message)}}},ait=t=>t.match(/^\s*info/)!==null;var V4=function(){var t=function(M,S,R,A){for(R=R||{},A=M.length;A--;R[M[A]]=S);return R},e=[1,4],r=[1,5],n=[1,6],i=[1,7],a=[1,9],s=[1,11,13,15,17,19,20,26,27,28,29],o=[2,5],l=[1,6,11,13,15,17,19,20,26,27,28,29],u=[26,27,28],h=[2,8],d=[1,18],f=[1,19],p=[1,20],m=[1,21],_=[1,22],y=[1,23],b=[1,28],x=[6,26,27,28,29],k={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,acc_title:15,acc_title_value:16,acc_descr:17,acc_descr_value:18,acc_descr_multiline_value:19,section:20,openDirective:21,typeDirective:22,closeDirective:23,":":24,argDirective:25,NEWLINE:26,";":27,EOF:28,open_directive:29,type_directive:30,arg_directive:31,close_directive:32,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",15:"acc_title",16:"acc_title_value",17:"acc_descr",18:"acc_descr_value",19:"acc_descr_multiline_value",20:"section",24:":",26:"NEWLINE",27:";",28:"EOF",29:"open_directive",30:"type_directive",31:"arg_directive",32:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[21,1],[22,1],[25,1],[23,1]],performAction:function(S,R,A,L,v,B,w){var D=B.length-1;switch(v){case 4:L.setShowData(!0);break;case 7:this.$=B[D-1];break;case 9:L.addSection(B[D-1],L.cleanupValue(B[D]));break;case 10:this.$=B[D].trim(),L.setDiagramTitle(this.$);break;case 11:this.$=B[D].trim(),L.setAccTitle(this.$);break;case 12:case 13:this.$=B[D].trim(),L.setAccDescription(this.$);break;case 14:L.addSection(B[D].substr(8)),this.$=B[D].substr(8);break;case 21:L.parseDirective("%%{","open_directive");break;case 22:L.parseDirective(B[D],"type_directive");break;case 23:B[D]=B[D].trim().replace(/'/g,'"'),L.parseDirective(B[D],"arg_directive");break;case 24:L.parseDirective("}%%","close_directive","pie");break}},table:[{3:1,4:2,5:3,6:e,21:8,26:r,27:n,28:i,29:a},{1:[3]},{3:10,4:2,5:3,6:e,21:8,26:r,27:n,28:i,29:a},{3:11,4:2,5:3,6:e,21:8,26:r,27:n,28:i,29:a},t(s,o,{7:12,8:[1,13]}),t(l,[2,18]),t(l,[2,19]),t(l,[2,20]),{22:14,30:[1,15]},{30:[2,21]},{1:[2,1]},{1:[2,2]},t(u,h,{21:8,9:16,10:17,5:24,1:[2,3],11:d,13:f,15:p,17:m,19:_,20:y,29:a}),t(s,o,{7:25}),{23:26,24:[1,27],32:b},t([24,32],[2,22]),t(s,[2,6]),{4:29,26:r,27:n,28:i},{12:[1,30]},{14:[1,31]},{16:[1,32]},{18:[1,33]},t(u,[2,13]),t(u,[2,14]),t(u,[2,15]),t(u,h,{21:8,9:16,10:17,5:24,1:[2,4],11:d,13:f,15:p,17:m,19:_,20:y,29:a}),t(x,[2,16]),{25:34,31:[1,35]},t(x,[2,24]),t(s,[2,7]),t(u,[2,9]),t(u,[2,10]),t(u,[2,11]),t(u,[2,12]),{23:36,32:b},{32:[2,23]},t(x,[2,17])],defaultActions:{9:[2,21],10:[2,1],11:[2,2],35:[2,23]},parseError:function(S,R){if(R.recoverable)this.trace(S);else{var A=new Error(S);throw A.hash=R,A}},parse:function(S){var R=this,A=[0],L=[],v=[null],B=[],w=this.table,D="",N=0,z=0,X=2,ct=1,J=B.slice.call(arguments,1),Y=Object.create(this.lexer),$={yy:{}};for(var lt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,lt)&&($.yy[lt]=this.yy[lt]);Y.setInput(S,$.yy),$.yy.lexer=Y,$.yy.parser=this,typeof Y.yylloc>"u"&&(Y.yylloc={});var ut=Y.yylloc;B.push(ut);var W=Y.options&&Y.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function tt(){var et;return et=L.pop()||Y.lex()||ct,typeof et!="number"&&(et instanceof Array&&(L=et,et=L.pop()),et=R.symbols_[et]||et),et}for(var K,it,Z,V,Q={},q,U,F,j;;){if(it=A[A.length-1],this.defaultActions[it]?Z=this.defaultActions[it]:((K===null||typeof K>"u")&&(K=tt()),Z=w[it]&&w[it][K]),typeof Z>"u"||!Z.length||!Z[0]){var P="";j=[];for(q in w[it])this.terminals_[q]&&q>X&&j.push("'"+this.terminals_[q]+"'");Y.showPosition?P="Parse error on line "+(N+1)+`:
+`+Y.showPosition()+`
+Expecting `+j.join(", ")+", got '"+(this.terminals_[K]||K)+"'":P="Parse error on line "+(N+1)+": Unexpected "+(K==ct?"end of input":"'"+(this.terminals_[K]||K)+"'"),this.parseError(P,{text:Y.match,token:this.terminals_[K]||K,line:Y.yylineno,loc:ut,expected:j})}if(Z[0]instanceof Array&&Z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+it+", token: "+K);switch(Z[0]){case 1:A.push(K),v.push(Y.yytext),B.push(Y.yylloc),A.push(Z[1]),K=null,z=Y.yyleng,D=Y.yytext,N=Y.yylineno,ut=Y.yylloc;break;case 2:if(U=this.productions_[Z[1]][1],Q.$=v[v.length-U],Q._$={first_line:B[B.length-(U||1)].first_line,last_line:B[B.length-1].last_line,first_column:B[B.length-(U||1)].first_column,last_column:B[B.length-1].last_column},W&&(Q._$.range=[B[B.length-(U||1)].range[0],B[B.length-1].range[1]]),V=this.performAction.apply(Q,[D,z,N,$.yy,Z[1],v,B].concat(J)),typeof V<"u")return V;U&&(A=A.slice(0,-1*U*2),v=v.slice(0,-1*U),B=B.slice(0,-1*U)),A.push(this.productions_[Z[1]][0]),v.push(Q.$),B.push(Q._$),F=w[A[A.length-2]][A[A.length-1]],A.push(F);break;case 3:return!0}}return!0}},T=function(){var M={EOF:1,parseError:function(R,A){if(this.yy.parser)this.yy.parser.parseError(R,A);else throw new Error(R)},setInput:function(S,R){return this.yy=R||this.yy||{},this._input=S,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var S=this._input[0];this.yytext+=S,this.yyleng++,this.offset++,this.match+=S,this.matched+=S;var R=S.match(/(?:\r\n?|\n).*/g);return R?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),S},unput:function(S){var R=S.length,A=S.split(/(?:\r\n?|\n)/g);this._input=S+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-R),this.offset-=R;var L=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),A.length-1&&(this.yylineno-=A.length-1);var v=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:A?(A.length===L.length?this.yylloc.first_column:0)+L[L.length-A.length].length-A[0].length:this.yylloc.first_column-R},this.options.ranges&&(this.yylloc.range=[v[0],v[0]+this.yyleng-R]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(S){this.unput(this.match.slice(S))},pastInput:function(){var S=this.matched.substr(0,this.matched.length-this.match.length);return(S.length>20?"...":"")+S.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var S=this.match;return S.length<20&&(S+=this._input.substr(0,20-S.length)),(S.substr(0,20)+(S.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var S=this.pastInput(),R=new Array(S.length+1).join("-");return S+this.upcomingInput()+`
+`+R+"^"},test_match:function(S,R){var A,L,v;if(this.options.backtrack_lexer&&(v={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(v.yylloc.range=this.yylloc.range.slice(0))),L=S[0].match(/(?:\r\n?|\n).*/g),L&&(this.yylineno+=L.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:L?L[L.length-1].length-L[L.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+S[0].length},this.yytext+=S[0],this.match+=S[0],this.matches=S,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(S[0].length),this.matched+=S[0],A=this.performAction.call(this,this.yy,this,R,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),A)return A;if(this._backtrack){for(var B in v)this[B]=v[B];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var S,R,A,L;this._more||(this.yytext="",this.match="");for(var v=this._currentRules(),B=0;B<v.length;B++)if(A=this._input.match(this.rules[v[B]]),A&&(!R||A[0].length>R[0].length)){if(R=A,L=B,this.options.backtrack_lexer){if(S=this.test_match(A,v[B]),S!==!1)return S;if(this._backtrack){R=!1;continue}else return!1}else if(!this.options.flex)break}return R?(S=this.test_match(R,v[L]),S!==!1?S:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var R=this.next();return R||this.lex()},begin:function(R){this.conditionStack.push(R)},popState:function(){var R=this.conditionStack.length-1;return R>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(R){return R=this.conditionStack.length-1-Math.abs(R||0),R>=0?this.conditionStack[R]:"INITIAL"},pushState:function(R){this.begin(R)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(R,A,L,v){switch(L){case 0:return this.begin("open_directive"),29;case 1:return this.begin("type_directive"),30;case 2:return this.popState(),this.begin("arg_directive"),24;case 3:return this.popState(),this.popState(),32;case 4:return 31;case 5:break;case 6:break;case 7:return 26;case 8:break;case 9:break;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:return this.begin("acc_title"),15;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),17;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:this.begin("string");break;case 20:this.popState();break;case 21:return"txt";case 22:return 6;case 23:return 8;case 24:return"value";case 25:return 28}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[20,21],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,14,16,19,22,23,24,25],inclusive:!0}}};return M}();k.lexer=T;function C(){this.yy={}}return C.prototype=k,k.Parser=C,new C}();V4.parser=V4;const sit=t=>t.match(/^\s*pie/)!==null;let c0={},z4=!1;const oit={parseDirective:function(t,e,r){Xe.parseDirective(this,t,e,r)},getConfig:()=>nt().pie,addSection:function(t,e){t=pe.sanitizeText(t,nt()),typeof c0[t]>"u"&&(c0[t]=e,H.debug("Added new section :",t))},getSections:()=>c0,cleanupValue:function(t){return t.substring(0,1)===":"&&(t=t.substring(1).trim()),Number(t.trim())},clear:function(){c0={},z4=!1,ci()},setAccTitle:Yn,getAccTitle:ui,setDiagramTitle:c1,getDiagramTitle:u1,setShowData:function(t){z4=t},getShowData:function(){return z4},getAccDescription:fi,setAccDescription:hi};let ga=nt(),ya;const lu=450,lit={draw:(t,e,r,n)=>{try{ga=nt(),H.debug(`Rendering info diagram
+`+t);const b=nt().securityLevel;let x;b==="sandbox"&&(x=St("#i"+e));const k=St(b==="sandbox"?x.nodes()[0].contentDocument.body:"body"),T=b==="sandbox"?x.nodes()[0].contentDocument:document;n.db.clear(),n.parser.parse(t),H.debug("Parsed info diagram");const C=T.getElementById(e);ya=C.parentElement.offsetWidth,typeof ya>"u"&&(ya=1200),typeof ga.useWidth<"u"&&(ya=ga.useWidth),typeof ga.pie.useWidth<"u"&&(ya=ga.pie.useWidth);const M=k.select("#"+e);li(M,lu,ya,ga.pie.useMaxWidth),bn(n.db,M,e),C.setAttribute("viewBox","0 0 "+ya+" "+lu);var i=40,a=18,s=4,o=Math.min(ya,lu)/2-i,l=M.append("g").attr("transform","translate("+ya/2+","+lu/2+")"),u=n.db.getSections(),h=0;Object.keys(u).forEach(function(R){h+=u[R]});const S=ga.themeVariables;var d=[S.pie1,S.pie2,S.pie3,S.pie4,S.pie5,S.pie6,S.pie7,S.pie8,S.pie9,S.pie10,S.pie11,S.pie12],f=nf().range(d),p=B7().value(function(R){return R[1]}),m=p(Object.entries(u)),_=yf().innerRadius(0).outerRadius(o);l.selectAll("mySlices").data(m).enter().append("path").attr("d",_).attr("fill",function(R){return f(R.data[0])}).attr("class","pieCircle"),l.selectAll("mySlices").data(m).enter().append("text").text(function(R){return(R.data[1]/h*100).toFixed(0)+"%"}).attr("transform",function(R){return"translate("+_.centroid(R)+")"}).style("text-anchor","middle").attr("class","slice"),l.append("text").text(n.db.getDiagramTitle()).attr("x",0).attr("y",-(lu-50)/2).attr("class","pieTitleText");var y=l.selectAll(".legend").data(f.domain()).enter().append("g").attr("class","legend").attr("transform",function(R,A){var L=a+s,v=L*f.domain().length/2,B=12*a,w=A*L-v;return"translate("+B+","+w+")"});y.append("rect").attr("width",a).attr("height",a).style("fill",f).style("stroke",f),y.data(m).append("text").attr("x",a+s).attr("y",a-s).text(function(R){return n.db.getShowData()||ga.showData||ga.pie.showData?R.data[0]+" ["+R.data[1]+"]":R.data[0]})}catch(b){H.error("Error while rendering info diagram"),H.error(b)}}};var Y4=function(){var t=function(it,Z,V,Q){for(V=V||{},Q=it.length;Q--;V[it[Q]]=Z);return V},e=[1,3],r=[1,5],n=[1,6],i=[1,7],a=[1,8],s=[5,6,8,14,16,18,19,40,41,42,43,44,45,53,71,72],o=[1,22],l=[2,13],u=[1,26],h=[1,27],d=[1,28],f=[1,29],p=[1,30],m=[1,31],_=[1,24],y=[1,32],b=[1,33],x=[1,36],k=[71,72],T=[5,8,14,16,18,19,40,41,42,43,44,45,53,60,62,71,72],C=[1,56],M=[1,57],S=[1,58],R=[1,59],A=[1,60],L=[1,61],v=[1,62],B=[62,63],w=[1,74],D=[1,70],N=[1,71],z=[1,72],X=[1,73],ct=[1,75],J=[1,79],Y=[1,80],$=[1,77],lt=[1,78],ut=[5,8,14,16,18,19,40,41,42,43,44,45,53,71,72],W={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,acc_title:14,acc_title_value:15,acc_descr:16,acc_descr_value:17,acc_descr_multiline_value:18,open_directive:19,type_directive:20,arg_directive:21,close_directive:22,requirementDef:23,elementDef:24,relationshipDef:25,requirementType:26,requirementName:27,STRUCT_START:28,requirementBody:29,ID:30,COLONSEP:31,id:32,TEXT:33,text:34,RISK:35,riskLevel:36,VERIFYMTHD:37,verifyType:38,STRUCT_STOP:39,REQUIREMENT:40,FUNCTIONAL_REQUIREMENT:41,INTERFACE_REQUIREMENT:42,PERFORMANCE_REQUIREMENT:43,PHYSICAL_REQUIREMENT:44,DESIGN_CONSTRAINT:45,LOW_RISK:46,MED_RISK:47,HIGH_RISK:48,VERIFY_ANALYSIS:49,VERIFY_DEMONSTRATION:50,VERIFY_INSPECTION:51,VERIFY_TEST:52,ELEMENT:53,elementName:54,elementBody:55,TYPE:56,type:57,DOCREF:58,ref:59,END_ARROW_L:60,relationship:61,LINE:62,END_ARROW_R:63,CONTAINS:64,COPIES:65,DERIVES:66,SATISFIES:67,VERIFIES:68,REFINES:69,TRACES:70,unqString:71,qString:72,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"acc_title",15:"acc_title_value",16:"acc_descr",17:"acc_descr_value",18:"acc_descr_multiline_value",19:"open_directive",20:"type_directive",21:"arg_directive",22:"close_directive",28:"STRUCT_START",30:"ID",31:"COLONSEP",33:"TEXT",35:"RISK",37:"VERIFYMTHD",39:"STRUCT_STOP",40:"REQUIREMENT",41:"FUNCTIONAL_REQUIREMENT",42:"INTERFACE_REQUIREMENT",43:"PERFORMANCE_REQUIREMENT",44:"PHYSICAL_REQUIREMENT",45:"DESIGN_CONSTRAINT",46:"LOW_RISK",47:"MED_RISK",48:"HIGH_RISK",49:"VERIFY_ANALYSIS",50:"VERIFY_DEMONSTRATION",51:"VERIFY_INSPECTION",52:"VERIFY_TEST",53:"ELEMENT",56:"TYPE",58:"DOCREF",60:"END_ARROW_L",62:"LINE",63:"END_ARROW_R",64:"CONTAINS",65:"COPIES",66:"DERIVES",67:"SATISFIES",68:"VERIFIES",69:"REFINES",70:"TRACES",71:"unqString",72:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[4,2],[4,2],[4,1],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[23,5],[29,5],[29,5],[29,5],[29,5],[29,2],[29,1],[26,1],[26,1],[26,1],[26,1],[26,1],[26,1],[36,1],[36,1],[36,1],[38,1],[38,1],[38,1],[38,1],[24,5],[55,5],[55,5],[55,2],[55,1],[25,5],[25,5],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[61,1],[27,1],[27,1],[32,1],[32,1],[34,1],[34,1],[54,1],[54,1],[57,1],[57,1],[59,1],[59,1]],performAction:function(Z,V,Q,q,U,F,j){var P=F.length-1;switch(U){case 6:this.$=F[P].trim(),q.setAccTitle(this.$);break;case 7:case 8:this.$=F[P].trim(),q.setAccDescription(this.$);break;case 9:q.parseDirective("%%{","open_directive");break;case 10:q.parseDirective(F[P],"type_directive");break;case 11:F[P]=F[P].trim().replace(/'/g,'"'),q.parseDirective(F[P],"arg_directive");break;case 12:q.parseDirective("}%%","close_directive","pie");break;case 13:this.$=[];break;case 19:q.addRequirement(F[P-3],F[P-4]);break;case 20:q.setNewReqId(F[P-2]);break;case 21:q.setNewReqText(F[P-2]);break;case 22:q.setNewReqRisk(F[P-2]);break;case 23:q.setNewReqVerifyMethod(F[P-2]);break;case 26:this.$=q.RequirementType.REQUIREMENT;break;case 27:this.$=q.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 28:this.$=q.RequirementType.INTERFACE_REQUIREMENT;break;case 29:this.$=q.RequirementType.PERFORMANCE_REQUIREMENT;break;case 30:this.$=q.RequirementType.PHYSICAL_REQUIREMENT;break;case 31:this.$=q.RequirementType.DESIGN_CONSTRAINT;break;case 32:this.$=q.RiskLevel.LOW_RISK;break;case 33:this.$=q.RiskLevel.MED_RISK;break;case 34:this.$=q.RiskLevel.HIGH_RISK;break;case 35:this.$=q.VerifyType.VERIFY_ANALYSIS;break;case 36:this.$=q.VerifyType.VERIFY_DEMONSTRATION;break;case 37:this.$=q.VerifyType.VERIFY_INSPECTION;break;case 38:this.$=q.VerifyType.VERIFY_TEST;break;case 39:q.addElement(F[P-3]);break;case 40:q.setNewElementType(F[P-2]);break;case 41:q.setNewElementDocRef(F[P-2]);break;case 44:q.addRelationship(F[P-2],F[P],F[P-4]);break;case 45:q.addRelationship(F[P-2],F[P-4],F[P]);break;case 46:this.$=q.Relationships.CONTAINS;break;case 47:this.$=q.Relationships.COPIES;break;case 48:this.$=q.Relationships.DERIVES;break;case 49:this.$=q.Relationships.SATISFIES;break;case 50:this.$=q.Relationships.VERIFIES;break;case 51:this.$=q.Relationships.REFINES;break;case 52:this.$=q.Relationships.TRACES;break}},table:[{3:1,4:2,6:e,9:4,14:r,16:n,18:i,19:a},{1:[3]},{3:10,4:2,5:[1,9],6:e,9:4,14:r,16:n,18:i,19:a},{5:[1,11]},{10:12,20:[1,13]},{15:[1,14]},{17:[1,15]},t(s,[2,8]),{20:[2,9]},{3:16,4:2,6:e,9:4,14:r,16:n,18:i,19:a},{1:[2,2]},{4:21,5:o,7:17,8:l,9:4,14:r,16:n,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:u,41:h,42:d,43:f,44:p,45:m,53:_,71:y,72:b},{11:34,12:[1,35],22:x},t([12,22],[2,10]),t(s,[2,6]),t(s,[2,7]),{1:[2,1]},{8:[1,37]},{4:21,5:o,7:38,8:l,9:4,14:r,16:n,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:u,41:h,42:d,43:f,44:p,45:m,53:_,71:y,72:b},{4:21,5:o,7:39,8:l,9:4,14:r,16:n,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:u,41:h,42:d,43:f,44:p,45:m,53:_,71:y,72:b},{4:21,5:o,7:40,8:l,9:4,14:r,16:n,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:u,41:h,42:d,43:f,44:p,45:m,53:_,71:y,72:b},{4:21,5:o,7:41,8:l,9:4,14:r,16:n,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:u,41:h,42:d,43:f,44:p,45:m,53:_,71:y,72:b},{4:21,5:o,7:42,8:l,9:4,14:r,16:n,18:i,19:a,23:18,24:19,25:20,26:23,32:25,40:u,41:h,42:d,43:f,44:p,45:m,53:_,71:y,72:b},{27:43,71:[1,44],72:[1,45]},{54:46,71:[1,47],72:[1,48]},{60:[1,49],62:[1,50]},t(k,[2,26]),t(k,[2,27]),t(k,[2,28]),t(k,[2,29]),t(k,[2,30]),t(k,[2,31]),t(T,[2,55]),t(T,[2,56]),t(s,[2,4]),{13:51,21:[1,52]},t(s,[2,12]),{1:[2,3]},{8:[2,14]},{8:[2,15]},{8:[2,16]},{8:[2,17]},{8:[2,18]},{28:[1,53]},{28:[2,53]},{28:[2,54]},{28:[1,54]},{28:[2,59]},{28:[2,60]},{61:55,64:C,65:M,66:S,67:R,68:A,69:L,70:v},{61:63,64:C,65:M,66:S,67:R,68:A,69:L,70:v},{11:64,22:x},{22:[2,11]},{5:[1,65]},{5:[1,66]},{62:[1,67]},t(B,[2,46]),t(B,[2,47]),t(B,[2,48]),t(B,[2,49]),t(B,[2,50]),t(B,[2,51]),t(B,[2,52]),{63:[1,68]},t(s,[2,5]),{5:w,29:69,30:D,33:N,35:z,37:X,39:ct},{5:J,39:Y,55:76,56:$,58:lt},{32:81,71:y,72:b},{32:82,71:y,72:b},t(ut,[2,19]),{31:[1,83]},{31:[1,84]},{31:[1,85]},{31:[1,86]},{5:w,29:87,30:D,33:N,35:z,37:X,39:ct},t(ut,[2,25]),t(ut,[2,39]),{31:[1,88]},{31:[1,89]},{5:J,39:Y,55:90,56:$,58:lt},t(ut,[2,43]),t(ut,[2,44]),t(ut,[2,45]),{32:91,71:y,72:b},{34:92,71:[1,93],72:[1,94]},{36:95,46:[1,96],47:[1,97],48:[1,98]},{38:99,49:[1,100],50:[1,101],51:[1,102],52:[1,103]},t(ut,[2,24]),{57:104,71:[1,105],72:[1,106]},{59:107,71:[1,108],72:[1,109]},t(ut,[2,42]),{5:[1,110]},{5:[1,111]},{5:[2,57]},{5:[2,58]},{5:[1,112]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[1,113]},{5:[2,35]},{5:[2,36]},{5:[2,37]},{5:[2,38]},{5:[1,114]},{5:[2,61]},{5:[2,62]},{5:[1,115]},{5:[2,63]},{5:[2,64]},{5:w,29:116,30:D,33:N,35:z,37:X,39:ct},{5:w,29:117,30:D,33:N,35:z,37:X,39:ct},{5:w,29:118,30:D,33:N,35:z,37:X,39:ct},{5:w,29:119,30:D,33:N,35:z,37:X,39:ct},{5:J,39:Y,55:120,56:$,58:lt},{5:J,39:Y,55:121,56:$,58:lt},t(ut,[2,20]),t(ut,[2,21]),t(ut,[2,22]),t(ut,[2,23]),t(ut,[2,40]),t(ut,[2,41])],defaultActions:{8:[2,9],10:[2,2],16:[2,1],37:[2,3],38:[2,14],39:[2,15],40:[2,16],41:[2,17],42:[2,18],44:[2,53],45:[2,54],47:[2,59],48:[2,60],52:[2,11],93:[2,57],94:[2,58],96:[2,32],97:[2,33],98:[2,34],100:[2,35],101:[2,36],102:[2,37],103:[2,38],105:[2,61],106:[2,62],108:[2,63],109:[2,64]},parseError:function(Z,V){if(V.recoverable)this.trace(Z);else{var Q=new Error(Z);throw Q.hash=V,Q}},parse:function(Z){var V=this,Q=[0],q=[],U=[null],F=[],j=this.table,P="",et=0,at=0,It=2,Lt=1,Rt=F.slice.call(arguments,1),Ct=Object.create(this.lexer),pt={yy:{}};for(var mt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,mt)&&(pt.yy[mt]=this.yy[mt]);Ct.setInput(Z,pt.yy),pt.yy.lexer=Ct,pt.yy.parser=this,typeof Ct.yylloc>"u"&&(Ct.yylloc={});var vt=Ct.yylloc;F.push(vt);var Tt=Ct.options&&Ct.options.ranges;typeof pt.yy.parseError=="function"?this.parseError=pt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ft(){var bt;return bt=q.pop()||Ct.lex()||Lt,typeof bt!="number"&&(bt instanceof Array&&(q=bt,bt=q.pop()),bt=V.symbols_[bt]||bt),bt}for(var le,Dt,Gt,$t,Qt={},we,jt,Ft,zt;;){if(Dt=Q[Q.length-1],this.defaultActions[Dt]?Gt=this.defaultActions[Dt]:((le===null||typeof le>"u")&&(le=ft()),Gt=j[Dt]&&j[Dt][le]),typeof Gt>"u"||!Gt.length||!Gt[0]){var wt="";zt=[];for(we in j[Dt])this.terminals_[we]&&we>It&&zt.push("'"+this.terminals_[we]+"'");Ct.showPosition?wt="Parse error on line "+(et+1)+`:
+`+Ct.showPosition()+`
+Expecting `+zt.join(", ")+", got '"+(this.terminals_[le]||le)+"'":wt="Parse error on line "+(et+1)+": Unexpected "+(le==Lt?"end of input":"'"+(this.terminals_[le]||le)+"'"),this.parseError(wt,{text:Ct.match,token:this.terminals_[le]||le,line:Ct.yylineno,loc:vt,expected:zt})}if(Gt[0]instanceof Array&&Gt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Dt+", token: "+le);switch(Gt[0]){case 1:Q.push(le),U.push(Ct.yytext),F.push(Ct.yylloc),Q.push(Gt[1]),le=null,at=Ct.yyleng,P=Ct.yytext,et=Ct.yylineno,vt=Ct.yylloc;break;case 2:if(jt=this.productions_[Gt[1]][1],Qt.$=U[U.length-jt],Qt._$={first_line:F[F.length-(jt||1)].first_line,last_line:F[F.length-1].last_line,first_column:F[F.length-(jt||1)].first_column,last_column:F[F.length-1].last_column},Tt&&(Qt._$.range=[F[F.length-(jt||1)].range[0],F[F.length-1].range[1]]),$t=this.performAction.apply(Qt,[P,at,et,pt.yy,Gt[1],U,F].concat(Rt)),typeof $t<"u")return $t;jt&&(Q=Q.slice(0,-1*jt*2),U=U.slice(0,-1*jt),F=F.slice(0,-1*jt)),Q.push(this.productions_[Gt[1]][0]),U.push(Qt.$),F.push(Qt._$),Ft=j[Q[Q.length-2]][Q[Q.length-1]],Q.push(Ft);break;case 3:return!0}}return!0}},tt=function(){var it={EOF:1,parseError:function(V,Q){if(this.yy.parser)this.yy.parser.parseError(V,Q);else throw new Error(V)},setInput:function(Z,V){return this.yy=V||this.yy||{},this._input=Z,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Z=this._input[0];this.yytext+=Z,this.yyleng++,this.offset++,this.match+=Z,this.matched+=Z;var V=Z.match(/(?:\r\n?|\n).*/g);return V?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Z},unput:function(Z){var V=Z.length,Q=Z.split(/(?:\r\n?|\n)/g);this._input=Z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-V),this.offset-=V;var q=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Q.length-1&&(this.yylineno-=Q.length-1);var U=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Q?(Q.length===q.length?this.yylloc.first_column:0)+q[q.length-Q.length].length-Q[0].length:this.yylloc.first_column-V},this.options.ranges&&(this.yylloc.range=[U[0],U[0]+this.yyleng-V]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Z){this.unput(this.match.slice(Z))},pastInput:function(){var Z=this.matched.substr(0,this.matched.length-this.match.length);return(Z.length>20?"...":"")+Z.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Z=this.match;return Z.length<20&&(Z+=this._input.substr(0,20-Z.length)),(Z.substr(0,20)+(Z.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Z=this.pastInput(),V=new Array(Z.length+1).join("-");return Z+this.upcomingInput()+`
+`+V+"^"},test_match:function(Z,V){var Q,q,U;if(this.options.backtrack_lexer&&(U={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(U.yylloc.range=this.yylloc.range.slice(0))),q=Z[0].match(/(?:\r\n?|\n).*/g),q&&(this.yylineno+=q.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:q?q[q.length-1].length-q[q.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Z[0].length},this.yytext+=Z[0],this.match+=Z[0],this.matches=Z,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Z[0].length),this.matched+=Z[0],Q=this.performAction.call(this,this.yy,this,V,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Q)return Q;if(this._backtrack){for(var F in U)this[F]=U[F];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Z,V,Q,q;this._more||(this.yytext="",this.match="");for(var U=this._currentRules(),F=0;F<U.length;F++)if(Q=this._input.match(this.rules[U[F]]),Q&&(!V||Q[0].length>V[0].length)){if(V=Q,q=F,this.options.backtrack_lexer){if(Z=this.test_match(Q,U[F]),Z!==!1)return Z;if(this._backtrack){V=!1;continue}else return!1}else if(!this.options.flex)break}return V?(Z=this.test_match(V,U[q]),Z!==!1?Z:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var V=this.next();return V||this.lex()},begin:function(V){this.conditionStack.push(V)},popState:function(){var V=this.conditionStack.length-1;return V>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(V){return V=this.conditionStack.length-1-Math.abs(V||0),V>=0?this.conditionStack[V]:"INITIAL"},pushState:function(V){this.begin(V)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(V,Q,q,U){switch(q){case 0:return this.begin("open_directive"),19;case 1:return this.begin("type_directive"),20;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),22;case 4:return 21;case 5:return"title";case 6:return this.begin("acc_title"),14;case 7:return this.popState(),"acc_title_value";case 8:return this.begin("acc_descr"),16;case 9:return this.popState(),"acc_descr_value";case 10:this.begin("acc_descr_multiline");break;case 11:this.popState();break;case 12:return"acc_descr_multiline_value";case 13:return 5;case 14:break;case 15:break;case 16:break;case 17:return 8;case 18:return 6;case 19:return 28;case 20:return 39;case 21:return 31;case 22:return 30;case 23:return 33;case 24:return 35;case 25:return 37;case 26:return 40;case 27:return 41;case 28:return 42;case 29:return 43;case 30:return 44;case 31:return 45;case 32:return 46;case 33:return 47;case 34:return 48;case 35:return 49;case 36:return 50;case 37:return 51;case 38:return 52;case 39:return 53;case 40:return 64;case 41:return 65;case 42:return 66;case 43:return 67;case 44:return 68;case 45:return 69;case 46:return 70;case 47:return 56;case 48:return 58;case 49:return 60;case 50:return 63;case 51:return 62;case 52:this.begin("string");break;case 53:this.popState();break;case 54:return"qString";case 55:return Q.yytext=Q.yytext.trim(),71}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{acc_descr_multiline:{rules:[11,12],inclusive:!1},acc_descr:{rules:[9],inclusive:!1},acc_title:{rules:[7],inclusive:!1},close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[53,54],inclusive:!1},INITIAL:{rules:[0,5,6,8,10,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,55],inclusive:!0}}};return it}();W.lexer=tt;function K(){this.yy={}}return K.prototype=W,W.Parser=K,new K}();Y4.parser=Y4;const cit=t=>t.match(/^\s*requirement(Diagram)?/)!==null;let U4=[],kn={},cu={},rs={},uu={};const uit={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},parseDirective:function(t,e,r){Xe.parseDirective(this,t,e,r)},getConfig:()=>nt().req,addRequirement:(t,e)=>(typeof cu[t]>"u"&&(cu[t]={name:t,type:e,id:kn.id,text:kn.text,risk:kn.risk,verifyMethod:kn.verifyMethod}),kn={},cu[t]),getRequirements:()=>cu,setNewReqId:t=>{typeof kn<"u"&&(kn.id=t)},setNewReqText:t=>{typeof kn<"u"&&(kn.text=t)},setNewReqRisk:t=>{typeof kn<"u"&&(kn.risk=t)},setNewReqVerifyMethod:t=>{typeof kn<"u"&&(kn.verifyMethod=t)},setAccTitle:Yn,getAccTitle:ui,setAccDescription:hi,getAccDescription:fi,addElement:t=>(typeof uu[t]>"u"&&(uu[t]={name:t,type:rs.type,docRef:rs.docRef},H.info("Added new requirement: ",t)),rs={},uu[t]),getElements:()=>uu,setNewElementType:t=>{typeof rs<"u"&&(rs.type=t)},setNewElementDocRef:t=>{typeof rs<"u"&&(rs.docRef=t)},addRelationship:(t,e,r)=>{U4.push({type:t,src:e,dst:r})},getRelationships:()=>U4,clear:()=>{U4=[],kn={},cu={},rs={},uu={},ci()}},W4={CONTAINS:"contains",ARROW:"arrow"},sL={ReqMarkers:W4,insertLineEndings:(t,e)=>{let r=t.append("defs").append("marker").attr("id",W4.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");r.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),r.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),r.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",W4.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d",`M0,0
+      L${e.line_height},${e.line_height/2}
+      M${e.line_height},${e.line_height/2}
+      L0,${e.line_height}`).attr("stroke-width",1)}};let sr={},oL=0;const lL=(t,e)=>t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",sr.rect_min_width+"px").attr("height",sr.rect_min_height+"px"),cL=(t,e,r)=>{let n=sr.rect_min_width/2,i=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",n).attr("y",sr.rect_padding).attr("dominant-baseline","hanging"),a=0;r.forEach(u=>{a==0?i.append("tspan").attr("text-anchor","middle").attr("x",sr.rect_min_width/2).attr("dy",0).text(u):i.append("tspan").attr("text-anchor","middle").attr("x",sr.rect_min_width/2).attr("dy",sr.line_height*.75).text(u),a++});let s=1.5*sr.rect_padding,o=a*sr.line_height*.75,l=s+o;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",sr.rect_min_width).attr("y1",l).attr("y2",l),{titleNode:i,y:l}},uL=(t,e,r,n)=>{let i=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",sr.rect_padding).attr("y",n).attr("dominant-baseline","hanging"),a=0;const s=30;let o=[];return r.forEach(l=>{let u=l.length;for(;u>s&&a<3;){let h=l.substring(0,s);l=l.substring(s,l.length),u=l.length,o[o.length]=h,a++}if(a==3){let h=o[o.length-1];o[o.length-1]=h.substring(0,h.length-4)+"..."}else o[o.length]=l;a=0}),o.forEach(l=>{i.append("tspan").attr("x",sr.rect_padding).attr("dy",sr.line_height).text(l)}),i},hit=(t,e,r,n)=>{const i=e.node().getTotalLength(),a=e.node().getPointAtLength(i*.5),s="rel"+oL;oL++;const l=t.append("text").attr("class","req relationshipLabel").attr("id",s).attr("x",a.x).attr("y",a.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(n).node().getBBox();t.insert("rect","#"+s).attr("class","req reqLabelBox").attr("x",a.x-l.width/2).attr("y",a.y-l.height/2).attr("width",l.width).attr("height",l.height).attr("fill","white").attr("fill-opacity","85%")},fit=function(t,e,r,n,i){const a=r.edge(cl(e.src),cl(e.dst)),s=Ua().x(function(l){return l.x}).y(function(l){return l.y}),o=t.insert("path","#"+n).attr("class","er relationshipLine").attr("d",s(a.points)).attr("fill","none");e.type==i.db.Relationships.CONTAINS?o.attr("marker-start","url("+pe.getUrl(sr.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(o.attr("stroke-dasharray","10,7"),o.attr("marker-end","url("+pe.getUrl(sr.arrowMarkerAbsolute)+"#"+sL.ReqMarkers.ARROW+"_line_ending)")),hit(t,o,sr,`<<${e.type}>>`)},dit=(t,e,r)=>{Object.keys(t).forEach(n=>{let i=t[n];n=cl(n),H.info("Added new requirement: ",n);const a=r.append("g").attr("id",n),s="req-"+n,o=lL(a,s);let l=cL(a,n+"_title",[`<<${i.type}>>`,`${i.name}`]);uL(a,n+"_body",[`Id: ${i.id}`,`Text: ${i.text}`,`Risk: ${i.risk}`,`Verification: ${i.verifyMethod}`],l.y);const u=o.node().getBBox();e.setNode(n,{width:u.width,height:u.height,shape:"rect",id:n})})},pit=(t,e,r)=>{Object.keys(t).forEach(n=>{let i=t[n];const a=cl(n),s=r.append("g").attr("id",a),o="element-"+a,l=lL(s,o);let u=cL(s,o+"_title",["<<Element>>",`${n}`]);uL(s,o+"_body",[`Type: ${i.type||"Not Specified"}`,`Doc Ref: ${i.docRef||"None"}`],u.y);const h=l.node().getBBox();e.setNode(a,{width:h.width,height:h.height,shape:"rect",id:a})})},git=(t,e)=>(t.forEach(function(r){let n=cl(r.src),i=cl(r.dst);e.setEdge(n,i,{relationship:r})}),t),yit=function(t,e){e.nodes().forEach(function(r){typeof r<"u"&&typeof e.node(r)<"u"&&(t.select("#"+r),t.select("#"+r).attr("transform","translate("+(e.node(r).x-e.node(r).width/2)+","+(e.node(r).y-e.node(r).height/2)+" )"))})},cl=t=>t.replace(/\s/g,"").replace(/\./g,"_"),mit={draw:(t,e,r,n)=>{sr=nt().requirement,n.db.clear(),n.parser.parse(t);const i=sr.securityLevel;let a;i==="sandbox"&&(a=St("#i"+e));const o=St(i==="sandbox"?a.nodes()[0].contentDocument.body:"body").select(`[id='${e}']`);sL.insertLineEndings(o,sr);const l=new cr.Graph({multigraph:!1,compound:!1,directed:!0}).setGraph({rankdir:sr.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel(function(){return{}});let u=n.db.getRequirements(),h=n.db.getElements(),d=n.db.getRelationships();dit(u,l,o),pit(h,l,o),git(d,l),Zc.layout(l),yit(o,l),d.forEach(function(y){fit(o,y,l,e,n)});const f=sr.rect_padding,p=o.node().getBBox(),m=p.width+f*2,_=p.height+f*2;li(o,_,m,sr.useMaxWidth),o.attr("viewBox",`${p.x-f} ${p.y-f} ${m} ${_}`),bn(n.db,o,e)}};var H4=function(){var t=function(it,Z,V,Q){for(V=V||{},Q=it.length;Q--;V[it[Q]]=Z);return V},e=[1,2],r=[1,3],n=[1,5],i=[1,7],a=[2,5],s=[1,15],o=[1,17],l=[1,18],u=[1,19],h=[1,21],d=[1,22],f=[1,23],p=[1,29],m=[1,30],_=[1,31],y=[1,32],b=[1,33],x=[1,34],k=[1,35],T=[1,36],C=[1,37],M=[1,38],S=[1,39],R=[1,40],A=[1,43],L=[1,44],v=[1,45],B=[1,46],w=[1,47],D=[1,48],N=[1,51],z=[1,4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,50,51,52,53,58,59,60,61,69,79],X=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,53,58,59,60,61,69,79],ct=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,52,53,58,59,60,61,69,79],J=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,51,53,58,59,60,61,69,79],Y=[4,5,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,50,53,58,59,60,61,69,79],$=[67,68,69],lt=[1,121],ut=[1,4,5,7,16,20,22,25,26,32,33,34,36,38,39,40,41,42,43,45,47,49,50,51,52,53,58,59,60,61,69,79],W={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,openDirective:11,typeDirective:12,closeDirective:13,":":14,argDirective:15,participant:16,actor:17,AS:18,restOfLine:19,participant_actor:20,signal:21,autonumber:22,NUM:23,off:24,activate:25,deactivate:26,note_statement:27,links_statement:28,link_statement:29,properties_statement:30,details_statement:31,title:32,legacy_title:33,acc_title:34,acc_title_value:35,acc_descr:36,acc_descr_value:37,acc_descr_multiline_value:38,loop:39,end:40,rect:41,opt:42,alt:43,else_sections:44,par:45,par_sections:46,critical:47,option_sections:48,break:49,option:50,and:51,else:52,note:53,placement:54,text2:55,over:56,actor_pair:57,links:58,link:59,properties:60,details:61,spaceList:62,",":63,left_of:64,right_of:65,signaltype:66,"+":67,"-":68,ACTOR:69,SOLID_OPEN_ARROW:70,DOTTED_OPEN_ARROW:71,SOLID_ARROW:72,DOTTED_ARROW:73,SOLID_CROSS:74,DOTTED_CROSS:75,SOLID_POINT:76,DOTTED_POINT:77,TXT:78,open_directive:79,type_directive:80,arg_directive:81,close_directive:82,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",14:":",16:"participant",18:"AS",19:"restOfLine",20:"participant_actor",22:"autonumber",23:"NUM",24:"off",25:"activate",26:"deactivate",32:"title",33:"legacy_title",34:"acc_title",35:"acc_title_value",36:"acc_descr",37:"acc_descr_value",38:"acc_descr_multiline_value",39:"loop",40:"end",41:"rect",42:"opt",43:"alt",45:"par",47:"critical",49:"break",50:"option",51:"and",52:"else",53:"note",56:"over",58:"links",59:"link",60:"properties",61:"details",63:",",64:"left_of",65:"right_of",67:"+",68:"-",69:"ACTOR",70:"SOLID_OPEN_ARROW",71:"DOTTED_OPEN_ARROW",72:"SOLID_ARROW",73:"DOTTED_ARROW",74:"SOLID_CROSS",75:"DOTTED_CROSS",76:"SOLID_POINT",77:"DOTTED_POINT",78:"TXT",79:"open_directive",80:"type_directive",81:"arg_directive",82:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[6,4],[6,6],[10,5],[10,3],[10,5],[10,3],[10,2],[10,4],[10,3],[10,3],[10,2],[10,3],[10,3],[10,2],[10,2],[10,2],[10,2],[10,2],[10,1],[10,1],[10,2],[10,2],[10,1],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[48,1],[48,4],[46,1],[46,4],[44,1],[44,4],[27,4],[27,4],[28,3],[29,3],[30,3],[31,3],[62,2],[62,1],[57,3],[57,1],[54,1],[54,1],[21,5],[21,5],[21,4],[17,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[55,1],[11,1],[12,1],[15,1],[13,1]],performAction:function(Z,V,Q,q,U,F,j){var P=F.length-1;switch(U){case 4:return q.apply(F[P]),F[P];case 5:this.$=[];break;case 6:F[P-1].push(F[P]),this.$=F[P-1];break;case 7:case 8:this.$=F[P];break;case 9:this.$=[];break;case 12:F[P-3].type="addParticipant",F[P-3].description=q.parseMessage(F[P-1]),this.$=F[P-3];break;case 13:F[P-1].type="addParticipant",this.$=F[P-1];break;case 14:F[P-3].type="addActor",F[P-3].description=q.parseMessage(F[P-1]),this.$=F[P-3];break;case 15:F[P-1].type="addActor",this.$=F[P-1];break;case 17:this.$={type:"sequenceIndex",sequenceIndex:Number(F[P-2]),sequenceIndexStep:Number(F[P-1]),sequenceVisible:!0,signalType:q.LINETYPE.AUTONUMBER};break;case 18:this.$={type:"sequenceIndex",sequenceIndex:Number(F[P-1]),sequenceIndexStep:1,sequenceVisible:!0,signalType:q.LINETYPE.AUTONUMBER};break;case 19:this.$={type:"sequenceIndex",sequenceVisible:!1,signalType:q.LINETYPE.AUTONUMBER};break;case 20:this.$={type:"sequenceIndex",sequenceVisible:!0,signalType:q.LINETYPE.AUTONUMBER};break;case 21:this.$={type:"activeStart",signalType:q.LINETYPE.ACTIVE_START,actor:F[P-1]};break;case 22:this.$={type:"activeEnd",signalType:q.LINETYPE.ACTIVE_END,actor:F[P-1]};break;case 28:q.setDiagramTitle(F[P].substring(6)),this.$=F[P].substring(6);break;case 29:q.setDiagramTitle(F[P].substring(7)),this.$=F[P].substring(7);break;case 30:this.$=F[P].trim(),q.setAccTitle(this.$);break;case 31:case 32:this.$=F[P].trim(),q.setAccDescription(this.$);break;case 33:F[P-1].unshift({type:"loopStart",loopText:q.parseMessage(F[P-2]),signalType:q.LINETYPE.LOOP_START}),F[P-1].push({type:"loopEnd",loopText:F[P-2],signalType:q.LINETYPE.LOOP_END}),this.$=F[P-1];break;case 34:F[P-1].unshift({type:"rectStart",color:q.parseMessage(F[P-2]),signalType:q.LINETYPE.RECT_START}),F[P-1].push({type:"rectEnd",color:q.parseMessage(F[P-2]),signalType:q.LINETYPE.RECT_END}),this.$=F[P-1];break;case 35:F[P-1].unshift({type:"optStart",optText:q.parseMessage(F[P-2]),signalType:q.LINETYPE.OPT_START}),F[P-1].push({type:"optEnd",optText:q.parseMessage(F[P-2]),signalType:q.LINETYPE.OPT_END}),this.$=F[P-1];break;case 36:F[P-1].unshift({type:"altStart",altText:q.parseMessage(F[P-2]),signalType:q.LINETYPE.ALT_START}),F[P-1].push({type:"altEnd",signalType:q.LINETYPE.ALT_END}),this.$=F[P-1];break;case 37:F[P-1].unshift({type:"parStart",parText:q.parseMessage(F[P-2]),signalType:q.LINETYPE.PAR_START}),F[P-1].push({type:"parEnd",signalType:q.LINETYPE.PAR_END}),this.$=F[P-1];break;case 38:F[P-1].unshift({type:"criticalStart",criticalText:q.parseMessage(F[P-2]),signalType:q.LINETYPE.CRITICAL_START}),F[P-1].push({type:"criticalEnd",signalType:q.LINETYPE.CRITICAL_END}),this.$=F[P-1];break;case 39:F[P-1].unshift({type:"breakStart",breakText:q.parseMessage(F[P-2]),signalType:q.LINETYPE.BREAK_START}),F[P-1].push({type:"breakEnd",optText:q.parseMessage(F[P-2]),signalType:q.LINETYPE.BREAK_END}),this.$=F[P-1];break;case 42:this.$=F[P-3].concat([{type:"option",optionText:q.parseMessage(F[P-1]),signalType:q.LINETYPE.CRITICAL_OPTION},F[P]]);break;case 44:this.$=F[P-3].concat([{type:"and",parText:q.parseMessage(F[P-1]),signalType:q.LINETYPE.PAR_AND},F[P]]);break;case 46:this.$=F[P-3].concat([{type:"else",altText:q.parseMessage(F[P-1]),signalType:q.LINETYPE.ALT_ELSE},F[P]]);break;case 47:this.$=[F[P-1],{type:"addNote",placement:F[P-2],actor:F[P-1].actor,text:F[P]}];break;case 48:F[P-2]=[].concat(F[P-1],F[P-1]).slice(0,2),F[P-2][0]=F[P-2][0].actor,F[P-2][1]=F[P-2][1].actor,this.$=[F[P-1],{type:"addNote",placement:q.PLACEMENT.OVER,actor:F[P-2].slice(0,2),text:F[P]}];break;case 49:this.$=[F[P-1],{type:"addLinks",actor:F[P-1].actor,text:F[P]}];break;case 50:this.$=[F[P-1],{type:"addALink",actor:F[P-1].actor,text:F[P]}];break;case 51:this.$=[F[P-1],{type:"addProperties",actor:F[P-1].actor,text:F[P]}];break;case 52:this.$=[F[P-1],{type:"addDetails",actor:F[P-1].actor,text:F[P]}];break;case 55:this.$=[F[P-2],F[P]];break;case 56:this.$=F[P];break;case 57:this.$=q.PLACEMENT.LEFTOF;break;case 58:this.$=q.PLACEMENT.RIGHTOF;break;case 59:this.$=[F[P-4],F[P-1],{type:"addMessage",from:F[P-4].actor,to:F[P-1].actor,signalType:F[P-3],msg:F[P]},{type:"activeStart",signalType:q.LINETYPE.ACTIVE_START,actor:F[P-1]}];break;case 60:this.$=[F[P-4],F[P-1],{type:"addMessage",from:F[P-4].actor,to:F[P-1].actor,signalType:F[P-3],msg:F[P]},{type:"activeEnd",signalType:q.LINETYPE.ACTIVE_END,actor:F[P-4]}];break;case 61:this.$=[F[P-3],F[P-1],{type:"addMessage",from:F[P-3].actor,to:F[P-1].actor,signalType:F[P-2],msg:F[P]}];break;case 62:this.$={type:"addParticipant",actor:F[P]};break;case 63:this.$=q.LINETYPE.SOLID_OPEN;break;case 64:this.$=q.LINETYPE.DOTTED_OPEN;break;case 65:this.$=q.LINETYPE.SOLID;break;case 66:this.$=q.LINETYPE.DOTTED;break;case 67:this.$=q.LINETYPE.SOLID_CROSS;break;case 68:this.$=q.LINETYPE.DOTTED_CROSS;break;case 69:this.$=q.LINETYPE.SOLID_POINT;break;case 70:this.$=q.LINETYPE.DOTTED_POINT;break;case 71:this.$=q.parseMessage(F[P].trim().substring(1));break;case 72:q.parseDirective("%%{","open_directive");break;case 73:q.parseDirective(F[P],"type_directive");break;case 74:F[P]=F[P].trim().replace(/'/g,'"'),q.parseDirective(F[P],"arg_directive");break;case 75:q.parseDirective("}%%","close_directive","sequence");break}},table:[{3:1,4:e,5:r,6:4,7:n,11:6,79:i},{1:[3]},{3:8,4:e,5:r,6:4,7:n,11:6,79:i},{3:9,4:e,5:r,6:4,7:n,11:6,79:i},{3:10,4:e,5:r,6:4,7:n,11:6,79:i},t([1,4,5,16,20,22,25,26,32,33,34,36,38,39,41,42,43,45,47,49,53,58,59,60,61,69,79],a,{8:11}),{12:12,80:[1,13]},{80:[2,72]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:s,5:o,6:41,9:14,10:16,11:6,16:l,17:42,20:u,21:20,22:h,25:d,26:f,27:24,28:25,29:26,30:27,31:28,32:p,33:m,34:_,36:y,38:b,39:x,41:k,42:T,43:C,45:M,47:S,49:R,53:A,58:L,59:v,60:B,61:w,69:D,79:i},{13:49,14:[1,50],82:N},t([14,82],[2,73]),t(z,[2,6]),{6:41,10:52,11:6,16:l,17:42,20:u,21:20,22:h,25:d,26:f,27:24,28:25,29:26,30:27,31:28,32:p,33:m,34:_,36:y,38:b,39:x,41:k,42:T,43:C,45:M,47:S,49:R,53:A,58:L,59:v,60:B,61:w,69:D,79:i},t(z,[2,8]),t(z,[2,9]),{17:53,69:D},{17:54,69:D},{5:[1,55]},{5:[1,58],23:[1,56],24:[1,57]},{17:59,69:D},{17:60,69:D},{5:[1,61]},{5:[1,62]},{5:[1,63]},{5:[1,64]},{5:[1,65]},t(z,[2,28]),t(z,[2,29]),{35:[1,66]},{37:[1,67]},t(z,[2,32]),{19:[1,68]},{19:[1,69]},{19:[1,70]},{19:[1,71]},{19:[1,72]},{19:[1,73]},{19:[1,74]},t(z,[2,40]),{66:75,70:[1,76],71:[1,77],72:[1,78],73:[1,79],74:[1,80],75:[1,81],76:[1,82],77:[1,83]},{54:84,56:[1,85],64:[1,86],65:[1,87]},{17:88,69:D},{17:89,69:D},{17:90,69:D},{17:91,69:D},t([5,18,63,70,71,72,73,74,75,76,77,78],[2,62]),{5:[1,92]},{15:93,81:[1,94]},{5:[2,75]},t(z,[2,7]),{5:[1,96],18:[1,95]},{5:[1,98],18:[1,97]},t(z,[2,16]),{5:[1,100],23:[1,99]},{5:[1,101]},t(z,[2,20]),{5:[1,102]},{5:[1,103]},t(z,[2,23]),t(z,[2,24]),t(z,[2,25]),t(z,[2,26]),t(z,[2,27]),t(z,[2,30]),t(z,[2,31]),t(X,a,{8:104}),t(X,a,{8:105}),t(X,a,{8:106}),t(ct,a,{44:107,8:108}),t(J,a,{46:109,8:110}),t(Y,a,{48:111,8:112}),t(X,a,{8:113}),{17:116,67:[1,114],68:[1,115],69:D},t($,[2,63]),t($,[2,64]),t($,[2,65]),t($,[2,66]),t($,[2,67]),t($,[2,68]),t($,[2,69]),t($,[2,70]),{17:117,69:D},{17:119,57:118,69:D},{69:[2,57]},{69:[2,58]},{55:120,78:lt},{55:122,78:lt},{55:123,78:lt},{55:124,78:lt},t(ut,[2,10]),{13:125,82:N},{82:[2,74]},{19:[1,126]},t(z,[2,13]),{19:[1,127]},t(z,[2,15]),{5:[1,128]},t(z,[2,18]),t(z,[2,19]),t(z,[2,21]),t(z,[2,22]),{4:s,5:o,6:41,9:14,10:16,11:6,16:l,17:42,20:u,21:20,22:h,25:d,26:f,27:24,28:25,29:26,30:27,31:28,32:p,33:m,34:_,36:y,38:b,39:x,40:[1,129],41:k,42:T,43:C,45:M,47:S,49:R,53:A,58:L,59:v,60:B,61:w,69:D,79:i},{4:s,5:o,6:41,9:14,10:16,11:6,16:l,17:42,20:u,21:20,22:h,25:d,26:f,27:24,28:25,29:26,30:27,31:28,32:p,33:m,34:_,36:y,38:b,39:x,40:[1,130],41:k,42:T,43:C,45:M,47:S,49:R,53:A,58:L,59:v,60:B,61:w,69:D,79:i},{4:s,5:o,6:41,9:14,10:16,11:6,16:l,17:42,20:u,21:20,22:h,25:d,26:f,27:24,28:25,29:26,30:27,31:28,32:p,33:m,34:_,36:y,38:b,39:x,40:[1,131],41:k,42:T,43:C,45:M,47:S,49:R,53:A,58:L,59:v,60:B,61:w,69:D,79:i},{40:[1,132]},{4:s,5:o,6:41,9:14,10:16,11:6,16:l,17:42,20:u,21:20,22:h,25:d,26:f,27:24,28:25,29:26,30:27,31:28,32:p,33:m,34:_,36:y,38:b,39:x,40:[2,45],41:k,42:T,43:C,45:M,47:S,49:R,52:[1,133],53:A,58:L,59:v,60:B,61:w,69:D,79:i},{40:[1,134]},{4:s,5:o,6:41,9:14,10:16,11:6,16:l,17:42,20:u,21:20,22:h,25:d,26:f,27:24,28:25,29:26,30:27,31:28,32:p,33:m,34:_,36:y,38:b,39:x,40:[2,43],41:k,42:T,43:C,45:M,47:S,49:R,51:[1,135],53:A,58:L,59:v,60:B,61:w,69:D,79:i},{40:[1,136]},{4:s,5:o,6:41,9:14,10:16,11:6,16:l,17:42,20:u,21:20,22:h,25:d,26:f,27:24,28:25,29:26,30:27,31:28,32:p,33:m,34:_,36:y,38:b,39:x,40:[2,41],41:k,42:T,43:C,45:M,47:S,49:R,50:[1,137],53:A,58:L,59:v,60:B,61:w,69:D,79:i},{4:s,5:o,6:41,9:14,10:16,11:6,16:l,17:42,20:u,21:20,22:h,25:d,26:f,27:24,28:25,29:26,30:27,31:28,32:p,33:m,34:_,36:y,38:b,39:x,40:[1,138],41:k,42:T,43:C,45:M,47:S,49:R,53:A,58:L,59:v,60:B,61:w,69:D,79:i},{17:139,69:D},{17:140,69:D},{55:141,78:lt},{55:142,78:lt},{55:143,78:lt},{63:[1,144],78:[2,56]},{5:[2,49]},{5:[2,71]},{5:[2,50]},{5:[2,51]},{5:[2,52]},{5:[1,145]},{5:[1,146]},{5:[1,147]},t(z,[2,17]),t(z,[2,33]),t(z,[2,34]),t(z,[2,35]),t(z,[2,36]),{19:[1,148]},t(z,[2,37]),{19:[1,149]},t(z,[2,38]),{19:[1,150]},t(z,[2,39]),{55:151,78:lt},{55:152,78:lt},{5:[2,61]},{5:[2,47]},{5:[2,48]},{17:153,69:D},t(ut,[2,11]),t(z,[2,12]),t(z,[2,14]),t(ct,a,{8:108,44:154}),t(J,a,{8:110,46:155}),t(Y,a,{8:112,48:156}),{5:[2,59]},{5:[2,60]},{78:[2,55]},{40:[2,46]},{40:[2,44]},{40:[2,42]}],defaultActions:{7:[2,72],8:[2,1],9:[2,2],10:[2,3],51:[2,75],86:[2,57],87:[2,58],94:[2,74],120:[2,49],121:[2,71],122:[2,50],123:[2,51],124:[2,52],141:[2,61],142:[2,47],143:[2,48],151:[2,59],152:[2,60],153:[2,55],154:[2,46],155:[2,44],156:[2,42]},parseError:function(Z,V){if(V.recoverable)this.trace(Z);else{var Q=new Error(Z);throw Q.hash=V,Q}},parse:function(Z){var V=this,Q=[0],q=[],U=[null],F=[],j=this.table,P="",et=0,at=0,It=2,Lt=1,Rt=F.slice.call(arguments,1),Ct=Object.create(this.lexer),pt={yy:{}};for(var mt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,mt)&&(pt.yy[mt]=this.yy[mt]);Ct.setInput(Z,pt.yy),pt.yy.lexer=Ct,pt.yy.parser=this,typeof Ct.yylloc>"u"&&(Ct.yylloc={});var vt=Ct.yylloc;F.push(vt);var Tt=Ct.options&&Ct.options.ranges;typeof pt.yy.parseError=="function"?this.parseError=pt.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ft(){var bt;return bt=q.pop()||Ct.lex()||Lt,typeof bt!="number"&&(bt instanceof Array&&(q=bt,bt=q.pop()),bt=V.symbols_[bt]||bt),bt}for(var le,Dt,Gt,$t,Qt={},we,jt,Ft,zt;;){if(Dt=Q[Q.length-1],this.defaultActions[Dt]?Gt=this.defaultActions[Dt]:((le===null||typeof le>"u")&&(le=ft()),Gt=j[Dt]&&j[Dt][le]),typeof Gt>"u"||!Gt.length||!Gt[0]){var wt="";zt=[];for(we in j[Dt])this.terminals_[we]&&we>It&&zt.push("'"+this.terminals_[we]+"'");Ct.showPosition?wt="Parse error on line "+(et+1)+`:
+`+Ct.showPosition()+`
+Expecting `+zt.join(", ")+", got '"+(this.terminals_[le]||le)+"'":wt="Parse error on line "+(et+1)+": Unexpected "+(le==Lt?"end of input":"'"+(this.terminals_[le]||le)+"'"),this.parseError(wt,{text:Ct.match,token:this.terminals_[le]||le,line:Ct.yylineno,loc:vt,expected:zt})}if(Gt[0]instanceof Array&&Gt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Dt+", token: "+le);switch(Gt[0]){case 1:Q.push(le),U.push(Ct.yytext),F.push(Ct.yylloc),Q.push(Gt[1]),le=null,at=Ct.yyleng,P=Ct.yytext,et=Ct.yylineno,vt=Ct.yylloc;break;case 2:if(jt=this.productions_[Gt[1]][1],Qt.$=U[U.length-jt],Qt._$={first_line:F[F.length-(jt||1)].first_line,last_line:F[F.length-1].last_line,first_column:F[F.length-(jt||1)].first_column,last_column:F[F.length-1].last_column},Tt&&(Qt._$.range=[F[F.length-(jt||1)].range[0],F[F.length-1].range[1]]),$t=this.performAction.apply(Qt,[P,at,et,pt.yy,Gt[1],U,F].concat(Rt)),typeof $t<"u")return $t;jt&&(Q=Q.slice(0,-1*jt*2),U=U.slice(0,-1*jt),F=F.slice(0,-1*jt)),Q.push(this.productions_[Gt[1]][0]),U.push(Qt.$),F.push(Qt._$),Ft=j[Q[Q.length-2]][Q[Q.length-1]],Q.push(Ft);break;case 3:return!0}}return!0}},tt=function(){var it={EOF:1,parseError:function(V,Q){if(this.yy.parser)this.yy.parser.parseError(V,Q);else throw new Error(V)},setInput:function(Z,V){return this.yy=V||this.yy||{},this._input=Z,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var Z=this._input[0];this.yytext+=Z,this.yyleng++,this.offset++,this.match+=Z,this.matched+=Z;var V=Z.match(/(?:\r\n?|\n).*/g);return V?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),Z},unput:function(Z){var V=Z.length,Q=Z.split(/(?:\r\n?|\n)/g);this._input=Z+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-V),this.offset-=V;var q=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),Q.length-1&&(this.yylineno-=Q.length-1);var U=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:Q?(Q.length===q.length?this.yylloc.first_column:0)+q[q.length-Q.length].length-Q[0].length:this.yylloc.first_column-V},this.options.ranges&&(this.yylloc.range=[U[0],U[0]+this.yyleng-V]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(Z){this.unput(this.match.slice(Z))},pastInput:function(){var Z=this.matched.substr(0,this.matched.length-this.match.length);return(Z.length>20?"...":"")+Z.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var Z=this.match;return Z.length<20&&(Z+=this._input.substr(0,20-Z.length)),(Z.substr(0,20)+(Z.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var Z=this.pastInput(),V=new Array(Z.length+1).join("-");return Z+this.upcomingInput()+`
+`+V+"^"},test_match:function(Z,V){var Q,q,U;if(this.options.backtrack_lexer&&(U={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(U.yylloc.range=this.yylloc.range.slice(0))),q=Z[0].match(/(?:\r\n?|\n).*/g),q&&(this.yylineno+=q.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:q?q[q.length-1].length-q[q.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+Z[0].length},this.yytext+=Z[0],this.match+=Z[0],this.matches=Z,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(Z[0].length),this.matched+=Z[0],Q=this.performAction.call(this,this.yy,this,V,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),Q)return Q;if(this._backtrack){for(var F in U)this[F]=U[F];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var Z,V,Q,q;this._more||(this.yytext="",this.match="");for(var U=this._currentRules(),F=0;F<U.length;F++)if(Q=this._input.match(this.rules[U[F]]),Q&&(!V||Q[0].length>V[0].length)){if(V=Q,q=F,this.options.backtrack_lexer){if(Z=this.test_match(Q,U[F]),Z!==!1)return Z;if(this._backtrack){V=!1;continue}else return!1}else if(!this.options.flex)break}return V?(Z=this.test_match(V,U[q]),Z!==!1?Z:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var V=this.next();return V||this.lex()},begin:function(V){this.conditionStack.push(V)},popState:function(){var V=this.conditionStack.length-1;return V>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(V){return V=this.conditionStack.length-1-Math.abs(V||0),V>=0?this.conditionStack[V]:"INITIAL"},pushState:function(V){this.begin(V)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(V,Q,q,U){switch(q){case 0:return this.begin("open_directive"),79;case 1:return this.begin("type_directive"),80;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),82;case 4:return 81;case 5:return 5;case 6:break;case 7:break;case 8:break;case 9:break;case 10:break;case 11:return 23;case 12:return this.begin("ID"),16;case 13:return this.begin("ID"),20;case 14:return Q.yytext=Q.yytext.trim(),this.begin("ALIAS"),69;case 15:return this.popState(),this.popState(),this.begin("LINE"),18;case 16:return this.popState(),this.popState(),5;case 17:return this.begin("LINE"),39;case 18:return this.begin("LINE"),41;case 19:return this.begin("LINE"),42;case 20:return this.begin("LINE"),43;case 21:return this.begin("LINE"),52;case 22:return this.begin("LINE"),45;case 23:return this.begin("LINE"),51;case 24:return this.begin("LINE"),47;case 25:return this.begin("LINE"),50;case 26:return this.begin("LINE"),49;case 27:return this.popState(),19;case 28:return 40;case 29:return 64;case 30:return 65;case 31:return 58;case 32:return 59;case 33:return 60;case 34:return 61;case 35:return 56;case 36:return 53;case 37:return this.begin("ID"),25;case 38:return this.begin("ID"),26;case 39:return 32;case 40:return 33;case 41:return this.begin("acc_title"),34;case 42:return this.popState(),"acc_title_value";case 43:return this.begin("acc_descr"),36;case 44:return this.popState(),"acc_descr_value";case 45:this.begin("acc_descr_multiline");break;case 46:this.popState();break;case 47:return"acc_descr_multiline_value";case 48:return 7;case 49:return 22;case 50:return 24;case 51:return 63;case 52:return 5;case 53:return Q.yytext=Q.yytext.trim(),69;case 54:return 72;case 55:return 73;case 56:return 70;case 57:return 71;case 58:return 74;case 59:return 75;case 60:return 76;case 61:return 77;case 62:return 78;case 63:return 67;case 64:return 68;case 65:return 5;case 66:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[0-9]+(?=[ \n]+))/i,/^(?:participant\b)/i,/^(?:actor\b)/i,/^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:critical\b)/i,/^(?:option\b)/i,/^(?:break\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:links\b)/i,/^(?:link\b)/i,/^(?:properties\b)/i,/^(?:details\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:title:\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:off\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{acc_descr_multiline:{rules:[46,47],inclusive:!1},acc_descr:{rules:[44],inclusive:!1},acc_title:{rules:[42],inclusive:!1},open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,14],inclusive:!1},ALIAS:{rules:[7,8,15,16],inclusive:!1},LINE:{rules:[7,8,27],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,12,13,17,18,19,20,21,22,23,24,25,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,45,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66],inclusive:!0}}};return it}();W.lexer=tt;function K(){this.yy={}}return K.prototype=W,W.Parser=K,new K}();H4.parser=H4;const bit=t=>t.match(/^\s*sequenceDiagram/)!==null;let hu,ns={},bi=[],u0=!1,G4;const _it=function(t,e,r){Xe.parseDirective(this,t,e,r)},j4=function(t,e,r,n){const i=ns[t];i&&e===i.name&&r==null||((r==null||r.text==null)&&(r={text:e,wrap:null,type:n}),(n==null||r.text==null)&&(r={text:e,wrap:null,type:n}),ns[t]={name:e,description:r.text,wrap:r.wrap===void 0&&ul()||!!r.wrap,prevActor:hu,links:{},properties:{},actorCnt:null,rectData:null,type:n||"participant"},hu&&ns[hu]&&(ns[hu].nextActor=t),hu=t)},vit=t=>{let e,r=0;for(e=0;e<bi.length;e++)bi[e].type===du.ACTIVE_START&&bi[e].from.actor===t&&r++,bi[e].type===du.ACTIVE_END&&bi[e].from.actor===t&&r--;return r},xit=function(t,e,r,n){bi.push({from:t,to:e,message:r.text,wrap:r.wrap===void 0&&ul()||!!r.wrap,answer:n})},hr=function(t,e,r={text:void 0,wrap:void 0},n){if(n===du.ACTIVE_END&&vit(t.actor)<1){let a=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw a.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},a}return bi.push({from:t,to:e,message:r.text,wrap:r.wrap===void 0&&ul()||!!r.wrap,type:n}),!0},kit=function(){return bi},wit=function(){return ns},fu=function(t){return ns[t]},Tit=function(){return Object.keys(ns)},Eit=function(){u0=!0},Cit=function(){u0=!1},Sit=()=>u0,Ait=function(t){G4=t},ul=()=>typeof G4<"u"?G4:nt().sequence.wrap,Mit=function(){ns={},bi=[],u0=!1,ci()},Lit=function(t){const e=t.trim(),r={text:e.replace(/^[:]?(?:no)?wrap:/,"").trim(),wrap:e.match(/^[:]?wrap:/)!==null?!0:e.match(/^[:]?nowrap:/)!==null?!1:void 0};return H.debug("parseMessage:",r),r},du={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25,AUTONUMBER:26,CRITICAL_START:27,CRITICAL_OPTION:28,CRITICAL_END:29,BREAK_START:30,BREAK_END:31},Rit={FILLED:0,OPEN:1},Iit={LEFTOF:0,RIGHTOF:1,OVER:2},hL=function(t,e,r){r.text,r.wrap===void 0&&ul()||r.wrap;const n=[].concat(t,t);bi.push({from:n[0],to:n[1],message:r.text,wrap:r.wrap===void 0&&ul()||!!r.wrap,type:du.NOTE,placement:e})},fL=function(t,e){const r=fu(t);try{let n=ai(e.text,nt());n=n.replace(/&amp;/g,"&"),n=n.replace(/&equals;/g,"=");const i=JSON.parse(n);$4(r,i)}catch(n){H.error("error while parsing actor link text",n)}},Nit=function(t,e){const r=fu(t);try{const s={};let o=ai(e.text,nt());var n=o.indexOf("@");o=o.replace(/&amp;/g,"&"),o=o.replace(/&equals;/g,"=");var i=o.slice(0,n-1).trim(),a=o.slice(n+1).trim();s[i]=a,$4(r,s)}catch(s){H.error("error while parsing actor link text",s)}};function $4(t,e){if(t.links==null)t.links=e;else for(let r in e)t.links[r]=e[r]}const dL=function(t,e){const r=fu(t);try{let n=ai(e.text,nt());const i=JSON.parse(n);pL(r,i)}catch(n){H.error("error while parsing actor properties text",n)}};function pL(t,e){if(t.properties==null)t.properties=e;else for(let r in e)t.properties[r]=e[r]}const gL=function(t,e){const r=fu(t),n=document.getElementById(e.text);try{const i=n.innerHTML,a=JSON.parse(i);a.properties&&pL(r,a.properties),a.links&&$4(r,a.links)}catch(i){H.error("error while parsing actor details text",i)}},Bit=function(t,e){if(typeof t<"u"&&typeof t.properties<"u")return t.properties[e]},yL=function(t){if(t instanceof Array)t.forEach(function(e){yL(e)});else switch(t.type){case"sequenceIndex":bi.push({from:void 0,to:void 0,message:{start:t.sequenceIndex,step:t.sequenceIndexStep,visible:t.sequenceVisible},wrap:!1,type:t.signalType});break;case"addParticipant":j4(t.actor,t.actor,t.description,"participant");break;case"addActor":j4(t.actor,t.actor,t.description,"actor");break;case"activeStart":hr(t.actor,void 0,void 0,t.signalType);break;case"activeEnd":hr(t.actor,void 0,void 0,t.signalType);break;case"addNote":hL(t.actor,t.placement,t.text);break;case"addLinks":fL(t.actor,t.text);break;case"addALink":Nit(t.actor,t.text);break;case"addProperties":dL(t.actor,t.text);break;case"addDetails":gL(t.actor,t.text);break;case"addMessage":hr(t.from,t.to,t.msg,t.signalType);break;case"loopStart":hr(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":hr(void 0,void 0,void 0,t.signalType);break;case"rectStart":hr(void 0,void 0,t.color,t.signalType);break;case"rectEnd":hr(void 0,void 0,void 0,t.signalType);break;case"optStart":hr(void 0,void 0,t.optText,t.signalType);break;case"optEnd":hr(void 0,void 0,void 0,t.signalType);break;case"altStart":hr(void 0,void 0,t.altText,t.signalType);break;case"else":hr(void 0,void 0,t.altText,t.signalType);break;case"altEnd":hr(void 0,void 0,void 0,t.signalType);break;case"setAccTitle":Yn(t.text);break;case"parStart":hr(void 0,void 0,t.parText,t.signalType);break;case"and":hr(void 0,void 0,t.parText,t.signalType);break;case"parEnd":hr(void 0,void 0,void 0,t.signalType);break;case"criticalStart":hr(void 0,void 0,t.criticalText,t.signalType);break;case"option":hr(void 0,void 0,t.optionText,t.signalType);break;case"criticalEnd":hr(void 0,void 0,void 0,t.signalType);break;case"breakStart":hr(void 0,void 0,t.breakText,t.signalType);break;case"breakEnd":hr(void 0,void 0,void 0,t.signalType);break}},mL={addActor:j4,addMessage:xit,addSignal:hr,addLinks:fL,addDetails:gL,addProperties:dL,autoWrap:ul,setWrap:Ait,enableSequenceNumbers:Eit,disableSequenceNumbers:Cit,showSequenceNumbers:Sit,getMessages:kit,getActors:wit,getActor:fu,getActorKeys:Tit,getActorProperty:Bit,getAccTitle:ui,getDiagramTitle:u1,setDiagramTitle:c1,parseDirective:_it,getConfig:()=>nt().sequence,clear:Mit,parseMessage:Lit,LINETYPE:du,ARROWTYPE:Rit,PLACEMENT:Iit,addNote:hL,setAccTitle:Yn,apply:yL,setAccDescription:hi,getAccDescription:fi};let X4=[];const Dit=t=>{X4.push(t)},bL=()=>{X4.forEach(t=>{t()}),X4=[]},h0=function(t,e){const r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),typeof e.class<"u"&&r.attr("class",e.class),r},_L=(t,e)=>{Dit(()=>{const r=document.querySelectorAll(t);r.length!==0&&(r[0].addEventListener("mouseover",function(){qit("actor"+e+"_popup")}),r[0].addEventListener("mouseout",function(){Vit("actor"+e+"_popup")}))})},Oit=function(t,e,r,n,i){if(e.links===void 0||e.links===null||Object.keys(e.links).length===0)return{height:0,width:0};const a=e.links,s=e.actorCnt,o=e.rectData;var l="none";i&&(l="block !important");const u=t.append("g");u.attr("id","actor"+s+"_popup"),u.attr("class","actorPopupMenu"),u.attr("display",l),_L("#actor"+s+"_popup",s);var h="";typeof o.class<"u"&&(h=" "+o.class);let d=o.width>r?o.width:r;const f=u.append("rect");if(f.attr("class","actorPopupMenuPanel"+h),f.attr("x",o.x),f.attr("y",o.height),f.attr("fill",o.fill),f.attr("stroke",o.stroke),f.attr("width",d),f.attr("height",o.height),f.attr("rx",o.rx),f.attr("ry",o.ry),a!=null){var p=20;for(let y in a){var m=u.append("a"),_=ki(a[y]);m.attr("xlink:href",_),m.attr("target","_blank"),eat(n)(y,m,o.x+10,o.height+p,d,20,{class:"actor"},n),p+=30}}return f.attr("height",p),{height:o.height+p,width:d}},vL=function(t,e,r,n){const i=t.append("image");i.attr("x",e),i.attr("y",r);var a=ki(n);i.attr("xlink:href",a)},xL=function(t,e,r,n){const i=t.append("use");i.attr("x",e),i.attr("y",r);var a=ki(n);i.attr("xlink:href","#"+a)},Fit=function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'block'; }"},Pit=function(t){return"var pu = document.getElementById('"+t+"'); if (pu != null) { pu.style.display = 'none'; }"},qit=function(t){var e=document.getElementById(t);e!=null&&(e.style.display="block")},Vit=function(t){var e=document.getElementById(t);e!=null&&(e.style.display="none")},hl=function(t,e){let r=0,n=0;const i=e.text.split(pe.lineBreakRegex);let a=[],s=0,o=()=>e.y;if(typeof e.valign<"u"&&typeof e.textMargin<"u"&&e.textMargin>0)switch(e.valign){case"top":case"start":o=()=>Math.round(e.y+e.textMargin);break;case"middle":case"center":o=()=>Math.round(e.y+(r+n+e.textMargin)/2);break;case"bottom":case"end":o=()=>Math.round(e.y+(r+n+2*e.textMargin)-e.textMargin);break}if(typeof e.anchor<"u"&&typeof e.textMargin<"u"&&typeof e.width<"u")switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="middle",e.alignmentBaseline="middle";break}for(let l=0;l<i.length;l++){let u=i[l];typeof e.textMargin<"u"&&e.textMargin===0&&typeof e.fontSize<"u"&&(s=l*e.fontSize);const h=t.append("text");if(h.attr("x",e.x),h.attr("y",o()),typeof e.anchor<"u"&&h.attr("text-anchor",e.anchor).attr("dominant-baseline",e.dominantBaseline).attr("alignment-baseline",e.alignmentBaseline),typeof e.fontFamily<"u"&&h.style("font-family",e.fontFamily),typeof e.fontSize<"u"&&h.style("font-size",e.fontSize),typeof e.fontWeight<"u"&&h.style("font-weight",e.fontWeight),typeof e.fill<"u"&&h.attr("fill",e.fill),typeof e.class<"u"&&h.attr("class",e.class),typeof e.dy<"u"?h.attr("dy",e.dy):s!==0&&h.attr("dy",s),e.tspan){const d=h.append("tspan");d.attr("x",e.x),typeof e.fill<"u"&&d.attr("fill",e.fill),d.text(u)}else h.text(u);typeof e.valign<"u"&&typeof e.textMargin<"u"&&e.textMargin>0&&(n+=(h._groups||h)[0][0].getBBox().height,r=n),a.push(h)}return a},kL=function(t,e){function r(i,a,s,o,l){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+o-l)+" "+(i+s-l*1.2)+","+(a+o)+" "+i+","+(a+o)}const n=t.append("polygon");return n.attr("points",r(e.x,e.y,e.width,e.height,7)),n.attr("class","labelBox"),e.y=e.y+e.height/2,hl(t,e),n};let Yi=-1;const wL=(t,e)=>{!t.selectAll||t.selectAll(".actor-line").attr("class","200").attr("y2",e-55)},zit=function(t,e,r){const n=e.x+e.width/2,i=t.append("g");var a=i;e.y===0&&(Yi++,a.append("line").attr("id","actor"+Yi).attr("x1",n).attr("y1",5).attr("x2",n).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"),a=i.append("g"),e.actorCnt=Yi,e.links!=null&&(a.attr("id","root-"+Yi),_L("#root-"+Yi,Yi)));const s=f0();var o="actor";e.properties!=null&&e.properties.class?o=e.properties.class:s.fill="#eaeaea",s.x=e.x,s.y=e.y,s.width=e.width,s.height=e.height,s.class=o,s.rx=3,s.ry=3;const l=h0(a,s);if(e.rectData=s,e.properties!=null&&e.properties.icon){const h=e.properties.icon.trim();h.charAt(0)==="@"?xL(a,s.x+s.width-20,s.y+10,h.substr(1)):vL(a,s.x+s.width-20,s.y+10,h)}TL(r)(e.description,a,s.x,s.y,s.width,s.height,{class:"actor"},r);let u=e.height;if(l.node){const h=l.node().getBBox();e.height=h.height,u=h.height}return u},Yit=function(t,e,r){const n=e.x+e.width/2;e.y===0&&(Yi++,t.append("line").attr("id","actor"+Yi).attr("x1",n).attr("y1",80).attr("x2",n).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));const i=t.append("g");i.attr("class","actor-man");const a=f0();a.x=e.x,a.y=e.y,a.fill="#eaeaea",a.width=e.width,a.height=e.height,a.class="actor",a.rx=3,a.ry=3,i.append("line").attr("id","actor-man-torso"+Yi).attr("x1",n).attr("y1",e.y+25).attr("x2",n).attr("y2",e.y+45),i.append("line").attr("id","actor-man-arms"+Yi).attr("x1",n-18).attr("y1",e.y+33).attr("x2",n+18).attr("y2",e.y+33),i.append("line").attr("x1",n-18).attr("y1",e.y+60).attr("x2",n).attr("y2",e.y+45),i.append("line").attr("x1",n).attr("y1",e.y+45).attr("x2",n+16).attr("y2",e.y+60);const s=i.append("circle");s.attr("cx",e.x+e.width/2),s.attr("cy",e.y+10),s.attr("r",15),s.attr("width",e.width),s.attr("height",e.height);const o=i.node().getBBox();return e.height=o.height,TL(r)(e.description,i,a.x,a.y+35,a.width,a.height,{class:"actor"},r),e.height},Uit=function(t,e,r){switch(e.type){case"actor":return Yit(t,e,r);case"participant":return zit(t,e,r)}},Wit=function(t){return t.append("g")},Hit=function(t,e,r,n,i){const a=f0(),s=e.anchored;a.x=e.startx,a.y=e.starty,a.class="activation"+i%3,a.width=e.stopx-e.startx,a.height=r-e.starty,h0(s,a)},Git=function(t,e,r,n){const{boxMargin:i,boxTextMargin:a,labelBoxHeight:s,labelBoxWidth:o,messageFontFamily:l,messageFontSize:u,messageFontWeight:h}=n,d=t.append("g"),f=function(_,y,b,x){return d.append("line").attr("x1",_).attr("y1",y).attr("x2",b).attr("y2",x).attr("class","loopLine")};f(e.startx,e.starty,e.stopx,e.starty),f(e.stopx,e.starty,e.stopx,e.stopy),f(e.startx,e.stopy,e.stopx,e.stopy),f(e.startx,e.starty,e.startx,e.stopy),typeof e.sections<"u"&&e.sections.forEach(function(_){f(e.startx,_.y,e.stopx,_.y).style("stroke-dasharray","3, 3")});let p=K4();p.text=r,p.x=e.startx,p.y=e.starty,p.fontFamily=l,p.fontSize=u,p.fontWeight=h,p.anchor="middle",p.valign="middle",p.tspan=!1,p.width=o||50,p.height=s||20,p.textMargin=a,p.class="labelText",kL(d,p),p=K4(),p.text=e.title,p.x=e.startx+o/2+(e.stopx-e.startx)/2,p.y=e.starty+i+a,p.anchor="middle",p.valign="middle",p.textMargin=a,p.class="loopText",p.fontFamily=l,p.fontSize=u,p.fontWeight=h,p.wrap=!0;let m=hl(d,p);return typeof e.sectionTitles<"u"&&e.sectionTitles.forEach(function(_,y){if(_.message){p.text=_.message,p.x=e.startx+(e.stopx-e.startx)/2,p.y=e.sections[y].y+i+a,p.class="loopText",p.anchor="middle",p.valign="middle",p.tspan=!1,p.fontFamily=l,p.fontSize=u,p.fontWeight=h,p.wrap=e.wrap,m=hl(d,p);let b=Math.round(m.map(x=>(x._groups||x)[0][0].getBBox().height).reduce((x,k)=>x+k));e.sections[y].height+=b-(i+a)}}),e.height=Math.round(e.stopy-e.starty),d},jit=function(t,e){h0(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},$it=function(t){t.append("defs").append("symbol").attr("id","database").attr("fill-rule","evenodd").attr("clip-rule","evenodd").append("path").attr("transform","scale(.5)").attr("d","M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z")},Xit=function(t){t.append("defs").append("symbol").attr("id","computer").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z")},Kit=function(t){t.append("defs").append("symbol").attr("id","clock").attr("width","24").attr("height","24").append("path").attr("transform","scale(.5)").attr("d","M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z")},Zit=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},Qit=function(t){t.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},Jit=function(t){t.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},tat=function(t){const r=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},K4=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},f0=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},TL=function(){function t(i,a,s,o,l,u,h){const d=a.append("text").attr("x",s+l/2).attr("y",o+u/2+5).style("text-anchor","middle").text(i);n(d,h)}function e(i,a,s,o,l,u,h,d){const{actorFontSize:f,actorFontFamily:p,actorFontWeight:m}=d;let _=f&&f.replace?f.replace("px",""):f;const y=i.split(pe.lineBreakRegex);for(let b=0;b<y.length;b++){const x=b*_-_*(y.length-1)/2,k=a.append("text").attr("x",s+l/2).attr("y",o).style("text-anchor","middle").style("font-size",f).style("font-weight",m).style("font-family",p);k.append("tspan").attr("x",s+l/2).attr("dy",x).text(y[b]),k.attr("y",o+u/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(k,h)}}function r(i,a,s,o,l,u,h,d){const f=a.append("switch"),m=f.append("foreignObject").attr("x",s).attr("y",o).attr("width",l).attr("height",u).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");m.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,f,s,o,l,u,h,d),n(m,h)}function n(i,a){for(const s in a)a.hasOwnProperty(s)&&i.attr(s,a[s])}return function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),eat=function(){function t(i,a,s,o,l,u,h){const d=a.append("text").attr("x",s).attr("y",o).style("text-anchor","start").text(i);n(d,h)}function e(i,a,s,o,l,u,h,d){const{actorFontSize:f,actorFontFamily:p,actorFontWeight:m}=d,_=i.split(pe.lineBreakRegex);for(let y=0;y<_.length;y++){const b=y*f-f*(_.length-1)/2,x=a.append("text").attr("x",s).attr("y",o).style("text-anchor","start").style("font-size",f).style("font-weight",m).style("font-family",p);x.append("tspan").attr("x",s).attr("dy",b).text(_[y]),x.attr("y",o+u/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(x,h)}}function r(i,a,s,o,l,u,h,d){const f=a.append("switch"),m=f.append("foreignObject").attr("x",s).attr("y",o).attr("width",l).attr("height",u).append("xhtml:div").style("display","table").style("height","100%").style("width","100%");m.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,f,s,o,l,u,h,d),n(m,h)}function n(i,a){for(const s in a)a.hasOwnProperty(s)&&i.attr(s,a[s])}return function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),or={drawRect:h0,drawText:hl,drawLabel:kL,drawActor:Uit,drawPopup:Oit,drawImage:vL,drawEmbeddedImage:xL,anchorElement:Wit,drawActivation:Hit,drawLoop:Git,drawBackgroundRect:jit,insertArrowHead:Zit,insertArrowFilledHead:Qit,insertSequenceNumber:Jit,insertArrowCrossHead:tat,insertDatabaseIcon:$it,insertComputerIcon:Xit,insertClockIcon:Kit,getTextObj:K4,getNoteRect:f0,popupMenu:Fit,popdownMenu:Pit,fixLifeLineHeights:wL,sanitizeUrl:ki};let dt={};const Bt={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,this.actors.length===0?[0]:this.actors.map(t=>t.height||0))+(this.loops.length===0?0:this.loops.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.messages.length===0?0:this.messages.map(t=>t.height||0).reduce((t,e)=>t+e))+(this.notes.length===0?0:this.notes.map(t=>t.height||0).reduce((t,e)=>t+e))},clear:function(){this.actors=[],this.loops=[],this.messages=[],this.notes=[]},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,CL(nt())},updateVal:function(t,e,r,n){typeof t[e]>"u"?t[e]=r:t[e]=n(r,t[e])},updateBounds:function(t,e,r,n){const i=this;let a=0;function s(o){return function(u){a++;const h=i.sequenceItems.length-a+1;i.updateVal(u,"starty",e-h*dt.boxMargin,Math.min),i.updateVal(u,"stopy",n+h*dt.boxMargin,Math.max),i.updateVal(Bt.data,"startx",t-h*dt.boxMargin,Math.min),i.updateVal(Bt.data,"stopx",r+h*dt.boxMargin,Math.max),o!=="activation"&&(i.updateVal(u,"startx",t-h*dt.boxMargin,Math.min),i.updateVal(u,"stopx",r+h*dt.boxMargin,Math.max),i.updateVal(Bt.data,"starty",e-h*dt.boxMargin,Math.min),i.updateVal(Bt.data,"stopy",n+h*dt.boxMargin,Math.max))}}this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},insert:function(t,e,r,n){const i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),o=Math.max(e,n);this.updateVal(Bt.data,"startx",i,Math.min),this.updateVal(Bt.data,"starty",s,Math.min),this.updateVal(Bt.data,"stopx",a,Math.max),this.updateVal(Bt.data,"stopy",o,Math.max),this.updateBounds(i,s,a,o)},newActivation:function(t,e,r){const n=r[t.from.actor],i=d0(t.from.actor).length||0,a=n.x+n.width/2+(i-1)*dt.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+dt.activationWidth,stopy:void 0,actor:t.from.actor,anchored:or.anchorElement(e)})},endActivation:function(t){const e=this.activations.map(function(r){return r.actor}).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(t={message:void 0,wrap:!1,width:void 0},e){return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(t={message:void 0,wrap:!1,width:void 0},e){this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){const e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:Bt.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},rat=function(t,e){Bt.bumpVerticalPos(dt.boxMargin),e.height=dt.boxMargin,e.starty=Bt.getVerticalPos();const r=or.getNoteRect();r.x=e.startx,r.y=e.starty,r.width=e.width||dt.width,r.class="note";const n=t.append("g"),i=or.drawRect(n,r),a=or.getTextObj();a.x=e.startx,a.y=e.starty,a.width=r.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=dt.noteFontFamily,a.fontSize=dt.noteFontSize,a.fontWeight=dt.noteFontWeight,a.anchor=dt.noteAlign,a.textMargin=dt.noteMargin,a.valign="center";const s=hl(n,a),o=Math.round(s.map(l=>(l._groups||l)[0][0].getBBox().height).reduce((l,u)=>l+u));i.attr("height",o+2*dt.noteMargin),e.height+=o+2*dt.noteMargin,Bt.bumpVerticalPos(o+2*dt.noteMargin),e.stopy=e.starty+o+2*dt.noteMargin,e.stopx=e.startx+r.width,Bt.insert(e.startx,e.starty,e.stopx,e.stopy),Bt.models.addNote(e)},fl=t=>({fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}),dl=t=>({fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}),Z4=t=>({fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}),nat=function(t,e){Bt.bumpVerticalPos(10);const{startx:r,stopx:n,message:i}=e,a=pe.splitBreaks(i).length,s=Se.calculateTextDimensions(i,fl(dt)),o=s.height/a;e.height+=o,Bt.bumpVerticalPos(o);let l,u=s.height-10;const h=s.width;if(r===n){l=Bt.getVerticalPos()+u,dt.rightAngles||(u+=dt.boxMargin,l=Bt.getVerticalPos()+u),u+=30;const d=Math.max(h/2,dt.width/2);Bt.insert(r-d,Bt.getVerticalPos()-10+u,n+d,Bt.getVerticalPos()+30+u)}else u+=dt.boxMargin,l=Bt.getVerticalPos()+u,Bt.insert(r,l-10,n,l);return Bt.bumpVerticalPos(u),e.height+=u,e.stopy=e.starty+e.height,Bt.insert(e.fromBounds,e.starty,e.toBounds,e.stopy),l},iat=function(t,e,r,n){const{startx:i,stopx:a,starty:s,message:o,type:l,sequenceIndex:u,sequenceVisible:h}=e,d=Se.calculateTextDimensions(o,fl(dt)),f=or.getTextObj();f.x=i,f.y=s+10,f.width=a-i,f.class="messageText",f.dy="1em",f.text=o,f.fontFamily=dt.messageFontFamily,f.fontSize=dt.messageFontSize,f.fontWeight=dt.messageFontWeight,f.anchor=dt.messageAlign,f.valign="center",f.textMargin=dt.wrapPadding,f.tspan=!1,hl(t,f);const p=d.width;let m;i===a?dt.rightAngles?m=t.append("path").attr("d",`M  ${i},${r} H ${i+Math.max(dt.width/2,p/2)} V ${r+25} H ${i}`):m=t.append("path").attr("d","M "+i+","+r+" C "+(i+60)+","+(r-10)+" "+(i+60)+","+(r+30)+" "+i+","+(r+20)):(m=t.append("line"),m.attr("x1",i),m.attr("y1",r),m.attr("x2",a),m.attr("y2",r)),l===n.db.LINETYPE.DOTTED||l===n.db.LINETYPE.DOTTED_CROSS||l===n.db.LINETYPE.DOTTED_POINT||l===n.db.LINETYPE.DOTTED_OPEN?(m.style("stroke-dasharray","3, 3"),m.attr("class","messageLine1")):m.attr("class","messageLine0");let _="";dt.arrowMarkerAbsolute&&(_=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,_=_.replace(/\(/g,"\\("),_=_.replace(/\)/g,"\\)")),m.attr("stroke-width",2),m.attr("stroke","none"),m.style("fill","none"),(l===n.db.LINETYPE.SOLID||l===n.db.LINETYPE.DOTTED)&&m.attr("marker-end","url("+_+"#arrowhead)"),(l===n.db.LINETYPE.SOLID_POINT||l===n.db.LINETYPE.DOTTED_POINT)&&m.attr("marker-end","url("+_+"#filled-head)"),(l===n.db.LINETYPE.SOLID_CROSS||l===n.db.LINETYPE.DOTTED_CROSS)&&m.attr("marker-end","url("+_+"#crosshead)"),(h||dt.showSequenceNumbers)&&(m.attr("marker-start","url("+_+"#sequencenumber)"),t.append("text").attr("x",i).attr("y",r+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("class","sequenceNumber").text(u))},Q4=function(t,e,r,n,i,a){if(i.hideUnusedParticipants===!0){const u=new Set;a.forEach(h=>{u.add(h.from),u.add(h.to)}),r=r.filter(h=>u.has(h))}let s=0,o=0,l=0;for(let u=0;u<r.length;u++){const h=e[r[u]];h.width=h.width||dt.width,h.height=Math.max(h.height||dt.height,dt.height),h.margin=h.margin||dt.actorMargin,h.x=s+o,h.y=n;const d=or.drawActor(t,h,dt);l=Math.max(l,d),Bt.insert(h.x,n,h.x+h.width,h.height),s+=h.width,o+=h.margin,Bt.models.addActor(h)}Bt.bumpVerticalPos(l)},EL=function(t,e,r,n){let i=0,a=0;for(let s=0;s<r.length;s++){const o=e[r[s]],l=oat(o),u=or.drawPopup(t,o,l,dt,dt.forceMenus,n);u.height>i&&(i=u.height),u.width+o.x>a&&(a=u.width+o.x)}return{maxHeight:i,maxWidth:a}},CL=function(t){fr(dt,t),t.fontFamily&&(dt.actorFontFamily=dt.noteFontFamily=dt.messageFontFamily=t.fontFamily),t.fontSize&&(dt.actorFontSize=dt.noteFontSize=dt.messageFontSize=t.fontSize),t.fontWeight&&(dt.actorFontWeight=dt.noteFontWeight=dt.messageFontWeight=t.fontWeight)},d0=function(t){return Bt.activations.filter(function(e){return e.actor===t})},SL=function(t,e){const r=e[t],n=d0(t),i=n.reduce(function(s,o){return Math.min(s,o.startx)},r.x+r.width/2),a=n.reduce(function(s,o){return Math.max(s,o.stopx)},r.x+r.width/2);return[i,a]};function Ui(t,e,r,n,i){Bt.bumpVerticalPos(r);let a=n;if(e.id&&e.message&&t[e.id]){const s=t[e.id].width,o=fl(dt);e.message=Se.wrapLabel(`[${e.message}]`,s-2*dt.wrapPadding,o),e.width=s,e.wrap=!0;const l=Se.calculateTextDimensions(e.message,o),u=Math.max(l.height,dt.labelBoxHeight);a=n+u,H.debug(`${u} - ${e.message}`)}i(e),Bt.bumpVerticalPos(a)}const aat=function(t,e,r,n){const{securityLevel:i,sequence:a}=nt();dt=a;let s;i==="sandbox"&&(s=St("#i"+e));const o=St(i==="sandbox"?s.nodes()[0].contentDocument.body:"body"),l=i==="sandbox"?s.nodes()[0].contentDocument:document;Bt.init(),H.debug(n.db);const u=i==="sandbox"?o.select(`[id="${e}"]`):St(`[id="${e}"]`),h=n.db.getActors(),d=n.db.getActorKeys(),f=n.db.getMessages(),p=n.db.getDiagramTitle(),m=sat(h,f,n);dt.height=lat(h,m),or.insertComputerIcon(u),or.insertDatabaseIcon(u),or.insertClockIcon(u),Q4(u,h,d,0,dt,f);const _=hat(f,h,m,n);or.insertArrowHead(u),or.insertArrowCrossHead(u),or.insertArrowFilledHead(u),or.insertSequenceNumber(u);function y(B,w){const D=Bt.endActivation(B);D.starty+18>w&&(D.starty=w-6,w+=12),or.drawActivation(u,D,w,dt,d0(B.from.actor).length),Bt.insert(D.startx,w-10,D.stopx,w)}let b=1,x=1;const k=[];f.forEach(function(B){let w,D,N;switch(B.type){case n.db.LINETYPE.NOTE:D=B.noteModel,rat(u,D);break;case n.db.LINETYPE.ACTIVE_START:Bt.newActivation(B,u,h);break;case n.db.LINETYPE.ACTIVE_END:y(B,Bt.getVerticalPos());break;case n.db.LINETYPE.LOOP_START:Ui(_,B,dt.boxMargin,dt.boxMargin+dt.boxTextMargin,z=>Bt.newLoop(z));break;case n.db.LINETYPE.LOOP_END:w=Bt.endLoop(),or.drawLoop(u,w,"loop",dt),Bt.bumpVerticalPos(w.stopy-Bt.getVerticalPos()),Bt.models.addLoop(w);break;case n.db.LINETYPE.RECT_START:Ui(_,B,dt.boxMargin,dt.boxMargin,z=>Bt.newLoop(void 0,z.message));break;case n.db.LINETYPE.RECT_END:w=Bt.endLoop(),or.drawBackgroundRect(u,w),Bt.models.addLoop(w),Bt.bumpVerticalPos(w.stopy-Bt.getVerticalPos());break;case n.db.LINETYPE.OPT_START:Ui(_,B,dt.boxMargin,dt.boxMargin+dt.boxTextMargin,z=>Bt.newLoop(z));break;case n.db.LINETYPE.OPT_END:w=Bt.endLoop(),or.drawLoop(u,w,"opt",dt),Bt.bumpVerticalPos(w.stopy-Bt.getVerticalPos()),Bt.models.addLoop(w);break;case n.db.LINETYPE.ALT_START:Ui(_,B,dt.boxMargin,dt.boxMargin+dt.boxTextMargin,z=>Bt.newLoop(z));break;case n.db.LINETYPE.ALT_ELSE:Ui(_,B,dt.boxMargin+dt.boxTextMargin,dt.boxMargin,z=>Bt.addSectionToLoop(z));break;case n.db.LINETYPE.ALT_END:w=Bt.endLoop(),or.drawLoop(u,w,"alt",dt),Bt.bumpVerticalPos(w.stopy-Bt.getVerticalPos()),Bt.models.addLoop(w);break;case n.db.LINETYPE.PAR_START:Ui(_,B,dt.boxMargin,dt.boxMargin+dt.boxTextMargin,z=>Bt.newLoop(z));break;case n.db.LINETYPE.PAR_AND:Ui(_,B,dt.boxMargin+dt.boxTextMargin,dt.boxMargin,z=>Bt.addSectionToLoop(z));break;case n.db.LINETYPE.PAR_END:w=Bt.endLoop(),or.drawLoop(u,w,"par",dt),Bt.bumpVerticalPos(w.stopy-Bt.getVerticalPos()),Bt.models.addLoop(w);break;case n.db.LINETYPE.AUTONUMBER:b=B.message.start||b,x=B.message.step||x,B.message.visible?n.db.enableSequenceNumbers():n.db.disableSequenceNumbers();break;case n.db.LINETYPE.CRITICAL_START:Ui(_,B,dt.boxMargin,dt.boxMargin+dt.boxTextMargin,z=>Bt.newLoop(z));break;case n.db.LINETYPE.CRITICAL_OPTION:Ui(_,B,dt.boxMargin+dt.boxTextMargin,dt.boxMargin,z=>Bt.addSectionToLoop(z));break;case n.db.LINETYPE.CRITICAL_END:w=Bt.endLoop(),or.drawLoop(u,w,"critical",dt),Bt.bumpVerticalPos(w.stopy-Bt.getVerticalPos()),Bt.models.addLoop(w);break;case n.db.LINETYPE.BREAK_START:Ui(_,B,dt.boxMargin,dt.boxMargin+dt.boxTextMargin,z=>Bt.newLoop(z));break;case n.db.LINETYPE.BREAK_END:w=Bt.endLoop(),or.drawLoop(u,w,"break",dt),Bt.bumpVerticalPos(w.stopy-Bt.getVerticalPos()),Bt.models.addLoop(w);break;default:try{N=B.msgModel,N.starty=Bt.getVerticalPos(),N.sequenceIndex=b,N.sequenceVisible=n.db.showSequenceNumbers();const z=nat(u,N);k.push({messageModel:N,lineStarty:z}),Bt.models.addMessage(N)}catch(z){H.error("error while drawing message",z)}}[n.db.LINETYPE.SOLID_OPEN,n.db.LINETYPE.DOTTED_OPEN,n.db.LINETYPE.SOLID,n.db.LINETYPE.DOTTED,n.db.LINETYPE.SOLID_CROSS,n.db.LINETYPE.DOTTED_CROSS,n.db.LINETYPE.SOLID_POINT,n.db.LINETYPE.DOTTED_POINT].includes(B.type)&&(b=b+x)}),k.forEach(B=>iat(u,B.messageModel,B.lineStarty,n)),dt.mirrorActors&&(Bt.bumpVerticalPos(dt.boxMargin*2),Q4(u,h,d,Bt.getVerticalPos(),dt,f),Bt.bumpVerticalPos(dt.boxMargin),wL(u,Bt.getVerticalPos()));const T=EL(u,h,d,l),{bounds:C}=Bt.getBounds();H.debug("For line height fix Querying: #"+e+" .actor-line"),Nu("#"+e+" .actor-line").attr("y2",C.stopy);let S=C.stopy-C.starty;S<T.maxHeight&&(S=T.maxHeight);let R=S+2*dt.diagramMarginY;dt.mirrorActors&&(R=R-dt.boxMargin+dt.bottomMarginAdj);let A=C.stopx-C.startx;A<T.maxWidth&&(A=T.maxWidth);const L=A+2*dt.diagramMarginX;p&&u.append("text").text(p).attr("x",(C.stopx-C.startx)/2-2*dt.diagramMarginX).attr("y",-25),li(u,R,L,dt.useMaxWidth);const v=p?40:0;u.attr("viewBox",C.startx-dt.diagramMarginX+" -"+(dt.diagramMarginY+v)+" "+L+" "+(R+v)),bn(n.db,u,e),H.debug("models:",Bt.models)},sat=function(t,e,r){const n={};return e.forEach(function(i){if(t[i.to]&&t[i.from]){const a=t[i.to];if(i.placement===r.db.PLACEMENT.LEFTOF&&!a.prevActor||i.placement===r.db.PLACEMENT.RIGHTOF&&!a.nextActor)return;const s=i.placement!==void 0,o=!s,l=s?dl(dt):fl(dt),u=i.wrap?Se.wrapLabel(i.message,dt.width-2*dt.wrapPadding,l):i.message,d=Se.calculateTextDimensions(u,l).width+2*dt.wrapPadding;o&&i.from===a.nextActor?n[i.to]=Math.max(n[i.to]||0,d):o&&i.from===a.prevActor?n[i.from]=Math.max(n[i.from]||0,d):o&&i.from===i.to?(n[i.from]=Math.max(n[i.from]||0,d/2),n[i.to]=Math.max(n[i.to]||0,d/2)):i.placement===r.db.PLACEMENT.RIGHTOF?n[i.from]=Math.max(n[i.from]||0,d):i.placement===r.db.PLACEMENT.LEFTOF?n[a.prevActor]=Math.max(n[a.prevActor]||0,d):i.placement===r.db.PLACEMENT.OVER&&(a.prevActor&&(n[a.prevActor]=Math.max(n[a.prevActor]||0,d/2)),a.nextActor&&(n[i.from]=Math.max(n[i.from]||0,d/2)))}}),H.debug("maxMessageWidthPerActor:",n),n},oat=function(t){let e=0;const r=Z4(dt);for(const n in t.links){const a=Se.calculateTextDimensions(n,r).width+2*dt.wrapPadding+2*dt.boxMargin;e<a&&(e=a)}return e},lat=function(t,e){let r=0;Object.keys(t).forEach(n=>{const i=t[n];i.wrap&&(i.description=Se.wrapLabel(i.description,dt.width-2*dt.wrapPadding,Z4(dt)));const a=Se.calculateTextDimensions(i.description,Z4(dt));i.width=i.wrap?dt.width:Math.max(dt.width,a.width+2*dt.wrapPadding),i.height=i.wrap?Math.max(a.height,dt.height):dt.height,r=Math.max(r,i.height)});for(const n in e){const i=t[n];if(!i)continue;const a=t[i.nextActor];if(!a)continue;const o=e[n]+dt.actorMargin-i.width/2-a.width/2;i.margin=Math.max(o,dt.actorMargin)}return Math.max(r,dt.height)},cat=function(t,e,r){const n=e[t.from].x,i=e[t.to].x,a=t.wrap&&t.message;let s=Se.calculateTextDimensions(a?Se.wrapLabel(t.message,dt.width,dl(dt)):t.message,dl(dt));const o={width:a?dt.width:Math.max(dt.width,s.width+2*dt.noteMargin),height:0,startx:e[t.from].x,stopx:0,starty:0,stopy:0,message:t.message};return t.placement===r.db.PLACEMENT.RIGHTOF?(o.width=a?Math.max(dt.width,s.width):Math.max(e[t.from].width/2+e[t.to].width/2,s.width+2*dt.noteMargin),o.startx=n+(e[t.from].width+dt.actorMargin)/2):t.placement===r.db.PLACEMENT.LEFTOF?(o.width=Math.max(a?dt.width:e[t.from].width/2+e[t.to].width/2,s.width+2*dt.noteMargin),o.startx=n-o.width+(e[t.from].width-dt.actorMargin)/2):t.to===t.from?(s=Se.calculateTextDimensions(a?Se.wrapLabel(t.message,Math.max(dt.width,e[t.from].width),dl(dt)):t.message,dl(dt)),o.width=a?Math.max(dt.width,e[t.from].width):Math.max(e[t.from].width,dt.width,s.width+2*dt.noteMargin),o.startx=n+(e[t.from].width-o.width)/2):(o.width=Math.abs(n+e[t.from].width/2-(i+e[t.to].width/2))+dt.actorMargin,o.startx=n<i?n+e[t.from].width/2-dt.actorMargin/2:i+e[t.to].width/2-dt.actorMargin/2),a&&(o.message=Se.wrapLabel(t.message,o.width-2*dt.wrapPadding,dl(dt))),H.debug(`NM:[${o.startx},${o.stopx},${o.starty},${o.stopy}:${o.width},${o.height}=${t.message}]`),o},uat=function(t,e,r){let n=!1;if([r.db.LINETYPE.SOLID_OPEN,r.db.LINETYPE.DOTTED_OPEN,r.db.LINETYPE.SOLID,r.db.LINETYPE.DOTTED,r.db.LINETYPE.SOLID_CROSS,r.db.LINETYPE.DOTTED_CROSS,r.db.LINETYPE.SOLID_POINT,r.db.LINETYPE.DOTTED_POINT].includes(t.type)&&(n=!0),!n)return{};const i=SL(t.from,e),a=SL(t.to,e),s=i[0]<=a[0]?1:0,o=i[0]<a[0]?0:1,l=i.concat(a),u=Math.abs(a[o]-i[s]);t.wrap&&t.message&&(t.message=Se.wrapLabel(t.message,Math.max(u+2*dt.wrapPadding,dt.width),fl(dt)));const h=Se.calculateTextDimensions(t.message,fl(dt));return{width:Math.max(t.wrap?0:h.width+2*dt.wrapPadding,u+2*dt.wrapPadding,dt.width),height:0,startx:i[s],stopx:a[o],starty:0,stopy:0,message:t.message,type:t.type,wrap:t.wrap,fromBounds:Math.min.apply(null,l),toBounds:Math.max.apply(null,l)}},hat=function(t,e,r,n){const i={},a=[];let s,o,l;return t.forEach(function(u){switch(u.id=Se.random({length:10}),u.type){case n.db.LINETYPE.LOOP_START:case n.db.LINETYPE.ALT_START:case n.db.LINETYPE.OPT_START:case n.db.LINETYPE.PAR_START:case n.db.LINETYPE.CRITICAL_START:case n.db.LINETYPE.BREAK_START:a.push({id:u.id,msg:u.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case n.db.LINETYPE.ALT_ELSE:case n.db.LINETYPE.PAR_AND:case n.db.LINETYPE.CRITICAL_OPTION:u.message&&(s=a.pop(),i[s.id]=s,i[u.id]=s,a.push(s));break;case n.db.LINETYPE.LOOP_END:case n.db.LINETYPE.ALT_END:case n.db.LINETYPE.OPT_END:case n.db.LINETYPE.PAR_END:case n.db.LINETYPE.CRITICAL_END:case n.db.LINETYPE.BREAK_END:s=a.pop(),i[s.id]=s;break;case n.db.LINETYPE.ACTIVE_START:{const d=e[u.from?u.from.actor:u.to.actor],f=d0(u.from?u.from.actor:u.to.actor).length,p=d.x+d.width/2+(f-1)*dt.activationWidth/2,m={startx:p,stopx:p+dt.activationWidth,actor:u.from.actor,enabled:!0};Bt.activations.push(m)}break;case n.db.LINETYPE.ACTIVE_END:{const d=Bt.activations.map(f=>f.actor).lastIndexOf(u.from.actor);delete Bt.activations.splice(d,1)[0]}break}u.placement!==void 0?(o=cat(u,e,n),u.noteModel=o,a.forEach(d=>{s=d,s.from=Math.min(s.from,o.startx),s.to=Math.max(s.to,o.startx+o.width),s.width=Math.max(s.width,Math.abs(s.from-s.to))-dt.labelBoxWidth})):(l=uat(u,e,n),u.msgModel=l,l.startx&&l.stopx&&a.length>0&&a.forEach(d=>{if(s=d,l.startx===l.stopx){const f=e[u.from],p=e[u.to];s.from=Math.min(f.x-l.width/2,f.x-f.width/2,s.from),s.to=Math.max(p.x+l.width/2,p.x+f.width/2,s.to),s.width=Math.max(s.width,Math.abs(s.to-s.from))-dt.labelBoxWidth}else s.from=Math.min(l.startx,s.from),s.to=Math.max(l.stopx,s.to),s.width=Math.max(s.width,l.width)-dt.labelBoxWidth}))}),Bt.activations=[],H.debug("Loop type widths:",i),i},AL={bounds:Bt,drawActors:Q4,drawActorsPopup:EL,setConf:CL,draw:aat};var p0=function(){var t=function(ct,J,Y,$){for(Y=Y||{},$=ct.length;$--;Y[ct[$]]=J);return Y},e=[1,2],r=[1,3],n=[1,5],i=[1,7],a=[2,5],s=[1,15],o=[1,17],l=[1,19],u=[1,20],h=[1,21],d=[1,22],f=[1,33],p=[1,23],m=[1,24],_=[1,25],y=[1,26],b=[1,27],x=[1,30],k=[1,31],T=[1,32],C=[1,35],M=[1,36],S=[1,37],R=[1,38],A=[1,34],L=[1,41],v=[1,4,5,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],B=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],w=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],D=[4,5,14,15,17,19,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],N={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"-->":13,HIDE_EMPTY:14,scale:15,WIDTH:16,COMPOSIT_STATE:17,STRUCT_START:18,STRUCT_STOP:19,STATE_DESCR:20,AS:21,ID:22,FORK:23,JOIN:24,CHOICE:25,CONCURRENT:26,note:27,notePosition:28,NOTE_TEXT:29,direction:30,acc_title:31,acc_title_value:32,acc_descr:33,acc_descr_value:34,acc_descr_multiline_value:35,openDirective:36,typeDirective:37,closeDirective:38,":":39,argDirective:40,direction_tb:41,direction_bt:42,direction_rl:43,direction_lr:44,eol:45,";":46,EDGE_STATE:47,left_of:48,right_of:49,open_directive:50,type_directive:51,arg_directive:52,close_directive:53,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"-->",14:"HIDE_EMPTY",15:"scale",16:"WIDTH",17:"COMPOSIT_STATE",18:"STRUCT_START",19:"STRUCT_STOP",20:"STATE_DESCR",21:"AS",22:"ID",23:"FORK",24:"JOIN",25:"CHOICE",26:"CONCURRENT",27:"note",29:"NOTE_TEXT",31:"acc_title",32:"acc_title_value",33:"acc_descr",34:"acc_descr_value",35:"acc_descr_multiline_value",39:":",41:"direction_tb",42:"direction_bt",43:"direction_rl",44:"direction_lr",46:";",47:"EDGE_STATE",48:"left_of",49:"right_of",50:"open_directive",51:"type_directive",52:"arg_directive",53:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[10,2],[10,2],[10,1],[6,3],[6,5],[30,1],[30,1],[30,1],[30,1],[45,1],[45,1],[11,1],[11,1],[28,1],[28,1],[36,1],[37,1],[40,1],[38,1]],performAction:function(J,Y,$,lt,ut,W,tt){var K=W.length-1;switch(ut){case 4:return lt.setRootDoc(W[K]),W[K];case 5:this.$=[];break;case 6:W[K]!="nl"&&(W[K-1].push(W[K]),this.$=W[K-1]);break;case 7:case 8:this.$=W[K];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:W[K],type:"default",description:""};break;case 11:this.$={stmt:"state",id:W[K-1],type:"default",description:lt.trimColon(W[K])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:W[K-2],type:"default",description:""},state2:{stmt:"state",id:W[K],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:W[K-3],type:"default",description:""},state2:{stmt:"state",id:W[K-1],type:"default",description:""},description:W[K].substr(1).trim()};break;case 17:this.$={stmt:"state",id:W[K-3],type:"default",description:"",doc:W[K-1]};break;case 18:var it=W[K],Z=W[K-2].trim();if(W[K].match(":")){var V=W[K].split(":");it=V[0],Z=[Z,V[1]]}this.$={stmt:"state",id:it,type:"default",description:Z};break;case 19:this.$={stmt:"state",id:W[K-3],type:"default",description:W[K-5],doc:W[K-1]};break;case 20:this.$={stmt:"state",id:W[K],type:"fork"};break;case 21:this.$={stmt:"state",id:W[K],type:"join"};break;case 22:this.$={stmt:"state",id:W[K],type:"choice"};break;case 23:this.$={stmt:"state",id:lt.getDividerId(),type:"divider"};break;case 24:this.$={stmt:"state",id:W[K-1].trim(),note:{position:W[K-2].trim(),text:W[K].trim()}};break;case 28:this.$=W[K].trim(),lt.setAccTitle(this.$);break;case 29:case 30:this.$=W[K].trim(),lt.setAccDescription(this.$);break;case 33:lt.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 34:lt.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 35:lt.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 36:lt.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 39:case 40:this.$=W[K];break;case 43:lt.parseDirective("%%{","open_directive");break;case 44:lt.parseDirective(W[K],"type_directive");break;case 45:W[K]=W[K].trim().replace(/'/g,'"'),lt.parseDirective(W[K],"arg_directive");break;case 46:lt.parseDirective("}%%","close_directive","state");break}},table:[{3:1,4:e,5:r,6:4,7:n,36:6,50:i},{1:[3]},{3:8,4:e,5:r,6:4,7:n,36:6,50:i},{3:9,4:e,5:r,6:4,7:n,36:6,50:i},{3:10,4:e,5:r,6:4,7:n,36:6,50:i},t([1,4,5,14,15,17,20,22,23,24,25,26,27,31,33,35,41,42,43,44,47,50],a,{8:11}),{37:12,51:[1,13]},{51:[2,43]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:s,5:o,6:28,9:14,10:16,11:18,14:l,15:u,17:h,20:d,22:f,23:p,24:m,25:_,26:y,27:b,30:29,31:x,33:k,35:T,36:6,41:C,42:M,43:S,44:R,47:A,50:i},{38:39,39:[1,40],53:L},t([39,53],[2,44]),t(v,[2,6]),{6:28,10:42,11:18,14:l,15:u,17:h,20:d,22:f,23:p,24:m,25:_,26:y,27:b,30:29,31:x,33:k,35:T,36:6,41:C,42:M,43:S,44:R,47:A,50:i},t(v,[2,8]),t(v,[2,9]),t(v,[2,10],{12:[1,43],13:[1,44]}),t(v,[2,14]),{16:[1,45]},t(v,[2,16],{18:[1,46]}),{21:[1,47]},t(v,[2,20]),t(v,[2,21]),t(v,[2,22]),t(v,[2,23]),{28:48,29:[1,49],48:[1,50],49:[1,51]},t(v,[2,26]),t(v,[2,27]),{32:[1,52]},{34:[1,53]},t(v,[2,30]),t(B,[2,39]),t(B,[2,40]),t(v,[2,33]),t(v,[2,34]),t(v,[2,35]),t(v,[2,36]),t(w,[2,31]),{40:54,52:[1,55]},t(w,[2,46]),t(v,[2,7]),t(v,[2,11]),{11:56,22:f,47:A},t(v,[2,15]),t(D,a,{8:57}),{22:[1,58]},{22:[1,59]},{21:[1,60]},{22:[2,41]},{22:[2,42]},t(v,[2,28]),t(v,[2,29]),{38:61,53:L},{53:[2,45]},t(v,[2,12],{12:[1,62]}),{4:s,5:o,6:28,9:14,10:16,11:18,14:l,15:u,17:h,19:[1,63],20:d,22:f,23:p,24:m,25:_,26:y,27:b,30:29,31:x,33:k,35:T,36:6,41:C,42:M,43:S,44:R,47:A,50:i},t(v,[2,18],{18:[1,64]}),{29:[1,65]},{22:[1,66]},t(w,[2,32]),t(v,[2,13]),t(v,[2,17]),t(D,a,{8:67}),t(v,[2,24]),t(v,[2,25]),{4:s,5:o,6:28,9:14,10:16,11:18,14:l,15:u,17:h,19:[1,68],20:d,22:f,23:p,24:m,25:_,26:y,27:b,30:29,31:x,33:k,35:T,36:6,41:C,42:M,43:S,44:R,47:A,50:i},t(v,[2,19])],defaultActions:{7:[2,43],8:[2,1],9:[2,2],10:[2,3],50:[2,41],51:[2,42],55:[2,45]},parseError:function(J,Y){if(Y.recoverable)this.trace(J);else{var $=new Error(J);throw $.hash=Y,$}},parse:function(J){var Y=this,$=[0],lt=[],ut=[null],W=[],tt=this.table,K="",it=0,Z=0,V=2,Q=1,q=W.slice.call(arguments,1),U=Object.create(this.lexer),F={yy:{}};for(var j in this.yy)Object.prototype.hasOwnProperty.call(this.yy,j)&&(F.yy[j]=this.yy[j]);U.setInput(J,F.yy),F.yy.lexer=U,F.yy.parser=this,typeof U.yylloc>"u"&&(U.yylloc={});var P=U.yylloc;W.push(P);var et=U.options&&U.options.ranges;typeof F.yy.parseError=="function"?this.parseError=F.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function at(){var Dt;return Dt=lt.pop()||U.lex()||Q,typeof Dt!="number"&&(Dt instanceof Array&&(lt=Dt,Dt=lt.pop()),Dt=Y.symbols_[Dt]||Dt),Dt}for(var It,Lt,Rt,Ct,pt={},mt,vt,Tt,ft;;){if(Lt=$[$.length-1],this.defaultActions[Lt]?Rt=this.defaultActions[Lt]:((It===null||typeof It>"u")&&(It=at()),Rt=tt[Lt]&&tt[Lt][It]),typeof Rt>"u"||!Rt.length||!Rt[0]){var le="";ft=[];for(mt in tt[Lt])this.terminals_[mt]&&mt>V&&ft.push("'"+this.terminals_[mt]+"'");U.showPosition?le="Parse error on line "+(it+1)+`:
+`+U.showPosition()+`
+Expecting `+ft.join(", ")+", got '"+(this.terminals_[It]||It)+"'":le="Parse error on line "+(it+1)+": Unexpected "+(It==Q?"end of input":"'"+(this.terminals_[It]||It)+"'"),this.parseError(le,{text:U.match,token:this.terminals_[It]||It,line:U.yylineno,loc:P,expected:ft})}if(Rt[0]instanceof Array&&Rt.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Lt+", token: "+It);switch(Rt[0]){case 1:$.push(It),ut.push(U.yytext),W.push(U.yylloc),$.push(Rt[1]),It=null,Z=U.yyleng,K=U.yytext,it=U.yylineno,P=U.yylloc;break;case 2:if(vt=this.productions_[Rt[1]][1],pt.$=ut[ut.length-vt],pt._$={first_line:W[W.length-(vt||1)].first_line,last_line:W[W.length-1].last_line,first_column:W[W.length-(vt||1)].first_column,last_column:W[W.length-1].last_column},et&&(pt._$.range=[W[W.length-(vt||1)].range[0],W[W.length-1].range[1]]),Ct=this.performAction.apply(pt,[K,Z,it,F.yy,Rt[1],ut,W].concat(q)),typeof Ct<"u")return Ct;vt&&($=$.slice(0,-1*vt*2),ut=ut.slice(0,-1*vt),W=W.slice(0,-1*vt)),$.push(this.productions_[Rt[1]][0]),ut.push(pt.$),W.push(pt._$),Tt=tt[$[$.length-2]][$[$.length-1]],$.push(Tt);break;case 3:return!0}}return!0}},z=function(){var ct={EOF:1,parseError:function(Y,$){if(this.yy.parser)this.yy.parser.parseError(Y,$);else throw new Error(Y)},setInput:function(J,Y){return this.yy=Y||this.yy||{},this._input=J,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var J=this._input[0];this.yytext+=J,this.yyleng++,this.offset++,this.match+=J,this.matched+=J;var Y=J.match(/(?:\r\n?|\n).*/g);return Y?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),J},unput:function(J){var Y=J.length,$=J.split(/(?:\r\n?|\n)/g);this._input=J+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-Y),this.offset-=Y;var lt=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),$.length-1&&(this.yylineno-=$.length-1);var ut=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:$?($.length===lt.length?this.yylloc.first_column:0)+lt[lt.length-$.length].length-$[0].length:this.yylloc.first_column-Y},this.options.ranges&&(this.yylloc.range=[ut[0],ut[0]+this.yyleng-Y]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(J){this.unput(this.match.slice(J))},pastInput:function(){var J=this.matched.substr(0,this.matched.length-this.match.length);return(J.length>20?"...":"")+J.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var J=this.match;return J.length<20&&(J+=this._input.substr(0,20-J.length)),(J.substr(0,20)+(J.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var J=this.pastInput(),Y=new Array(J.length+1).join("-");return J+this.upcomingInput()+`
+`+Y+"^"},test_match:function(J,Y){var $,lt,ut;if(this.options.backtrack_lexer&&(ut={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(ut.yylloc.range=this.yylloc.range.slice(0))),lt=J[0].match(/(?:\r\n?|\n).*/g),lt&&(this.yylineno+=lt.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lt?lt[lt.length-1].length-lt[lt.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+J[0].length},this.yytext+=J[0],this.match+=J[0],this.matches=J,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(J[0].length),this.matched+=J[0],$=this.performAction.call(this,this.yy,this,Y,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),$)return $;if(this._backtrack){for(var W in ut)this[W]=ut[W];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var J,Y,$,lt;this._more||(this.yytext="",this.match="");for(var ut=this._currentRules(),W=0;W<ut.length;W++)if($=this._input.match(this.rules[ut[W]]),$&&(!Y||$[0].length>Y[0].length)){if(Y=$,lt=W,this.options.backtrack_lexer){if(J=this.test_match($,ut[W]),J!==!1)return J;if(this._backtrack){Y=!1;continue}else return!1}else if(!this.options.flex)break}return Y?(J=this.test_match(Y,ut[lt]),J!==!1?J:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var Y=this.next();return Y||this.lex()},begin:function(Y){this.conditionStack.push(Y)},popState:function(){var Y=this.conditionStack.length-1;return Y>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(Y){return Y=this.conditionStack.length-1-Math.abs(Y||0),Y>=0?this.conditionStack[Y]:"INITIAL"},pushState:function(Y){this.begin(Y)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(Y,$,lt,ut){switch(lt){case 0:return 41;case 1:return 42;case 2:return 43;case 3:return 44;case 4:return this.begin("open_directive"),50;case 5:return this.begin("type_directive"),51;case 6:return this.popState(),this.begin("arg_directive"),39;case 7:return this.popState(),this.popState(),53;case 8:return 52;case 9:break;case 10:break;case 11:return 5;case 12:break;case 13:break;case 14:break;case 15:break;case 16:return this.pushState("SCALE"),15;case 17:return 16;case 18:this.popState();break;case 19:return this.begin("acc_title"),31;case 20:return this.popState(),"acc_title_value";case 21:return this.begin("acc_descr"),33;case 22:return this.popState(),"acc_descr_value";case 23:this.begin("acc_descr_multiline");break;case 24:this.popState();break;case 25:return"acc_descr_multiline_value";case 26:this.pushState("STATE");break;case 27:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),23;case 28:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),24;case 29:return this.popState(),$.yytext=$.yytext.slice(0,-10).trim(),25;case 30:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),23;case 31:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),24;case 32:return this.popState(),$.yytext=$.yytext.slice(0,-10).trim(),25;case 33:return 41;case 34:return 42;case 35:return 43;case 36:return 44;case 37:this.begin("STATE_STRING");break;case 38:return this.popState(),this.pushState("STATE_ID"),"AS";case 39:return this.popState(),"ID";case 40:this.popState();break;case 41:return"STATE_DESCR";case 42:return 17;case 43:this.popState();break;case 44:return this.popState(),this.pushState("struct"),18;case 45:return this.popState(),19;case 46:break;case 47:return this.begin("NOTE"),27;case 48:return this.popState(),this.pushState("NOTE_ID"),48;case 49:return this.popState(),this.pushState("NOTE_ID"),49;case 50:this.popState(),this.pushState("FLOATING_NOTE");break;case 51:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 52:break;case 53:return"NOTE_TEXT";case 54:return this.popState(),"ID";case 55:return this.popState(),this.pushState("NOTE_TEXT"),22;case 56:return this.popState(),$.yytext=$.yytext.substr(2).trim(),29;case 57:return this.popState(),$.yytext=$.yytext.slice(0,-8).trim(),29;case 58:return 7;case 59:return 7;case 60:return 14;case 61:return 47;case 62:return 22;case 63:return $.yytext=$.yytext.trim(),12;case 64:return 13;case 65:return 26;case 66:return 5;case 67:return"INVALID"}},rules:[/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:state\s+)/i,/^(?:.*<<fork>>)/i,/^(?:.*<<join>>)/i,/^(?:.*<<choice>>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[13,14],inclusive:!1},close_directive:{rules:[13,14],inclusive:!1},arg_directive:{rules:[7,8,13,14],inclusive:!1},type_directive:{rules:[6,7,13,14],inclusive:!1},open_directive:{rules:[5,13,14],inclusive:!1},struct:{rules:[13,14,26,33,34,35,36,45,46,47,61,62,63,64,65],inclusive:!1},FLOATING_NOTE_ID:{rules:[54],inclusive:!1},FLOATING_NOTE:{rules:[51,52,53],inclusive:!1},NOTE_TEXT:{rules:[56,57],inclusive:!1},NOTE_ID:{rules:[55],inclusive:!1},NOTE:{rules:[48,49,50],inclusive:!1},acc_descr_multiline:{rules:[24,25],inclusive:!1},acc_descr:{rules:[22],inclusive:!1},acc_title:{rules:[20],inclusive:!1},SCALE:{rules:[17,18],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[39],inclusive:!1},STATE_STRING:{rules:[40,41],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[13,14,27,28,29,30,31,32,37,38,42,43,44],inclusive:!1},ID:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,14,15,16,19,21,23,26,44,47,58,59,60,61,62,63,64,66,67],inclusive:!0}}};return ct}();N.lexer=z;function X(){this.yy={}}return X.prototype=N,N.Parser=X,new X}();p0.parser=p0;const fat=(t,e)=>{var r;return((r=e==null?void 0:e.state)==null?void 0:r.defaultRenderer)==="dagre-wrapper"?!1:t.match(/^\s*stateDiagram/)!==null},dat=(t,e)=>{var r;return!!(t.match(/^\s*stateDiagram-v2/)!==null||t.match(/^\s*stateDiagram/)&&((r=e==null?void 0:e.state)==null?void 0:r.defaultRenderer)==="dagre-wrapper")},g0=t=>JSON.parse(JSON.stringify(t));let y0=[];const pat=function(t,e,r){Xe.parseDirective(this,t,e,r)},gat=t=>{H.info("Setting root doc",t),y0=t},yat=()=>y0,m0=(t,e,r)=>{if(e.stmt==="relation")m0(t,e.state1,!0),m0(t,e.state2,!1);else if(e.stmt==="state"&&e.id==="[*]"&&(e.id=r?t.id+"_start":t.id+"_end",e.start=r),e.doc){const n=[];let i=0,a=[];for(i=0;i<e.doc.length;i++)if(e.doc[i].type==="divider"){const s=g0(e.doc[i]);s.doc=g0(a),n.push(s),a=[]}else a.push(e.doc[i]);if(n.length>0&&a.length>0){const s={stmt:"state",id:ow(),type:"divider",doc:g0(a)};n.push(g0(s)),e.doc=n}e.doc.forEach(s=>m0(e,s,!0))}},mat=()=>(m0({id:"root"},{id:"root",doc:y0},!0),{id:"root",doc:y0}),bat=t=>{let e;t.doc?e=t.doc:e=t,H.info(e),LL(!0),H.info("Extract",e),e.forEach(r=>{r.stmt==="state"&&_0(r.id,r.type,r.doc,r.description,r.note),r.stmt==="relation"&&RL(r.state1.id,r.state2.id,r.description)})},ML=()=>({relations:[],states:{},documents:{}});let pu={root:ML()},Wr=pu.root,b0=0;const _0=function(t,e,r,n,i){typeof Wr.states[t]>"u"?Wr.states[t]={id:t,descriptions:[],type:e,doc:r,note:i}:(Wr.states[t].doc||(Wr.states[t].doc=r),Wr.states[t].type||(Wr.states[t].type=e)),n&&(H.info("Adding state ",t,n),typeof n=="string"&&IL(t,n.trim()),typeof n=="object"&&n.forEach(a=>IL(t,a.trim()))),i&&(Wr.states[t].note=i,Wr.states[t].note.text=pe.sanitizeText(Wr.states[t].note.text,nt()))},LL=function(t){pu={root:ML()},Wr=pu.root,Wr=pu.root,b0=0,BL=[],t||ci()},_at=function(t){return Wr.states[t]},vat=function(){return Wr.states},xat=function(){H.info("Documents = ",pu)},kat=function(){return Wr.relations},RL=function(t,e,r){let n=t,i=e,a="default",s="default";t==="[*]"&&(b0++,n="start"+b0,a="start"),e==="[*]"&&(i="end"+b0,s="end"),_0(n,a),_0(i,s),Wr.relations.push({id1:n,id2:i,title:pe.sanitizeText(r,nt())})},IL=function(t,e){const r=Wr.states[t];let n=e;n[0]===":"&&(n=n.substr(1).trim()),r.descriptions.push(pe.sanitizeText(n,nt()))},wat=function(t){return t.substring(0,1)===":"?t.substr(2).trim():t.trim()},Tat={LINE:0,DOTTED_LINE:1};let NL=0;const Eat=()=>(NL++,"divider-id-"+NL);let BL=[];const Cat=()=>BL;let DL="TB";const ma={parseDirective:pat,getConfig:()=>nt().state,addState:_0,clear:LL,getState:_at,getStates:vat,getRelations:kat,getClasses:Cat,getDirection:()=>DL,addRelation:RL,getDividerId:Eat,setDirection:t=>{DL=t},cleanupLabel:wat,lineType:Tat,relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},logDocuments:xat,getRootDoc:yat,setRootDoc:gat,getRootDocV2:mat,extract:bat,trimColon:t=>t&&t[0]===":"?t.substr(1).trim():t.trim(),getAccTitle:ui,setAccTitle:Yn,getAccDescription:fi,setAccDescription:hi},Sat=t=>t.append("circle").attr("class","start-state").attr("r",nt().state.sizeUnit).attr("cx",nt().state.padding+nt().state.sizeUnit).attr("cy",nt().state.padding+nt().state.sizeUnit),Aat=t=>t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",nt().state.textHeight).attr("class","divider").attr("x2",nt().state.textHeight*2).attr("y1",0).attr("y2",0),Mat=(t,e)=>{const r=t.append("text").attr("x",2*nt().state.padding).attr("y",nt().state.textHeight+2*nt().state.padding).attr("font-size",nt().state.fontSize).attr("class","state-title").text(e.id),n=r.node().getBBox();return t.insert("rect",":first-child").attr("x",nt().state.padding).attr("y",nt().state.padding).attr("width",n.width+2*nt().state.padding).attr("height",n.height+2*nt().state.padding).attr("rx",nt().state.radius),r},Lat=(t,e)=>{const r=function(f,p,m){const _=f.append("tspan").attr("x",2*nt().state.padding).text(p);m||_.attr("dy",nt().state.textHeight)},i=t.append("text").attr("x",2*nt().state.padding).attr("y",nt().state.textHeight+1.3*nt().state.padding).attr("font-size",nt().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),a=i.height,s=t.append("text").attr("x",nt().state.padding).attr("y",a+nt().state.padding*.4+nt().state.dividerMargin+nt().state.textHeight).attr("class","state-description");let o=!0,l=!0;e.descriptions.forEach(function(f){o||(r(s,f,l),l=!1),o=!1});const u=t.append("line").attr("x1",nt().state.padding).attr("y1",nt().state.padding+a+nt().state.dividerMargin/2).attr("y2",nt().state.padding+a+nt().state.dividerMargin/2).attr("class","descr-divider"),h=s.node().getBBox(),d=Math.max(h.width,i.width);return u.attr("x2",d+3*nt().state.padding),t.insert("rect",":first-child").attr("x",nt().state.padding).attr("y",nt().state.padding).attr("width",d+2*nt().state.padding).attr("height",h.height+a+2*nt().state.padding).attr("rx",nt().state.radius),t},Rat=(t,e,r)=>{const n=nt().state.padding,i=2*nt().state.padding,a=t.node().getBBox(),s=a.width,o=a.x,l=t.append("text").attr("x",0).attr("y",nt().state.titleShift).attr("font-size",nt().state.fontSize).attr("class","state-title").text(e.id),h=l.node().getBBox().width+i;let d=Math.max(h,s);d===s&&(d=d+i);let f;const p=t.node().getBBox();e.doc,f=o-n,h>s&&(f=(s-d)/2+n),Math.abs(o-p.x)<n&&h>s&&(f=o-(h-s)/2);const m=1-nt().state.textHeight;return t.insert("rect",":first-child").attr("x",f).attr("y",m).attr("class",r?"alt-composit":"composit").attr("width",d).attr("height",p.height+nt().state.textHeight+nt().state.titleShift+1).attr("rx","0"),l.attr("x",f+n),h<=s&&l.attr("x",o+(d-i)/2-h/2+n),t.insert("rect",":first-child").attr("x",f).attr("y",nt().state.titleShift-nt().state.textHeight-nt().state.padding).attr("width",d).attr("height",nt().state.textHeight*3).attr("rx",nt().state.radius),t.insert("rect",":first-child").attr("x",f).attr("y",nt().state.titleShift-nt().state.textHeight-nt().state.padding).attr("width",d).attr("height",p.height+3+2*nt().state.textHeight).attr("rx",nt().state.radius),t},Iat=t=>(t.append("circle").attr("class","end-state-outer").attr("r",nt().state.sizeUnit+nt().state.miniPadding).attr("cx",nt().state.padding+nt().state.sizeUnit+nt().state.miniPadding).attr("cy",nt().state.padding+nt().state.sizeUnit+nt().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",nt().state.sizeUnit).attr("cx",nt().state.padding+nt().state.sizeUnit+2).attr("cy",nt().state.padding+nt().state.sizeUnit+2)),Nat=(t,e)=>{let r=nt().state.forkWidth,n=nt().state.forkHeight;if(e.parentId){let i=r;r=n,n=i}return t.append("rect").style("stroke","black").style("fill","black").attr("width",r).attr("height",n).attr("x",nt().state.padding).attr("y",nt().state.padding)},Bat=(t,e,r,n)=>{let i=0;const a=n.append("text");a.style("text-anchor","start"),a.attr("class","noteText");let s=t.replace(/\r\n/g,"<br/>");s=s.replace(/\n/g,"<br/>");const o=s.split(pe.lineBreakRegex);let l=1.25*nt().state.noteMargin;for(const u of o){const h=u.trim();if(h.length>0){const d=a.append("tspan");d.text(h),l===0&&(l+=d.node().getBBox().height),i+=l,d.attr("x",e+nt().state.noteMargin),d.attr("y",r+i+1.25*nt().state.noteMargin)}}return{textWidth:a.node().getBBox().width,textHeight:i}},Dat=(t,e)=>{e.attr("class","state-note");const r=e.append("rect").attr("x",0).attr("y",nt().state.padding),n=e.append("g"),{textWidth:i,textHeight:a}=Bat(t,0,0,n);return r.attr("height",a+2*nt().state.noteMargin),r.attr("width",i+nt().state.noteMargin*2),r},OL=function(t,e){const r=e.id,n={id:r,label:e.id,width:0,height:0},i=t.append("g").attr("id",r).attr("class","stateGroup");e.type==="start"&&Sat(i),e.type==="end"&&Iat(i),(e.type==="fork"||e.type==="join")&&Nat(i,e),e.type==="note"&&Dat(e.note.text,i),e.type==="divider"&&Aat(i),e.type==="default"&&e.descriptions.length===0&&Mat(i,e),e.type==="default"&&e.descriptions.length>0&&Lat(i,e);const a=i.node().getBBox();return n.width=a.width+2*nt().state.padding,n.height=a.height+2*nt().state.padding,n};let FL=0;const Oat=function(t,e,r){const n=function(l){switch(l){case ma.relationType.AGGREGATION:return"aggregation";case ma.relationType.EXTENSION:return"extension";case ma.relationType.COMPOSITION:return"composition";case ma.relationType.DEPENDENCY:return"dependency"}};e.points=e.points.filter(l=>!Number.isNaN(l.y));const i=e.points,a=Ua().x(function(l){return l.x}).y(function(l){return l.y}).curve(Os),s=t.append("path").attr("d",a(i)).attr("id","edge"+FL).attr("class","transition");let o="";if(nt().state.arrowMarkerAbsolute&&(o=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,o=o.replace(/\(/g,"\\("),o=o.replace(/\)/g,"\\)")),s.attr("marker-end","url("+o+"#"+n(ma.relationType.DEPENDENCY)+"End)"),typeof r.title<"u"){const l=t.append("g").attr("class","stateLabel"),{x:u,y:h}=Se.calcLabelPosition(e.points),d=pe.getRows(r.title);let f=0;const p=[];let m=0,_=0;for(let x=0;x<=d.length;x++){const k=l.append("text").attr("text-anchor","middle").text(d[x]).attr("x",u).attr("y",h+f),T=k.node().getBBox();m=Math.max(m,T.width),_=Math.min(_,T.x),H.info(T.x,u,h+f),f===0&&(f=k.node().getBBox().height,H.info("Title height",f,h)),p.push(k)}let y=f*d.length;if(d.length>1){const x=(d.length-1)*f*.5;p.forEach((k,T)=>k.attr("y",h+T*f-x)),y=f*d.length}const b=l.node().getBBox();l.insert("rect",":first-child").attr("class","box").attr("x",u-m/2-nt().state.padding/2).attr("y",h-y/2-nt().state.padding/2-3.5).attr("width",m+nt().state.padding).attr("height",y+nt().state.padding),H.info(b)}FL++};let Mn;const J4={},Fat=function(){},Pat=function(t){t.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")},qat=function(t,e,r,n){Mn=nt().state;const i=nt().securityLevel;let a;i==="sandbox"&&(a=St("#i"+e));const s=St(i==="sandbox"?a.nodes()[0].contentDocument.body:"body"),o=i==="sandbox"?a.nodes()[0].contentDocument:document;H.debug("Rendering diagram "+t);const l=s.select(`[id='${e}']`);Pat(l),new cr.Graph({multigraph:!0,compound:!0,rankdir:"RL"}).setDefaultEdgeLabel(function(){return{}});const h=n.db.getRootDoc();PL(h,l,void 0,!1,s,o,n);const d=Mn.padding,f=l.node().getBBox(),p=f.width+d*2,m=f.height+d*2,_=p*1.75;li(l,m,_,Mn.useMaxWidth),l.attr("viewBox",`${f.x-Mn.padding}  ${f.y-Mn.padding} `+p+" "+m),bn(n.db,l,e)},Vat=t=>t?t.length*Mn.fontSizeFactor:1,PL=(t,e,r,n,i,a,s)=>{const o=new cr.Graph({compound:!0,multigraph:!0});let l,u=!0;for(l=0;l<t.length;l++)if(t[l].stmt==="relation"){u=!1;break}r?o.setGraph({rankdir:"LR",multigraph:!0,compound:!0,ranker:"tight-tree",ranksep:u?1:Mn.edgeLengthFactor,nodeSep:u?1:50,isMultiGraph:!0}):o.setGraph({rankdir:"TB",multigraph:!0,compound:!0,ranksep:u?1:Mn.edgeLengthFactor,nodeSep:u?1:50,ranker:"tight-tree",isMultiGraph:!0}),o.setDefaultEdgeLabel(function(){return{}}),s.db.extract(t);const h=s.db.getStates(),d=s.db.getRelations(),f=Object.keys(h);for(let b=0;b<f.length;b++){const x=h[f[b]];r&&(x.parentId=r);let k;if(x.doc){let T=e.append("g").attr("id",x.id).attr("class","stateGroup");k=PL(x.doc,T,x.id,!n,i,a,s);{T=Rat(T,x,n);let C=T.node().getBBox();k.width=C.width,k.height=C.height+Mn.padding/2,J4[x.id]={y:Mn.compositTitleSize}}}else k=OL(e,x);if(x.note){const T={descriptions:[],id:x.id+"-note",note:x.note,type:"note"},C=OL(e,T);x.note.position==="left of"?(o.setNode(k.id+"-note",C),o.setNode(k.id,k)):(o.setNode(k.id,k),o.setNode(k.id+"-note",C)),o.setParent(k.id,k.id+"-group"),o.setParent(k.id+"-note",k.id+"-group")}else o.setNode(k.id,k)}H.debug("Count=",o.nodeCount(),o);let p=0;d.forEach(function(b){p++,H.debug("Setting edge",b),o.setEdge(b.id1,b.id2,{relation:b,width:Vat(b.title),height:Mn.labelHeight*pe.getRows(b.title).length,labelpos:"c"},"id"+p)}),Zc.layout(o),H.debug("Graph after layout",o.nodes());const m=e.node();o.nodes().forEach(function(b){typeof b<"u"&&typeof o.node(b)<"u"?(H.warn("Node "+b+": "+JSON.stringify(o.node(b))),i.select("#"+m.id+" #"+b).attr("transform","translate("+(o.node(b).x-o.node(b).width/2)+","+(o.node(b).y+(J4[b]?J4[b].y:0)-o.node(b).height/2)+" )"),i.select("#"+m.id+" #"+b).attr("data-x-shift",o.node(b).x-o.node(b).width/2),a.querySelectorAll("#"+m.id+" #"+b+" .divider").forEach(k=>{const T=k.parentElement;let C=0,M=0;T&&(T.parentElement&&(C=T.parentElement.getBBox().width),M=parseInt(T.getAttribute("data-x-shift"),10),Number.isNaN(M)&&(M=0)),k.setAttribute("x1",0-M+8),k.setAttribute("x2",C-M-8)})):H.debug("No Node "+b+": "+JSON.stringify(o.node(b)))});let _=m.getBBox();o.edges().forEach(function(b){typeof b<"u"&&typeof o.edge(b)<"u"&&(H.debug("Edge "+b.v+" -> "+b.w+": "+JSON.stringify(o.edge(b))),Oat(e,o.edge(b),o.edge(b).relation))}),_=m.getBBox();const y={id:r||"root",label:r||"root",width:0,height:0};return y.width=_.width+2*Mn.padding,y.height=_.height+2*Mn.padding,H.debug("Doc rendered",y,o),y},zat={setConf:Fat,draw:qat},Yat={},Uat=function(t){const e=Object.keys(t);for(let r=0;r<e.length;r++)Yat[e[r]]=t[e[r]]};let Fe={};const Wat=function(t,e){return H.trace("Extracting classes"),e.sb.clear(),e.parser.parse(t),e.sb.getClasses()},v0=(t,e,r,n)=>{if(r.id!=="root"){let i="rect";r.start===!0&&(i="start"),r.start===!1&&(i="end"),r.type!=="default"&&(i=r.type),Fe[r.id]||(Fe[r.id]={id:r.id,shape:i,description:pe.sanitizeText(r.id,nt()),classes:"statediagram-state"}),r.description&&(Array.isArray(Fe[r.id].description)?(Fe[r.id].shape="rectWithTitle",Fe[r.id].description.push(r.description)):Fe[r.id].description.length>0?(Fe[r.id].shape="rectWithTitle",Fe[r.id].description===r.id?Fe[r.id].description=[r.description]:Fe[r.id].description=[Fe[r.id].description,r.description]):(Fe[r.id].shape="rect",Fe[r.id].description=r.description),Fe[r.id].description=pe.sanitizeTextOrArray(Fe[r.id].description,nt())),Fe[r.id].description.length===1&&Fe[r.id].shape==="rectWithTitle"&&(Fe[r.id].shape="rect"),!Fe[r.id].type&&r.doc&&(H.info("Setting cluster for ",r.id,t_(r)),Fe[r.id].type="group",Fe[r.id].dir=t_(r),Fe[r.id].shape=r.type==="divider"?"divider":"roundedWithTitle",Fe[r.id].classes=Fe[r.id].classes+" "+(n?"statediagram-cluster statediagram-cluster-alt":"statediagram-cluster"));const a={labelStyle:"",shape:Fe[r.id].shape,labelText:Fe[r.id].description,classes:Fe[r.id].classes,style:"",id:r.id,dir:Fe[r.id].dir,domId:"state-"+r.id+"-"+is,type:Fe[r.id].type,padding:15};if(r.note){const s={labelStyle:"",shape:"note",labelText:r.note.text,classes:"statediagram-note",style:"",id:r.id+"----note-"+is,domId:"state-"+r.id+"----note-"+is,type:Fe[r.id].type,padding:15},o={labelStyle:"",shape:"noteGroup",labelText:r.note.text,classes:Fe[r.id].classes,style:"",id:r.id+"----parent",domId:"state-"+r.id+"----parent-"+is,type:"group",padding:0};is++,t.setNode(r.id+"----parent",o),t.setNode(s.id,s),t.setNode(r.id,a),t.setParent(r.id,r.id+"----parent"),t.setParent(s.id,r.id+"----parent");let l=r.id,u=s.id;r.note.position==="left of"&&(l=s.id,u=r.id),t.setEdge(l,u,{arrowhead:"none",arrowType:"",style:"fill:none",labelStyle:"",classes:"transition note-edge",arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal"})}else t.setNode(r.id,a)}e&&e.id!=="root"&&(H.trace("Setting node ",r.id," to be child of its parent ",e.id),t.setParent(r.id,e.id)),r.doc&&(H.trace("Adding nodes children "),Hat(t,r,r.doc,!n))};let is=0;const Hat=(t,e,r,n)=>{H.trace("items",r),r.forEach(i=>{if(i.stmt==="state"||i.stmt==="default")v0(t,e,i,n);else if(i.stmt==="relation"){v0(t,e,i.state1,n),v0(t,e,i.state2,n);const a={id:"edge"+is,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:"fill:none",labelStyle:"",label:pe.sanitizeText(i.description,nt()),arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal",classes:"transition"};let s=i.state1.id,o=i.state2.id;t.setEdge(s,o,a,is),is++}})},t_=(t,e)=>{let r=e||"TB";if(t.doc)for(let n=0;n<t.doc.length;n++){const i=t.doc[n];i.stmt==="dir"&&(r=i.value)}return r},Gat={setConf:Uat,getClasses:Wat,draw:function(t,e,r,n){H.info("Drawing state diagram (v2)",e),Fe={},n.db.getDirection();const{securityLevel:i,state:a}=nt(),s=a.nodeSpacing||50,o=a.rankSpacing||50;H.info(n.db.getRootDocV2()),n.db.extract(n.db.getRootDocV2()),H.info(n.db.getRootDocV2());const l=new cr.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:t_(n.db.getRootDocV2()),nodesep:s,ranksep:o,marginx:8,marginy:8}).setDefaultEdgeLabel(function(){return{}});v0(l,void 0,n.db.getRootDocV2(),!0);let u;i==="sandbox"&&(u=St("#i"+e));const h=St(i==="sandbox"?u.nodes()[0].contentDocument.body:"body"),d=h.select(`[id="${e}"]`),f=h.select("#"+e+" g");i4(f,l,["barb"],"statediagram",e);const p=8,m=d.node().getBBox(),_=m.width+p*2,y=m.height+p*2;d.attr("class","statediagram");const b=d.node().getBBox();li(d,y,_,a.useMaxWidth);const x=`${b.x-p} ${b.y-p} ${_} ${y}`;H.debug(`viewBox ${x}`),d.attr("viewBox",x);const k=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label');for(let T=0;T<k.length;T++){const C=k[T],M=C.getBBox(),S=document.createElementNS("http://www.w3.org/2000/svg","rect");S.setAttribute("rx",0),S.setAttribute("ry",0),S.setAttribute("width",M.width),S.setAttribute("height",M.height),C.insertBefore(S,C.firstChild)}bn(n.db,d,e)}};var e_=function(){var t=function(_,y,b,x){for(b=b||{},x=_.length;x--;b[_[x]]=y);return b},e=[1,2],r=[1,5],n=[6,9,11,17,18,20,22,23,24,26],i=[1,15],a=[1,16],s=[1,17],o=[1,18],l=[1,19],u=[1,20],h=[1,24],d=[4,6,9,11,17,18,20,22,23,24,26],f={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,acc_title:18,acc_title_value:19,acc_descr:20,acc_descr_value:21,acc_descr_multiline_value:22,section:23,taskName:24,taskData:25,open_directive:26,type_directive:27,arg_directive:28,close_directive:29,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"acc_title",19:"acc_title_value",20:"acc_descr",21:"acc_descr_value",22:"acc_descr_multiline_value",23:"section",24:"taskName",25:"taskData",26:"open_directive",27:"type_directive",28:"arg_directive",29:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,2],[10,2],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(y,b,x,k,T,C,M){var S=C.length-1;switch(T){case 1:return C[S-1];case 3:this.$=[];break;case 4:C[S-1].push(C[S]),this.$=C[S-1];break;case 5:case 6:this.$=C[S];break;case 7:case 8:this.$=[];break;case 11:k.setDiagramTitle(C[S].substr(6)),this.$=C[S].substr(6);break;case 12:this.$=C[S].trim(),k.setAccTitle(this.$);break;case 13:case 14:this.$=C[S].trim(),k.setAccDescription(this.$);break;case 15:k.addSection(C[S].substr(8)),this.$=C[S].substr(8);break;case 16:k.addTask(C[S-1],C[S]),this.$="task";break;case 18:k.parseDirective("%%{","open_directive");break;case 19:k.parseDirective(C[S],"type_directive");break;case 20:C[S]=C[S].trim().replace(/'/g,'"'),k.parseDirective(C[S],"arg_directive");break;case 21:k.parseDirective("}%%","close_directive","journey");break}},table:[{3:1,4:e,7:3,12:4,26:r},{1:[3]},t(n,[2,3],{5:6}),{3:7,4:e,7:3,12:4,26:r},{13:8,27:[1,9]},{27:[2,18]},{6:[1,10],7:21,8:11,9:[1,12],10:13,11:[1,14],12:4,17:i,18:a,20:s,22:o,23:l,24:u,26:r},{1:[2,2]},{14:22,15:[1,23],29:h},t([15,29],[2,19]),t(n,[2,8],{1:[2,1]}),t(n,[2,4]),{7:21,10:25,12:4,17:i,18:a,20:s,22:o,23:l,24:u,26:r},t(n,[2,6]),t(n,[2,7]),t(n,[2,11]),{19:[1,26]},{21:[1,27]},t(n,[2,14]),t(n,[2,15]),{25:[1,28]},t(n,[2,17]),{11:[1,29]},{16:30,28:[1,31]},{11:[2,21]},t(n,[2,5]),t(n,[2,12]),t(n,[2,13]),t(n,[2,16]),t(d,[2,9]),{14:32,29:h},{29:[2,20]},{11:[1,33]},t(d,[2,10])],defaultActions:{5:[2,18],7:[2,2],24:[2,21],31:[2,20]},parseError:function(y,b){if(b.recoverable)this.trace(y);else{var x=new Error(y);throw x.hash=b,x}},parse:function(y){var b=this,x=[0],k=[],T=[null],C=[],M=this.table,S="",R=0,A=0,L=2,v=1,B=C.slice.call(arguments,1),w=Object.create(this.lexer),D={yy:{}};for(var N in this.yy)Object.prototype.hasOwnProperty.call(this.yy,N)&&(D.yy[N]=this.yy[N]);w.setInput(y,D.yy),D.yy.lexer=w,D.yy.parser=this,typeof w.yylloc>"u"&&(w.yylloc={});var z=w.yylloc;C.push(z);var X=w.options&&w.options.ranges;typeof D.yy.parseError=="function"?this.parseError=D.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ct(){var V;return V=k.pop()||w.lex()||v,typeof V!="number"&&(V instanceof Array&&(k=V,V=k.pop()),V=b.symbols_[V]||V),V}for(var J,Y,$,lt,ut={},W,tt,K,it;;){if(Y=x[x.length-1],this.defaultActions[Y]?$=this.defaultActions[Y]:((J===null||typeof J>"u")&&(J=ct()),$=M[Y]&&M[Y][J]),typeof $>"u"||!$.length||!$[0]){var Z="";it=[];for(W in M[Y])this.terminals_[W]&&W>L&&it.push("'"+this.terminals_[W]+"'");w.showPosition?Z="Parse error on line "+(R+1)+`:
+`+w.showPosition()+`
+Expecting `+it.join(", ")+", got '"+(this.terminals_[J]||J)+"'":Z="Parse error on line "+(R+1)+": Unexpected "+(J==v?"end of input":"'"+(this.terminals_[J]||J)+"'"),this.parseError(Z,{text:w.match,token:this.terminals_[J]||J,line:w.yylineno,loc:z,expected:it})}if($[0]instanceof Array&&$.length>1)throw new Error("Parse Error: multiple actions possible at state: "+Y+", token: "+J);switch($[0]){case 1:x.push(J),T.push(w.yytext),C.push(w.yylloc),x.push($[1]),J=null,A=w.yyleng,S=w.yytext,R=w.yylineno,z=w.yylloc;break;case 2:if(tt=this.productions_[$[1]][1],ut.$=T[T.length-tt],ut._$={first_line:C[C.length-(tt||1)].first_line,last_line:C[C.length-1].last_line,first_column:C[C.length-(tt||1)].first_column,last_column:C[C.length-1].last_column},X&&(ut._$.range=[C[C.length-(tt||1)].range[0],C[C.length-1].range[1]]),lt=this.performAction.apply(ut,[S,A,R,D.yy,$[1],T,C].concat(B)),typeof lt<"u")return lt;tt&&(x=x.slice(0,-1*tt*2),T=T.slice(0,-1*tt),C=C.slice(0,-1*tt)),x.push(this.productions_[$[1]][0]),T.push(ut.$),C.push(ut._$),K=M[x[x.length-2]][x[x.length-1]],x.push(K);break;case 3:return!0}}return!0}},p=function(){var _={EOF:1,parseError:function(b,x){if(this.yy.parser)this.yy.parser.parseError(b,x);else throw new Error(b)},setInput:function(y,b){return this.yy=b||this.yy||{},this._input=y,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var y=this._input[0];this.yytext+=y,this.yyleng++,this.offset++,this.match+=y,this.matched+=y;var b=y.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),y},unput:function(y){var b=y.length,x=y.split(/(?:\r\n?|\n)/g);this._input=y+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b),this.offset-=b;var k=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),x.length-1&&(this.yylineno-=x.length-1);var T=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:x?(x.length===k.length?this.yylloc.first_column:0)+k[k.length-x.length].length-x[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[T[0],T[0]+this.yyleng-b]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
+`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},less:function(y){this.unput(this.match.slice(y))},pastInput:function(){var y=this.matched.substr(0,this.matched.length-this.match.length);return(y.length>20?"...":"")+y.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var y=this.match;return y.length<20&&(y+=this._input.substr(0,20-y.length)),(y.substr(0,20)+(y.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var y=this.pastInput(),b=new Array(y.length+1).join("-");return y+this.upcomingInput()+`
+`+b+"^"},test_match:function(y,b){var x,k,T;if(this.options.backtrack_lexer&&(T={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(T.yylloc.range=this.yylloc.range.slice(0))),k=y[0].match(/(?:\r\n?|\n).*/g),k&&(this.yylineno+=k.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:k?k[k.length-1].length-k[k.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+y[0].length},this.yytext+=y[0],this.match+=y[0],this.matches=y,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(y[0].length),this.matched+=y[0],x=this.performAction.call(this,this.yy,this,b,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),x)return x;if(this._backtrack){for(var C in T)this[C]=T[C];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var y,b,x,k;this._more||(this.yytext="",this.match="");for(var T=this._currentRules(),C=0;C<T.length;C++)if(x=this._input.match(this.rules[T[C]]),x&&(!b||x[0].length>b[0].length)){if(b=x,k=C,this.options.backtrack_lexer){if(y=this.test_match(x,T[C]),y!==!1)return y;if(this._backtrack){b=!1;continue}else return!1}else if(!this.options.flex)break}return b?(y=this.test_match(b,T[k]),y!==!1?y:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
+`+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var b=this.next();return b||this.lex()},begin:function(b){this.conditionStack.push(b)},popState:function(){var b=this.conditionStack.length-1;return b>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(b){return b=this.conditionStack.length-1-Math.abs(b||0),b>=0?this.conditionStack[b]:"INITIAL"},pushState:function(b){this.begin(b)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(b,x,k,T){switch(k){case 0:return this.begin("open_directive"),26;case 1:return this.begin("type_directive"),27;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),29;case 4:return 28;case 5:break;case 6:break;case 7:return 11;case 8:break;case 9:break;case 10:return 4;case 11:return 17;case 12:return this.begin("acc_title"),18;case 13:return this.popState(),"acc_title_value";case 14:return this.begin("acc_descr"),20;case 15:return this.popState(),"acc_descr_value";case 16:this.begin("acc_descr_multiline");break;case 17:this.popState();break;case 18:return"acc_descr_multiline_value";case 19:return 23;case 20:return 24;case 21:return 25;case 22:return 15;case 23:return 6;case 24:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:accTitle\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*:\s*)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:accDescr\s*\{\s*)/i,/^(?:[\}])/i,/^(?:[^\}]*)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},acc_descr_multiline:{rules:[17,18],inclusive:!1},acc_descr:{rules:[15],inclusive:!1},acc_title:{rules:[13],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,14,16,19,20,21,22,23,24],inclusive:!0}}};return _}();f.lexer=p;function m(){this.yy={}}return m.prototype=f,f.Parser=m,new m}();e_.parser=e_;const jat=t=>t.match(/^\s*journey/)!==null;let pl="";const r_=[],gu=[],gl=[],$at=function(t,e,r){Xe.parseDirective(this,t,e,r)},Xat=function(){r_.length=0,gu.length=0,pl="",gl.length=0,ci()},Kat=function(t){pl=t,r_.push(t)},Zat=function(){return r_},Qat=function(){let t=qL();const e=100;let r=0;for(;!t&&r<e;)t=qL(),r++;return gu.push(...gl),gu},Jat=function(){const t=[];return gu.forEach(r=>{r.people&&t.push(...r.people)}),[...new Set(t)].sort()},tst=function(t,e){const r=e.substr(1).split(":");let n=0,i=[];r.length===1?(n=Number(r[0]),i=[]):(n=Number(r[0]),i=r[1].split(","));const a=i.map(o=>o.trim()),s={section:pl,type:pl,people:a,task:t,score:n};gl.push(s)},est=function(t){const e={section:pl,type:pl,description:t,task:t,classes:[]};gu.push(e)},qL=function(){const t=function(r){return gl[r].processed};let e=!0;for(let r=0;r<gl.length;r++)t(r),e=e&&gl[r].processed;return e},VL={parseDirective:$at,getConfig:()=>nt().journey,clear:Xat,setDiagramTitle:c1,getDiagramTitle:u1,setAccTitle:Yn,getAccTitle:ui,setAccDescription:hi,getAccDescription:fi,addSection:Kat,getSections:Zat,getTasks:Qat,addTask:tst,addTaskOrg:est,getActors:function(){return Jat()}},x0=function(t,e){const r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),typeof e.class<"u"&&r.attr("class",e.class),r},rst=function(t,e){const n=t.append("circle").attr("cx",e.cx).attr("cy",e.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),i=t.append("g");i.append("circle").attr("cx",e.cx-15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.append("circle").attr("cx",e.cx+15/3).attr("cy",e.cy-15/3).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666");function a(l){const u=yf().startAngle(Math.PI/2).endAngle(3*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);l.append("path").attr("class","mouth").attr("d",u).attr("transform","translate("+e.cx+","+(e.cy+2)+")")}function s(l){const u=yf().startAngle(3*Math.PI/2).endAngle(5*(Math.PI/2)).innerRadius(7.5).outerRadius(6.8181818181818175);l.append("path").attr("class","mouth").attr("d",u).attr("transform","translate("+e.cx+","+(e.cy+7)+")")}function o(l){l.append("line").attr("class","mouth").attr("stroke",2).attr("x1",e.cx-5).attr("y1",e.cy+7).attr("x2",e.cx+5).attr("y2",e.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}return e.score>3?a(i):e.score<3?s(i):o(i),n},zL=function(t,e){const r=t.append("circle");return r.attr("cx",e.cx),r.attr("cy",e.cy),r.attr("class","actor-"+e.pos),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("r",e.r),typeof r.class<"u"&&r.attr("class",r.class),typeof e.title<"u"&&r.append("title").text(e.title),r},YL=function(t,e){const r=e.text.replace(/<br\s*\/?>/gi," "),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.attr("class","legend"),n.style("text-anchor",e.anchor),typeof e.class<"u"&&n.attr("class",e.class);const i=n.append("tspan");return i.attr("x",e.x+e.textMargin*2),i.text(r),n},nst=function(t,e){function r(i,a,s,o,l){return i+","+a+" "+(i+s)+","+a+" "+(i+s)+","+(a+o-l)+" "+(i+s-l*1.2)+","+(a+o)+" "+i+","+(a+o)}const n=t.append("polygon");n.attr("points",r(e.x,e.y,50,20,7)),n.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,YL(t,e)},ist=function(t,e,r){const n=t.append("g"),i=n_();i.x=e.x,i.y=e.y,i.fill=e.fill,i.width=r.width,i.height=r.height,i.class="journey-section section-type-"+e.num,i.rx=3,i.ry=3,x0(n,i),WL(r)(e.text,n,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+e.num},r,e.colour)};let UL=-1;const ast=function(t,e,r){const n=e.x+r.width/2,i=t.append("g");UL++;const a=300+5*30;i.append("line").attr("id","task"+UL).attr("x1",n).attr("y1",e.y).attr("x2",n).attr("y2",a).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),rst(i,{cx:n,cy:300+(5-e.score)*30,score:e.score});const s=n_();s.x=e.x,s.y=e.y,s.fill=e.fill,s.width=r.width,s.height=r.height,s.class="task task-type-"+e.num,s.rx=3,s.ry=3,x0(i,s);let o=e.x+14;e.people.forEach(l=>{const u=e.actors[l].color,h={cx:o,cy:e.y,r:7,fill:u,stroke:"#000",title:l,pos:e.actors[l].position};zL(i,h),o+=10}),WL(r)(e.task,i,s.x,s.y,s.width,s.height,{class:"task"},r,e.colour)},sst=function(t,e){x0(t,{x:e.startx,y:e.starty,width:e.stopx-e.startx,height:e.stopy-e.starty,fill:e.fill,class:"rect"}).lower()},ost=function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},n_=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},WL=function(){function t(i,a,s,o,l,u,h,d){const f=a.append("text").attr("x",s+l/2).attr("y",o+u/2+5).style("font-color",d).style("text-anchor","middle").text(i);n(f,h)}function e(i,a,s,o,l,u,h,d,f){const{taskFontSize:p,taskFontFamily:m}=d,_=i.split(/<br\s*\/?>/gi);for(let y=0;y<_.length;y++){const b=y*p-p*(_.length-1)/2,x=a.append("text").attr("x",s+l/2).attr("y",o).attr("fill",f).style("text-anchor","middle").style("font-size",p).style("font-family",m);x.append("tspan").attr("x",s+l/2).attr("dy",b).text(_[y]),x.attr("y",o+u/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),n(x,h)}}function r(i,a,s,o,l,u,h,d){const f=a.append("switch"),m=f.append("foreignObject").attr("x",s).attr("y",o).attr("width",l).attr("height",u).attr("position","fixed").append("xhtml:div").style("display","table").style("height","100%").style("width","100%");m.append("div").attr("class","label").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(i),e(i,f,s,o,l,u,h,d),n(m,h)}function n(i,a){for(const s in a)s in a&&i.attr(s,a[s])}return function(i){return i.textPlacement==="fo"?r:i.textPlacement==="old"?t:e}}(),yu={drawRect:x0,drawCircle:zL,drawSection:ist,drawText:YL,drawLabel:nst,drawTask:ast,drawBackgroundRect:sst,getTextObj:ost,getNoteRect:n_,initGraphics:function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")}},lst=function(t){Object.keys(t).forEach(function(r){k0[r]=t[r]})},ba={};function cst(t){const e=nt().journey;let r=60;Object.keys(ba).forEach(n=>{const i=ba[n].color,a={cx:20,cy:r,r:7,fill:i,stroke:"#000",pos:ba[n].position};yu.drawCircle(t,a);const s={x:40,y:r+7,fill:"#666",text:n,textMargin:e.boxTextMargin|5};yu.drawText(t,s),r+=20})}const k0=nt().journey,$s=k0.leftMargin,ust=function(t,e,r,n){const i=nt().journey;n.db.clear(),n.parser.parse(t+`
+`);const a=nt().securityLevel;let s;a==="sandbox"&&(s=St("#i"+e));const o=St(a==="sandbox"?s.nodes()[0].contentDocument.body:"body");jn.init();const l=o.select("#"+e);yu.initGraphics(l);const u=n.db.getTasks(),h=n.db.getDiagramTitle(),d=n.db.getActors();for(const b in ba)delete ba[b];let f=0;d.forEach(b=>{ba[b]={color:i.actorColours[f%i.actorColours.length],position:f},f++}),cst(l),jn.insert(0,0,$s,Object.keys(ba).length*50),hst(l,u,0);const p=jn.getBounds();h&&l.append("text").text(h).attr("x",$s).attr("font-size","4ex").attr("font-weight","bold").attr("y",25);const m=p.stopy-p.starty+2*i.diagramMarginY,_=$s+p.stopx+2*i.diagramMarginX;li(l,m,_,i.useMaxWidth),l.append("line").attr("x1",$s).attr("y1",i.height*4).attr("x2",_-$s-4).attr("y2",i.height*4).attr("stroke-width",4).attr("stroke","black").attr("marker-end","url(#arrowhead)");const y=h?70:0;l.attr("viewBox",`${p.startx} -25 ${_} ${m+y}`),l.attr("preserveAspectRatio","xMinYMin meet"),l.attr("height",m+y+25),bn(n.db,l,e)},jn={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,r,n){typeof t[e]>"u"?t[e]=r:t[e]=n(r,t[e])},updateBounds:function(t,e,r,n){const i=nt().journey,a=this;let s=0;function o(l){return function(h){s++;const d=a.sequenceItems.length-s+1;a.updateVal(h,"starty",e-d*i.boxMargin,Math.min),a.updateVal(h,"stopy",n+d*i.boxMargin,Math.max),a.updateVal(jn.data,"startx",t-d*i.boxMargin,Math.min),a.updateVal(jn.data,"stopx",r+d*i.boxMargin,Math.max),l!=="activation"&&(a.updateVal(h,"startx",t-d*i.boxMargin,Math.min),a.updateVal(h,"stopx",r+d*i.boxMargin,Math.max),a.updateVal(jn.data,"starty",e-d*i.boxMargin,Math.min),a.updateVal(jn.data,"stopy",n+d*i.boxMargin,Math.max))}}this.sequenceItems.forEach(o())},insert:function(t,e,r,n){const i=Math.min(t,r),a=Math.max(t,r),s=Math.min(e,n),o=Math.max(e,n);this.updateVal(jn.data,"startx",i,Math.min),this.updateVal(jn.data,"starty",s,Math.min),this.updateVal(jn.data,"stopx",a,Math.max),this.updateVal(jn.data,"stopy",o,Math.max),this.updateBounds(i,s,a,o)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},i_=k0.sectionFills,HL=k0.sectionColours,hst=function(t,e,r){const n=nt().journey;let i="";const a=n.height*2+n.diagramMarginY,s=r+a;let o=0,l="#CCC",u="black",h=0;for(let d=0;d<e.length;d++){const f=e[d];if(i!==f.section){l=i_[o%i_.length],h=o%i_.length,u=HL[o%HL.length];const m={x:d*n.taskMargin+d*n.width+$s,y:50,text:f.section,fill:l,num:h,colour:u};yu.drawSection(t,m,n),i=f.section,o++}const p=f.people.reduce((m,_)=>(ba[_]&&(m[_]=ba[_]),m),{});f.x=d*n.taskMargin+d*n.width+$s,f.y=s,f.width=n.diagramMarginX,f.height=n.diagramMarginY,f.colour=u,f.fill=l,f.num=h,f.actors=p,yu.drawTask(t,f,n),jn.insert(f.x,f.y,f.x+f.width+n.taskMargin,300+5*30)}},GL={setConf:lst,draw:ust};let jL={};const a_={setConf:function(t){jL={...jL,...t}},draw:(t,e,r)=>{try{H.debug(`Renering svg for syntax error
+`);const n=St("#"+e),i=n.append("g");i.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),i.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),i.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),i.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),i.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),i.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),i.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in graph"),i.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text("mermaid version "+r),n.attr("height",100),n.attr("width",500),n.attr("viewBox","768 0 912 512")}catch(n){H.error("Error while rendering info diagram"),H.error(hX(n))}}};let $L=!1;const mu=()=>{$L||($L=!0,Lr("error",{db:{clear:()=>{}},styles:Aw,renderer:a_,parser:{parser:{yy:{}},parse:()=>{}},init:()=>{}},t=>t.toLowerCase().trim()==="error"),Lr("c4",{parser:qc,db:Xw,renderer:a9,styles:Dw,init:t=>{a9.setConf(t.c4)}},lK),Lr("class",{parser:_1,db:Jo,renderer:qtt,styles:Nc,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Jo.clear()}},ZK),Lr("classDiagram",{parser:_1,db:Jo,renderer:Oet,styles:Nc,init:t=>{t.class||(t.class={}),t.class.arrowMarkerAbsolute=t.arrowMarkerAbsolute,Jo.clear()}},QK),Lr("er",{parser:a4,db:zet,renderer:ert,styles:Sw},Fet),Lr("gantt",{parser:M4,db:P4,renderer:rit,styles:Mw},Snt),Lr("info",{parser:q4,db:nit,renderer:iit,styles:Lw},ait),Lr("pie",{parser:V4,db:oit,renderer:lit,styles:Rw},sit),Lr("requirement",{parser:Y4,db:uit,renderer:mit,styles:Iw},cit),Lr("sequence",{parser:H4,db:mL,renderer:AL,styles:Nw,init:t=>{if(t.sequence||(t.sequence={}),t.sequence.arrowMarkerAbsolute=t.arrowMarkerAbsolute,"sequenceDiagram"in t)throw new Error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.");mL.setWrap(t.wrap),AL.setConf(t.sequence)}},bit),Lr("state",{parser:p0,db:ma,renderer:zat,styles:s1,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,ma.clear()}},fat),Lr("stateDiagram",{parser:p0,db:ma,renderer:Gat,styles:s1,init:t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute,ma.clear()}},dat),Lr("journey",{parser:e_,db:VL,renderer:GL,styles:Bw,init:t=>{GL.setConf(t.journey),VL.clear()}},jat),Lr("flowchart",{parser:X1,db:fa,renderer:A4,styles:a1,init:t=>{t.flowchart||(t.flowchart={}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,S4.setConf(t.flowchart),fa.clear(),fa.setGen("gen-1")}},rrt),Lr("flowchart-v2",{parser:X1,db:fa,renderer:A4,styles:a1,init:t=>{t.flowchart||(t.flowchart={}),t.flowchart.arrowMarkerAbsolute=t.arrowMarkerAbsolute,kw({flowchart:{arrowMarkerAbsolute:t.arrowMarkerAbsolute}}),A4.setConf(t.flowchart),fa.clear(),fa.setGen("gen-2")}},nrt),Lr("gitGraph",{parser:hg,db:JX,renderer:sK,styles:oK},BX))};class bu{constructor(e,r){vl(this,"type","graph");vl(this,"parser");vl(this,"renderer");vl(this,"db");vl(this,"detectTypeFailed",!1);var a,s;this.txt=e;const n=nt();this.txt=e;try{this.type=Xp(e,n)}catch(o){this.handleError(o,r),this.type="error",this.detectTypeFailed=!0}const i=Pw(this.type);H.debug("Type "+this.type),this.db=i.db,(s=(a=this.db).clear)==null||s.call(a),this.renderer=i.renderer,this.parser=i.parser,this.parser.parser.yy=this.db,i.init&&(i.init(n),H.debug("Initialized diagram "+this.type,n)),this.txt+=`
+`,this.parse(this.txt,r)}parse(e,r){if(this.detectTypeFailed)return!1;try{return e=e+`
+`,this.db.clear(),this.parser.parse(e),!0}catch(n){this.handleError(n,r)}return!1}handleError(e,r){if(r)ng(e)?r(e.str,e.hash):r(e);else throw e}getParser(){return this.parser}getType(){return this.type}}const s_=(t,e)=>{const r=Xp(t,nt());try{return Pw(r),new bu(t,e)}catch(n){if(!(n instanceof qw))throw H.error(n),n;const i=wG(r);if(!i)throw new Error(`Loader for ${r} not found.`);return i().then(({diagram:a})=>(Lr(r,a,void 0),new bu(t,e)))}};function fst(t,e){return mu(),new bu(t,e).parse(t,e)}async function dst(t,e){return mu(),(await s_(t,e)).parse(t,e)}const XL=function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(r){return r.substring(0,r.length-1)}),e=e.replace(/#\w+;/g,function(r){const n=r.substring(1,r.length-1);return/^\+?\d+$/.test(n)?"\uFB02\xB0\xB0"+n+"\xB6\xDF":"\uFB02\xB0"+n+"\xB6\xDF"}),e},w0=function(t){let e=t;return e=e.replace(/fl°°/g,function(){return"&#"}),e=e.replace(/fl°/g,function(){return"&"}),e=e.replace(/¶ß/g,function(){return";"}),e},pst=function(t,e,r,n){var T;mu(),Ic(),e=e.replace(/\r\n?/g,`
+`);const i=Se.detectInit(e);i&&(Vs(i),ug(i));const a=nt();H.debug(a),e.length>a.maxTextSize&&(e="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa");let s=St("body");if(typeof n<"u"){if(n&&(n.innerHTML=""),a.securityLevel==="sandbox"){const C=St(n).append("iframe").attr("id","i"+t).attr("style","width: 100%; height: 100%;").attr("sandbox","");s=St(C.nodes()[0].contentDocument.body),s.node().style.margin=0}else s=St(n);s.append("div").attr("id","d"+t).attr("style","font-family: "+a.fontFamily).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").attr("xmlns:xlink","http://www.w3.org/1999/xlink").append("g")}else{const C=document.getElementById(t);C&&C.remove();let M;if(a.securityLevel==="sandbox"?M=document.querySelector("#i"+t):M=document.querySelector("#d"+t),M&&M.remove(),a.securityLevel==="sandbox"){const S=St("body").append("iframe").attr("id","i"+t).attr("style","width: 100%; height: 100%;").attr("sandbox","");s=St(S.nodes()[0].contentDocument.body),s.node().style.margin=0}else s=St("body");s.append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g")}e=XL(e);let o,l;try{if(o=s_(e),"then"in o)throw new Error("Diagram is a promise")}catch(C){o=new bu("error"),l=C}const u=s.select("#d"+t).node(),h=o.type,d=u.firstChild,f=d.firstChild;let p="";if(a.themeCSS!==void 0&&(p+=`
+${a.themeCSS}`),a.fontFamily!==void 0&&(p+=`
+:root { --mermaid-font-family: ${a.fontFamily}}`),a.altFontFamily!==void 0&&(p+=`
+:root { --mermaid-alt-font-family: ${a.altFontFamily}}`),h==="flowchart"||h==="flowchart-v2"||h==="graph"){const C=S4.getClasses(e,o),M=a.htmlLabels||((T=a.flowchart)==null?void 0:T.htmlLabels);for(const S in C)M?(p+=`
+.${S} > * { ${C[S].styles.join(" !important; ")} !important; }`,p+=`
+.${S} span { ${C[S].styles.join(" !important; ")} !important; }`):(p+=`
+.${S} path { ${C[S].styles.join(" !important; ")} !important; }`,p+=`
+.${S} rect { ${C[S].styles.join(" !important; ")} !important; }`,p+=`
+.${S} polygon { ${C[S].styles.join(" !important; ")} !important; }`,p+=`
+.${S} ellipse { ${C[S].styles.join(" !important; ")} !important; }`,p+=`
+.${S} circle { ${C[S].styles.join(" !important; ")} !important; }`,C[S].textStyles&&(p+=`
+.${S} tspan { ${C[S].textStyles.join(" !important; ")} !important; }`))}const _=((C,M)=>e1(yw(`${C}{${M}}`),_w))(`#${t}`,Ow(h,p,a.themeVariables)),y=document.createElement("style");y.innerHTML=`#${t} `+_,d.insertBefore(y,f);try{o.renderer.draw(e,t,r1.version,o)}catch(C){throw a_.draw(e,t,r1.version),C}s.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");let b=s.select("#d"+t).node().innerHTML;if(H.debug("cnf.arrowMarkerAbsolute",a.arrowMarkerAbsolute),!Mr(a.arrowMarkerAbsolute)&&a.securityLevel!=="sandbox"&&(b=b.replace(/marker-end="url\(.*?#/g,'marker-end="url(#',"g")),b=w0(b),b=b.replace(/<br>/g,"<br/>"),a.securityLevel==="sandbox"){const C=s.select("#d"+t+" svg").node(),M="100%";let S="100%";C&&(S=C.viewBox.baseVal.height+"px"),b=`<iframe style="width:${M};height:${S};border:0;margin:0;" src="data:text/html;base64,${btoa('<body style="margin:0">'+b+"</body>")}" sandbox="allow-top-navigation-by-user-activation allow-popups">
+  The \u201Ciframe\u201D tag is not supported by your browser.
+</iframe>`}else a.securityLevel!=="loose"&&(b=Ec.sanitize(b,{ADD_TAGS:["foreignobject"],ADD_ATTR:["dominant-baseline"]}));if(typeof r<"u")switch(h){case"flowchart":case"flowchart-v2":r(b,fa.bindFunctions);break;case"gantt":r(b,P4.bindFunctions);break;case"class":case"classDiagram":r(b,Jo.bindFunctions);break;default:r(b)}else H.debug("CB = undefined!");bL();const x=a.securityLevel==="sandbox"?"#i"+t:"#d"+t,k=St(x).node();if(k&&"remove"in k&&k.remove(),l)throw l;return b},gst=async function(t,e,r,n){var T;mu(),Ic(),e=e.replace(/\r\n?/g,`
+`);const i=Se.detectInit(e);i&&(Vs(i),ug(i));const a=nt();H.debug(a),e.length>a.maxTextSize&&(e="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa");let s=St("body");if(typeof n<"u"){if(n&&(n.innerHTML=""),a.securityLevel==="sandbox"){const C=St(n).append("iframe").attr("id","i"+t).attr("style","width: 100%; height: 100%;").attr("sandbox","");s=St(C.nodes()[0].contentDocument.body),s.node().style.margin=0}else s=St(n);s.append("div").attr("id","d"+t).attr("style","font-family: "+a.fontFamily).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").attr("xmlns:xlink","http://www.w3.org/1999/xlink").append("g")}else{const C=document.getElementById(t);C&&C.remove();let M;if(a.securityLevel==="sandbox"?M=document.querySelector("#i"+t):M=document.querySelector("#d"+t),M&&M.remove(),a.securityLevel==="sandbox"){const S=St("body").append("iframe").attr("id","i"+t).attr("style","width: 100%; height: 100%;").attr("sandbox","");s=St(S.nodes()[0].contentDocument.body),s.node().style.margin=0}else s=St("body");s.append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g")}e=XL(e);let o,l;try{o=await s_(e)}catch(C){o=new bu("error"),l=C}const u=s.select("#d"+t).node(),h=o.type,d=u.firstChild,f=d.firstChild;let p="";if(a.themeCSS!==void 0&&(p+=`
+${a.themeCSS}`),a.fontFamily!==void 0&&(p+=`
+:root { --mermaid-font-family: ${a.fontFamily}}`),a.altFontFamily!==void 0&&(p+=`
+:root { --mermaid-alt-font-family: ${a.altFontFamily}}`),h==="flowchart"||h==="flowchart-v2"||h==="graph"){const C=S4.getClasses(e,o),M=a.htmlLabels||((T=a.flowchart)==null?void 0:T.htmlLabels);for(const S in C)M?(p+=`
+.${S} > * { ${C[S].styles.join(" !important; ")} !important; }`,p+=`
+.${S} span { ${C[S].styles.join(" !important; ")} !important; }`):(p+=`
+.${S} path { ${C[S].styles.join(" !important; ")} !important; }`,p+=`
+.${S} rect { ${C[S].styles.join(" !important; ")} !important; }`,p+=`
+.${S} polygon { ${C[S].styles.join(" !important; ")} !important; }`,p+=`
+.${S} ellipse { ${C[S].styles.join(" !important; ")} !important; }`,p+=`
+.${S} circle { ${C[S].styles.join(" !important; ")} !important; }`,C[S].textStyles&&(p+=`
+.${S} tspan { ${C[S].textStyles.join(" !important; ")} !important; }`))}const _=((C,M)=>e1(yw(`${C}{${M}}`),_w))(`#${t}`,Ow(h,p,a.themeVariables)),y=document.createElement("style");y.innerHTML=`#${t} `+_,d.insertBefore(y,f);try{await o.renderer.draw(e,t,r1.version,o)}catch(C){throw a_.draw(e,t,r1.version),C}s.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");let b=s.select("#d"+t).node().innerHTML;if(H.debug("cnf.arrowMarkerAbsolute",a.arrowMarkerAbsolute),!Mr(a.arrowMarkerAbsolute)&&a.securityLevel!=="sandbox"&&(b=b.replace(/marker-end="url\(.*?#/g,'marker-end="url(#',"g")),b=w0(b),b=b.replace(/<br>/g,"<br/>"),a.securityLevel==="sandbox"){const C=s.select("#d"+t+" svg").node(),M="100%";let S="100%";C&&(S=C.viewBox.baseVal.height+"px"),b=`<iframe style="width:${M};height:${S};border:0;margin:0;" src="data:text/html;base64,${btoa('<body style="margin:0">'+b+"</body>")}" sandbox="allow-top-navigation-by-user-activation allow-popups">
+  The \u201Ciframe\u201D tag is not supported by your browser.
+</iframe>`}else a.securityLevel!=="loose"&&(b=Ec.sanitize(b,{ADD_TAGS:["foreignobject"],ADD_ATTR:["dominant-baseline"]}));if(typeof r<"u")switch(h){case"flowchart":case"flowchart-v2":r(b,fa.bindFunctions);break;case"gantt":r(b,P4.bindFunctions);break;case"class":case"classDiagram":r(b,Jo.bindFunctions);break;default:r(b)}else H.debug("CB = undefined!");bL();const x=a.securityLevel==="sandbox"?"#i"+t:"#d"+t,k=St(x).node();if(k&&"remove"in k&&k.remove(),l)throw l;return b};let Xs={};const yst=function(t,e,r,n){try{if(e!==void 0)switch(e=e.trim(),r){case"open_directive":Xs={};break;case"type_directive":if(!Xs)throw new Error("currentDirective is undefined");Xs.type=e.toLowerCase();break;case"arg_directive":if(!Xs)throw new Error("currentDirective is undefined");Xs.args=JSON.parse(e);break;case"close_directive":mst(t,Xs,n),Xs=void 0;break}}catch(i){H.error(`Error while rendering sequenceDiagram directive: ${e} jison context: ${r}`),H.error(i.message)}},mst=function(t,e,r){switch(H.debug(`Directive type=${e.type} with args:`,e.args),e.type){case"init":case"initialize":{["config"].forEach(n=>{typeof e.args[n]<"u"&&(r==="flowchart-v2"&&(r="flowchart"),e.args[r]=e.args[n],delete e.args[n])}),H.debug("sanitize in handleDirective",e.args),Vs(e.args),H.debug("sanitize in handleDirective (done)",e.args),ug(e.args);break}case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap(e.type==="wrap");break;case"themeCss":H.warn("themeCss encountered");break;default:H.warn(`Unhandled directive: source: '%%{${e.type}: ${JSON.stringify(e.args?e.args:{})}}%%`,e);break}};function bst(t={}){t.fontFamily&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),CX(t),(t==null?void 0:t.theme)&&t.theme in aa?t.themeVariables=aa[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=aa.default.getThemeVariables(t.themeVariables));const e=typeof t=="object"?EX(t):xw();D0(e.logLevel),mu()}const Xe=Object.freeze({render:pst,renderAsync:gst,parse:fst,parseAsync:dst,parseDirective:yst,initialize:bst,getConfig:nt,setConfig:kw,getSiteConfig:xw,updateSiteConfig:SX,reset:()=>{Ic()},globalReset:()=>{Ic(Xo)},defaultConfig:Xo});D0(nt().logLevel),Ic(nt());let KL=!1;const _st=async function(t,e,r){try{KL?await JL(t,e,r):QL(t,e,r)}catch(n){H.warn("Syntax Error rendering"),ng(n)&&H.warn(n.str),$n.parseError&&$n.parseError(n)}},ZL=(t,e,r)=>{H.warn(t),ng(t)?(r&&r(t.str,t.hash),e.push({...t,message:t.str,error:t})):(r&&r(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},QL=function(t,e,r){const n=Xe.getConfig();t&&($n.sequenceConfig=t),H.debug(`${r?"":"No "}Callback function found`);let i;if(typeof e>"u")i=document.querySelectorAll(".mermaid");else if(typeof e=="string")i=document.querySelectorAll(e);else if(e instanceof HTMLElement)i=[e];else if(e instanceof NodeList)i=e;else throw new Error("Invalid argument nodes for mermaid.init");H.debug(`Found ${i.length} diagrams`),typeof(t==null?void 0:t.startOnLoad)<"u"&&(H.debug("Start On Load: "+(t==null?void 0:t.startOnLoad)),Xe.updateSiteConfig({startOnLoad:t==null?void 0:t.startOnLoad}));const a=new Se.initIdGenerator(n.deterministicIds,n.deterministicIDSeed);let s;const o=[];for(const l of Array.from(i)){H.info("Rendering diagram: "+l.id);/*! Check if previously processed */if(l.getAttribute("data-processed"))continue;l.setAttribute("data-processed","true");const u=`mermaid-${a.next()}`;s=l.innerHTML,s=Se.entityDecode(s).trim().replace(/<br\s*\/?>/gi,"<br/>");const h=Se.detectInit(s);h&&H.debug("Detected early reinit: ",h);try{Xe.render(u,s,(d,f)=>{l.innerHTML=d,typeof r<"u"&&r(u),f&&f(l)},l)}catch(d){ZL(d,o,$n.parseError)}}if(o.length>0)throw o[0]},vst=t=>{for(const{id:e,detector:r,loader:n}of t)$k(e,r,n)},xst=async t=>{H.debug(`Loading ${t.length} external diagrams`);const r=(await Promise.allSettled(t.map(async({id:n,detector:i,loader:a})=>{const{diagram:s}=await a();Lr(n,s,i)}))).filter(n=>n.status==="rejected");if(r.length>0){H.error(`Failed to load ${r.length} external diagrams`);for(const n of r)H.error(n);throw new Error(`Failed to load ${r.length} external diagrams`)}},JL=async function(t,e,r){const n=Xe.getConfig();t&&($n.sequenceConfig=t),H.debug(`${r?"":"No "}Callback function found`);let i;if(typeof e>"u")i=document.querySelectorAll(".mermaid");else if(typeof e=="string")i=document.querySelectorAll(e);else if(e instanceof HTMLElement)i=[e];else if(e instanceof NodeList)i=e;else throw new Error("Invalid argument nodes for mermaid.init");H.debug(`Found ${i.length} diagrams`),typeof(t==null?void 0:t.startOnLoad)<"u"&&(H.debug("Start On Load: "+(t==null?void 0:t.startOnLoad)),Xe.updateSiteConfig({startOnLoad:t==null?void 0:t.startOnLoad}));const a=new Se.initIdGenerator(n.deterministicIds,n.deterministicIDSeed);let s;const o=[];for(const l of Array.from(i)){H.info("Rendering diagram: "+l.id);/*! Check if previously processed */if(l.getAttribute("data-processed"))continue;l.setAttribute("data-processed","true");const u=`mermaid-${a.next()}`;s=l.innerHTML,s=Se.entityDecode(s).trim().replace(/<br\s*\/?>/gi,"<br/>");const h=Se.detectInit(s);h&&H.debug("Detected early reinit: ",h);try{await Xe.renderAsync(u,s,(d,f)=>{l.innerHTML=d,typeof r<"u"&&r(u),f&&f(l)},l)}catch(d){ZL(d,o,$n.parseError)}}if(o.length>0)throw o[0]},kst=function(t){Xe.initialize(t)},wst=async(t,{lazyLoad:e=!0}={})=>{e?vst(t):await xst(t),KL=!0},tR=function(){if($n.startOnLoad){const{startOnLoad:t}=Xe.getConfig();t&&$n.init()}};if(typeof document<"u"){/*!
+ * Wait for document loaded before starting the execution
+ */window.addEventListener("load",tR,!1)}const Tst=function(t){$n.parseError=t},Est=t=>Xe.parse(t,$n.parseError),T0=[];let o_=!1;const eR=async()=>{if(!o_){for(o_=!0;T0.length>0;){const t=T0.shift();if(t)try{await t()}catch(e){H.error("Error executing queue",e)}}o_=!1}},Cst=t=>new Promise((e,r)=>{const n=()=>new Promise((i,a)=>{Xe.parseAsync(t,$n.parseError).then(s=>{i(s),e(s)},s=>{H.error("Error parsing",s),a(s),r(s)})});T0.push(n),eR()}),Sst=(t,e,r,n)=>new Promise((i,a)=>{const s=()=>new Promise((o,l)=>{Xe.renderAsync(t,e,r,n).then(u=>{o(u),i(u)},u=>{H.error("Error parsing",u),l(u),a(u)})});T0.push(s),eR()}),$n={startOnLoad:!0,diagrams:{},mermaidAPI:Xe,parse:Est,parseAsync:Cst,render:Xe.render,renderAsync:Sst,init:_st,initThrowsErrors:QL,initThrowsErrorsAsync:JL,registerExternalDiagrams:wst,initialize:kst,parseError:void 0,contentLoaded:tR,setParseErrorHandler:Tst};return $n});
+//# sourceMappingURL=mermaid.min.js.map
diff --git a/web/themes/congo/config/_default/config.toml b/web/themes/congo/config/_default/config.toml
new file mode 100644
index 0000000000000000000000000000000000000000..812d611b6b4a01ea12f9af5afabede8bc58ea2a0
--- /dev/null
+++ b/web/themes/congo/config/_default/config.toml
@@ -0,0 +1,13 @@
+# -- Site Configuration --
+# Refer to the theme docs for more details about each of these parameters.
+# https://jpanther.github.io/congo/docs/getting-started/
+
+# baseURL = "https://your_domain.com/"
+defaultContentLanguage = "en"
+
+enableRobotsTXT = true
+paginate = 10
+summaryLength = 0
+
+[outputs]
+  home = ["HTML", "RSS", "JSON"]
diff --git a/web/themes/congo/config/_default/languages.en.toml b/web/themes/congo/config/_default/languages.en.toml
new file mode 100644
index 0000000000000000000000000000000000000000..3399c22b0ae67bd17a153519e14bcb5709b0aad5
--- /dev/null
+++ b/web/themes/congo/config/_default/languages.en.toml
@@ -0,0 +1,62 @@
+languageCode = "en"
+languageName = "English"
+displayName = "EN"
+isoCode = "en"
+weight = 1
+rtl = false
+
+title = "Congo"
+# logo = "img/logo.jpg"
+# description = "My awesome website"
+# copyright = "Copy, _right?_ :thinking_face:"
+
+dateFormat = "2 January 2006"
+
+[author]
+  # name = "Your name here"
+  # image = "img/author.jpg"
+  # headline = "I'm only human"
+  # bio = "A little bit about you"
+  # links = [
+  #   { email = "mailto:hello@your_domain.com" },
+  #   { link = "https://link-to-some-website.com/" },
+  #   { amazon = "https://www.amazon.com/hz/wishlist/ls/wishlist-id" },
+  #   { apple = "https://www.apple.com" },
+  #   { blogger = "https://username.blogspot.com/" },
+  #   { codepen = "https://codepen.io/username" },
+  #   { dev = "https://dev.to/username" },
+  #   { discord = "https://discord.gg/invitecode" },
+  #   { dribbble = "https://dribbble.com/username" },
+  #   { facebook = "https://facebook.com/username" },
+  #   { flickr = "https://www.flickr.com/photos/username/" },
+  #   { foursquare = "https://foursquare.com/username" },
+  #   { github = "https://github.com/username" },
+  #   { gitlab = "https://gitlab.com/username" },
+  #   { google = "https://www.google.com/" },
+  #   { hashnode = "https://username.hashnode.dev" },
+  #   { instagram = "https://instagram.com/username" },
+  #   { keybase = "https://keybase.io/username" },
+  #   { kickstarter = "https://www.kickstarter.com/profile/username" },
+  #   { lastfm = "https://lastfm.com/user/username" },
+  #   { linkedin = "https://linkedin.com/in/username" },
+  #   { mastodon = "https://mastodon.instance/@username" },
+  #   { medium = "https://medium.com/username" },
+  #   { microsoft = "https://www.microsoft.com/" },
+  #   { orcid = "https://orcid.org/userid" },
+  #   { patreon = "https://www.patreon.com/username" },
+  #   { pinterest = "https://pinterest.com/username" },
+  #   { reddit = "https://reddit.com/user/username" },
+  #   { researchgate = "https://www.researchgate.net/profile/username" },
+  #   { slack = "https://workspace.url/team/userid" },
+  #   { snapchat = "https://snapchat.com/add/username" },
+  #   { soundcloud = "https://soundcloud.com/username" },
+  #   { stack-overflow = "https://stackoverflow.com/users/userid/username" },
+  #   { steam = "https://steamcommunity.com/profiles/userid" },
+  #   { telegram = "https://t.me/username" },
+  #   { tiktok = "https://tiktok.com/@username" },
+  #   { tumblr = "https://username.tumblr.com" },
+  #   { twitch = "https://twitch.tv/username" },
+  #   { twitter = "https://twitter.com/username" },
+  #   { whatsapp = "https://wa.me/phone-number" },
+  #   { youtube = "https://youtube.com/username" },
+  # ]
diff --git a/web/themes/congo/config/_default/markup.toml b/web/themes/congo/config/_default/markup.toml
new file mode 100644
index 0000000000000000000000000000000000000000..c5449fc38babae996ace0501e8841cd5284a43aa
--- /dev/null
+++ b/web/themes/congo/config/_default/markup.toml
@@ -0,0 +1,13 @@
+# -- Markup --
+# These settings are required for the theme to function.
+
+[goldmark]
+[goldmark.renderer]
+  unsafe = true
+
+[highlight]
+  noClasses = false
+
+[tableOfContents]
+  startLevel = 2
+  endLevel = 4
diff --git a/web/themes/congo/config/_default/menus.en.toml b/web/themes/congo/config/_default/menus.en.toml
new file mode 100644
index 0000000000000000000000000000000000000000..16298213813ad07f365ebc71a176857baefbb43a
--- /dev/null
+++ b/web/themes/congo/config/_default/menus.en.toml
@@ -0,0 +1,36 @@
+# -- Main Menu --
+# The main menu is displayed in the header at the top of the page.
+# Acceptable parameters are name, pageRef, page, url, title, weight.
+# 
+# The simplest menu configuration is to provide:
+#   name = The name to be displayed for this menu link
+#   pageRef = The identifier of the page or section to link to
+#
+# By default the menu is ordered alphabetically. This can be
+# overridden by providing a weight value. The menu will then be
+# ordered by weight from lowest to highest.
+
+[[main]]
+  name = "Blog"
+  pageRef = "posts"
+  weight = 10
+
+[[main]]
+  name = "Categories"
+  pageRef = "categories"
+  weight = 20
+
+[[main]]
+  name = "Tags"
+  pageRef = "tags"
+  weight = 30
+
+
+# -- Footer Menu --
+# The footer menu is displayed at the bottom of the page, just before
+# the copyright notice. Configure as per the main menu above.
+
+# [[footer]]
+#   name = "Tags"
+#   pageRef = "tags"
+#   weight = 10
diff --git a/web/themes/congo/config/_default/module.toml b/web/themes/congo/config/_default/module.toml
new file mode 100644
index 0000000000000000000000000000000000000000..74f7727234bef912c09d4cb012c8de7bcb881208
--- /dev/null
+++ b/web/themes/congo/config/_default/module.toml
@@ -0,0 +1,3 @@
+[hugoVersion]
+  extended = false
+  min = "0.87.0"
diff --git a/web/themes/congo/config/_default/params.toml b/web/themes/congo/config/_default/params.toml
new file mode 100644
index 0000000000000000000000000000000000000000..654127eb73a1a82e64955d48acc8c55220a756ed
--- /dev/null
+++ b/web/themes/congo/config/_default/params.toml
@@ -0,0 +1,74 @@
+# -- Theme Options --
+# These options control how the theme functions and allow you to
+# customise the display of your website.
+#
+# Refer to the theme docs for more details about each of these parameters.
+# https://jpanther.github.io/congo/docs/configuration/#theme-parameters
+
+colorScheme = "congo"
+defaultAppearance = "light" # valid options: light or dark
+autoSwitchAppearance = true
+
+enableSearch = false
+enableCodeCopy = false
+
+# mainSections = ["section1", "section2"]
+# robots = ""
+
+[header]
+  layout = "basic" # valid options: basic, hamburger, hybrid, custom
+  # logo = "img/logo.jpg"
+  showTitle = true
+
+[footer]
+  showCopyright = true
+  showThemeAttribution = true
+  showAppearanceSwitcher = false
+  showScrollToTop = true
+
+[homepage]
+  layout = "page" # valid options: page, profile, custom
+  showRecent = false
+
+[article]
+  showDate = true
+  showDateUpdated = false
+  showAuthor = true
+  showBreadcrumbs = false
+  showDraftLabel = true
+  showEdit = false
+  # editURL = "https://github.com/username/repo/"
+  editAppendPath = true
+  showHeadingAnchors = true
+  showPagination = true
+  invertPagination = false
+  showReadingTime = true
+  showTableOfContents = false
+  showTaxonomies = false
+  showWordCount = false
+  showComments = false
+  # sharingLinks = ["facebook", "twitter", "pinterest", "reddit", "linkedin", "email"]
+
+[list]
+  showBreadcrumbs = false
+  showSummary = false
+  showTableOfContents = false
+  showTaxonomies = false
+  groupByYear = true
+  paginationWidth = 1
+
+[sitemap]
+  excludedKinds = ["taxonomy", "term"]
+
+[taxonomy]
+  showTermCount = true
+
+[fathomAnalytics]
+  # site = "ABC12345"
+  # domain = "llama.yoursite.com"
+
+[verification]
+  # google = ""
+  # bing = ""
+  # pinterest = ""
+  # yandex = ""
diff --git a/web/themes/congo/data/sharing.json b/web/themes/congo/data/sharing.json
new file mode 100644
index 0000000000000000000000000000000000000000..34e608998908c76a9e4b137f0d73ed0329d9a212
--- /dev/null
+++ b/web/themes/congo/data/sharing.json
@@ -0,0 +1,32 @@
+{
+  "email": {
+    "icon": "email",
+    "title": "sharing.email",
+    "url": "mailto:?body=%s&subject=%s"
+  },
+  "facebook": {
+    "icon": "facebook",
+    "title": "sharing.facebook",
+    "url": "https://www.facebook.com/sharer/sharer.php?u=%s&quote=%s"
+  },
+  "linkedin": {
+    "icon": "linkedin",
+    "title": "sharing.linkedin",
+    "url": "https://www.linkedin.com/shareArticle?mini=true&url=%s&title=%s"
+  },
+  "pinterest": {
+    "icon": "pinterest",
+    "title": "sharing.pinterest",
+    "url": "https://pinterest.com/pin/create/bookmarklet/?url=%s&description=%s"
+  },
+  "reddit": {
+    "icon": "reddit",
+    "title": "sharing.reddit",
+    "url": "https://reddit.com/submit/?url=%s&resubmit=true&title=%s"
+  },
+  "twitter": {
+    "icon": "twitter",
+    "title": "sharing.twitter",
+    "url": "https://twitter.com/intent/tweet/?url=%s&text=%s"
+  }
+}
diff --git a/web/themes/congo/exampleSite/assets/img/author.jpg b/web/themes/congo/exampleSite/assets/img/author.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bd53fd27863bfba057ea44367ccbbdcac812ae7f
Binary files /dev/null and b/web/themes/congo/exampleSite/assets/img/author.jpg differ
diff --git a/web/themes/congo/exampleSite/assets/img/logo.jpg b/web/themes/congo/exampleSite/assets/img/logo.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..79dc6e82a38eeb274eb548468fdff05796464e53
Binary files /dev/null and b/web/themes/congo/exampleSite/assets/img/logo.jpg differ
diff --git a/web/themes/congo/exampleSite/assets/js/home.js b/web/themes/congo/exampleSite/assets/js/home.js
new file mode 100644
index 0000000000000000000000000000000000000000..372103498175e1cd2426d24c7399eb81043a7003
--- /dev/null
+++ b/web/themes/congo/exampleSite/assets/js/home.js
@@ -0,0 +1,27 @@
+function switchHomeLayout() {
+  const pageDiv = document.getElementById("page");
+  const profileDiv = document.getElementById("profile");
+  const layoutCode = document.querySelectorAll("code[id=layout]");
+  if (pageDiv.style.display === "none") {
+    pageDiv.style.display = "block";
+    profileDiv.style.display = "none";
+    layoutCode.forEach(function (el) {
+      el.innerText = "page";
+    });
+  } else {
+    pageDiv.style.display = "none";
+    profileDiv.style.display = "block";
+    layoutCode.forEach(function (el) {
+      el.innerText = "profile";
+    });
+  }
+}
+
+window.addEventListener("DOMContentLoaded", (event) => {
+  document.querySelectorAll("#switch-layout-button").forEach((button) =>
+    button.addEventListener("click", function (e) {
+      e.preventDefault();
+      switchHomeLayout();
+    })
+  );
+});
diff --git a/web/themes/congo/exampleSite/config/_default/config.toml b/web/themes/congo/exampleSite/config/_default/config.toml
new file mode 100644
index 0000000000000000000000000000000000000000..6c8e9a84e8cafe474e3187dea4d7aaa6d31b3886
--- /dev/null
+++ b/web/themes/congo/exampleSite/config/_default/config.toml
@@ -0,0 +1,13 @@
+# -- Site Configuration --
+# Refer to the theme docs for more details about each of these parameters.
+# https://jpanther.github.io/congo/docs/getting-started/
+
+theme = "congo"
+defaultContentLanguage = "en"
+
+enableRobotsTXT = true
+paginate = 15
+summaryLength = 0
+
+[outputs]
+  home = ["HTML", "RSS", "JSON"]
diff --git a/web/themes/congo/exampleSite/config/_default/languages.en.toml b/web/themes/congo/exampleSite/config/_default/languages.en.toml
new file mode 100644
index 0000000000000000000000000000000000000000..ac2ea022d1382a3f6c212adcc0c783c7392275e6
--- /dev/null
+++ b/web/themes/congo/exampleSite/config/_default/languages.en.toml
@@ -0,0 +1,25 @@
+languageCode = "en-au"
+languageName = "English (Australia)"
+displayName = ":flag-au:"
+isoCode = "en-AU"
+weight = 1
+rtl = false
+
+title = "Congo"
+# logo = "img/logo.jpg"
+description = "A powerful, lightweight theme for Hugo built with Tailwind CSS."
+copyright = "&copy; 2022 Congo contributors"
+
+dateFormat = "2 January 2006"
+
+[author]
+  name = "Congo"
+  image = "img/author.jpg"
+  headline = "Not your ordinary theme!"
+  bio = "This is an example author bio, and although there's a stock photo of a dog here, this article was actually created by a human. :dog:"
+  links = [
+    { twitter = "https://twitter.com/" },
+    { facebook = "https://facebook.com/" },
+    { linkedin = "https://linkedin.com/" },
+    { youtube = "https://youtube.com/" },
+  ]
diff --git a/web/themes/congo/exampleSite/config/_default/markup.toml b/web/themes/congo/exampleSite/config/_default/markup.toml
new file mode 100644
index 0000000000000000000000000000000000000000..c5449fc38babae996ace0501e8841cd5284a43aa
--- /dev/null
+++ b/web/themes/congo/exampleSite/config/_default/markup.toml
@@ -0,0 +1,13 @@
+# -- Markup --
+# These settings are required for the theme to function.
+
+[goldmark]
+[goldmark.renderer]
+  unsafe = true
+
+[highlight]
+  noClasses = false
+
+[tableOfContents]
+  startLevel = 2
+  endLevel = 4
diff --git a/web/themes/congo/exampleSite/config/_default/menus.en.toml b/web/themes/congo/exampleSite/config/_default/menus.en.toml
new file mode 100644
index 0000000000000000000000000000000000000000..e51dda49411dbdad9dfd23311c13e09ad4d9638c
--- /dev/null
+++ b/web/themes/congo/exampleSite/config/_default/menus.en.toml
@@ -0,0 +1,41 @@
+# -- Main Menu --
+# The main menu is displayed in the header at the top of the page.
+# Acceptable parameters are name, pageRef, page, url, title, weight.
+# 
+# The simplest menu configuration is to provide:
+#   name = The name to be displayed for this menu link
+#   pageRef = The identifier of the page or section to link to
+#
+# By default the menu is ordered alphabetically. This can be
+# overridden by providing a weight value. The menu will then be
+# ordered by weight from lowest to highest.
+
+[[main]]
+  name = "Docs"
+  pageRef = "docs"
+  weight = 10
+
+[[main]]
+  name = "Samples"
+  pageRef = "samples"
+  weight = 20
+
+[[main]]
+  name = "Users"
+  pageRef = "users"
+  weight = 30
+  
+[[main]]
+  name = "GitHub"
+  url = "https://github.com/jpanther/congo"
+  weight = 40
+
+
+# -- Footer Menu --
+# The footer menu is displayed at the bottom of the page, just before
+# the copyright notice. Configure as per the main menu above.
+
+# [[footer]]
+#   name = "Tags"
+#   pageRef = "tags"
+#   weight = 10
diff --git a/web/themes/congo/exampleSite/config/_default/module.toml b/web/themes/congo/exampleSite/config/_default/module.toml
new file mode 100644
index 0000000000000000000000000000000000000000..6a8e43fa224e23b1f5350a56d71ea90ae356b382
--- /dev/null
+++ b/web/themes/congo/exampleSite/config/_default/module.toml
@@ -0,0 +1,3 @@
+[hugoVersion]
+  extended = false
+  min = "0.86.1"
diff --git a/web/themes/congo/exampleSite/config/_default/params.toml b/web/themes/congo/exampleSite/config/_default/params.toml
new file mode 100644
index 0000000000000000000000000000000000000000..c894ee3a746ee25773a4cbafce0f3d80f32e32c0
--- /dev/null
+++ b/web/themes/congo/exampleSite/config/_default/params.toml
@@ -0,0 +1,74 @@
+# -- Theme Options --
+# These options control how the theme functions and allow you to
+# customise the display of your website.
+#
+# Refer to the theme docs for more details about each of these parameters.
+# https://jpanther.github.io/congo/docs/configuration/#theme-parameters
+
+colorScheme = "congo"
+defaultAppearance = "light" # valid options: light or dark
+autoSwitchAppearance = true
+
+enableSearch = true
+enableCodeCopy = true
+
+mainSections = ["samples"]
+# robots = ""
+
+[header]
+  layout = "basic" # valid options: basic, hamburger, hybrid, custom
+  # logo = "img/logo.jpg"
+  showTitle = true
+
+[footer]
+  showCopyright = true
+  showThemeAttribution = true
+  showAppearanceSwitcher = true
+  showScrollToTop = true
+
+[homepage]
+  layout = "custom" # valid options: page, profile, custom
+  showRecent = true
+
+[article]
+  showDate = true
+  showDateUpdated = false
+  showAuthor = true
+  showBreadcrumbs = true
+  showDraftLabel = true
+  showEdit = true
+  editURL = "https://github.com/jpanther/congo/tree/dev/exampleSite/content/"
+  editAppendPath = true
+  showHeadingAnchors = true
+  showPagination = true
+  invertPagination = false
+  showReadingTime = true
+  showTableOfContents = true
+  showTaxonomies = false
+  showWordCount = false
+  showComments = false
+  # sharingLinks = ["facebook", "twitter", "pinterest", "reddit", "linkedin", "email"]
+
+[list]
+  showBreadcrumbs = true
+  showSummary = false
+  showTableOfContents = true
+  showTaxonomies = false
+  groupByYear = false
+  paginationWidth = 1
+
+[sitemap]
+  excludedKinds = ["taxonomy", "term"]
+
+[taxonomy]
+  showTermCount = true
+
+[fathomAnalytics]
+  # site = "ABC12345"
+  # domain = "llama.yoursite.com"
+
+[verification]
+  # google = ""
+  # bing = ""
+  # pinterest = ""
+  # yandex = ""
diff --git a/web/themes/congo/exampleSite/config/_default/taxonomies.toml b/web/themes/congo/exampleSite/config/_default/taxonomies.toml
new file mode 100644
index 0000000000000000000000000000000000000000..193dc4bb2402307c601ab350959e30a33b107543
--- /dev/null
+++ b/web/themes/congo/exampleSite/config/_default/taxonomies.toml
@@ -0,0 +1 @@
+tag = "tags"
diff --git a/web/themes/congo/exampleSite/content/_index.md b/web/themes/congo/exampleSite/content/_index.md
new file mode 100755
index 0000000000000000000000000000000000000000..6e0d8d51641207d14213d285a8caf496046a5455
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/_index.md
@@ -0,0 +1,29 @@
+---
+title: "Welcome to Congo! :tada:"
+description: "This is a demo of the Congo theme for Hugo."
+---
+
+{{< lead >}}
+A powerful, lightweight theme for Hugo built with Tailwind CSS.
+{{< /lead >}}
+
+This is a demo site built entirely using Congo. It also contains a complete set of [theme documentation]({{< ref "docs" >}}). Congo is flexible and is great for both static page-based content (like this demo) or a traditional blog with a feed of recent posts.
+
+<div class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900">
+  <span class="flex items-center ltr:pr-3 rtl:pl-3 text-primary-400">
+    {{< icon "triangle-exclamation" >}}
+  </span>
+  <span class="flex items-center justify-between grow dark:text-neutral-300">
+    <span class="prose dark:prose-invert">This is a demo of the <code id="layout">page</code> layout.</span>
+    <button
+      id="switch-layout-button"
+      class="px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
+    >
+      Switch layout &orarr;
+    </button>
+  </span>
+</div>
+
+Explore the [sample pages]({{< ref "samples" >}}) to get a feel for what Congo can do. If you like what you see, check out the project on [Github](https://github.com/jpanther/congo) or read the [Installation guide]({{< ref "docs/installation" >}}) to get started.
+
+![A stylised photograph of a purple squid on a pink backdrop.](squid.jpg "Photo by [Jippe Joosten](https://unsplash.com/@jippe_joosten?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/s/photos/vibrant-purple?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText).")
diff --git a/web/themes/congo/exampleSite/content/docs/_index.md b/web/themes/congo/exampleSite/content/docs/_index.md
new file mode 100755
index 0000000000000000000000000000000000000000..a6a2c4b1a2848c6c97735567f6323f96e7833945
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/_index.md
@@ -0,0 +1,19 @@
+---
+title: "Documentation"
+description: "Learn how to use Congo and its features."
+
+cascade:
+  showDate: false
+  showAuthor: false
+  invertPagination: true
+---
+
+{{< lead >}}
+Simple, yet powerful. Learn how to use Congo and its features.
+{{< /lead >}}
+
+![Screenshots of Congo on an iPhone, iPad and MacBook](screenshot.png)
+
+This section contains everything you need to know about Congo. If you're new, check out the [Installation]({{< ref "docs/installation" >}}) guide to begin or visit the [Samples]({{< ref "samples" >}}) section to see what Congo can do.
+
+---
diff --git a/web/themes/congo/exampleSite/content/docs/advanced-customisation.md b/web/themes/congo/exampleSite/content/docs/advanced-customisation.md
new file mode 100644
index 0000000000000000000000000000000000000000..b8d524238f58a8fbb51d3fbacaa54306ef67a334
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/advanced-customisation.md
@@ -0,0 +1,181 @@
+---
+title: "Advanced Customisation"
+date: 2020-08-08
+draft: false
+description: "Learn how to build Congo manually."
+slug: "advanced-customisation"
+tags: ["advanced", "css", "docs"]
+---
+
+There are many ways you can make advanced changes to Congo. Read below to learn more about what can be customised and the best way of achieving your desired result.
+
+If you need further advice, post your questions on [GitHub Discussions](https://github.com/jpanther/congo/discussions).
+
+## Hugo project structure
+
+Before leaping into it, first a quick note about [Hugo project structure](https://gohugo.io/getting-started/directory-structure/) and best practices for managing your content and theme customisations.
+
+{{< alert >}}
+**In summary:** Never directly edit the theme files. Only make customisations in your Hugo project's sub-directories, not in the themes directory itself.
+{{< /alert >}}
+
+Congo is built to take advantage of all the standard Hugo practices. It is designed to allow all aspects of the theme to be customised and overriden without changing any of the core theme files. This allows for a seamless upgrade experience while giving you total control over the look and feel of your website.
+
+In order to achieve this, you should never manually adjust any of the theme files directly. Whether you install using Hugo modules, as a git submodule or manually include the theme in your `themes/` directory, you should always leave these files intact.
+
+The correct way to adjust any theme behaviour is by overriding files using Hugo's powerful [file lookup order](https://gohugo.io/templates/lookup-order/). In summary, the lookup order ensures any files you include in your project directory will automatically take precedence over any theme files.
+
+For example, if you wanted to override the main article template in Congo, you can simply create your own `layouts/_default/single.html` file and place it in the root of your project. This file will then override the `single.html` from the theme without ever changing the theme itself. This works for any theme files - HTML templates, partials, shortcodes, config files, data, assets, etc.
+
+As long as you follow this simple practice, you will always be able to update the theme (or test different theme versions) without worrying that you will lose any of your custom changes.
+
+## Colour schemes
+
+Congo ships with a number of colour schemes out of the box. To change the basic colour scheme, you can set the `colorScheme` theme parameter. Refer to the [Getting Started]({{< ref "getting-started#colour-schemes" >}}) section to learn more about the built-in schemes.
+
+In addition to the default schemes, you can also create your own and re-style the entire website to your liking. Schemes are created by by placing a `<scheme-name>.css` file in the `assets/css/schemes/` folder. Once the file is created, simply refer to it by name in the theme configuration.
+
+Congo defines a three-colour palette that is used throughout the theme. The three colours are defined as `neutral`, `primary` and `secondary` variants, each containing ten shades of colour.
+
+Due to the way Tailwind CSS 3.0 calculates colour values with opacity, the colours specified in the scheme need to [conform to a particular format](https://github.com/adamwathan/tailwind-css-variable-text-opacity-demo) by providing the red, green and blue colour values.
+
+```css
+:root {
+  --color-primary-500: 139, 92, 246;
+}
+```
+
+This example defines a CSS variable for the `primary-500` colour with a red value of `139`, green value of `92` and blue value of `246`.
+
+Use one of the existing theme stylesheets as a template. You are free to define your own colours, but for some inspiration, check out the official [Tailwind colour palette reference](https://tailwindcss.com/docs/customizing-colors#color-palette-reference).
+
+## Overriding the stylesheet
+
+Sometimes you need to add a custom style to style your own HTML elements. Congo provides for this scenario by allowing you to override the default styles in your own CSS stylesheet. Simply create a `custom.css` file in your project's `assets/css/` folder.
+
+The `custom.css` file will be minified by Hugo and loaded automatically after all the other theme styles which means anything in your custom file will take precedence over the defaults.
+
+### Adjusting the font size
+
+Changing the font size of your website is one example of overriding the default stylesheet. Congo makes this simple as it uses scaled font sizes throughout the theme which are derived from the base HTML font size. By default, Tailwind sets the default size to `12pt`, but it can be changed to whatever value you prefer.
+
+Create a `custom.css` file using the [instructions above]({{< ref "#overriding-the-stylesheet" >}}) and add the following CSS declaration:
+
+```css
+/* Increase the default font size */
+html {
+  font-size: 13pt;
+}
+```
+
+Simply by changing this one value, all the font sizes on your website will be adjusted to match this new size. Therefore, to increase the overall font sizes used, make the value greater than `12pt`. Similarly, to decrease the font sizes, make the value less than `12pt`.
+
+## Building the theme CSS from source
+
+If you'd like to make a major change, you can take advantage of Tailwind CSS's JIT compiler and rebuild the entire theme CSS from scratch. This is useful if you want to adjust the Tailwind configuration or add extra Tailwind classes to the main stylesheet.
+
+{{< alert >}}
+**Note:** Building the theme manually is intended for advanced users.
+{{< /alert >}}
+
+Let's step through how building the Tailwind CSS works.
+
+### Tailwind configuration
+
+In order to generate a CSS file that only contains the Tailwind classes that are actually being used the JIT compiler needs to scan through all the HTML templates and Markdown content files to check which styles are present in the markup. The compiler does this by looking at the `tailwind.config.js` file which is included in the root of the theme directory:
+
+```js
+// themes/congo/tailwind.config.js
+
+module.exports = {
+  content: [
+    "./layouts/**/*.html",
+    "./content/**/*.{html,md}",
+    "./themes/congo/layouts/**/*.html",
+    "./themes/congo/content/**/*.{html,md}",
+  ],
+
+  // and more...
+};
+```
+
+This default configuration has been included with these content paths so that you can easily generate your own CSS file without needing to modify it, provided you follow a particular project structure. Namely, **you have to include Congo in your project as a subdirectory at `themes/congo/`**. This means you cannot easily use Hugo Modules to install the theme and you must go down either the git submodule (recommended) or manual install routes. The [Installation docs]({{< ref "installation" >}}) explain how to install the theme using either of these methods.
+
+### Project structure
+
+In order to take advantage of the default configuration, your project should look something like this...
+
+```shell
+.
+├── assets
+│   └── css
+│       └── compiled
+│           └── main.css  # this is the file we will generate
+├── config  # site config
+│   └── _default
+├── content  # site content
+│   ├── _index.md
+│   ├── projects
+│   │   └── _index.md
+│   └── blog
+│       └── _index.md
+├── layouts  # custom layouts for your site
+│   ├── partials
+│   │   └── extend-article-link.html
+│   ├── projects
+│   │   └── list.html
+│   └── shortcodes
+│       └── disclaimer.html
+└── themes
+    └── congo  # git submodule or manual theme install
+```
+
+This example structure adds a new `projects` content type with its own custom layout along with a custom shortcode and extended partial. Provided the project follows this structure, all that's required is to recompile the `main.css` file.
+
+### Install dependencies
+
+In order for this to work you'll need to change into the `themes/congo/` directory and install the project dependencies. You'll need [npm](https://docs.npmjs.com/cli/v7/configuring-npm/install) on your local machine for this step.
+
+```shell
+cd themes/congo
+npm install
+```
+
+### Run the Tailwind compiler
+
+With the dependencies installed all that's left is to use [Tailwind CLI](https://v2.tailwindcss.com/docs/installation#using-tailwind-cli) to invoke the JIT compiler. Navigate back to the root of your Hugo project and issue the following command:
+
+```shell
+cd ../..
+./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit
+```
+
+It's a bit of an ugly command due to the paths involved but essentially you're calling Tailwind CLI and passing it the location of the Tailwind config file (the one we looked at above), where to find the theme's `main.css` file and then where you want the compiled CSS file to be placed (it's going into the `assets/css/compiled/` folder of your Hugo project).
+
+The config file will automatically inspect all the content and layouts in your project as well as all those in the theme and build a new CSS file that contains all the CSS required for your website. Due to the way Hugo handles file hierarchy, this file in your project will now automatically override the one that comes with the theme.
+
+Each time you make a change to your layouts and need new Tailwind CSS styles, you can simply re-run the command and generate the new CSS file. You can also add `-w` to the end of the command to run the JIT compiler in watch mode.
+
+### Make a build script
+
+To fully complete this solution, you can simplify this whole process by adding aliases for these commands, or do what I do and add a `package.json` to the root of your project which contains the necessary scripts...
+
+```js
+// package.json
+
+{
+  "name": "my-website",
+  "version": "1.0.0",
+  "description": "",
+  "scripts": {
+    "server": "hugo server -b http://localhost -p 8000",
+    "dev": "NODE_ENV=development ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w",
+    "build": "NODE_ENV=production ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit"
+  },
+  // and more...
+}
+```
+
+Now when you want to work on designing your site, you can invoke `npm run dev` and the compiler will run in watch mode. When you're ready to deploy, run `npm run build` and you'll get a clean Tailwind CSS build.
+
+🙋‍♀️ If you need help, feel free to ask a question on [GitHub Discussions](https://github.com/jpanther/congo/discussions).
diff --git a/web/themes/congo/exampleSite/content/docs/configuration.md b/web/themes/congo/exampleSite/content/docs/configuration.md
new file mode 100644
index 0000000000000000000000000000000000000000..a80b0f2755d927c247729d7db31e0792269e952c
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/configuration.md
@@ -0,0 +1,172 @@
+---
+title: "Configuration"
+date: 2020-08-14
+draft: false
+description: "All the configuration variables available in Congo."
+slug: "configuration"
+tags: ["config", "docs"]
+---
+
+Congo is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured.
+
+The theme ships with a default configuration that gets you up and running with a basic blog or static website.
+
+> Configuration files bundled with the theme are provided in TOML format as this is the default Hugo syntax. Feel free to convert your config to YAML or JSON if you wish.
+
+The default theme configuration is documented in each file so you can freely adjust the settings to meet your needs.
+
+{{< alert >}}
+As outlined in the [installation instructions]({{< ref "/docs/installation#set-up-theme-configuration-files" >}}), you should adjust your theme configuration by modifying the files in the `config/_default/` folder of your Hugo project and delete the `config.toml` file in your project root.
+{{< /alert >}}
+
+## Site configuration
+
+Standard Hugo configuration variables are respected throughout the theme, however there are some specific things that should be configured for the best experience.
+
+The site configuration is managed through the `config/_default/config.toml` file. The table below outlines all the settings that the Congo takes advantage of.
+
+Note that the variable names provided in this table use dot notation to simplify the TOML data structure (ie. `outputs.home` refers to `[outputs] home`).
+
+<!-- prettier-ignore-start -->
+|Name|Default|Description|
+|---|---|---|
+|`theme`|`"congo"`|When using Hugo Modules this config value should be removed. For all other installation types, this must be set to `congo` for the theme to function.|
+|`baseURL`|_Not set_|The URL to the root of the website.|
+|`defaultContentLanguage`|`"en"`|This value determines the default language of theme components and content. Refer to the [language and i18n](#language-and-i18n) section below for supported language codes.|
+|`enableRobotsTXT`|`true`|When enabled, a `robots.txt` file will be created in the site root that allows search engines to crawl the entire site. If you prefer to provide your own pre-made `robots.txt`, set to `false` and place your file in the `static` directory. For complete control, you may provide a [custom layout]({{< ref "content-examples#custom-layouts" >}}) to generate this file.|
+|`paginate`|`10`|The number of articles listed on each page of the article listing.|
+|`summaryLength`|`0`|The number of words that are used to generate the article summary when one is not provided in the [front matter]({{< ref "front-matter" >}}). A value of `0` will use the first sentence. This value has no effect when summaries are hidden.|
+|`outputs.home`|`["HTML", "RSS", "JSON"]`|The output formats that are generated for the site. Congo requires HTML, RSS and JSON for all theme components to work correctly.|
+|`permalinks`|_Not set_|Refer to the [Hugo docs](https://gohugo.io/content-management/urls/#permalinks) for permalink configuration.|
+|`taxonomies`|_Not set_|Refer to the [Organising content]({{< ref "getting-started#organising-content" >}}) section for taxonomy configuration.|
+<!-- prettier-ignore-end -->
+
+## Language and i18n
+
+Congo is optimised for full multilingual websites and theme assets are translated into several languages out of the box. The language configuration allows you to generate multiple versions of your content to provide a customised experience to your visitors in their native language.
+
+The theme currently supports the following languages out of the box:
+
+| Language                                | Code    |
+| --------------------------------------- | ------- |
+| :gb: **English (default)**              | `en`    |
+| :bangladesh: Bengali                    | `bn`    |
+| :cn: Chinese - Simplified (China)       | `zh-cn` |
+| :taiwan: Chinese - Traditional (Taiwan) | `zh-tw` |
+| :netherlands: Dutch                     | `nl`    |
+| :finland: Finnish                       | `fi`    |
+| :fr: French                             | `fr`    |
+| :de: German                             | `de`    |
+| :israel: Hebrew                         | `he`    |
+| :hungary: Hungarian                     | `hu`    |
+| :it: Italian                            | `it`    |
+| :jp: Japanese                           | `ja`    |
+| :brazil: Portuguese (Brazil)            | `pt-br` |
+| :portugal: Portuguese (Portugal)        | `pt-pt` |
+| :romania: Romanian                      | `ro`    |
+| :es: Spanish (Spain)                    | `es`    |
+| :tr: Turkish                            | `tr`    |
+
+The default translations can be overridden by creating a custom file in `i18n/[code].yaml` that contains the translation strings. You can also use this method to add new languages. If you'd like to share a new translation with the community, please [open a pull request](https://github.com/jpanther/congo/pulls).
+
+### Configuration
+
+In order to be as flexible as possible, a language configuration file needs to be created for each language on the website. By default Congo includes an English language configuration at `config/_default/languages.en.toml`.
+
+The default file can be used as a template to create additional languages, or renamed if you wish to author your website in a language other than English. Simply name the file using the format `languages.[language-code].toml`.
+
+{{< alert >}}
+**Note:** Ensure the `defaultContentLanguage` parameter in the [site configuration](#site-configuration) matches the language code in your language config filename.
+{{< /alert >}}
+
+<!-- prettier-ignore-start -->
+|Name|Default|Description|
+|---|---|---|
+|`languageCode`|`"en"`|The Hugo language code for this file. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-au`) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the `isoCode` parameter which is case-sensitive.|
+|`languageName`|`"English"`|The name of the language.|
+|`displayName`|`"EN"`|The name used when the language appears on the website.|
+|`isoCode`|`"en"`|The ISO language code for HTML metadata purposes. It can be a top-level language (ie. `en`) or a sub-variant (ie. `en-AU`).|
+|`weight`|`1`|The weight determines the order of languages when building multilingual sites.|
+|`rtl`|`false`|Whether or not this is a RTL language. Set to `true` to reflow content from right-to-left. Congo fully supports using RTL and LTR languages at the same time and will dynamically adjust to both.|
+|`dateFormat`|`"2 January 2006"`|How dates are formatted in this language. Refer to the [Hugo docs](https://gohugo.io/functions/format/#gos-layout-string) for acceptable formats.|
+|`title`|`"Congo"`|The title of the website. This will be displayed in the site header and footer.|
+|`description`|_Not set_|The website description. This will be used in the site metadata.|
+|`copyright`|_Not set_|A Markdown string containing the copyright message to be displayed in the site footer. If none is provided, Congo will automatically generate a copyright string using the site `title`.|
+|`author.name`|_Not set_|The author's name. This will be displayed in article footers, and on the homepage when the profile layout is used.|
+|`author.image`|_Not set_|Path to the image file of the author. The image should be a 1:1 aspect ratio and placed in the site's `assets/` folder.|
+|`author.headline`|_Not set_|A Markdown string containing the author's headline. It will be displayed on the profile homepage under the author's name.|
+|`author.bio`|_Not set_|A Markdown string containing the author's bio. It will be displayed in article footers.|
+|`author.links`|_Not set_|The links to display alongside the author's details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in `assets/icons/`.|
+<!-- prettier-ignore-end -->
+
+### Menus
+
+Congo also supports language-specific menu configurations. Menu config files follow the same naming format as the languages file. Simply provide the language code in the file name to tell Hugo which language the file relates to.
+
+Menu config files are named with the format `menus.[language-code].toml`. Always ensure that the language code used in the menus configuration matches the languages configuration.
+
+The [Getting Started]({{< ref "getting-started#menus" >}}) section explains more about the structure of this file. You can also refer to the [Hugo menu docs](https://gohugo.io/content-management/menus/) for more configuration examples.
+
+## Theme parameters
+
+Congo provides a large number of configuration parameters that control how the theme functions. The table below outlines every available parameter in the `config/_default/params.toml` file.
+
+Many of the article defaults here can be overridden on a per article basis by specifying it in the front matter. Refer to the [Front Matter]({{< ref "front-matter" >}}) section for further details.
+
+<!-- prettier-ignore-start -->
+|Name|Default|Description|
+|---|---|---|
+|`colorScheme`|`"congo"`|The theme colour scheme to use. Valid values are `congo` (default), `avocado`, `ocean`, `fire` and `slate`. Refer to the [Colour Schemes]({{< ref "getting-started#colour-schemes" >}}) section for more details.|
+|`defaultAppearance`|`"light"`|The default theme appearance, either `light` or `dark`.|
+|`autoSwitchAppearance`|`true`|Whether the theme appearance automatically switches based upon the visitor's operating system preference. Set to `false` to force the site to always use the `defaultAppearance`.|
+|`enableSearch`|`false`|Whether site search is enabled. Set to `true` to enable search functionality. Note that the search feature depends on the `outputs.home` setting in the [site configuration](#site-configuration) being set correctly.|
+|`enableCodeCopy`|`false`|Whether copy-to-clipboard buttons are enabled for `<code>` blocks. The `highlight.noClasses` parameter must be set to `false` for code copy to function correctly. Read more about [other configuration files](#other-configuration-files) below.|
+|`mainSections`|_Not set_|The sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used.|
+|`robots`|_Not set_|String that indicates how robots should handle your site. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values.|
+|`header.layout`|`"basic"`|The layout of the page header and menu. Valid values are `basic`, `hamburger`, `hybrid` or `custom`. When set to `custom`, you must provide your own layout by creating a `/layouts/partials/header/custom.html` file.|
+|`header.logo`|_Not set_|The relative path to the site logo file within the `assets/` folder. The logo file should be provided at 2x resolution and supports any image dimensions.|
+|`header.showTitle`|`true`|Whether the site title is displayed in the header.|
+|`footer.showCopyright`|`true`|Whether or not to show the copyright string in the site footer. Note that the string itself can be customised using the `copyright` parameter in the [languages configuration](#language-and-i18n).|
+|`footer.showThemeAttribution`|`true`|Whether or not to show the "powered by" theme attribution in the site footer. If you choose to disable this message, please consider attributing the theme somewhere else on your site (for example, on your about page).|
+|`footer.showAppearanceSwitcher`|`false`|Whether or not to show the appearance switcher in the site footer. The browser's local storage is used to persist the visitor's preference.|
+|`footer.showScrollToTop`|`true`|When set to `true` the scroll to top arrow is displayed.|
+|`homepage.layout`|`"page"`|The layout of the homepage. Valid values are `page`, `profile` or `custom`. When set to `custom`, you must provide your own layout by creating a `/layouts/partials/home/custom.html` file. Refer to the [Homepage Layout]({{< ref "homepage-layout" >}}) section for more details.|
+|`homepage.showRecent`|`false`|Whether or not to display the recent articles list on the homepage.|
+|`article.showDate`|`true`|Whether or not article dates are displayed.|
+|`article.showDateUpdated`|`false`|Whether or not the dates articles were updated are displayed.|
+|`article.showAuthor`|`true`|Whether or not the author box is displayed in the article footer.|
+|`article.showBreadcrumbs`|`false`|Whether or not breadcrumbs are displayed in the article header.|
+|`article.showDraftLabel`|`true`|Whether or not the draft indicator is shown next to articles when site is built with `--buildDrafts`.|
+|`article.showEdit`|`false`|Whether or not the link to edit the article content should be displayed.|
+|`article.editURL`|_Not set_|When `article.showEdit` is active, the URL for the edit link.|
+|`article.editAppendPath`|`true`|When `article.showEdit` is active, whether or not the path to the current article should be appended to the URL set at `article.editURL`.|
+|`article.showHeadingAnchors`|`true`|Whether or not heading anchor links are displayed alongside headings within articles.|
+|`article.showPagination`|`true`|Whether or not the next/previous article links are displayed in the article footer.|
+|`article.invertPagination`|`false`|Whether or not to flip the direction of the next/previous article links.|
+|`article.showReadingTime`|`true`|Whether or not article reading times are displayed.|
+|`article.showTableOfContents`|`false`|Whether or not the table of contents is displayed on articles.|
+|`article.showTaxonomies`|`false`|Whether or not the taxonomies related to this article are displayed.|
+|`article.showWordCount`|`false`|Whether or not article word counts are displayed.|
+|`article.showComments`|`false`|Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer.|
+|`article.sharingLinks`|_Not set_|Which sharing links to display at the end of each article. When not provided, or set to `false` no links will be displayed.|
+|`list.showBreadcrumbs`|`false`|Whether or not breadcrumbs are displayed in the header on list pages.|
+|`list.showTableOfContents`|`false`|Whether or not the table of contents is displayed on list pages.|
+|`list.showTaxonomies`|`false`|Whether or not the taxonomies related to this article are displayed on list pages.|
+|`list.showSummary`|`false`|Whether or not article summaries are displayed on list pages. If a summary is not provided in the [front matter]({{< ref "front-matter" >}}), one will be auto generated using the `summaryLength` parameter in the [site configuration](#site-configuration).|
+|`list.groupByYear`|`true`|Whether or not articles are grouped by year on list pages.|
+|`list.paginationWidth`|`1`|How many pagination links to output either side of the current page when the page list needs to be truncated. A width of `1` will output one link either side of the current page when the list needs to be truncated. Links to the current, first and last pages are always displayed and are in addition to this value.|
+|`sitemap.excludedKinds`|`["taxonomy", "term"]`|Kinds of content that should be excluded from the generated `/sitemap.xml` file. Refer to the [Hugo docs](https://gohugo.io/templates/section-templates/#page-kinds) for acceptable values.|
+|`taxonomy.showTermCount`|`true`|Whether or not the number of articles within a taxonomy term is displayed on the taxonomy listing.|
+|`fathomAnalytics.site`|_Not set_|The site code generated by Fathom Analytics for the website. Refer to the [Analytics docs]({{< ref "partials#analytics" >}}) for more details.|
+|`fathomAnalytics.domain`|_Not set_|If using a custom domain with Fathom Analytics, provide it here to serve `script.js` from the custom domain.|
+|`verification.google`|_Not set_|The site verification string provided by Google to be included in the site metadata.|
+|`verification.bing`|_Not set_|The site verification string provided by Bing to be included in the site metadata.|
+|`verification.pinterest`|_Not set_|The site verification string provided by Pinterest to be included in the site metadata.|
+|`verification.yandex`|_Not set_|The site verification string provided by Yandex to be included in the site metadata.|
+<!-- prettier-ignore-end -->
+
+## Other configuration files
+
+The theme also includes a `markup.toml` configuration file. This file contains some important parameters that ensure that Hugo is correctly configured to generate sites built with Congo.
+
+Always ensure this file is present in the config directory and that the required values are set. Failure to do so may cause certain features to fucntion incorrectly and could result in unintended behaviour.
diff --git a/web/themes/congo/exampleSite/content/docs/content-examples.md b/web/themes/congo/exampleSite/content/docs/content-examples.md
new file mode 100644
index 0000000000000000000000000000000000000000..ef577f09065029e56a3b49ff87af582ddeee5ec5
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/content-examples.md
@@ -0,0 +1,316 @@
+---
+title: "Content Examples"
+date: 2020-08-09
+draft: false
+description: "All the partials available in Congo."
+slug: "content-examples"
+tags: ["content", "example"]
+---
+
+If you've been reading the documentation in order, you should now know about all the features and configurations available in Congo. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project.
+
+{{< alert >}}
+**Tip:** If you're new to Hugo, be sure to check out the [official docs](https://gohugo.io/content-management/page-bundles/) to learn more about the concept of page bundles and resources.
+{{< /alert >}}
+
+The examples on this page can all be adapted to different scenarios but hopefully give you some ideas about how to approach formatting a particular content item for your individual project.
+
+## Branch pages
+
+Branch page bundles in Hugo cover items like the homepage, section listings, and taxonomy pages. The important thing to remember about branch bundles is that the filename for this content type is **`_index.md`**.
+
+Congo will honour the front matter parameters specified in branch pages and these will override the default settings for that particular page. For example, setting the `title` parameter in a branch page will allow overriding the page title.
+
+### Homepage
+
+|              |                      |
+| ------------ | -------------------- |
+| **Layout:**  | `layouts/index.html` |
+| **Content:** | `content/_index.md`  |
+
+The homepage in Congo is special in that it's overarching design is controlled by the homepage layout config parameter. You can learn more about this in the [Homepage Layout]({{< ref "homepage-layout" >}}) section.
+
+If you want to add custom content to this page, you simply need to create a `content/_index.md` file. Anything in this file will then be included in your homepage.
+
+**Example:**
+
+```yaml
+---
+title: "Welcome to Congo!"
+description: "This is a demo of adding content to the homepage."
+---
+Welcome to my website! I'm really happy you stopped by.
+```
+
+_This example sets a custom title and adds some additional text to the body of the page. Any Markdown formatted text is acceptable, including shortcodes, images and links._
+
+### List pages
+
+|              |                              |
+| ------------ | ---------------------------- |
+| **Layout:**  | `layouts/_default/list.html` |
+| **Content:** | `content/../_index.md`       |
+
+List pages group all the pages within into a section and provide a way for visitors to reach each page. A blog or portfolio are examples of a list page as they group together posts or projects.
+
+Creating a list page is as simple as making a sub-directory in the content folder. For example, to create a "Projects" section, you would create `content/projects/`. Then create a Markdown file for each of your projects.
+
+A list page will be generated by default, however to customise the content, you should also create an `_index.md` page in this new directory.
+
+```shell
+.
+└── content
+    └── projects
+        ├── _index.md          # /projects
+        ├── first-project.md   # /projects/first-project
+        └── another-project
+            ├── index.md       # /projects/another-project
+            └── project.jpg
+```
+
+Hugo will generate URLs for the pages in your projects folder accordingly.
+
+Just like the homepage, content in the `_index.md` file will be output into the generated list index. Congo will then list any pages in this section below the content.
+
+**Example:**
+
+```yaml
+---
+title: "Projects"
+description: "Learn about some of my projects."
+cascade:
+  showReadingTime: false
+---
+This section contains all my current projects.
+```
+
+_In this example, the special `cascade` parameter is being used to hide the reading time on any sub-pages within this section. By doing this, any project pages will not have their reading time showing. This is a great way to override default theme parameters for an entire section without having to include them in every individual page._
+
+The [samples section]({{< ref "samples" >}}) of this site is an example of a list page.
+
+### Taxonomy pages
+
+|                  |                                  |
+| ---------------- | -------------------------------- |
+| **List layout:** | `layouts/_default/taxonomy.html` |
+| **Term layout:** | `layouts/_default/term.html`     |
+| **Content:**     | `content/../_index.md`           |
+
+Taxonomy pages come in two forms - taxonomy lists and taxonomy terms. Lists display a listing of each of the terms within a given taxonomy, while terms display a list of pages that are related to a given term.
+
+The terminology can get a little confusing so let's explore an example using a taxonomy named `animals`.
+
+Firstly, to use taxonomies in Hugo, they have to be configured. This is done by creating a config file at `config/_default/taxonomies.toml` and defining the taxonomy name.
+
+```toml
+# config/_default/taxonomies.toml
+
+animal = "animals"
+```
+
+Hugo expects taxonomies to be listed using their singular and plural forms, so we add the singular `animal` equals the plural `animals` to create our example taxonomy.
+
+Now that our `animals` taxonomy exists, it needs to be added to individual content items. It's as simple as inserting it into the front matter:
+
+```yaml
+---
+title: "Into the Lion's Den"
+description: "This week we're learning about lions."
+animals: ["lion", "cat"]
+---
+```
+
+This has now created two _terms_ within our `animals` taxonomy - `lion` and `cat`.
+
+Although it's not obvious at this point, Hugo will now be generating list and term pages for this new taxonomy. By default the listing can be accessed at `/animals/` and the term pages can be found at `/animals/lion/` and `/animals/cat/`.
+
+The list page will list all the terms contained within the taxonomy. In this example, navigating to `/animals/` will show a page that has links for "lion" and "cat" which take visitors to the individual term pages.
+
+The term pages will list all the pages contained within that term. These term lists are essentially the same as normal [list pages](#list-pages) and behave in much the same way.
+
+In order to add custom content to taxonomy pages, simply create `_index.md` files in the content folder using the taxonomy name as the sub-directory name.
+
+```shell
+.
+└── content
+    └── animals
+        ├── _index.md       # /animals
+        └── lion
+            └── _index.md   # /animals/lion
+```
+
+Anything in these content files will now be placed onto the generated taxonomy pages. As with other content, the front matter variables can be used to override defaults. In this way you could have a tag named `lion` but override the `title` to be "Lion".
+
+To see how this looks in reality, check out the [tags taxonomy listing]({{< ref "tags" >}}) on this site.
+
+## Leaf pages
+
+|                           |                                 |
+| ------------------------- | ------------------------------- |
+| **Layout:**               | `layouts/_default/single.html`  |
+| **Content (standalone):** | `content/../page-name.md`       |
+| **Content (bundled):**    | `content/../page-name/index.md` |
+
+Leaf pages in Hugo are basically standard content pages. They are defined as pages that don't contain any sub-pages. These could be things like an about page, or an individual blog post that lives in the blog section of the website.
+
+The most important thing to remember about leaf pages is that unlike branch pages, leaf pages should be named `index.md` _without_ an underscore. Leaf pages are also special in that they can be grouped together at the top level of the section and named with a unique name.
+
+```shell
+.
+└── content
+    └── blog
+        ├── first-post.md     # /blog/first-post
+        ├── second-post.md    # /blog/second-post
+        └── third-post
+            ├── index.md      # /blog/third-post
+            └── image.jpg
+```
+
+When including assets in a page, like an image, a page bundle should be used. Page bundles are created using a sub-directory with an `index.md` file. Grouping the assets with the content in its own directory is important as many of the shortcodes and other theme logic assumes that resources are bundled alongside pages.
+
+**Example:**
+
+```yaml
+---
+title: "My First Blog Post"
+date: 2022-01-25
+description: "Welcome to my blog!"
+summary: "Learn more about me and why I am starting this blog."
+tags: ["welcome", "new", "about", "first"]
+---
+_This_ is the content of my blog post.
+```
+
+Leaf pages have a wide variety of [front matter]({{< ref "front-matter" >}}) parameters that can be used to customise how they are displayed.
+
+### External links
+
+Congo has a special feature that allows links to external pages to appear alongside articles in the article listings. This is useful if you have content on third party websites like Medium, or research papers that you'd like to link to, without replicating the content in your Hugo site.
+
+In order to create an external link article, some special front matter needs to be set:
+
+```yaml
+---
+title: "My Medium post"
+date: 2022-01-25
+externalUrl: "https://medium.com/"
+summary: "I wrote a post on Medium."
+showReadingTime: false
+_build:
+  render: "false"
+  list: "local"
+---
+```
+
+Along with the normal front matter parameters like `title` and `summary`, the `externalUrl` parameter is used to tell Congo that this is not an ordinary article. The URL provided here will be where visitors are directed when they select this article.
+
+Additionally, we use a special Hugo front matter parameter `_build` to prevent a normal page for this content being generated - there's no point generating a page since we're linking to an external URL!
+
+The theme includes an archetype to make generating these external link articles simple. Just specify `-k external` when making new content.
+
+```shell
+hugo new -k external posts/my-post.md
+```
+
+### Simple pages
+
+|                   |                                |
+| ----------------- | ------------------------------ |
+| **Layout:**       | `layouts/_default/simple.html` |
+| **Front Matter:** | `layout: "simple"`             |
+
+Congo also includes a special layout for simple pages. The simple layout is a full-width template that just places Markdown content into the page without any special theme features.
+
+The only features available in the simple layout are breadcrumbs and sharing links. However, the behaviour of these can still be controlled using the normal page [front matter]({{< ref "front-matter" >}}) variables.
+
+To enable the simple layout on a particular page, add the `layout` front matter variable with a value of `"simple"`:
+
+```yaml
+---
+title: "My landing page"
+date: 2022-03-08
+layout: "simple"
+---
+This page content is now full-width.
+```
+
+## Custom layouts
+
+One of the benefits of Hugo is that it makes it easy to create custom layouts for the whole site, individual sections or pages.
+
+Layouts follow all the normal Hugo templating rules and more information is available in the [official Hugo docs](https://gohugo.io/templates/introduction/).
+
+### Overriding default layouts
+
+Each of the content types discussed above lists the layout file that is used to generate each type of page. If this file is created in your local project it will override the theme template and thus can be used to customise the default style of the website.
+
+For example, creating a `layouts/_default/single.html` file will allow the layout of leaf pages to be completely customised.
+
+### Custom section layouts
+
+It is also simple to create custom layouts for individual content sections. This is useful when you want to make a section that lists a certain type of content using a particular style.
+
+Let's step through an example that creates a custom "Projects" page that lists projects using a special layout.
+
+In order to do this, structure your content using the normal Hugo content rules and create a section for your projects. Additionally, create a new layout for the projects section by using the same directory name as the content and adding a `list.html` file.
+
+```shell
+.
+└── content
+│   └── projects
+│       ├── _index.md
+│       ├── first-project.md
+│       └── second-project.md
+└── layouts
+    └── projects
+        └── list.html
+```
+
+This `list.html` file will now override the default list template, but only for the `projects` section. Before we look at this file, lets first look at the individual project files.
+
+```yaml
+---
+title: "Congo"
+date: 2021-08-11
+icon: "github"
+description: "A theme for Hugo built with Tailwind CSS."
+topics: ["Hugo", "Web", "Tailwind"]
+externalUrl: "https://github.com/jpanther/congo/"
+---
+```
+
+_In this example we are assigning some metadata for each project that we can then use in our list template. There's no page content, but there's nothing stopping you from including it. It's your own custom template after all!_
+
+With the projects defined, now we can create a list template that outputs the details of each project.
+
+```go
+{{ define "main" }}
+  <section class="mt-8">
+    {{ range .Pages }}
+      <article class="pb-6">
+        <a class="flex" href="{{ .Params.externalUrl }}">
+          <div class="mr-3 text-3xl text-neutral-300">
+            <span class="relative inline-block align-text-bottom">
+              {{ partial "icon.html" .Params.icon }}
+            </span>
+          </div>
+          <div>
+            <h3 class="flex text-xl font-semibold">
+              {{ .Title }}
+            </h3>
+            <p class="text-sm text-neutral-400">
+              {{ .Description }}
+            </p>
+          </div>
+        </a>
+      </article>
+    {{ end }}
+  </section>
+{{ end }}
+```
+
+Although this is quite a straightforward example, you can see that it steps through each of the pages in this section (ie. each project), and then outputs HTML links to each project alongside an icon. The metadata in the front matter for each project is used to determine which information is displayed.
+
+Keep in mind that you'll need to ensure the relevant styles and classes are available, which may require the Tailwind CSS to be recompiled. This is discussed in more detail in the [Advanced Customisation]({{< ref "advanced-customisation" >}}) section.
+
+When making custom templates like this one, it's always easiest to take a look at how the default Congo template works and then use that as a guide. Remember, the [Hugo docs](https://gohugo.io/templates/introduction/) are a great resource to learn more about creating templates too.
diff --git a/web/themes/congo/exampleSite/content/docs/front-matter.md b/web/themes/congo/exampleSite/content/docs/front-matter.md
new file mode 100644
index 0000000000000000000000000000000000000000..d50bc7d10fbf8caec62bbe25b3b253a77c6fce38
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/front-matter.md
@@ -0,0 +1,42 @@
+---
+title: "Front Matter"
+date: 2020-08-12
+draft: false
+description: "All the front matter variables available in Congo."
+slug: "front-matter"
+tags: ["front matter", "config", "docs"]
+---
+
+In addition to the [default Hugo front matter parameters](https://gohugo.io/content-management/front-matter/#front-matter-variables), Congo adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.
+
+Front matter parameter default values are inherited from the theme's [base configuration]({{< ref "configuration" >}}), so you only need to specify these parameters in your front matter when you want to override the default.
+
+<!-- prettier-ignore-start -->
+|Name|Default|Description|
+|---|---|---|
+|`title`|_Not set_|The name of the article.|
+|`description`|_Not set_|The text description for the article. It is used in the HTML metadata.|
+|`externalUrl`|_Not set_|If this article is published on a third-party website, the URL to this article. Providing a URL will prevent a content page being generated and any references to this article will link directly to the third-party website.|
+|`editURL`|`article.editURL`|When `showEdit` is active, the URL for the edit link.|
+|`editAppendPath`|`article.editAppendPath`|When `showEdit` is active, whether or not the path to the current article should be appended to the URL set at `editURL`.|
+|`groupByYear`|`list.groupByYear`|Whether or not articles are grouped by year on list pages.|
+|`menu`|_Not set_|When a value is provided, a link to this article will appear in the named menus. Valid values are `main` or `footer`.|
+|`robots`|_Not set_|String that indicates how robots should handle this article. If set, it will be output in the page head. Refer to [Google's docs](https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#directives) for valid values.|
+|`sharingLinks`|`article.sharingLinks`|Which sharing links to display at the end of this article. When not provided, or set to `false` no links will be displayed.|
+|`showAuthor`|`article.showAuthor`|Whether or not the author box is displayed in the article footer.|
+|`showBreadcrumbs`|`article.showBreadcrumbs` or `list.showBreadcrumbs`|Whether the breadcrumbs are displayed in the article or list header.|
+|`showDate`|`article.showDate`|Whether or not the article date is displayed. The date is set using the `date` parameter.|
+|`showDateUpdated`|`article.showDateUpdated`|Whether or not the date the article was updated is displayed. The date is set using the `lastmod` parameter.|
+|`showEdit`|`article.showEdit`|Whether or not the link to edit the article content should be displayed.|
+|`showHeadingAnchors`|`article.showHeadingAnchors`|Whether or not heading anchor links are displayed alongside headings within this article.|
+|`showPagination`|`article.showPagination`|Whether or not the next/previous article links are displayed in the article footer.|
+|`invertPagination`|`article.invertPagination`|Whether or not to flip the direction of the next/previous article links.|
+|`showReadingTime`|`article.showReadingTime`|Whether or not the article reading time is displayed.|
+|`showTaxonomies`|`article.showTaxonomies`|Whether or not the taxonomies that relate to this article are displayed.|
+|`showTableOfContents`|`article.showTableOfContents`|Whether or not the table of contents is displayed on this article.|
+|`showWordCount`|`article.showWordCount`|Whether or not the article word count is displayed.|
+|`showComments`|`article.showComments`|Whether or not the [comments partial]({{< ref "partials#comments" >}}) is included after the article footer.|
+|`showSummary`|`list.showSummary`|Whether or not the article summary should be displayed on list pages.|
+|`summary`|Auto generated using `summaryLength` (see [site configuration]({{< ref "configuration#site-configuration" >}}))|When `showSummary` is enabled, this is the Markdown string to be used as the summary for this article.|
+|`xml`|`true` unless excluded by `sitemap.excludedKinds`|Whether or not this article is included in the generated `/sitemap.xml` file.|
+<!-- prettier-ignore-end -->
diff --git a/web/themes/congo/exampleSite/content/docs/getting-started/article-screenshot.jpg b/web/themes/congo/exampleSite/content/docs/getting-started/article-screenshot.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9a7d72134b420ed09f0a915c5ccad8815bdcc2c4
Binary files /dev/null and b/web/themes/congo/exampleSite/content/docs/getting-started/article-screenshot.jpg differ
diff --git a/web/themes/congo/exampleSite/content/docs/getting-started/index.md b/web/themes/congo/exampleSite/content/docs/getting-started/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..35c6614162be20e0efe8d9d5f4a25511d2f4f9a5
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/getting-started/index.md
@@ -0,0 +1,203 @@
+---
+title: "Getting Started"
+date: 2020-08-15
+draft: false
+description: "All the front matter variables available in Congo."
+slug: "getting-started"
+tags: ["installation", "docs"]
+---
+
+{{< alert >}}
+This section assumes you have already [installed the Congo theme]({{< ref "docs/installation" >}}).
+{{< /alert >}}
+
+The config files that ship with Congo contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.
+
+## Basic configuration
+
+Before creating any content, there are a few things you should set for a new installation. Starting in the `config.toml` file, set the `baseURL` and `languageCode` parameters. The `languageCode` should be set to the main language that you will be using to author your content.
+
+```toml
+# config/_default/config.toml
+
+baseURL = "https://your_domain.com/"
+languageCode = "en"
+```
+
+The next step is to configure the language settings. Although Congo supports multilingual setups, for now, just configure the main language.
+
+Locate the `languages.en.toml` file in the config folder. If your main language is English you can use this file as is. Otherwise, rename it so that it includes the correct language code in the filename. For example, for French, rename the file to `languages.fr.toml`.
+
+{{< alert >}}
+Note that the language code in the language config filename should match the `languageCode` setting in `config.toml`.
+{{< /alert >}}
+
+```toml
+# config/_default/languages.en.toml
+
+title = "My awesome website"
+
+[author]
+name = "My name"
+image = "img/author.jpg"
+headline = "A generally awesome human"
+bio = "A little bit about me"
+links = [
+  { twitter = "https://twitter.com/username" }
+]
+```
+
+The `[author]` configuration determines how the author information is displayed on the website. The image should be placed in the site's `assets/` folder. Links will be displayed in the order they are listed.
+
+If you need extra detail, further information about each of these configuration options, is covered in the [Configuration]({{< ref "configuration" >}}) section.
+
+## Colour schemes
+
+Congo ships with a number of colour schemes out of the box. To change the scheme, simply set the `colorScheme` theme parameter. Valid options are `congo` (default), `avocado`, `fire`, `ocean` and `slate`.
+
+```toml
+# config/_default/params.toml
+
+colorScheme = "congo"
+```
+
+Congo defines a three-colour palette that is used throughout the theme. Each main colour contains ten shades which are based upon the colours that are included in [Tailwind](https://tailwindcss.com/docs/customizing-colors#color-palette-reference).
+
+#### Congo (default)
+
+{{< swatches "#71717a" "#8b5cf6" "#d946ef" >}}
+
+#### Avocado
+
+{{< swatches "#78716c" "#84cc16" "#10b981" >}}
+
+#### Fire
+
+{{< swatches "#78716c" "#f97316" "#f43f5e" >}}
+
+#### Ocean
+
+{{< swatches "#64748b" "#3b82f6" "#06b6d4" >}}
+
+#### Slate
+
+{{< swatches "#6B7280" "#64748b" "#6B7280" >}}
+
+Although these are the default schemes, you can also create your own. Refer to the [Advanced Customisation]({{< ref "advanced-customisation#colour-schemes" >}}) section for details.
+
+## Organising content
+
+By default, Congo doesn't force you to use a particular content type. In doing so you are free to define your content as you wish. You might prefer _pages_ for a static site, _posts_ for a blog, or _projects_ for a portfolio.
+
+### Directory structure
+
+Here's a quick overview of a basic Congo project. All content is placed within the `content` folder:
+
+```shell
+.
+├── assets
+│   └── img
+│       └── author.jpg
+├── config
+│   └── _default
+├── content
+│   ├── _index.md
+│   ├── about.md
+│   └── posts
+│       ├── _index.md
+│       ├── first-post.md
+│       └── another-post
+│           ├── aardvark.jpg
+│           └── index.md
+└── themes
+    └── congo
+```
+
+{{< alert >}}
+The key thing to note here is that within the content directory, normal article pages are named `index.md` while list pages are named `_index.md`. Any assets that go along with the article should be placed in a sub-directory alongside the index file.
+{{< /alert >}}
+
+It's important to have a firm grasp of how Hugo expects content to be organised as the theme is designed to take full advantage of Hugo page bundles. Be sure to read the [official Hugo docs](https://gohugo.io/content-management/organization/) for more information.
+
+### Feature, cover and thumbnail images
+
+The Congo theme supports displaying images on article listings and at the top of individual article pages. There are three types of images supported, each with their own use case: `feature`, `cover` and `thumb`.
+
+In the example below, a cover and thumb image have been provided for the `first-post` article:
+
+```shell
+.
+└── content
+    └── posts
+        ├── _index.md
+        └── first-post
+            ├── cover.jpg
+            ├── index.md
+            └── thumb.jpg
+```
+
+The `thumb` image is used as the article thumbnail and will be displayed in article lists, and the `cover` image will be displayed at the top of the article content on individual article pages.
+
+![A screenshot of an article with a thumbnail image](article-screenshot.jpg "This example shows an article with a thumbnail image.")
+
+{{< alert >}}
+In order to provide maximum performance, thumbnail images are automatically cropped and resized to a 4:3 ratio. Cover images will be automatically resized to fit their content, but any ratio is permitted.
+{{< /alert >}}
+
+The `feature` image is a special type, and when present, it will be used in place of _both_ the `thumb` and `cover` images. Feature images are also present in the article metadata, which is included when content is shared to third-party networks like Facebook and Twitter.
+
+The theme will intelligently detect article images and automatically add them to your site. You don't have to refer to them in the front matter and simply need to place an appropriately named file within the page resources. If the term `feature`, `cover` or `thumb` is found anywhere in the image filename, then it will be used for that purpose.
+
+The [Samples section]({{< ref "samples" >}}) provides a number of examples of these images (and you can view the [source code](https://github.com/jpanther/congo/tree/dev/exampleSite/content/samples) to see the file structure).
+
+### Taxonomies
+
+Congo is also flexible when it comes to taxonomies. Some people prefer to use _tags_ and _categories_ to group their content, others prefer to use _topics_.
+
+Hugo defaults to using posts, tags and categories out of the box and this will work fine if that's what you want. If you wish to customise this, however, you can do so by creating a `taxonomies.toml` configuration file:
+
+```toml
+# config/_default/taxonomies.toml
+
+topic = "topics"
+```
+
+This will replace the default _tags_ and _categories_ with _topics_. Refer to the [Hugo Taxonomy docs](https://gohugo.io/content-management/taxonomies/) for more information on naming taxonomies.
+
+When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections, which is covered below.
+
+## Menus
+
+Congo has two menus that can be customised to suit the content and layout of your site. The `main` menu appears in the site header and the `footer` menu appears at the bottom of the page just above the copyright notice.
+
+Both menus are configured in the `menus.en.toml` file. Similarly to the languages config file, if you wish to use another language, rename this file and replace `en` with the language code you wish to use.
+
+```toml
+# config/_default/menus.toml
+
+[[main]]
+  name = "Blog"
+  pageRef = "posts"
+  weight = 10
+
+[[main]]
+  name = "Topics"
+  pageRef = "topics"
+  weight = 20
+
+[[footer]]
+  name = "Privacy"
+  url = "https://external-link"
+```
+
+The `name` parameter specifies the text that is used in the menu link. You can also optionally provide a `title` which fills the HTML title attribute for the link.
+
+The `pageRef` parameter allows you to easily reference Hugo content pages and taxonomies. It is the quickest way to configure the menu as you can simply refer to any Hugo content item and it will automatically build the correct link. To link to external URLs, the `url` parameter can be used.
+
+Menu links will be sorted from lowest to highest `weight`, and then alphabetically by `name`.
+
+Both menus are completely optional and can be commented out if not required. Use the template provided in the file as a guide.
+
+## Detailed configuration
+
+The steps above are the bare minimum configuration. If you now run `hugo server` you will be presented with a blank Congo website. Detailed configuration is covered in the [Configuration]({{< ref "configuration" >}}) section.
diff --git a/web/themes/congo/exampleSite/content/docs/homepage-layout/home-page.jpg b/web/themes/congo/exampleSite/content/docs/homepage-layout/home-page.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2a619e0523ec572fb4c5ddad9361abcbce2372ea
Binary files /dev/null and b/web/themes/congo/exampleSite/content/docs/homepage-layout/home-page.jpg differ
diff --git a/web/themes/congo/exampleSite/content/docs/homepage-layout/home-profile-list.jpg b/web/themes/congo/exampleSite/content/docs/homepage-layout/home-profile-list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..319da77b7869839ff11b72af5dc3f5025fb24744
Binary files /dev/null and b/web/themes/congo/exampleSite/content/docs/homepage-layout/home-profile-list.jpg differ
diff --git a/web/themes/congo/exampleSite/content/docs/homepage-layout/home-profile.jpg b/web/themes/congo/exampleSite/content/docs/homepage-layout/home-profile.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..006c8576eaac50cfe70cd4af8c1c398aca3fa156
Binary files /dev/null and b/web/themes/congo/exampleSite/content/docs/homepage-layout/home-profile.jpg differ
diff --git a/web/themes/congo/exampleSite/content/docs/homepage-layout/index.md b/web/themes/congo/exampleSite/content/docs/homepage-layout/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..e0551be205d8666d1e524c9faeaabac02d394564
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/homepage-layout/index.md
@@ -0,0 +1,52 @@
+---
+title: "Homepage Layout"
+date: 2020-08-13
+draft: false
+description: "Configuring the homepage layout in the Congo theme."
+slug: "homepage-layout"
+tags: ["homepage", "layouts", "docs"]
+---
+
+Congo provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.
+
+The layout of the homepage is controlled by the `homepage.layout` setting in the `params.toml` configuration file. Additionally, all layouts have the option to include a listing of [recent articles](#recent-articles).
+
+## Page layout
+
+The default layout is the page layout. It's simply a normal content page that displays your Markdown content. It's great for static websites and provides a lot of flexibility.
+
+![Screenshot of homepage layout](home-page.jpg)
+
+To enable the page layout, set `homepage.layout = "page"` in the `params.toml` configuration file.
+
+## Profile layout
+
+The profile layout is great for personal websites and blogs. It puts the author's details front and centre by providing an image and links to social profiles.
+
+![Screenshot of profile layout](home-profile.jpg)
+
+The author information is provided in the languages configuration file. Refer to the [Getting Started]({{< ref "getting-started" >}}) and [Language Configuration]({{< ref "configuration##language-and-i18n" >}}) sections for parameter details.
+
+Additionally, any Markdown content that is provided in the homepage content will be placed below the author profile. This allows extra flexibility for displaying a bio or other custom content using shortcodes.
+
+To enable the profile layout, set `homepage.layout = "profile"` in the `params.toml` configuration file.
+
+## Custom layout
+
+If the built-in homepage layouts aren't sufficient for your needs, you have the option to provide your own custom layout. This allows you to have total control over the page content and essentially gives you a blank slate to work with.
+
+To enable the custom layout, set `homepage.layout = "custom"` in the `params.toml` configuration file.
+
+With the configuration value set, create a new `custom.html` file and place it in `layouts/partials/home/custom.html`. Now whatever is in the `custom.html` file will be placed in the content area of the site homepage. You may use whatever HTML, Tailwind, or Hugo templating functions you wish to define your layout.
+
+To include [recent articles](#recent-articles) on the custom layout, use the `recent-articles.html` partial.
+
+As an example, the [homepage]({{< ref "/" >}}) on this site uses the custom layout to allow toggling between the profile and page layouts. Visit the [GitHub repo](https://github.com/jpanther/congo/blob/dev/exampleSite/layouts/partials/home/custom.html) to see how it works.
+
+## Recent articles
+
+All homepage layouts have the option of displaying recent articles below the main page content. To enable this, simply set the `homepage.showRecent` setting to `true` in the `params.toml` configuration file.
+
+![Profile layout with recent articles](home-profile-list.jpg)
+
+The articles listed in this section are derived from the `mainSections` setting which allows for whatever content types you are using on your website. For instance, if you had content sections for _posts_ and _projects_ you could set this setting to `["posts", "projects"]` and all the articles in these two sections would be used to populate the recent list. The theme expects this setting to be an array so if you only use one section for all your content, you should set this accordingly: `["blog"]`.
diff --git a/web/themes/congo/exampleSite/content/docs/hosting-deployment/github-pages-source.jpg b/web/themes/congo/exampleSite/content/docs/hosting-deployment/github-pages-source.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ca3b51d60e8afaee8f9e56ca5d38192afdddc9d1
Binary files /dev/null and b/web/themes/congo/exampleSite/content/docs/hosting-deployment/github-pages-source.jpg differ
diff --git a/web/themes/congo/exampleSite/content/docs/hosting-deployment/index.md b/web/themes/congo/exampleSite/content/docs/hosting-deployment/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..93e6c557aeb1e0ab4e85d5bff2ab1b75afd54762
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/hosting-deployment/index.md
@@ -0,0 +1,146 @@
+---
+title: "Hosting & Deployment"
+date: 2020-08-07
+draft: false
+description: "Learn how to deploy a Congo site."
+slug: "hosting-deployment"
+tags: ["hosting", "deployment", "docs", "github", "netlify", "render"]
+---
+
+There are many ways to deploy your Hugo website built with Congo. The theme is designed to be flexible in almost any deployment scenario.
+
+Congo is built using relative URLs throughout the theme. This enables sites to easily be deployed to sub-folders and hosts like GitHub Pages. There's usually no special configuration required for this to work as long as the `baseURL` parameter has been configured in the `config.toml` file.
+
+The official Hugo [Hosting and Deployment](https://gohugo.io/hosting-and-deployment/) docs are the best place to learn how to deploy your site. The sections below contain some specific theme configuration details that can help you deploy smoothly with certain providers.
+
+**Choose your provider:**
+
+- [GitHub Pages](#github-pages)
+- [Netlify](#netlify)
+- [Render](#render)
+- [Cloudflare Pages](#cloudflare-pages)
+- [Shared hosting, VPS or private web server](#shared-hosting-vps-or-private-web-server)
+
+---
+
+## GitHub Pages
+
+GitHub allows hosting on [GitHub Pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages) using Actions. To enable this functionality, enable Pages on your repo and create a new Actions workflow to build and deploy your site.
+
+The file needs to be in YAML format, placed within the `.github/workflows/` directory of your GitHub repository and named with a `.yml` extension.
+
+{{< alert >}}
+**Important:** Ensure you set the correct branch name under `branches` and in the deploy step `if` parameter to the source branch used in your project.
+{{< /alert >}}
+
+```yaml
+# .github/workflows/gh-pages.yml
+
+name: GitHub Pages
+
+on:
+  push:
+    branches:
+      - main
+
+jobs:
+  build-deploy:
+    runs-on: ubuntu-latest
+    concurrency:
+      group: ${{ github.workflow }}-${{ github.ref }}
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+        with:
+          submodules: true
+          fetch-depth: 0
+
+      - name: Setup Hugo
+        uses: peaceiris/actions-hugo@v2
+        with:
+          hugo-version: "latest"
+
+      - name: Build
+        run: hugo --minify
+
+      - name: Deploy
+        uses: peaceiris/actions-gh-pages@v3
+        if: ${{ github.ref == 'refs/heads/main' }}
+        with:
+          github_token: ${{ secrets.GITHUB_TOKEN }}
+          publish_branch: gh-pages
+          publish_dir: ./public
+```
+
+Push the config file to GitHub and the action should automatically run. It may fail the first time and you'll need to visit the **Settings > Pages** section of your GitHub repo to check the source is correct. It should be set to use the `gh-pages` branch.
+
+{{< screenshot src="github-pages-source.jpg" alt="Screen capture of GitHub Pages source" >}}
+
+Once the settings are configured, re-run the action and the site should build and deploy correctly. You can consult the actions log to check everything deployed successfully.
+
+## Netlify
+
+To deploy to [Netlify](https://www.netlify.com), create a new continuous deployment site and link it to your source code. The build settings can be left blank in the Netlify UI. You will only need to configure the domain you'll be using.
+
+{{< screenshot src="netlify-build-settings.jpg" alt="Screen capture of Netlify build settings" >}}
+
+Then in the root of your site repository, create a `netlify.toml` file:
+
+```toml
+# netlify.toml
+
+[build]
+  command = "hugo mod get -u && hugo --gc --minify -b $URL"
+  publish = "public"
+
+[build.environment]
+  NODE_ENV = "production"
+  GO_VERSION = "1.16"
+  TZ = "UTC"  # Set to preferred timezone
+
+[context.production.environment]
+  HUGO_VERSION = "0.105.0"
+  HUGO_ENV = "production"
+
+[context.deploy-preview.environment]
+  HUGO_VERSION = "0.105.0"
+```
+
+This configuration assumes you are deploying Congo as a Hugo module. If you have installed the theme using another method, change the build command to simply `hugo --gc --minify -b $URL`.
+
+When you push the config file to your repo, Netlify should automatically deploy your site. You can check the deploy logs in the Netlify UI to check for any errors.
+
+## Render
+
+Deploying to [Render](https://render.com) is very straightforward and all configuration is via the Render UI.
+
+Create a new **Static Site** and link it to your project's code repository. Then simply configure the build command to be `hugo --gc --minify` and publish directory to be `public`.
+
+{{< screenshot src="render-settings.jpg" alt="Screen capture of Render settings" >}}
+
+The site will automatically build and deploy whenever you push a change to your repo.
+
+## Cloudflare Pages
+
+Cloudflare offers the [Pages](https://pages.cloudflare.com/) service that can host Hugo blogs. It builds the site from a git repository and then hosts it on Cloudflare's CDN. Follow their [Hugo deployment guide](https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site) to get started.
+
+The Rocket Loaderâ„¢ feature offered by Cloudflare tries to speed up rendering of web pages with JavaScript, but it breaks the appearance switcher in the theme. It can also cause an annoying light/dark screen flash when browsing your site due to scripts loading in the wrong order.
+
+This problem can be fixed by disabling it:
+
+- Go to the [Cloudflare dashboard](https://dash.cloudflare.com)
+- Click on your domain name in the list
+- Click _Optimization_ in the _Speed_ section
+- Scroll down to _Rocket Loaderâ„¢_ and disable it
+
+Hugo sites built with Congo still load very quickly, even with this feature disabled.
+
+## Shared hosting, VPS or private web server
+
+Using traditional web hosting, or deploying to your own web server, is as simple as building your Hugo site and transferring the files to your host.
+
+Make sure that the `baseURL` parameter in `config.toml` is set to the full URL to the root of your website (including any sub domains or sub-folders).
+
+Then build your site using `hugo` and copy the contents of the output directory to the root of your web server and you will be ready to go. By default, the output directory is named `public`.
+
+_If you need a hosting provider, check out [Vultr](https://www.vultr.com/?ref=8957394-8H) or [DigitalOcean](https://m.do.co/c/36841235e565). Signing up using these affiliate links will give you up to $100 in free credit so you can try the service._
diff --git a/web/themes/congo/exampleSite/content/docs/hosting-deployment/netlify-build-settings.jpg b/web/themes/congo/exampleSite/content/docs/hosting-deployment/netlify-build-settings.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..aa150050e612944f612902c6df3b4745224826cf
Binary files /dev/null and b/web/themes/congo/exampleSite/content/docs/hosting-deployment/netlify-build-settings.jpg differ
diff --git a/web/themes/congo/exampleSite/content/docs/hosting-deployment/render-settings.jpg b/web/themes/congo/exampleSite/content/docs/hosting-deployment/render-settings.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..293b3c4367b25f5d0b5da6ab33515db3c3c52fba
Binary files /dev/null and b/web/themes/congo/exampleSite/content/docs/hosting-deployment/render-settings.jpg differ
diff --git a/web/themes/congo/exampleSite/content/docs/installation.md b/web/themes/congo/exampleSite/content/docs/installation.md
new file mode 100644
index 0000000000000000000000000000000000000000..936c20ec31b1fd06f47dbf2c2c279d3c33c42fc4
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/installation.md
@@ -0,0 +1,177 @@
+---
+title: "Installation"
+date: 2020-08-16
+draft: false
+description: "How to install the Congo theme."
+slug: "installation"
+tags: ["installation", "docs"]
+---
+
+Simply follow the standard Hugo [Quick Start](https://gohugo.io/getting-started/quick-start/) procedure to get up and running quickly.
+
+Detailed installation instructions can be found below. Instructions for [updating the theme](#installing-updates) are also available.
+
+## Installation
+
+These instructions will get you up and running using Hugo and Congo from a completely blank state. Most of the dependencies mentioned in this guide can be installed using the package manager of choice for your platform.
+
+### Install Hugo
+
+If you haven't used Hugo before, you will need to [install it onto your local machine](https://gohugo.io/getting-started/installing). You can check if it's already installed by running the command `hugo version`.
+
+{{< alert >}}
+Make sure you are using **Hugo version 0.87.0** or later as the theme takes advantage of some of the latest Hugo features.
+{{< /alert >}}
+
+You can find detailed installation instructions for your platform in the [Hugo docs](https://gohugo.io/getting-started/installing).
+
+### Create a new site
+
+Run the command `hugo new site mywebsite` to create a new Hugo site in a directory named `mywebsite`.
+
+Note that you can name the project directory whatever you choose, but the instructions below will assume it's named `mywebsite`. If you use a different name, be sure to substitute it accordingly.
+
+### Download the Congo theme
+
+There several different ways to install the Congo theme into your Hugo website. From easiest to most difficult to install and maintain, they are:
+
+- [Hugo module](#install-using-hugo) (recommended)
+- [Git submodule](#install-using-git)
+- [Manual file copy](#install-manually)
+
+If you're unsure, choose the Hugo module method.
+
+#### Install using Hugo
+
+This method is the quickest and easiest for keeping the theme up-to-date. Hugo uses **Go** to initialise and manage modules so you need to ensure you have `go` installed before proceeding.
+
+1. [Download](https://golang.org/dl/) and install Go. You can check if it's already installed by using the command `go version`.
+
+   {{< alert >}}
+   Make sure you are using **Go version 1.12** or later as Hugo requires this for modules to work correctly.
+   {{< /alert >}}
+
+2. From your Hugo project directory (that you created above), initialise modules for your website:
+
+   ```shell
+   # If you're managing your project on GitHub
+   hugo mod init github.com/<username>/<repo-name>
+
+   # If you're managing your project locally
+   hugo mod init my-project
+   ```
+
+3. Add the theme to your configuration by creating a new file `config/_default/module.toml` and adding the following:
+
+   ```toml
+   [[imports]]
+   path = "github.com/jpanther/congo/v2"
+   ```
+
+4. Start your server using `hugo server` and the theme will be downloaded automatically.
+5. Continue to [set up the theme configuration files](#set-up-theme-configuration-files).
+
+#### Install using git
+
+For this method you'll need to ensure you have **Git** installed on your local machine.
+
+Change into the directory for your Hugo website (that you created above), initialise a new `git` repository and add Congo as a submodule.
+
+```bash
+cd mywebsite
+git init
+git submodule add -b stable https://github.com/jpanther/congo.git themes/congo
+```
+
+Then continue to [set up the theme configuration files](#set-up-theme-configuration-files).
+
+#### Install manually
+
+1. Download the latest release of the theme source code.
+
+   {{< button href="https://github.com/jpanther/congo/releases/latest" target="_blank" >}}Download from Github{{< /button >}}
+
+2. Extract the archive, rename the folder to `congo` and move it to the `themes/` directory inside your Hugo project's root folder.
+3. Continue to [set up the theme configuration files](#set-up-theme-configuration-files).
+
+### Set up theme configuration files
+
+In the root folder of your website, delete the `config.toml` file that was generated by Hugo. Copy the `*.toml` config files from the theme into your `config/_default/` folder. This will ensure you have all the correct theme settings and will enable you to easily customise the theme to your needs.
+
+{{< alert >}}
+**Note:** You should not overwrite the `module.toml` file if one already exists in your project!
+{{< /alert >}}
+
+Depending on how you installed the theme you will find the theme config files in different places:
+
+- **Hugo Modules:** In the Hugo cache directory, or [download a copy](https://minhaskamal.github.io/DownGit/#/home?url=https://github.com/jpanther/congo/tree/stable/config/_default) from GitHub
+- **Git submodule or Manual install:** `themes/congo/config/_default`
+
+Once you've copied the files, your config folder should look like this:
+
+```shell
+config/_default/
+├─ config.toml
+├─ markup.toml
+├─ menus.toml
+├─ module.toml  # if you installed using Hugo Modules
+└─ params.toml
+```
+
+{{< alert >}}
+**Important:** If you didn't use Hugo Modules to install Congo, you must add the line `theme = "congo"` to the top of your `config.toml` file.
+{{< /alert >}}
+
+### Next steps
+
+The basic Congo installation is now complete. Continue to the [Getting Started]({{< ref "getting-started" >}}) section to learn more about configuring the theme.
+
+---
+
+## Installing updates
+
+From time to time there will be [new releases](https://github.com/jpanther/congo/releases) posted that apply fixes and add new functionality to the theme. In order to take advantage of these changes, you will need to update the theme files on your website.
+
+How you go about this will depend on the installation method you chose when the theme was originally installed. Instructions for each method can be found below.
+
+- [Hugo module](#update-using-hugo)
+- [Git submodule](#update-using-git)
+- [Manual file copy](#update-manually)
+
+### Update using Hugo
+
+Hugo makes updating modules super easy. Simply change into your project directory and execute the following command:
+
+```shell
+hugo mod get -u
+```
+
+Hugo will automatically update any modules that are required for your project. It does this by inspecting your `module.toml` and `go.mod` files. If you have any issues with the update, check to ensure these files are still configured correctly.
+
+Then simply rebuild your site and check everything works as expected.
+
+### Update using git
+
+Git submodules can be updated using the `git` command. Simply execute the following command and the latest version of the theme will be downloaded into your local repository:
+
+```shell
+git submodule update --remote --merge
+```
+
+Once the submodule has been updated, rebuild your site and check everything works as expected.
+
+### Update manually
+
+Updating Congo manually requires you to download the latest copy of the theme and replace the old version in your project.
+
+{{< alert >}}
+Note that any local customisations you have made to the theme files will be lost during this process.
+{{< /alert >}}
+
+1. Download the latest release of the theme source code.
+
+   {{< button href="https://github.com/jpanther/congo/releases/latest" target="_blank" >}}Download from Github{{< /button >}}
+
+2. Extract the archive, rename the folder to `congo` and move it to the `themes/` directory inside your Hugo project's root folder. You will need to overwrite the existing directory to replace all the theme files.
+
+3. Rebuild your site and check everything works as expected.
diff --git a/web/themes/congo/exampleSite/content/docs/partials.md b/web/themes/congo/exampleSite/content/docs/partials.md
new file mode 100644
index 0000000000000000000000000000000000000000..bf0f0a3c4c0b53da90e9717c7691ba9792f4d029
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/partials.md
@@ -0,0 +1,100 @@
+---
+title: "Partials"
+date: 2020-08-10
+draft: false
+description: "All the partials available in Congo."
+slug: "partials"
+tags: ["partials", "analytics", "privacy", "comments", "favicons", "icon", "docs"]
+---
+
+## Analytics
+
+Congo provides built-in support for Fathom Analytics and Google Analytics. Fathom is a paid alternative to Google Analytics that respects user privacy. If you're interested you can use this affiliate link to [receive $10 credit](https://usefathom.com/ref/RLAJSV) and try the service.
+
+### Fathom Analytics
+
+To enable Fathom Analytics support, simply provide your Fathom site code in the `config/_default/params.toml` file. If you also use the custom domain feature of Fathom and would like to serve their script from your domain, you can also additionally provide the `domain` configuration value. If you don't provide a `domain` value, the script will load directly from Fathom DNS.
+
+```toml
+# config/_default/params.toml
+
+[fathomAnalytics]
+  site = "ABC12345"
+  domain = "llama.yoursite.com"
+```
+
+### Google Analytics
+
+Google Analytics support is provided through the internal Hugo partial. Simply provide the `googleAnalytics` key in the `config/_default/config.toml` file and the script will be added automatically.
+
+Both version 3 (analytics.js) and version 4 (gtag.js) are supported, based on the configuration value provided:
+
+```toml
+# config/_default/config.toml
+
+# version 3
+googleAnalytics = "UA-PROPERTY_ID"
+# version 4
+googleAnalytics = "G-MEASUREMENT_ID"
+```
+
+### Custom analytics providers
+
+If you wish to use a different analytics provider on your website you can also override the analytics partial and provide your own script. Simply create the file `layouts/partials/analytics.html` in your project and it will automatically include it in the `<head>` of the website.
+
+## Comments
+
+To add comments to your articles, Congo includes support for a comments partial that is included at the base of each article page. Simply provide a `layouts/partials/comments.html` which contains the code required to display your chosen comments.
+
+You can use either the built-in Hugo Disqus template, or provide your own custom code. Refer to the [Hugo docs](https://gohugo.io/content-management/comments/) for further information.
+
+Once the partial has been provided, finer control over where comments are displayed is then managed using the `showComments` parameter. This value can be set at the theme level in the `params.toml` [config file]({{< ref "configuration#theme-parameters" >}}), or on a per-article basis by including it in the [front matter]({{< ref "front-matter" >}}). The parameter defaults to `false` so it must be set to `true` in one of these locations in order for comments to be displayed.
+
+## Favicons
+
+Congo provides a default set of blank favicons to get started but you can provide your own assets to override them. The easiest way to obtain new favicon assets is to generate them using a third-party provider like [favicon.io](https://favicon.io).
+
+Icon assets should be placed directly in the `static/` folder of your website and named as per the listing below. If you use [favicon.io](https://favicon.io), these will be the filenames that are automatically generated for you, but you can provide your own assets if you wish.
+
+```shell
+static/
+├─ android-chrome-192x192.png
+├─ android-chrome-512x512.png
+├─ apple-touch-icon.png
+├─ favicon-16x16.png
+├─ favicon-32x32.png
+├─ favicon.ico
+└─ site.webmanifest
+```
+
+Alternatively, you can also completely override the default favicon behaviour and provide your own favicon HTML tags and assets. Simply provide a `layouts/partials/favicons.html` file in your project and this will be injected into the site `<head>` in place of the default assets.
+
+## Icon
+
+Similar to the [icon shortcode]({{< ref "shortcodes#icon" >}}), you can include icons in your own templates and partials by using Congo's `icon.html` partial. The partial takes one parameter which is the name of the icon to be included.
+
+**Example:**
+
+```go
+  {{ partial "icon.html" "github" }}
+```
+
+Icons are populated using Hugo pipelines which makes them very flexible. Congo includes a number of built-in icons for social, links and other purposes. Check the [icon samples]({{< ref "samples/icons" >}}) page for a full list of supported icons.
+
+Custom icons can be added by providing your own icon assets in the `assets/icons/` directory of your project. The icon can then be referenced in the partial by using the SVG filename without the `.svg` extension.
+
+Icons can also be used in article content by calling the [icon shortcode]({{< ref "shortcodes#icon" >}}).
+
+## Extensions
+
+Congo also provides for a number of extension partials that allow for expanding upon base functionality.
+
+### Article link
+
+If you wish to insert additional code after article links, create a `layouts/partials/extend-article-link.html` file. This is especially powerful when combined with the [`badge`]({{< ref "shortcodes#badge" >}}) shortcode which can be used to highlight metadata for certain articles.
+
+### Head and Footer
+
+The theme allows for inserting additional code directly into the `<head>` and `<footer>` sections of the template. These can be useful for providing scripts or other logic that isn't part of the theme.
+
+Simply create either `layouts/partials/extend-head.html` or `layouts/partials/extend-footer.html` and these will automatically be included in your website build. Both partials are injected as the last items in `<head>` and `<footer>` so they can be used to override theme defaults.
diff --git a/web/themes/congo/exampleSite/content/docs/screenshot.png b/web/themes/congo/exampleSite/content/docs/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..704613402c952d27b87c09984982c9d580a3e937
Binary files /dev/null and b/web/themes/congo/exampleSite/content/docs/screenshot.png differ
diff --git a/web/themes/congo/exampleSite/content/docs/shortcodes/abstract.jpg b/web/themes/congo/exampleSite/content/docs/shortcodes/abstract.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..134ced3fd9fc3e586eb4eb39f17f8a85bc61f9d4
Binary files /dev/null and b/web/themes/congo/exampleSite/content/docs/shortcodes/abstract.jpg differ
diff --git a/web/themes/congo/exampleSite/content/docs/shortcodes/index.md b/web/themes/congo/exampleSite/content/docs/shortcodes/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..ed0e2d4bd31af4d821dcaec5cbf28eb456b57fcb
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/shortcodes/index.md
@@ -0,0 +1,235 @@
+---
+title: "Shortcodes"
+date: 2020-08-11
+draft: false
+description: "All the shortcodes available in Congo."
+slug: "shortcodes"
+tags: ["shortcodes", "mermaid", "icon", "lead", "docs"]
+---
+
+In addition to all the [default Hugo shortcodes](https://gohugo.io/content-management/shortcodes/), Congo adds a few extras for additional functionality.
+
+## Alert
+
+`alert` outputs its contents as a stylised message box within your article. It's useful for drawing attention to important information that you don't want the reader to miss.
+
+The input is written in Markdown so you can format it however you please.
+
+By default, the alert is presented with an exclaimation triangle icon. To change the icon, include the icon name in the shortcode. Check out the [icon shortcode](#icon) for more details on using icons.
+
+**Example:**
+
+```md
+{{</* alert */>}}
+**Warning!** This action is destructive!
+{{</* /alert */>}}
+
+{{</* alert "twitter" */>}}
+Don't forget to [follow me](https://twitter.com/jpanther) on Twitter.
+{{</* /alert */>}}
+```
+
+{{< alert >}}
+**Warning!** This action is destructive!
+{{< /alert >}}
+&nbsp;
+{{< alert "twitter" >}}
+Don't forget to [follow me](https://twitter.com/jpanther) on Twitter.
+{{< /alert >}}
+
+## Badge
+
+`badge` outputs a styled badge component which is useful for displaying metadata.
+
+**Example:**
+
+```md
+{{</* badge */>}}
+New article!
+{{</* /badge */>}}
+```
+
+{{< badge >}}
+New article!
+{{< /badge >}}
+
+## Button
+
+`button` outputs a styled button component which can be used to highlight a primary action. It has three optional parameters:
+
+<!-- prettier-ignore-start -->
+|Parameter|Description|
+|---|---|
+|`href`|The URL that the button should link to.|
+|`target`|The target of the link.|
+|`download`|Whether browser should download the resource rather than navigate to the URL. The value of this parameter will be the name of the downloaded file.|
+<!-- prettier-ignore-end -->
+
+**Example:**
+
+```md
+{{</* button href="#button" target="_self" */>}}
+Call to action
+{{</* /button */>}}
+```
+
+{{< button href="#button" target="_self" >}}
+Call to action
+{{< /button >}}
+
+## Chart
+
+`chart` uses the Chart.js library to embed charts into articles using simple structured data. It supports a number of [different chart styles](https://www.chartjs.org/docs/latest/samples/) and everything can be configured from within the shortcode. Simply provide the chart parameters between the shortcode tags and Chart.js will do the rest.
+
+Refer to the [official Chart.js docs](https://www.chartjs.org/docs/latest/general/) for details on syntax and supported chart types.
+
+**Example:**
+
+```js
+{{</* chart */>}}
+type: 'bar',
+data: {
+  labels: ['Tomato', 'Blueberry', 'Banana', 'Lime', 'Orange'],
+  datasets: [{
+    label: '# of votes',
+    data: [12, 19, 3, 5, 2, 3],
+  }]
+}
+{{</* /chart */>}}
+```
+
+<!-- prettier-ignore-start -->
+{{< chart >}}
+type: 'bar',
+data: {
+  labels: ['Tomato', 'Blueberry', 'Banana', 'Lime', 'Orange'],
+  datasets: [{
+    label: '# of votes',
+    data: [12, 19, 3, 5, 3],
+  }]
+}
+{{< /chart >}}
+<!-- prettier-ignore-end -->
+
+You can see some additional Chart.js examples on the [charts samples]({{< ref "charts" >}}) page.
+
+## Figure
+
+Congo includes a `figure` shortcode for adding images to content. The shortcode replaces the base Hugo functionality in order to provide additional performance benefits.
+
+When a provided image is a page resource, it will be optimised using Hugo Pipes and scaled in order to provide images appropriate to different device resolutions. If a static asset or URL to an external image is provided, it will be included as-is without any image processing by Hugo.
+
+The `figure` shortcode accepts six parameters:
+
+<!-- prettier-ignore-start -->
+|Parameter|Description|
+|---|---|
+|`src`| **Required.** The local path/filename or URL of the image. When providing a path and filename, the theme will attempt to locate the image using the following lookup order: Firstly, as a [page resource](https://gohugo.io/content-management/page-resources/) bundled with the page; then an asset in the `assets/` directory; then finally, a static image in the `static/` directory.|
+|`alt`|[Alternative text description](https://moz.com/learn/seo/alt-text) for the image.|
+|`caption`|Markdown for the image caption, which will be displayed below the image.|
+|`class`|Additional CSS classes to apply to the image.|
+|`href`|URL that the image should be linked to.|
+|`default`|Special parameter to revert to default Hugo `figure` behaviour. Simply provide `default=true` and then use normal [Hugo shortcode syntax](https://gohugo.io/content-management/shortcodes/#figure).|
+<!-- prettier-ignore-end -->
+
+Congo also supports automatic conversion of images included using standard Markdown syntax. Simply use the following format and the theme will handle the rest:
+
+```md
+![Alt text](image.jpg "Image caption")
+```
+
+**Example:**
+
+```md
+{{</* figure
+    src="abstract.jpg"
+    alt="Abstract purple artwork"
+    caption="Photo by [Jr Korpa](https://unsplash.com/@jrkorpa) on [Unsplash](https://unsplash.com/)"
+    */>}}
+
+<!-- OR -->
+
+![Abstract purple artwork](abstract.jpg "Photo by [Jr Korpa](https://unsplash.com/@jrkorpa) on [Unsplash](https://unsplash.com/)")
+```
+
+{{< figure src="abstract.jpg" alt="Abstract purple artwork" caption="Photo by [Jr Korpa](https://unsplash.com/@jrkorpa) on [Unsplash](https://unsplash.com/)" >}}
+
+## Icon
+
+`icon` outputs an SVG icon and takes the icon name as its only parameter. The icon is scaled to match the current text size.
+
+**Example:**
+
+```md
+{{</* icon "github" */>}}
+```
+
+**Output:** {{< icon "github" >}}
+
+Icons are populated using Hugo pipelines which makes them very flexible. Congo includes a number of built-in icons for social, links and other purposes. Check the [icon samples]({{< ref "samples/icons" >}}) page for a full list of supported icons.
+
+Custom icons can be added by providing your own icon assets in the `assets/icons/` directory of your project. The icon can then be referenced in the shortcode by using the SVG filename without the `.svg` extension.
+
+Icons can also be used in partials by calling the [icon partial]({{< ref "partials#icon" >}}).
+
+## Katex
+
+The `katex` shortcode can be used to add mathematical expressions to article content using the KaTeX package. Refer to the online reference of [supported TeX functions](https://katex.org/docs/supported.html) for the available syntax.
+
+To include mathematical expressions in an article, simply place the shortcode anywhere with the content. It only needs to be included once per article and KaTeX will automatically render any markup on that page. Both inline and block notation are supported.
+
+Inline notation can be generated by wrapping the expression in `\\(` and `\\)` delimiters. Alternatively, block notation can be generated using `$$` delimiters.
+
+**Example:**
+
+```md
+{{</* katex */>}}
+\\(f(a,b,c) = (a^2+b^2+c^2)^3\\)
+```
+
+{{< katex >}}
+\\(f(a,b,c) = (a^2+b^2+c^2)^3\\)
+
+Check out the [mathematical notation samples]({{< ref "mathematical-notation" >}}) page for more examples.
+
+## Lead
+
+`lead` is used to bring emphasis to the start of an article. It can be used to style an introduction, or to call out an important piece of information. Simply wrap any Markdown content in the `lead` shortcode.
+
+**Example:**
+
+```md
+{{</* lead */>}}
+When life gives you lemons, make lemonade.
+{{</* /lead */>}}
+```
+
+{{< lead >}}
+When life gives you lemons, make lemonade.
+{{< /lead >}}
+
+## Mermaid
+
+`mermaid` allows you to draw detailed diagrams and visualisations using text. It uses Mermaid under the hood and supports a wide variety of diagrams, charts and other output formats.
+
+Simply write your Mermaid syntax within the `mermaid` shortcode and let the plugin do the rest.
+
+Refer to the [official Mermaid docs](https://mermaid-js.github.io/) for details on syntax and supported diagram types.
+
+**Example:**
+
+```md
+{{</* mermaid */>}}
+graph LR;
+A[Lemons]-->B[Lemonade];
+B-->C[Profit]
+{{</* /mermaid */>}}
+```
+
+{{< mermaid >}}
+graph LR;
+A[Lemons]-->B[Lemonade];
+B-->C[Profit]
+{{< /mermaid >}}
+
+You can see some additional Mermaid examples on the [diagrams and flowcharts samples]({{< ref "diagrams-flowcharts" >}}) page.
diff --git a/web/themes/congo/exampleSite/content/docs/version-2/_index.md b/web/themes/congo/exampleSite/content/docs/version-2/_index.md
new file mode 100644
index 0000000000000000000000000000000000000000..972f1050872a73e62d0be117cfe9c4a60ee4fd41
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/version-2/_index.md
@@ -0,0 +1,96 @@
+---
+title: "What's New in 2.0 ✨"
+date: 2022-01-19
+draft: false
+description: "Discover what's new in Congo version 2.0."
+tags: ["new", "docs"]
+---
+
+{{< lead >}}
+Congo 2.0 is packed with tons of new features and optimisations.
+{{< /lead >}}
+
+The original aim of Congo was to develop a theme that was simple and lightweight. Version 2 takes this one step further and makes the theme even more powerful while still maintaining its lightweight footprint.
+
+Continue reading below to discover what's new. When you're ready to upgrade, check out the [guide to upgrading]({{< ref "upgrade" >}}).
+
+## Tailwind CSS 3.0
+
+Tailwind CSS is at the heart of Congo and this new release contains the very latest [Tailwind CSS version 3](https://tailwindcss.com/blog/tailwindcss-v3). It brings with it performance optimisations and support for some great new CSS features.
+
+{{< youtube "TmWIrBPE6Bc" >}}
+
+Implementing this new version has also removed some Tailwind plugin dependencies from the theme, allowing the overall footprint to remain lightweight.
+
+## Multilingual support
+
+A highly requested feature, Congo is now multilingual! If you publish your content in multiple languages, the site will be built with all the translations available.
+
+<div class="text-2xl text-center" style="font-size: 2.8rem">:gb: :de: :fr: :es: :cn: :brazil: :tr: :bangladesh:</div>
+
+Thanks to submissions from the community, Congo has already been translated into [eight languages](https://github.com/jpanther/congo/tree/dev/i18n) with more to be added over time. By the way, [pull requests](https://github.com/jpanther/congo/pulls) for new languages are always welcome!
+
+## RTL language support
+
+One of the benefits of the new Tailwind and Multilingual features is the ability to add RTL language support. When enabled, the entire site will reflow content from right-to-left. Every element in the theme has been restyled to ensure it looks great in this mode which aids authors who wish to generate content in RTL languages.
+
+RTL is controlled on a per-language basis so you can mix and match both RTL and LTR content in your projects and the theme will respond accordingly.
+
+## Automatic image resizing
+
+A big change in Congo 2.0 is the addition of automatic image resizing. Using the power of Hugo Pipes, images in Markdown content are now automatically scaled to different output sizes. These are then presented using HTML `srcset` attributes enabling optimised file sizes to be served to your site visitors.
+
+![](image-resizing.png)
+
+```html
+<!-- Markdown: ![My image](image.jpg) -->
+<img
+  srcset="
+    /image_320x0_resize_q75_box.jpg 320w,
+    /image_635x0_resize_q75_box.jpg 635w,
+    /image_1024x0_resize_q75_box.jpg 1024w,
+    /image_1270x0_resize_q75_box.jpg 2x"
+  src="/image_635x0_resize_q75_box.jpg"
+  alt="My image"
+/>
+```
+
+Best of all there's nothing you need to change! Simply insert standard Markdown image syntax and let the theme do the rest. If you want a little more control, the `figure` shortcode has been completely rewritten to provide the same resizing benefits.
+
+## Performance improvements
+
+This update packs performance improvements throughout. A key objective for this release was to improve Lighthouse scores and Congo now scores a perfect 100 on all four metrics.
+
+{{< screenshot src="lighthouse.jpg" >}}
+
+There's too many individual changes to highlight them here but the results speak for themselves. If you want to dig deeper, you can [view the Lighthouse report](lighthouse.html). Real world performance will vary based upon server configuration.
+
+## Site search
+
+Powered by [Fuse.js](https://fusejs.io), site search allows visitors to quickly and easily find your content. All searches are performed client-side meaning there's nothing to configure on the server and queries are performed super fast. Simply enable the feature in your site configuration and you're all set. Oh, and it also supports full keyboard navigation!
+
+## Tables of contents
+
+A highly requested feature, Congo now supports tables of contents on article pages. You can see it in action on this page. The contents are fully responsive and will adjust to take advantage of the space available at different screen resolutions.
+
+Available on a global or per article basis, the table of contents can be fully customised using standard Hugo configuration values, allowing you to adjust the behaviour to suit your project.
+
+## Accessibility improvements
+
+From adding ARIA descriptions to more items or simply adjusting the contrast of certain text elements, this release is the most accessible yet.
+
+Version 2 also introduces "skip to content" and "scroll to top" links that enable quick navigation. There's also keyboard shortcuts for enabling items like search without reaching for the mouse.
+
+The new image resizing features also provide full control over `alt` and `title` elements enabling an accessible experience for all visitors.
+
+## A whole lot more
+
+There's countless other minor changes to explore. From being able to display taxonomies on articles and list pages, to using the new `headline` author parameter to customise your homepage. There's also improved JSON-LD strucured data which further optimises SEO performance. Plus the entire theme has had extra polish to ensure a consistent design language.
+
+:rocket: Check out the [full changelog](https://github.com/jpanther/congo/blob/dev/CHANGELOG.md) to learn more.
+
+## Next steps
+
+If you're ready to upgrade, read the [upgrading from version 1 guide]({{< ref "upgrade" >}}) to get started. If you're new to Congo, check out the [Installation guide]({{< ref "docs/installation" >}}) to begin a new project.
+
+---
diff --git a/web/themes/congo/exampleSite/content/docs/version-2/image-resizing.png b/web/themes/congo/exampleSite/content/docs/version-2/image-resizing.png
new file mode 100644
index 0000000000000000000000000000000000000000..396f2faee2fc51af698fff834f317867e9fbe4af
Binary files /dev/null and b/web/themes/congo/exampleSite/content/docs/version-2/image-resizing.png differ
diff --git a/web/themes/congo/exampleSite/content/docs/version-2/lighthouse.html b/web/themes/congo/exampleSite/content/docs/version-2/lighthouse.html
new file mode 100644
index 0000000000000000000000000000000000000000..1a72b63ca90c266540b560608ec4b9227f4aa5af
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/version-2/lighthouse.html
@@ -0,0 +1,11700 @@
+<html lang="en"><head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
+  <link rel="icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEhklEQVR4AWJxL/BhIAesev1U5tcflpncgNrKIsqNIwzC9feMpDUzs70kOczMzMzJJcxwCTMzncPMnOwtzBwzMzPb0vRfeZPp0VhPS5I39V5fdiXV1/VD+9QC7OVn9BsyH1XIoEI1PfmJvLFowVV564+34DFUHudbmfDh4kVXh//7XwE+WjS/YfXZe3yr4j2rqj1AIhSB7hZ8ZtPZu/zw8cK523U4wE1/rvPfWrz4zs0m9ZdC9yUJAlASdBAgocRegfF/f3/h/PuaFsxMdwjAR0vm1+06eMMfIrhLqTWqdH4EumU2SPfMhigJAlRQbZrgrRsl9U+Y2DYDFCz3ILC9kiAiqSrMwbWT0nceEnR+9Kggc2zjOJCASDENkg0a5HfZZgDP81CM3CrQs2Z1+o7DJ6ePr8sK0AOCHv5Jjdt3evyYSaZ351VIStIxPRAUtrBYbxC6w+BZ0ivVSBKkIhJhemSyZpfB00EiPO2VjzYkxhcqXQqCWCShGplvi3y0QxqbuBurMjyJeWnkHZuAEgIQGsUBqwrfjZ+IlBgKyRJzVVYF8O6qFWdh86YzQzMrZigYmxAyfvHgLZQ/LC1CbeniW2Hkqr/PH16SgvGuf2/uzNMBwJA/njxizGPtSyAf7EziJCMGRDRdhoAC4PL1A/SrKQMAAQkEfpJAcRQdrBJ7gNwjSpJsdwK+CANBkqa1LgQB4IicV9nYUct7gaxuDJUErQIiEAiMxLVOFlKzIktPpT0ggpdpC/8YAHnxbgkUY4tAAFSR7AAXNyAAWHJrA/kHGjzg5nleuwFO7Nd/IoDw4Pm58+4jNLmYG0wRA5bErc2Mr3Y+dXTDW1VvwqbJkzMCHQ4S1GTCBOIgUHJrGdEwqzR+jAp/o2qAZelUDoQnruEEdDclJI6576AlNVfc+22XN/+Y1vnJD0Yind6UpEEvn/Hqq15EYjCW7jZCJEpnNvDgkyelDjs106kuux2AAXCSobULOWP8mLhYlpoDMK4qAFXJGk+grtH8YXVz5KJblqaG1+VUdTc0I290bmUQAriGITRbdQnom0aoFj8kx1+wMD2ifncAXUQE4SkDqN1hE0jEophs1SUwZAOhUAiMCLwRtamtTZtbbmZErSAUHbSysaoEmnrsakiMiUAURi283gN6wans9oX8rOCrj7/JP35DFD+iQ7Au/K2KE1jzx6ujjUnXFH9KjEq6ZlhsTBICrNLJf47Pv/pkHzvup1w4dmUbEei0+bcXRqJuh5kVARQ8byyYxOwNGr7A87xh1tp8sGT+uMInrwi++Xj7TQz2d27NvwEkrOflAFQGIDA5khASBCGdO2/Z/MnLPwYfv5TFhjW7QhVKAB6afwe2LpFlFsCnlQEosgQgDsdOG1/LKeNqJS4JCSPJ/i+TakwEARor7gER1Iva5JmPOJK0RUqmoPnnlzFCtmIAhAAQEIQRgDaiYPIauNXcnDlRIrWNFY3hm7PG9YRqr7IV7HrCgAC17befjEvRq2nGhAHtBqDpOuI/I1diUUAMYIxEdyejBJqLnNoszGZtfiX/CztGv2mq+sdaAAAAAElFTkSuQmCC">
+  <title>Lighthouse Report</title>
+  <style>/**
+ * @license
+ * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+  Naming convention:
+
+  If a variable is used for a specific component: --{component}-{property name}-{modifier}
+
+  Both {component} and {property name} should be kebab-case. If the target is the entire page,
+  use 'report' for the component. The property name should not be abbreviated. Use the
+  property name the variable is intended for - if it's used for multiple, a common descriptor
+  is fine (ex: 'size' for a variable applied to 'width' and 'height'). If a variable is shared
+  across multiple components, either create more variables or just drop the "{component}-"
+  part of the name. Append any modifiers at the end (ex: 'big', 'dark').
+
+  For colors: --color-{hue}-{intensity}
+
+  {intensity} is the Material Design tag - 700, A700, etc.
+*/
+.lh-vars {
+  /* Palette using Material Design Colors
+   * https://www.materialui.co/colors */
+  --color-amber-50: #FFF8E1;
+  --color-blue-200: #90CAF9;
+  --color-blue-900: #0D47A1;
+  --color-blue-A700: #2962FF;
+  --color-cyan-500: #00BCD4;
+  --color-gray-100: #F5F5F5;
+  --color-gray-300: #CFCFCF;
+  --color-gray-200: #E0E0E0;
+  --color-gray-400: #BDBDBD;
+  --color-gray-50: #FAFAFA;
+  --color-gray-500: #9E9E9E;
+  --color-gray-600: #757575;
+  --color-gray-700: #616161;
+  --color-gray-800: #424242;
+  --color-gray-900: #212121;
+  --color-gray: #000000;
+  --color-green-700: #018642;
+  --color-green: #0CCE6B;
+  --color-lime-400: #D3E156;
+  --color-orange-50: #FFF3E0;
+  --color-orange-700: #D04900;
+  --color-orange: #FFA400;
+  --color-red-700: #EB0F00;
+  --color-red: #FF4E42;
+  --color-teal-600: #00897B;
+  --color-white: #FFFFFF;
+
+  /* Context-specific colors */
+  --color-average-secondary: var(--color-orange-700);
+  --color-average: var(--color-orange);
+  --color-fail-secondary: var(--color-red-700);
+  --color-fail: var(--color-red);
+  --color-hover: var(--color-gray-50);
+  --color-informative: var(--color-blue-900);
+  --color-pass-secondary: var(--color-green-700);
+  --color-pass: var(--color-green);
+  --color-not-applicable: var(--color-gray-600);
+
+  /* Component variables */
+  --audit-description-padding-left: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right));
+  --audit-explanation-line-height: 16px;
+  --audit-group-margin-bottom: 40px;
+  --audit-group-padding-vertical: 8px;
+  --audit-margin-horizontal: 5px;
+  --audit-padding-vertical: 8px;
+  --category-header-font-size: 20px;
+  --category-padding: 40px;
+  --chevron-line-stroke: var(--color-gray-600);
+  --chevron-size: 12px;
+  --default-padding: 12px;
+  --env-item-background-color: var(--color-gray-100);
+  --env-item-font-size: 28px;
+  --env-item-line-height: 36px;
+  --env-item-padding: 10px 0px;
+  --env-name-min-width: 220px;
+  --footer-padding-vertical: 16px;
+  --gauge-circle-size-big: 112px;
+  --gauge-circle-size: 80px;
+  --gauge-label-font-size-big: 28px;
+  --gauge-label-font-size: 20px;
+  --gauge-label-line-height-big: 36px;
+  --gauge-label-line-height: 26px;
+  --gauge-percentage-font-size-big: 38px;
+  --gauge-percentage-font-size: 28px;
+  --gauge-wrapper-width: 148px;
+  --header-line-height: 24px;
+  --highlighter-background-color: var(--report-text-color);
+  --icon-square-size: calc(var(--score-icon-size) * 0.88);
+  --image-preview-size: 48px;
+  --metric-toggle-lines-fill: #7F7F7F;
+  --metrics-toggle-background-color: var(--color-gray-200);
+  --screenshot-overlay-background: rgba(0, 0, 0, 0.3);
+  --plugin-badge-background-color: var(--color-white);
+  --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7);
+  --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7);
+  --plugin-icon-size: 65%;
+  --pwa-icon-margin: 0 6px 0 -2px;
+  --pwa-icon-size: var(--topbar-logo-size);
+  --report-background-color: #fff;
+  --report-border-color-secondary: #ebebeb;
+  --report-font-family-monospace: 'Roboto Mono', 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace;
+  --report-font-family: Roboto, Helvetica, Arial, sans-serif;
+  --report-font-size: 16px;
+  --report-icon-size: var(--score-icon-background-size);
+  --report-line-height: 24px;
+  --report-min-width: 400px;
+  --report-monospace-font-size: calc(var(--report-font-size) * 0.85);
+  --report-text-color-secondary: var(--color-gray-800);
+  --report-text-color: var(--color-gray-900);
+  --report-width: calc(60 * var(--report-font-size));
+  --score-container-padding: 8px;
+  --score-icon-background-size: 24px;
+  --score-icon-margin-left: 4px;
+  --score-icon-margin-right: 12px;
+  --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left);
+  --score-icon-size: 12px;
+  --scores-container-padding: 20px 0 20px 0;
+  --scorescale-height: 6px;
+  --scorescale-width: 18px;
+  --section-padding-vertical: 12px;
+  --snippet-background-color: var(--color-gray-50);
+  --snippet-color: #0938C2;
+  --sparkline-height: 5px;
+  --stackpack-padding-horizontal: 10px;
+  --sticky-header-background-color: var(--report-background-color);
+  --table-higlight-background-color: hsla(0, 0%, 75%, 0.1);
+  --tools-icon-color: var(--color-gray-600);
+  --topbar-background-color: var(--color-gray-100);
+  --topbar-height: 32px;
+  --topbar-logo-size: 24px;
+  --topbar-padding: 0 8px;
+  --toplevel-warning-background-color: var(--color-orange-50);
+  --toplevel-warning-message-text-color: #BD4200;
+  --toplevel-warning-padding: 18px;
+  --toplevel-warning-text-color: var(--report-text-color);
+
+  /* SVGs */
+  --plugin-icon-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="%23FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/></svg>');
+  --plugin-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="%23757575"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/></svg>');
+
+  --pass-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><title>check</title><path fill="%23178239" d="M24 4C12.95 4 4 12.95 4 24c0 11.04 8.95 20 20 20 11.04 0 20-8.96 20-20 0-11.05-8.96-20-20-20zm-4 30L10 24l2.83-2.83L20 28.34l15.17-15.17L38 16 20 34z"/></svg>');
+  --average-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><title>info</title><path fill="%23E67700" d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm2 30h-4V22h4v12zm0-16h-4v-4h4v4z"/></svg>');
+  --fail-icon-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><title>warn</title><path fill="%23C7221F" d="M2 42h44L24 4 2 42zm24-6h-4v-4h4v4zm0-8h-4v-8h4v8z"/></svg>');
+
+  --pwa-installable-gray-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23DAE0E3" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>');
+  --pwa-optimized-gray-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%23DAE0E3" width="24" height="24" rx="12"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/><path d="M5 5h14v14H5z"/></g></svg>');
+
+  --pwa-installable-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="nonzero"><circle fill="%23424242" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>');
+  --pwa-optimized-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%23424242" width="24" height="24" rx="12"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/><path d="M5 5h14v14H5z"/></g></svg>');
+
+  --pwa-installable-color-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero" fill="none"><circle fill="%230CCE6B" cx="12" cy="12" r="12"/><path d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z" fill="%23FFF"/></g></svg>');
+  --pwa-optimized-color-url: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="%230CCE6B" width="24" height="24" rx="12"/><path d="M5 5h14v14H5z"/><path fill="%23FFF" d="M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z"/></g></svg>');
+}
+
+@media not print {
+  .lh-vars.dark {
+    /* Pallete */
+    --color-gray-200: var(--color-gray-800);
+    --color-gray-300: #616161;
+    --color-gray-400: var(--color-gray-600);
+    --color-gray-700: var(--color-gray-400);
+    --color-gray-50: #757575;
+    --color-gray-600: var(--color-gray-500);
+    --color-green-700: var(--color-green);
+    --color-orange-700: var(--color-orange);
+    --color-red-700: var(--color-red);
+    --color-teal-600: var(--color-cyan-500);
+
+    /* Context-specific colors */
+    --color-hover: rgba(0, 0, 0, 0.2);
+    --color-informative: var(--color-blue-200);
+
+    /* Component variables */
+    --env-item-background-color: var(--color-gray);
+    --plugin-badge-background-color: var(--color-gray-800);
+    --report-background-color: var(--color-gray-900);
+    --report-border-color-secondary: var(--color-gray-200);
+    --report-text-color-secondary: var(--color-gray-400);
+    --report-text-color: var(--color-gray-100);
+    --snippet-color: var(--color-cyan-500);
+    --topbar-background-color: var(--color-gray);
+  	--toplevel-warning-background-color: #544B40;
+  	--toplevel-warning-message-text-color: var(--color-orange-700);
+	--toplevel-warning-text-color: var(--color-gray-100);
+
+    /* SVGs */
+    --plugin-icon-url: var(--plugin-icon-url-dark);
+    --pwa-installable-gray-url: var(--pwa-installable-gray-url-dark);
+    --pwa-optimized-gray-url: var(--pwa-optimized-gray-url-dark);
+  }
+}
+
+@media only screen and (max-width: 480px) {
+  .lh-vars {
+    --audit-group-margin-bottom: 20px;
+    --category-padding: 24px;
+    --env-name-min-width: 120px;
+    --gauge-circle-size-big: 96px;
+    --gauge-circle-size: 72px;
+    --gauge-label-font-size-big: 22px;
+    --gauge-label-font-size: 14px;
+    --gauge-label-line-height-big: 26px;
+    --gauge-label-line-height: 20px;
+    --gauge-percentage-font-size-big: 34px;
+    --gauge-percentage-font-size: 26px;
+    --gauge-wrapper-width: 112px;
+    --header-padding: 16px 0 16px 0;
+    --image-preview-size: 24px;
+    --plugin-icon-size: 75%;
+    --pwa-icon-margin: 0 7px 0 -3px;
+    --report-font-size: 14px;
+    --report-line-height: 20px;
+    --score-icon-margin-left: 2px;
+    --score-icon-size: 10px;
+    --topbar-height: 28px;
+    --topbar-logo-size: 20px;
+  }
+
+  /* Not enough space to adequately show the relative savings bars. */
+  .lh-sparkline {
+    display: none;
+  }
+}
+
+.lh-vars.lh-devtools {
+  --audit-explanation-line-height: 14px;
+  --audit-group-margin-bottom: 20px;
+  --audit-group-padding-vertical: 12px;
+  --audit-padding-vertical: 4px;
+  --category-header-font-size: 16px;
+  --category-padding: 12px;
+  --default-padding: 12px;
+  --env-name-min-width: 120px;
+  --footer-padding-vertical: 8px;
+  --gauge-circle-size-big: 72px;
+  --gauge-circle-size: 64px;
+  --gauge-label-font-size-big: 22px;
+  --gauge-label-font-size: 14px;
+  --gauge-label-line-height-big: 26px;
+  --gauge-label-line-height: 20px;
+  --gauge-percentage-font-size-big: 34px;
+  --gauge-percentage-font-size: 26px;
+  --gauge-wrapper-width: 97px;
+  --header-line-height: 20px;
+  --header-padding: 16px 0 16px 0;
+  --screenshot-overlay-background: transparent;
+  --plugin-icon-size: 75%;
+  --pwa-icon-margin: 0 7px 0 -3px;
+  --report-font-family-monospace: 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace;
+  --report-font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', 'Lucida Grande', sans-serif;
+  --report-font-size: 12px;
+  --report-line-height: 20px;
+  --score-icon-margin-left: 2px;
+  --score-icon-size: 10px;
+  --section-padding-vertical: 8px;
+}
+
+.lh-devtools.lh-root {
+  height: 100%;
+}
+.lh-devtools.lh-root img {
+  /* Override devtools default 'min-width: 0' so svg without size in a flexbox isn't collapsed. */
+  min-width: auto;
+}
+.lh-devtools .lh-container {
+  overflow-y: scroll;
+  height: calc(100% - var(--topbar-height));
+}
+@media print {
+  .lh-devtools .lh-container {
+    overflow: unset;
+  }
+}
+.lh-devtools .lh-sticky-header {
+  /* This is normally the height of the topbar, but we want it to stick to the top of our scroll container .lh-container` */
+  top: 0;
+}
+
+@keyframes fadeIn {
+  0% { opacity: 0;}
+  100% { opacity: 0.6;}
+}
+
+.lh-root *, .lh-root *::before, .lh-root *::after {
+  box-sizing: border-box;
+  -webkit-font-smoothing: antialiased;
+}
+
+.lh-root {
+  font-family: var(--report-font-family);
+  font-size: var(--report-font-size);
+  margin: 0;
+  line-height: var(--report-line-height);
+  background: var(--report-background-color);
+  scroll-behavior: smooth;
+  color: var(--report-text-color);
+}
+
+.lh-root :focus {
+    outline: -webkit-focus-ring-color auto 3px;
+}
+.lh-root summary:focus {
+    outline: none;
+    box-shadow: 0 0 0 1px hsl(217, 89%, 61%);
+}
+
+.lh-root [hidden] {
+  display: none !important;
+}
+
+.lh-root pre {
+  margin: 0;
+}
+
+.lh-root details > summary {
+  cursor: pointer;
+}
+
+.lh-container {
+  /*
+  Text wrapping in the report is so much FUN!
+  We have a `word-break: break-word;` globally here to prevent a few common scenarios, namely
+  long non-breakable text (usually URLs) found in:
+    1. The footer
+    2. .lh-node (outerHTML)
+    3. .lh-code
+
+  With that sorted, the next challenge is appropriate column sizing and text wrapping inside our
+  .lh-details tables. Even more fun.
+    * We don't want table headers ("Potential Savings (ms)") to wrap or their column values, but
+    we'd be happy for the URL column to wrap if the URLs are particularly long.
+    * We want the narrow columns to remain narrow, providing the most column width for URL
+    * We don't want the table to extend past 100% width.
+    * Long URLs in the URL column can wrap. Util.getURLDisplayName maxes them out at 64 characters,
+      but they do not get any overflow:ellipsis treatment.
+  */
+  word-break: break-word;
+}
+
+.lh-audit-group a,
+.lh-category-header__description a,
+.lh-audit__description a,
+.lh-warnings a,
+.lh-footer a,
+.lh-table-column--link a {
+  color: var(--color-informative);
+}
+
+.lh-audit__description, .lh-audit__stackpack {
+  --inner-audit-padding-right: var(--stackpack-padding-horizontal);
+  padding-left: var(--audit-description-padding-left);
+  padding-right: var(--inner-audit-padding-right);
+  padding-top: 8px;
+  padding-bottom: 8px;
+}
+
+.lh-details {
+  font-size: var(--report-font-size);
+  margin-top: var(--default-padding);
+  margin-bottom: var(--default-padding);
+  margin-left: var(--audit-description-padding-left);
+  /* whatever the .lh-details side margins are */
+  width: 100%;
+}
+
+.lh-details.flex .lh-code {
+  max-width: 70%;
+}
+
+.lh-audit__stackpack {
+  display: flex;
+  align-items: center;
+}
+
+.lh-audit__stackpack__img {
+  max-width: 50px;
+  margin-right: var(--default-padding)
+}
+
+/* Report header */
+
+.report-icon {
+  display: flex;
+  align-items: center;
+  padding: 10px 12px;
+  cursor: pointer;
+}
+.report-icon[disabled] {
+  opacity: 0.3;
+  pointer-events: none;
+}
+
+.report-icon::before {
+  content: "";
+  margin-right: 5px;
+  background-repeat: no-repeat;
+  width: var(--report-icon-size);
+  height: var(--report-icon-size);
+  opacity: 0.7;
+}
+.report-icon:hover::before {
+  opacity: 1;
+}
+.dark .report-icon::before {
+  filter: invert(1);
+}
+.report-icon--print::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z"/><path fill="none" d="M0 0h24v24H0z"/></svg>');
+}
+.report-icon--copy::before {
+  background-image: url('data:image/svg+xml;utf8,<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/></svg>');
+}
+.report-icon--open::before {
+  background-image: url('data:image/svg+xml;utf8,<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"/></svg>');
+}
+.report-icon--download::before {
+  background-image: url('data:image/svg+xml;utf8,<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/><path d="M0 0h24v24H0z" fill="none"/></svg>');
+}
+.report-icon--dark::before {
+  background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 100 125"><path d="M50 23.587c-16.27 0-22.799 12.574-22.799 21.417 0 12.917 10.117 22.451 12.436 32.471h20.726c2.32-10.02 12.436-19.554 12.436-32.471 0-8.843-6.528-21.417-22.799-21.417zM39.637 87.161c0 3.001 1.18 4.181 4.181 4.181h.426l.41 1.231C45.278 94.449 46.042 95 48.019 95h3.963c1.978 0 2.74-.551 3.365-2.427l.409-1.231h.427c3.002 0 4.18-1.18 4.18-4.181V80.91H39.637v6.251zM50 18.265c1.26 0 2.072-.814 2.072-2.073v-9.12C52.072 5.813 51.26 5 50 5c-1.259 0-2.072.813-2.072 2.073v9.12c0 1.259.813 2.072 2.072 2.072zM68.313 23.727c.994.774 2.135.634 2.91-.357l5.614-7.187c.776-.992.636-2.135-.356-2.909-.992-.776-2.135-.636-2.91.357l-5.613 7.186c-.778.993-.636 2.135.355 2.91zM91.157 36.373c-.306-1.222-1.291-1.815-2.513-1.51l-8.85 2.207c-1.222.305-1.814 1.29-1.51 2.512.305 1.223 1.291 1.814 2.513 1.51l8.849-2.206c1.223-.305 1.816-1.291 1.511-2.513zM86.757 60.48l-8.331-3.709c-1.15-.512-2.225-.099-2.736 1.052-.512 1.151-.1 2.224 1.051 2.737l8.33 3.707c1.15.514 2.225.101 2.736-1.05.513-1.149.1-2.223-1.05-2.737zM28.779 23.37c.775.992 1.917 1.131 2.909.357.992-.776 1.132-1.917.357-2.91l-5.615-7.186c-.775-.992-1.917-1.132-2.909-.357s-1.131 1.917-.356 2.909l5.614 7.187zM21.715 39.583c.305-1.223-.288-2.208-1.51-2.513l-8.849-2.207c-1.222-.303-2.208.289-2.513 1.511-.303 1.222.288 2.207 1.511 2.512l8.848 2.206c1.222.304 2.208-.287 2.513-1.509zM21.575 56.771l-8.331 3.711c-1.151.511-1.563 1.586-1.05 2.735.511 1.151 1.586 1.563 2.736 1.052l8.331-3.711c1.151-.511 1.563-1.586 1.05-2.735-.512-1.15-1.585-1.562-2.736-1.052z"/></svg>');
+}
+.report-icon--treemap::before {
+  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="black"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M3 5v14h19V5H3zm2 2h15v4H5V7zm0 10v-4h4v4H5zm6 0v-4h9v4h-9z"/></svg>');
+}
+
+.lh-buttons {
+  display: flex;
+  flex-wrap: wrap;
+}
+.lh-button {
+  margin: 10px;
+  height: 30px;
+  border: 1px solid var(--color-gray-600);
+  border-radius: 4px;
+  font-weight: bold;
+  color: rgb(26, 115, 232);
+  background-color: var(--report-background-color);
+}
+.dark .lh-button {
+  color: var(--color-blue-200);
+}
+
+/* Node */
+.lh-node__snippet {
+  font-family: var(--report-font-family-monospace);
+  color: var(--snippet-color);
+  font-size: var(--report-monospace-font-size);
+  line-height: 20px;
+}
+
+/* Score */
+
+.lh-audit__score-icon {
+  width: var(--score-icon-size);
+  height: var(--score-icon-size);
+  margin: var(--score-icon-margin);
+}
+
+.lh-audit--pass .lh-audit__display-text {
+  color: var(--color-pass-secondary);
+}
+.lh-audit--pass .lh-audit__score-icon,
+.lh-scorescale-range--pass::before {
+  border-radius: 100%;
+  background: var(--color-pass);
+}
+
+.lh-audit--average .lh-audit__display-text {
+  color: var(--color-average-secondary);
+}
+.lh-audit--average .lh-audit__score-icon,
+.lh-scorescale-range--average::before {
+  background: var(--color-average);
+  width: var(--icon-square-size);
+  height: var(--icon-square-size);
+}
+
+.lh-audit--fail .lh-audit__display-text {
+  color: var(--color-fail-secondary);
+}
+.lh-audit--fail .lh-audit__score-icon,
+.lh-audit--error .lh-audit__score-icon,
+.lh-scorescale-range--fail::before {
+  border-left: calc(var(--score-icon-size) / 2) solid transparent;
+  border-right: calc(var(--score-icon-size) / 2) solid transparent;
+  border-bottom: var(--score-icon-size) solid var(--color-fail);
+}
+
+.lh-audit--manual .lh-audit__display-text,
+.lh-audit--notapplicable .lh-audit__display-text {
+  color: var(--color-gray-600);
+}
+.lh-audit--manual .lh-audit__score-icon,
+.lh-audit--notapplicable .lh-audit__score-icon {
+  border-radius: 100%;
+  background: var(--color-gray-400);
+}
+
+.lh-audit--informative .lh-audit__display-text {
+  color: var(--color-gray-600);
+}
+
+.lh-audit--informative .lh-audit__score-icon {
+  border: none;
+  border-radius: 100%;
+  background: var(--color-gray-400);
+}
+
+.lh-audit__description,
+.lh-audit__stackpack {
+  color: var(--report-text-color-secondary);
+}
+.lh-audit__adorn {
+  border: 1px solid slategray;
+  border-radius: 3px;
+  margin: 0 3px;
+  padding: 0 2px;
+  line-height: 1.1;
+  display: inline-block;
+  font-size: 90%;
+}
+
+.lh-category-header__description  {
+  font-size: var(--report-font-size);
+  text-align: center;
+  margin: 0px auto;
+  max-width: 400px;
+}
+
+
+.lh-audit__display-text,
+.lh-load-opportunity__sparkline,
+.lh-chevron-container {
+  margin: 0 var(--audit-margin-horizontal);
+}
+.lh-chevron-container {
+  margin-right: 0;
+}
+
+.lh-audit__title-and-text {
+  flex: 1;
+}
+
+.lh-audit__title-and-text code {
+  color: var(--snippet-color);
+  font-size: var(--report-monospace-font-size);
+}
+
+/* Prepend display text with em dash separator. But not in Opportunities. */
+.lh-audit__display-text:not(:empty):before {
+  content: '—';
+  margin-right: var(--audit-margin-horizontal);
+}
+.lh-audit-group.lh-audit-group--load-opportunities .lh-audit__display-text:not(:empty):before {
+  display: none;
+}
+
+/* Expandable Details (Audit Groups, Audits) */
+.lh-audit__header {
+  display: flex;
+  align-items: center;
+  font-weight: 500;
+  padding: var(--audit-padding-vertical) 0;
+}
+
+.lh-audit--load-opportunity .lh-audit__header {
+  display: block;
+}
+
+
+.lh-metricfilter {
+  text-align: right;
+  margin-top: var(--default-padding);
+}
+
+.lh-metricfilter__radio {
+  position: absolute;
+  left: -9999px;
+}
+.lh-metricfilter input[type='radio']:focus-visible + label {
+  outline: -webkit-focus-ring-color auto 1px;
+}
+
+.lh-metricfilter__label {
+  border: solid 1px var(--color-gray-400);
+  align-items: center;
+  justify-content: center;
+  padding: 2px 5px;
+  width: 50%;
+  height: 28px;
+  cursor: pointer;
+  font-size: 90%;
+}
+
+.lh-metricfilter__label:first-of-type {
+  border-top-left-radius: 5px;
+  border-bottom-left-radius: 5px;
+  margin-left: 5px;
+}
+.lh-metricfilter__label:last-of-type {
+  border-top-right-radius: 5px;
+  border-bottom-right-radius: 5px;
+}
+
+.lh-metricfilter__label--active {
+  background: var(--color-blue-A700);
+  color: var(--color-white);
+}
+/* Give the 'All' choice a more muted display */
+.lh-metricfilter__label--active[for="metric-All"] {
+  background-color: var(--color-blue-200) !important;
+  color: black !important;
+}
+
+/* If audits are filtered, hide the itemcount for Passed Audits… */
+.lh-category--filtered .lh-audit-group .lh-audit-group__itemcount {
+  display: none;
+}
+
+
+.lh-audit__header:hover {
+  background-color: var(--color-hover);
+}
+
+/* We want to hide the browser's default arrow marker on summary elements. Admittedly, it's complicated. */
+.lh-audit-group > summary,
+.lh-expandable-details > summary {
+  /* Blink 89+ and Firefox will hide the arrow when display is changed from (new) default of `list-item` to block.  https://chromestatus.com/feature/6730096436051968*/
+  display: block;
+}
+/* Safari and Blink <=88 require using the -webkit-details-marker selector */
+.lh-audit-group > summary::-webkit-details-marker,
+.lh-expandable-details > summary::-webkit-details-marker {
+  display: none;
+}
+
+/* Perf Metric */
+
+.lh-metrics-container {
+  display: grid;
+  grid-template-rows: 1fr 1fr 1fr;
+  grid-auto-flow: column;
+  grid-column-gap: 24px;
+}
+
+.lh-metric {
+  border-top: 1px solid var(--report-border-color-secondary);
+}
+
+@media screen and (min-width: 640px) {
+  .lh-metric:nth-child(3n+3) {
+    border-bottom: 1px solid var(--report-border-color-secondary);
+  }
+}
+
+@media screen and (max-width: 640px) {
+  .lh-metrics-container {
+    display: block;
+  }
+
+  .lh-metric:nth-last-child(-n+1) {
+    border-bottom: 1px solid var(--report-border-color-secondary);
+  }
+}
+
+.lh-metric__innerwrap {
+  display: grid;
+  grid-template-columns: var(--audit-description-padding-left) 10fr 3fr;
+  align-items: center;
+  padding: 10px 0;
+}
+
+.lh-metric__details {
+  order: -1;
+}
+
+.lh-metric__title {
+  flex: 1;
+  font-weight: 500;
+}
+
+.lh-metrics__disclaimer {
+  color: var(--color-gray-600);
+  margin: var(--section-padding-vertical) 0;
+}
+
+.lh-calclink {
+  padding-left: calc(1ex / 3);
+}
+
+.lh-metric__description {
+  display: none;
+  grid-column-start: 2;
+  grid-column-end: 3;
+  color: var(--report-text-color-secondary);
+}
+
+.lh-metric__value {
+  white-space: nowrap; /* No wrapping between metric value and the icon */
+  font-weight: 500;
+  justify-self: end;
+}
+
+/* No-JS toggle switch */
+/* Keep this selector sync'd w/ `magicSelector` in report-ui-features-test.js */
+ .lh-metrics-toggle__input:checked ~ .lh-metrics-container .lh-metric__description {
+  display: block;
+}
+
+.lh-metrics-toggle__input {
+  cursor: pointer;
+  opacity: 0;
+  position: absolute;
+  right: 0;
+  width: 74px;
+  height: 28px;
+  top: -3px;
+}
+.lh-metrics-toggle__label {
+  display: flex;
+  background-color: #eee;
+  border-radius: 20px;
+  overflow: hidden;
+  position: absolute;
+  right: 0;
+  top: -3px;
+  pointer-events: none;
+}
+.lh-metrics-toggle__input:focus + label {
+  outline: -webkit-focus-ring-color auto 3px;
+}
+.lh-metrics-toggle__icon {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 2px 5px;
+  width: 50%;
+  height: 28px;
+}
+.lh-metrics-toggle__input:not(:checked) + label .lh-metrics-toggle__icon--less,
+.lh-metrics-toggle__input:checked + label .lh-metrics-toggle__icon--more {
+  background-color: var(--color-blue-A700);
+  --metric-toggle-lines-fill: var(--color-white);
+}
+.lh-metrics-toggle__lines {
+  fill: var(--metric-toggle-lines-fill);
+}
+
+.lh-metrics-toggle__label  {
+  background-color: var(--metrics-toggle-background-color);
+}
+
+.lh-metrics-toggle__label .lh-metrics-toggle__icon--less {
+  padding-left: 8px;
+}
+.lh-metrics-toggle__label .lh-metrics-toggle__icon--more {
+  padding-right: 8px;
+}
+
+/* Pushes the metric description toggle button to the right. */
+.lh-audit-group--metrics .lh-audit-group__header {
+  display: flex;
+}
+.lh-audit-group--metrics .lh-audit-group__header span.lh-audit-group__title {
+  flex: 1;
+}
+
+.lh-metric .lh-metric__innerwrap::before,
+.lh-scorescale-range::before {
+  content: '';
+  width: var(--score-icon-size);
+  height: var(--score-icon-size);
+  display: inline-block;
+  margin: var(--score-icon-margin);
+}
+
+.lh-metric--pass .lh-metric__value {
+  color: var(--color-pass-secondary);
+}
+.lh-metric--pass .lh-metric__innerwrap::before {
+  border-radius: 100%;
+  background: var(--color-pass);
+}
+
+.lh-metric--average .lh-metric__value {
+  color: var(--color-average-secondary);
+}
+.lh-metric--average .lh-metric__innerwrap::before {
+  background: var(--color-average);
+  width: var(--icon-square-size);
+  height: var(--icon-square-size);
+}
+
+.lh-metric--fail .lh-metric__value {
+  color: var(--color-fail-secondary);
+}
+.lh-metric--fail .lh-metric__innerwrap::before,
+.lh-metric--error .lh-metric__innerwrap::before {
+  border-left: calc(var(--score-icon-size) / 2) solid transparent;
+  border-right: calc(var(--score-icon-size) / 2) solid transparent;
+  border-bottom: var(--score-icon-size) solid var(--color-fail);
+}
+
+.lh-metric--error .lh-metric__value,
+.lh-metric--error .lh-metric__description {
+  color: var(--color-fail-secondary);
+}
+
+/* Perf load opportunity */
+
+.lh-load-opportunity__cols {
+  display: flex;
+  align-items: flex-start;
+}
+
+.lh-load-opportunity__header .lh-load-opportunity__col {
+  color: var(--color-gray-600);
+  display: unset;
+  line-height: calc(2.3 * var(--report-font-size));
+}
+
+.lh-load-opportunity__col {
+  display: flex;
+}
+
+.lh-load-opportunity__col--one {
+  flex: 5;
+  align-items: center;
+  margin-right: 2px;
+}
+.lh-load-opportunity__col--two {
+  flex: 4;
+  text-align: right;
+}
+
+.lh-audit--load-opportunity .lh-audit__display-text {
+  text-align: right;
+  flex: 0 0 calc(3 * var(--report-font-size));
+}
+
+
+/* Sparkline */
+
+.lh-load-opportunity__sparkline {
+  flex: 1;
+  margin-top: calc((var(--report-line-height) - var(--sparkline-height)) / 2);
+}
+
+.lh-sparkline {
+  height: var(--sparkline-height);
+  width: 100%;
+}
+
+.lh-sparkline__bar {
+  height: 100%;
+  float: right;
+}
+
+.lh-audit--pass .lh-sparkline__bar {
+  background: var(--color-pass);
+}
+
+.lh-audit--average .lh-sparkline__bar {
+  background: var(--color-average);
+}
+
+.lh-audit--fail .lh-sparkline__bar {
+  background: var(--color-fail);
+}
+
+/* Filmstrip */
+
+.lh-filmstrip-container {
+  /* smaller gap between metrics and filmstrip */
+  margin: -8px auto 0 auto;
+}
+
+.lh-filmstrip {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+  padding-bottom: var(--default-padding);
+}
+
+.lh-filmstrip__frame {
+  text-align: right;
+  position: relative;
+}
+
+.lh-filmstrip__thumbnail {
+  border: 1px solid var(--report-border-color-secondary);
+  max-height: 100px;
+  max-width: 60px;
+}
+
+@media screen and (max-width: 750px) {
+  .lh-filmstrip {
+    flex-wrap: wrap;
+  }
+  .lh-filmstrip__frame {
+    width: 20%;
+    margin-bottom: 5px;
+  }
+  .lh-filmstrip__thumbnail {
+    display: block;
+    margin: auto;
+  }
+}
+
+/* Audit */
+
+.lh-audit {
+  border-bottom: 1px solid var(--report-border-color-secondary);
+}
+
+/* Apply border-top to just the first audit. */
+.lh-audit {
+  border-top: 1px solid var(--report-border-color-secondary);
+}
+.lh-audit ~ .lh-audit {
+  border-top: none;
+}
+
+
+.lh-audit--error .lh-audit__display-text {
+  color: var(--color-fail);
+}
+
+/* Audit Group */
+
+.lh-audit-group {
+  margin-bottom: var(--audit-group-margin-bottom);
+  position: relative;
+}
+
+.lh-audit-group__header::before {
+  /* By default, groups don't get an icon */
+  content: none;
+  width: var(--pwa-icon-size);
+  height: var(--pwa-icon-size);
+  margin: var(--pwa-icon-margin);
+  display: inline-block;
+  vertical-align: middle;
+}
+
+/* Style the "over budget" columns red. */
+.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(4),
+.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(5),
+.lh-audit-group--budgets #timing-budget tbody tr td:nth-child(3) {
+  color: var(--color-red-700);
+}
+
+/* Align the "over budget request count" text to be close to the "over budget bytes" column. */
+.lh-audit-group--budgets .lh-table tbody tr td:nth-child(4){
+  text-align: right;
+}
+
+.lh-audit-group--budgets .lh-table {
+  width: 100%;
+  margin: 16px 0px 16px 0px;
+}
+
+.lh-audit-group--pwa-installable .lh-audit-group__header::before {
+  content: '';
+  background-image: var(--pwa-installable-gray-url);
+}
+.lh-audit-group--pwa-optimized .lh-audit-group__header::before {
+  content: '';
+  background-image: var(--pwa-optimized-gray-url);
+}
+.lh-audit-group--pwa-installable.lh-badged .lh-audit-group__header::before {
+  background-image: var(--pwa-installable-color-url);
+}
+.lh-audit-group--pwa-optimized.lh-badged .lh-audit-group__header::before {
+  background-image: var(--pwa-optimized-color-url);
+}
+
+.lh-audit-group--metrics .lh-audit-group__summary {
+  margin-top: 0;
+  margin-bottom: 0;
+}
+
+.lh-audit-group__summary {
+  display: flex;
+  justify-content: space-between;
+  margin-top: calc(var(--category-padding) * 1.5);
+  margin-bottom: var(--category-padding);
+}
+
+.lh-audit-group__itemcount {
+  color: var(--color-gray-600);
+  font-weight: bold;
+}
+.lh-audit-group__header .lh-chevron {
+  margin-top: calc((var(--report-line-height) - 5px) / 2);
+}
+
+.lh-audit-group__header {
+  font-size: var(--report-font-size);
+  margin: 0 0 var(--audit-group-padding-vertical);
+  /* When the header takes 100% width, the chevron becomes small. */
+  max-width: calc(100% - var(--chevron-size));
+}
+/* max-width makes the metric toggle not flush. metrics doesn't have a chevron so unset. */
+.lh-audit-group--metrics .lh-audit-group__header {
+  max-width: unset;
+}
+
+.lh-audit-group__header span.lh-audit-group__title {
+  font-weight: bold;
+}
+
+.lh-audit-group__header span.lh-audit-group__itemcount {
+  font-weight: bold;
+  color: var(--color-gray-600);
+}
+
+.lh-audit-group__header span.lh-audit-group__description {
+  font-weight: 500;
+  color: var(--color-gray-600);
+}
+.lh-audit-group__header span.lh-audit-group__description::before {
+  content: '—';
+  margin: 0px var(--audit-margin-horizontal);
+}
+
+.lh-clump > .lh-audit-group__header,
+.lh-audit-group--diagnostics .lh-audit-group__header,
+.lh-audit-group--load-opportunities .lh-audit-group__header,
+.lh-audit-group--metrics .lh-audit-group__header,
+.lh-audit-group--pwa-installable .lh-audit-group__header,
+.lh-audit-group--pwa-optimized .lh-audit-group__header {
+  margin-top: var(--audit-group-padding-vertical);
+}
+
+.lh-audit-explanation {
+  margin: var(--audit-padding-vertical) 0 calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal);
+  line-height: var(--audit-explanation-line-height);
+  display: inline-block;
+}
+
+.lh-audit--fail .lh-audit-explanation {
+  color: var(--color-fail);
+}
+
+/* Report */
+.lh-list > div:not(:last-child) {
+  padding-bottom: 20px;
+}
+
+.lh-header-container {
+  display: block;
+  margin: 0 auto;
+  position: relative;
+  word-wrap: break-word;
+}
+
+.lh-report {
+  min-width: var(--report-min-width);
+}
+
+.lh-exception {
+  font-size: large;
+}
+
+.lh-code {
+  white-space: normal;
+  margin-top: 0;
+  font-size: var(--report-monospace-font-size);
+}
+
+.lh-warnings {
+  --item-margin: calc(var(--report-line-height) / 6);
+  color: var(--color-average);
+  margin: var(--audit-padding-vertical) 0;
+  padding: calc(var(--audit-padding-vertical) / 2) calc(var(--audit-description-padding-left));
+}
+.lh-warnings span {
+  font-weight: bold;
+}
+
+.lh-warnings--toplevel {
+  --item-margin: calc(var(--header-line-height) / 4);
+  color: var(--toplevel-warning-text-color);
+  margin-left: auto;
+  margin-right: auto;
+  max-width: calc(var(--report-width) - var(--category-padding) * 2);
+  background-color: var(--toplevel-warning-background-color);
+  padding: var(--toplevel-warning-padding);
+  border-radius: 8px;
+}
+
+.lh-warnings__msg {
+  color: var(--toplevel-warning-message-text-color);
+  margin: 0;
+}
+
+.lh-warnings ul {
+  margin: 0;
+}
+.lh-warnings li {
+  margin: var(--item-margin) 0;
+}
+.lh-warnings li:last-of-type {
+  margin-bottom: 0;
+}
+
+.lh-scores-header {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: center;
+}
+.lh-scores-header__solo {
+  padding: 0;
+  border: 0;
+}
+
+/* Gauge */
+
+.lh-gauge__wrapper--pass {
+  color: var(--color-pass);
+  fill: var(--color-pass);
+  stroke: var(--color-pass);
+}
+
+.lh-gauge__wrapper--average {
+  color: var(--color-average);
+  fill: var(--color-average);
+  stroke: var(--color-average);
+}
+
+.lh-gauge__wrapper--fail {
+  color: var(--color-fail);
+  fill: var(--color-fail);
+  stroke: var(--color-fail);
+}
+
+.lh-gauge__wrapper--not-applicable {
+  color: var(--color-not-applicable);
+  fill: var(--color-not-applicable);
+  stroke: var(--color-not-applicable);
+}
+
+.lh-gauge {
+  stroke-linecap: round;
+  width: var(--gauge-circle-size);
+  height: var(--gauge-circle-size);
+}
+
+.lh-category .lh-gauge {
+  --gauge-circle-size: var(--gauge-circle-size-big);
+}
+
+.lh-gauge-base {
+    opacity: 0.1;
+    stroke: var(--circle-background);
+}
+
+.lh-gauge-arc {
+    fill: none;
+    stroke: var(--circle-color);
+    transform-origin: 50% 50%;
+    animation: load-gauge var(--transition-length) ease forwards;
+    animation-delay: 250ms;
+}
+
+.lh-gauge__svg-wrapper {
+  position: relative;
+  height: var(--gauge-circle-size);
+}
+.lh-category .lh-gauge__svg-wrapper {
+  --gauge-circle-size: var(--gauge-circle-size-big);
+}
+
+/* The plugin badge overlay */
+.lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {
+  width: var(--plugin-badge-size);
+  height: var(--plugin-badge-size);
+  background-color: var(--plugin-badge-background-color);
+  background-image: var(--plugin-icon-url);
+  background-repeat: no-repeat;
+  background-size: var(--plugin-icon-size);
+  background-position: 58% 50%;
+  content: "";
+  position: absolute;
+  right: -6px;
+  bottom: 0px;
+  display: block;
+  z-index: 100;
+  box-shadow: 0 0 4px rgba(0,0,0,.2);
+  border-radius: 25%;
+}
+.lh-category .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {
+  width: var(--plugin-badge-size-big);
+  height: var(--plugin-badge-size-big);
+}
+
+@keyframes load-gauge {
+  from { stroke-dasharray: 0 352; }
+}
+
+.lh-gauge__percentage {
+  width: 100%;
+  height: var(--gauge-circle-size);
+  position: absolute;
+  font-family: var(--report-font-family-monospace);
+  font-size: calc(var(--gauge-circle-size) * 0.34 + 1.3px);
+  line-height: 0;
+  text-align: center;
+  top: calc(var(--score-container-padding) + var(--gauge-circle-size) / 2);
+}
+
+.lh-category .lh-gauge__percentage {
+  --gauge-circle-size: var(--gauge-circle-size-big);
+  --gauge-percentage-font-size: var(--gauge-percentage-font-size-big);
+}
+
+.lh-gauge__wrapper {
+  position: relative;
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+  text-decoration: none;
+  padding: var(--score-container-padding);
+
+  --transition-length: 1s;
+
+  /* Contain the layout style paint & layers during animation*/
+  contain: content;
+  will-change: opacity; /* Only using for layer promotion */
+}
+
+.lh-gauge__label {
+  font-size: var(--gauge-label-font-size);
+  line-height: var(--gauge-label-line-height);
+  margin-top: 10px;
+  text-align: center;
+  color: var(--report-text-color);
+}
+
+/* TODO(#8185) use more BEM (.lh-gauge__label--big) instead of relying on descendant selector */
+.lh-category .lh-gauge__label {
+  --gauge-label-font-size: var(--gauge-label-font-size-big);
+  --gauge-label-line-height: var(--gauge-label-line-height-big);
+  margin-top: 14px;
+}
+
+
+.lh-scores-header .lh-gauge__wrapper,
+.lh-scores-header .lh-gauge--pwa__wrapper,
+.lh-sticky-header .lh-gauge__wrapper,
+.lh-sticky-header .lh-gauge--pwa__wrapper {
+  width: var(--gauge-wrapper-width);
+}
+
+.lh-scorescale {
+  display: inline-flex;
+  margin: 12px auto 0 auto;
+  border: 1px solid var(--color-gray-200);
+  border-radius: 20px;
+  padding: 8px 8px;
+}
+
+.lh-scorescale-range {
+  display: flex;
+  align-items: center;
+  margin: 0 12px;
+  font-family: var(--report-font-family-monospace);
+  white-space: nowrap;
+}
+
+/* Hide category score gauages if it's a single category report */
+.lh-header--solo-category .lh-scores-wrapper {
+  display: none;
+}
+
+
+.lh-categories {
+  width: 100%;
+  overflow: hidden;
+}
+
+.lh-category {
+  padding: var(--category-padding);
+  max-width: var(--report-width);
+  margin: 0 auto;
+}
+
+.lh-category-wrapper {
+  border-bottom: 1px solid var(--color-gray-200);
+}
+
+.lh-category-wrapper:first-of-type {
+  border-top: 1px solid var(--color-gray-200);
+}
+
+/* section hash link jump should preserve fixed header
+   https://css-tricks.com/hash-tag-links-padding/
+*/
+.lh-category > .lh-permalink {
+  --sticky-header-height: calc(var(--gauge-circle-size) + var(--score-container-padding) * 2);
+  --topbar-plus-header: calc(var(--topbar-height) + var(--sticky-header-height));
+  margin-top: calc(var(--topbar-plus-header) * -1);
+  padding-bottom: var(--topbar-plus-header);
+  display: block;
+  visibility: hidden;
+}
+
+.lh-category-header {
+  font-size: var(--category-header-font-size);
+  min-height: var(--gauge-circle-size);
+  margin-bottom: var(--section-padding-vertical);
+}
+
+.lh-category-header .lh-score__gauge {
+  max-width: 400px;
+  width: auto;
+  margin: 0px auto;
+}
+
+.lh-category-header .lh-audit__title {
+  font-size: var(--category-header-font-size);
+  line-height: var(--header-line-height);
+}
+
+#lh-log {
+  position: fixed;
+  background-color: #323232;
+  color: #fff;
+  min-height: 48px;
+  min-width: 288px;
+  padding: 16px 24px;
+  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
+  border-radius: 2px;
+  margin: 12px;
+  font-size: 14px;
+  cursor: default;
+  transition: transform 0.3s, opacity 0.3s;
+  transform: translateY(100px);
+  opacity: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 3;
+}
+
+#lh-log.show {
+  opacity: 1;
+  transform: translateY(0);
+}
+
+/* 964 fits the min-width of the filmstrip */
+@media screen and (max-width: 964px) {
+  .lh-report {
+    margin-left: 0;
+    width: 100%;
+  }
+}
+
+@media print {
+  body {
+    -webkit-print-color-adjust: exact; /* print background colors */
+  }
+  .lh-container {
+    display: block;
+  }
+  .lh-report {
+    margin-left: 0;
+    padding-top: 0;
+  }
+  .lh-categories {
+    margin-top: 0;
+  }
+}
+
+.lh-table {
+  border-collapse: collapse;
+  /* Can't assign padding to table, so shorten the width instead. */
+  width: calc(100% - var(--audit-description-padding-left));
+}
+
+.lh-table thead th {
+  font-weight: normal;
+  color: var(--color-gray-600);
+  /* See text-wrapping comment on .lh-container. */
+  word-break: normal;
+}
+
+.lh-row--odd {
+  background-color: var(--table-higlight-background-color);
+}
+.lh-row--hidden {
+  display: none;
+}
+
+.lh-table th,
+.lh-table td {
+  padding: 8px 6px;
+}
+.lh-table th:first-child {
+  padding-left: 0;
+}
+.lh-table th:last-child {
+  padding-right: 0;
+}
+
+.lh-table tr {
+  vertical-align: middle;
+}
+
+/* Looks unnecessary, but mostly for keeping the <th>s left-aligned */
+.lh-table-column--text,
+.lh-table-column--source-location,
+.lh-table-column--url,
+/* .lh-table-column--thumbnail, */
+/* .lh-table-column--empty,*/
+.lh-table-column--code,
+.lh-table-column--node {
+  text-align: left;
+}
+
+.lh-table-column--code {
+  min-width: 100px;
+}
+
+.lh-table-column--bytes,
+.lh-table-column--timespanMs,
+.lh-table-column--ms,
+.lh-table-column--numeric {
+  text-align: right;
+  word-break: normal;
+}
+
+
+
+.lh-table .lh-table-column--thumbnail {
+  width: var(--image-preview-size);
+  padding: 0;
+}
+
+.lh-table-column--url {
+  min-width: 250px;
+}
+
+.lh-table-column--text {
+  min-width: 80px;
+}
+
+/* Keep columns narrow if they follow the URL column */
+/* 12% was determined to be a decent narrow width, but wide enough for column headings */
+.lh-table-column--url + th.lh-table-column--bytes,
+.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--bytes,
+.lh-table-column--url + .lh-table-column--ms,
+.lh-table-column--url + .lh-table-column--ms + th.lh-table-column--bytes,
+.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--timespanMs {
+  width: 12%;
+}
+
+.lh-text__url-host {
+  display: inline;
+}
+
+.lh-text__url-host {
+  margin-left: calc(var(--report-font-size) / 2);
+  opacity: 0.6;
+  font-size: 90%
+}
+
+.lh-thumbnail {
+  object-fit: cover;
+  width: var(--image-preview-size);
+  height: var(--image-preview-size);
+  display: block;
+}
+
+.lh-unknown pre {
+  overflow: scroll;
+  border: solid 1px var(--color-gray-200);
+}
+
+.lh-text__url > a {
+  color: inherit;
+  text-decoration: none;
+}
+
+.lh-text__url > a:hover {
+  text-decoration: underline dotted #999;
+}
+
+.lh-sub-item-row {
+  margin-left: 20px;
+  margin-bottom: 0;
+  color: var(--color-gray-700);
+}
+.lh-sub-item-row td {
+  padding-top: 4px;
+  padding-bottom: 4px;
+  padding-left: 20px;
+}
+
+/* Chevron
+   https://codepen.io/paulirish/pen/LmzEmK
+ */
+.lh-chevron {
+  --chevron-angle: 42deg;
+  /* Edge doesn't support transform: rotate(calc(...)), so we define it here */
+  --chevron-angle-right: -42deg;
+  width: var(--chevron-size);
+  height: var(--chevron-size);
+  margin-top: calc((var(--report-line-height) - 12px) / 2);
+}
+
+.lh-chevron__lines {
+  transition: transform 0.4s;
+  transform: translateY(var(--report-line-height));
+}
+.lh-chevron__line {
+ stroke: var(--chevron-line-stroke);
+ stroke-width: var(--chevron-size);
+ stroke-linecap: square;
+ transform-origin: 50%;
+ transform: rotate(var(--chevron-angle));
+ transition: transform 300ms, stroke 300ms;
+}
+
+.lh-audit-group > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-right,
+.lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-left,
+.lh-audit > .lh-expandable-details .lh-chevron__line-right,
+.lh-audit > .lh-expandable-details[open] .lh-chevron__line-left {
+ transform: rotate(var(--chevron-angle-right));
+}
+
+.lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-right,
+.lh-audit > .lh-expandable-details[open] .lh-chevron__line-right {
+  transform: rotate(var(--chevron-angle));
+}
+
+.lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__lines,
+.lh-audit > .lh-expandable-details[open] .lh-chevron__lines {
+ transform: translateY(calc(var(--chevron-size) * -1));
+}
+
+
+
+/* Tooltip */
+.tooltip-boundary {
+  position: relative;
+}
+
+.tooltip {
+  position: absolute;
+  display: none; /* Don't retain these layers when not needed */
+  opacity: 0;
+  background: #ffffff;
+  min-width: 246px;
+  max-width: 275px;
+  padding: 15px;
+  border-radius: 5px;
+  text-align: initial;
+}
+/* shrink tooltips to not be cutoff on left edge of narrow viewports
+   45vw is chosen to be ~= width of the left column of metrics
+*/
+@media screen and (max-width: 535px) {
+  .tooltip {
+    min-width: 45vw;
+    padding: 3vw;
+  }
+}
+
+.tooltip-boundary:hover {
+  background-color: var(--color-hover);
+}
+
+.tooltip-boundary:hover .tooltip {
+  display: block;
+  animation: fadeInTooltip 250ms;
+  animation-fill-mode: forwards;
+  animation-delay: 850ms;
+  bottom: 100%;
+  z-index: 1;
+  will-change: opacity;
+  right: 0;
+  pointer-events: none;
+}
+
+.tooltip::before {
+  content: "";
+  border: solid transparent;
+  border-bottom-color: #fff;
+  border-width: 10px;
+  position: absolute;
+  bottom: -20px;
+  right: 6px;
+  transform: rotate(180deg);
+  pointer-events: none;
+}
+
+@keyframes fadeInTooltip {
+  0% { opacity: 0; }
+  75% { opacity: 1; }
+  100% { opacity: 1;  filter: drop-shadow(1px 0px 1px #aaa) drop-shadow(0px 2px 4px hsla(206, 6%, 25%, 0.15)); pointer-events: auto; }
+}
+
+/* Element screenshot */
+.lh-element-screenshot {
+  position: relative;
+  overflow: hidden;
+  float: left;
+  margin-right: 20px;
+}
+.lh-element-screenshot__content {
+  overflow: hidden;
+}
+.lh-element-screenshot__image {
+  /* Set by ElementScreenshotRenderer.installFullPageScreenshotCssVariable */
+  background-image: var(--element-screenshot-url);
+  outline: 2px solid #777;
+  background-color: white;
+  background-repeat: no-repeat;
+}
+.lh-element-screenshot__mask {
+  position: absolute;
+  background: #555;
+  opacity: 0.8;
+}
+.lh-element-screenshot__element-marker {
+  position: absolute;
+  outline: 2px solid var(--color-lime-400);
+}
+.lh-element-screenshot__overlay {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  z-index: 2000; /* .lh-topbar is 1000 */
+  background: var(--screenshot-overlay-background);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  cursor: zoom-out;
+}
+
+.lh-element-screenshot__overlay .lh-element-screenshot {
+  margin-right: 0; /* clearing margin used in thumbnail case */
+  outline: 1px solid var(--color-gray-700);
+}
+
+.lh-screenshot-overlay--enabled .lh-element-screenshot {
+  cursor: zoom-out;
+}
+.lh-screenshot-overlay--enabled .lh-node .lh-element-screenshot {
+  cursor: zoom-in;
+}
+
+/*# sourceURL=report-styles.css */
+</style>
+</head>
+<body class="lh-root lh-vars">
+  <noscript>Lighthouse report requires JavaScript. Please enable.</noscript>
+  <div hidden=""><!--
+@license
+Copyright 2018 The Lighthouse Authors. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS-IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<!-- Lighthouse run warnings -->
+<template id="tmpl-lh-warnings--toplevel">
+  <div class="lh-warnings lh-warnings--toplevel">
+    <p class="lh-warnings__msg"></p>
+    <ul></ul>
+  </div>
+</template>
+
+<!-- Lighthouse score scale -->
+<template id="tmpl-lh-scorescale">
+  <div class="lh-scorescale">
+      <span class="lh-scorescale-range lh-scorescale-range--fail">0–49</span>
+      <span class="lh-scorescale-range lh-scorescale-range--average">50–89</span>
+      <span class="lh-scorescale-range lh-scorescale-range--pass">90–100</span>
+  </div>
+</template>
+
+<!-- Toggle arrow chevron -->
+<template id="tmpl-lh-chevron">
+  <svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg>
+</template>
+
+<!-- Lighthouse category header -->
+<template id="tmpl-lh-category-header">
+  <div class="lh-category-header">
+    <div class="lh-score__gauge" role="heading" aria-level="2"></div>
+    <div class="lh-category-header__description"></div>
+  </div>
+</template>
+
+<!-- Lighthouse clump -->
+<template id="tmpl-lh-clump">
+  <!-- TODO: group classes shouldn't be reused for clumps. -->
+  <details class="lh-clump lh-audit-group">
+    <summary>
+      <div class="lh-audit-group__summary">
+        <div class="lh-audit-group__header">
+          <span class="lh-audit-group__title"></span>
+          <span class="lh-audit-group__itemcount"></span>
+          <!-- .lh-audit-group__description will be added here -->
+          <!-- .lh-metrics-toggle will be added here -->
+        </div>
+        <div class=""></div>
+      </div>
+    </summary>
+  </details>
+</template>
+
+<!-- Lighthouse metrics toggle -->
+<template id="tmpl-lh-metrics-toggle">
+  <div class="lh-metrics-toggle">
+    <input class="lh-metrics-toggle__input" type="checkbox" id="toggle-metric-descriptions" aria-label="Toggle the display of metric descriptions">
+    <label class="lh-metrics-toggle__label" for="toggle-metric-descriptions">
+      <div class="lh-metrics-toggle__icon lh-metrics-toggle__icon--less" aria-hidden="true">
+        <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+          <path class="lh-metrics-toggle__lines" d="M4 9h16v2H4zm0 4h10v2H4z"></path>
+        </svg>
+      </div>
+      <div class="lh-metrics-toggle__icon lh-metrics-toggle__icon--more" aria-hidden="true">
+        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+          <path class="lh-metrics-toggle__lines" d="M3 18h12v-2H3v2zM3 6v2h18V6H3zm0 7h18v-2H3v2z"></path>
+        </svg>
+      </div>
+    </label>
+  </div>
+</template>
+
+<!-- Lighthouse audit -->
+<template id="tmpl-lh-audit">
+  <div class="lh-audit">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div>
+</template>
+
+<!-- Lighthouse perf metric -->
+<template id="tmpl-lh-metric">
+  <div class="lh-metric">
+    <div class="lh-metric__innerwrap">
+      <span class="lh-metric__title"></span>
+      <div class="lh-metric__value"></div>
+      <div class="lh-metric__description"></div>
+    </div>
+  </div>
+</template>
+
+<!-- Lighthouse perf opportunity -->
+<template id="tmpl-lh-opportunity">
+  <div class="lh-audit lh-audit--load-opportunity">
+    <details class="lh-expandable-details">
+        <summary>
+          <div class="lh-audit__header lh-expandable-details__summary">
+            <div class="lh-load-opportunity__cols">
+              <div class="lh-load-opportunity__col lh-load-opportunity__col--one">
+                <span class="lh-audit__score-icon"></span>
+                <div class="lh-audit__title"></div>
+              </div>
+              <div class="lh-load-opportunity__col lh-load-opportunity__col--two">
+                <div class="lh-load-opportunity__sparkline">
+                  <div class="lh-sparkline"><div class="lh-sparkline__bar"></div></div>
+                </div>
+                <div class="lh-audit__display-text"></div>
+                <div class="lh-chevron-container"></div>
+              </div>
+            </div>
+          </div>
+        </summary>
+      <div class="lh-audit__description"></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div>
+</template>
+
+<!-- Lighthouse perf opportunity header -->
+<template id="tmpl-lh-opportunity-header">
+  <div class="lh-load-opportunity__header lh-load-opportunity__cols">
+    <div class="lh-load-opportunity__col lh-load-opportunity__col--one"></div>
+    <div class="lh-load-opportunity__col lh-load-opportunity__col--two"></div>
+  </div>
+</template>
+
+<!-- Lighthouse score container -->
+<template id="tmpl-lh-scores-wrapper">
+  <style>
+    .lh-scores-container {
+      display: flex;
+      flex-direction: column;
+      padding: var(--scores-container-padding);
+      position: relative;
+      width: 100%;
+    }
+
+    .lh-sticky-header {
+      --gauge-circle-size: 36px;
+      --plugin-badge-size: 18px;
+      --plugin-icon-size: 75%;
+      --gauge-wrapper-width: 60px;
+      --gauge-percentage-font-size: 13px;
+      position: fixed;
+      left: 0;
+      right: 0;
+      top: var(--topbar-height);
+      font-weight: 700;
+      display: none;
+      justify-content: center;
+      background-color: var(--sticky-header-background-color);
+      border-bottom: 1px solid var(--color-gray-200);
+      padding-top: var(--score-container-padding);
+      padding-bottom: 4px;
+      z-index: 1;
+      pointer-events: none;
+    }
+
+    .lh-devtools .lh-sticky-header {
+      /* The report within DevTools is placed in a container with overflow, which changes the placement of this header unless we change `position` to `sticky.` */
+      position: sticky;
+    }
+
+    .lh-sticky-header--visible {
+      display: grid;
+      grid-auto-flow: column;
+      pointer-events: auto;
+    }
+
+    /* Disable the gauge arc animation for the sticky header, so toggling display: none
+       does not play the animation. */
+    .lh-sticky-header .lh-gauge-arc {
+      animation: none;
+    }
+
+    .lh-sticky-header .lh-gauge__label {
+      display: none;
+    }
+
+    .lh-highlighter {
+      width: var(--gauge-wrapper-width);
+      height: 1px;
+      background-color: var(--highlighter-background-color);
+      /* Position at bottom of first gauge in sticky header. */
+      position: absolute;
+      grid-column: 1;
+      bottom: -1px;
+    }
+
+    .lh-gauge__wrapper:first-of-type {
+      contain: none;
+    }
+  </style>
+  <div class="lh-scores-wrapper">
+    <div class="lh-scores-container">
+      <div class="pyro">
+        <div class="before"></div>
+        <div class="after"></div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<!-- Lighthouse topbar -->
+<template id="tmpl-lh-topbar">
+  <style>
+    .lh-topbar {
+      position: sticky;
+      top: 0;
+      left: 0;
+      right: 0;
+      z-index: 1000;
+      display: flex;
+      align-items: center;
+      height: var(--topbar-height);
+      background-color: var(--topbar-background-color);
+      padding: var(--topbar-padding);
+    }
+
+    .lh-topbar__logo {
+      width: var(--topbar-logo-size);
+      height: var(--topbar-logo-size);
+      user-select: none;
+      flex: none;
+    }
+    .lh-topbar__logo .shape {
+      fill: var(--report-text-color);
+    }
+
+    .lh-topbar__url {
+      margin: var(--topbar-padding);
+      text-decoration: none;
+      color: var(--report-text-color);
+      text-overflow: ellipsis;
+      overflow: hidden;
+      white-space: nowrap;
+    }
+
+    .lh-tools {
+      margin-left: auto;
+      will-change: transform;
+      min-width: var(--report-icon-size);
+    }
+    .lh-tools__button {
+      width: var(--report-icon-size);
+      height: var(--report-icon-size);
+      cursor: pointer;
+      margin-right: 5px;
+      /* This is actually a button element, but we want to style it like a transparent div. */
+      display: flex;
+      background: none;
+      color: inherit;
+      border: none;
+      padding: 0;
+      font: inherit;
+      outline: inherit;
+    }
+    .lh-tools__button svg {
+      fill: var(--tools-icon-color);
+    }
+    .dark .lh-tools__button svg {
+      filter: invert(1);
+    }
+    .lh-tools__button.active + .lh-tools__dropdown {
+      opacity: 1;
+      clip: rect(-1px, 194px, 242px, -3px);
+      visibility: visible;
+    }
+    .lh-tools__dropdown {
+      position: absolute;
+      background-color: var(--report-background-color);
+      border: 1px solid var(--report-border-color);
+      border-radius: 3px;
+      padding: calc(var(--default-padding) / 2) 0;
+      cursor: pointer;
+      top: 36px;
+      right: 0;
+      box-shadow: 1px 1px 3px #ccc;
+      min-width: 125px;
+      clip: rect(0, 164px, 0, 0);
+      visibility: hidden;
+      opacity: 0;
+      transition: all 200ms cubic-bezier(0,0,0.2,1);
+    }
+    .lh-tools__dropdown a {
+      color: currentColor;
+      text-decoration: none;
+      white-space: nowrap;
+      padding: 0 12px;
+      line-height: 2;
+    }
+    .lh-tools__dropdown a:hover,
+    .lh-tools__dropdown a:focus {
+      background-color: var(--color-gray-200);
+      outline: none;
+    }
+    /* save-gist option hidden in report. */
+    .lh-tools__dropdown a[data-action='save-gist'] {
+      display: none;
+    }
+
+    @media screen and (max-width: 964px) {
+      .lh-tools__dropdown {
+        right: 0;
+        left: initial;
+      }
+    }
+    @media print {
+      .lh-topbar {
+        position: static;
+        margin-left: 0;
+      }
+
+      .lh-tools__dropdown {
+        display: none;
+      }
+    }
+  </style>
+
+  <div class="lh-topbar">
+    <!-- Lighthouse logo.  -->
+    <svg class="lh-topbar__logo" viewBox="0 0 24 24">
+      <defs>
+        <linearGradient x1="57.456%" y1="13.086%" x2="18.259%" y2="72.322%" id="lh-topbar__logo--a">
+          <stop stop-color="#262626" stop-opacity=".1" offset="0%"></stop>
+          <stop stop-color="#262626" stop-opacity="0" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="100%" y1="50%" x2="0%" y2="50%" id="lh-topbar__logo--b">
+          <stop stop-color="#262626" stop-opacity=".1" offset="0%"></stop>
+          <stop stop-color="#262626" stop-opacity="0" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="58.764%" y1="65.756%" x2="36.939%" y2="50.14%" id="lh-topbar__logo--c">
+          <stop stop-color="#262626" stop-opacity=".1" offset="0%"></stop>
+          <stop stop-color="#262626" stop-opacity="0" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="41.635%" y1="20.358%" x2="72.863%" y2="85.424%" id="lh-topbar__logo--d">
+          <stop stop-color="#FFF" stop-opacity=".1" offset="0%"></stop>
+          <stop stop-color="#FFF" stop-opacity="0" offset="100%"></stop>
+        </linearGradient>
+      </defs>
+      <g fill="none" fill-rule="evenodd">
+        <path d="M12 3l4.125 2.625v3.75H18v2.25h-1.688l1.5 9.375H6.188l1.5-9.375H6v-2.25h1.875V5.648L12 3zm2.201 9.938L9.54 14.633 9 18.028l5.625-2.062-.424-3.028zM12.005 5.67l-1.88 1.207v2.498h3.75V6.86l-1.87-1.19z" fill="#F44B21"></path>
+        <path fill="#FFF" d="M14.201 12.938L9.54 14.633 9 18.028l5.625-2.062z"></path>
+        <path d="M6 18c-2.042 0-3.95-.01-5.813 0l1.5-9.375h4.326L6 18z" fill="url(#lh-topbar__logo--a)" fill-rule="nonzero" transform="translate(6 3)"></path>
+        <path fill="#FFF176" fill-rule="nonzero" d="M13.875 9.375v-2.56l-1.87-1.19-1.88 1.207v2.543z"></path>
+        <path fill="url(#lh-topbar__logo--b)" fill-rule="nonzero" d="M0 6.375h6v2.25H0z" transform="translate(6 3)"></path>
+        <path fill="url(#lh-topbar__logo--c)" fill-rule="nonzero" d="M6 6.375H1.875v-3.75L6 0z" transform="translate(6 3)"></path>
+        <path fill="url(#lh-topbar__logo--d)" fill-rule="nonzero" d="M6 0l4.125 2.625v3.75H12v2.25h-1.688l1.5 9.375H.188l1.5-9.375H0v-2.25h1.875V2.648z" transform="translate(6 3)"></path>
+      </g>
+    </svg>
+
+    <a href="" class="lh-topbar__url" target="_blank" rel="noopener"></a>
+
+    <div class="lh-tools">
+      <button id="lh-tools-button" class="lh-tools__button" title="Tools menu" aria-label="Toggle report tools menu" aria-haspopup="menu" aria-expanded="false" aria-controls="lh-tools-dropdown">
+        <svg width="100%" height="100%" viewBox="0 0 24 24">
+            <path d="M0 0h24v24H0z" fill="none"></path>
+            <path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"></path>
+        </svg>
+      </button>
+      <div id="lh-tools-dropdown" role="menu" class="lh-tools__dropdown" aria-labelledby="lh-tools-button">
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--print" data-i18n="dropdownPrintSummary" data-action="print-summary"></a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--print" data-i18n="dropdownPrintExpanded" data-action="print-expanded"></a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--copy" data-i18n="dropdownCopyJSON" data-action="copy"></a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--download" data-i18n="dropdownSaveHTML" data-action="save-html"></a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--download" data-i18n="dropdownSaveJSON" data-action="save-json"></a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--open" data-i18n="dropdownViewer" data-action="open-viewer"></a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--open" data-i18n="dropdownSaveGist" data-action="save-gist"></a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--dark" data-i18n="dropdownDarkTheme" data-action="toggle-dark"></a>
+      </div>
+    </div>
+  </div>
+</template>
+
+<!-- Lighthouse header -->
+<template id="tmpl-lh-heading">
+  <style>
+    /* CSS Fireworks. Originally by Eddie Lin
+       https://codepen.io/paulirish/pen/yEVMbP
+    */
+    .pyro {
+      display: none;
+      z-index: 1;
+      pointer-events: none;
+    }
+    .score100 .pyro {
+      display: block;
+    }
+    .score100 .lh-lighthouse stop:first-child {
+      stop-color: hsla(200, 12%, 95%, 0);
+    }
+    .score100 .lh-lighthouse stop:last-child {
+      stop-color: hsla(65, 81%, 76%, 1);
+    }
+
+    .pyro > .before, .pyro > .after {
+      position: absolute;
+      width: 5px;
+      height: 5px;
+      border-radius: 2.5px;
+      box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff;
+      animation: 1s bang ease-out infinite backwards,  1s gravity ease-in infinite backwards,  5s position linear infinite backwards;
+      animation-delay: 1s, 1s, 1s;
+    }
+
+    .pyro > .after {
+      animation-delay: 2.25s, 2.25s, 2.25s;
+      animation-duration: 1.25s, 1.25s, 6.25s;
+    }
+    .fireworks-paused .pyro > div {
+      animation-play-state: paused;
+    }
+
+    @keyframes bang {
+      to {
+        box-shadow: -70px -115.67px #47ebbc, -28px -99.67px #eb47a4, 58px -31.67px #7eeb47, 13px -141.67px #eb47c5, -19px 6.33px #7347eb, -2px -74.67px #ebd247, 24px -151.67px #eb47e0, 57px -138.67px #b4eb47, -51px -104.67px #479eeb, 62px 8.33px #ebcf47, -93px 0.33px #d547eb, -16px -118.67px #47bfeb, 53px -84.67px #47eb83, 66px -57.67px #eb47bf, -93px -65.67px #91eb47, 30px -13.67px #86eb47, -2px -59.67px #83eb47, -44px 1.33px #eb47eb, 61px -58.67px #47eb73, 5px -22.67px #47e8eb, -66px -28.67px #ebe247, 42px -123.67px #eb5547, -75px 26.33px #7beb47, 15px -52.67px #a147eb, 36px -51.67px #eb8347, -38px -12.67px #eb5547, -46px -59.67px #47eb81, 78px -114.67px #eb47ba, 15px -156.67px #eb47bf, -36px 1.33px #eb4783, -72px -86.67px #eba147, 31px -46.67px #ebe247, -68px 29.33px #47e2eb, -55px 19.33px #ebe047, -56px 27.33px #4776eb, -13px -91.67px #eb5547, -47px -138.67px #47ebc7, -18px -96.67px #eb47ac, 11px -88.67px #4783eb, -67px -28.67px #47baeb, 53px 10.33px #ba47eb, 11px 19.33px #5247eb, -5px -11.67px #eb4791, -68px -4.67px #47eba7, 95px -37.67px #eb478b, -67px -162.67px #eb5d47, -54px -120.67px #eb6847, 49px -12.67px #ebe047, 88px 8.33px #47ebda, 97px 33.33px #eb8147, 6px -71.67px #ebbc47;
+      }
+    }
+    @keyframes gravity {
+      to {
+        transform: translateY(80px);
+        opacity: 0;
+      }
+    }
+    @keyframes position {
+      0%, 19.9% {
+        margin-top: 4%;
+        margin-left: 47%;
+      }
+      20%, 39.9% {
+        margin-top: 7%;
+        margin-left: 30%;
+      }
+      40%, 59.9% {
+        margin-top: 6%;
+        margin-left: 70%;
+      }
+      60%, 79.9% {
+        margin-top: 3%;
+        margin-left: 20%;
+      }
+      80%, 99.9% {
+        margin-top: 3%;
+        margin-left: 80%;
+      }
+    }
+  </style>
+
+  <div class="lh-header-container">
+    <div class="lh-scores-wrapper-placeholder"></div>
+  </div>
+</template>
+
+
+<!-- Lighthouse footer -->
+<template id="tmpl-lh-footer">
+  <style>
+    .lh-footer {
+      padding: var(--footer-padding-vertical) calc(var(--default-padding) * 2);
+      max-width: var(--report-width);
+      margin: 0 auto;
+    }
+    .lh-footer .lh-generated {
+      text-align: center;
+    }
+    .lh-env__title {
+      font-size: var(--env-item-font-size-big);
+      line-height: var(--env-item-line-height-big);
+      text-align: center;
+      padding: var(--score-container-padding);
+    }
+    .lh-env {
+      padding: var(--default-padding) 0;
+    }
+    .lh-env__items {
+      padding-left: 16px;
+      margin: 0 0 var(--audits-margin-bottom);
+      padding: 0;
+    }
+    .lh-env__items .lh-env__item:nth-child(2n) {
+      background-color: var(--env-item-background-color);
+    }
+    .lh-env__item {
+      display: flex;
+      padding: var(--env-item-padding);
+      position: relative;
+    }
+    span.lh-env__name {
+      font-weight: bold;
+      min-width: var(--env-name-min-width);
+      flex: 0.5;
+      padding: 0 8px;
+    }
+    span.lh-env__description {
+      text-align: left;
+      flex: 1;
+    }
+  </style>
+  <footer class="lh-footer">
+    <!-- TODO(i18n): localize runtime settings -->
+    <div class="lh-env">
+      <div class="lh-env__title">Runtime Settings</div>
+      <ul class="lh-env__items">
+        <template id="tmpl-lh-env__items">
+          <li class="lh-env__item">
+            <span class="lh-env__name"></span>
+            <span class="lh-env__description"></span>
+          </li>
+        </template>
+      </ul>
+    </div>
+
+    <div class="lh-generated">
+      <!-- TODO(i18n): use ICU replacement to replace version w/o concatenation. -->
+      Generated by <b>Lighthouse</b> <span class="lh-footer__version"></span> |
+      <a href="https://github.com/GoogleChrome/Lighthouse/issues" target="_blank" rel="noopener" class="lh-footer__version_issue">File an issue</a>
+    </div>
+  </footer>
+</template>
+
+<!-- Lighthouse score gauge -->
+<template id="tmpl-lh-gauge">
+  <a href="#" class="lh-gauge__wrapper">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage"></div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label"></div>
+  </a>
+</template>
+
+
+<!-- Lighthouse PWA badge gauge -->
+<template id="tmpl-lh-gauge--pwa">
+  <style>
+    .lh-gauge--pwa .lh-gauge--pwa__component {
+      display: none;
+    }
+    .lh-gauge--pwa__wrapper:not(.lh-badged--all) .lh-gauge--pwa__logo > path {
+      /* Gray logo unless everything is passing. */
+      fill: #B0B0B0;
+    }
+
+    .lh-gauge--pwa__disc {
+      fill: var(--color-gray-200);
+    }
+
+    .lh-gauge--pwa__logo--primary-color {
+      fill: #304FFE;
+    }
+
+    .lh-gauge--pwa__logo--secondary-color {
+      fill: #3D3D3D;
+    }
+    .dark .lh-gauge--pwa__logo--secondary-color {
+      fill: #D8B6B6;
+    }
+
+    /* No passing groups. */
+    .lh-gauge--pwa__wrapper:not([class*='lh-badged--']) .lh-gauge--pwa__na-line {
+      display: inline;
+    }
+    /* Just optimized. Same n/a line as no passing groups. */
+    .lh-gauge--pwa__wrapper.lh-badged--pwa-optimized:not(.lh-badged--pwa-installable) .lh-gauge--pwa__na-line {
+      display: inline;
+    }
+
+    /* Just installable. */
+    .lh-gauge--pwa__wrapper.lh-badged--pwa-installable .lh-gauge--pwa__installable-badge {
+      display: inline;
+    }
+
+    /* All passing groups. */
+    .lh-gauge--pwa__wrapper.lh-badged--all .lh-gauge--pwa__check-circle {
+      display: inline;
+    }
+  </style>
+
+  <a href="#" class="lh-gauge__wrapper lh-gauge--pwa__wrapper">
+    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" class="lh-gauge lh-gauge--pwa">
+      <defs>
+        <linearGradient id="lh-gauge--pwa__check-circle__gradient" x1="50%" y1="0%" x2="50%" y2="100%">
+          <stop stop-color="#00C852" offset="0%"></stop>
+          <stop stop-color="#009688" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient id="lh-gauge--pwa__installable__shadow-gradient" x1="76.056%" x2="24.111%" y1="82.995%" y2="24.735%">
+          <stop stop-color="#A5D6A7" offset="0%"></stop>
+          <stop stop-color="#80CBC4" offset="100%"></stop>
+        </linearGradient>
+
+        <g id="lh-gauge--pwa__installable-badge">
+          <circle fill="#FFFFFF" cx="10" cy="10" r="10"></circle>
+          <path fill="#009688" d="M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z"></path>
+        </g>
+      </defs>
+
+      <g stroke="none" fill-rule="nonzero">
+        <!-- Background and PWA logo (color by default) -->
+        <circle class="lh-gauge--pwa__disc" cx="30" cy="30" r="30"></circle>
+        <g class="lh-gauge--pwa__logo">
+          <path class="lh-gauge--pwa__logo--secondary-color" d="M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z"></path>
+          <path class="lh-gauge--pwa__logo--primary-color" d="M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z"></path>
+          <path class="lh-gauge--pwa__logo--secondary-color" fill-rule="nonzero" d="M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z"></path>
+        </g>
+
+        <!-- No badges. -->
+        <rect class="lh-gauge--pwa__component lh-gauge--pwa__na-line" fill="#FFFFFF" x="20" y="32" width="20" height="4" rx="2"></rect>
+
+        <!-- Just installable. -->
+        <g class="lh-gauge--pwa__component lh-gauge--pwa__installable-badge" transform="translate(20, 29)">
+          <path fill="url(#lh-gauge--pwa__installable__shadow-gradient)" d="M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z"></path>
+          <use href="#lh-gauge--pwa__installable-badge"></use>
+        </g>
+
+        <!-- Full PWA. -->
+        <g class="lh-gauge--pwa__component lh-gauge--pwa__check-circle" transform="translate(18, 28)">
+          <circle fill="#FFFFFF" cx="12" cy="12" r="12"></circle>
+          <path fill="url(#lh-gauge--pwa__check-circle__gradient)" d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path>
+        </g>
+      </g>
+    </svg>
+
+    <div class="lh-gauge__label"></div>
+  </a>
+</template>
+
+<!-- Lighthouse crtiical request chains component -->
+<template id="tmpl-lh-crc">
+  <div class="lh-crc-container">
+    <style>
+      .lh-crc .tree-marker {
+        width: 12px;
+        height: 26px;
+        display: block;
+        float: left;
+        background-position: top left;
+      }
+      .lh-crc .horiz-down {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><g fill="%23D8D8D8" fill-rule="evenodd"><path d="M16 12v2H-2v-2z"/><path d="M9 12v14H7V12z"/></g></svg>');
+      }
+      .lh-crc .right {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M16 12v2H0v-2z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .up-right {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v14H7zm2 12h7v2H9z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .vert-right {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v27H7zm2 12h7v2H9z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .vert {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v26H7z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .crc-tree {
+        font-size: 14px;
+        width: 100%;
+        overflow-x: auto;
+      }
+      .lh-crc .crc-node {
+        height: 26px;
+        line-height: 26px;
+        white-space: nowrap;
+      }
+      .lh-crc .crc-node__tree-value {
+        margin-left: 10px;
+      }
+      .lh-crc .crc-node__tree-value div {
+        display: inline;
+      }
+      .lh-crc .crc-node__chain-duration {
+        font-weight: 700;
+      }
+      .lh-crc .crc-initial-nav {
+        color: #595959;
+        font-style: italic;
+      }
+      .lh-crc__summary-value {
+        margin-bottom: 10px;
+      }
+    </style>
+    <div>
+      <div class="lh-crc__summary-value">
+        <span class="lh-crc__longest_duration_label"></span> <b class="lh-crc__longest_duration"></b>
+      </div>
+    </div>
+    <div class="lh-crc">
+      <div class="crc-initial-nav"></div>
+      <!-- stamp for each chain -->
+      <template id="tmpl-lh-crc__chains">
+        <div class="crc-node">
+          <span class="crc-node__tree-marker">
+
+          </span>
+          <span class="crc-node__tree-value">
+
+          </span>
+        </div>
+      </template>
+    </div>
+  </div>
+</template>
+
+<template id="tmpl-lh-3p-filter">
+  <style>
+    .lh-3p-filter {
+      background-color: var(--table-higlight-background-color);
+      color: var(--color-gray-600);
+      float: right;
+      padding: 6px;
+    }
+    .lh-3p-filter-label, .lh-3p-filter-input {
+      vertical-align: middle;
+      user-select: none;
+    }
+    .lh-3p-filter-input:disabled + .lh-3p-ui-string {
+      text-decoration: line-through;
+    }
+  </style>
+  <div class="lh-3p-filter">
+    <label class="lh-3p-filter-label">
+      <input type="checkbox" class="lh-3p-filter-input" checked="">
+      <span class="lh-3p-ui-string">Show 3rd party resources</span> (<span class="lh-3p-filter-count"></span>)
+    </label>
+  </div>
+</template>
+
+<!-- Lighthouse snippet component -->
+<template id="tmpl-lh-snippet">
+    <div class="lh-snippet">
+      <style>
+          :root {
+            --snippet-highlight-light: #fbf1f2;
+            --snippet-highlight-dark: #ffd6d8;
+          }
+
+         .lh-snippet__header {
+          position: relative;
+          overflow: hidden;
+          padding: 10px;
+          border-bottom: none;
+          color: var(--snippet-color);
+          background-color: var(--snippet-background-color);
+          border: 1px solid var(--report-border-color-secondary);
+        }
+        .lh-snippet__title {
+          font-weight: bold;
+          float: left;
+        }
+        .lh-snippet__node {
+          float: left;
+          margin-left: 4px;
+        }
+        .lh-snippet__toggle-expand {
+          padding: 1px 7px;
+          margin-top: -1px;
+          margin-right: -7px;
+          float: right;
+          background: transparent;
+          border: none;
+          cursor: pointer;
+          font-size: 14px;
+          color: #0c50c7;
+        }
+
+        .lh-snippet__snippet {
+          overflow: auto;
+          border: 1px solid var(--report-border-color-secondary);
+        }
+        /* Container needed so that all children grow to the width of the scroll container */
+        .lh-snippet__snippet-inner {
+          display: inline-block;
+          min-width: 100%;
+        }
+
+        .lh-snippet:not(.lh-snippet--expanded) .lh-snippet__show-if-expanded {
+          display: none;
+        }
+        .lh-snippet.lh-snippet--expanded .lh-snippet__show-if-collapsed {
+          display: none;
+        }
+
+        .lh-snippet__line {
+          background: white;
+          white-space: pre;
+          display: flex;
+        }
+        .lh-snippet__line:not(.lh-snippet__line--message):first-child {
+          padding-top: 4px;
+        }
+        .lh-snippet__line:not(.lh-snippet__line--message):last-child {
+          padding-bottom: 4px;
+        }
+        .lh-snippet__line--content-highlighted {
+          background: var(--snippet-highlight-dark);
+        }
+        .lh-snippet__line--message {
+          background: var(--snippet-highlight-light);
+        }
+        .lh-snippet__line--message .lh-snippet__line-number {
+          padding-top: 10px;
+          padding-bottom: 10px;
+        }
+        .lh-snippet__line--message code {
+          padding: 10px;
+          padding-left: 5px;
+          color: var(--color-fail);
+          font-family: var(--report-font-family);
+        }
+        .lh-snippet__line--message code {
+          white-space: normal;
+        }
+        .lh-snippet__line-icon {
+          padding-top: 10px;
+          display: none;
+        }
+        .lh-snippet__line--message .lh-snippet__line-icon {
+          display: block;
+        }
+        .lh-snippet__line-icon:before {
+          content: "";
+          display: inline-block;
+          vertical-align: middle;
+          margin-right: 4px;
+          width: var(--score-icon-size);
+          height: var(--score-icon-size);
+          background-image: var(--fail-icon-url);
+        }
+        .lh-snippet__line-number {
+          flex-shrink: 0;
+          width: 40px;
+          text-align: right;
+          font-family: monospace;
+          padding-right: 5px;
+          margin-right: 5px;
+          color: var(--color-gray-600);
+          user-select: none;
+        }
+      </style>
+      <template id="tmpl-lh-snippet__header">
+        <div class="lh-snippet__header">
+          <div class="lh-snippet__title"></div>
+          <div class="lh-snippet__node"></div>
+          <button class="lh-snippet__toggle-expand">
+            <span class="lh-snippet__btn-label-collapse lh-snippet__show-if-expanded"></span>
+            <span class="lh-snippet__btn-label-expand lh-snippet__show-if-collapsed"></span>
+          </button>
+        </div>
+      </template>
+      <template id="tmpl-lh-snippet__content">
+        <div class="lh-snippet__snippet">
+          <div class="lh-snippet__snippet-inner"></div>
+        </div>
+      </template>
+      <template id="tmpl-lh-snippet__line">
+          <div class="lh-snippet__line">
+            <div class="lh-snippet__line-number"></div>
+            <div class="lh-snippet__line-icon"></div>
+            <code></code>
+          </div>
+        </template>
+    </div>
+  </template>
+
+
+<!-- Lighthouse element screenshot -->
+<template id="tmpl-lh-element-screenshot">
+  <div class="lh-element-screenshot">
+    <div class="lh-element-screenshot__content">
+      <div class="lh-element-screenshot__mask">
+        <svg xmlns="http://www.w3.org/2000/svg" height="0" width="0">
+          <defs>
+            <clipPath clipPathUnits="objectBoundingBox"></clipPath>
+            <!-- clipPath filled by ElementScreenshotRenderer.renderClipPath -->
+          </defs>
+        </svg>
+      </div>
+      <div class="lh-element-screenshot__image"></div>
+      <div class="lh-element-screenshot__element-marker"></div>
+    </div>
+  </div>
+</template>
+
+</div>
+
+  <main>
+  <style>
+    .lh-topbar {
+      position: sticky;
+      top: 0;
+      left: 0;
+      right: 0;
+      z-index: 1000;
+      display: flex;
+      align-items: center;
+      height: var(--topbar-height);
+      background-color: var(--topbar-background-color);
+      padding: var(--topbar-padding);
+    }
+
+    .lh-topbar__logo {
+      width: var(--topbar-logo-size);
+      height: var(--topbar-logo-size);
+      user-select: none;
+      flex: none;
+    }
+    .lh-topbar__logo .shape {
+      fill: var(--report-text-color);
+    }
+
+    .lh-topbar__url {
+      margin: var(--topbar-padding);
+      text-decoration: none;
+      color: var(--report-text-color);
+      text-overflow: ellipsis;
+      overflow: hidden;
+      white-space: nowrap;
+    }
+
+    .lh-tools {
+      margin-left: auto;
+      will-change: transform;
+      min-width: var(--report-icon-size);
+    }
+    .lh-tools__button {
+      width: var(--report-icon-size);
+      height: var(--report-icon-size);
+      cursor: pointer;
+      margin-right: 5px;
+      /* This is actually a button element, but we want to style it like a transparent div. */
+      display: flex;
+      background: none;
+      color: inherit;
+      border: none;
+      padding: 0;
+      font: inherit;
+      outline: inherit;
+    }
+    .lh-tools__button svg {
+      fill: var(--tools-icon-color);
+    }
+    .dark .lh-tools__button svg {
+      filter: invert(1);
+    }
+    .lh-tools__button.active + .lh-tools__dropdown {
+      opacity: 1;
+      clip: rect(-1px, 194px, 242px, -3px);
+      visibility: visible;
+    }
+    .lh-tools__dropdown {
+      position: absolute;
+      background-color: var(--report-background-color);
+      border: 1px solid var(--report-border-color);
+      border-radius: 3px;
+      padding: calc(var(--default-padding) / 2) 0;
+      cursor: pointer;
+      top: 36px;
+      right: 0;
+      box-shadow: 1px 1px 3px #ccc;
+      min-width: 125px;
+      clip: rect(0, 164px, 0, 0);
+      visibility: hidden;
+      opacity: 0;
+      transition: all 200ms cubic-bezier(0,0,0.2,1);
+    }
+    .lh-tools__dropdown a {
+      color: currentColor;
+      text-decoration: none;
+      white-space: nowrap;
+      padding: 0 12px;
+      line-height: 2;
+    }
+    .lh-tools__dropdown a:hover,
+    .lh-tools__dropdown a:focus {
+      background-color: var(--color-gray-200);
+      outline: none;
+    }
+    /* save-gist option hidden in report. */
+    .lh-tools__dropdown a[data-action='save-gist'] {
+      display: none;
+    }
+
+    @media screen and (max-width: 964px) {
+      .lh-tools__dropdown {
+        right: 0;
+        left: initial;
+      }
+    }
+    @media print {
+      .lh-topbar {
+        position: static;
+        margin-left: 0;
+      }
+
+      .lh-tools__dropdown {
+        display: none;
+      }
+    }
+  </style>
+
+  <div class="lh-topbar">
+    <!-- Lighthouse logo.  -->
+    <svg class="lh-topbar__logo" viewBox="0 0 24 24">
+      <defs>
+        <linearGradient x1="57.456%" y1="13.086%" x2="18.259%" y2="72.322%" id="lh-topbar__logo--a">
+          <stop stop-color="#262626" stop-opacity=".1" offset="0%"></stop>
+          <stop stop-color="#262626" stop-opacity="0" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="100%" y1="50%" x2="0%" y2="50%" id="lh-topbar__logo--b">
+          <stop stop-color="#262626" stop-opacity=".1" offset="0%"></stop>
+          <stop stop-color="#262626" stop-opacity="0" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="58.764%" y1="65.756%" x2="36.939%" y2="50.14%" id="lh-topbar__logo--c">
+          <stop stop-color="#262626" stop-opacity=".1" offset="0%"></stop>
+          <stop stop-color="#262626" stop-opacity="0" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="41.635%" y1="20.358%" x2="72.863%" y2="85.424%" id="lh-topbar__logo--d">
+          <stop stop-color="#FFF" stop-opacity=".1" offset="0%"></stop>
+          <stop stop-color="#FFF" stop-opacity="0" offset="100%"></stop>
+        </linearGradient>
+      </defs>
+      <g fill="none" fill-rule="evenodd">
+        <path d="M12 3l4.125 2.625v3.75H18v2.25h-1.688l1.5 9.375H6.188l1.5-9.375H6v-2.25h1.875V5.648L12 3zm2.201 9.938L9.54 14.633 9 18.028l5.625-2.062-.424-3.028zM12.005 5.67l-1.88 1.207v2.498h3.75V6.86l-1.87-1.19z" fill="#F44B21"></path>
+        <path fill="#FFF" d="M14.201 12.938L9.54 14.633 9 18.028l5.625-2.062z"></path>
+        <path d="M6 18c-2.042 0-3.95-.01-5.813 0l1.5-9.375h4.326L6 18z" fill="url(#lh-topbar__logo--a)" fill-rule="nonzero" transform="translate(6 3)"></path>
+        <path fill="#FFF176" fill-rule="nonzero" d="M13.875 9.375v-2.56l-1.87-1.19-1.88 1.207v2.543z"></path>
+        <path fill="url(#lh-topbar__logo--b)" fill-rule="nonzero" d="M0 6.375h6v2.25H0z" transform="translate(6 3)"></path>
+        <path fill="url(#lh-topbar__logo--c)" fill-rule="nonzero" d="M6 6.375H1.875v-3.75L6 0z" transform="translate(6 3)"></path>
+        <path fill="url(#lh-topbar__logo--d)" fill-rule="nonzero" d="M6 0l4.125 2.625v3.75H12v2.25h-1.688l1.5 9.375H.188l1.5-9.375H0v-2.25h1.875V2.648z" transform="translate(6 3)"></path>
+      </g>
+    </svg>
+
+    <a href="http://localhost:8008/congo/samples/emoji/" class="lh-topbar__url" target="_blank" rel="noopener" title="http://localhost:8008/congo/samples/emoji/">http://localhost:8008/congo/samples/emoji/</a>
+
+    <div class="lh-tools">
+      <button id="lh-tools-button" class="lh-tools__button" title="Tools menu" aria-label="Toggle report tools menu" aria-haspopup="menu" aria-expanded="false" aria-controls="lh-tools-dropdown">
+        <svg width="100%" height="100%" viewBox="0 0 24 24">
+            <path d="M0 0h24v24H0z" fill="none"></path>
+            <path d="M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"></path>
+        </svg>
+      </button>
+      <div id="lh-tools-dropdown" role="menu" class="lh-tools__dropdown" aria-labelledby="lh-tools-button">
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--print" data-i18n="dropdownPrintSummary" data-action="print-summary">Print Summary</a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--print" data-i18n="dropdownPrintExpanded" data-action="print-expanded">Print Expanded</a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--copy" data-i18n="dropdownCopyJSON" data-action="copy">Copy JSON</a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--download" data-i18n="dropdownSaveHTML" data-action="save-html">Save as HTML</a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--download" data-i18n="dropdownSaveJSON" data-action="save-json">Save as JSON</a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--open" data-i18n="dropdownViewer" data-action="open-viewer">Open in Viewer</a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--open" data-i18n="dropdownSaveGist" data-action="save-gist">Save as Gist</a>
+        <a role="menuitem" tabindex="-1" href="#" class="report-icon report-icon--dark" data-i18n="dropdownDarkTheme" data-action="toggle-dark">Toggle Dark Theme</a>
+      </div>
+    </div>
+  </div>
+<div class="lh-container"><div class="lh-sticky-header">
+  <a href="#performance" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">Performance</div>
+  </a>
+
+  <a href="#accessibility" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">Accessibility</div>
+  </a>
+
+  <a href="#best-practices" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">Best Practices</div>
+  </a>
+
+  <a href="#seo" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">SEO</div>
+  </a>
+
+  
+
+  <a href="#pwa" class="lh-gauge__wrapper lh-gauge--pwa__wrapper lh-badged--pwa-installable" title="Installable: 1/1, PWA Optimized: 6/8">
+    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" class="lh-gauge lh-gauge--pwa">
+      <defs>
+        <linearGradient id="lh-gauge--pwa__check-circle__gradient-1" x1="50%" y1="0%" x2="50%" y2="100%">
+          <stop stop-color="#00C852" offset="0%"></stop>
+          <stop stop-color="#009688" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient id="lh-gauge--pwa__installable__shadow-gradient-1" x1="76.056%" x2="24.111%" y1="82.995%" y2="24.735%">
+          <stop stop-color="#A5D6A7" offset="0%"></stop>
+          <stop stop-color="#80CBC4" offset="100%"></stop>
+        </linearGradient>
+
+        <g id="lh-gauge--pwa__installable-badge-1">
+          <circle fill="#FFFFFF" cx="10" cy="10" r="10"></circle>
+          <path fill="#009688" d="M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z"></path>
+        </g>
+      </defs>
+
+      <g stroke="none" fill-rule="nonzero">
+        <!-- Background and PWA logo (color by default) -->
+        <circle class="lh-gauge--pwa__disc" cx="30" cy="30" r="30"></circle>
+        <g class="lh-gauge--pwa__logo">
+          <path class="lh-gauge--pwa__logo--secondary-color" d="M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z"></path>
+          <path class="lh-gauge--pwa__logo--primary-color" d="M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z"></path>
+          <path class="lh-gauge--pwa__logo--secondary-color" fill-rule="nonzero" d="M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z"></path>
+        </g>
+
+        <!-- No badges. -->
+        <rect class="lh-gauge--pwa__component lh-gauge--pwa__na-line" fill="#FFFFFF" x="20" y="32" width="20" height="4" rx="2"></rect>
+
+        <!-- Just installable. -->
+        <g class="lh-gauge--pwa__component lh-gauge--pwa__installable-badge" transform="translate(20, 29)">
+          <path fill="url(#lh-gauge--pwa__installable__shadow-gradient-1)" d="M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z"></path>
+          <use href="#lh-gauge--pwa__installable-badge-1"></use>
+        </g>
+
+        <!-- Full PWA. -->
+        <g class="lh-gauge--pwa__component lh-gauge--pwa__check-circle" transform="translate(18, 28)">
+          <circle fill="#FFFFFF" cx="12" cy="12" r="12"></circle>
+          <path fill="url(#lh-gauge--pwa__check-circle__gradient-1)" d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path>
+        </g>
+      </g>
+    </svg>
+
+    <div class="lh-gauge__label">Progressive Web App</div>
+  </a>
+<div class="lh-highlighter" style="transform: translate(0px);"></div></div><div>
+  <style>
+    /* CSS Fireworks. Originally by Eddie Lin
+       https://codepen.io/paulirish/pen/yEVMbP
+    */
+    .pyro {
+      display: none;
+      z-index: 1;
+      pointer-events: none;
+    }
+    .score100 .pyro {
+      display: block;
+    }
+    .score100 .lh-lighthouse stop:first-child {
+      stop-color: hsla(200, 12%, 95%, 0);
+    }
+    .score100 .lh-lighthouse stop:last-child {
+      stop-color: hsla(65, 81%, 76%, 1);
+    }
+
+    .pyro > .before, .pyro > .after {
+      position: absolute;
+      width: 5px;
+      height: 5px;
+      border-radius: 2.5px;
+      box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff;
+      animation: 1s bang ease-out infinite backwards,  1s gravity ease-in infinite backwards,  5s position linear infinite backwards;
+      animation-delay: 1s, 1s, 1s;
+    }
+
+    .pyro > .after {
+      animation-delay: 2.25s, 2.25s, 2.25s;
+      animation-duration: 1.25s, 1.25s, 6.25s;
+    }
+    .fireworks-paused .pyro > div {
+      animation-play-state: paused;
+    }
+
+    @keyframes bang {
+      to {
+        box-shadow: -70px -115.67px #47ebbc, -28px -99.67px #eb47a4, 58px -31.67px #7eeb47, 13px -141.67px #eb47c5, -19px 6.33px #7347eb, -2px -74.67px #ebd247, 24px -151.67px #eb47e0, 57px -138.67px #b4eb47, -51px -104.67px #479eeb, 62px 8.33px #ebcf47, -93px 0.33px #d547eb, -16px -118.67px #47bfeb, 53px -84.67px #47eb83, 66px -57.67px #eb47bf, -93px -65.67px #91eb47, 30px -13.67px #86eb47, -2px -59.67px #83eb47, -44px 1.33px #eb47eb, 61px -58.67px #47eb73, 5px -22.67px #47e8eb, -66px -28.67px #ebe247, 42px -123.67px #eb5547, -75px 26.33px #7beb47, 15px -52.67px #a147eb, 36px -51.67px #eb8347, -38px -12.67px #eb5547, -46px -59.67px #47eb81, 78px -114.67px #eb47ba, 15px -156.67px #eb47bf, -36px 1.33px #eb4783, -72px -86.67px #eba147, 31px -46.67px #ebe247, -68px 29.33px #47e2eb, -55px 19.33px #ebe047, -56px 27.33px #4776eb, -13px -91.67px #eb5547, -47px -138.67px #47ebc7, -18px -96.67px #eb47ac, 11px -88.67px #4783eb, -67px -28.67px #47baeb, 53px 10.33px #ba47eb, 11px 19.33px #5247eb, -5px -11.67px #eb4791, -68px -4.67px #47eba7, 95px -37.67px #eb478b, -67px -162.67px #eb5d47, -54px -120.67px #eb6847, 49px -12.67px #ebe047, 88px 8.33px #47ebda, 97px 33.33px #eb8147, 6px -71.67px #ebbc47;
+      }
+    }
+    @keyframes gravity {
+      to {
+        transform: translateY(80px);
+        opacity: 0;
+      }
+    }
+    @keyframes position {
+      0%, 19.9% {
+        margin-top: 4%;
+        margin-left: 47%;
+      }
+      20%, 39.9% {
+        margin-top: 7%;
+        margin-left: 30%;
+      }
+      40%, 59.9% {
+        margin-top: 6%;
+        margin-left: 70%;
+      }
+      60%, 79.9% {
+        margin-top: 3%;
+        margin-left: 20%;
+      }
+      80%, 99.9% {
+        margin-top: 3%;
+        margin-left: 80%;
+      }
+    }
+  </style>
+
+  <div class="lh-header-container">
+    
+  <style>
+    .lh-scores-container {
+      display: flex;
+      flex-direction: column;
+      padding: var(--scores-container-padding);
+      position: relative;
+      width: 100%;
+    }
+
+    .lh-sticky-header {
+      --gauge-circle-size: 36px;
+      --plugin-badge-size: 18px;
+      --plugin-icon-size: 75%;
+      --gauge-wrapper-width: 60px;
+      --gauge-percentage-font-size: 13px;
+      position: fixed;
+      left: 0;
+      right: 0;
+      top: var(--topbar-height);
+      font-weight: 700;
+      display: none;
+      justify-content: center;
+      background-color: var(--sticky-header-background-color);
+      border-bottom: 1px solid var(--color-gray-200);
+      padding-top: var(--score-container-padding);
+      padding-bottom: 4px;
+      z-index: 1;
+      pointer-events: none;
+    }
+
+    .lh-devtools .lh-sticky-header {
+      /* The report within DevTools is placed in a container with overflow, which changes the placement of this header unless we change `position` to `sticky.` */
+      position: sticky;
+    }
+
+    .lh-sticky-header--visible {
+      display: grid;
+      grid-auto-flow: column;
+      pointer-events: auto;
+    }
+
+    /* Disable the gauge arc animation for the sticky header, so toggling display: none
+       does not play the animation. */
+    .lh-sticky-header .lh-gauge-arc {
+      animation: none;
+    }
+
+    .lh-sticky-header .lh-gauge__label {
+      display: none;
+    }
+
+    .lh-highlighter {
+      width: var(--gauge-wrapper-width);
+      height: 1px;
+      background-color: var(--highlighter-background-color);
+      /* Position at bottom of first gauge in sticky header. */
+      position: absolute;
+      grid-column: 1;
+      bottom: -1px;
+    }
+
+    .lh-gauge__wrapper:first-of-type {
+      contain: none;
+    }
+  </style>
+  <div class="lh-scores-wrapper">
+    <div class="lh-scores-container score100">
+      <div class="pyro">
+        <div class="before"></div>
+        <div class="after"></div>
+      </div>
+    <div class="lh-scores-header">
+  <a href="#performance" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">Performance</div>
+  </a>
+
+  <a href="#accessibility" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">Accessibility</div>
+  </a>
+
+  <a href="#best-practices" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">Best Practices</div>
+  </a>
+
+  <a href="#seo" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">SEO</div>
+  </a>
+
+  <style>
+    .lh-gauge--pwa .lh-gauge--pwa__component {
+      display: none;
+    }
+    .lh-gauge--pwa__wrapper:not(.lh-badged--all) .lh-gauge--pwa__logo > path {
+      /* Gray logo unless everything is passing. */
+      fill: #B0B0B0;
+    }
+
+    .lh-gauge--pwa__disc {
+      fill: var(--color-gray-200);
+    }
+
+    .lh-gauge--pwa__logo--primary-color {
+      fill: #304FFE;
+    }
+
+    .lh-gauge--pwa__logo--secondary-color {
+      fill: #3D3D3D;
+    }
+    .dark .lh-gauge--pwa__logo--secondary-color {
+      fill: #D8B6B6;
+    }
+
+    /* No passing groups. */
+    .lh-gauge--pwa__wrapper:not([class*='lh-badged--']) .lh-gauge--pwa__na-line {
+      display: inline;
+    }
+    /* Just optimized. Same n/a line as no passing groups. */
+    .lh-gauge--pwa__wrapper.lh-badged--pwa-optimized:not(.lh-badged--pwa-installable) .lh-gauge--pwa__na-line {
+      display: inline;
+    }
+
+    /* Just installable. */
+    .lh-gauge--pwa__wrapper.lh-badged--pwa-installable .lh-gauge--pwa__installable-badge {
+      display: inline;
+    }
+
+    /* All passing groups. */
+    .lh-gauge--pwa__wrapper.lh-badged--all .lh-gauge--pwa__check-circle {
+      display: inline;
+    }
+  </style>
+
+  <a href="#pwa" class="lh-gauge__wrapper lh-gauge--pwa__wrapper lh-badged--pwa-installable" title="Installable: 1/1, PWA Optimized: 6/8">
+    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" class="lh-gauge lh-gauge--pwa">
+      <defs>
+        <linearGradient id="lh-gauge--pwa__check-circle__gradient-0" x1="50%" y1="0%" x2="50%" y2="100%">
+          <stop stop-color="#00C852" offset="0%"></stop>
+          <stop stop-color="#009688" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient id="lh-gauge--pwa__installable__shadow-gradient-0" x1="76.056%" x2="24.111%" y1="82.995%" y2="24.735%">
+          <stop stop-color="#A5D6A7" offset="0%"></stop>
+          <stop stop-color="#80CBC4" offset="100%"></stop>
+        </linearGradient>
+
+        <g id="lh-gauge--pwa__installable-badge-0">
+          <circle fill="#FFFFFF" cx="10" cy="10" r="10"></circle>
+          <path fill="#009688" d="M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z"></path>
+        </g>
+      </defs>
+
+      <g stroke="none" fill-rule="nonzero">
+        <!-- Background and PWA logo (color by default) -->
+        <circle class="lh-gauge--pwa__disc" cx="30" cy="30" r="30"></circle>
+        <g class="lh-gauge--pwa__logo">
+          <path class="lh-gauge--pwa__logo--secondary-color" d="M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z"></path>
+          <path class="lh-gauge--pwa__logo--primary-color" d="M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z"></path>
+          <path class="lh-gauge--pwa__logo--secondary-color" fill-rule="nonzero" d="M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z"></path>
+        </g>
+
+        <!-- No badges. -->
+        <rect class="lh-gauge--pwa__component lh-gauge--pwa__na-line" fill="#FFFFFF" x="20" y="32" width="20" height="4" rx="2"></rect>
+
+        <!-- Just installable. -->
+        <g class="lh-gauge--pwa__component lh-gauge--pwa__installable-badge" transform="translate(20, 29)">
+          <path fill="url(#lh-gauge--pwa__installable__shadow-gradient-0)" d="M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z"></path>
+          <use href="#lh-gauge--pwa__installable-badge-0"></use>
+        </g>
+
+        <!-- Full PWA. -->
+        <g class="lh-gauge--pwa__component lh-gauge--pwa__check-circle" transform="translate(18, 28)">
+          <circle fill="#FFFFFF" cx="12" cy="12" r="12"></circle>
+          <path fill="url(#lh-gauge--pwa__check-circle__gradient-0)" d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path>
+        </g>
+      </g>
+    </svg>
+
+    <div class="lh-gauge__label">Progressive Web App</div>
+  </a>
+</div>
+  <div class="lh-scorescale">
+      <span class="lh-scorescale-range lh-scorescale-range--fail">0–49</span>
+      <span class="lh-scorescale-range lh-scorescale-range--average">50–89</span>
+      <span class="lh-scorescale-range lh-scorescale-range--pass">90–100</span>
+  </div>
+</div>
+  </div>
+
+  </div>
+</div><div class="lh-report"><div></div><div class="lh-categories"><div class="lh-category-wrapper"><div class="lh-category"><span class="lh-permalink" id="performance"></span>
+  <div class="lh-category-header">
+    <div class="lh-score__gauge" role="heading" aria-level="2">
+  <a href="#performance" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">Performance</div>
+  </a>
+</div>
+    <div class="lh-category-header__description"></div>
+  </div>
+<div class="lh-audit-group lh-audit-group--metrics"><div class="lh-audit-group__header"><span class="lh-audit-group__title">Metrics</span></div>
+    <input class="lh-metrics-toggle__input" type="checkbox" id="toggle-metric-descriptions" aria-label="Toggle the display of metric descriptions">
+    <label class="lh-metrics-toggle__label" for="toggle-metric-descriptions">
+      <div class="lh-metrics-toggle__icon lh-metrics-toggle__icon--less" aria-hidden="true">
+        <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+          <path class="lh-metrics-toggle__lines" d="M4 9h16v2H4zm0 4h10v2H4z"></path>
+        </svg>
+      </div>
+      <div class="lh-metrics-toggle__icon lh-metrics-toggle__icon--more" aria-hidden="true">
+        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+          <path class="lh-metrics-toggle__lines" d="M3 18h12v-2H3v2zM3 6v2h18V6H3zm0 7h18v-2H3v2z"></path>
+        </svg>
+      </div>
+    </label>
+  <div class="lh-metrics-container"><div class="lh-metric lh-metric--pass" id="first-contentful-paint">
+    <div class="lh-metric__innerwrap">
+      <span class="lh-metric__title">First Contentful Paint</span>
+      <div class="lh-metric__value">1.4&nbsp;s</div>
+      <div class="lh-metric__description"><span>First Contentful Paint marks the time at which the first text or image is painted. <a rel="noopener" target="_blank" href="https://web.dev/first-contentful-paint/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+    </div>
+  </div><div class="lh-metric lh-metric--pass" id="speed-index">
+    <div class="lh-metric__innerwrap">
+      <span class="lh-metric__title">Speed Index</span>
+      <div class="lh-metric__value">1.4&nbsp;s</div>
+      <div class="lh-metric__description"><span>Speed Index shows how quickly the contents of a page are visibly populated. <a rel="noopener" target="_blank" href="https://web.dev/speed-index/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+    </div>
+  </div><div class="lh-metric lh-metric--pass" id="largest-contentful-paint">
+    <div class="lh-metric__innerwrap">
+      <span class="lh-metric__title">Largest Contentful Paint</span>
+      <div class="lh-metric__value">1.5&nbsp;s</div>
+      <div class="lh-metric__description"><span>Largest Contentful Paint marks the time at which the largest text or image is painted. <a rel="noopener" target="_blank" href="https://web.dev/lighthouse-largest-contentful-paint/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a></span></div>
+    </div>
+  </div><div class="lh-metric lh-metric--pass" id="interactive">
+    <div class="lh-metric__innerwrap">
+      <span class="lh-metric__title">Time to Interactive</span>
+      <div class="lh-metric__value">1.4&nbsp;s</div>
+      <div class="lh-metric__description"><span>Time to interactive is the amount of time it takes for the page to become fully interactive. <a rel="noopener" target="_blank" href="https://web.dev/interactive/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+    </div>
+  </div><div class="lh-metric lh-metric--pass" id="total-blocking-time">
+    <div class="lh-metric__innerwrap">
+      <span class="lh-metric__title">Total Blocking Time</span>
+      <div class="lh-metric__value">10&nbsp;ms</div>
+      <div class="lh-metric__description"><span>Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. <a rel="noopener" target="_blank" href="https://web.dev/lighthouse-total-blocking-time/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+    </div>
+  </div><div class="lh-metric lh-metric--pass" id="cumulative-layout-shift">
+    <div class="lh-metric__innerwrap">
+      <span class="lh-metric__title">Cumulative Layout Shift</span>
+      <div class="lh-metric__value">0</div>
+      <div class="lh-metric__description"><span>Cumulative Layout Shift measures the movement of visible elements within the viewport. <a rel="noopener" target="_blank" href="https://web.dev/cls/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+    </div>
+  </div></div><div class="lh-metrics__disclaimer"><span>Values are estimated and may vary. The <a rel="noopener" target="_blank" href="https://web.dev/performance-scoring/?utm_source=lighthouse&amp;utm_medium=cli">performance score is calculated</a> directly from these metrics.</span><a class="lh-calclink" target="_blank" href="https://googlechrome.github.io/lighthouse/scorecalc/#FCP=1369&amp;SI=1369&amp;LCP=1500&amp;TTI=1400&amp;TBT=6&amp;CLS=0&amp;FMP=1369&amp;device=mobile&amp;version=8.0.0">See calculator.</a></div><div class="lh-buttons"><button class="lh-button report-icon report-icon--treemap">View Treemap</button></div></div><div class="lh-filmstrip-container" id="screenshot-thumbnails"><div class="lh-filmstrip"><div class="lh-filmstrip__frame"><img class="lh-filmstrip__thumbnail" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRQBAwQEBQQFCQUFCRQNCw0UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIANUAeAMBEQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AP1ToAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgD//Z" alt="Screenshot"></div><div class="lh-filmstrip__frame"><img class="lh-filmstrip__thumbnail" src="data:image/jpeg;base64,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" alt="Screenshot"></div><div class="lh-filmstrip__frame"><img class="lh-filmstrip__thumbnail" src="data:image/jpeg;base64,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" alt="Screenshot"></div><div class="lh-filmstrip__frame"><img class="lh-filmstrip__thumbnail" src="data:image/jpeg;base64,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" alt="Screenshot"></div><div class="lh-filmstrip__frame"><img class="lh-filmstrip__thumbnail" src="data:image/jpeg;base64,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" alt="Screenshot"></div><div class="lh-filmstrip__frame"><img class="lh-filmstrip__thumbnail" src="data:image/jpeg;base64,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" alt="Screenshot"></div><div class="lh-filmstrip__frame"><img class="lh-filmstrip__thumbnail" src="data:image/jpeg;base64,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" alt="Screenshot"></div><div class="lh-filmstrip__frame"><img class="lh-filmstrip__thumbnail" src="data:image/jpeg;base64,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" alt="Screenshot"></div><div class="lh-filmstrip__frame"><img class="lh-filmstrip__thumbnail" src="data:image/jpeg;base64,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" alt="Screenshot"></div><div class="lh-filmstrip__frame"><img class="lh-filmstrip__thumbnail" src="data:image/jpeg;base64,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" alt="Screenshot"></div></div></div><div class="lh-metricfilter"><span class="lh-metricfilter__text">Show audits relevant to:</span><input class="lh-metricfilter__radio" type="radio" name="metricsfilter" id="metric-All"><label class="lh-metricfilter__label lh-metricfilter__label--active" for="metric-All">All</label><input class="lh-metricfilter__radio" type="radio" name="metricsfilter" id="metric-FCP"><label class="lh-metricfilter__label" for="metric-FCP" title="First Contentful Paint">FCP</label><input class="lh-metricfilter__radio" type="radio" name="metricsfilter" id="metric-LCP"><label class="lh-metricfilter__label" for="metric-LCP" title="Largest Contentful Paint">LCP</label><input class="lh-metricfilter__radio" type="radio" name="metricsfilter" id="metric-TBT"><label class="lh-metricfilter__label" for="metric-TBT" title="Total Blocking Time">TBT</label><input class="lh-metricfilter__radio" type="radio" name="metricsfilter" id="metric-CLS"><label class="lh-metricfilter__label" for="metric-CLS" title="Cumulative Layout Shift">CLS</label></div><div class="lh-audit-group lh-audit-group--load-opportunities"><div class="lh-audit-group__header"><span class="lh-audit-group__title">Opportunities</span><span class="lh-audit-group__description">These suggestions can help your page load faster. They don't <a rel="noopener" target="_blank" href="https://web.dev/performance-scoring/?utm_source=lighthouse&amp;utm_medium=cli">directly affect</a> the Performance score.</span></div><div class="lh-load-opportunity__header lh-load-opportunity__cols">
+    <div class="lh-load-opportunity__col lh-load-opportunity__col--one">Opportunity</div>
+    <div class="lh-load-opportunity__col lh-load-opportunity__col--two">Estimated Savings</div>
+  </div><div class="lh-audit lh-audit--load-opportunity lh-audit--numeric lh-audit--average" id="unused-css-rules">
+    <details class="lh-expandable-details">
+        <summary>
+          <div class="lh-audit__header lh-expandable-details__summary">
+            <div class="lh-load-opportunity__cols">
+              <div class="lh-load-opportunity__col lh-load-opportunity__col--one">
+                <span class="lh-audit__score-icon"></span>
+                <div class="lh-audit__title"><span>Reduce unused CSS</span></div>
+              </div>
+              <div class="lh-load-opportunity__col lh-load-opportunity__col--two">
+                <div class="lh-load-opportunity__sparkline" title="Potential savings of 28&nbsp;KiB">
+                  <div class="lh-sparkline"><div class="lh-sparkline__bar" style="width: 14.499999999999998%;"></div></div>
+                </div>
+                <div class="lh-audit__display-text" title="Potential savings of 28&nbsp;KiB">0.29&nbsp;s</div>
+                <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+              </div>
+            </div>
+          </div>
+        </summary>
+      <div class="lh-audit__description"><span>Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. <a rel="noopener" target="_blank" href="https://web.dev/unused-css-rules/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to First Contentful Paint">FCP</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    
+  <style>
+    .lh-3p-filter {
+      background-color: var(--table-higlight-background-color);
+      color: var(--color-gray-600);
+      float: right;
+      padding: 6px;
+    }
+    .lh-3p-filter-label, .lh-3p-filter-input {
+      vertical-align: middle;
+      user-select: none;
+    }
+    .lh-3p-filter-input:disabled + .lh-3p-ui-string {
+      text-decoration: line-through;
+    }
+  </style>
+  <div class="lh-3p-filter">
+    <label class="lh-3p-filter-label" for="lh-3p-filter-label--0">
+      <input type="checkbox" class="lh-3p-filter-input" checked="" id="lh-3p-filter-label--0" disabled="">
+      <span class="lh-3p-ui-string">Show 3rd-party resources</span> (<span class="lh-3p-filter-count">0</span>)
+    </label>
+  </div>
+<table class="lh-table lh-details"><thead><tr><th class="lh-table-column--url"><div class="lh-text">URL</div></th><th class="lh-table-column--bytes"><div class="lh-text">Transfer Size</div></th><th class="lh-table-column--bytes"><div class="lh-text">Potential Savings</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" data-url="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" class="lh-link">…css/main.bundle.min.6783e34….css</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--bytes"><div class="lh-text" title="40,665&nbsp;bytes">39.7&nbsp;KiB</div></td><td class="lh-table-column--bytes"><div class="lh-text" title="28,581&nbsp;bytes">27.9&nbsp;KiB</div></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--load-opportunity lh-audit--numeric lh-audit--average" id="unused-javascript">
+    <details class="lh-expandable-details">
+        <summary>
+          <div class="lh-audit__header lh-expandable-details__summary">
+            <div class="lh-load-opportunity__cols">
+              <div class="lh-load-opportunity__col lh-load-opportunity__col--one">
+                <span class="lh-audit__score-icon"></span>
+                <div class="lh-audit__title"><span>Reduce unused JavaScript</span></div>
+              </div>
+              <div class="lh-load-opportunity__col lh-load-opportunity__col--two">
+                <div class="lh-load-opportunity__sparkline" title="Potential savings of 21&nbsp;KiB">
+                  <div class="lh-sparkline"><div class="lh-sparkline__bar" style="width: 7.5%;"></div></div>
+                </div>
+                <div class="lh-audit__display-text" title="Potential savings of 21&nbsp;KiB">0.15&nbsp;s</div>
+                <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+              </div>
+            </div>
+          </div>
+        </summary>
+      <div class="lh-audit__description"><span>Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. <a rel="noopener" target="_blank" href="https://web.dev/unused-javascript/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    
+  
+  <div class="lh-3p-filter">
+    <label class="lh-3p-filter-label" for="lh-3p-filter-label--1">
+      <input type="checkbox" class="lh-3p-filter-input" checked="" id="lh-3p-filter-label--1" disabled="">
+      <span class="lh-3p-ui-string">Show 3rd-party resources</span> (<span class="lh-3p-filter-count">0</span>)
+    </label>
+  </div>
+<table class="lh-table lh-details"><thead><tr><th class="lh-table-column--url"><div class="lh-text">URL</div></th><th class="lh-table-column--bytes"><div class="lh-text">Transfer Size</div></th><th class="lh-table-column--bytes"><div class="lh-text">Potential Savings</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js" data-url="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js" class="lh-link">…js/main.bundle.min.81d5d44….js</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--bytes"><div class="lh-text" title="27,861&nbsp;bytes">27.2&nbsp;KiB</div></td><td class="lh-table-column--bytes"><div class="lh-text" title="21,903&nbsp;bytes">21.4&nbsp;KiB</div></td></tr></tbody></table></details>
+  </div></div><div class="lh-audit-group lh-audit-group--diagnostics"><div class="lh-audit-group__header"><span class="lh-audit-group__title">Diagnostics</span><span class="lh-audit-group__description">More information about the performance of your application. These numbers don't <a rel="noopener" target="_blank" href="https://web.dev/performance-scoring/?utm_source=lighthouse&amp;utm_medium=cli">directly affect</a> the Performance score.</span></div><div class="lh-audit lh-audit--informative" id="critical-request-chains">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoid chaining critical requests</span></span>
+            <span class="lh-audit__display-text">1 chain found</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>The Critical Request Chains below show you what resources are loaded with a high priority. Consider reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load. <a rel="noopener" target="_blank" href="https://web.dev/critical-request-chains/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to First Contentful Paint">FCP</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <div class="lh-crc-container lh-details">
+    <style>
+      .lh-crc .tree-marker {
+        width: 12px;
+        height: 26px;
+        display: block;
+        float: left;
+        background-position: top left;
+      }
+      .lh-crc .horiz-down {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><g fill="%23D8D8D8" fill-rule="evenodd"><path d="M16 12v2H-2v-2z"/><path d="M9 12v14H7V12z"/></g></svg>');
+      }
+      .lh-crc .right {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M16 12v2H0v-2z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .up-right {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v14H7zm2 12h7v2H9z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .vert-right {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v27H7zm2 12h7v2H9z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .vert {
+        background: url('data:image/svg+xml;utf8,<svg width="16" height="26" viewBox="0 0 16 26" xmlns="http://www.w3.org/2000/svg"><path d="M7 0h2v26H7z" fill="%23D8D8D8" fill-rule="evenodd"/></svg>');
+      }
+      .lh-crc .crc-tree {
+        font-size: 14px;
+        width: 100%;
+        overflow-x: auto;
+      }
+      .lh-crc .crc-node {
+        height: 26px;
+        line-height: 26px;
+        white-space: nowrap;
+      }
+      .lh-crc .crc-node__tree-value {
+        margin-left: 10px;
+      }
+      .lh-crc .crc-node__tree-value div {
+        display: inline;
+      }
+      .lh-crc .crc-node__chain-duration {
+        font-weight: 700;
+      }
+      .lh-crc .crc-initial-nav {
+        color: #595959;
+        font-style: italic;
+      }
+      .lh-crc__summary-value {
+        margin-bottom: 10px;
+      }
+    </style>
+    <div>
+      <div class="lh-crc__summary-value">
+        <span class="lh-crc__longest_duration_label">Maximum critical path latency:</span> <b class="lh-crc__longest_duration">20&nbsp;ms</b>
+      </div>
+    </div>
+    <div class="lh-crc">
+      <div class="crc-initial-nav">Initial Navigation</div>
+      <!-- stamp for each chain -->
+      <template id="tmpl-lh-crc__chains">
+        <div class="crc-node">
+          <span class="crc-node__tree-marker">
+
+          </span>
+          <span class="crc-node__tree-value">
+
+          </span>
+        </div>
+      </template>
+    
+        <div class="crc-node" title="http://localhost:8008/congo/samples/emoji/">
+          <span class="crc-node__tree-marker">
+
+          <span class="tree-marker up-right"></span><span class="tree-marker right"></span><span class="tree-marker horiz-down"></span></span>
+          <span class="crc-node__tree-value">
+
+          <div class="lh-text__url" title="http://localhost:8008/congo/samples/emoji/" data-url="http://localhost:8008/congo/samples/emoji/"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/samples/emoji/" class="lh-link">…samples/emoji</a><div class="lh-text lh-text__url-host">(localhost)</div></div></span>
+        </div>
+      
+        <div class="crc-node" title="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css">
+          <span class="crc-node__tree-marker">
+
+          <span class="tree-marker"></span><span class="tree-marker"></span><span class="tree-marker up-right"></span><span class="tree-marker right"></span><span class="tree-marker right"></span></span>
+          <span class="crc-node__tree-value">
+
+          <div class="lh-text__url" title="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" data-url="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" class="lh-link">…css/main.bundle.min.6783e34….css</a><div class="lh-text lh-text__url-host">(localhost)</div></div><span class="crc-node__chain-duration"> - 0&nbsp;ms, </span><span class="crc-node__chain-duration">39.71&nbsp;KiB</span></span>
+        </div>
+      </div>
+  </div></details>
+  </div><div class="lh-audit lh-audit--informative" id="resource-summary">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Keep request counts low and transfer sizes small</span></span>
+            <span class="lh-audit__display-text">4 requests • 92 KiB</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>To set budgets for the quantity and size of page resources, add a budget.json file. <a rel="noopener" target="_blank" href="https://web.dev/use-lighthouse-for-performance-budgets/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <table class="lh-table lh-details"><thead><tr><th class="lh-table-column--text"><div class="lh-text">Resource Type</div></th><th class="lh-table-column--numeric"><div class="lh-text">Requests</div></th><th class="lh-table-column--bytes"><div class="lh-text">Transfer Size</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Total</div></td><td class="lh-table-column--numeric"><div class="lh-numeric">4</div></td><td class="lh-table-column--bytes"><div class="lh-text" title="93,852&nbsp;bytes">91.7&nbsp;KiB</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Stylesheet</div></td><td class="lh-table-column--numeric"><div class="lh-numeric">1</div></td><td class="lh-table-column--bytes"><div class="lh-text" title="40,665&nbsp;bytes">39.7&nbsp;KiB</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Script</div></td><td class="lh-table-column--numeric"><div class="lh-numeric">1</div></td><td class="lh-table-column--bytes"><div class="lh-text" title="27,861&nbsp;bytes">27.2&nbsp;KiB</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Document</div></td><td class="lh-table-column--numeric"><div class="lh-numeric">1</div></td><td class="lh-table-column--bytes"><div class="lh-text" title="17,411&nbsp;bytes">17.0&nbsp;KiB</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Image</div></td><td class="lh-table-column--numeric"><div class="lh-numeric">1</div></td><td class="lh-table-column--bytes"><div class="lh-text" title="7,915&nbsp;bytes">7.7&nbsp;KiB</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Media</div></td><td class="lh-table-column--numeric"><div class="lh-numeric">0</div></td><td class="lh-table-column--bytes"><div class="lh-text" title="0&nbsp;bytes">0.0&nbsp;KiB</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Font</div></td><td class="lh-table-column--numeric"><div class="lh-numeric">0</div></td><td class="lh-table-column--bytes"><div class="lh-text" title="0&nbsp;bytes">0.0&nbsp;KiB</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Other</div></td><td class="lh-table-column--numeric"><div class="lh-numeric">0</div></td><td class="lh-table-column--bytes"><div class="lh-text" title="0&nbsp;bytes">0.0&nbsp;KiB</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Third-party</div></td><td class="lh-table-column--numeric"><div class="lh-numeric">0</div></td><td class="lh-table-column--bytes"><div class="lh-text" title="0&nbsp;bytes">0.0&nbsp;KiB</div></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--informative" id="largest-contentful-paint-element">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Largest Contentful Paint element</span></span>
+            <span class="lh-audit__display-text">1 element found</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>This is the largest contentful element painted within the viewport. <a rel="noopener" target="_blank" href="https://web.dev/lighthouse-largest-contentful-paint/?utm_source=lighthouse&amp;utm_medium=cli">Learn More</a></span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <table class="lh-table lh-details"><thead><tr><th class="lh-table-column--node"><div class="lh-text">Element</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--node"><span class="lh-node" title="section.flex > div.min-w-0 > div.flex > span.dark:text-neutral-300" data-path="1,HTML,1,BODY,2,MAIN,0,ARTICLE,1,SECTION,0,DIV,1,DIV,1,SPAN" data-selector="section.flex > div.min-w-0 > div.flex > span.dark:text-neutral-300" data-snippet="<span class=&quot;dark:text-neutral-300&quot;>"><div>Note: The rendering of these glyphs depends on the browser and the platform. To…</div><div class="lh-node__snippet">&lt;span class="dark:text-neutral-300"&gt;</div></span></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--informative" id="long-tasks">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoid long main-thread tasks</span></span>
+            <span class="lh-audit__display-text">2 long tasks found</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. <a rel="noopener" target="_blank" href="https://web.dev/long-tasks-devtools/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a></span><span class="lh-audit__adorn" title="Relevant to Total Blocking Time">TBT</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    
+  
+  <div class="lh-3p-filter">
+    <label class="lh-3p-filter-label" for="lh-3p-filter-label--2">
+      <input type="checkbox" class="lh-3p-filter-input" checked="" id="lh-3p-filter-label--2" disabled="">
+      <span class="lh-3p-ui-string">Show 3rd-party resources</span> (<span class="lh-3p-filter-count">0</span>)
+    </label>
+  </div>
+<table class="lh-table lh-details"><thead><tr><th class="lh-table-column--url"><div class="lh-text">URL</div></th><th class="lh-table-column--ms"><div class="lh-text">Start Time</div></th><th class="lh-table-column--ms"><div class="lh-text">Duration</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/samples/emoji/" data-url="http://localhost:8008/congo/samples/emoji/"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/samples/emoji/" class="lh-link">…samples/emoji</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--ms"><div class="lh-text">785&nbsp;ms</div></td><td class="lh-table-column--ms"><div class="lh-text">584&nbsp;ms</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/samples/emoji/" data-url="http://localhost:8008/congo/samples/emoji/"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/samples/emoji/" class="lh-link">…samples/emoji</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--ms"><div class="lh-text">1,369&nbsp;ms</div></td><td class="lh-table-column--ms"><div class="lh-text">61&nbsp;ms</div></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--informative" id="non-composited-animations">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoid non-composited animations</span></span>
+            <span class="lh-audit__display-text">18 animated elements found</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Animations which are not composited can be janky and increase CLS. <a rel="noopener" target="_blank" href="https://web.dev/non-composited-animations?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a></span><span class="lh-audit__adorn" title="Relevant to Cumulative Layout Shift">CLS</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <table class="lh-table lh-details"><thead><tr><th class="lh-table-column--node"><div class="lh-text">Element</div></th><th class="lh-table-column--text"><div class="lh-text">Name</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--node"><span class="lh-node" title="body.flex > div#the-top > a.px-3" data-path="1,HTML,1,BODY,0,DIV,0,A" data-selector="body.flex > div#the-top > a.px-3" data-snippet="<a class=&quot;px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 dark:bg-neutr…&quot; href=&quot;#main-content&quot;>"><div>↓Skip to main content</div><div class="lh-node__snippet">&lt;a class="px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 dark:bg-neutr…" href="#main-content"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: background-color</div></td><td class="lh-table-column--text"><div class="lh-text">background-color</div></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--node"><span class="lh-node" title="body.flex > header.flex > div > a.hover:underline" data-path="1,HTML,1,BODY,1,HEADER,0,DIV,0,A" data-selector="body.flex > header.flex > div > a.hover:underline" data-snippet="<a class=&quot;hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…&quot; rel=&quot;me&quot; href=&quot;/congo/&quot;>"><div>Congo</div><div class="lh-node__snippet">&lt;a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" rel="me" href="/congo/"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--node"><span class="lh-node" title="nav > ul.flex > li.mb-1 > a.hover:underline" data-path="1,HTML,1,BODY,1,HEADER,1,NAV,0,UL,0,LI,0,A" data-selector="nav > ul.flex > li.mb-1 > a.hover:underline" data-snippet="<a class=&quot;hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…&quot; href=&quot;/congo/docs/&quot;>"><div>Docs</div><div class="lh-node__snippet">&lt;a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="/congo/docs/"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--node"><span class="lh-node" title="nav > ul.flex > li.mb-1 > a.hover:underline" data-path="1,HTML,1,BODY,1,HEADER,1,NAV,0,UL,1,LI,0,A" data-selector="nav > ul.flex > li.mb-1 > a.hover:underline" data-snippet="<a class=&quot;hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…&quot; href=&quot;/congo/samples/&quot;>"><div>Samples</div><div class="lh-node__snippet">&lt;a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="/congo/samples/"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--node"><span class="lh-node" title="nav > ul.flex > li.mb-1 > a.hover:underline" data-path="1,HTML,1,BODY,1,HEADER,1,NAV,0,UL,2,LI,0,A" data-selector="nav > ul.flex > li.mb-1 > a.hover:underline" data-snippet="<a class=&quot;hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…&quot; href=&quot;/congo/users/&quot;>"><div>Users</div><div class="lh-node__snippet">&lt;a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="/congo/users/"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--node"><span class="lh-node" title="nav > ul.flex > li.mb-1 > a.hover:underline" data-path="1,HTML,1,BODY,1,HEADER,1,NAV,0,UL,3,LI,0,A" data-selector="nav > ul.flex > li.mb-1 > a.hover:underline" data-snippet="<a class=&quot;hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…&quot; href=&quot;https://github.com/jpanther/congo&quot;>"><div>GitHub</div><div class="lh-node__snippet">&lt;a class="hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…" href="https://github.com/jpanther/congo"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--node"><span class="lh-node" title="nav > ul.flex > li.ltr:text-right > button#search-button" data-path="1,HTML,1,BODY,1,HEADER,1,NAV,0,UL,4,LI,0,BUTTON" data-selector="nav > ul.flex > li.ltr:text-right > button#search-button" data-snippet="<button id=&quot;search-button&quot; class=&quot;text-base hover:text-primary-600 dark:hover:text-primary-400&quot;>"><div>button</div><div class="lh-node__snippet">&lt;button id="search-button" class="text-base hover:text-primary-600 dark:hover:text-primary-400"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--node"><span class="lh-node" title="header.max-w-prose > ol.text-sm > li.inline > a.hover:underline" data-path="1,HTML,1,BODY,2,MAIN,0,ARTICLE,0,HEADER,0,OL,1,LI,0,A" data-selector="header.max-w-prose > ol.text-sm > li.inline > a.hover:underline" data-snippet="<a class=&quot;hover:underline hover:decoration-neutral-300 dark:underline-neutral-600&quot; href=&quot;/congo/samples/&quot;>"><div>Content Samples</div><div class="lh-node__snippet">&lt;a class="hover:underline hover:decoration-neutral-300 dark:underline-neutral-600" href="/congo/samples/"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--node"><span class="lh-node" title="section.flex > div.min-w-0 > p > a" data-path="1,HTML,1,BODY,2,MAIN,0,ARTICLE,1,SECTION,0,DIV,2,P,3,A" data-selector="section.flex > div.min-w-0 > p > a" data-snippet="<a href=&quot;http://localhost:8008/congo/docs/configuration/#site-configuration&quot;>"><div>site configuration</div><div class="lh-node__snippet">&lt;a href="http://localhost:8008/congo/docs/configuration/#site-configuration"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: text-decoration-color</div></td><td class="lh-table-column--text"><div class="lh-text">text-decoration-color</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--node"><span class="lh-node" title="section.flex > div.min-w-0 > p > a" data-path="1,HTML,1,BODY,2,MAIN,0,ARTICLE,1,SECTION,0,DIV,4,P,1,A" data-selector="section.flex > div.min-w-0 > p > a" data-snippet="<a href=&quot;http://www.emoji-cheat-sheet.com/&quot;>"><div>Emoji cheat sheet</div><div class="lh-node__snippet">&lt;a href="http://www.emoji-cheat-sheet.com/"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-sub-item-row lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: text-decoration-color</div></td><td class="lh-table-column--text"><div class="lh-text">text-decoration-color</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--node"><span class="lh-node" title="div.place-self-center > div.text-2xl > div.flex > a.px-1" data-path="1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,0,DIV,1,DIV,3,DIV,0,DIV,0,A" data-selector="div.place-self-center > div.text-2xl > div.flex > a.px-1" data-snippet="<a class=&quot;px-1 hover:text-primary-700 dark:hover:text-primary-400&quot; href=&quot;https://twitter.com/&quot; target=&quot;_blank&quot; aria-label=&quot;Twitter&quot; rel=&quot;me noopener noreferrer&quot;>"><div>Twitter</div><div class="lh-node__snippet">&lt;a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://twitter.com/" target="_blank" aria-label="Twitter" rel="me noopener noreferrer"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--node"><span class="lh-node" title="div.place-self-center > div.text-2xl > div.flex > a.px-1" data-path="1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,0,DIV,1,DIV,3,DIV,0,DIV,1,A" data-selector="div.place-self-center > div.text-2xl > div.flex > a.px-1" data-snippet="<a class=&quot;px-1 hover:text-primary-700 dark:hover:text-primary-400&quot; href=&quot;https://facebook.com/&quot; target=&quot;_blank&quot; aria-label=&quot;Facebook&quot; rel=&quot;me noopener noreferrer&quot;>"><div>Facebook</div><div class="lh-node__snippet">&lt;a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://facebook.com/" target="_blank" aria-label="Facebook" rel="me noopener noreferrer"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--node"><span class="lh-node" title="div.place-self-center > div.text-2xl > div.flex > a.px-1" data-path="1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,0,DIV,1,DIV,3,DIV,0,DIV,2,A" data-selector="div.place-self-center > div.text-2xl > div.flex > a.px-1" data-snippet="<a class=&quot;px-1 hover:text-primary-700 dark:hover:text-primary-400&quot; href=&quot;https://linkedin.com/&quot; target=&quot;_blank&quot; aria-label=&quot;Linkedin&quot; rel=&quot;me noopener noreferrer&quot;>"><div>Linkedin</div><div class="lh-node__snippet">&lt;a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://linkedin.com/" target="_blank" aria-label="Linkedin" rel="me noopener noreferrer"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--node"><span class="lh-node" title="div.place-self-center > div.text-2xl > div.flex > a.px-1" data-path="1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,0,DIV,1,DIV,3,DIV,0,DIV,3,A" data-selector="div.place-self-center > div.text-2xl > div.flex > a.px-1" data-snippet="<a class=&quot;px-1 hover:text-primary-700 dark:hover:text-primary-400&quot; href=&quot;https://youtube.com/&quot; target=&quot;_blank&quot; aria-label=&quot;Youtube&quot; rel=&quot;me noopener noreferrer&quot;>"><div>Youtube</div><div class="lh-node__snippet">&lt;a class="px-1 hover:text-primary-700 dark:hover:text-primary-400" href="https://youtube.com/" target="_blank" aria-label="Youtube" rel="me noopener noreferrer"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--node"><span class="lh-node" title="div.pt-8 > div.flex > span > a.flex" data-path="1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,1,DIV,1,DIV,0,SPAN,0,A" data-selector="div.pt-8 > div.flex > span > a.flex" data-snippet="<a class=&quot;flex&quot; href=&quot;/congo/samples/diagrams-flowcharts/&quot;>"><div>←
+Diagrams and Flowcharts
+6 March 2019</div><div class="lh-node__snippet">&lt;a class="flex" href="/congo/samples/diagrams-flowcharts/"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--node"><span class="lh-node" title="div#search-wrapper > div#search-modal > header.relative > button#close-search-button" data-path="1,HTML,1,BODY,3,DIV,0,DIV,0,HEADER,1,BUTTON" data-selector="div#search-wrapper > div#search-modal > header.relative > button#close-search-button" data-snippet="<button id=&quot;close-search-button&quot; class=&quot;flex items-center justify-center w-8 h-8 text-neutral-700 dark:text-neutra…&quot;>"><div>button</div><div class="lh-node__snippet">&lt;button id="close-search-button" class="flex items-center justify-center w-8 h-8 text-neutral-700 dark:text-neutra…"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--node"><span class="lh-node" title="div.flex > div > p.text-xs > a.hover:underline" data-path="1,HTML,1,BODY,4,FOOTER,0,DIV,0,DIV,1,P,1,A" data-selector="div.flex > div > p.text-xs > a.hover:underline" data-snippet="<a class=&quot;hover:underline hover:decoration-primary-400 hover:text-primary-500&quot; href=&quot;https://gohugo.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;>"><div>Hugo</div><div class="lh-node__snippet">&lt;a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href="https://gohugo.io/" target="_blank" rel="noopener noreferrer"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--node"><span class="lh-node" title="div.flex > div > p.text-xs > a.hover:underline" data-path="1,HTML,1,BODY,4,FOOTER,0,DIV,0,DIV,1,P,3,A" data-selector="div.flex > div > p.text-xs > a.hover:underline" data-snippet="<a class=&quot;hover:underline hover:decoration-primary-400 hover:text-primary-500&quot; href=&quot;https://git.io/hugo-congo&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;>"><div>Congo</div><div class="lh-node__snippet">&lt;a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href="https://git.io/hugo-congo" target="_blank" rel="noopener noreferrer"&gt;</div></span></td><td class="lh-table-column--empty"></td></tr><tr class="lh-sub-item-row lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Unsupported CSS Property: color</div></td><td class="lh-table-column--text"><div class="lh-text">color</div></td></tr></tbody></table></details>
+  </div></div><details class="lh-clump lh-audit-group lh-clump--passed">
+    <summary>
+      <div class="lh-audit-group__summary">
+        <div class="lh-audit-group__header">
+          <span class="lh-audit-group__title">Passed audits</span>
+          <span class="lh-audit-group__itemcount">(28)</span>
+          <!-- .lh-audit-group__description will be added here -->
+          <!-- .lh-metrics-toggle will be added here -->
+        </div>
+        <div class=""></div>
+      <svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+    </summary>
+  <div class="lh-audit lh-audit--numeric lh-audit--pass" id="render-blocking-resources">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Eliminate render-blocking resources</span></span>
+            <span class="lh-audit__display-text">Potential savings of 0&nbsp;ms</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. <a rel="noopener" target="_blank" href="https://web.dev/render-blocking-resources/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to First Contentful Paint">FCP</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    
+  
+  <div class="lh-3p-filter">
+    <label class="lh-3p-filter-label" for="lh-3p-filter-label--3">
+      <input type="checkbox" class="lh-3p-filter-input" checked="" id="lh-3p-filter-label--3" disabled="">
+      <span class="lh-3p-ui-string">Show 3rd-party resources</span> (<span class="lh-3p-filter-count">0</span>)
+    </label>
+  </div>
+<table class="lh-table lh-details"><thead><tr><th class="lh-table-column--url"><div class="lh-text">URL</div></th><th class="lh-table-column--bytes"><div class="lh-text">Transfer Size</div></th><th class="lh-table-column--timespanMs"><div class="lh-text">Potential Savings</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" data-url="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" class="lh-link">…css/main.bundle.min.6783e34….css</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--bytes"><div class="lh-text" title="40,665&nbsp;bytes">39.7&nbsp;KiB</div></td><td class="lh-table-column--timespanMs"><div class="lh-text">480&nbsp;ms</div></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="uses-responsive-images">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Properly size images</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Serve images that are appropriately-sized to save cellular data and improve load time. <a rel="noopener" target="_blank" href="https://web.dev/uses-responsive-images/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="offscreen-images">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Defer offscreen images</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. <a rel="noopener" target="_blank" href="https://web.dev/offscreen-images/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="unminified-css">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Minify CSS</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Minifying CSS files can reduce network payload sizes. <a rel="noopener" target="_blank" href="https://web.dev/unminified-css/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to First Contentful Paint">FCP</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="unminified-javascript">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Minify JavaScript</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Minifying JavaScript files can reduce payload sizes and script parse time. <a rel="noopener" target="_blank" href="https://web.dev/unminified-javascript/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to First Contentful Paint">FCP</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="uses-optimized-images">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Efficiently encode images</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Optimized images load faster and consume less cellular data. <a rel="noopener" target="_blank" href="https://web.dev/uses-optimized-images/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="modern-image-formats">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Serve images in next-gen formats</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Image formats like JPEG 2000, JPEG XR, and WebP often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. <a rel="noopener" target="_blank" href="https://web.dev/uses-webp-images/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="uses-rel-preconnect">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Preconnect to required origins</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. <a rel="noopener" target="_blank" href="https://web.dev/uses-rel-preconnect/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to First Contentful Paint">FCP</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="server-response-time">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Initial server response time was short</span></span>
+            <span class="lh-audit__display-text">Root document took 0&nbsp;ms</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Keep the server response time for the main document short because all other requests depend on it. <a rel="noopener" target="_blank" href="https://web.dev/time-to-first-byte/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to First Contentful Paint">FCP</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    
+  
+  <div class="lh-3p-filter">
+    <label class="lh-3p-filter-label" for="lh-3p-filter-label--4">
+      <input type="checkbox" class="lh-3p-filter-input" checked="" id="lh-3p-filter-label--4" disabled="">
+      <span class="lh-3p-ui-string">Show 3rd-party resources</span> (<span class="lh-3p-filter-count">0</span>)
+    </label>
+  </div>
+<table class="lh-table lh-details"><thead><tr><th class="lh-table-column--url"><div class="lh-text">URL</div></th><th class="lh-table-column--timespanMs"><div class="lh-text">Time Spent</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/samples/emoji/" data-url="http://localhost:8008/congo/samples/emoji/"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/samples/emoji/" class="lh-link">…samples/emoji</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--timespanMs"><div class="lh-text">0&nbsp;ms</div></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="redirects">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoid multiple page redirects</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Redirects introduce additional delays before the page can be loaded. <a rel="noopener" target="_blank" href="https://web.dev/redirects/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to First Contentful Paint">FCP</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="uses-rel-preload">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Preload key requests</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Consider using `&lt;link rel=preload&gt;` to prioritize fetching resources that are currently requested later in page load. <a rel="noopener" target="_blank" href="https://web.dev/uses-rel-preload/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to First Contentful Paint">FCP</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="uses-http2">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Use HTTP/2</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing. <a rel="noopener" target="_blank" href="https://web.dev/uses-http2/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="efficient-animated-content">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Use video formats for animated content</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. <a rel="noopener" target="_blank" href="https://web.dev/efficient-animated-content/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a></span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="duplicated-javascript">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Remove duplicate modules in JavaScript bundles</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity. </span><span class="lh-audit__adorn" title="Relevant to Total Blocking Time">TBT</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="legacy-javascript">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoid serving legacy JavaScript to modern browsers</span></span>
+            <span class="lh-audit__display-text">Potential savings of 0&nbsp;KiB</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Polyfills and transforms enable legacy browsers to use new JavaScript features. However, many aren't necessary for modern browsers. For your bundled JavaScript, adopt a modern script deployment strategy using module/nomodule feature detection to reduce the amount of code shipped to modern browsers, while retaining support for legacy browsers. <a rel="noopener" target="_blank" href="https://philipwalton.com/articles/deploying-es2015-code-in-production-today/">Learn More</a></span><span class="lh-audit__adorn" title="Relevant to Total Blocking Time">TBT</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    
+  
+  <div class="lh-3p-filter">
+    <label class="lh-3p-filter-label" for="lh-3p-filter-label--5">
+      <input type="checkbox" class="lh-3p-filter-input" checked="" id="lh-3p-filter-label--5" disabled="">
+      <span class="lh-3p-ui-string">Show 3rd-party resources</span> (<span class="lh-3p-filter-count">0</span>)
+    </label>
+  </div>
+<table class="lh-table lh-details"><thead><tr><th class="lh-table-column--url"><div class="lh-text">URL</div></th><th class="lh-table-column--code"><div class="lh-text"></div></th><th class="lh-table-column--bytes"><div class="lh-text">Potential Savings</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js" data-url="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js" class="lh-link">…js/main.bundle.min.81d5d44….js</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--empty"></td><td class="lh-table-column--bytes"><div class="lh-text" title="168&nbsp;bytes">0.2&nbsp;KiB</div></td></tr><tr class="lh-sub-item-row lh-row--even"><td class="lh-table-column--source-location"><div class="lh-text__url lh-source-location" title="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js" data-url="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js" data-source-url="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js" data-source-line="0" data-source-column="2227"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js" class="lh-link">…js/main.bundle.min.81d5d44….js:1:2227</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--code"><pre class="lh-code">@babel/plugin-transform-classes</pre></td><td class="lh-table-column--empty"></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="preload-lcp-image">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Preload Largest Contentful Paint image</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Preload the image used by the LCP element in order to improve your LCP time. <a rel="noopener" target="_blank" href="https://web.dev/optimize-lcp/?utm_source=lighthouse&amp;utm_medium=cli#preload-important-resources">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="total-byte-weight">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoids enormous network payloads</span></span>
+            <span class="lh-audit__display-text">Total size was 92&nbsp;KiB</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Large network payloads cost users real money and are highly correlated with long load times. <a rel="noopener" target="_blank" href="https://web.dev/total-byte-weight/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    
+  
+  <div class="lh-3p-filter">
+    <label class="lh-3p-filter-label" for="lh-3p-filter-label--6">
+      <input type="checkbox" class="lh-3p-filter-input" checked="" id="lh-3p-filter-label--6" disabled="">
+      <span class="lh-3p-ui-string">Show 3rd-party resources</span> (<span class="lh-3p-filter-count">0</span>)
+    </label>
+  </div>
+<table class="lh-table lh-details"><thead><tr><th class="lh-table-column--url"><div class="lh-text">URL</div></th><th class="lh-table-column--bytes"><div class="lh-text">Transfer Size</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" data-url="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" class="lh-link">…css/main.bundle.min.6783e34….css</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--bytes"><div class="lh-text" title="40,665&nbsp;bytes">39.7&nbsp;KiB</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js" data-url="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js" class="lh-link">…js/main.bundle.min.81d5d44….js</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--bytes"><div class="lh-text" title="27,861&nbsp;bytes">27.2&nbsp;KiB</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/samples/emoji/" data-url="http://localhost:8008/congo/samples/emoji/"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/samples/emoji/" class="lh-link">…samples/emoji</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--bytes"><div class="lh-text" title="17,411&nbsp;bytes">17.0&nbsp;KiB</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/author_hu052d24d60828c1cca42a6aefe45b8b44_54195_192x192_fill_q75_box_smart1.jpg" data-url="http://localhost:8008/congo/author_hu052d24d60828c1cca42a6aefe45b8b44_54195_192x192_fill_q75_box_smart1.jpg"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/author_hu052d24d60828c1cca42a6aefe45b8b44_54195_192x192_fill_q75_box_smart1.jpg" class="lh-link">/congo/author_hu052d24d…_54195_192x192_fill_q75_box_smart1.jpg</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--bytes"><div class="lh-text" title="7,915&nbsp;bytes">7.7&nbsp;KiB</div></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="dom-size">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoids an excessive DOM size</span></span>
+            <span class="lh-audit__display-text">120 elements</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>A large DOM will increase memory usage, cause longer <a rel="noopener" target="_blank" href="https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations?utm_source=lighthouse&amp;utm_medium=cli">style calculations</a>, and produce costly <a rel="noopener" target="_blank" href="https://developers.google.com/speed/articles/reflow?utm_source=lighthouse&amp;utm_medium=cli">layout reflows</a>. <a rel="noopener" target="_blank" href="https://web.dev/dom-size/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to Total Blocking Time">TBT</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <table class="lh-table lh-details"><thead><tr><th class="lh-table-column--text"><div class="lh-text">Statistic</div></th><th class="lh-table-column--node"><div class="lh-text">Element</div></th><th class="lh-table-column--numeric"><div class="lh-text">Value</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Total DOM Elements</div></td><td class="lh-table-column--empty"></td><td class="lh-table-column--numeric"><div class="lh-numeric">120</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Maximum DOM Depth</div></td><td class="lh-table-column--node"><span class="lh-node" title="a.px-1 > span.relative > svg.svg-inline--fa > path" data-path="1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,0,DIV,1,DIV,3,DIV,0,DIV,0,A,0,SPAN,0,svg,0,path" data-selector="a.px-1 > span.relative > svg.svg-inline--fa > path" data-snippet="<path fill=&quot;currentcolor&quot; d=&quot;M459.37 151.716c.325 4.548.325 9.097.325 13.645.0 138.72-105.583 298.558-2…&quot;>"><div>path</div><div class="lh-node__snippet">&lt;path fill="currentcolor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645.0 138.72-105.583 298.558-2…"&gt;</div></span></td><td class="lh-table-column--numeric"><div class="lh-numeric">12</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Maximum Child Elements</div></td><td class="lh-table-column--node"><span class="lh-node" title="body.flex" data-path="1,HTML,1,BODY" data-selector="body.flex" data-snippet="<body class=&quot;flex flex-col h-screen px-6 m-auto text-lg leading-7 bg-neutral text-neutr…&quot;>"><div>body</div><div class="lh-node__snippet">&lt;body class="flex flex-col h-screen px-6 m-auto text-lg leading-7 bg-neutral text-neutr…"&gt;</div></span></td><td class="lh-table-column--numeric"><div class="lh-numeric">5</div></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="user-timings">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>User Timing marks and measures</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. <a rel="noopener" target="_blank" href="https://web.dev/user-timings/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="bootup-time">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>JavaScript execution time</span></span>
+            <span class="lh-audit__display-text">0.0&nbsp;s</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. <a rel="noopener" target="_blank" href="https://web.dev/bootup-time/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to Total Blocking Time">TBT</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    
+  
+  <div class="lh-3p-filter">
+    <label class="lh-3p-filter-label" for="lh-3p-filter-label--7">
+      <input type="checkbox" class="lh-3p-filter-input" checked="" id="lh-3p-filter-label--7" disabled="">
+      <span class="lh-3p-ui-string">Show 3rd-party resources</span> (<span class="lh-3p-filter-count">0</span>)
+    </label>
+  </div>
+<table class="lh-table lh-details"><thead><tr><th class="lh-table-column--url"><div class="lh-text">URL</div></th><th class="lh-table-column--ms"><div class="lh-text">Total CPU Time</div></th><th class="lh-table-column--ms"><div class="lh-text">Script Evaluation</div></th><th class="lh-table-column--ms"><div class="lh-text">Script Parse</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--url"><div class="lh-text__url" title="http://localhost:8008/congo/samples/emoji/" data-url="http://localhost:8008/congo/samples/emoji/"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/samples/emoji/" class="lh-link">…samples/emoji</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--ms"><div class="lh-text">1,411&nbsp;ms</div></td><td class="lh-table-column--ms"><div class="lh-text">4&nbsp;ms</div></td><td class="lh-table-column--ms"><div class="lh-text">1&nbsp;ms</div></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--numeric lh-audit--pass" id="mainthread-work-breakdown">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Minimizes main-thread work</span></span>
+            <span class="lh-audit__display-text">1.5&nbsp;s</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. <a rel="noopener" target="_blank" href="https://web.dev/mainthread-work-breakdown/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a></span><span class="lh-audit__adorn" title="Relevant to Total Blocking Time">TBT</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <table class="lh-table lh-details"><thead><tr><th class="lh-table-column--text"><div class="lh-text">Category</div></th><th class="lh-table-column--ms"><div class="lh-text">Time Spent</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Style &amp; Layout</div></td><td class="lh-table-column--ms"><div class="lh-text">1,117&nbsp;ms</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Rendering</div></td><td class="lh-table-column--ms"><div class="lh-text">252&nbsp;ms</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Other</div></td><td class="lh-table-column--ms"><div class="lh-text">53&nbsp;ms</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Script Evaluation</div></td><td class="lh-table-column--ms"><div class="lh-text">20&nbsp;ms</div></td></tr><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">Parse HTML &amp; CSS</div></td><td class="lh-table-column--ms"><div class="lh-text">8&nbsp;ms</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--text"><div class="lh-text">Script Parsing &amp; Compilation</div></td><td class="lh-table-column--ms"><div class="lh-text">3&nbsp;ms</div></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="font-display">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>All text remains visible during webfont loads</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. <a rel="noopener" target="_blank" href="https://web.dev/font-display/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to First Contentful Paint">FCP</span><span class="lh-audit__adorn" title="Relevant to Largest Contentful Paint">LCP</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="third-party-summary">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Minimize third-party usage</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Third-party code can significantly impact load performance. Limit the number of redundant third-party providers and try to load third-party code after your page has primarily finished loading. <a rel="noopener" target="_blank" href="https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/loading-third-party-javascript/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to Total Blocking Time">TBT</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="third-party-facades">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Lazy load third-party resources with facades</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Some third-party embeds can be lazy loaded. Consider replacing them with a facade until they are required. <a rel="noopener" target="_blank" href="https://web.dev/third-party-facades/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span><span class="lh-audit__adorn" title="Relevant to Total Blocking Time">TBT</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="layout-shift-elements">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoid large layout shifts</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>These DOM elements contribute most to the CLS of the page.</span><span class="lh-audit__adorn" title="Relevant to Cumulative Layout Shift">CLS</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="uses-passive-event-listeners">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Uses passive listeners to improve scrolling performance</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. <a rel="noopener" target="_blank" href="https://web.dev/uses-passive-event-listeners/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="no-document-write">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoids <code>document.write()</code></span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. <a rel="noopener" target="_blank" href="https://web.dev/no-document-write/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="unsized-images">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Image elements have explicit <code>width</code> and <code>height</code></span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Set an explicit width and height on image elements to reduce layout shifts and improve CLS. <a rel="noopener" target="_blank" href="https://web.dev/optimize-cls/?utm_source=lighthouse&amp;utm_medium=cli#images-without-dimensions">Learn more</a></span><span class="lh-audit__adorn" title="Relevant to Cumulative Layout Shift">CLS</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div></details></div></div><div class="lh-category-wrapper"><div class="lh-category"><span class="lh-permalink" id="accessibility"></span>
+  <div class="lh-category-header">
+    <div class="lh-score__gauge" role="heading" aria-level="2">
+  <a href="#accessibility" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">Accessibility</div>
+  </a>
+</div>
+    <div class="lh-category-header__description"><span>These checks highlight opportunities to <a rel="noopener" target="_blank" href="https://developers.google.com/web/fundamentals/accessibility?utm_source=lighthouse&amp;utm_medium=cli">improve the accessibility of your web app</a>. Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged.</span></div>
+  </div>
+<details class="lh-clump lh-audit-group lh-clump--manual">
+    <summary>
+      <div class="lh-audit-group__summary">
+        <div class="lh-audit-group__header">
+          <span class="lh-audit-group__title">Additional items to manually check</span>
+          <span class="lh-audit-group__itemcount">(10)</span>
+          <!-- .lh-audit-group__description will be added here -->
+          <!-- .lh-metrics-toggle will be added here -->
+        <span class="lh-audit-group__description">These items address areas which an automated testing tool cannot cover. Learn more in our guide on <a rel="noopener" target="_blank" href="https://developers.google.com/web/fundamentals/accessibility/how-to-review?utm_source=lighthouse&amp;utm_medium=cli">conducting an accessibility review</a>.</span></div>
+        <div class=""></div>
+      <svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+    </summary>
+  <div class="lh-audit lh-audit--manual lh-audit--pass" id="logical-tab-order">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>The page has a logical tab order</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. <a rel="noopener" target="_blank" href="https://web.dev/logical-tab-order/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--manual lh-audit--pass" id="focusable-controls">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Interactive controls are keyboard focusable</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Custom interactive controls are keyboard focusable and display a focus indicator. <a rel="noopener" target="_blank" href="https://web.dev/focusable-controls/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--manual lh-audit--pass" id="interactive-element-affordance">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Interactive elements indicate their purpose and state</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. <a rel="noopener" target="_blank" href="https://web.dev/interactive-element-affordance/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--manual lh-audit--pass" id="managed-focus">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>The user's focus is directed to new content added to the page</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>If new content, such as a dialog, is added to the page, the user's focus is directed to it. <a rel="noopener" target="_blank" href="https://web.dev/managed-focus/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--manual lh-audit--pass" id="focus-traps">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>User focus is not accidentally trapped in a region</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>A user can tab into and out of any control or region without accidentally trapping their focus. <a rel="noopener" target="_blank" href="https://web.dev/focus-traps/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--manual lh-audit--pass" id="custom-controls-labels">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Custom controls have associated labels</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. <a rel="noopener" target="_blank" href="https://web.dev/custom-controls-labels/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--manual lh-audit--pass" id="custom-controls-roles">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Custom controls have ARIA roles</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Custom interactive controls have appropriate ARIA roles. <a rel="noopener" target="_blank" href="https://web.dev/custom-control-roles/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--manual lh-audit--pass" id="visual-order-follows-dom">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Visual order on the page follows DOM order</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>DOM order matches the visual order, improving navigation for assistive technology. <a rel="noopener" target="_blank" href="https://web.dev/visual-order-follows-dom/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--manual lh-audit--pass" id="offscreen-content-hidden">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Offscreen content is hidden from assistive technology</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Offscreen content is hidden with display: none or aria-hidden=true. <a rel="noopener" target="_blank" href="https://web.dev/offscreen-content-hidden/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--manual lh-audit--pass" id="use-landmarks">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>HTML5 landmark elements are used to improve navigation</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Landmark elements (&lt;main&gt;, &lt;nav&gt;, etc.) are used to improve the keyboard navigation of the page for assistive technology. <a rel="noopener" target="_blank" href="https://web.dev/use-landmarks/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div></details><details class="lh-clump lh-audit-group lh-clump--passed">
+    <summary>
+      <div class="lh-audit-group__summary">
+        <div class="lh-audit-group__header">
+          <span class="lh-audit-group__title">Passed audits</span>
+          <span class="lh-audit-group__itemcount">(18)</span>
+          <!-- .lh-audit-group__description will be added here -->
+          <!-- .lh-metrics-toggle will be added here -->
+        </div>
+        <div class=""></div>
+      <svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+    </summary>
+  <div class="lh-audit lh-audit--binary lh-audit--pass" id="aria-allowed-attr">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[aria-*]</code> attributes match their roles</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. <a rel="noopener" target="_blank" href="https://web.dev/aria-allowed-attr/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="aria-hidden-body">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[aria-hidden="true"]</code> is not present on the document <code>&lt;body&gt;</code></span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Assistive technologies, like screen readers, work inconsistently when `aria-hidden="true"` is set on the document `&lt;body&gt;`. <a rel="noopener" target="_blank" href="https://web.dev/aria-hidden-body/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="aria-hidden-focus">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[aria-hidden="true"]</code> elements do not contain focusable descendents</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Focusable descendents within an `[aria-hidden="true"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. <a rel="noopener" target="_blank" href="https://web.dev/aria-hidden-focus/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="aria-valid-attr-value">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[aria-*]</code> attributes have valid values</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. <a rel="noopener" target="_blank" href="https://web.dev/aria-valid-attr-value/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="aria-valid-attr">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[aria-*]</code> attributes are valid and not misspelled</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. <a rel="noopener" target="_blank" href="https://web.dev/aria-valid-attr/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="button-name">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Buttons have an accessible name</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>When a button doesn't have an accessible name, screen readers announce it as "button", making it unusable for users who rely on screen readers. <a rel="noopener" target="_blank" href="https://web.dev/button-name/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="bypass">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>The page contains a heading, skip link, or landmark region</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. <a rel="noopener" target="_blank" href="https://web.dev/bypass/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="color-contrast">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Background and foreground colors have a sufficient contrast ratio</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Low-contrast text is difficult or impossible for many users to read. <a rel="noopener" target="_blank" href="https://web.dev/color-contrast/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="document-title">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Document has a <code>&lt;title&gt;</code> element</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. <a rel="noopener" target="_blank" href="https://web.dev/document-title/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="duplicate-id-active">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[id]</code> attributes on active, focusable elements are unique</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>All focusable elements must have a unique `id` to ensure that they're visible to assistive technologies. <a rel="noopener" target="_blank" href="https://web.dev/duplicate-id-active/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="heading-order">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Heading elements appear in a sequentially-descending order</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. <a rel="noopener" target="_blank" href="https://web.dev/heading-order/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="html-has-lang">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>&lt;html&gt;</code> element has a <code>[lang]</code> attribute</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>If a page doesn't specify a lang attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. <a rel="noopener" target="_blank" href="https://web.dev/html-has-lang/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="html-lang-valid">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>&lt;html&gt;</code> element has a valid value for its <code>[lang]</code> attribute</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Specifying a valid <a rel="noopener" target="_blank" href="https://www.w3.org/International/questions/qa-choosing-language-tags#question">BCP 47 language</a> helps screen readers announce text properly. <a rel="noopener" target="_blank" href="https://web.dev/html-lang-valid/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="image-alt">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Image elements have <code>[alt]</code> attributes</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. <a rel="noopener" target="_blank" href="https://web.dev/image-alt/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="link-name">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Links have a discernible name</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. <a rel="noopener" target="_blank" href="https://web.dev/link-name/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="list">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Lists contain only <code>&lt;li&gt;</code> elements and script supporting elements (<code>&lt;script&gt;</code> and <code>&lt;template&gt;</code>).</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. <a rel="noopener" target="_blank" href="https://web.dev/list/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="listitem">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>List items (<code>&lt;li&gt;</code>) are contained within <code>&lt;ul&gt;</code> or <code>&lt;ol&gt;</code> parent elements</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Screen readers require list items (`&lt;li&gt;`) to be contained within a parent `&lt;ul&gt;` or `&lt;ol&gt;` to be announced properly. <a rel="noopener" target="_blank" href="https://web.dev/listitem/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="meta-viewport">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[user-scalable="no"]</code> is not used in the <code>&lt;meta name="viewport"&gt;</code> element and the <code>[maximum-scale]</code> attribute is not less than 5.</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. <a rel="noopener" target="_blank" href="https://web.dev/meta-viewport/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div></details><details class="lh-clump lh-audit-group lh-clump--notapplicable">
+    <summary>
+      <div class="lh-audit-group__summary">
+        <div class="lh-audit-group__header">
+          <span class="lh-audit-group__title">Not applicable</span>
+          <span class="lh-audit-group__itemcount">(26)</span>
+          <!-- .lh-audit-group__description will be added here -->
+          <!-- .lh-metrics-toggle will be added here -->
+        </div>
+        <div class=""></div>
+      <svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+    </summary>
+  <div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="accesskeys">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[accesskey]</code> values are unique</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. <a rel="noopener" target="_blank" href="https://web.dev/accesskeys/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="aria-command-name">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>button</code>, <code>link</code>, and <code>menuitem</code> elements have accessible names</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. <a rel="noopener" target="_blank" href="https://web.dev/aria-name/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="aria-input-field-name">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>ARIA input fields have accessible names</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. <a rel="noopener" target="_blank" href="https://web.dev/aria-name/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="aria-meter-name">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>ARIA <code>meter</code> elements have accessible names</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. <a rel="noopener" target="_blank" href="https://web.dev/aria-name/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="aria-progressbar-name">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>ARIA <code>progressbar</code> elements have accessible names</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. <a rel="noopener" target="_blank" href="https://web.dev/aria-name/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="aria-required-attr">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[role]</code>s have all required <code>[aria-*]</code> attributes</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Some ARIA roles have required attributes that describe the state of the element to screen readers. <a rel="noopener" target="_blank" href="https://web.dev/aria-required-attr/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="aria-required-children">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Elements with an ARIA <code>[role]</code> that require children to contain a specific <code>[role]</code> have all required children.</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. <a rel="noopener" target="_blank" href="https://web.dev/aria-required-children/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="aria-required-parent">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[role]</code>s are contained by their required parent element</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. <a rel="noopener" target="_blank" href="https://web.dev/aria-required-parent/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="aria-roles">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[role]</code> values are valid</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>ARIA roles must have valid values in order to perform their intended accessibility functions. <a rel="noopener" target="_blank" href="https://web.dev/aria-roles/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="aria-toggle-field-name">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>ARIA toggle fields have accessible names</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. <a rel="noopener" target="_blank" href="https://web.dev/aria-name/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="aria-tooltip-name">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>ARIA <code>tooltip</code> elements have accessible names</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. <a rel="noopener" target="_blank" href="https://web.dev/aria-name/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="aria-treeitem-name">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>ARIA <code>treeitem</code> elements have accessible names</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. <a rel="noopener" target="_blank" href="https://web.dev/aria-name/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="definition-list">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>&lt;dl&gt;</code>'s contain only properly-ordered <code>&lt;dt&gt;</code> and <code>&lt;dd&gt;</code> groups, <code>&lt;script&gt;</code>, <code>&lt;template&gt;</code> or <code>&lt;div&gt;</code> elements.</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. <a rel="noopener" target="_blank" href="https://web.dev/definition-list/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="dlitem">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Definition list items are wrapped in <code>&lt;dl&gt;</code> elements</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Definition list items (`&lt;dt&gt;` and `&lt;dd&gt;`) must be wrapped in a parent `&lt;dl&gt;` element to ensure that screen readers can properly announce them. <a rel="noopener" target="_blank" href="https://web.dev/dlitem/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="duplicate-id-aria">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>ARIA IDs are unique</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. <a rel="noopener" target="_blank" href="https://web.dev/duplicate-id-aria/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="form-field-multiple-labels">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>No form fields have multiple labels</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. <a rel="noopener" target="_blank" href="https://web.dev/form-field-multiple-labels/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="frame-title">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>&lt;frame&gt;</code> or <code>&lt;iframe&gt;</code> elements have a title</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Screen reader users rely on frame titles to describe the contents of frames. <a rel="noopener" target="_blank" href="https://web.dev/frame-title/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="input-image-alt">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>&lt;input type="image"&gt;</code> elements have <code>[alt]</code> text</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>When an image is being used as an `&lt;input&gt;` button, providing alternative text can help screen reader users understand the purpose of the button. <a rel="noopener" target="_blank" href="https://web.dev/input-image-alt/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="label">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Form elements have associated labels</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Labels ensure that form controls are announced properly by assistive technologies, like screen readers. <a rel="noopener" target="_blank" href="https://web.dev/label/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="meta-refresh">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>The document does not use <code>&lt;meta http-equiv="refresh"&gt;</code></span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. <a rel="noopener" target="_blank" href="https://web.dev/meta-refresh/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="object-alt">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>&lt;object&gt;</code> elements have <code>[alt]</code> text</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Screen readers cannot translate non-text content. Adding alt text to `&lt;object&gt;` elements helps screen readers convey meaning to users. <a rel="noopener" target="_blank" href="https://web.dev/object-alt/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="tabindex">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>No element has a <code>[tabindex]</code> value greater than 0</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. <a rel="noopener" target="_blank" href="https://web.dev/tabindex/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="td-headers-attr">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Cells in a <code>&lt;table&gt;</code> element that use the <code>[headers]</code> attribute refer to table cells within the same table.</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Screen readers have features to make navigating tables easier. Ensuring `&lt;td&gt;` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. <a rel="noopener" target="_blank" href="https://web.dev/td-headers-attr/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="th-has-data-cells">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>&lt;th&gt;</code> elements and elements with <code>[role="columnheader"/"rowheader"]</code> have data cells they describe.</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. <a rel="noopener" target="_blank" href="https://web.dev/th-has-data-cells/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="valid-lang">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>[lang]</code> attributes have a valid value</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Specifying a valid <a rel="noopener" target="_blank" href="https://www.w3.org/International/questions/qa-choosing-language-tags#question">BCP 47 language</a> on elements helps ensure that text is pronounced correctly by a screen reader. <a rel="noopener" target="_blank" href="https://web.dev/valid-lang/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="video-caption">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span><code>&lt;video&gt;</code> elements contain a <code>&lt;track&gt;</code> element with <code>[kind="captions"]</code></span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>When a video provides a caption it is easier for deaf and hearing impaired users to access its information. <a rel="noopener" target="_blank" href="https://web.dev/video-caption/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div></details></div></div><div class="lh-category-wrapper"><div class="lh-category"><span class="lh-permalink" id="best-practices"></span>
+  <div class="lh-category-header">
+    <div class="lh-score__gauge" role="heading" aria-level="2">
+  <a href="#best-practices" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">Best Practices</div>
+  </a>
+</div>
+    <div class="lh-category-header__description"></div>
+  </div>
+<div class="lh-clump--failed"><div class="lh-audit-group lh-audit-group--best-practices-trust-safety"><div class="lh-audit-group__header"><span class="lh-audit-group__title">Trust and Safety</span></div><div class="lh-audit lh-audit--informative" id="csp-xss">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Ensure CSP is effective against XSS attacks</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. <a rel="noopener" target="_blank" href="https://web.dev/strict-csp/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a></span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <table class="lh-table lh-details"><thead><tr><th class="lh-table-column--text"><div class="lh-text">Description</div></th><th class="lh-table-column--code"><div class="lh-text">Directive</div></th><th class="lh-table-column--text"><div class="lh-text">Severity</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">No CSP found in enforcement mode</div></td><td class="lh-table-column--empty"></td><td class="lh-table-column--text"><div class="lh-text">High</div></td></tr></tbody></table></details>
+  </div></div></div><details class="lh-clump lh-audit-group lh-clump--passed">
+    <summary>
+      <div class="lh-audit-group__summary">
+        <div class="lh-audit-group__header">
+          <span class="lh-audit-group__title">Passed audits</span>
+          <span class="lh-audit-group__itemcount">(17)</span>
+          <!-- .lh-audit-group__description will be added here -->
+          <!-- .lh-metrics-toggle will be added here -->
+        </div>
+        <div class=""></div>
+      <svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+    </summary>
+  <div class="lh-audit lh-audit--binary lh-audit--pass" id="is-on-https">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Uses HTTPS</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding <a rel="noopener" target="_blank" href="https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content?utm_source=lighthouse&amp;utm_medium=cli">mixed content</a>, where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. <a rel="noopener" target="_blank" href="https://web.dev/is-on-https/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="external-anchors-use-rel-noopener">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Links to cross-origin destinations are safe</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Add `rel="noopener"` or `rel="noreferrer"` to any external links to improve performance and prevent security vulnerabilities. <a rel="noopener" target="_blank" href="https://web.dev/external-anchors-use-rel-noopener/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="geolocation-on-start">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoids requesting the geolocation permission on page load</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. <a rel="noopener" target="_blank" href="https://web.dev/geolocation-on-start/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="notification-on-start">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoids requesting the notification permission on page load</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. <a rel="noopener" target="_blank" href="https://web.dev/notification-on-start/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="no-vulnerable-libraries">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoids front-end JavaScript libraries with known security vulnerabilities</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Some third-party scripts may contain known security vulnerabilities that are easily identified and exploited by attackers. <a rel="noopener" target="_blank" href="https://web.dev/no-vulnerable-libraries/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="password-inputs-can-be-pasted-into">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Allows users to paste into password fields</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Preventing password pasting undermines good security policy. <a rel="noopener" target="_blank" href="https://web.dev/password-inputs-can-be-pasted-into/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="image-aspect-ratio">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Displays images with correct aspect ratio</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Image display dimensions should match natural aspect ratio. <a rel="noopener" target="_blank" href="https://web.dev/image-aspect-ratio/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="image-size-responsive">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Serves images with appropriate resolution</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. <a rel="noopener" target="_blank" href="https://web.dev/serve-responsive-images/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="doctype">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Page has the HTML doctype</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Specifying a doctype prevents the browser from switching to quirks-mode. <a rel="noopener" target="_blank" href="https://web.dev/doctype/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="charset">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Properly defines charset</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>A character encoding declaration is required. It can be done with a `&lt;meta&gt;` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. <a rel="noopener" target="_blank" href="https://web.dev/charset/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="no-unload-listeners">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoids <code>unload</code> event listeners</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>The `unload` event does not fire reliably and listening for it can prevent browser optimizations like the Back-Forward Cache. Consider using the `pagehide` or `visibilitychange` events instead. <a rel="noopener" target="_blank" href="https://developers.google.com/web/updates/2018/07/page-lifecycle-api?utm_source=lighthouse&amp;utm_medium=cli#the-unload-event">Learn more</a></span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="appcache-manifest">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoids Application Cache</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Application Cache is deprecated. <a rel="noopener" target="_blank" href="https://web.dev/appcache-manifest/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="js-libraries">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Detected JavaScript libraries</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>All front-end JavaScript libraries detected on the page. <a rel="noopener" target="_blank" href="https://web.dev/js-libraries/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <table class="lh-table lh-details"><thead><tr><th class="lh-table-column--text"><div class="lh-text">Name</div></th><th class="lh-table-column--text"><div class="lh-text">Version</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--text"><div class="lh-text">FuseJS</div></td><td class="lh-table-column--empty"></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="deprecations">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Avoids deprecated APIs</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Deprecated APIs will eventually be removed from the browser. <a rel="noopener" target="_blank" href="https://web.dev/deprecations/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="errors-in-console">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>No browser errors logged to the console</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. <a rel="noopener" target="_blank" href="https://web.dev/errors-in-console/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a></span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="valid-source-maps">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Page has valid source maps</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. <a rel="noopener" target="_blank" href="https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="inspector-issues">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>No issues in the <code>Issues</code> panel in Chrome Devtools</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div></details><details class="lh-clump lh-audit-group lh-clump--notapplicable">
+    <summary>
+      <div class="lh-audit-group__summary">
+        <div class="lh-audit-group__header">
+          <span class="lh-audit-group__title">Not applicable</span>
+          <span class="lh-audit-group__itemcount">(1)</span>
+          <!-- .lh-audit-group__description will be added here -->
+          <!-- .lh-metrics-toggle will be added here -->
+        </div>
+        <div class=""></div>
+      <svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+    </summary>
+  <div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="preload-fonts">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Fonts with <code>font-display: optional</code> are preloaded</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Preload `optional` fonts so first-time visitors may use them. <a rel="noopener" target="_blank" href="https://web.dev/preload-optional-fonts/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a></span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div></details></div></div><div class="lh-category-wrapper"><div class="lh-category"><span class="lh-permalink" id="seo"></span>
+  <div class="lh-category-header">
+    <div class="lh-score__gauge" role="heading" aria-level="2">
+  <a href="#seo" class="lh-gauge__wrapper lh-gauge__wrapper--pass">
+    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->
+    <div class="lh-gauge__svg-wrapper">
+      <svg viewBox="0 0 120 120" class="lh-gauge">
+        <circle class="lh-gauge-base" r="56" cx="60" cy="60" stroke-width="8"></circle>
+        <circle class="lh-gauge-arc" r="56" cx="60" cy="60" stroke-width="8" style="transform: rotate(-87.95372216024705deg); stroke-dasharray: 351.85837720205683px, 351.85837720205683px;"></circle>
+      </svg>
+    </div>
+    <div class="lh-gauge__percentage">100</div>
+    <!-- TODO: should likely be an h2  -->
+    <div class="lh-gauge__label">SEO</div>
+  </a>
+</div>
+    <div class="lh-category-header__description"><span>These checks ensure that your page is optimized for search engine results ranking. There are additional factors Lighthouse does not check that may affect your search ranking. <a rel="noopener" target="_blank" href="https://support.google.com/webmasters/answer/35769">Learn more</a>.</span></div>
+  </div>
+<details class="lh-clump lh-audit-group lh-clump--manual">
+    <summary>
+      <div class="lh-audit-group__summary">
+        <div class="lh-audit-group__header">
+          <span class="lh-audit-group__title">Additional items to manually check</span>
+          <span class="lh-audit-group__itemcount">(1)</span>
+          <!-- .lh-audit-group__description will be added here -->
+          <!-- .lh-metrics-toggle will be added here -->
+        <span class="lh-audit-group__description">Run these additional validators on your site to check additional SEO best practices.</span></div>
+        <div class=""></div>
+      <svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+    </summary>
+  <div class="lh-audit lh-audit--manual lh-audit--pass" id="structured-data">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Structured data is valid</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Run the <a rel="noopener" target="_blank" href="https://search.google.com/structured-data/testing-tool/">Structured Data Testing Tool</a> and the <a rel="noopener" target="_blank" href="http://linter.structured-data.org/">Structured Data Linter</a> to validate structured data. <a rel="noopener" target="_blank" href="https://web.dev/structured-data/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div></details><details class="lh-clump lh-audit-group lh-clump--passed">
+    <summary>
+      <div class="lh-audit-group__summary">
+        <div class="lh-audit-group__header">
+          <span class="lh-audit-group__title">Passed audits</span>
+          <span class="lh-audit-group__itemcount">(13)</span>
+          <!-- .lh-audit-group__description will be added here -->
+          <!-- .lh-metrics-toggle will be added here -->
+        </div>
+        <div class=""></div>
+      <svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+    </summary>
+  <div class="lh-audit lh-audit--binary lh-audit--pass" id="viewport">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Has a <code>&lt;meta name="viewport"&gt;</code> tag with <code>width</code> or <code>initial-scale</code></span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Add a `&lt;meta name="viewport"&gt;` tag to optimize your app for mobile screens. <a rel="noopener" target="_blank" href="https://web.dev/viewport/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="document-title">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Document has a <code>&lt;title&gt;</code> element</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. <a rel="noopener" target="_blank" href="https://web.dev/document-title/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="meta-description">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Document has a meta description</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Meta descriptions may be included in search results to concisely summarize page content. <a rel="noopener" target="_blank" href="https://web.dev/meta-description/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="http-status-code">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Page has successful HTTP status code</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Pages with unsuccessful HTTP status codes may not be indexed properly. <a rel="noopener" target="_blank" href="https://web.dev/http-status-code/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="link-text">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Links have descriptive text</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Descriptive link text helps search engines understand your content. <a rel="noopener" target="_blank" href="https://web.dev/link-text/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="crawlable-anchors">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Links are crawlable</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. <a rel="noopener" target="_blank" href="https://support.google.com/webmasters/answer/9112205">Learn More</a></span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="is-crawlable">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Page isn’t blocked from indexing</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Search engines are unable to include your pages in search results if they don't have permission to crawl them. <a rel="noopener" target="_blank" href="https://web.dev/is-crawable/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="image-alt">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Image elements have <code>[alt]</code> attributes</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. <a rel="noopener" target="_blank" href="https://web.dev/image-alt/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="hreflang">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Document has a valid <code>hreflang</code></span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>hreflang links tell search engines what version of a page they should list in search results for a given language or region. <a rel="noopener" target="_blank" href="https://web.dev/hreflang/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="canonical">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Document has a valid <code>rel=canonical</code></span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Canonical links suggest which URL to show in search results. <a rel="noopener" target="_blank" href="https://web.dev/canonical/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="font-size">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Document uses legible font sizes</span></span>
+            <span class="lh-audit__display-text">99.75% legible text</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have &gt;60% of page text ≥12px. <a rel="noopener" target="_blank" href="https://web.dev/font-size/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    
+  
+  <div class="lh-3p-filter">
+    <label class="lh-3p-filter-label" for="lh-3p-filter-label--8">
+      <input type="checkbox" class="lh-3p-filter-input" checked="" id="lh-3p-filter-label--8" disabled="">
+      <span class="lh-3p-ui-string">Show 3rd-party resources</span> (<span class="lh-3p-filter-count">0</span>)
+    </label>
+  </div>
+<table class="lh-table lh-details"><thead><tr><th class="lh-table-column--source-location"><div class="lh-text">Source</div></th><th class="lh-table-column--code"><div class="lh-text">Selector</div></th><th class="lh-table-column--text"><div class="lh-text">% of Page Text</div></th><th class="lh-table-column--text"><div class="lh-text">Font Size</div></th></tr></thead><tbody><tr class="lh-row--even"><td class="lh-table-column--source-location"><div class="lh-text__url lh-source-location" title="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" data-url="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" data-source-url="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" data-source-line="0" data-source-column="28538"><a rel="noopener" target="_blank" href="http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css" class="lh-link">…css/main.bundle.min.6783e34….css:1:28538</a><div class="lh-text lh-text__url-host">(localhost)</div></div></td><td class="lh-table-column--code"><pre class="lh-code">.text-\[0\.6rem\]</pre></td><td class="lh-table-column--text"><div class="lh-text">0.25%</div></td><td class="lh-table-column--text"><div class="lh-text">9.6px</div></td></tr><tr class="lh-row--odd"><td class="lh-table-column--source-location"><pre class="lh-code">Legible text</pre></td><td class="lh-table-column--code"><pre class="lh-code"></pre></td><td class="lh-table-column--text"><div class="lh-text">99.75%</div></td><td class="lh-table-column--text"><div class="lh-text">≥ 12px</div></td></tr></tbody></table></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="plugins">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Document avoids plugins</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Search engines can't index plugin content, and many devices restrict plugins or don't support them. <a rel="noopener" target="_blank" href="https://web.dev/plugins/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="tap-targets">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Tap targets are sized appropriately</span></span>
+            <span class="lh-audit__display-text">100% appropriately sized tap targets</span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Interactive elements like buttons and links should be large enough (48x48px), and have enough space around them, to be easy enough to tap without overlapping onto other elements. <a rel="noopener" target="_blank" href="https://web.dev/tap-targets/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div></details><details class="lh-clump lh-audit-group lh-clump--notapplicable">
+    <summary>
+      <div class="lh-audit-group__summary">
+        <div class="lh-audit-group__header">
+          <span class="lh-audit-group__title">Not applicable</span>
+          <span class="lh-audit-group__itemcount">(1)</span>
+          <!-- .lh-audit-group__description will be added here -->
+          <!-- .lh-metrics-toggle will be added here -->
+        </div>
+        <div class=""></div>
+      <svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+    </summary>
+  <div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="robots-txt">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>robots.txt is valid</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. <a rel="noopener" target="_blank" href="https://web.dev/robots-txt/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div></details></div></div><div class="lh-category-wrapper"><div class="lh-category"><span class="lh-permalink" id="pwa"></span>
+  <div class="lh-category-header">
+    <div class="lh-score__gauge" role="heading" aria-level="2">
+  
+
+  <a href="#pwa" class="lh-gauge__wrapper lh-gauge--pwa__wrapper lh-badged--pwa-installable" title="Installable: 1/1, PWA Optimized: 6/8">
+    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" class="lh-gauge lh-gauge--pwa">
+      <defs>
+        <linearGradient id="lh-gauge--pwa__check-circle__gradient-2" x1="50%" y1="0%" x2="50%" y2="100%">
+          <stop stop-color="#00C852" offset="0%"></stop>
+          <stop stop-color="#009688" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient id="lh-gauge--pwa__installable__shadow-gradient-2" x1="76.056%" x2="24.111%" y1="82.995%" y2="24.735%">
+          <stop stop-color="#A5D6A7" offset="0%"></stop>
+          <stop stop-color="#80CBC4" offset="100%"></stop>
+        </linearGradient>
+
+        <g id="lh-gauge--pwa__installable-badge-2">
+          <circle fill="#FFFFFF" cx="10" cy="10" r="10"></circle>
+          <path fill="#009688" d="M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z"></path>
+        </g>
+      </defs>
+
+      <g stroke="none" fill-rule="nonzero">
+        <!-- Background and PWA logo (color by default) -->
+        <circle class="lh-gauge--pwa__disc" cx="30" cy="30" r="30"></circle>
+        <g class="lh-gauge--pwa__logo">
+          <path class="lh-gauge--pwa__logo--secondary-color" d="M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z"></path>
+          <path class="lh-gauge--pwa__logo--primary-color" d="M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z"></path>
+          <path class="lh-gauge--pwa__logo--secondary-color" fill-rule="nonzero" d="M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z"></path>
+        </g>
+
+        <!-- No badges. -->
+        <rect class="lh-gauge--pwa__component lh-gauge--pwa__na-line" fill="#FFFFFF" x="20" y="32" width="20" height="4" rx="2"></rect>
+
+        <!-- Just installable. -->
+        <g class="lh-gauge--pwa__component lh-gauge--pwa__installable-badge" transform="translate(20, 29)">
+          <path fill="url(#lh-gauge--pwa__installable__shadow-gradient-2)" d="M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z"></path>
+          <use href="#lh-gauge--pwa__installable-badge-2"></use>
+        </g>
+
+        <!-- Full PWA. -->
+        <g class="lh-gauge--pwa__component lh-gauge--pwa__check-circle" transform="translate(18, 28)">
+          <circle fill="#FFFFFF" cx="12" cy="12" r="12"></circle>
+          <path fill="url(#lh-gauge--pwa__check-circle__gradient-2)" d="M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"></path>
+        </g>
+      </g>
+    </svg>
+
+    <div class="lh-gauge__label">Progressive Web App</div>
+  </a>
+</div>
+    <div class="lh-category-header__description"><span>These checks validate the aspects of a Progressive Web App. <a rel="noopener" target="_blank" href="https://developers.google.com/web/progressive-web-apps/checklist?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+  </div>
+<div><div class="lh-audit-group lh-audit-group--pwa-installable lh-badged"><div class="lh-audit-group__header"><span class="lh-audit-group__title">Installable</span></div><div class="lh-audit lh-audit--binary lh-audit--pass" id="installable-manifest">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Web app manifest and service worker meet the installability requirements</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. With proper service worker and manifest implementations, browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. <a rel="noopener" target="_blank" href="https://web.dev/installable-manifest/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    <span class="lh-details"></span></details>
+  </div></div><div class="lh-audit-group lh-audit-group--pwa-optimized"><div class="lh-audit-group__header"><span class="lh-audit-group__title">PWA Optimized</span></div><div class="lh-audit lh-audit--binary lh-audit--fail" id="service-worker">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Does not register a service worker that controls page and <code>start_url</code></span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. <a rel="noopener" target="_blank" href="https://web.dev/service-worker/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--notapplicable lh-audit--pass" id="redirects-http">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Redirects HTTP traffic to HTTPS</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>If you've already set up HTTPS, make sure that you redirect all HTTP traffic to HTTPS in order to enable secure web features for all your users. <a rel="noopener" target="_blank" href="https://web.dev/redirects-http/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="splash-screen">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Configured for a custom splash screen</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. <a rel="noopener" target="_blank" href="https://web.dev/splash-screen/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--fail" id="themed-omnibox">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Does not set a theme color for the address bar.</span><div class="lh-audit-explanation">Failures: No `&lt;meta name="theme-color"&gt;` tag found.</div></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>The browser address bar can be themed to match your site. <a rel="noopener" target="_blank" href="https://web.dev/themed-omnibox/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="content-width">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Content is sized correctly for the viewport</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. <a rel="noopener" target="_blank" href="https://web.dev/content-width/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="viewport">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Has a <code>&lt;meta name="viewport"&gt;</code> tag with <code>width</code> or <code>initial-scale</code></span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Add a `&lt;meta name="viewport"&gt;` tag to optimize your app for mobile screens. <a rel="noopener" target="_blank" href="https://web.dev/viewport/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="apple-touch-icon">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Provides a valid <code>apple-touch-icon</code></span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>For ideal appearance on iOS when users add a progressive web app to the home screen, define an `apple-touch-icon`. It must point to a non-transparent 192px (or 180px) square PNG. <a rel="noopener" target="_blank" href="https://web.dev/apple-touch-icon/?utm_source=lighthouse&amp;utm_medium=cli">Learn More</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--binary lh-audit--pass" id="maskable-icon">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Manifest has a maskable icon</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>A maskable icon ensures that the image fills the entire shape without being letterboxed when installing the app on a device. <a rel="noopener" target="_blank" href="https://web.dev/maskable-icon-audit/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div></div></div><details class="lh-clump lh-audit-group lh-clump--manual">
+    <summary>
+      <div class="lh-audit-group__summary">
+        <div class="lh-audit-group__header">
+          <span class="lh-audit-group__title">Additional items to manually check</span>
+          <span class="lh-audit-group__itemcount">(3)</span>
+          <!-- .lh-audit-group__description will be added here -->
+          <!-- .lh-metrics-toggle will be added here -->
+        <span class="lh-audit-group__description">These checks are required by the baseline <a rel="noopener" target="_blank" href="https://developers.google.com/web/progressive-web-apps/checklist?utm_source=lighthouse&amp;utm_medium=cli">PWA Checklist</a> but are not automatically checked by Lighthouse. They do not affect your score but it's important that you verify them manually.</span></div>
+        <div class=""></div>
+      <svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+    </summary>
+  <div class="lh-audit lh-audit--manual lh-audit--pass" id="pwa-cross-browser">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Site works cross-browser</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>To reach the most number of users, sites should work across every major browser. <a rel="noopener" target="_blank" href="https://web.dev/pwa-cross-browser/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--manual lh-audit--pass" id="pwa-page-transitions">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Page transitions don't feel like they block on the network</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Transitions should feel snappy as you tap around, even on a slow network. This experience is key to a user's perception of performance. <a rel="noopener" target="_blank" href="https://web.dev/pwa-page-transitions/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div><div class="lh-audit lh-audit--manual lh-audit--pass" id="pwa-each-page-has-url">
+    <details class="lh-expandable-details">
+      <summary>
+        <div class="lh-audit__header lh-expandable-details__summary">
+          <span class="lh-audit__score-icon"></span>
+          <span class="lh-audit__title-and-text">
+            <span class="lh-audit__title"><span>Each page has a URL</span></span>
+            <span class="lh-audit__display-text"></span>
+          </span>
+          <div class="lh-chevron-container"><svg class="lh-chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+    <g class="lh-chevron__lines">
+      <path class="lh-chevron__line lh-chevron__line-left" d="M10 50h40"></path>
+      <path class="lh-chevron__line lh-chevron__line-right" d="M90 50H50"></path>
+    </g>
+  </svg></div>
+        </div>
+      </summary>
+      <div class="lh-audit__description"><span>Ensure individual pages are deep linkable via URL and that URLs are unique for the purpose of shareability on social media. <a rel="noopener" target="_blank" href="https://web.dev/pwa-each-page-has-url/?utm_source=lighthouse&amp;utm_medium=cli">Learn more</a>.</span></div>
+      <div class="lh-audit__stackpacks"></div>
+    </details>
+  </div></details></div></div></div>
+  <style>
+    .lh-footer {
+      padding: var(--footer-padding-vertical) calc(var(--default-padding) * 2);
+      max-width: var(--report-width);
+      margin: 0 auto;
+    }
+    .lh-footer .lh-generated {
+      text-align: center;
+    }
+    .lh-env__title {
+      font-size: var(--env-item-font-size-big);
+      line-height: var(--env-item-line-height-big);
+      text-align: center;
+      padding: var(--score-container-padding);
+    }
+    .lh-env {
+      padding: var(--default-padding) 0;
+    }
+    .lh-env__items {
+      padding-left: 16px;
+      margin: 0 0 var(--audits-margin-bottom);
+      padding: 0;
+    }
+    .lh-env__items .lh-env__item:nth-child(2n) {
+      background-color: var(--env-item-background-color);
+    }
+    .lh-env__item {
+      display: flex;
+      padding: var(--env-item-padding);
+      position: relative;
+    }
+    span.lh-env__name {
+      font-weight: bold;
+      min-width: var(--env-name-min-width);
+      flex: 0.5;
+      padding: 0 8px;
+    }
+    span.lh-env__description {
+      text-align: left;
+      flex: 1;
+    }
+  </style>
+  <footer class="lh-footer">
+    <!-- TODO(i18n): localize runtime settings -->
+    <div class="lh-env">
+      <div class="lh-env__title">Runtime Settings</div>
+      <ul class="lh-env__items" id="runtime-settings">
+        <template id="tmpl-lh-env__items">
+          <li class="lh-env__item">
+            <span class="lh-env__name"></span>
+            <span class="lh-env__description"></span>
+          </li>
+        </template>
+      
+          <li class="lh-env__item">
+            <span class="lh-env__name">URL</span>
+            <span class="lh-env__description">http://localhost:8008/congo/samples/emoji/</span>
+          </li>
+        
+          <li class="lh-env__item">
+            <span class="lh-env__name">Fetch Time</span>
+            <span class="lh-env__description">Jan 19, 2022, 7:17 PM GMT+11</span>
+          </li>
+        
+          <li class="lh-env__item">
+            <span class="lh-env__name">Device</span>
+            <span class="lh-env__description">Emulated Moto G4</span>
+          </li>
+        
+          <li class="lh-env__item">
+            <span class="lh-env__name">Network throttling</span>
+            <span class="lh-env__description">150&nbsp;ms TCP RTT, 1,638.4&nbsp;Kbps throughput (Simulated)</span>
+          </li>
+        
+          <li class="lh-env__item">
+            <span class="lh-env__name">CPU throttling</span>
+            <span class="lh-env__description">4x slowdown (Simulated)</span>
+          </li>
+        
+          <li class="lh-env__item">
+            <span class="lh-env__name">Channel</span>
+            <span class="lh-env__description">cli</span>
+          </li>
+        
+          <li class="lh-env__item">
+            <span class="lh-env__name">User agent (host)</span>
+            <span class="lh-env__description">Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/96.0.4664.110 Safari/537.36</span>
+          </li>
+        
+          <li class="lh-env__item">
+            <span class="lh-env__name">User agent (network)</span>
+            <span class="lh-env__description">Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4420.0 Mobile Safari/537.36 Chrome-Lighthouse</span>
+          </li>
+        
+          <li class="lh-env__item">
+            <span class="lh-env__name">CPU/Memory Power</span>
+            <span class="lh-env__description">1949</span>
+          </li>
+        
+          <li class="lh-env__item">
+            <span class="lh-env__name">Axe version</span>
+            <span class="lh-env__description">4.2.1</span>
+          </li>
+        </ul>
+    </div>
+
+    <div class="lh-generated">
+      <!-- TODO(i18n): use ICU replacement to replace version w/o concatenation. -->
+      Generated by <b>Lighthouse</b> <span class="lh-footer__version">8.0.0</span> |
+      <a href="https://github.com/GoogleChrome/Lighthouse/issues" target="_blank" rel="noopener" class="lh-footer__version_issue">File an issue</a>
+    </div>
+  </footer>
+</div></div></main>
+
+  <div id="lh-log"></div>
+
+  <script>/**
+ * @license
+ * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'use strict';
+
+/* globals self */
+
+/** @template T @typedef {import('./i18n')<T>} I18n */
+
+const ELLIPSIS = '\u2026';
+const NBSP = '\xa0';
+const PASS_THRESHOLD = 0.9;
+const SCREENSHOT_PREFIX = 'data:image/jpeg;base64,';
+
+const RATINGS = {
+  PASS: {label: 'pass', minScore: PASS_THRESHOLD},
+  AVERAGE: {label: 'average', minScore: 0.5},
+  FAIL: {label: 'fail'},
+  ERROR: {label: 'error'},
+};
+
+// 25 most used tld plus one domains (aka public suffixes) from http archive.
+// @see https://github.com/GoogleChrome/lighthouse/pull/5065#discussion_r191926212
+// The canonical list is https://publicsuffix.org/learn/ but we're only using subset to conserve bytes
+const listOfTlds = [
+  'com', 'co', 'gov', 'edu', 'ac', 'org', 'go', 'gob', 'or', 'net', 'in', 'ne', 'nic', 'gouv',
+  'web', 'spb', 'blog', 'jus', 'kiev', 'mil', 'wi', 'qc', 'ca', 'bel', 'on',
+];
+
+class Util {
+  static get PASS_THRESHOLD() {
+    return PASS_THRESHOLD;
+  }
+
+  static get MS_DISPLAY_VALUE() {
+    return `%10d${NBSP}ms`;
+  }
+
+  /**
+   * Returns a new LHR that's reshaped for slightly better ergonomics within the report rendereer.
+   * Also, sets up the localized UI strings used within renderer and makes changes to old LHRs to be
+   * compatible with current renderer.
+   * The LHR passed in is not mutated.
+   * TODO(team): we all agree the LHR shape change is technical debt we should fix
+   * @param {LH.Result} result
+   * @return {LH.ReportResult}
+   */
+  static prepareReportResult(result) {
+    // If any mutations happen to the report within the renderers, we want the original object untouched
+    const clone = /** @type {LH.ReportResult} */ (JSON.parse(JSON.stringify(result)));
+
+    // If LHR is older (≤3.0.3), it has no locale setting. Set default.
+    if (!clone.configSettings.locale) {
+      clone.configSettings.locale = 'en';
+    }
+    if (!clone.configSettings.formFactor) {
+      // @ts-expect-error fallback handling for emulatedFormFactor
+      clone.configSettings.formFactor = clone.configSettings.emulatedFormFactor;
+    }
+
+    for (const audit of Object.values(clone.audits)) {
+      // Turn 'not-applicable' (LHR <4.0) and 'not_applicable' (older proto versions)
+      // into 'notApplicable' (LHR ≥4.0).
+      // @ts-expect-error tsc rightly flags that these values shouldn't occur.
+      // eslint-disable-next-line max-len
+      if (audit.scoreDisplayMode === 'not_applicable' || audit.scoreDisplayMode === 'not-applicable') {
+        audit.scoreDisplayMode = 'notApplicable';
+      }
+
+      if (audit.details) {
+        // Turn `auditDetails.type` of undefined (LHR <4.2) and 'diagnostic' (LHR <5.0)
+        // into 'debugdata' (LHR ≥5.0).
+        // @ts-expect-error tsc rightly flags that these values shouldn't occur.
+        if (audit.details.type === undefined || audit.details.type === 'diagnostic') {
+          // @ts-expect-error details is of type never.
+          audit.details.type = 'debugdata';
+        }
+
+        // Add the jpg data URL prefix to filmstrip screenshots without them (LHR <5.0).
+        if (audit.details.type === 'filmstrip') {
+          for (const screenshot of audit.details.items) {
+            if (!screenshot.data.startsWith(SCREENSHOT_PREFIX)) {
+              screenshot.data = SCREENSHOT_PREFIX + screenshot.data;
+            }
+          }
+        }
+      }
+    }
+
+    // For convenience, smoosh all AuditResults into their auditRef (which has just weight & group)
+    if (typeof clone.categories !== 'object') throw new Error('No categories provided.');
+
+    /** @type {Map<string, Array<LH.ReportResult.AuditRef>>} */
+    const relevantAuditToMetricsMap = new Map();
+
+    for (const category of Object.values(clone.categories)) {
+      // Make basic lookup table for relevantAudits
+      category.auditRefs.forEach(metricRef => {
+        if (!metricRef.relevantAudits) return;
+        metricRef.relevantAudits.forEach(auditId => {
+          const arr = relevantAuditToMetricsMap.get(auditId) || [];
+          arr.push(metricRef);
+          relevantAuditToMetricsMap.set(auditId, arr);
+        });
+      });
+
+      category.auditRefs.forEach(auditRef => {
+        const result = clone.audits[auditRef.id];
+        auditRef.result = result;
+
+        // Attach any relevantMetric auditRefs
+        if (relevantAuditToMetricsMap.has(auditRef.id)) {
+          auditRef.relevantMetrics = relevantAuditToMetricsMap.get(auditRef.id);
+        }
+
+        // attach the stackpacks to the auditRef object
+        if (clone.stackPacks) {
+          clone.stackPacks.forEach(pack => {
+            if (pack.descriptions[auditRef.id]) {
+              auditRef.stackPacks = auditRef.stackPacks || [];
+              auditRef.stackPacks.push({
+                title: pack.title,
+                iconDataURL: pack.iconDataURL,
+                description: pack.descriptions[auditRef.id],
+              });
+            }
+          });
+        }
+      });
+    }
+
+    return clone;
+  }
+
+  /**
+   * Used to determine if the "passed" for the purposes of showing up in the "failed" or "passed"
+   * sections of the report.
+   *
+   * @param {{score: (number|null), scoreDisplayMode: string}} audit
+   * @return {boolean}
+   */
+  static showAsPassed(audit) {
+    switch (audit.scoreDisplayMode) {
+      case 'manual':
+      case 'notApplicable':
+        return true;
+      case 'error':
+      case 'informative':
+        return false;
+      case 'numeric':
+      case 'binary':
+      default:
+        return Number(audit.score) >= RATINGS.PASS.minScore;
+    }
+  }
+
+  /**
+   * Convert a score to a rating label.
+   * @param {number|null} score
+   * @param {string=} scoreDisplayMode
+   * @return {string}
+   */
+  static calculateRating(score, scoreDisplayMode) {
+    // Handle edge cases first, manual and not applicable receive 'pass', errored audits receive 'error'
+    if (scoreDisplayMode === 'manual' || scoreDisplayMode === 'notApplicable') {
+      return RATINGS.PASS.label;
+    } else if (scoreDisplayMode === 'error') {
+      return RATINGS.ERROR.label;
+    } else if (score === null) {
+      return RATINGS.FAIL.label;
+    }
+
+    // At this point, we're rating a standard binary/numeric audit
+    let rating = RATINGS.FAIL.label;
+    if (score >= RATINGS.PASS.minScore) {
+      rating = RATINGS.PASS.label;
+    } else if (score >= RATINGS.AVERAGE.minScore) {
+      rating = RATINGS.AVERAGE.label;
+    }
+    return rating;
+  }
+
+  /**
+   * Split a string by markdown code spans (enclosed in `backticks`), splitting
+   * into segments that were enclosed in backticks (marked as `isCode === true`)
+   * and those that outside the backticks (`isCode === false`).
+   * @param {string} text
+   * @return {Array<{isCode: true, text: string}|{isCode: false, text: string}>}
+   */
+  static splitMarkdownCodeSpans(text) {
+    /** @type {Array<{isCode: true, text: string}|{isCode: false, text: string}>} */
+    const segments = [];
+
+    // Split on backticked code spans.
+    const parts = text.split(/`(.*?)`/g);
+    for (let i = 0; i < parts.length; i ++) {
+      const text = parts[i];
+
+      // Empty strings are an artifact of splitting, not meaningful.
+      if (!text) continue;
+
+      // Alternates between plain text and code segments.
+      const isCode = i % 2 !== 0;
+      segments.push({
+        isCode,
+        text,
+      });
+    }
+
+    return segments;
+  }
+
+  /**
+   * Split a string on markdown links (e.g. [some link](https://...)) into
+   * segments of plain text that weren't part of a link (marked as
+   * `isLink === false`), and segments with text content and a URL that did make
+   * up a link (marked as `isLink === true`).
+   * @param {string} text
+   * @return {Array<{isLink: true, text: string, linkHref: string}|{isLink: false, text: string}>}
+   */
+  static splitMarkdownLink(text) {
+    /** @type {Array<{isLink: true, text: string, linkHref: string}|{isLink: false, text: string}>} */
+    const segments = [];
+
+    const parts = text.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);
+    while (parts.length) {
+      // Shift off the same number of elements as the pre-split and capture groups.
+      const [preambleText, linkText, linkHref] = parts.splice(0, 3);
+
+      if (preambleText) { // Skip empty text as it's an artifact of splitting, not meaningful.
+        segments.push({
+          isLink: false,
+          text: preambleText,
+        });
+      }
+
+      // Append link if there are any.
+      if (linkText && linkHref) {
+        segments.push({
+          isLink: true,
+          text: linkText,
+          linkHref,
+        });
+      }
+    }
+
+    return segments;
+  }
+
+  /**
+   * @param {URL} parsedUrl
+   * @param {{numPathParts?: number, preserveQuery?: boolean, preserveHost?: boolean}=} options
+   * @return {string}
+   */
+  static getURLDisplayName(parsedUrl, options) {
+    // Closure optional properties aren't optional in tsc, so fallback needs undefined  values.
+    options = options || {numPathParts: undefined, preserveQuery: undefined,
+      preserveHost: undefined};
+    const numPathParts = options.numPathParts !== undefined ? options.numPathParts : 2;
+    const preserveQuery = options.preserveQuery !== undefined ? options.preserveQuery : true;
+    const preserveHost = options.preserveHost || false;
+
+    let name;
+
+    if (parsedUrl.protocol === 'about:' || parsedUrl.protocol === 'data:') {
+      // Handle 'about:*' and 'data:*' URLs specially since they have no path.
+      name = parsedUrl.href;
+    } else {
+      name = parsedUrl.pathname;
+      const parts = name.split('/').filter(part => part.length);
+      if (numPathParts && parts.length > numPathParts) {
+        name = ELLIPSIS + parts.slice(-1 * numPathParts).join('/');
+      }
+
+      if (preserveHost) {
+        name = `${parsedUrl.host}/${name.replace(/^\//, '')}`;
+      }
+      if (preserveQuery) {
+        name = `${name}${parsedUrl.search}`;
+      }
+    }
+
+    const MAX_LENGTH = 64;
+    // Always elide hexadecimal hash
+    name = name.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g, `$1${ELLIPSIS}`);
+    // Also elide other hash-like mixed-case strings
+    name = name.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,
+      `$1${ELLIPSIS}`);
+    // Also elide long number sequences
+    name = name.replace(/(\d{3})\d{6,}/g, `$1${ELLIPSIS}`);
+    // Merge any adjacent ellipses
+    name = name.replace(/\u2026+/g, ELLIPSIS);
+
+    // Elide query params first
+    if (name.length > MAX_LENGTH && name.includes('?')) {
+      // Try to leave the first query parameter intact
+      name = name.replace(/\?([^=]*)(=)?.*/, `?$1$2${ELLIPSIS}`);
+
+      // Remove it all if it's still too long
+      if (name.length > MAX_LENGTH) {
+        name = name.replace(/\?.*/, `?${ELLIPSIS}`);
+      }
+    }
+
+    // Elide too long names next
+    if (name.length > MAX_LENGTH) {
+      const dotIndex = name.lastIndexOf('.');
+      if (dotIndex >= 0) {
+        name = name.slice(0, MAX_LENGTH - 1 - (name.length - dotIndex)) +
+          // Show file extension
+          `${ELLIPSIS}${name.slice(dotIndex)}`;
+      } else {
+        name = name.slice(0, MAX_LENGTH - 1) + ELLIPSIS;
+      }
+    }
+
+    return name;
+  }
+
+  /**
+   * Split a URL into a file, hostname and origin for easy display.
+   * @param {string} url
+   * @return {{file: string, hostname: string, origin: string}}
+   */
+  static parseURL(url) {
+    const parsedUrl = new URL(url);
+    return {
+      file: Util.getURLDisplayName(parsedUrl),
+      hostname: parsedUrl.hostname,
+      origin: parsedUrl.origin,
+    };
+  }
+
+  /**
+   * @param {string|URL} value
+   * @return {!URL}
+   */
+  static createOrReturnURL(value) {
+    if (value instanceof URL) {
+      return value;
+    }
+
+    return new URL(value);
+  }
+
+  /**
+   * Gets the tld of a domain
+   *
+   * @param {string} hostname
+   * @return {string} tld
+   */
+  static getTld(hostname) {
+    const tlds = hostname.split('.').slice(-2);
+
+    if (!listOfTlds.includes(tlds[0])) {
+      return `.${tlds[tlds.length - 1]}`;
+    }
+
+    return `.${tlds.join('.')}`;
+  }
+
+  /**
+   * Returns a primary domain for provided hostname (e.g. www.example.com -> example.com).
+   * @param {string|URL} url hostname or URL object
+   * @returns {string}
+   */
+  static getRootDomain(url) {
+    const hostname = Util.createOrReturnURL(url).hostname;
+    const tld = Util.getTld(hostname);
+
+    // tld is .com or .co.uk which means we means that length is 1 to big
+    // .com => 2 & .co.uk => 3
+    const splitTld = tld.split('.');
+
+    // get TLD + root domain
+    return hostname.split('.').slice(-splitTld.length).join('.');
+  }
+
+  /**
+   * @param {LH.Config.Settings} settings
+   * @return {!Array<{name: string, description: string}>}
+   */
+  static getEnvironmentDisplayValues(settings) {
+    const emulationDesc = Util.getEmulationDescriptions(settings);
+
+    return [
+      {
+        name: Util.i18n.strings.runtimeSettingsDevice,
+        description: emulationDesc.deviceEmulation,
+      },
+      {
+        name: Util.i18n.strings.runtimeSettingsNetworkThrottling,
+        description: emulationDesc.networkThrottling,
+      },
+      {
+        name: Util.i18n.strings.runtimeSettingsCPUThrottling,
+        description: emulationDesc.cpuThrottling,
+      },
+    ];
+  }
+
+  /**
+   * @param {LH.Config.Settings} settings
+   * @return {{deviceEmulation: string, networkThrottling: string, cpuThrottling: string}}
+   */
+  static getEmulationDescriptions(settings) {
+    let cpuThrottling;
+    let networkThrottling;
+
+    const throttling = settings.throttling;
+
+    switch (settings.throttlingMethod) {
+      case 'provided':
+        cpuThrottling = Util.i18n.strings.throttlingProvided;
+        networkThrottling = Util.i18n.strings.throttlingProvided;
+        break;
+      case 'devtools': {
+        const {cpuSlowdownMultiplier, requestLatencyMs} = throttling;
+        cpuThrottling = `${Util.i18n.formatNumber(cpuSlowdownMultiplier)}x slowdown (DevTools)`;
+        networkThrottling = `${Util.i18n.formatNumber(requestLatencyMs)}${NBSP}ms HTTP RTT, ` +
+          `${Util.i18n.formatNumber(throttling.downloadThroughputKbps)}${NBSP}Kbps down, ` +
+          `${Util.i18n.formatNumber(throttling.uploadThroughputKbps)}${NBSP}Kbps up (DevTools)`;
+        break;
+      }
+      case 'simulate': {
+        const {cpuSlowdownMultiplier, rttMs, throughputKbps} = throttling;
+        cpuThrottling = `${Util.i18n.formatNumber(cpuSlowdownMultiplier)}x slowdown (Simulated)`;
+        networkThrottling = `${Util.i18n.formatNumber(rttMs)}${NBSP}ms TCP RTT, ` +
+          `${Util.i18n.formatNumber(throughputKbps)}${NBSP}Kbps throughput (Simulated)`;
+        break;
+      }
+      default:
+        cpuThrottling = Util.i18n.strings.runtimeUnknown;
+        networkThrottling = Util.i18n.strings.runtimeUnknown;
+    }
+
+    // TODO(paulirish): revise Runtime Settings strings: https://github.com/GoogleChrome/lighthouse/pull/11796
+    const deviceEmulation = {
+      mobile: Util.i18n.strings.runtimeMobileEmulation,
+      desktop: Util.i18n.strings.runtimeDesktopEmulation,
+    }[settings.formFactor] || Util.i18n.strings.runtimeNoEmulation;
+
+    return {
+      deviceEmulation,
+      cpuThrottling,
+      networkThrottling,
+    };
+  }
+
+  /**
+   * Returns only lines that are near a message, or the first few lines if there are
+   * no line messages.
+   * @param {LH.Audit.Details.SnippetValue['lines']} lines
+   * @param {LH.Audit.Details.SnippetValue['lineMessages']} lineMessages
+   * @param {number} surroundingLineCount Number of lines to include before and after
+   * the message. If this is e.g. 2 this function might return 5 lines.
+   */
+  static filterRelevantLines(lines, lineMessages, surroundingLineCount) {
+    if (lineMessages.length === 0) {
+      // no lines with messages, just return the first bunch of lines
+      return lines.slice(0, surroundingLineCount * 2 + 1);
+    }
+
+    const minGapSize = 3;
+    const lineNumbersToKeep = new Set();
+    // Sort messages so we can check lineNumbersToKeep to see how big the gap to
+    // the previous line is.
+    lineMessages = lineMessages.sort((a, b) => (a.lineNumber || 0) - (b.lineNumber || 0));
+    lineMessages.forEach(({lineNumber}) => {
+      let firstSurroundingLineNumber = lineNumber - surroundingLineCount;
+      let lastSurroundingLineNumber = lineNumber + surroundingLineCount;
+
+      while (firstSurroundingLineNumber < 1) {
+        // make sure we still show (surroundingLineCount * 2 + 1) lines in total
+        firstSurroundingLineNumber++;
+        lastSurroundingLineNumber++;
+      }
+      // If only a few lines would be omitted normally then we prefer to include
+      // extra lines to avoid the tiny gap
+      if (lineNumbersToKeep.has(firstSurroundingLineNumber - minGapSize - 1)) {
+        firstSurroundingLineNumber -= minGapSize;
+      }
+      for (let i = firstSurroundingLineNumber; i <= lastSurroundingLineNumber; i++) {
+        const surroundingLineNumber = i;
+        lineNumbersToKeep.add(surroundingLineNumber);
+      }
+    });
+
+    return lines.filter(line => lineNumbersToKeep.has(line.lineNumber));
+  }
+
+  /**
+   * @param {string} categoryId
+   */
+  static isPluginCategory(categoryId) {
+    return categoryId.startsWith('lighthouse-plugin-');
+  }
+}
+
+/**
+ * Some parts of the report renderer require data found on the LHR. Instead of wiring it
+ * through, we have this global.
+ * @type {LH.ReportResult | null}
+ */
+Util.reportJson = null;
+
+/**
+ * An always-increasing counter for making unique SVG ID suffixes.
+ */
+Util.getUniqueSuffix = (() => {
+  let svgSuffix = 0;
+  return function() {
+    return svgSuffix++;
+  };
+})();
+
+/** @type {I18n<typeof Util['UIStrings']>} */
+// @ts-expect-error: Is set in report renderer.
+Util.i18n = null;
+
+/**
+ * Report-renderer-specific strings.
+ */
+Util.UIStrings = {
+  /** Disclaimer shown to users below the metric values (First Contentful Paint, Time to Interactive, etc) to warn them that the numbers they see will likely change slightly the next time they run Lighthouse. */
+  varianceDisclaimer: 'Values are estimated and may vary. The [performance score is calculated](https://web.dev/performance-scoring/) directly from these metrics.',
+  /** Text link pointing to an interactive calculator that explains Lighthouse scoring. The link text should be fairly short. */
+  calculatorLink: 'See calculator.',
+  /** Label preceding a radio control for filtering the list of audits. The radio choices are various performance metrics (FCP, LCP, TBT), and if chosen, the audits in the report are hidden if they are not relevant to the selected metric. */
+  showRelevantAudits: 'Show audits relevant to:',
+  /** Column heading label for the listing of opportunity audits. Each audit title represents an opportunity. There are only 2 columns, so no strict character limit.  */
+  opportunityResourceColumnLabel: 'Opportunity',
+  /** Column heading label for the estimated page load savings of opportunity audits. Estimated Savings is the total amount of time (in seconds) that Lighthouse computed could be reduced from the total page load time, if the suggested action is taken. There are only 2 columns, so no strict character limit. */
+  opportunitySavingsColumnLabel: 'Estimated Savings',
+
+  /** An error string displayed next to a particular audit when it has errored, but not provided any specific error message. */
+  errorMissingAuditInfo: 'Report error: no audit information',
+  /** A label, shown next to an audit title or metric title, indicating that there was an error computing it. The user can hover on the label to reveal a tooltip with the extended error message. Translation should be short (< 20 characters). */
+  errorLabel: 'Error!',
+  /** This label is shown above a bulleted list of warnings. It is shown directly below an audit that produced warnings. Warnings describe situations the user should be aware of, as Lighthouse was unable to complete all the work required on this audit. For example, The 'Unable to decode image (biglogo.jpg)' warning may show up below an image encoding audit. */
+  warningHeader: 'Warnings: ',
+  /** Section heading shown above a list of passed audits that contain warnings. Audits under this section do not negatively impact the score, but Lighthouse has generated some potentially actionable suggestions that should be reviewed. This section is expanded by default and displays after the failing audits. */
+  warningAuditsGroupTitle: 'Passed audits but with warnings',
+  /** Section heading shown above a list of audits that are passing. 'Passed' here refers to a passing grade. This section is collapsed by default, as the user should be focusing on the failed audits instead. Users can click this heading to reveal the list. */
+  passedAuditsGroupTitle: 'Passed audits',
+  /** Section heading shown above a list of audits that do not apply to the page. For example, if an audit is 'Are images optimized?', but the page has no images on it, the audit will be marked as not applicable. This is neither passing or failing. This section is collapsed by default, as the user should be focusing on the failed audits instead. Users can click this heading to reveal the list. */
+  notApplicableAuditsGroupTitle: 'Not applicable',
+  /** Section heading shown above a list of audits that were not computed by Lighthouse. They serve as a list of suggestions for the user to go and manually check. For example, Lighthouse can't automate testing cross-browser compatibility, so that is listed within this section, so the user is reminded to test it themselves. This section is collapsed by default, as the user should be focusing on the failed audits instead. Users can click this heading to reveal the list. */
+  manualAuditsGroupTitle: 'Additional items to manually check',
+
+  /** Label shown preceding any important warnings that may have invalidated the entire report. For example, if the user has Chrome extensions installed, they may add enough performance overhead that Lighthouse's performance metrics are unreliable. If shown, this will be displayed at the top of the report UI. */
+  toplevelWarningsMessage: 'There were issues affecting this run of Lighthouse:',
+
+  /** String of text shown in a graphical representation of the flow of network requests for the web page. This label represents the initial network request that fetches an HTML page. This navigation may be redirected (eg. Initial navigation to http://example.com redirects to https://www.example.com). */
+  crcInitialNavigation: 'Initial Navigation',
+  /** Label of value shown in the summary of critical request chains. Refers to the total amount of time (milliseconds) of the longest critical path chain/sequence of network requests. Example value: 2310 ms */
+  crcLongestDurationLabel: 'Maximum critical path latency:',
+
+  /** Label for button that shows all lines of the snippet when clicked */
+  snippetExpandButtonLabel: 'Expand snippet',
+  /** Label for button that only shows a few lines of the snippet when clicked */
+  snippetCollapseButtonLabel: 'Collapse snippet',
+
+  /** Explanation shown to users below performance results to inform them that the test was done with a 4G network connection and to warn them that the numbers they see will likely change slightly the next time they run Lighthouse. 'Lighthouse' becomes link text to additional documentation. */
+  lsPerformanceCategoryDescription: '[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.',
+  /** Title of the lab data section of the Performance category. Within this section are various speed metrics which quantify the pageload performance into values presented in seconds and milliseconds. "Lab" is an abbreviated form of "laboratory", and refers to the fact that the data is from a controlled test of a website, not measurements from real users visiting that site.  */
+  labDataTitle: 'Lab Data',
+
+  /** This label is for a checkbox above a table of items loaded by a web page. The checkbox is used to show or hide third-party (or "3rd-party") resources in the table, where "third-party resources" refers to items loaded by a web page from URLs that aren't controlled by the owner of the web page. */
+  thirdPartyResourcesLabel: 'Show 3rd-party resources',
+  /** This label is for a button that opens a new tab to a webapp called "Treemap", which is a nested visual representation of a heierarchy of data releated to the reports (script bytes and coverage, resource breakdown, etc.) */
+  viewTreemapLabel: 'View Treemap',
+
+  /** Option in a dropdown menu that opens a small, summary report in a print dialog.  */
+  dropdownPrintSummary: 'Print Summary',
+  /** Option in a dropdown menu that opens a full Lighthouse report in a print dialog.  */
+  dropdownPrintExpanded: 'Print Expanded',
+  /** Option in a dropdown menu that copies the Lighthouse JSON object to the system clipboard. */
+  dropdownCopyJSON: 'Copy JSON',
+  /** Option in a dropdown menu that saves the Lighthouse report HTML locally to the system as a '.html' file. */
+  dropdownSaveHTML: 'Save as HTML',
+  /** Option in a dropdown menu that saves the Lighthouse JSON object to the local system as a '.json' file. */
+  dropdownSaveJSON: 'Save as JSON',
+  /** Option in a dropdown menu that opens the current report in the Lighthouse Viewer Application. */
+  dropdownViewer: 'Open in Viewer',
+  /** Option in a dropdown menu that saves the current report as a new Github Gist. */
+  dropdownSaveGist: 'Save as Gist',
+  /** Option in a dropdown menu that toggles the themeing of the report between Light(default) and Dark themes. */
+  dropdownDarkTheme: 'Toggle Dark Theme',
+
+  /** Title of the Runtime settings table in a Lighthouse report.  Runtime settings are the environment configurations that a specific report used at auditing time. */
+  runtimeSettingsTitle: 'Runtime Settings',
+  /** Label for a row in a table that shows the URL that was audited during a Lighthouse run. */
+  runtimeSettingsUrl: 'URL',
+  /** Label for a row in a table that shows the time at which a Lighthouse run was conducted; formatted as a timestamp, e.g. Jan 1, 1970 12:00 AM UTC. */
+  runtimeSettingsFetchTime: 'Fetch Time',
+  /** Label for a row in a table that describes the kind of device that was emulated for the Lighthouse run.  Example values for row elements: 'No Emulation', 'Emulated Desktop', etc. */
+  runtimeSettingsDevice: 'Device',
+  /** Label for a row in a table that describes the network throttling conditions that were used during a Lighthouse run, if any. */
+  runtimeSettingsNetworkThrottling: 'Network throttling',
+  /** Label for a row in a table that describes the CPU throttling conditions that were used during a Lighthouse run, if any.*/
+  runtimeSettingsCPUThrottling: 'CPU throttling',
+  /** Label for a row in a table that shows in what tool Lighthouse is being run (e.g. The lighthouse CLI, Chrome DevTools, Lightrider, WebPageTest, etc). */
+  runtimeSettingsChannel: 'Channel',
+  /** Label for a row in a table that shows the User Agent that was detected on the Host machine that ran Lighthouse. */
+  runtimeSettingsUA: 'User agent (host)',
+  /** Label for a row in a table that shows the User Agent that was used to send out all network requests during the Lighthouse run. */
+  runtimeSettingsUANetwork: 'User agent (network)',
+  /** Label for a row in a table that shows the estimated CPU power of the machine running Lighthouse. Example row values: 532, 1492, 783. */
+  runtimeSettingsBenchmark: 'CPU/Memory Power',
+  /** Label for a row in a table that shows the version of the Axe library used. Example row values: 2.1.0, 3.2.3 */
+  runtimeSettingsAxeVersion: 'Axe version',
+
+  /** Label for button to create an issue against the Lighthouse Github project. */
+  footerIssue: 'File an issue',
+
+  /** Descriptive explanation for emulation setting when no device emulation is set. */
+  runtimeNoEmulation: 'No emulation',
+  /** Descriptive explanation for emulation setting when emulating a Moto G4 mobile device. */
+  runtimeMobileEmulation: 'Emulated Moto G4',
+  /** Descriptive explanation for emulation setting when emulating a generic desktop form factor, as opposed to a mobile-device like form factor. */
+  runtimeDesktopEmulation: 'Emulated Desktop',
+  /** Descriptive explanation for a runtime setting that is set to an unknown value. */
+  runtimeUnknown: 'Unknown',
+
+  /** Descriptive explanation for environment throttling that was provided by the runtime environment instead of provided by Lighthouse throttling. */
+  throttlingProvided: 'Provided by environment',
+};
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = Util;
+} else {
+  self.Util = Util;
+}
+;
+/**
+ * @license
+ * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'use strict';
+
+/* globals self Util */
+
+/** @typedef {HTMLElementTagNameMap & {[id: string]: HTMLElement}} HTMLElementByTagName */
+/** @template {string} T @typedef {import('typed-query-selector/parser').ParseSelector<T, Element>} ParseSelector */
+
+class DOM {
+  /**
+   * @param {Document} document
+   */
+  constructor(document) {
+    /** @type {Document} */
+    this._document = document;
+    /** @type {string} */
+    this._lighthouseChannel = 'unknown';
+  }
+
+  /**
+   * @template {string} T
+   * @param {T} name
+   * @param {string=} className
+   * @param {Object<string, (string|undefined)>=} attrs Attribute key/val pairs.
+   *     Note: if an attribute key has an undefined value, this method does not
+   *     set the attribute on the node.
+   * @return {HTMLElementByTagName[T]}
+   */
+  createElement(name, className, attrs = {}) {
+    const element = this._document.createElement(name);
+    if (className) {
+      element.className = className;
+    }
+    Object.keys(attrs).forEach(key => {
+      const value = attrs[key];
+      if (typeof value !== 'undefined') {
+        element.setAttribute(key, value);
+      }
+    });
+    return element;
+  }
+
+  /**
+   * @param {string} namespaceURI
+   * @param {string} name
+   * @param {string=} className
+   * @param {Object<string, (string|undefined)>=} attrs Attribute key/val pairs.
+   *     Note: if an attribute key has an undefined value, this method does not
+   *     set the attribute on the node.
+   * @return {Element}
+   */
+  createElementNS(namespaceURI, name, className, attrs = {}) {
+    const element = this._document.createElementNS(namespaceURI, name);
+    if (className) {
+      element.className = className;
+    }
+    Object.keys(attrs).forEach(key => {
+      const value = attrs[key];
+      if (typeof value !== 'undefined') {
+        element.setAttribute(key, value);
+      }
+    });
+    return element;
+  }
+
+  /**
+   * @return {!DocumentFragment}
+   */
+  createFragment() {
+    return this._document.createDocumentFragment();
+  }
+
+  /**
+   * @template {string} T
+   * @param {Element} parentElem
+   * @param {T} elementName
+   * @param {string=} className
+   * @param {Object<string, (string|undefined)>=} attrs Attribute key/val pairs.
+   *     Note: if an attribute key has an undefined value, this method does not
+   *     set the attribute on the node.
+   * @return {HTMLElementByTagName[T]}
+   */
+  createChildOf(parentElem, elementName, className, attrs) {
+    const element = this.createElement(elementName, className, attrs);
+    parentElem.appendChild(element);
+    return element;
+  }
+
+  /**
+   * @param {string} selector
+   * @param {ParentNode} context
+   * @return {!DocumentFragment} A clone of the template content.
+   * @throws {Error}
+   */
+  cloneTemplate(selector, context) {
+    const template = /** @type {?HTMLTemplateElement} */ (context.querySelector(selector));
+    if (!template) {
+      throw new Error(`Template not found: template${selector}`);
+    }
+
+    const clone = this._document.importNode(template.content, true);
+
+    // Prevent duplicate styles in the DOM. After a template has been stamped
+    // for the first time, remove the clone's styles so they're not re-added.
+    if (template.hasAttribute('data-stamped')) {
+      this.findAll('style', clone).forEach(style => style.remove());
+    }
+    template.setAttribute('data-stamped', 'true');
+
+    return clone;
+  }
+
+  /**
+   * Resets the "stamped" state of the templates.
+   */
+  resetTemplates() {
+    this.findAll('template[data-stamped]', this._document).forEach(t => {
+      t.removeAttribute('data-stamped');
+    });
+  }
+
+  /**
+   * @param {string} text
+   * @return {Element}
+   */
+  convertMarkdownLinkSnippets(text) {
+    const element = this.createElement('span');
+
+    for (const segment of Util.splitMarkdownLink(text)) {
+      if (!segment.isLink) {
+        // Plain text segment.
+        element.appendChild(this._document.createTextNode(segment.text));
+        continue;
+      }
+
+      // Otherwise, append any links found.
+      const url = new URL(segment.linkHref);
+
+      const DOCS_ORIGINS = ['https://developers.google.com', 'https://web.dev'];
+      if (DOCS_ORIGINS.includes(url.origin)) {
+        url.searchParams.set('utm_source', 'lighthouse');
+        url.searchParams.set('utm_medium', this._lighthouseChannel);
+      }
+
+      const a = this.createElement('a');
+      a.rel = 'noopener';
+      a.target = '_blank';
+      a.textContent = segment.text;
+      a.href = url.href;
+      element.appendChild(a);
+    }
+
+    return element;
+  }
+
+  /**
+   * @param {string} markdownText
+   * @return {Element}
+   */
+  convertMarkdownCodeSnippets(markdownText) {
+    const element = this.createElement('span');
+
+    for (const segment of Util.splitMarkdownCodeSpans(markdownText)) {
+      if (segment.isCode) {
+        const pre = this.createElement('code');
+        pre.textContent = segment.text;
+        element.appendChild(pre);
+      } else {
+        element.appendChild(this._document.createTextNode(segment.text));
+      }
+    }
+
+    return element;
+  }
+
+  /**
+   * The channel to use for UTM data when rendering links to the documentation.
+   * @param {string} lighthouseChannel
+   */
+  setLighthouseChannel(lighthouseChannel) {
+    this._lighthouseChannel = lighthouseChannel;
+  }
+
+  /**
+   * @return {Document}
+   */
+  document() {
+    return this._document;
+  }
+
+  /**
+   * TODO(paulirish): import and conditionally apply the DevTools frontend subclasses instead of this
+   * @return {boolean}
+   */
+  isDevTools() {
+    return !!this._document.querySelector('.lh-devtools');
+  }
+
+  /**
+   * Guaranteed context.querySelector. Always returns an element or throws if
+   * nothing matches query.
+   * @template {string} T
+   * @param {T} query
+   * @param {ParentNode} context
+   * @return {ParseSelector<T>}
+   */
+  find(query, context) {
+    const result = context.querySelector(query);
+    if (result === null) {
+      throw new Error(`query ${query} not found`);
+    }
+
+    // Because we control the report layout and templates, use the simpler
+    // `typed-query-selector` types that don't require differentiating between
+    // e.g. HTMLAnchorElement and SVGAElement. See https://github.com/GoogleChrome/lighthouse/issues/12011
+    return /** @type {ParseSelector<T>} */ (result);
+  }
+
+  /**
+   * Helper for context.querySelectorAll. Returns an Array instead of a NodeList.
+   * @template {string} T
+   * @param {T} query
+   * @param {ParentNode} context
+   */
+  findAll(query, context) {
+    const elements = Array.from(context.querySelectorAll(query));
+    return elements;
+  }
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = DOM;
+} else {
+  self.DOM = DOM;
+}
+;
+/**
+ * @license
+ * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'use strict';
+
+/* globals self CriticalRequestChainRenderer SnippetRenderer ElementScreenshotRenderer Util */
+
+/** @typedef {import('./dom.js')} DOM */
+
+// Convenience types for localized AuditDetails.
+/** @typedef {LH.FormattedIcu<LH.Audit.Details>} AuditDetails */
+/** @typedef {LH.FormattedIcu<LH.Audit.Details.Opportunity>} OpportunityTable */
+/** @typedef {LH.FormattedIcu<LH.Audit.Details.Table>} Table */
+/** @typedef {LH.FormattedIcu<LH.Audit.Details.TableItem>} TableItem */
+/** @typedef {LH.FormattedIcu<LH.Audit.Details.ItemValue>} TableItemValue */
+
+const URL_PREFIXES = ['http://', 'https://', 'data:'];
+
+class DetailsRenderer {
+  /**
+   * @param {DOM} dom
+   * @param {{fullPageScreenshot?: LH.Artifacts.FullPageScreenshot}} [options]
+   */
+  constructor(dom, options = {}) {
+    this._dom = dom;
+    this._fullPageScreenshot = options.fullPageScreenshot;
+
+    /** @type {ParentNode} */
+    this._templateContext; // eslint-disable-line no-unused-expressions
+  }
+
+  /**
+   * @param {ParentNode} context
+   */
+  setTemplateContext(context) {
+    this._templateContext = context;
+  }
+
+  /**
+   * @param {AuditDetails} details
+   * @return {Element|null}
+   */
+  render(details) {
+    switch (details.type) {
+      case 'filmstrip':
+        return this._renderFilmstrip(details);
+      case 'list':
+        return this._renderList(details);
+      case 'table':
+        return this._renderTable(details);
+      case 'criticalrequestchain':
+        return CriticalRequestChainRenderer.render(this._dom, this._templateContext, details, this);
+      case 'opportunity':
+        return this._renderTable(details);
+
+      // Internal-only details, not for rendering.
+      case 'screenshot':
+      case 'debugdata':
+      case 'full-page-screenshot':
+      case 'treemap-data':
+        return null;
+
+      default: {
+        // @ts-expect-error tsc thinks this is unreachable, but be forward compatible
+        // with new unexpected detail types.
+        return this._renderUnknown(details.type, details);
+      }
+    }
+  }
+
+  /**
+   * @param {{value: number, granularity?: number}} details
+   * @return {Element}
+   */
+  _renderBytes(details) {
+    // TODO: handle displayUnit once we have something other than 'kb'
+    // Note that 'kb' is historical and actually represents KiB.
+    const value = Util.i18n.formatBytesToKiB(details.value, details.granularity);
+    const textEl = this._renderText(value);
+    textEl.title = Util.i18n.formatBytes(details.value);
+    return textEl;
+  }
+
+  /**
+   * @param {{value: number, granularity?: number, displayUnit?: string}} details
+   * @return {Element}
+   */
+  _renderMilliseconds(details) {
+    let value = Util.i18n.formatMilliseconds(details.value, details.granularity);
+    if (details.displayUnit === 'duration') {
+      value = Util.i18n.formatDuration(details.value);
+    }
+
+    return this._renderText(value);
+  }
+
+  /**
+   * @param {string} text
+   * @return {HTMLElement}
+   */
+  renderTextURL(text) {
+    const url = text;
+
+    let displayedPath;
+    let displayedHost;
+    let title;
+    try {
+      const parsed = Util.parseURL(url);
+      displayedPath = parsed.file === '/' ? parsed.origin : parsed.file;
+      displayedHost = parsed.file === '/' || parsed.hostname === '' ? '' : `(${parsed.hostname})`;
+      title = url;
+    } catch (e) {
+      displayedPath = url;
+    }
+
+    const element = this._dom.createElement('div', 'lh-text__url');
+    element.appendChild(this._renderLink({text: displayedPath, url}));
+
+    if (displayedHost) {
+      const hostElem = this._renderText(displayedHost);
+      hostElem.classList.add('lh-text__url-host');
+      element.appendChild(hostElem);
+    }
+
+    if (title) {
+      element.title = url;
+      // set the url on the element's dataset which we use to check 3rd party origins
+      element.dataset.url = url;
+    }
+    return element;
+  }
+
+  /**
+   * @param {{text: string, url: string}} details
+   * @return {HTMLElement}
+   */
+  _renderLink(details) {
+    const allowedProtocols = ['https:', 'http:'];
+    let url;
+    try {
+      url = new URL(details.url);
+    } catch (_) {}
+
+    if (!url || !allowedProtocols.includes(url.protocol)) {
+      // Fall back to just the link text if invalid or protocol not allowed.
+      const element = this._renderText(details.text);
+      element.classList.add('lh-link');
+      return element;
+    }
+
+    const a = this._dom.createElement('a');
+    a.rel = 'noopener';
+    a.target = '_blank';
+    a.textContent = details.text;
+    a.href = url.href;
+    a.classList.add('lh-link');
+    return a;
+  }
+
+  /**
+   * @param {string} text
+   * @return {HTMLDivElement}
+   */
+  _renderText(text) {
+    const element = this._dom.createElement('div', 'lh-text');
+    element.textContent = text;
+    return element;
+  }
+
+  /**
+   * @param {{value: number, granularity?: number}} details
+   * @return {Element}
+   */
+  _renderNumeric(details) {
+    const value = Util.i18n.formatNumber(details.value, details.granularity);
+    const element = this._dom.createElement('div', 'lh-numeric');
+    element.textContent = value;
+    return element;
+  }
+
+  /**
+   * Create small thumbnail with scaled down image asset.
+   * @param {string} details
+   * @return {Element}
+   */
+  _renderThumbnail(details) {
+    const element = this._dom.createElement('img', 'lh-thumbnail');
+    const strValue = details;
+    element.src = strValue;
+    element.title = strValue;
+    element.alt = '';
+    return element;
+  }
+
+  /**
+   * @param {string} type
+   * @param {*} value
+   */
+  _renderUnknown(type, value) {
+    // eslint-disable-next-line no-console
+    console.error(`Unknown details type: ${type}`, value);
+    const element = this._dom.createElement('details', 'lh-unknown');
+    this._dom.createChildOf(element, 'summary').textContent =
+      `We don't know how to render audit details of type \`${type}\`. ` +
+      'The Lighthouse version that collected this data is likely newer than the Lighthouse ' +
+      'version of the report renderer. Expand for the raw JSON.';
+    this._dom.createChildOf(element, 'pre').textContent = JSON.stringify(value, null, 2);
+    return element;
+  }
+
+  /**
+   * Render a details item value for embedding in a table. Renders the value
+   * based on the heading's valueType, unless the value itself has a `type`
+   * property to override it.
+   * @param {TableItemValue} value
+   * @param {LH.Audit.Details.OpportunityColumnHeading} heading
+   * @return {Element|null}
+   */
+  _renderTableValue(value, heading) {
+    if (value === undefined || value === null) {
+      return null;
+    }
+
+    // First deal with the possible object forms of value.
+    if (typeof value === 'object') {
+      // The value's type overrides the heading's for this column.
+      switch (value.type) {
+        case 'code': {
+          return this._renderCode(value.value);
+        }
+        case 'link': {
+          return this._renderLink(value);
+        }
+        case 'node': {
+          return this.renderNode(value);
+        }
+        case 'numeric': {
+          return this._renderNumeric(value);
+        }
+        case 'source-location': {
+          return this.renderSourceLocation(value);
+        }
+        case 'url': {
+          return this.renderTextURL(value.value);
+        }
+        default: {
+          return this._renderUnknown(value.type, value);
+        }
+      }
+    }
+
+    // Next, deal with primitives.
+    switch (heading.valueType) {
+      case 'bytes': {
+        const numValue = Number(value);
+        return this._renderBytes({value: numValue, granularity: heading.granularity});
+      }
+      case 'code': {
+        const strValue = String(value);
+        return this._renderCode(strValue);
+      }
+      case 'ms': {
+        const msValue = {
+          value: Number(value),
+          granularity: heading.granularity,
+          displayUnit: heading.displayUnit,
+        };
+        return this._renderMilliseconds(msValue);
+      }
+      case 'numeric': {
+        const numValue = Number(value);
+        return this._renderNumeric({value: numValue, granularity: heading.granularity});
+      }
+      case 'text': {
+        const strValue = String(value);
+        return this._renderText(strValue);
+      }
+      case 'thumbnail': {
+        const strValue = String(value);
+        return this._renderThumbnail(strValue);
+      }
+      case 'timespanMs': {
+        const numValue = Number(value);
+        return this._renderMilliseconds({value: numValue});
+      }
+      case 'url': {
+        const strValue = String(value);
+        if (URL_PREFIXES.some(prefix => strValue.startsWith(prefix))) {
+          return this.renderTextURL(strValue);
+        } else {
+          // Fall back to <pre> rendering if not actually a URL.
+          return this._renderCode(strValue);
+        }
+      }
+      default: {
+        return this._renderUnknown(heading.valueType, value);
+      }
+    }
+  }
+
+  /**
+   * Get the headings of a table-like details object, converted into the
+   * OpportunityColumnHeading type until we have all details use the same
+   * heading format.
+   * @param {Table|OpportunityTable} tableLike
+   * @return {OpportunityTable['headings']}
+   */
+  _getCanonicalizedHeadingsFromTable(tableLike) {
+    if (tableLike.type === 'opportunity') {
+      return tableLike.headings;
+    }
+
+    return tableLike.headings.map(heading => this._getCanonicalizedHeading(heading));
+  }
+
+  /**
+   * Get the headings of a table-like details object, converted into the
+   * OpportunityColumnHeading type until we have all details use the same
+   * heading format.
+   * @param {Table['headings'][number]} heading
+   * @return {OpportunityTable['headings'][number]}
+   */
+  _getCanonicalizedHeading(heading) {
+    let subItemsHeading;
+    if (heading.subItemsHeading) {
+      subItemsHeading = this._getCanonicalizedsubItemsHeading(heading.subItemsHeading, heading);
+    }
+
+    return {
+      key: heading.key,
+      valueType: heading.itemType,
+      subItemsHeading,
+      label: heading.text,
+      displayUnit: heading.displayUnit,
+      granularity: heading.granularity,
+    };
+  }
+
+  /**
+   * @param {Exclude<LH.Audit.Details.TableColumnHeading['subItemsHeading'], undefined>} subItemsHeading
+   * @param {LH.Audit.Details.TableColumnHeading} parentHeading
+   * @return {LH.Audit.Details.OpportunityColumnHeading['subItemsHeading']}
+   */
+  _getCanonicalizedsubItemsHeading(subItemsHeading, parentHeading) {
+    // Low-friction way to prevent commiting a falsy key (which is never allowed for
+    // a subItemsHeading) from passing in CI.
+    if (!subItemsHeading.key) {
+      // eslint-disable-next-line no-console
+      console.warn('key should not be null');
+    }
+
+    return {
+      key: subItemsHeading.key || '',
+      valueType: subItemsHeading.itemType || parentHeading.itemType,
+      granularity: subItemsHeading.granularity || parentHeading.granularity,
+      displayUnit: subItemsHeading.displayUnit || parentHeading.displayUnit,
+    };
+  }
+
+  /**
+   * Returns a new heading where the values are defined first by `heading.subItemsHeading`,
+   * and secondly by `heading`. If there is no subItemsHeading, returns null, which will
+   * be rendered as an empty column.
+   * @param {LH.Audit.Details.OpportunityColumnHeading} heading
+   * @return {LH.Audit.Details.OpportunityColumnHeading | null}
+   */
+  _getDerivedsubItemsHeading(heading) {
+    if (!heading.subItemsHeading) return null;
+    return {
+      key: heading.subItemsHeading.key || '',
+      valueType: heading.subItemsHeading.valueType || heading.valueType,
+      granularity: heading.subItemsHeading.granularity || heading.granularity,
+      displayUnit: heading.subItemsHeading.displayUnit || heading.displayUnit,
+      label: '',
+    };
+  }
+
+  /**
+   * @param {TableItem} item
+   * @param {(LH.Audit.Details.OpportunityColumnHeading | null)[]} headings
+   */
+  _renderTableRow(item, headings) {
+    const rowElem = this._dom.createElement('tr');
+
+    for (const heading of headings) {
+      // Empty cell if no heading or heading key for this column.
+      if (!heading || !heading.key) {
+        this._dom.createChildOf(rowElem, 'td', 'lh-table-column--empty');
+        continue;
+      }
+
+      const value = item[heading.key];
+      let valueElement;
+      if (value !== undefined && value !== null) {
+        valueElement = this._renderTableValue(value, heading);
+      }
+
+      if (valueElement) {
+        const classes = `lh-table-column--${heading.valueType}`;
+        this._dom.createChildOf(rowElem, 'td', classes).appendChild(valueElement);
+      } else {
+        // Empty cell is rendered for a column if:
+        // - the pair is null
+        // - the heading key is null
+        // - the value is undefined/null
+        this._dom.createChildOf(rowElem, 'td', 'lh-table-column--empty');
+      }
+    }
+
+    return rowElem;
+  }
+
+  /**
+   * Renders one or more rows from a details table item. A single table item can
+   * expand into multiple rows, if there is a subItemsHeading.
+   * @param {TableItem} item
+   * @param {LH.Audit.Details.OpportunityColumnHeading[]} headings
+   */
+  _renderTableRowsFromItem(item, headings) {
+    const fragment = this._dom.createFragment();
+    fragment.append(this._renderTableRow(item, headings));
+
+    if (!item.subItems) return fragment;
+
+    const subItemsHeadings = headings.map(this._getDerivedsubItemsHeading);
+    if (!subItemsHeadings.some(Boolean)) return fragment;
+
+    for (const subItem of item.subItems.items) {
+      const rowEl = this._renderTableRow(subItem, subItemsHeadings);
+      rowEl.classList.add('lh-sub-item-row');
+      fragment.append(rowEl);
+    }
+
+    return fragment;
+  }
+
+  /**
+   * @param {OpportunityTable|Table} details
+   * @return {Element}
+   */
+  _renderTable(details) {
+    if (!details.items.length) return this._dom.createElement('span');
+
+    const tableElem = this._dom.createElement('table', 'lh-table');
+    const theadElem = this._dom.createChildOf(tableElem, 'thead');
+    const theadTrElem = this._dom.createChildOf(theadElem, 'tr');
+
+    const headings = this._getCanonicalizedHeadingsFromTable(details);
+
+    for (const heading of headings) {
+      const valueType = heading.valueType || 'text';
+      const classes = `lh-table-column--${valueType}`;
+      const labelEl = this._dom.createElement('div', 'lh-text');
+      labelEl.textContent = heading.label;
+      this._dom.createChildOf(theadTrElem, 'th', classes).appendChild(labelEl);
+    }
+
+    const tbodyElem = this._dom.createChildOf(tableElem, 'tbody');
+    let even = true;
+    for (const item of details.items) {
+      const rowsFragment = this._renderTableRowsFromItem(item, headings);
+      for (const rowEl of this._dom.findAll('tr', rowsFragment)) {
+        // For zebra styling.
+        rowEl.classList.add(even ? 'lh-row--even' : 'lh-row--odd');
+      }
+      even = !even;
+      tbodyElem.append(rowsFragment);
+    }
+
+    return tableElem;
+  }
+
+  /**
+   * @param {LH.Audit.Details.List} details
+   * @return {Element}
+   */
+  _renderList(details) {
+    const listContainer = this._dom.createElement('div', 'lh-list');
+
+    details.items.forEach(item => {
+      const snippetEl = SnippetRenderer.render(this._dom, this._templateContext, item, this);
+      listContainer.appendChild(snippetEl);
+    });
+
+    return listContainer;
+  }
+
+  /**
+   * @param {LH.Audit.Details.NodeValue} item
+   * @return {Element}
+   */
+  renderNode(item) {
+    const element = this._dom.createElement('span', 'lh-node');
+    if (item.nodeLabel) {
+      const nodeLabelEl = this._dom.createElement('div');
+      nodeLabelEl.textContent = item.nodeLabel;
+      element.appendChild(nodeLabelEl);
+    }
+    if (item.snippet) {
+      const snippetEl = this._dom.createElement('div');
+      snippetEl.classList.add('lh-node__snippet');
+      snippetEl.textContent = item.snippet;
+      element.appendChild(snippetEl);
+    }
+    if (item.selector) {
+      element.title = item.selector;
+    }
+    if (item.path) element.setAttribute('data-path', item.path);
+    if (item.selector) element.setAttribute('data-selector', item.selector);
+    if (item.snippet) element.setAttribute('data-snippet', item.snippet);
+
+    if (!this._fullPageScreenshot) return element;
+
+    const rect = item.lhId && this._fullPageScreenshot.nodes[item.lhId];
+    if (!rect || rect.width === 0 || rect.height === 0) return element;
+
+    const maxThumbnailSize = {width: 147, height: 100};
+    const elementScreenshot = ElementScreenshotRenderer.render(
+      this._dom,
+      this._templateContext,
+      this._fullPageScreenshot.screenshot,
+      rect,
+      maxThumbnailSize
+    );
+    if (elementScreenshot) element.prepend(elementScreenshot);
+
+    return element;
+  }
+
+  /**
+   * @param {LH.Audit.Details.SourceLocationValue} item
+   * @return {Element|null}
+   * @protected
+   */
+  renderSourceLocation(item) {
+    if (!item.url) {
+      return null;
+    }
+
+    // Lines are shown as one-indexed.
+    const generatedLocation = `${item.url}:${item.line + 1}:${item.column}`;
+    let sourceMappedOriginalLocation;
+    if (item.original) {
+      const file = item.original.file || '<unmapped>';
+      sourceMappedOriginalLocation = `${file}:${item.original.line + 1}:${item.original.column}`;
+    }
+
+    // We render slightly differently based on presence of source map and provenance of URL.
+    let element;
+    if (item.urlProvider === 'network' && sourceMappedOriginalLocation) {
+      element = this._renderLink({
+        url: item.url,
+        text: sourceMappedOriginalLocation,
+      });
+      element.title = `maps to generated location ${generatedLocation}`;
+    } else if (item.urlProvider === 'network' && !sourceMappedOriginalLocation) {
+      element = this.renderTextURL(item.url);
+      this._dom.find('.lh-link', element).textContent += `:${item.line + 1}:${item.column}`;
+    } else if (item.urlProvider === 'comment' && sourceMappedOriginalLocation) {
+      element = this._renderText(`${sourceMappedOriginalLocation} (from source map)`);
+      element.title = `${generatedLocation} (from sourceURL)`;
+    } else if (item.urlProvider === 'comment' && !sourceMappedOriginalLocation) {
+      element = this._renderText(`${generatedLocation} (from sourceURL)`);
+    } else {
+      return null;
+    }
+
+    element.classList.add('lh-source-location');
+    element.setAttribute('data-source-url', item.url);
+    // DevTools expects zero-indexed lines.
+    element.setAttribute('data-source-line', String(item.line));
+    element.setAttribute('data-source-column', String(item.column));
+
+    return element;
+  }
+
+  /**
+   * @param {LH.Audit.Details.Filmstrip} details
+   * @return {Element}
+   */
+  _renderFilmstrip(details) {
+    const filmstripEl = this._dom.createElement('div', 'lh-filmstrip');
+
+    for (const thumbnail of details.items) {
+      const frameEl = this._dom.createChildOf(filmstripEl, 'div', 'lh-filmstrip__frame');
+      this._dom.createChildOf(frameEl, 'img', 'lh-filmstrip__thumbnail', {
+        src: thumbnail.data,
+        alt: `Screenshot`,
+      });
+    }
+    return filmstripEl;
+  }
+
+  /**
+   * @param {string} text
+   * @return {Element}
+   */
+  _renderCode(text) {
+    const pre = this._dom.createElement('pre', 'lh-code');
+    pre.textContent = text;
+    return pre;
+  }
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = DetailsRenderer;
+} else {
+  self.DetailsRenderer = DetailsRenderer;
+}
+;
+/**
+ * @license
+ * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'use strict';
+
+/**
+ * @fileoverview This file contains helpers for constructing and rendering the
+ * critical request chains network tree.
+ */
+
+/* globals self Util */
+
+/** @typedef {import('./dom.js')} DOM */
+/** @typedef {import('./details-renderer.js')} DetailsRenderer */
+
+class CriticalRequestChainRenderer {
+  /**
+   * Create render context for critical-request-chain tree display.
+   * @param {LH.Audit.SimpleCriticalRequestNode} tree
+   * @return {{tree: LH.Audit.SimpleCriticalRequestNode, startTime: number, transferSize: number}}
+   */
+  static initTree(tree) {
+    let startTime = 0;
+    const rootNodes = Object.keys(tree);
+    if (rootNodes.length > 0) {
+      const node = tree[rootNodes[0]];
+      startTime = node.request.startTime;
+    }
+
+    return {tree, startTime, transferSize: 0};
+  }
+
+  /**
+   * Helper to create context for each critical-request-chain node based on its
+   * parent. Calculates if this node is the last child, whether it has any
+   * children itself and what the tree looks like all the way back up to the root,
+   * so the tree markers can be drawn correctly.
+   * @param {LH.Audit.SimpleCriticalRequestNode} parent
+   * @param {string} id
+   * @param {number} startTime
+   * @param {number} transferSize
+   * @param {Array<boolean>=} treeMarkers
+   * @param {boolean=} parentIsLastChild
+   * @return {CRCSegment}
+   */
+  static createSegment(parent, id, startTime, transferSize, treeMarkers, parentIsLastChild) {
+    const node = parent[id];
+    const siblings = Object.keys(parent);
+    const isLastChild = siblings.indexOf(id) === (siblings.length - 1);
+    const hasChildren = !!node.children && Object.keys(node.children).length > 0;
+
+    // Copy the tree markers so that we don't change by reference.
+    const newTreeMarkers = Array.isArray(treeMarkers) ? treeMarkers.slice(0) : [];
+
+    // Add on the new entry.
+    if (typeof parentIsLastChild !== 'undefined') {
+      newTreeMarkers.push(!parentIsLastChild);
+    }
+
+    return {
+      node,
+      isLastChild,
+      hasChildren,
+      startTime,
+      transferSize: transferSize + node.request.transferSize,
+      treeMarkers: newTreeMarkers,
+    };
+  }
+
+  /**
+   * Creates the DOM for a tree segment.
+   * @param {DOM} dom
+   * @param {DocumentFragment} tmpl
+   * @param {CRCSegment} segment
+   * @param {DetailsRenderer} detailsRenderer
+   * @return {Node}
+   */
+  static createChainNode(dom, tmpl, segment, detailsRenderer) {
+    const chainsEl = dom.cloneTemplate('#tmpl-lh-crc__chains', tmpl);
+
+    // Hovering over request shows full URL.
+    dom.find('.crc-node', chainsEl).setAttribute('title', segment.node.request.url);
+
+    const treeMarkeEl = dom.find('.crc-node__tree-marker', chainsEl);
+
+    // Construct lines and add spacers for sub requests.
+    segment.treeMarkers.forEach(separator => {
+      if (separator) {
+        treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker vert'));
+        treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker'));
+      } else {
+        treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker'));
+        treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker'));
+      }
+    });
+
+    if (segment.isLastChild) {
+      treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker up-right'));
+      treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker right'));
+    } else {
+      treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker vert-right'));
+      treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker right'));
+    }
+
+    if (segment.hasChildren) {
+      treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker horiz-down'));
+    } else {
+      treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker right'));
+    }
+
+    // Fill in url, host, and request size information.
+    const url = segment.node.request.url;
+    const linkEl = detailsRenderer.renderTextURL(url);
+    const treevalEl = dom.find('.crc-node__tree-value', chainsEl);
+    treevalEl.appendChild(linkEl);
+
+    if (!segment.hasChildren) {
+      const {startTime, endTime, transferSize} = segment.node.request;
+      const span = dom.createElement('span', 'crc-node__chain-duration');
+      span.textContent = ' - ' + Util.i18n.formatMilliseconds((endTime - startTime) * 1000) + ', ';
+      const span2 = dom.createElement('span', 'crc-node__chain-duration');
+      span2.textContent = Util.i18n.formatBytesToKiB(transferSize, 0.01);
+
+      treevalEl.appendChild(span);
+      treevalEl.appendChild(span2);
+    }
+
+    return chainsEl;
+  }
+
+  /**
+   * Recursively builds a tree from segments.
+   * @param {DOM} dom
+   * @param {DocumentFragment} tmpl
+   * @param {CRCSegment} segment
+   * @param {Element} elem Parent element.
+   * @param {LH.Audit.Details.CriticalRequestChain} details
+   * @param {DetailsRenderer} detailsRenderer
+   */
+  static buildTree(dom, tmpl, segment, elem, details, detailsRenderer) {
+    elem.appendChild(CRCRenderer.createChainNode(dom, tmpl, segment, detailsRenderer));
+    if (segment.node.children) {
+      for (const key of Object.keys(segment.node.children)) {
+        const childSegment = CRCRenderer.createSegment(segment.node.children, key,
+          segment.startTime, segment.transferSize, segment.treeMarkers, segment.isLastChild);
+        CRCRenderer.buildTree(dom, tmpl, childSegment, elem, details, detailsRenderer);
+      }
+    }
+  }
+
+  /**
+   * @param {DOM} dom
+   * @param {ParentNode} templateContext
+   * @param {LH.Audit.Details.CriticalRequestChain} details
+   * @param {DetailsRenderer} detailsRenderer
+   * @return {Element}
+   */
+  static render(dom, templateContext, details, detailsRenderer) {
+    const tmpl = dom.cloneTemplate('#tmpl-lh-crc', templateContext);
+    const containerEl = dom.find('.lh-crc', tmpl);
+
+    // Fill in top summary.
+    dom.find('.crc-initial-nav', tmpl).textContent = Util.i18n.strings.crcInitialNavigation;
+    dom.find('.lh-crc__longest_duration_label', tmpl).textContent =
+        Util.i18n.strings.crcLongestDurationLabel;
+    dom.find('.lh-crc__longest_duration', tmpl).textContent =
+        Util.i18n.formatMilliseconds(details.longestChain.duration);
+
+    // Construct visual tree.
+    const root = CRCRenderer.initTree(details.chains);
+    for (const key of Object.keys(root.tree)) {
+      const segment = CRCRenderer.createSegment(root.tree, key, root.startTime, root.transferSize);
+      CRCRenderer.buildTree(dom, tmpl, segment, containerEl, details, detailsRenderer);
+    }
+
+    return dom.find('.lh-crc-container', tmpl);
+  }
+}
+
+// Alias b/c the name is really long.
+const CRCRenderer = CriticalRequestChainRenderer;
+
+// Allow Node require()'ing.
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = CriticalRequestChainRenderer;
+} else {
+  self.CriticalRequestChainRenderer = CriticalRequestChainRenderer;
+}
+
+/** @typedef {{
+      node: LH.Audit.SimpleCriticalRequestNode[string],
+      isLastChild: boolean,
+      hasChildren: boolean,
+      startTime: number,
+      transferSize: number,
+      treeMarkers: Array<boolean>
+  }} CRCSegment
+ */
+;
+/**
+ * @license Copyright 2019 The Lighthouse Authors. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+ */
+'use strict';
+
+/* globals self, Util */
+
+/** @typedef {import('./details-renderer')} DetailsRenderer */
+/** @typedef {import('./dom')} DOM */
+
+/** @enum {number} */
+const LineVisibility = {
+  /** Show regardless of whether the snippet is collapsed or expanded */
+  ALWAYS: 0,
+  WHEN_COLLAPSED: 1,
+  WHEN_EXPANDED: 2,
+};
+
+/** @enum {number} */
+const LineContentType = {
+  /** A line of content */
+  CONTENT_NORMAL: 0,
+  /** A line of content that's emphasized by setting the CSS background color */
+  CONTENT_HIGHLIGHTED: 1,
+  /** Use when some lines are hidden, shows the "..." placeholder */
+  PLACEHOLDER: 2,
+  /** A message about a line of content or the snippet in general */
+  MESSAGE: 3,
+};
+
+/** @typedef {{
+    content: string;
+    lineNumber: string | number;
+    contentType: LineContentType;
+    truncated?: boolean;
+    visibility?: LineVisibility;
+}} LineDetails */
+
+const classNamesByContentType = {
+  [LineContentType.CONTENT_NORMAL]: ['lh-snippet__line--content'],
+  [LineContentType.CONTENT_HIGHLIGHTED]: [
+    'lh-snippet__line--content',
+    'lh-snippet__line--content-highlighted',
+  ],
+  [LineContentType.PLACEHOLDER]: ['lh-snippet__line--placeholder'],
+  [LineContentType.MESSAGE]: ['lh-snippet__line--message'],
+};
+
+/**
+ * @param {LH.Audit.Details.SnippetValue['lines']} lines
+ * @param {number} lineNumber
+ * @return {{line?: LH.Audit.Details.SnippetValue['lines'][0], previousLine?: LH.Audit.Details.SnippetValue['lines'][0]}}
+ */
+function getLineAndPreviousLine(lines, lineNumber) {
+  return {
+    line: lines.find(l => l.lineNumber === lineNumber),
+    previousLine: lines.find(l => l.lineNumber === lineNumber - 1),
+  };
+}
+
+/**
+ * @param {LH.Audit.Details.SnippetValue["lineMessages"]} messages
+ * @param {number} lineNumber
+ */
+function getMessagesForLineNumber(messages, lineNumber) {
+  return messages.filter(h => h.lineNumber === lineNumber);
+}
+
+/**
+ * @param {LH.Audit.Details.SnippetValue} details
+ * @return {LH.Audit.Details.SnippetValue['lines']}
+ */
+function getLinesWhenCollapsed(details) {
+  const SURROUNDING_LINES_TO_SHOW_WHEN_COLLAPSED = 2;
+  return Util.filterRelevantLines(
+    details.lines,
+    details.lineMessages,
+    SURROUNDING_LINES_TO_SHOW_WHEN_COLLAPSED
+  );
+}
+
+/**
+ * Render snippet of text with line numbers and annotations.
+ * By default we only show a few lines around each annotation and the user
+ * can click "Expand snippet" to show more.
+ * Content lines with annotations are highlighted.
+ */
+class SnippetRenderer {
+  /**
+   * @param {DOM} dom
+   * @param {DocumentFragment} tmpl
+   * @param {LH.Audit.Details.SnippetValue} details
+   * @param {DetailsRenderer} detailsRenderer
+   * @param {function} toggleExpandedFn
+   * @return {DocumentFragment}
+   */
+  static renderHeader(dom, tmpl, details, detailsRenderer, toggleExpandedFn) {
+    const linesWhenCollapsed = getLinesWhenCollapsed(details);
+    const canExpand = linesWhenCollapsed.length < details.lines.length;
+
+    const header = dom.cloneTemplate('#tmpl-lh-snippet__header', tmpl);
+    dom.find('.lh-snippet__title', header).textContent = details.title;
+
+    const {
+      snippetCollapseButtonLabel,
+      snippetExpandButtonLabel,
+    } = Util.i18n.strings;
+    dom.find(
+      '.lh-snippet__btn-label-collapse',
+      header
+    ).textContent = snippetCollapseButtonLabel;
+    dom.find(
+      '.lh-snippet__btn-label-expand',
+      header
+    ).textContent = snippetExpandButtonLabel;
+
+    const toggleExpandButton = dom.find('.lh-snippet__toggle-expand', header);
+    // If we're already showing all the available lines of the snippet, we don't need an
+    // expand/collapse button and can remove it from the DOM.
+    // If we leave the button in though, wire up the click listener to toggle visibility!
+    if (!canExpand) {
+      toggleExpandButton.remove();
+    } else {
+      toggleExpandButton.addEventListener('click', () => toggleExpandedFn());
+    }
+
+    // We only show the source node of the snippet in DevTools because then the user can
+    // access the full element detail. Just being able to see the outer HTML isn't very useful.
+    if (details.node && dom.isDevTools()) {
+      const nodeContainer = dom.find('.lh-snippet__node', header);
+      nodeContainer.appendChild(detailsRenderer.renderNode(details.node));
+    }
+
+    return header;
+  }
+
+  /**
+   * Renders a line (text content, message, or placeholder) as a DOM element.
+   * @param {DOM} dom
+   * @param {DocumentFragment} tmpl
+   * @param {LineDetails} lineDetails
+   * @return {Element}
+   */
+  static renderSnippetLine(
+      dom,
+      tmpl,
+      {content, lineNumber, truncated, contentType, visibility}
+  ) {
+    const clonedTemplate = dom.cloneTemplate('#tmpl-lh-snippet__line', tmpl);
+    const contentLine = dom.find('.lh-snippet__line', clonedTemplate);
+    const {classList} = contentLine;
+
+    classNamesByContentType[contentType].forEach(typeClass =>
+      classList.add(typeClass)
+    );
+
+    if (visibility === LineVisibility.WHEN_COLLAPSED) {
+      classList.add('lh-snippet__show-if-collapsed');
+    } else if (visibility === LineVisibility.WHEN_EXPANDED) {
+      classList.add('lh-snippet__show-if-expanded');
+    }
+
+    const lineContent = content + (truncated ? '…' : '');
+    const lineContentEl = dom.find('.lh-snippet__line code', contentLine);
+    if (contentType === LineContentType.MESSAGE) {
+      lineContentEl.appendChild(dom.convertMarkdownLinkSnippets(lineContent));
+    } else {
+      lineContentEl.textContent = lineContent;
+    }
+
+    dom.find(
+      '.lh-snippet__line-number',
+      contentLine
+    ).textContent = lineNumber.toString();
+
+    return contentLine;
+  }
+
+  /**
+   * @param {DOM} dom
+   * @param {DocumentFragment} tmpl
+   * @param {{message: string}} message
+   * @return {Element}
+   */
+  static renderMessage(dom, tmpl, message) {
+    return SnippetRenderer.renderSnippetLine(dom, tmpl, {
+      lineNumber: ' ',
+      content: message.message,
+      contentType: LineContentType.MESSAGE,
+    });
+  }
+
+  /**
+   * @param {DOM} dom
+   * @param {DocumentFragment} tmpl
+   * @param {LineVisibility} visibility
+   * @return {Element}
+   */
+  static renderOmittedLinesPlaceholder(dom, tmpl, visibility) {
+    return SnippetRenderer.renderSnippetLine(dom, tmpl, {
+      lineNumber: '…',
+      content: '',
+      visibility,
+      contentType: LineContentType.PLACEHOLDER,
+    });
+  }
+
+  /**
+   * @param {DOM} dom
+   * @param {DocumentFragment} tmpl
+   * @param {LH.Audit.Details.SnippetValue} details
+   * @return {DocumentFragment}
+   */
+  static renderSnippetContent(dom, tmpl, details) {
+    const template = dom.cloneTemplate('#tmpl-lh-snippet__content', tmpl);
+    const snippetEl = dom.find('.lh-snippet__snippet-inner', template);
+
+    // First render messages that don't belong to specific lines
+    details.generalMessages.forEach(m =>
+      snippetEl.append(SnippetRenderer.renderMessage(dom, tmpl, m))
+    );
+    // Then render the lines and their messages, as well as placeholders where lines are omitted
+    snippetEl.append(SnippetRenderer.renderSnippetLines(dom, tmpl, details));
+
+    return template;
+  }
+
+  /**
+   * @param {DOM} dom
+   * @param {DocumentFragment} tmpl
+   * @param {LH.Audit.Details.SnippetValue} details
+   * @return {DocumentFragment}
+   */
+  static renderSnippetLines(dom, tmpl, details) {
+    const {lineMessages, generalMessages, lineCount, lines} = details;
+    const linesWhenCollapsed = getLinesWhenCollapsed(details);
+    const hasOnlyGeneralMessages =
+      generalMessages.length > 0 && lineMessages.length === 0;
+
+    const lineContainer = dom.createFragment();
+
+    // When a line is not shown in the collapsed state we try to see if we also need an
+    // omitted lines placeholder for the expanded state, rather than rendering two separate
+    // placeholders.
+    let hasPendingOmittedLinesPlaceholderForCollapsedState = false;
+
+    for (let lineNumber = 1; lineNumber <= lineCount; lineNumber++) {
+      const {line, previousLine} = getLineAndPreviousLine(lines, lineNumber);
+      const {
+        line: lineWhenCollapsed,
+        previousLine: previousLineWhenCollapsed,
+      } = getLineAndPreviousLine(linesWhenCollapsed, lineNumber);
+
+      const showLineWhenCollapsed = !!lineWhenCollapsed;
+      const showPreviousLineWhenCollapsed = !!previousLineWhenCollapsed;
+
+      // If we went from showing lines in the collapsed state to not showing them
+      // we need to render a placeholder
+      if (showPreviousLineWhenCollapsed && !showLineWhenCollapsed) {
+        hasPendingOmittedLinesPlaceholderForCollapsedState = true;
+      }
+      // If we are back to lines being visible in the collapsed and the placeholder
+      // hasn't been rendered yet then render it now
+      if (
+        showLineWhenCollapsed &&
+        hasPendingOmittedLinesPlaceholderForCollapsedState
+      ) {
+        lineContainer.append(
+          SnippetRenderer.renderOmittedLinesPlaceholder(
+            dom,
+            tmpl,
+            LineVisibility.WHEN_COLLAPSED
+          )
+        );
+        hasPendingOmittedLinesPlaceholderForCollapsedState = false;
+      }
+
+      // Render omitted lines placeholder if we have not already rendered one for this gap
+      const isFirstOmittedLineWhenExpanded = !line && !!previousLine;
+      const isFirstLineOverallAndIsOmittedWhenExpanded =
+        !line && lineNumber === 1;
+      if (
+        isFirstOmittedLineWhenExpanded ||
+        isFirstLineOverallAndIsOmittedWhenExpanded
+      ) {
+        // In the collapsed state we don't show omitted lines placeholders around
+        // the edges of the snippet
+        const hasRenderedAllLinesVisibleWhenCollapsed = !linesWhenCollapsed.some(
+          l => l.lineNumber > lineNumber
+        );
+        const onlyShowWhenExpanded =
+          hasRenderedAllLinesVisibleWhenCollapsed || lineNumber === 1;
+        lineContainer.append(
+          SnippetRenderer.renderOmittedLinesPlaceholder(
+            dom,
+            tmpl,
+            onlyShowWhenExpanded
+              ? LineVisibility.WHEN_EXPANDED
+              : LineVisibility.ALWAYS
+          )
+        );
+        hasPendingOmittedLinesPlaceholderForCollapsedState = false;
+      }
+
+      if (!line) {
+        // Can't render the line if we don't know its content (instead we've rendered a placeholder)
+        continue;
+      }
+
+      // Now render the line and any messages
+      const messages = getMessagesForLineNumber(lineMessages, lineNumber);
+      const highlightLine = messages.length > 0 || hasOnlyGeneralMessages;
+      const contentLineDetails = Object.assign({}, line, {
+        contentType: highlightLine
+          ? LineContentType.CONTENT_HIGHLIGHTED
+          : LineContentType.CONTENT_NORMAL,
+        visibility: lineWhenCollapsed
+          ? LineVisibility.ALWAYS
+          : LineVisibility.WHEN_EXPANDED,
+      });
+      lineContainer.append(
+        SnippetRenderer.renderSnippetLine(dom, tmpl, contentLineDetails)
+      );
+
+      messages.forEach(message => {
+        lineContainer.append(SnippetRenderer.renderMessage(dom, tmpl, message));
+      });
+    }
+
+    return lineContainer;
+  }
+
+  /**
+   * @param {DOM} dom
+   * @param {ParentNode} templateContext
+   * @param {LH.Audit.Details.SnippetValue} details
+   * @param {DetailsRenderer} detailsRenderer
+   * @return {!Element}
+   */
+  static render(dom, templateContext, details, detailsRenderer) {
+    const tmpl = dom.cloneTemplate('#tmpl-lh-snippet', templateContext);
+    const snippetEl = dom.find('.lh-snippet', tmpl);
+
+    const header = SnippetRenderer.renderHeader(
+      dom,
+      tmpl,
+      details,
+      detailsRenderer,
+      () => snippetEl.classList.toggle('lh-snippet--expanded')
+    );
+    const content = SnippetRenderer.renderSnippetContent(dom, tmpl, details);
+    snippetEl.append(header, content);
+
+    return snippetEl;
+  }
+}
+
+// Allow Node require()'ing.
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = SnippetRenderer;
+} else {
+  self.SnippetRenderer = SnippetRenderer;
+}
+;
+/**
+ * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+ */
+'use strict';
+
+/**
+ * @fileoverview These functions define {Rect}s and {Size}s using two different coordinate spaces:
+ *   1. Screenshot coords (SC suffix): where 0,0 is the top left of the screenshot image
+ *   2. Display coords (DC suffix): that match the CSS pixel coordinate space of the LH report's page.
+ */
+
+/* globals self Util */
+
+/** @typedef {import('./dom.js')} DOM */
+/** @typedef {LH.Artifacts.Rect} Rect */
+/** @typedef {{width: number, height: number}} Size */
+
+/**
+ * @typedef InstallOverlayFeatureParams
+ * @property {DOM} dom
+ * @property {Element} reportEl
+ * @property {Element} overlayContainerEl
+ * @property {ParentNode} templateContext
+ * @property {LH.Artifacts.FullPageScreenshot} fullPageScreenshot
+ */
+
+/**
+ * @param {LH.Artifacts.FullPageScreenshot['screenshot']} screenshot
+ * @param {LH.Artifacts.Rect} rect
+ * @return {boolean}
+ */
+function screenshotOverlapsRect(screenshot, rect) {
+  return rect.left <= screenshot.width &&
+    0 <= rect.right &&
+    rect.top <= screenshot.height &&
+    0 <= rect.bottom;
+}
+
+/**
+ * @param {number} value
+ * @param {number} min
+ * @param {number} max
+ */
+function clamp(value, min, max) {
+  if (value < min) return min;
+  if (value > max) return max;
+  return value;
+}
+
+/**
+ * @param {Rect} rect
+ */
+function getRectCenterPoint(rect) {
+  return {
+    x: rect.left + rect.width / 2,
+    y: rect.top + rect.height / 2,
+  };
+}
+
+class ElementScreenshotRenderer {
+  /**
+   * Given the location of an element and the sizes of the preview and screenshot,
+   * compute the absolute positions (in screenshot coordinate scale) of the screenshot content
+   * and the highlighted rect around the element.
+   * @param {Rect} elementRectSC
+   * @param {Size} elementPreviewSizeSC
+   * @param {Size} screenshotSize
+   */
+  static getScreenshotPositions(elementRectSC, elementPreviewSizeSC, screenshotSize) {
+    const elementRectCenter = getRectCenterPoint(elementRectSC);
+
+    // Try to center clipped region.
+    const screenshotLeftVisibleEdge = clamp(
+      elementRectCenter.x - elementPreviewSizeSC.width / 2,
+      0, screenshotSize.width - elementPreviewSizeSC.width
+    );
+    const screenshotTopVisisbleEdge = clamp(
+      elementRectCenter.y - elementPreviewSizeSC.height / 2,
+      0, screenshotSize.height - elementPreviewSizeSC.height
+    );
+
+    return {
+      screenshot: {
+        left: screenshotLeftVisibleEdge,
+        top: screenshotTopVisisbleEdge,
+      },
+      clip: {
+        left: elementRectSC.left - screenshotLeftVisibleEdge,
+        top: elementRectSC.top - screenshotTopVisisbleEdge,
+      },
+    };
+  }
+
+  /**
+   * Render a clipPath SVG element to assist marking the element's rect.
+   * The elementRect and previewSize are in screenshot coordinate scale.
+   * @param {DOM} dom
+   * @param {HTMLElement} maskEl
+   * @param {{left: number, top: number}} positionClip
+   * @param {LH.Artifacts.Rect} elementRect
+   * @param {Size} elementPreviewSize
+   */
+  static renderClipPathInScreenshot(dom, maskEl, positionClip, elementRect, elementPreviewSize) {
+    const clipPathEl = dom.find('clipPath', maskEl);
+    const clipId = `clip-${Util.getUniqueSuffix()}`;
+    clipPathEl.id = clipId;
+    maskEl.style.clipPath = `url(#${clipId})`;
+
+    // Normalize values between 0-1.
+    const top = positionClip.top / elementPreviewSize.height;
+    const bottom = top + elementRect.height / elementPreviewSize.height;
+    const left = positionClip.left / elementPreviewSize.width;
+    const right = left + elementRect.width / elementPreviewSize.width;
+
+    const polygonsPoints = [
+      `0,0             1,0            1,${top}          0,${top}`,
+      `0,${bottom}     1,${bottom}    1,1               0,1`,
+      `0,${top}        ${left},${top} ${left},${bottom} 0,${bottom}`,
+      `${right},${top} 1,${top}       1,${bottom}       ${right},${bottom}`,
+    ];
+    for (const points of polygonsPoints) {
+      clipPathEl.append(dom.createElementNS(
+        'http://www.w3.org/2000/svg', 'polygon', undefined, {points}));
+    }
+  }
+
+  /**
+   * Called by report renderer. Defines a css variable used by any element screenshots
+   * in the provided report element.
+   * Allows for multiple Lighthouse reports to be rendered on the page, each with their
+   * own full page screenshot.
+   * @param {HTMLElement} el
+   * @param {LH.Artifacts.FullPageScreenshot['screenshot']} screenshot
+   */
+  static installFullPageScreenshot(el, screenshot) {
+    el.style.setProperty('--element-screenshot-url', `url(${screenshot.data})`);
+  }
+
+  /**
+   * Installs the lightbox elements and wires up click listeners to all .lh-element-screenshot elements.
+   * @param {InstallOverlayFeatureParams} opts
+   */
+  static installOverlayFeature(opts) {
+    const {dom, reportEl, overlayContainerEl, templateContext, fullPageScreenshot} = opts;
+    const screenshotOverlayClass = 'lh-screenshot-overlay--enabled';
+    // Don't install the feature more than once.
+    if (reportEl.classList.contains(screenshotOverlayClass)) return;
+    reportEl.classList.add(screenshotOverlayClass);
+
+    // Add a single listener to the provided element to handle all clicks within (event delegation).
+    reportEl.addEventListener('click', e => {
+      const target = /** @type {?HTMLElement} */ (e.target);
+      if (!target) return;
+      // Only activate the overlay for clicks on the screenshot *preview* of an element, not the full-size too.
+      const el = /** @type {?HTMLElement} */ (target.closest('.lh-node > .lh-element-screenshot'));
+      if (!el) return;
+
+      const overlay = dom.createElement('div', 'lh-element-screenshot__overlay');
+      overlayContainerEl.append(overlay);
+
+      // The newly-added overlay has the dimensions we need.
+      const maxLightboxSize = {
+        width: overlay.clientWidth * 0.95,
+        height: overlay.clientHeight * 0.80,
+      };
+
+      const elementRectSC = {
+        width: Number(el.dataset['rectWidth']),
+        height: Number(el.dataset['rectHeight']),
+        left: Number(el.dataset['rectLeft']),
+        right: Number(el.dataset['rectLeft']) + Number(el.dataset['rectWidth']),
+        top: Number(el.dataset['rectTop']),
+        bottom: Number(el.dataset['rectTop']) + Number(el.dataset['rectHeight']),
+      };
+      const screenshotElement = ElementScreenshotRenderer.render(
+        dom,
+        templateContext,
+        fullPageScreenshot.screenshot,
+        elementRectSC,
+        maxLightboxSize
+      );
+
+      // This would be unexpected here.
+      // When `screenshotElement` is `null`, there is also no thumbnail element for the user to have clicked to make it this far.
+      if (!screenshotElement) {
+        overlay.remove();
+        return;
+      }
+      overlay.appendChild(screenshotElement);
+      overlay.addEventListener('click', () => overlay.remove());
+    });
+  }
+
+  /**
+   * Given the size of the element in the screenshot and the total available size of our preview container,
+   * compute the factor by which we need to zoom out to view the entire element with context.
+   * @param {LH.Artifacts.Rect} elementRectSC
+   * @param {Size} renderContainerSizeDC
+   * @return {number}
+   */
+  static _computeZoomFactor(elementRectSC, renderContainerSizeDC) {
+    const targetClipToViewportRatio = 0.75;
+    const zoomRatioXY = {
+      x: renderContainerSizeDC.width / elementRectSC.width,
+      y: renderContainerSizeDC.height / elementRectSC.height,
+    };
+    const zoomFactor = targetClipToViewportRatio * Math.min(zoomRatioXY.x, zoomRatioXY.y);
+    return Math.min(1, zoomFactor);
+  }
+
+  /**
+   * Renders an element with surrounding context from the full page screenshot.
+   * Used to render both the thumbnail preview in details tables and the full-page screenshot in the lightbox.
+   * Returns null if element rect is outside screenshot bounds.
+   * @param {DOM} dom
+   * @param {ParentNode} templateContext
+   * @param {LH.Artifacts.FullPageScreenshot['screenshot']} screenshot
+   * @param {LH.Artifacts.Rect} elementRectSC Region of screenshot to highlight.
+   * @param {Size} maxRenderSizeDC e.g. maxThumbnailSize or maxLightboxSize.
+   * @return {Element|null}
+   */
+  static render(dom, templateContext, screenshot, elementRectSC, maxRenderSizeDC) {
+    if (!screenshotOverlapsRect(screenshot, elementRectSC)) {
+      return null;
+    }
+
+    const tmpl = dom.cloneTemplate('#tmpl-lh-element-screenshot', templateContext);
+    const containerEl = dom.find('div.lh-element-screenshot', tmpl);
+
+    containerEl.dataset['rectWidth'] = elementRectSC.width.toString();
+    containerEl.dataset['rectHeight'] = elementRectSC.height.toString();
+    containerEl.dataset['rectLeft'] = elementRectSC.left.toString();
+    containerEl.dataset['rectTop'] = elementRectSC.top.toString();
+
+    // Zoom out when highlighted region takes up most of the viewport.
+    // This provides more context for where on the page this element is.
+    const zoomFactor = this._computeZoomFactor(elementRectSC, maxRenderSizeDC);
+
+    const elementPreviewSizeSC = {
+      width: maxRenderSizeDC.width / zoomFactor,
+      height: maxRenderSizeDC.height / zoomFactor,
+    };
+    elementPreviewSizeSC.width = Math.min(screenshot.width, elementPreviewSizeSC.width);
+    /* This preview size is either the size of the thumbnail or size of the Lightbox */
+    const elementPreviewSizeDC = {
+      width: elementPreviewSizeSC.width * zoomFactor,
+      height: elementPreviewSizeSC.height * zoomFactor,
+    };
+
+    const positions = ElementScreenshotRenderer.getScreenshotPositions(
+      elementRectSC,
+      elementPreviewSizeSC,
+      {width: screenshot.width, height: screenshot.height}
+    );
+
+    const contentEl = dom.find('div.lh-element-screenshot__content', containerEl);
+    contentEl.style.top = `-${elementPreviewSizeDC.height}px`;
+
+    const imageEl = dom.find('div.lh-element-screenshot__image', containerEl);
+    imageEl.style.width = elementPreviewSizeDC.width + 'px';
+    imageEl.style.height = elementPreviewSizeDC.height + 'px';
+
+    imageEl.style.backgroundPositionY = -(positions.screenshot.top * zoomFactor) + 'px';
+    imageEl.style.backgroundPositionX = -(positions.screenshot.left * zoomFactor) + 'px';
+    imageEl.style.backgroundSize =
+      `${screenshot.width * zoomFactor}px ${screenshot.height * zoomFactor}px`;
+
+    const markerEl = dom.find('div.lh-element-screenshot__element-marker', containerEl);
+    markerEl.style.width = elementRectSC.width * zoomFactor + 'px';
+    markerEl.style.height = elementRectSC.height * zoomFactor + 'px';
+    markerEl.style.left = positions.clip.left * zoomFactor + 'px';
+    markerEl.style.top = positions.clip.top * zoomFactor + 'px';
+
+    const maskEl = dom.find('div.lh-element-screenshot__mask', containerEl);
+    maskEl.style.width = elementPreviewSizeDC.width + 'px';
+    maskEl.style.height = elementPreviewSizeDC.height + 'px';
+
+    ElementScreenshotRenderer.renderClipPathInScreenshot(
+      dom,
+      maskEl,
+      positions.clip,
+      elementRectSC,
+      elementPreviewSizeSC
+    );
+
+    return containerEl;
+  }
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = ElementScreenshotRenderer;
+} else {
+  self.ElementScreenshotRenderer = ElementScreenshotRenderer;
+}
+;
+/**
+ * @license Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+ */
+'use strict';
+
+/**
+ * @fileoverview
+ * @suppress {reportUnknownTypes}
+ */
+
+/**
+ * Generate a filenamePrefix of hostname_YYYY-MM-DD_HH-MM-SS
+ * Date/time uses the local timezone, however Node has unreliable ICU
+ * support, so we must construct a YYYY-MM-DD date format manually. :/
+ * @param {{finalUrl: string, fetchTime: string}} lhr
+ * @return {string}
+ */
+function getFilenamePrefix(lhr) {
+  const hostname = new URL(lhr.finalUrl).hostname;
+  const date = (lhr.fetchTime && new Date(lhr.fetchTime)) || new Date();
+
+  const timeStr = date.toLocaleTimeString('en-US', {hour12: false});
+  const dateParts = date.toLocaleDateString('en-US', {
+    year: 'numeric', month: '2-digit', day: '2-digit',
+  }).split('/');
+  // @ts-expect-error - parts exists
+  dateParts.unshift(dateParts.pop());
+  const dateStr = dateParts.join('-');
+
+  const filenamePrefix = `${hostname}_${dateStr}_${timeStr}`;
+  // replace characters that are unfriendly to filenames
+  return filenamePrefix.replace(/[/?<>\\:*|"]/g, '-');
+}
+
+// don't attempt to export in the browser.
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = {getFilenamePrefix};
+}
+;
+/**
+ * @license
+ * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'use strict';
+
+/**
+ * Logs messages via a UI butter.
+ */
+class Logger {
+  /**
+   * @param {Element} element
+   */
+  constructor(element) {
+    this.el = element;
+    this._id = undefined;
+  }
+
+  /**
+   * Shows a butter bar.
+   * @param {string} msg The message to show.
+   * @param {boolean=} autoHide True to hide the message after a duration.
+   *     Default is true.
+   */
+  log(msg, autoHide = true) {
+    this._id && clearTimeout(this._id);
+
+    this.el.textContent = msg;
+    this.el.classList.add('show');
+    if (autoHide) {
+      this._id = setTimeout(_ => {
+        this.el.classList.remove('show');
+      }, 7000);
+    }
+  }
+
+  /**
+   * @param {string} msg
+   */
+  warn(msg) {
+    this.log('Warning: ' + msg);
+  }
+
+  /**
+   * @param {string} msg
+   */
+  error(msg) {
+    this.log(msg);
+
+    // Rethrow to make sure it's auditable as an error, but in a setTimeout so page
+    // recovers gracefully and user can try loading a report again.
+    setTimeout(_ => {
+      throw new Error(msg);
+    }, 0);
+  }
+
+  /**
+   * Explicitly hides the butter bar.
+   */
+  hide() {
+    this._id && clearTimeout(this._id);
+    this.el.classList.remove('show');
+  }
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = Logger;
+}
+;
+/**
+ * @license
+ * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'use strict';
+
+/* eslint-env browser */
+
+/**
+ * @fileoverview Adds tools button, print, and other dynamic functionality to
+ * the report.
+ */
+
+/* globals getFilenamePrefix Util TextEncoding ElementScreenshotRenderer */
+
+/** @typedef {import('./dom')} DOM */
+
+/**
+ * @param {HTMLTableElement} tableEl
+ * @return {Array<HTMLElement>}
+ */
+function getTableRows(tableEl) {
+  return Array.from(tableEl.tBodies[0].rows);
+}
+
+function getAppsOrigin() {
+  const isVercel = window.location.host.endsWith('.vercel.app');
+  const isDev = new URLSearchParams(window.location.search).has('dev');
+
+  if (isVercel) return `https://${window.location.host}/gh-pages`;
+  if (isDev) return 'http://localhost:8000';
+  return 'https://googlechrome.github.io/lighthouse';
+}
+
+class ReportUIFeatures {
+  /**
+   * @param {DOM} dom
+   */
+  constructor(dom) {
+    /** @type {LH.Result} */
+    this.json; // eslint-disable-line no-unused-expressions
+    /** @type {DOM} */
+    this._dom = dom;
+    /** @type {Document} */
+    this._document = this._dom.document();
+    /** @type {ParentNode} */
+    this._templateContext = this._dom.document();
+    /** @type {DropDown} */
+    this._dropDown = new DropDown(this._dom);
+    /** @type {boolean} */
+    this._copyAttempt = false;
+    /** @type {HTMLElement} */
+    this.topbarEl; // eslint-disable-line no-unused-expressions
+    /** @type {HTMLElement} */
+    this.scoreScaleEl; // eslint-disable-line no-unused-expressions
+    /** @type {HTMLElement} */
+    this.stickyHeaderEl; // eslint-disable-line no-unused-expressions
+    /** @type {HTMLElement} */
+    this.highlightEl; // eslint-disable-line no-unused-expressions
+
+    this.onMediaQueryChange = this.onMediaQueryChange.bind(this);
+    this.onCopy = this.onCopy.bind(this);
+    this.onDropDownMenuClick = this.onDropDownMenuClick.bind(this);
+    this.onKeyUp = this.onKeyUp.bind(this);
+    this.collapseAllDetails = this.collapseAllDetails.bind(this);
+    this.expandAllDetails = this.expandAllDetails.bind(this);
+    this._toggleDarkTheme = this._toggleDarkTheme.bind(this);
+    this._updateStickyHeaderOnScroll = this._updateStickyHeaderOnScroll.bind(this);
+  }
+
+  /**
+   * Adds tools button, print, and other functionality to the report. The method
+   * should be called whenever the report needs to be re-rendered.
+   * @param {LH.Result} report
+   */
+  initFeatures(report) {
+    this.json = report;
+
+    this._setupMediaQueryListeners();
+    this._dropDown.setup(this.onDropDownMenuClick);
+    this._setupThirdPartyFilter();
+    this._setupElementScreenshotOverlay(this._dom.find('.lh-container', this._document));
+    this._setUpCollapseDetailsAfterPrinting();
+    this._resetUIState();
+    this._document.addEventListener('keyup', this.onKeyUp);
+    this._document.addEventListener('copy', this.onCopy);
+
+    const topbarLogo = this._dom.find('.lh-topbar__logo', this._document);
+    topbarLogo.addEventListener('click', () => this._toggleDarkTheme());
+
+    let turnOffTheLights = false;
+    // Do not query the system preferences for DevTools - DevTools should only apply dark theme
+    // if dark is selected in the settings panel.
+    if (!this._dom.isDevTools() && window.matchMedia('(prefers-color-scheme: dark)').matches) {
+      turnOffTheLights = true;
+    }
+
+    // Fireworks!
+    // To get fireworks you need 100 scores in all core categories, except PWA (because going the PWA route is discretionary).
+    const fireworksRequiredCategoryIds = ['performance', 'accessibility', 'best-practices', 'seo'];
+    const scoresAll100 = fireworksRequiredCategoryIds.every(id => {
+      const cat = report.categories[id];
+      return cat && cat.score === 1;
+    });
+    if (scoresAll100) {
+      turnOffTheLights = true;
+      this._enableFireworks();
+    }
+
+    if (turnOffTheLights) {
+      this._toggleDarkTheme(true);
+    }
+
+    // There is only a sticky header when at least 2 categories are present.
+    if (Object.keys(this.json.categories).length >= 2) {
+      this._setupStickyHeaderElements();
+      const containerEl = this._dom.find('.lh-container', this._document);
+      const elToAddScrollListener = this._getScrollParent(containerEl);
+      elToAddScrollListener.addEventListener('scroll', this._updateStickyHeaderOnScroll);
+
+      // Use ResizeObserver where available.
+      // TODO: there is an issue with incorrect position numbers and, as a result, performance
+      // issues due to layout thrashing.
+      // See https://github.com/GoogleChrome/lighthouse/pull/9023/files#r288822287 for details.
+      // For now, limit to DevTools.
+      if (this._dom.isDevTools()) {
+        const resizeObserver = new window.ResizeObserver(this._updateStickyHeaderOnScroll);
+        resizeObserver.observe(containerEl);
+      } else {
+        window.addEventListener('resize', this._updateStickyHeaderOnScroll);
+      }
+    }
+
+    // Show the metric descriptions by default when there is an error.
+    const hasMetricError = report.categories.performance && report.categories.performance.auditRefs
+      .some(audit => Boolean(audit.group === 'metrics' && report.audits[audit.id].errorMessage));
+    if (hasMetricError) {
+      const toggleInputEl = this._dom.find('input.lh-metrics-toggle__input', this._document);
+      toggleInputEl.checked = true;
+    }
+
+    const showTreemapApp =
+      this.json.audits['script-treemap-data'] && this.json.audits['script-treemap-data'].details;
+    if (showTreemapApp) {
+      this.addButton({
+        text: Util.i18n.strings.viewTreemapLabel,
+        icon: 'treemap',
+        onClick: () => ReportUIFeatures.openTreemap(this.json),
+      });
+    }
+
+    // Fill in all i18n data.
+    for (const node of this._dom.findAll('[data-i18n]', this._dom.document())) {
+      // These strings are guaranteed to (at least) have a default English string in Util.UIStrings,
+      // so this cannot be undefined as long as `report-ui-features.data-i18n` test passes.
+      const i18nAttr = /** @type {keyof LH.I18NRendererStrings} */ (node.getAttribute('data-i18n'));
+      node.textContent = Util.i18n.strings[i18nAttr];
+    }
+  }
+
+  /**
+   * Define a custom element for <templates> to be extracted from. For example:
+   *     this.setTemplateContext(new DOMParser().parseFromString(htmlStr, 'text/html'))
+   * @param {ParentNode} context
+   */
+  setTemplateContext(context) {
+    this._templateContext = context;
+  }
+
+  /**
+   * @param {{container?: Element, text: string, icon?: string, onClick: () => void}} opts
+   */
+  addButton(opts) {
+    // report-ui-features doesn't have a reference to the root report el, and PSI has
+    // 2 reports on the page (and not even attached to DOM when installFeatures is called..)
+    // so we need a container option to specify where the element should go.
+    const metricsEl = this._document.querySelector('.lh-audit-group--metrics');
+    const containerEl = opts.container || metricsEl;
+    if (!containerEl) return;
+
+    let buttonsEl = containerEl.querySelector('.lh-buttons');
+    if (!buttonsEl) buttonsEl = this._dom.createChildOf(containerEl, 'div', 'lh-buttons');
+
+    const classes = [
+      'lh-button',
+    ];
+    if (opts.icon) {
+      classes.push('report-icon');
+      classes.push(`report-icon--${opts.icon}`);
+    }
+    const buttonEl = this._dom.createChildOf(buttonsEl, 'button', classes.join(' '));
+    buttonEl.textContent = opts.text;
+    buttonEl.addEventListener('click', opts.onClick);
+    return buttonEl;
+  }
+
+  /**
+   * Finds the first scrollable ancestor of `element`. Falls back to the document.
+   * @param {Element} element
+   * @return {Node}
+   */
+  _getScrollParent(element) {
+    const {overflowY} = window.getComputedStyle(element);
+    const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden';
+
+    if (isScrollable) {
+      return element;
+    }
+
+    if (element.parentElement) {
+      return this._getScrollParent(element.parentElement);
+    }
+
+    return document;
+  }
+
+  _enableFireworks() {
+    const scoresContainer = this._dom.find('.lh-scores-container', this._document);
+    scoresContainer.classList.add('score100');
+    scoresContainer.addEventListener('click', _ => {
+      scoresContainer.classList.toggle('fireworks-paused');
+    });
+  }
+
+  /**
+   * Fires a custom DOM event on target.
+   * @param {string} name Name of the event.
+   * @param {Node=} target DOM node to fire the event on.
+   * @param {*=} detail Custom data to include.
+   */
+  _fireEventOn(name, target = this._document, detail) {
+    const event = new CustomEvent(name, detail ? {detail} : undefined);
+    target.dispatchEvent(event);
+  }
+
+  _setupMediaQueryListeners() {
+    const mediaQuery = self.matchMedia('(max-width: 500px)');
+    mediaQuery.addListener(this.onMediaQueryChange);
+    // Ensure the handler is called on init
+    this.onMediaQueryChange(mediaQuery);
+  }
+
+  /**
+   * Handle media query change events.
+   * @param {MediaQueryList|MediaQueryListEvent} mql
+   */
+  onMediaQueryChange(mql) {
+    const root = this._dom.find('.lh-root', this._document);
+    root.classList.toggle('lh-narrow', mql.matches);
+  }
+
+  _setupThirdPartyFilter() {
+    // Some audits should not display the third party filter option.
+    const thirdPartyFilterAuditExclusions = [
+      // These audits deal explicitly with third party resources.
+      'uses-rel-preconnect',
+      'third-party-facades',
+    ];
+    // Some audits should hide third party by default.
+    const thirdPartyFilterAuditHideByDefault = [
+      // Only first party resources are actionable.
+      'legacy-javascript',
+    ];
+
+    // Get all tables with a text url column.
+    const tables = Array.from(this._document.querySelectorAll('table.lh-table'));
+    const tablesWithUrls = tables
+      .filter(el =>
+        el.querySelector('td.lh-table-column--url, td.lh-table-column--source-location'))
+      .filter(el => {
+        const containingAudit = el.closest('.lh-audit');
+        if (!containingAudit) throw new Error('.lh-table not within audit');
+        return !thirdPartyFilterAuditExclusions.includes(containingAudit.id);
+      });
+
+    tablesWithUrls.forEach((tableEl, index) => {
+      const rowEls = getTableRows(tableEl);
+      const thirdPartyRows = this._getThirdPartyRows(rowEls, this.json.finalUrl);
+
+      // create input box
+      const filterTemplate = this._dom.cloneTemplate('#tmpl-lh-3p-filter', this._templateContext);
+      const filterInput = this._dom.find('input', filterTemplate);
+      const id = `lh-3p-filter-label--${index}`;
+
+      filterInput.id = id;
+      filterInput.addEventListener('change', e => {
+        const shouldHideThirdParty = e.target instanceof HTMLInputElement && !e.target.checked;
+        let even = true;
+        let rowEl = rowEls[0];
+        while (rowEl) {
+          const shouldHide = shouldHideThirdParty && thirdPartyRows.includes(rowEl);
+
+          // Iterate subsequent associated sub item rows.
+          do {
+            rowEl.classList.toggle('lh-row--hidden', shouldHide);
+            // Adjust for zebra styling.
+            rowEl.classList.toggle('lh-row--even', !shouldHide && even);
+            rowEl.classList.toggle('lh-row--odd', !shouldHide && !even);
+
+            rowEl = /** @type {HTMLElement} */ (rowEl.nextElementSibling);
+          } while (rowEl && rowEl.classList.contains('lh-sub-item-row'));
+
+          if (!shouldHide) even = !even;
+        }
+      });
+
+      this._dom.find('label', filterTemplate).setAttribute('for', id);
+      this._dom.find('.lh-3p-filter-count', filterTemplate).textContent =
+          `${thirdPartyRows.length}`;
+      this._dom.find('.lh-3p-ui-string', filterTemplate).textContent =
+          Util.i18n.strings.thirdPartyResourcesLabel;
+
+      const allThirdParty = thirdPartyRows.length === rowEls.length;
+      const allFirstParty = !thirdPartyRows.length;
+
+      // If all or none of the rows are 3rd party, disable the checkbox.
+      if (allThirdParty || allFirstParty) {
+        filterInput.disabled = true;
+        filterInput.checked = allThirdParty;
+      }
+
+      // Add checkbox to the DOM.
+      if (!tableEl.parentNode) return; // Keep tsc happy.
+      tableEl.parentNode.insertBefore(filterTemplate, tableEl);
+
+      // Hide third-party rows for some audits by default.
+      const containingAudit = tableEl.closest('.lh-audit');
+      if (!containingAudit) throw new Error('.lh-table not within audit');
+      if (thirdPartyFilterAuditHideByDefault.includes(containingAudit.id) && !allThirdParty) {
+        filterInput.click();
+      }
+    });
+  }
+
+  /**
+   * @param {Element} el
+   */
+  _setupElementScreenshotOverlay(el) {
+    const fullPageScreenshot =
+      this.json.audits['full-page-screenshot'] &&
+      this.json.audits['full-page-screenshot'].details &&
+      this.json.audits['full-page-screenshot'].details.type === 'full-page-screenshot' &&
+      this.json.audits['full-page-screenshot'].details;
+    if (!fullPageScreenshot) return;
+
+    ElementScreenshotRenderer.installOverlayFeature({
+      dom: this._dom,
+      reportEl: el,
+      overlayContainerEl: el,
+      templateContext: this._templateContext,
+      fullPageScreenshot,
+    });
+  }
+
+  /**
+   * From a table with URL entries, finds the rows containing third-party URLs
+   * and returns them.
+   * @param {HTMLElement[]} rowEls
+   * @param {string} finalUrl
+   * @return {Array<HTMLElement>}
+   */
+  _getThirdPartyRows(rowEls, finalUrl) {
+    /** @type {Array<HTMLElement>} */
+    const thirdPartyRows = [];
+    const finalUrlRootDomain = Util.getRootDomain(finalUrl);
+
+    for (const rowEl of rowEls) {
+      if (rowEl.classList.contains('lh-sub-item-row')) continue;
+
+      const urlItem = rowEl.querySelector('div.lh-text__url');
+      if (!urlItem) continue;
+
+      const datasetUrl = urlItem.dataset.url;
+      if (!datasetUrl) continue;
+      const isThirdParty = Util.getRootDomain(datasetUrl) !== finalUrlRootDomain;
+      if (!isThirdParty) continue;
+
+      thirdPartyRows.push(rowEl);
+    }
+
+    return thirdPartyRows;
+  }
+
+  _setupStickyHeaderElements() {
+    this.topbarEl = this._dom.find('div.lh-topbar', this._document);
+    this.scoreScaleEl = this._dom.find('div.lh-scorescale', this._document);
+    this.stickyHeaderEl = this._dom.find('div.lh-sticky-header', this._document);
+
+    // Highlighter will be absolutely positioned at first gauge, then transformed on scroll.
+    this.highlightEl = this._dom.createChildOf(this.stickyHeaderEl, 'div', 'lh-highlighter');
+  }
+
+  /**
+   * Handle copy events.
+   * @param {ClipboardEvent} e
+   */
+  onCopy(e) {
+    // Only handle copy button presses (e.g. ignore the user copying page text).
+    if (this._copyAttempt && e.clipboardData) {
+      // We want to write our own data to the clipboard, not the user's text selection.
+      e.preventDefault();
+      e.clipboardData.setData('text/plain', JSON.stringify(this.json, null, 2));
+
+      this._fireEventOn('lh-log', this._document, {
+        cmd: 'log', msg: 'Report JSON copied to clipboard',
+      });
+    }
+
+    this._copyAttempt = false;
+  }
+
+  /**
+   * Copies the report JSON to the clipboard (if supported by the browser).
+   */
+  onCopyButtonClick() {
+    this._fireEventOn('lh-analytics', this._document, {
+      cmd: 'send',
+      fields: {hitType: 'event', eventCategory: 'report', eventAction: 'copy'},
+    });
+
+    try {
+      if (this._document.queryCommandSupported('copy')) {
+        this._copyAttempt = true;
+
+        // Note: In Safari 10.0.1, execCommand('copy') returns true if there's
+        // a valid text selection on the page. See http://caniuse.com/#feat=clipboard.
+        if (!this._document.execCommand('copy')) {
+          this._copyAttempt = false; // Prevent event handler from seeing this as a copy attempt.
+
+          this._fireEventOn('lh-log', this._document, {
+            cmd: 'warn', msg: 'Your browser does not support copy to clipboard.',
+          });
+        }
+      }
+    } catch (/** @type {Error} */ e) {
+      this._copyAttempt = false;
+      this._fireEventOn('lh-log', this._document, {cmd: 'log', msg: e.message});
+    }
+  }
+
+  /**
+   * Resets the state of page before capturing the page for export.
+   * When the user opens the exported HTML page, certain UI elements should
+   * be in their closed state (not opened) and the templates should be unstamped.
+   */
+  _resetUIState() {
+    this._dropDown.close();
+    this._dom.resetTemplates();
+  }
+
+  /**
+   * Handler for tool button.
+   * @param {Event} e
+   */
+  onDropDownMenuClick(e) {
+    e.preventDefault();
+
+    const el = /** @type {?Element} */ (e.target);
+
+    if (!el || !el.hasAttribute('data-action')) {
+      return;
+    }
+
+    switch (el.getAttribute('data-action')) {
+      case 'copy':
+        this.onCopyButtonClick();
+        break;
+      case 'print-summary':
+        this.collapseAllDetails();
+        this._print();
+        break;
+      case 'print-expanded':
+        this.expandAllDetails();
+        this._print();
+        break;
+      case 'save-json': {
+        const jsonStr = JSON.stringify(this.json, null, 2);
+        this._saveFile(new Blob([jsonStr], {type: 'application/json'}));
+        break;
+      }
+      case 'save-html': {
+        const htmlStr = this.getReportHtml();
+        try {
+          this._saveFile(new Blob([htmlStr], {type: 'text/html'}));
+        } catch (/** @type {Error} */ e) {
+          this._fireEventOn('lh-log', this._document, {
+            cmd: 'error', msg: 'Could not export as HTML. ' + e.message,
+          });
+        }
+        break;
+      }
+      case 'open-viewer': {
+        ReportUIFeatures.openTabAndSendJsonReportToViewer(this.json);
+        break;
+      }
+      case 'save-gist': {
+        this.saveAsGist();
+        break;
+      }
+      case 'toggle-dark': {
+        this._toggleDarkTheme();
+        break;
+      }
+    }
+
+    this._dropDown.close();
+  }
+
+  _print() {
+    self.print();
+  }
+
+  /**
+   * Keyup handler for the document.
+   * @param {KeyboardEvent} e
+   */
+  onKeyUp(e) {
+    // Ctrl+P - Expands audit details when user prints via keyboard shortcut.
+    if ((e.ctrlKey || e.metaKey) && e.keyCode === 80) {
+      this._dropDown.close();
+    }
+  }
+
+  /**
+   * The popup's window.name is keyed by version+url+fetchTime, so we reuse/select tabs correctly.
+   * @param {LH.Result} json
+   * @protected
+   */
+  static computeWindowNameSuffix(json) {
+    // @ts-ignore - If this is a v2 LHR, use old `generatedTime`.
+    const fallbackFetchTime = /** @type {string} */ (json.generatedTime);
+    const fetchTime = json.fetchTime || fallbackFetchTime;
+    return `${json.lighthouseVersion}-${json.requestedUrl}-${fetchTime}`;
+  }
+
+  /**
+   * Opens a new tab to the online viewer and sends the local page's JSON results
+   * to the online viewer using postMessage.
+   * @param {LH.Result} json
+   * @protected
+   */
+  static openTabAndSendJsonReportToViewer(json) {
+    const windowName = 'viewer-' + this.computeWindowNameSuffix(json);
+    const url = getAppsOrigin() + '/viewer/';
+    ReportUIFeatures.openTabAndSendData({lhr: json}, url, windowName);
+  }
+
+  /**
+   * Opens a new tab to the treemap app and sends the JSON results using URL.fragment
+   * @param {LH.Result} json
+   */
+  static openTreemap(json) {
+    const treemapData = json.audits['script-treemap-data'].details;
+    if (!treemapData) {
+      throw new Error('no script treemap data found');
+    }
+
+    /** @type {LH.Treemap.Options} */
+    const treemapOptions = {
+      lhr: {
+        requestedUrl: json.requestedUrl,
+        finalUrl: json.finalUrl,
+        audits: {
+          'script-treemap-data': json.audits['script-treemap-data'],
+        },
+        configSettings: {
+          locale: json.configSettings.locale,
+        },
+      },
+    };
+    const url = getAppsOrigin() + '/treemap/';
+    const windowName = 'treemap-' + this.computeWindowNameSuffix(json);
+
+    ReportUIFeatures.openTabWithUrlData(treemapOptions, url, windowName);
+  }
+
+  /**
+   * Opens a new tab to an external page and sends data using postMessage.
+   * @param {{lhr: LH.Result} | LH.Treemap.Options} data
+   * @param {string} url
+   * @param {string} windowName
+   * @protected
+   */
+  static openTabAndSendData(data, url, windowName) {
+    const origin = new URL(url).origin;
+    // Chrome doesn't allow us to immediately postMessage to a popup right
+    // after it's created. Normally, we could also listen for the popup window's
+    // load event, however it is cross-domain and won't fire. Instead, listen
+    // for a message from the target app saying "I'm open".
+    window.addEventListener('message', function msgHandler(messageEvent) {
+      if (messageEvent.origin !== origin) {
+        return;
+      }
+      if (popup && messageEvent.data.opened) {
+        popup.postMessage(data, origin);
+        window.removeEventListener('message', msgHandler);
+      }
+    });
+
+    const popup = window.open(url, windowName);
+  }
+
+  /**
+   * Opens a new tab to an external page and sends data via base64 encoded url params.
+   * @param {{lhr: LH.Result} | LH.Treemap.Options} data
+   * @param {string} url_
+   * @param {string} windowName
+   * @protected
+   */
+  static async openTabWithUrlData(data, url_, windowName) {
+    const url = new URL(url_);
+    const gzip = Boolean(window.CompressionStream);
+    url.hash = await TextEncoding.toBase64(JSON.stringify(data), {
+      gzip,
+    });
+    if (gzip) url.searchParams.set('gzip', '1');
+    window.open(url.toString(), windowName);
+  }
+
+  /**
+   * Expands all audit `<details>`.
+   * Ideally, a print stylesheet could take care of this, but CSS has no way to
+   * open a `<details>` element.
+   */
+  expandAllDetails() {
+    const details = this._dom.findAll('.lh-categories details', this._document);
+    details.map(detail => detail.open = true);
+  }
+
+  /**
+   * Collapses all audit `<details>`.
+   * open a `<details>` element.
+   */
+  collapseAllDetails() {
+    const details = this._dom.findAll('.lh-categories details', this._document);
+    details.map(detail => detail.open = false);
+  }
+
+  /**
+   * Sets up listeners to collapse audit `<details>` when the user closes the
+   * print dialog, all `<details>` are collapsed.
+   */
+  _setUpCollapseDetailsAfterPrinting() {
+    // FF and IE implement these old events.
+    if ('onbeforeprint' in self) {
+      self.addEventListener('afterprint', this.collapseAllDetails);
+    } else {
+      // Note: FF implements both window.onbeforeprint and media listeners. However,
+      // it doesn't matchMedia doesn't fire when matching 'print'.
+      self.matchMedia('print').addListener(mql => {
+        if (mql.matches) {
+          this.expandAllDetails();
+        } else {
+          this.collapseAllDetails();
+        }
+      });
+    }
+  }
+
+  /**
+   * Returns the html that recreates this report.
+   * @return {string}
+   * @protected
+   */
+  getReportHtml() {
+    this._resetUIState();
+    return this._document.documentElement.outerHTML;
+  }
+
+  /**
+   * Save json as a gist. Unimplemented in base UI features.
+   * @protected
+   */
+  saveAsGist() {
+    throw new Error('Cannot save as gist from base report');
+  }
+
+  /**
+   * Downloads a file (blob) using a[download].
+   * @param {Blob|File} blob The file to save.
+   * @private
+   */
+  _saveFile(blob) {
+    const filename = getFilenamePrefix({
+      finalUrl: this.json.finalUrl,
+      fetchTime: this.json.fetchTime,
+    });
+
+    const ext = blob.type.match('json') ? '.json' : '.html';
+    const href = URL.createObjectURL(blob);
+
+    const a = this._dom.createElement('a');
+    a.download = `${filename}${ext}`;
+    a.href = href;
+    this._document.body.appendChild(a); // Firefox requires anchor to be in the DOM.
+    a.click();
+
+    // cleanup.
+    this._document.body.removeChild(a);
+    setTimeout(_ => URL.revokeObjectURL(href), 500);
+  }
+
+  /**
+   * @private
+   * @param {boolean} [force]
+   */
+  _toggleDarkTheme(force) {
+    const el = this._dom.find('.lh-vars', this._document);
+    // This seems unnecessary, but in DevTools, passing "undefined" as the second
+    // parameter acts like passing "false".
+    // https://github.com/ChromeDevTools/devtools-frontend/blob/dd6a6d4153647c2a4203c327c595692c5e0a4256/front_end/dom_extension/DOMExtension.js#L809-L819
+    if (typeof force === 'undefined') {
+      el.classList.toggle('dark');
+    } else {
+      el.classList.toggle('dark', force);
+    }
+  }
+
+  _updateStickyHeaderOnScroll() {
+    // Show sticky header when the score scale begins to go underneath the topbar.
+    const topbarBottom = this.topbarEl.getBoundingClientRect().bottom;
+    const scoreScaleTop = this.scoreScaleEl.getBoundingClientRect().top;
+    const showStickyHeader = topbarBottom >= scoreScaleTop;
+
+    // Highlight mini gauge when section is in view.
+    // In view = the last category that starts above the middle of the window.
+    const categoryEls = Array.from(this._document.querySelectorAll('.lh-category'));
+    const categoriesAboveTheMiddle =
+      categoryEls.filter(el => el.getBoundingClientRect().top - window.innerHeight / 2 < 0);
+    const highlightIndex =
+      categoriesAboveTheMiddle.length > 0 ? categoriesAboveTheMiddle.length - 1 : 0;
+
+    // Category order matches gauge order in sticky header.
+    const gaugeWrapperEls = this.stickyHeaderEl.querySelectorAll('.lh-gauge__wrapper');
+    const gaugeToHighlight = gaugeWrapperEls[highlightIndex];
+    const origin = gaugeWrapperEls[0].getBoundingClientRect().left;
+    const offset = gaugeToHighlight.getBoundingClientRect().left - origin;
+
+    // Mutate at end to avoid layout thrashing.
+    this.highlightEl.style.transform = `translate(${offset}px)`;
+    this.stickyHeaderEl.classList.toggle('lh-sticky-header--visible', showStickyHeader);
+  }
+}
+
+class DropDown {
+  /**
+   * @param {DOM} dom
+   */
+  constructor(dom) {
+    /** @type {DOM} */
+    this._dom = dom;
+    /** @type {HTMLElement} */
+    this._toggleEl; // eslint-disable-line no-unused-expressions
+    /** @type {HTMLElement} */
+    this._menuEl; // eslint-disable-line no-unused-expressions
+
+    this.onDocumentKeyDown = this.onDocumentKeyDown.bind(this);
+    this.onToggleClick = this.onToggleClick.bind(this);
+    this.onToggleKeydown = this.onToggleKeydown.bind(this);
+    this.onMenuFocusOut = this.onMenuFocusOut.bind(this);
+    this.onMenuKeydown = this.onMenuKeydown.bind(this);
+
+    this._getNextMenuItem = this._getNextMenuItem.bind(this);
+    this._getNextSelectableNode = this._getNextSelectableNode.bind(this);
+    this._getPreviousMenuItem = this._getPreviousMenuItem.bind(this);
+  }
+
+  /**
+   * @param {function(MouseEvent): any} menuClickHandler
+   */
+  setup(menuClickHandler) {
+    this._toggleEl = this._dom.find('button.lh-tools__button', this._dom.document());
+    this._toggleEl.addEventListener('click', this.onToggleClick);
+    this._toggleEl.addEventListener('keydown', this.onToggleKeydown);
+
+    this._menuEl = this._dom.find('div.lh-tools__dropdown', this._dom.document());
+    this._menuEl.addEventListener('keydown', this.onMenuKeydown);
+    this._menuEl.addEventListener('click', menuClickHandler);
+  }
+
+  close() {
+    this._toggleEl.classList.remove('active');
+    this._toggleEl.setAttribute('aria-expanded', 'false');
+    if (this._menuEl.contains(this._dom.document().activeElement)) {
+      // Refocus on the tools button if the drop down last had focus
+      this._toggleEl.focus();
+    }
+    this._menuEl.removeEventListener('focusout', this.onMenuFocusOut);
+    this._dom.document().removeEventListener('keydown', this.onDocumentKeyDown);
+  }
+
+  /**
+   * @param {HTMLElement} firstFocusElement
+   */
+  open(firstFocusElement) {
+    if (this._toggleEl.classList.contains('active')) {
+      // If the drop down is already open focus on the element
+      firstFocusElement.focus();
+    } else {
+      // Wait for drop down transition to complete so options are focusable.
+      this._menuEl.addEventListener('transitionend', () => {
+        firstFocusElement.focus();
+      }, {once: true});
+    }
+
+    this._toggleEl.classList.add('active');
+    this._toggleEl.setAttribute('aria-expanded', 'true');
+    this._menuEl.addEventListener('focusout', this.onMenuFocusOut);
+    this._dom.document().addEventListener('keydown', this.onDocumentKeyDown);
+  }
+
+  /**
+   * Click handler for tools button.
+   * @param {Event} e
+   */
+  onToggleClick(e) {
+    e.preventDefault();
+    e.stopImmediatePropagation();
+
+    if (this._toggleEl.classList.contains('active')) {
+      this.close();
+    } else {
+      this.open(this._getNextMenuItem());
+    }
+  }
+
+  /**
+   * Handler for tool button.
+   * @param {KeyboardEvent} e
+   */
+  onToggleKeydown(e) {
+    switch (e.code) {
+      case 'ArrowUp':
+        e.preventDefault();
+        this.open(this._getPreviousMenuItem());
+        break;
+      case 'ArrowDown':
+      case 'Enter':
+      case ' ':
+        e.preventDefault();
+        this.open(this._getNextMenuItem());
+        break;
+      default:
+       // no op
+    }
+  }
+
+  /**
+   * Handler for tool DropDown.
+   * @param {KeyboardEvent} e
+   */
+  onMenuKeydown(e) {
+    const el = /** @type {?HTMLElement} */ (e.target);
+
+    switch (e.code) {
+      case 'ArrowUp':
+        e.preventDefault();
+        this._getPreviousMenuItem(el).focus();
+        break;
+      case 'ArrowDown':
+        e.preventDefault();
+        this._getNextMenuItem(el).focus();
+        break;
+      case 'Home':
+        e.preventDefault();
+        this._getNextMenuItem().focus();
+        break;
+      case 'End':
+        e.preventDefault();
+        this._getPreviousMenuItem().focus();
+        break;
+      default:
+       // no op
+    }
+  }
+
+  /**
+   * Keydown handler for the document.
+   * @param {KeyboardEvent} e
+   */
+  onDocumentKeyDown(e) {
+    if (e.keyCode === 27) { // ESC
+      this.close();
+    }
+  }
+
+  /**
+   * Focus out handler for the drop down menu.
+   * @param {FocusEvent} e
+   */
+  onMenuFocusOut(e) {
+    const focusedEl = /** @type {?HTMLElement} */ (e.relatedTarget);
+
+    if (!this._menuEl.contains(focusedEl)) {
+      this.close();
+    }
+  }
+
+  /**
+   * @param {Array<Node>} allNodes
+   * @param {?HTMLElement=} startNode
+   * @returns {HTMLElement}
+   */
+  _getNextSelectableNode(allNodes, startNode) {
+    const nodes = allNodes.filter(/** @return {node is HTMLElement} */ (node) => {
+      if (!(node instanceof HTMLElement)) {
+        return false;
+      }
+
+      // 'Save as Gist' option may be disabled.
+      if (node.hasAttribute('disabled')) {
+        return false;
+      }
+
+      // 'Save as Gist' option may have display none.
+      if (window.getComputedStyle(node).display === 'none') {
+        return false;
+      }
+
+      return true;
+    });
+
+    let nextIndex = startNode ? (nodes.indexOf(startNode) + 1) : 0;
+    if (nextIndex >= nodes.length) {
+      nextIndex = 0;
+    }
+
+    return nodes[nextIndex];
+  }
+
+  /**
+   * @param {?HTMLElement=} startEl
+   * @returns {HTMLElement}
+   */
+  _getNextMenuItem(startEl) {
+    const nodes = Array.from(this._menuEl.childNodes);
+    return this._getNextSelectableNode(nodes, startEl);
+  }
+
+  /**
+   * @param {?HTMLElement=} startEl
+   * @returns {HTMLElement}
+   */
+  _getPreviousMenuItem(startEl) {
+    const nodes = Array.from(this._menuEl.childNodes).reverse();
+    return this._getNextSelectableNode(nodes, startEl);
+  }
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = ReportUIFeatures;
+} else {
+  self.ReportUIFeatures = ReportUIFeatures;
+}
+;
+/**
+ * @license
+ * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'use strict';
+
+/* globals self, Util */
+
+/** @typedef {import('./dom.js')} DOM */
+/** @typedef {import('./report-renderer.js')} ReportRenderer */
+/** @typedef {import('./details-renderer.js')} DetailsRenderer */
+/** @typedef {import('./util.js')} Util */
+/** @typedef {'failed'|'warning'|'manual'|'passed'|'notApplicable'} TopLevelClumpId */
+
+class CategoryRenderer {
+  /**
+   * @param {DOM} dom
+   * @param {DetailsRenderer} detailsRenderer
+   */
+  constructor(dom, detailsRenderer) {
+    /** @type {DOM} */
+    this.dom = dom;
+    /** @type {DetailsRenderer} */
+    this.detailsRenderer = detailsRenderer;
+    /** @type {ParentNode} */
+    this.templateContext = this.dom.document();
+
+    this.detailsRenderer.setTemplateContext(this.templateContext);
+  }
+
+  /**
+   * Display info per top-level clump. Define on class to avoid race with Util init.
+   */
+  get _clumpTitles() {
+    return {
+      warning: Util.i18n.strings.warningAuditsGroupTitle,
+      manual: Util.i18n.strings.manualAuditsGroupTitle,
+      passed: Util.i18n.strings.passedAuditsGroupTitle,
+      notApplicable: Util.i18n.strings.notApplicableAuditsGroupTitle,
+    };
+  }
+
+  /**
+   * @param {LH.ReportResult.AuditRef} audit
+   * @return {Element}
+   */
+  renderAudit(audit) {
+    const tmpl = this.dom.cloneTemplate('#tmpl-lh-audit', this.templateContext);
+    return this.populateAuditValues(audit, tmpl);
+  }
+
+  /**
+   * Populate an DOM tree with audit details. Used by renderAudit and renderOpportunity
+   * @param {LH.ReportResult.AuditRef} audit
+   * @param {DocumentFragment} tmpl
+   * @return {!Element}
+   */
+  populateAuditValues(audit, tmpl) {
+    const strings = Util.i18n.strings;
+    const auditEl = this.dom.find('.lh-audit', tmpl);
+    auditEl.id = audit.result.id;
+    const scoreDisplayMode = audit.result.scoreDisplayMode;
+
+    if (audit.result.displayValue) {
+      this.dom.find('.lh-audit__display-text', auditEl).textContent = audit.result.displayValue;
+    }
+
+    const titleEl = this.dom.find('.lh-audit__title', auditEl);
+    titleEl.appendChild(this.dom.convertMarkdownCodeSnippets(audit.result.title));
+    const descEl = this.dom.find('.lh-audit__description', auditEl);
+    descEl.appendChild(this.dom.convertMarkdownLinkSnippets(audit.result.description));
+
+    for (const relevantMetric of audit.relevantMetrics || []) {
+      const adornEl = this.dom.createChildOf(descEl, 'span', 'lh-audit__adorn', {
+        title: `Relevant to ${relevantMetric.result.title}`,
+      });
+      adornEl.textContent = relevantMetric.acronym || relevantMetric.id;
+    }
+
+    if (audit.stackPacks) {
+      audit.stackPacks.forEach(pack => {
+        const packElm = this.dom.createElement('div');
+        packElm.classList.add('lh-audit__stackpack');
+
+        const packElmImg = this.dom.createElement('img');
+        packElmImg.classList.add('lh-audit__stackpack__img');
+        packElmImg.src = pack.iconDataURL;
+        packElmImg.alt = pack.title;
+        packElm.appendChild(packElmImg);
+
+        packElm.appendChild(this.dom.convertMarkdownLinkSnippets(pack.description));
+
+        this.dom.find('.lh-audit__stackpacks', auditEl)
+          .appendChild(packElm);
+      });
+    }
+
+    const header = this.dom.find('details', auditEl);
+    if (audit.result.details) {
+      const elem = this.detailsRenderer.render(audit.result.details);
+      if (elem) {
+        elem.classList.add('lh-details');
+        header.appendChild(elem);
+      }
+    }
+
+    // Add chevron SVG to the end of the summary
+    this.dom.find('.lh-chevron-container', auditEl).appendChild(this._createChevron());
+    this._setRatingClass(auditEl, audit.result.score, scoreDisplayMode);
+
+    if (audit.result.scoreDisplayMode === 'error') {
+      auditEl.classList.add(`lh-audit--error`);
+      const textEl = this.dom.find('.lh-audit__display-text', auditEl);
+      textEl.textContent = strings.errorLabel;
+      textEl.classList.add('tooltip-boundary');
+      const tooltip = this.dom.createChildOf(textEl, 'div', 'tooltip tooltip--error');
+      tooltip.textContent = audit.result.errorMessage || strings.errorMissingAuditInfo;
+    } else if (audit.result.explanation) {
+      const explEl = this.dom.createChildOf(titleEl, 'div', 'lh-audit-explanation');
+      explEl.textContent = audit.result.explanation;
+    }
+    const warnings = audit.result.warnings;
+    if (!warnings || warnings.length === 0) return auditEl;
+
+    // Add list of warnings or singular warning
+    const summaryEl = this.dom.find('summary', header);
+    const warningsEl = this.dom.createChildOf(summaryEl, 'div', 'lh-warnings');
+    this.dom.createChildOf(warningsEl, 'span').textContent = strings.warningHeader;
+    if (warnings.length === 1) {
+      warningsEl.appendChild(this.dom.document().createTextNode(warnings.join('')));
+    } else {
+      const warningsUl = this.dom.createChildOf(warningsEl, 'ul');
+      for (const warning of warnings) {
+        const item = this.dom.createChildOf(warningsUl, 'li');
+        item.textContent = warning;
+      }
+    }
+    return auditEl;
+  }
+
+  /**
+   * @return {Element}
+   */
+  _createChevron() {
+    const chevronTmpl = this.dom.cloneTemplate('#tmpl-lh-chevron', this.templateContext);
+    const chevronEl = this.dom.find('svg.lh-chevron', chevronTmpl);
+    return chevronEl;
+  }
+
+  /**
+   * @param {Element} element DOM node to populate with values.
+   * @param {number|null} score
+   * @param {string} scoreDisplayMode
+   * @return {!Element}
+   */
+  _setRatingClass(element, score, scoreDisplayMode) {
+    const rating = Util.calculateRating(score, scoreDisplayMode);
+    element.classList.add(`lh-audit--${scoreDisplayMode.toLowerCase()}`);
+    if (scoreDisplayMode !== 'informative') {
+      element.classList.add(`lh-audit--${rating}`);
+    }
+    return element;
+  }
+
+  /**
+   * @param {LH.ReportResult.Category} category
+   * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
+   * @return {DocumentFragment}
+   */
+  renderCategoryHeader(category, groupDefinitions) {
+    const tmpl = this.dom.cloneTemplate('#tmpl-lh-category-header', this.templateContext);
+
+    const gaugeContainerEl = this.dom.find('.lh-score__gauge', tmpl);
+    const gaugeEl = this.renderScoreGauge(category, groupDefinitions);
+    gaugeContainerEl.appendChild(gaugeEl);
+
+    if (category.description) {
+      const descEl = this.dom.convertMarkdownLinkSnippets(category.description);
+      this.dom.find('.lh-category-header__description', tmpl).appendChild(descEl);
+    }
+
+    return tmpl;
+  }
+
+  /**
+   * Renders the group container for a group of audits. Individual audit elements can be added
+   * directly to the returned element.
+   * @param {LH.Result.ReportGroup} group
+   * @return {Element}
+   */
+  renderAuditGroup(group) {
+    const groupEl = this.dom.createElement('div', 'lh-audit-group');
+
+    const auditGroupHeader = this.dom.createElement('div', 'lh-audit-group__header');
+
+    this.dom.createChildOf(auditGroupHeader, 'span', 'lh-audit-group__title')
+      .textContent = group.title;
+    if (group.description) {
+      const descriptionEl = this.dom.convertMarkdownLinkSnippets(group.description);
+      descriptionEl.classList.add('lh-audit-group__description');
+      auditGroupHeader.appendChild(descriptionEl);
+    }
+    groupEl.appendChild(auditGroupHeader);
+
+    return groupEl;
+  }
+
+  /**
+   * Takes an array of auditRefs, groups them if requested, then returns an
+   * array of audit and audit-group elements.
+   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
+   * @param {Object<string, LH.Result.ReportGroup>} groupDefinitions
+   * @return {Array<Element>}
+   */
+  _renderGroupedAudits(auditRefs, groupDefinitions) {
+    // Audits grouped by their group (or under notAGroup).
+    /** @type {Map<string, Array<LH.ReportResult.AuditRef>>} */
+    const grouped = new Map();
+
+    // Add audits without a group first so they will appear first.
+    const notAGroup = 'NotAGroup';
+    grouped.set(notAGroup, []);
+
+    for (const auditRef of auditRefs) {
+      const groupId = auditRef.group || notAGroup;
+      const groupAuditRefs = grouped.get(groupId) || [];
+      groupAuditRefs.push(auditRef);
+      grouped.set(groupId, groupAuditRefs);
+    }
+
+    /** @type {Array<Element>} */
+    const auditElements = [];
+
+    for (const [groupId, groupAuditRefs] of grouped) {
+      if (groupId === notAGroup) {
+        // Push not-grouped audits individually.
+        for (const auditRef of groupAuditRefs) {
+          auditElements.push(this.renderAudit(auditRef));
+        }
+        continue;
+      }
+
+      // Push grouped audits as a group.
+      const groupDef = groupDefinitions[groupId];
+      const auditGroupElem = this.renderAuditGroup(groupDef);
+      for (const auditRef of groupAuditRefs) {
+        auditGroupElem.appendChild(this.renderAudit(auditRef));
+      }
+      auditGroupElem.classList.add(`lh-audit-group--${groupId}`);
+      auditElements.push(auditGroupElem);
+    }
+
+    return auditElements;
+  }
+
+  /**
+   * Take a set of audits, group them if they have groups, then render in a top-level
+   * clump that can't be expanded/collapsed.
+   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
+   * @param {Object<string, LH.Result.ReportGroup>} groupDefinitions
+   * @return {Element}
+   */
+  renderUnexpandableClump(auditRefs, groupDefinitions) {
+    const clumpElement = this.dom.createElement('div');
+    const elements = this._renderGroupedAudits(auditRefs, groupDefinitions);
+    elements.forEach(elem => clumpElement.appendChild(elem));
+    return clumpElement;
+  }
+
+  /**
+   * Take a set of audits and render in a top-level, expandable clump that starts
+   * in a collapsed state.
+   * @param {Exclude<TopLevelClumpId, 'failed'>} clumpId
+   * @param {{auditRefs: Array<LH.ReportResult.AuditRef>, description?: string}} clumpOpts
+   * @return {!Element}
+   */
+  renderClump(clumpId, {auditRefs, description}) {
+    const clumpTmpl = this.dom.cloneTemplate('#tmpl-lh-clump', this.templateContext);
+    const clumpElement = this.dom.find('.lh-clump', clumpTmpl);
+
+    if (clumpId === 'warning') {
+      clumpElement.setAttribute('open', '');
+    }
+
+    const summaryInnerEl = this.dom.find('div.lh-audit-group__summary', clumpElement);
+    summaryInnerEl.appendChild(this._createChevron());
+
+    const headerEl = this.dom.find('.lh-audit-group__header', clumpElement);
+    const title = this._clumpTitles[clumpId];
+    this.dom.find('.lh-audit-group__title', headerEl).textContent = title;
+    if (description) {
+      const descriptionEl = this.dom.convertMarkdownLinkSnippets(description);
+      descriptionEl.classList.add('lh-audit-group__description');
+      headerEl.appendChild(descriptionEl);
+    }
+
+    const itemCountEl = this.dom.find('.lh-audit-group__itemcount', clumpElement);
+    itemCountEl.textContent = `(${auditRefs.length})`;
+
+    // Add all audit results to the clump.
+    const auditElements = auditRefs.map(this.renderAudit.bind(this));
+    clumpElement.append(...auditElements);
+
+    clumpElement.classList.add(`lh-clump--${clumpId.toLowerCase()}`);
+    return clumpElement;
+  }
+
+  /**
+   * @param {ParentNode} context
+   */
+  setTemplateContext(context) {
+    this.templateContext = context;
+    this.detailsRenderer.setTemplateContext(context);
+  }
+
+  /**
+   * @param {LH.ReportResult.Category} category
+   * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
+   * @return {DocumentFragment}
+   */
+  renderScoreGauge(category, groupDefinitions) { // eslint-disable-line no-unused-vars
+    const tmpl = this.dom.cloneTemplate('#tmpl-lh-gauge', this.templateContext);
+    const wrapper = this.dom.find('a.lh-gauge__wrapper', tmpl);
+    wrapper.href = `#${category.id}`;
+
+    if (Util.isPluginCategory(category.id)) {
+      wrapper.classList.add('lh-gauge__wrapper--plugin');
+    }
+
+    // Cast `null` to 0
+    const numericScore = Number(category.score);
+    const gauge = this.dom.find('.lh-gauge', tmpl);
+    const gaugeArc = this.dom.find('circle.lh-gauge-arc', gauge);
+
+    if (gaugeArc) this._setGaugeArc(gaugeArc, numericScore);
+
+    const scoreOutOf100 = Math.round(numericScore * 100);
+    const percentageEl = this.dom.find('div.lh-gauge__percentage', tmpl);
+    percentageEl.textContent = scoreOutOf100.toString();
+    if (category.score === null) {
+      percentageEl.textContent = '?';
+      percentageEl.title = Util.i18n.strings.errorLabel;
+    }
+
+    // Render a numerical score if the category has applicable audits, or no audits whatsoever.
+    if (category.auditRefs.length === 0 || this.hasApplicableAudits(category)) {
+      wrapper.classList.add(`lh-gauge__wrapper--${Util.calculateRating(category.score)}`);
+    } else {
+      wrapper.classList.add(`lh-gauge__wrapper--not-applicable`);
+      percentageEl.textContent = '-';
+      percentageEl.title = Util.i18n.strings.notApplicableAuditsGroupTitle;
+    }
+
+    this.dom.find('.lh-gauge__label', tmpl).textContent = category.title;
+    return tmpl;
+  }
+
+  /**
+   * Returns true if an LH category has any non-"notApplicable" audits.
+   * @param {LH.ReportResult.Category} category
+   * @return {boolean}
+   */
+  hasApplicableAudits(category) {
+    return category.auditRefs.some(ref => ref.result.scoreDisplayMode !== 'notApplicable');
+  }
+
+  /**
+   * Define the score arc of the gauge
+   * Credit to xgad for the original technique: https://codepen.io/xgad/post/svg-radial-progress-meters
+   * @param {SVGCircleElement} arcElem
+   * @param {number} percent
+   */
+  _setGaugeArc(arcElem, percent) {
+    const circumferencePx = 2 * Math.PI * Number(arcElem.getAttribute('r'));
+    // The rounded linecap of the stroke extends the arc past its start and end.
+    // First, we tweak the -90deg rotation to start exactly at the top of the circle.
+    const strokeWidthPx = Number(arcElem.getAttribute('stroke-width'));
+    const rotationalAdjustmentPercent = 0.25 * strokeWidthPx / circumferencePx;
+    arcElem.style.transform = `rotate(${-90 + rotationalAdjustmentPercent * 360}deg)`;
+
+    // Then, we terminate the line a little early as well.
+    let arcLengthPx = percent * circumferencePx - strokeWidthPx / 2;
+    // Special cases. No dot for 0, and full ring if 100
+    if (percent === 0) arcElem.style.opacity = '0';
+    if (percent === 1) arcLengthPx = circumferencePx;
+
+    arcElem.style.strokeDasharray = `${Math.max(arcLengthPx, 0)} ${circumferencePx}`;
+  }
+
+  /**
+   * @param {LH.ReportResult.AuditRef} audit
+   * @return {boolean}
+   */
+  _auditHasWarning(audit) {
+    return Boolean(audit.result.warnings && audit.result.warnings.length);
+  }
+
+  /**
+   * Returns the id of the top-level clump to put this audit in.
+   * @param {LH.ReportResult.AuditRef} auditRef
+   * @return {TopLevelClumpId}
+   */
+  _getClumpIdForAuditRef(auditRef) {
+    const scoreDisplayMode = auditRef.result.scoreDisplayMode;
+    if (scoreDisplayMode === 'manual' || scoreDisplayMode === 'notApplicable') {
+      return scoreDisplayMode;
+    }
+
+    if (Util.showAsPassed(auditRef.result)) {
+      if (this._auditHasWarning(auditRef)) {
+        return 'warning';
+      } else {
+        return 'passed';
+      }
+    } else {
+      return 'failed';
+    }
+  }
+
+  /**
+   * Renders a set of top level sections (clumps), under a status of failed, warning,
+   * manual, passed, or notApplicable. The result ends up something like:
+   *
+   * failed clump
+   *   ├── audit 1 (w/o group)
+   *   ├── audit 2 (w/o group)
+   *   ├── audit group
+   *   |  ├── audit 3
+   *   |  └── audit 4
+   *   └── audit group
+   *      ├── audit 5
+   *      └── audit 6
+   * other clump (e.g. 'manual')
+   *   ├── audit 1
+   *   ├── audit 2
+   *   ├── …
+   *   â‹®
+   * @param {LH.ReportResult.Category} category
+   * @param {Object<string, LH.Result.ReportGroup>} [groupDefinitions]
+   * @return {Element}
+   */
+  render(category, groupDefinitions = {}) {
+    const element = this.dom.createElement('div', 'lh-category');
+    this.createPermalinkSpan(element, category.id);
+    element.appendChild(this.renderCategoryHeader(category, groupDefinitions));
+
+    // Top level clumps for audits, in order they will appear in the report.
+    /** @type {Map<TopLevelClumpId, Array<LH.ReportResult.AuditRef>>} */
+    const clumps = new Map();
+    clumps.set('failed', []);
+    clumps.set('warning', []);
+    clumps.set('manual', []);
+    clumps.set('passed', []);
+    clumps.set('notApplicable', []);
+
+    // Sort audits into clumps.
+    for (const auditRef of category.auditRefs) {
+      const clumpId = this._getClumpIdForAuditRef(auditRef);
+      const clump = /** @type {Array<LH.ReportResult.AuditRef>} */ (clumps.get(clumpId)); // already defined
+      clump.push(auditRef);
+      clumps.set(clumpId, clump);
+    }
+
+    // Render each clump.
+    for (const [clumpId, auditRefs] of clumps) {
+      if (auditRefs.length === 0) continue;
+
+      if (clumpId === 'failed') {
+        const clumpElem = this.renderUnexpandableClump(auditRefs, groupDefinitions);
+        clumpElem.classList.add(`lh-clump--failed`);
+        element.appendChild(clumpElem);
+        continue;
+      }
+
+      const description = clumpId === 'manual' ? category.manualDescription : undefined;
+      const clumpElem = this.renderClump(clumpId, {auditRefs, description});
+      element.appendChild(clumpElem);
+    }
+
+    return element;
+  }
+
+  /**
+   * Create a non-semantic span used for hash navigation of categories
+   * @param {Element} element
+   * @param {string} id
+   */
+  createPermalinkSpan(element, id) {
+    const permalinkEl = this.dom.createChildOf(element, 'span', 'lh-permalink');
+    permalinkEl.id = id;
+  }
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = CategoryRenderer;
+} else {
+  self.CategoryRenderer = CategoryRenderer;
+}
+;
+/**
+ * @license
+ * Copyright 2018 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'use strict';
+
+/* globals self, Util, CategoryRenderer */
+
+/** @typedef {import('./dom.js')} DOM */
+
+class PerformanceCategoryRenderer extends CategoryRenderer {
+  /**
+   * @param {LH.ReportResult.AuditRef} audit
+   * @return {!Element}
+   */
+  _renderMetric(audit) {
+    const tmpl = this.dom.cloneTemplate('#tmpl-lh-metric', this.templateContext);
+    const element = this.dom.find('.lh-metric', tmpl);
+    element.id = audit.result.id;
+    const rating = Util.calculateRating(audit.result.score, audit.result.scoreDisplayMode);
+    element.classList.add(`lh-metric--${rating}`);
+
+    const titleEl = this.dom.find('.lh-metric__title', tmpl);
+    titleEl.textContent = audit.result.title;
+
+    const valueEl = this.dom.find('.lh-metric__value', tmpl);
+    valueEl.textContent = audit.result.displayValue || '';
+
+    const descriptionEl = this.dom.find('.lh-metric__description', tmpl);
+    descriptionEl.appendChild(this.dom.convertMarkdownLinkSnippets(audit.result.description));
+
+    if (audit.result.scoreDisplayMode === 'error') {
+      descriptionEl.textContent = '';
+      valueEl.textContent = 'Error!';
+      const tooltip = this.dom.createChildOf(descriptionEl, 'span');
+      tooltip.textContent = audit.result.errorMessage || 'Report error: no metric information';
+    }
+
+    return element;
+  }
+
+  /**
+   * @param {LH.ReportResult.AuditRef} audit
+   * @param {number} scale
+   * @return {!Element}
+   */
+  _renderOpportunity(audit, scale) {
+    const oppTmpl = this.dom.cloneTemplate('#tmpl-lh-opportunity', this.templateContext);
+    const element = this.populateAuditValues(audit, oppTmpl);
+    element.id = audit.result.id;
+
+    if (!audit.result.details || audit.result.scoreDisplayMode === 'error') {
+      return element;
+    }
+    const details = audit.result.details;
+    if (details.type !== 'opportunity') {
+      return element;
+    }
+
+    // Overwrite the displayValue with opportunity's wastedMs
+    // TODO: normalize this to one tagName.
+    const displayEl =
+      this.dom.find('span.lh-audit__display-text, div.lh-audit__display-text', element);
+    const sparklineWidthPct = `${details.overallSavingsMs / scale * 100}%`;
+    this.dom.find('div.lh-sparkline__bar', element).style.width = sparklineWidthPct;
+    displayEl.textContent = Util.i18n.formatSeconds(details.overallSavingsMs, 0.01);
+
+    // Set [title] tooltips
+    if (audit.result.displayValue) {
+      const displayValue = audit.result.displayValue;
+      this.dom.find('div.lh-load-opportunity__sparkline', element).title = displayValue;
+      displayEl.title = displayValue;
+    }
+
+    return element;
+  }
+
+  /**
+   * Get an audit's wastedMs to sort the opportunity by, and scale the sparkline width
+   * Opportunities with an error won't have a details object, so MIN_VALUE is returned to keep any
+   * erroring opportunities last in sort order.
+   * @param {LH.ReportResult.AuditRef} audit
+   * @return {number}
+   */
+  _getWastedMs(audit) {
+    if (audit.result.details && audit.result.details.type === 'opportunity') {
+      const details = audit.result.details;
+      if (typeof details.overallSavingsMs !== 'number') {
+        throw new Error('non-opportunity details passed to _getWastedMs');
+      }
+      return details.overallSavingsMs;
+    } else {
+      return Number.MIN_VALUE;
+    }
+  }
+
+  /**
+   * Get a link to the interactive scoring calculator with the metric values.
+   * @param {LH.ReportResult.AuditRef[]} auditRefs
+   * @return {string}
+   */
+  _getScoringCalculatorHref(auditRefs) {
+    // TODO: filter by !!acronym when dropping renderer support of v7 LHRs.
+    const metrics = auditRefs.filter(audit => audit.group === 'metrics');
+    const fci = auditRefs.find(audit => audit.id === 'first-cpu-idle');
+    const fmp = auditRefs.find(audit => audit.id === 'first-meaningful-paint');
+    if (fci) metrics.push(fci);
+    if (fmp) metrics.push(fmp);
+
+    /**
+     * Clamp figure to 2 decimal places
+     * @param {number} val
+     * @return {number}
+     */
+    const clampTo2Decimals = val => Math.round(val * 100) / 100;
+
+    const metricPairs = metrics.map(audit => {
+      let value;
+      if (typeof audit.result.numericValue === 'number') {
+        value = audit.id === 'cumulative-layout-shift' ?
+          clampTo2Decimals(audit.result.numericValue) :
+          Math.round(audit.result.numericValue);
+        value = value.toString();
+      } else {
+        value = 'null';
+      }
+      return [audit.acronym || audit.id, value];
+    });
+    const paramPairs = [...metricPairs];
+
+    if (Util.reportJson) {
+      paramPairs.push(['device', Util.reportJson.configSettings.formFactor]);
+      paramPairs.push(['version', Util.reportJson.lighthouseVersion]);
+    }
+
+    const params = new URLSearchParams(paramPairs);
+    const url = new URL('https://googlechrome.github.io/lighthouse/scorecalc/');
+    url.hash = params.toString();
+    return url.href;
+  }
+
+  /**
+   * @param {LH.ReportResult.Category} category
+   * @param {Object<string, LH.Result.ReportGroup>} groups
+   * @param {'PSI'=} environment 'PSI' and undefined are the only valid values
+   * @return {Element}
+   * @override
+   */
+  render(category, groups, environment) {
+    const strings = Util.i18n.strings;
+    const element = this.dom.createElement('div', 'lh-category');
+    if (environment === 'PSI') {
+      const gaugeEl = this.dom.createElement('div', 'lh-score__gauge');
+      gaugeEl.appendChild(this.renderScoreGauge(category, groups));
+      element.appendChild(gaugeEl);
+    } else {
+      this.createPermalinkSpan(element, category.id);
+      element.appendChild(this.renderCategoryHeader(category, groups));
+    }
+
+    // Metrics.
+    const metricAuditsEl = this.renderAuditGroup(groups.metrics);
+
+    // Metric descriptions toggle.
+    const toggleTmpl = this.dom.cloneTemplate('#tmpl-lh-metrics-toggle', this.templateContext);
+    const _toggleEl = this.dom.find('.lh-metrics-toggle', toggleTmpl);
+    metricAuditsEl.append(..._toggleEl.childNodes);
+
+    const metricAudits = category.auditRefs.filter(audit => audit.group === 'metrics');
+    const metricsBoxesEl = this.dom.createChildOf(metricAuditsEl, 'div', 'lh-metrics-container');
+
+    metricAudits.forEach(item => {
+      metricsBoxesEl.appendChild(this._renderMetric(item));
+    });
+
+    const estValuesEl = this.dom.createChildOf(metricAuditsEl, 'div', 'lh-metrics__disclaimer');
+    const disclaimerEl = this.dom.convertMarkdownLinkSnippets(strings.varianceDisclaimer);
+    estValuesEl.appendChild(disclaimerEl);
+
+    // Add link to score calculator.
+    const calculatorLink = this.dom.createChildOf(estValuesEl, 'a', 'lh-calclink');
+    calculatorLink.target = '_blank';
+    calculatorLink.textContent = strings.calculatorLink;
+    calculatorLink.href = this._getScoringCalculatorHref(category.auditRefs);
+
+
+    metricAuditsEl.classList.add('lh-audit-group--metrics');
+    element.appendChild(metricAuditsEl);
+
+    // Filmstrip
+    const timelineEl = this.dom.createChildOf(element, 'div', 'lh-filmstrip-container');
+    const thumbnailAudit = category.auditRefs.find(audit => audit.id === 'screenshot-thumbnails');
+    const thumbnailResult = thumbnailAudit && thumbnailAudit.result;
+    if (thumbnailResult && thumbnailResult.details) {
+      timelineEl.id = thumbnailResult.id;
+      const filmstripEl = this.detailsRenderer.render(thumbnailResult.details);
+      filmstripEl && timelineEl.appendChild(filmstripEl);
+    }
+
+    // Opportunities
+    const opportunityAudits = category.auditRefs
+        .filter(audit => audit.group === 'load-opportunities' && !Util.showAsPassed(audit.result))
+        .sort((auditA, auditB) => this._getWastedMs(auditB) - this._getWastedMs(auditA));
+
+
+    const filterableMetrics = metricAudits.filter(a => !!a.relevantAudits);
+    // TODO: only add if there are opportunities & diagnostics rendered.
+    if (filterableMetrics.length) {
+      this.renderMetricAuditFilter(filterableMetrics, element);
+    }
+
+    if (opportunityAudits.length) {
+      // Scale the sparklines relative to savings, minimum 2s to not overstate small savings
+      const minimumScale = 2000;
+      const wastedMsValues = opportunityAudits.map(audit => this._getWastedMs(audit));
+      const maxWaste = Math.max(...wastedMsValues);
+      const scale = Math.max(Math.ceil(maxWaste / 1000) * 1000, minimumScale);
+      const groupEl = this.renderAuditGroup(groups['load-opportunities']);
+      const tmpl = this.dom.cloneTemplate('#tmpl-lh-opportunity-header', this.templateContext);
+
+      this.dom.find('.lh-load-opportunity__col--one', tmpl).textContent =
+        strings.opportunityResourceColumnLabel;
+      this.dom.find('.lh-load-opportunity__col--two', tmpl).textContent =
+        strings.opportunitySavingsColumnLabel;
+
+      const headerEl = this.dom.find('.lh-load-opportunity__header', tmpl);
+      groupEl.appendChild(headerEl);
+      opportunityAudits.forEach(item => groupEl.appendChild(this._renderOpportunity(item, scale)));
+      groupEl.classList.add('lh-audit-group--load-opportunities');
+      element.appendChild(groupEl);
+    }
+
+    // Diagnostics
+    const diagnosticAudits = category.auditRefs
+        .filter(audit => audit.group === 'diagnostics' && !Util.showAsPassed(audit.result))
+        .sort((a, b) => {
+          const scoreA = a.result.scoreDisplayMode === 'informative' ? 100 : Number(a.result.score);
+          const scoreB = b.result.scoreDisplayMode === 'informative' ? 100 : Number(b.result.score);
+          return scoreA - scoreB;
+        });
+
+    if (diagnosticAudits.length) {
+      const groupEl = this.renderAuditGroup(groups['diagnostics']);
+      diagnosticAudits.forEach(item => groupEl.appendChild(this.renderAudit(item)));
+      groupEl.classList.add('lh-audit-group--diagnostics');
+      element.appendChild(groupEl);
+    }
+
+    // Passed audits
+    const passedAudits = category.auditRefs
+        .filter(audit => (audit.group === 'load-opportunities' || audit.group === 'diagnostics') &&
+            Util.showAsPassed(audit.result));
+
+    if (!passedAudits.length) return element;
+
+    const clumpOpts = {
+      auditRefs: passedAudits,
+      groupDefinitions: groups,
+    };
+    const passedElem = this.renderClump('passed', clumpOpts);
+    element.appendChild(passedElem);
+
+    // Budgets
+    /** @type {Array<Element>} */
+    const budgetTableEls = [];
+    ['performance-budget', 'timing-budget'].forEach((id) => {
+      const audit = category.auditRefs.find(audit => audit.id === id);
+      if (audit && audit.result.details) {
+        const table = this.detailsRenderer.render(audit.result.details);
+        if (table) {
+          table.id = id;
+          table.classList.add('lh-audit');
+          budgetTableEls.push(table);
+        }
+      }
+    });
+    if (budgetTableEls.length > 0) {
+      const budgetsGroupEl = this.renderAuditGroup(groups.budgets);
+      budgetTableEls.forEach(table => budgetsGroupEl.appendChild(table));
+      budgetsGroupEl.classList.add('lh-audit-group--budgets');
+      element.appendChild(budgetsGroupEl);
+    }
+
+    return element;
+  }
+
+  /**
+   * Render the control to filter the audits by metric. The filtering is done at runtime by CSS only
+   * @param {LH.ReportResult.AuditRef[]} filterableMetrics
+   * @param {HTMLDivElement} categoryEl
+   */
+  renderMetricAuditFilter(filterableMetrics, categoryEl) {
+    const metricFilterEl = this.dom.createElement('div', 'lh-metricfilter');
+    const textEl = this.dom.createChildOf(metricFilterEl, 'span', 'lh-metricfilter__text');
+    textEl.textContent = Util.i18n.strings.showRelevantAudits;
+
+    const filterChoices = /** @type {LH.ReportResult.AuditRef[]} */ ([
+      ({acronym: 'All'}),
+      ...filterableMetrics,
+    ]);
+    for (const metric of filterChoices) {
+      const elemId = `metric-${metric.acronym}`;
+      const radioEl = this.dom.createChildOf(metricFilterEl, 'input', 'lh-metricfilter__radio', {
+        type: 'radio',
+        name: 'metricsfilter',
+        id: elemId,
+      });
+
+      const labelEl = this.dom.createChildOf(metricFilterEl, 'label', 'lh-metricfilter__label', {
+        for: elemId,
+        title: metric.result && metric.result.title,
+      });
+      labelEl.textContent = metric.acronym || metric.id;
+
+      if (metric.acronym === 'All') {
+        radioEl.checked = true;
+        labelEl.classList.add('lh-metricfilter__label--active');
+      }
+      categoryEl.append(metricFilterEl);
+
+      // Toggle class/hidden state based on filter choice.
+      radioEl.addEventListener('input', _ => {
+        for (const elem of categoryEl.querySelectorAll('label.lh-metricfilter__label')) {
+          elem.classList.toggle('lh-metricfilter__label--active', elem.htmlFor === elemId);
+        }
+        categoryEl.classList.toggle('lh-category--filtered', metric.acronym !== 'All');
+
+        for (const perfAuditEl of categoryEl.querySelectorAll('div.lh-audit')) {
+          if (metric.acronym === 'All') {
+            perfAuditEl.hidden = false;
+            continue;
+          }
+
+          perfAuditEl.hidden = true;
+          if (metric.relevantAudits && metric.relevantAudits.includes(perfAuditEl.id)) {
+            perfAuditEl.hidden = false;
+          }
+        }
+
+        // Hide groups/clumps if all child audits are also hidden.
+        const groupEls = categoryEl.querySelectorAll('div.lh-audit-group, details.lh-audit-group');
+        for (const groupEl of groupEls) {
+          groupEl.hidden = false;
+          const childEls = Array.from(groupEl.querySelectorAll('div.lh-audit'));
+          const areAllHidden = !!childEls.length && childEls.every(auditEl => auditEl.hidden);
+          groupEl.hidden = areAllHidden;
+        }
+      });
+    }
+  }
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = PerformanceCategoryRenderer;
+} else {
+  self.PerformanceCategoryRenderer = PerformanceCategoryRenderer;
+}
+;
+/**
+ * @license
+ * Copyright 2018 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'use strict';
+
+/* globals self, Util, CategoryRenderer */
+
+class PwaCategoryRenderer extends CategoryRenderer {
+  /**
+   * @param {LH.ReportResult.Category} category
+   * @param {Object<string, LH.Result.ReportGroup>} [groupDefinitions]
+   * @return {Element}
+   */
+  render(category, groupDefinitions = {}) {
+    const categoryElem = this.dom.createElement('div', 'lh-category');
+    this.createPermalinkSpan(categoryElem, category.id);
+    categoryElem.appendChild(this.renderCategoryHeader(category, groupDefinitions));
+
+    const auditRefs = category.auditRefs;
+
+    // Regular audits aren't split up into pass/fail/notApplicable clumps, they're
+    // all put in a top-level clump that isn't expandable/collapsible.
+    const regularAuditRefs = auditRefs.filter(ref => ref.result.scoreDisplayMode !== 'manual');
+    const auditsElem = this._renderAudits(regularAuditRefs, groupDefinitions);
+    categoryElem.appendChild(auditsElem);
+
+    // Manual audits are still in a manual clump.
+    const manualAuditRefs = auditRefs.filter(ref => ref.result.scoreDisplayMode === 'manual');
+    const manualElem = this.renderClump('manual',
+      {auditRefs: manualAuditRefs, description: category.manualDescription});
+    categoryElem.appendChild(manualElem);
+
+    return categoryElem;
+  }
+
+  /**
+   * @param {LH.ReportResult.Category} category
+   * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
+   * @return {DocumentFragment}
+   */
+  renderScoreGauge(category, groupDefinitions) {
+    // Defer to parent-gauge style if category error.
+    if (category.score === null) {
+      return super.renderScoreGauge(category, groupDefinitions);
+    }
+
+    const tmpl = this.dom.cloneTemplate('#tmpl-lh-gauge--pwa', this.templateContext);
+    const wrapper = this.dom.find('a.lh-gauge--pwa__wrapper', tmpl);
+    wrapper.href = `#${category.id}`;
+
+    // Correct IDs in case multiple instances end up in the page.
+    const svgRoot = tmpl.querySelector('svg');
+    if (!svgRoot) throw new Error('no SVG element found in PWA score gauge template');
+    PwaCategoryRenderer._makeSvgReferencesUnique(svgRoot);
+
+    const allGroups = this._getGroupIds(category.auditRefs);
+    const passingGroupIds = this._getPassingGroupIds(category.auditRefs);
+
+    if (passingGroupIds.size === allGroups.size) {
+      wrapper.classList.add('lh-badged--all');
+    } else {
+      for (const passingGroupId of passingGroupIds) {
+        wrapper.classList.add(`lh-badged--${passingGroupId}`);
+      }
+    }
+
+    this.dom.find('.lh-gauge__label', tmpl).textContent = category.title;
+    wrapper.title = this._getGaugeTooltip(category.auditRefs, groupDefinitions);
+    return tmpl;
+  }
+
+  /**
+   * Returns the group IDs found in auditRefs.
+   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
+   * @return {!Set<string>}
+   */
+  _getGroupIds(auditRefs) {
+    const groupIds = auditRefs.map(ref => ref.group).filter(/** @return {g is string} */ g => !!g);
+    return new Set(groupIds);
+  }
+
+  /**
+   * Returns the group IDs whose audits are all considered passing.
+   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
+   * @return {Set<string>}
+   */
+  _getPassingGroupIds(auditRefs) {
+    const uniqueGroupIds = this._getGroupIds(auditRefs);
+
+    // Remove any that have a failing audit.
+    for (const auditRef of auditRefs) {
+      if (!Util.showAsPassed(auditRef.result) && auditRef.group) {
+        uniqueGroupIds.delete(auditRef.group);
+      }
+    }
+
+    return uniqueGroupIds;
+  }
+
+  /**
+   * Returns a tooltip string summarizing group pass rates.
+   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
+   * @param {Record<string, LH.Result.ReportGroup>} groupDefinitions
+   * @return {string}
+   */
+  _getGaugeTooltip(auditRefs, groupDefinitions) {
+    const groupIds = this._getGroupIds(auditRefs);
+
+    const tips = [];
+    for (const groupId of groupIds) {
+      const groupAuditRefs = auditRefs.filter(ref => ref.group === groupId);
+      const auditCount = groupAuditRefs.length;
+      const passedCount = groupAuditRefs.filter(ref => Util.showAsPassed(ref.result)).length;
+
+      const title = groupDefinitions[groupId].title;
+      tips.push(`${title}: ${passedCount}/${auditCount}`);
+    }
+
+    return tips.join(', ');
+  }
+
+  /**
+   * Render non-manual audits in groups, giving a badge to any group that has
+   * all passing audits.
+   * @param {Array<LH.ReportResult.AuditRef>} auditRefs
+   * @param {Object<string, LH.Result.ReportGroup>} groupDefinitions
+   * @return {Element}
+   */
+  _renderAudits(auditRefs, groupDefinitions) {
+    const auditsElem = this.renderUnexpandableClump(auditRefs, groupDefinitions);
+
+    // Add a 'badged' class to group if all audits in that group pass.
+    const passsingGroupIds = this._getPassingGroupIds(auditRefs);
+    for (const groupId of passsingGroupIds) {
+      const groupElem = this.dom.find(`.lh-audit-group--${groupId}`, auditsElem);
+      groupElem.classList.add('lh-badged');
+    }
+
+    return auditsElem;
+  }
+
+  /**
+   * Alters SVG id references so multiple instances of an SVG element can coexist
+   * in a single page. If `svgRoot` has a `<defs>` block, gives all elements defined
+   * in it unique ids, then updates id references (`<use xlink:href="...">`,
+   * `fill="url(#...)"`) to the altered ids in all descendents of `svgRoot`.
+   * @param {SVGElement} svgRoot
+   */
+  static _makeSvgReferencesUnique(svgRoot) {
+    const defsEl = svgRoot.querySelector('defs');
+    if (!defsEl) return;
+
+    const idSuffix = Util.getUniqueSuffix();
+    const elementsToUpdate = defsEl.querySelectorAll('[id]');
+    for (const el of elementsToUpdate) {
+      const oldId = el.id;
+      const newId = `${oldId}-${idSuffix}`;
+      el.id = newId;
+
+      // Update all <use>s.
+      const useEls = svgRoot.querySelectorAll(`use[href="#${oldId}"]`);
+      for (const useEl of useEls) {
+        useEl.setAttribute('href', `#${newId}`);
+      }
+
+      // Update all fill="url(#...)"s.
+      const fillEls = svgRoot.querySelectorAll(`[fill="url(#${oldId})"]`);
+      for (const fillEl of fillEls) {
+        fillEl.setAttribute('fill', `url(#${newId})`);
+      }
+    }
+  }
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = PwaCategoryRenderer;
+} else {
+  self.PwaCategoryRenderer = PwaCategoryRenderer;
+}
+;
+/**
+ * @license
+ * Copyright 2017 The Lighthouse Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS-IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+'use strict';
+
+/**
+ * @fileoverview The entry point for rendering the Lighthouse report based on the JSON output.
+ *    This file is injected into the report HTML along with the JSON report.
+ *
+ * Dummy text for ensuring report robustness: \u003c/script> pre$`post %%LIGHTHOUSE_JSON%%
+ */
+
+/** @typedef {import('./category-renderer')} CategoryRenderer */
+/** @typedef {import('./dom.js')} DOM */
+
+/* globals self, Util, DetailsRenderer, CategoryRenderer, I18n, PerformanceCategoryRenderer, PwaCategoryRenderer, ElementScreenshotRenderer */
+
+class ReportRenderer {
+  /**
+   * @param {DOM} dom
+   */
+  constructor(dom) {
+    /** @type {DOM} */
+    this._dom = dom;
+    /** @type {ParentNode} */
+    this._templateContext = this._dom.document();
+  }
+
+  /**
+   * @param {LH.Result} result
+   * @param {Element} container Parent element to render the report into.
+   * @return {!Element}
+   */
+  renderReport(result, container) {
+    this._dom.setLighthouseChannel(result.configSettings.channel || 'unknown');
+
+    const report = Util.prepareReportResult(result);
+
+    container.textContent = ''; // Remove previous report.
+    container.appendChild(this._renderReport(report));
+
+    return container;
+  }
+
+  /**
+   * Define a custom element for <templates> to be extracted from. For example:
+   *     this.setTemplateContext(new DOMParser().parseFromString(htmlStr, 'text/html'))
+   * @param {ParentNode} context
+   */
+  setTemplateContext(context) {
+    this._templateContext = context;
+  }
+
+  /**
+   * @param {LH.ReportResult} report
+   * @return {DocumentFragment}
+   */
+  _renderReportTopbar(report) {
+    const el = this._dom.cloneTemplate('#tmpl-lh-topbar', this._templateContext);
+    const metadataUrl = this._dom.find('a.lh-topbar__url', el);
+    metadataUrl.href = metadataUrl.textContent = report.finalUrl;
+    metadataUrl.title = report.finalUrl;
+    return el;
+  }
+
+  /**
+   * @return {DocumentFragment}
+   */
+  _renderReportHeader() {
+    const el = this._dom.cloneTemplate('#tmpl-lh-heading', this._templateContext);
+    const domFragment = this._dom.cloneTemplate('#tmpl-lh-scores-wrapper', this._templateContext);
+    const placeholder = this._dom.find('.lh-scores-wrapper-placeholder', el);
+    placeholder.replaceWith(domFragment);
+    return el;
+  }
+
+  /**
+   * @param {LH.ReportResult} report
+   * @return {DocumentFragment}
+   */
+  _renderReportFooter(report) {
+    const footer = this._dom.cloneTemplate('#tmpl-lh-footer', this._templateContext);
+
+    const env = this._dom.find('.lh-env__items', footer);
+    env.id = 'runtime-settings';
+    this._dom.find('.lh-env__title', footer).textContent = Util.i18n.strings.runtimeSettingsTitle;
+
+    const envValues = Util.getEnvironmentDisplayValues(report.configSettings || {});
+    const runtimeValues = [
+      {name: Util.i18n.strings.runtimeSettingsUrl, description: report.finalUrl},
+      {name: Util.i18n.strings.runtimeSettingsFetchTime,
+        description: Util.i18n.formatDateTime(report.fetchTime)},
+      ...envValues,
+      {name: Util.i18n.strings.runtimeSettingsChannel, description: report.configSettings.channel},
+      {name: Util.i18n.strings.runtimeSettingsUA, description: report.userAgent},
+      {name: Util.i18n.strings.runtimeSettingsUANetwork, description: report.environment &&
+        report.environment.networkUserAgent},
+      {name: Util.i18n.strings.runtimeSettingsBenchmark, description: report.environment &&
+        report.environment.benchmarkIndex.toFixed(0)},
+    ];
+    if (report.environment.credits && report.environment.credits['axe-core']) {
+      runtimeValues.push({
+        name: Util.i18n.strings.runtimeSettingsAxeVersion,
+        description: report.environment.credits['axe-core'],
+      });
+    }
+
+    for (const runtime of runtimeValues) {
+      if (!runtime.description) continue;
+
+      const item = this._dom.cloneTemplate('#tmpl-lh-env__items', env);
+      this._dom.find('.lh-env__name', item).textContent = runtime.name;
+      this._dom.find('.lh-env__description', item).textContent = runtime.description;
+      env.appendChild(item);
+    }
+
+    this._dom.find('.lh-footer__version_issue', footer).textContent = Util.i18n.strings.footerIssue;
+    this._dom.find('.lh-footer__version', footer).textContent = report.lighthouseVersion;
+    return footer;
+  }
+
+  /**
+   * Returns a div with a list of top-level warnings, or an empty div if no warnings.
+   * @param {LH.ReportResult} report
+   * @return {Node}
+   */
+  _renderReportWarnings(report) {
+    if (!report.runWarnings || report.runWarnings.length === 0) {
+      return this._dom.createElement('div');
+    }
+
+    const container = this._dom.cloneTemplate('#tmpl-lh-warnings--toplevel', this._templateContext);
+    const message = this._dom.find('.lh-warnings__msg', container);
+    message.textContent = Util.i18n.strings.toplevelWarningsMessage;
+
+    const warnings = this._dom.find('ul', container);
+    for (const warningString of report.runWarnings) {
+      const warning = warnings.appendChild(this._dom.createElement('li'));
+      warning.appendChild(this._dom.convertMarkdownLinkSnippets(warningString));
+    }
+
+    return container;
+  }
+
+  /**
+   * @param {LH.ReportResult} report
+   * @param {CategoryRenderer} categoryRenderer
+   * @param {Record<string, CategoryRenderer>} specificCategoryRenderers
+   * @return {!DocumentFragment[]}
+   */
+  _renderScoreGauges(report, categoryRenderer, specificCategoryRenderers) {
+    // Group gauges in this order: default, pwa, plugins.
+    const defaultGauges = [];
+    const customGauges = []; // PWA.
+    const pluginGauges = [];
+
+    for (const category of Object.values(report.categories)) {
+      const renderer = specificCategoryRenderers[category.id] || categoryRenderer;
+      const categoryGauge = renderer.renderScoreGauge(category, report.categoryGroups || {});
+
+      if (Util.isPluginCategory(category.id)) {
+        pluginGauges.push(categoryGauge);
+      } else if (renderer.renderScoreGauge === categoryRenderer.renderScoreGauge) {
+        // The renderer for default categories is just the default CategoryRenderer.
+        // If the functions are equal, then renderer is an instance of CategoryRenderer.
+        // For example, the PWA category uses PwaCategoryRenderer, which overrides
+        // CategoryRenderer.renderScoreGauge, so it would fail this check and be placed
+        // in the customGauges bucket.
+        defaultGauges.push(categoryGauge);
+      } else {
+        customGauges.push(categoryGauge);
+      }
+    }
+
+    return [...defaultGauges, ...customGauges, ...pluginGauges];
+  }
+
+  /**
+   * @param {LH.ReportResult} report
+   * @return {!DocumentFragment}
+   */
+  _renderReport(report) {
+    const i18n = new I18n(report.configSettings.locale, {
+      // Set missing renderer strings to default (english) values.
+      ...Util.UIStrings,
+      ...report.i18n.rendererFormattedStrings,
+    });
+    Util.i18n = i18n;
+    Util.reportJson = report;
+
+    const fullPageScreenshot =
+      report.audits['full-page-screenshot'] && report.audits['full-page-screenshot'].details &&
+      report.audits['full-page-screenshot'].details.type === 'full-page-screenshot' ?
+      report.audits['full-page-screenshot'].details : undefined;
+    const detailsRenderer = new DetailsRenderer(this._dom, {
+      fullPageScreenshot,
+    });
+
+    const categoryRenderer = new CategoryRenderer(this._dom, detailsRenderer);
+    categoryRenderer.setTemplateContext(this._templateContext);
+
+    /** @type {Record<string, CategoryRenderer>} */
+    const specificCategoryRenderers = {
+      performance: new PerformanceCategoryRenderer(this._dom, detailsRenderer),
+      pwa: new PwaCategoryRenderer(this._dom, detailsRenderer),
+    };
+    Object.values(specificCategoryRenderers).forEach(renderer => {
+      renderer.setTemplateContext(this._templateContext);
+    });
+
+    const headerContainer = this._dom.createElement('div');
+    headerContainer.appendChild(this._renderReportHeader());
+
+    const reportContainer = this._dom.createElement('div', 'lh-container');
+    const reportSection = this._dom.createElement('div', 'lh-report');
+    reportSection.appendChild(this._renderReportWarnings(report));
+
+    let scoreHeader;
+    const isSoloCategory = Object.keys(report.categories).length === 1;
+    if (!isSoloCategory) {
+      scoreHeader = this._dom.createElement('div', 'lh-scores-header');
+    } else {
+      headerContainer.classList.add('lh-header--solo-category');
+    }
+
+    if (scoreHeader) {
+      const scoreScale = this._dom.cloneTemplate('#tmpl-lh-scorescale', this._templateContext);
+      const scoresContainer = this._dom.find('.lh-scores-container', headerContainer);
+      scoreHeader.append(
+        ...this._renderScoreGauges(report, categoryRenderer, specificCategoryRenderers));
+      scoresContainer.appendChild(scoreHeader);
+      scoresContainer.appendChild(scoreScale);
+
+      const stickyHeader = this._dom.createElement('div', 'lh-sticky-header');
+      stickyHeader.append(
+        ...this._renderScoreGauges(report, categoryRenderer, specificCategoryRenderers));
+      reportContainer.appendChild(stickyHeader);
+    }
+
+    const categories = reportSection.appendChild(this._dom.createElement('div', 'lh-categories'));
+    for (const category of Object.values(report.categories)) {
+      const renderer = specificCategoryRenderers[category.id] || categoryRenderer;
+      // .lh-category-wrapper is full-width and provides horizontal rules between categories.
+      // .lh-category within has the max-width: var(--report-width);
+      const wrapper = renderer.dom.createChildOf(categories, 'div', 'lh-category-wrapper');
+      wrapper.appendChild(renderer.render(category, report.categoryGroups));
+    }
+
+    const reportFragment = this._dom.createFragment();
+    const topbarDocumentFragment = this._renderReportTopbar(report);
+
+    reportFragment.appendChild(topbarDocumentFragment);
+    reportFragment.appendChild(reportContainer);
+    reportContainer.appendChild(headerContainer);
+    reportContainer.appendChild(reportSection);
+    reportSection.appendChild(this._renderReportFooter(report));
+
+    if (fullPageScreenshot) {
+      ElementScreenshotRenderer.installFullPageScreenshot(
+        reportContainer, fullPageScreenshot.screenshot);
+    }
+
+    return reportFragment;
+  }
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = ReportRenderer;
+} else {
+  self.ReportRenderer = ReportRenderer;
+}
+;
+/**
+ * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+ */
+'use strict';
+
+/* globals self */
+
+// Not named `NBSP` because that creates a duplicate identifier (util.js).
+const NBSP2 = '\xa0';
+const KiB = 1024;
+const MiB = KiB * KiB;
+
+/**
+ * @template T
+ */
+class I18n {
+  /**
+   * @param {LH.Locale} locale
+   * @param {T} strings
+   */
+  constructor(locale, strings) {
+    // When testing, use a locale with more exciting numeric formatting.
+    if (locale === 'en-XA') locale = 'de';
+
+    this._numberDateLocale = locale;
+    this._numberFormatter = new Intl.NumberFormat(locale);
+    this._percentFormatter = new Intl.NumberFormat(locale, {style: 'percent'});
+    this._strings = strings;
+  }
+
+  get strings() {
+    return this._strings;
+  }
+
+  /**
+   * Format number.
+   * @param {number} number
+   * @param {number=} granularity Number of decimal places to include. Defaults to 0.1.
+   * @return {string}
+   */
+  formatNumber(number, granularity = 0.1) {
+    const coarseValue = Math.round(number / granularity) * granularity;
+    return this._numberFormatter.format(coarseValue);
+  }
+
+  /**
+   * Format percent.
+   * @param {number} number 0–1
+   * @return {string}
+   */
+  formatPercent(number) {
+    return this._percentFormatter.format(number);
+  }
+
+  /**
+   * @param {number} size
+   * @param {number=} granularity Controls how coarse the displayed value is, defaults to 0.1
+   * @return {string}
+   */
+  formatBytesToKiB(size, granularity = 0.1) {
+    const formatter = this._byteFormatterForGranularity(granularity);
+    const kbs = formatter.format(Math.round(size / 1024 / granularity) * granularity);
+    return `${kbs}${NBSP2}KiB`;
+  }
+
+  /**
+   * @param {number} size
+   * @param {number=} granularity Controls how coarse the displayed value is, defaults to 0.1
+   * @return {string}
+   */
+  formatBytesToMiB(size, granularity = 0.1) {
+    const formatter = this._byteFormatterForGranularity(granularity);
+    const kbs = formatter.format(Math.round(size / 1024 ** 2 / granularity) * granularity);
+    return `${kbs}${NBSP2}MiB`;
+  }
+
+  /**
+   * @param {number} size
+   * @param {number=} granularity Controls how coarse the displayed value is, defaults to 1
+   * @return {string}
+   */
+  formatBytes(size, granularity = 1) {
+    const formatter = this._byteFormatterForGranularity(granularity);
+    const kbs = formatter.format(Math.round(size / granularity) * granularity);
+    return `${kbs}${NBSP2}bytes`;
+  }
+
+  /**
+   * @param {number} size
+   * @param {number=} granularity Controls how coarse the displayed value is, defaults to 0.1
+   * @return {string}
+   */
+  formatBytesWithBestUnit(size, granularity = 0.1) {
+    if (size >= MiB) return this.formatBytesToMiB(size, granularity);
+    if (size >= KiB) return this.formatBytesToKiB(size, granularity);
+    return this.formatNumber(size, granularity) + '\xa0B';
+  }
+
+  /**
+   * Format bytes with a constant number of fractional digits, i.e for a granularity of 0.1, 10 becomes '10.0'
+   * @param {number} granularity Controls how coarse the displayed value is
+   * @return {Intl.NumberFormat}
+   */
+  _byteFormatterForGranularity(granularity) {
+    // assume any granularity above 1 will not contain fractional parts, i.e. will never be 1.5
+    let numberOfFractionDigits = 0;
+    if (granularity < 1) {
+      numberOfFractionDigits = -Math.floor(Math.log10(granularity));
+    }
+
+    return new Intl.NumberFormat(this._numberDateLocale, {
+      ...this._numberFormatter.resolvedOptions(),
+      maximumFractionDigits: numberOfFractionDigits,
+      minimumFractionDigits: numberOfFractionDigits,
+    });
+  }
+
+  /**
+   * @param {number} ms
+   * @param {number=} granularity Controls how coarse the displayed value is, defaults to 10
+   * @return {string}
+   */
+  formatMilliseconds(ms, granularity = 10) {
+    const coarseTime = Math.round(ms / granularity) * granularity;
+    return coarseTime === 0
+      ? `${this._numberFormatter.format(0)}${NBSP2}ms`
+      : `${this._numberFormatter.format(coarseTime)}${NBSP2}ms`;
+  }
+
+  /**
+   * @param {number} ms
+   * @param {number=} granularity Controls how coarse the displayed value is, defaults to 0.1
+   * @return {string}
+   */
+  formatSeconds(ms, granularity = 0.1) {
+    const coarseTime = Math.round(ms / 1000 / granularity) * granularity;
+    return `${this._numberFormatter.format(coarseTime)}${NBSP2}s`;
+  }
+
+  /**
+   * Format time.
+   * @param {string} date
+   * @return {string}
+   */
+  formatDateTime(date) {
+    /** @type {Intl.DateTimeFormatOptions} */
+    const options = {
+      month: 'short', day: 'numeric', year: 'numeric',
+      hour: 'numeric', minute: 'numeric', timeZoneName: 'short',
+    };
+
+    // Force UTC if runtime timezone could not be detected.
+    // See https://github.com/GoogleChrome/lighthouse/issues/1056
+    // and https://github.com/GoogleChrome/lighthouse/pull/9822
+    let formatter;
+    try {
+      formatter = new Intl.DateTimeFormat(this._numberDateLocale, options);
+    } catch (err) {
+      options.timeZone = 'UTC';
+      formatter = new Intl.DateTimeFormat(this._numberDateLocale, options);
+    }
+
+    return formatter.format(new Date(date));
+  }
+
+  /**
+   * Converts a time in milliseconds into a duration string, i.e. `1d 2h 13m 52s`
+   * @param {number} timeInMilliseconds
+   * @return {string}
+   */
+  formatDuration(timeInMilliseconds) {
+    let timeInSeconds = timeInMilliseconds / 1000;
+    if (Math.round(timeInSeconds) === 0) {
+      return 'None';
+    }
+
+    /** @type {Array<string>} */
+    const parts = [];
+    /** @type {Record<string, number>} */
+    const unitLabels = {
+      d: 60 * 60 * 24,
+      h: 60 * 60,
+      m: 60,
+      s: 1,
+    };
+
+    Object.keys(unitLabels).forEach(label => {
+      const unit = unitLabels[label];
+      const numberOfUnits = Math.floor(timeInSeconds / unit);
+      if (numberOfUnits > 0) {
+        timeInSeconds -= numberOfUnits * unit;
+        parts.push(`${numberOfUnits}\xa0${label}`);
+      }
+    });
+
+    return parts.join(' ');
+  }
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = I18n;
+} else {
+  self.I18n = I18n;
+}
+;
+/**
+ * @license Copyright 2021 The Lighthouse Authors. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+ */
+'use strict';
+
+/* global self btoa atob window CompressionStream Response */
+
+const btoa_ = typeof btoa !== 'undefined' ?
+  btoa :
+  /** @param {string} str */
+  (str) => Buffer.from(str).toString('base64');
+const atob_ = typeof atob !== 'undefined' ?
+  atob :
+  /** @param {string} str */
+  (str) => Buffer.from(str, 'base64').toString();
+
+/**
+ * Takes an UTF-8 string and returns a base64 encoded string.
+ * If gzip is true, the UTF-8 bytes are gzipped before base64'd, using
+ * CompressionStream (currently only in Chrome), falling back to pako
+ * (which is only used to encode in our Node tests).
+ * @param {string} string
+ * @param {{gzip: boolean}} options
+ * @return {Promise<string>}
+ */
+async function toBase64(string, options) {
+  let bytes = new TextEncoder().encode(string);
+
+  if (options.gzip) {
+    if (typeof CompressionStream !== 'undefined') {
+      const cs = new CompressionStream('gzip');
+      const writer = cs.writable.getWriter();
+      writer.write(bytes);
+      writer.close();
+      const compAb = await new Response(cs.readable).arrayBuffer();
+      bytes = new Uint8Array(compAb);
+    } else {
+      /** @type {import('pako')=} */
+      const pako = window.pako;
+      bytes = pako.gzip(string);
+    }
+  }
+
+  let binaryString = '';
+  // This is ~25% faster than building the string one character at a time.
+  // https://jsbench.me/2gkoxazvjl
+  const chunkSize = 5000;
+  for (let i = 0; i < bytes.length; i += chunkSize) {
+    binaryString += String.fromCharCode(...bytes.subarray(i, i + chunkSize));
+  }
+  return btoa_(binaryString);
+}
+
+/**
+ * @param {string} encoded
+ * @param {{gzip: boolean}} options
+ * @return {string}
+ */
+function fromBase64(encoded, options) {
+  const binaryString = atob_(encoded);
+  const bytes = Uint8Array.from(binaryString, c => c.charCodeAt(0));
+
+  if (options.gzip) {
+    /** @type {import('pako')=} */
+    const pako = window.pako;
+    return pako.ungzip(bytes, {to: 'string'});
+  } else {
+    return new TextDecoder().decode(bytes);
+  }
+}
+
+if (typeof module !== 'undefined' && module.exports) {
+  module.exports = {toBase64, fromBase64};
+} else {
+  self.TextEncoding = {toBase64, fromBase64};
+}
+
+  //# sourceURL=compiled-reportrenderer.js
+  </script>
+  <script>window.__LIGHTHOUSE_JSON__ = {"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/96.0.4664.110 Safari/537.36","environment":{"networkUserAgent":"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4420.0 Mobile Safari/537.36 Chrome-Lighthouse","hostUserAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/96.0.4664.110 Safari/537.36","benchmarkIndex":1949,"credits":{"axe-core":"4.2.1"}},"lighthouseVersion":"8.0.0","fetchTime":"2022-01-19T08:17:19.449Z","requestedUrl":"http://localhost:8008/congo/samples/emoji/","finalUrl":"http://localhost:8008/congo/samples/emoji/","runWarnings":[],"audits":{"is-on-https":{"id":"is-on-https","title":"Uses HTTPS","description":"All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding [mixed content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content), where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more](https://web.dev/is-on-https/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"redirects-http":{"id":"redirects-http","title":"Redirects HTTP traffic to HTTPS","description":"If you've already set up HTTPS, make sure that you redirect all HTTP traffic to HTTPS in order to enable secure web features for all your users. [Learn more](https://web.dev/redirects-http/).","score":null,"scoreDisplayMode":"notApplicable"},"service-worker":{"id":"service-worker","title":"Does not register a service worker that controls page and `start_url`","description":"The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. [Learn more](https://web.dev/service-worker/).","score":0,"scoreDisplayMode":"binary"},"viewport":{"id":"viewport","title":"Has a `\u003cmeta name=\"viewport\">` tag with `width` or `initial-scale`","description":"Add a `\u003cmeta name=\"viewport\">` tag to optimize your app for mobile screens. [Learn more](https://web.dev/viewport/).","score":1,"scoreDisplayMode":"binary","warnings":[]},"first-contentful-paint":{"id":"first-contentful-paint","title":"First Contentful Paint","description":"First Contentful Paint marks the time at which the first text or image is painted. [Learn more](https://web.dev/first-contentful-paint/).","score":0.98,"scoreDisplayMode":"numeric","numericValue":1369,"numericUnit":"millisecond","displayValue":"1.4 s"},"largest-contentful-paint":{"id":"largest-contentful-paint","title":"Largest Contentful Paint","description":"Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more](https://web.dev/lighthouse-largest-contentful-paint/)","score":1,"scoreDisplayMode":"numeric","numericValue":1500,"numericUnit":"millisecond","displayValue":"1.5 s"},"first-meaningful-paint":{"id":"first-meaningful-paint","title":"First Meaningful Paint","description":"First Meaningful Paint measures when the primary content of a page is visible. [Learn more](https://web.dev/first-meaningful-paint/).","score":0.99,"scoreDisplayMode":"numeric","numericValue":1369,"numericUnit":"millisecond","displayValue":"1.4 s"},"speed-index":{"id":"speed-index","title":"Speed Index","description":"Speed Index shows how quickly the contents of a page are visibly populated. [Learn more](https://web.dev/speed-index/).","score":1,"scoreDisplayMode":"numeric","numericValue":1369,"numericUnit":"millisecond","displayValue":"1.4 s"},"screenshot-thumbnails":{"id":"screenshot-thumbnails","title":"Screenshot Thumbnails","description":"This is what the load of your site looked like.","score":null,"scoreDisplayMode":"informative","details":{"type":"filmstrip","scale":3000,"items":[{"timing":300,"timestamp":501414257034,"data":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRQBAwQEBQQFCQUFCRQNCw0UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIANUAeAMBEQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AP1ToAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgD//Z"},{"timing":600,"timestamp":501414557034,"data":"data:image/jpeg;base64,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"},{"timing":900,"timestamp":501414857034,"data":"data:image/jpeg;base64,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"},{"timing":1200,"timestamp":501415157034,"data":"data:image/jpeg;base64,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"},{"timing":1500,"timestamp":501415457034,"data":"data:image/jpeg;base64,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"},{"timing":1800,"timestamp":501415757034,"data":"data:image/jpeg;base64,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"},{"timing":2100,"timestamp":501416057034,"data":"data:image/jpeg;base64,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"},{"timing":2400,"timestamp":501416357034,"data":"data:image/jpeg;base64,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"},{"timing":2700,"timestamp":501416657034,"data":"data:image/jpeg;base64,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"},{"timing":3000,"timestamp":501416957034,"data":"data:image/jpeg;base64,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"}]}},"final-screenshot":{"id":"final-screenshot","title":"Final Screenshot","description":"The last screenshot captured of the pageload.","score":null,"scoreDisplayMode":"informative","details":{"type":"screenshot","timing":969,"timestamp":501414925934,"data":"data:image/jpeg;base64,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KIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIubZP4g5q3ncnj+ielX5yHFyejctSW212eqBsxs5A8nD3/H9EHSUVf6F6pq9X4BmSqRS13tkdBYrTDUkEzDpzHfiP/AhWBAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQFydmI616Jzed/2TxePzeJy9x99jZ7QgkqzSa58t/1M2AdDuusIg5F8ErdvC5bP9K9S05a/Uk1uXLyzN26C02QgF8Z12A7DR/+YHXU0N70N/dEBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQQeRs3rGcbjaFiOqG1/mJJXR+oTt3FrQCR9iSfyXjYz9jHsdHcp+vNVgE92Su4BkbCXAFod3PZrjr215KkcliIL88U7pJ4LEbSwSwSFjuJ8tOvI7BasvTGNkZGwMmZG2MQvYyVwErASeL+/wBXcnz9z90HgOpXPsujjoSmMzyVo5S9unyNaXa15AIae/3UezrZlfHUJb9doszVW25WMla0Bh92hx24nR00d+35KxNxFRpYQx30WHWh9X++4EH9NOPZabOmKMcUEcT7cYhj9EFlhzSY97DCQdkD2+yI8h1IX2jFHQlMRsOqsmL2gOkDC4DXnR1rf3WVPKZK50czIw1Y/wCISVxKyIHbXOI327/6b/Vb4w9QOaQ12xZNsfUf7hBG/wAtHwvkOGqRYg4wCU1NFoaZDto9gHeRr2+yKhKfUL69S1JasMsujfG3hNH8nJGXb/rDyBrt2I3vv50sndYxmqLEFCeaFsHzErmvZ9DQ9zDrv9R20+PIW8emaTtvkltyWC9rxYdOTI3iHBoB9gA53b8Ss4um8dFUlrNZJ6csRhduQklpe5/k997ce6qNU9Sy+u2qMZObxnMHo+ozQIjEm+W9a4n91qP6uZFJLZla5tf0Ig2F5a0tmdLIxwLj2GizzvXbakcl05DcyENpk00DhMZpHRvLXF3piMaI8dgFn/s1jRB6TY5GgMYwOEh5AtcXhwPnlycTv32g0D1lXNetIyuSZXSMO5mNYHMIBAeTxcTsEDfcfZTGXtSwmjFXPGWzYazegdNALnf/AJWkfqtex07Us1G15prj49Oa8Gw8+oHeQ7v3/wDh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oJNERAREQEREBERAREQEREBERAREQEREBERBE5enkZLcVnGWKrHCN0T2WIeYIJB2CCCCNeN6K8D0+G9KQ4aKf+22Meq5vni4OPb8dfop1EFT/wBkeNm1I21tjp45K7CztAwSiV7R/wAzt/6fZav+xtp9715rsDy319SGNxleJGOaORLiPp5DsAB2V2RLFdlwl2CTH2MZagZar1Pk3+tEXse36TsAEEEFv+q+T9PTz1sxHNcbJLkKscBkMetOa1wLiB9970rGiCI6jx97IYsVMfbjrFxAlc9pPNnu0aII39x7bWk7DZFrcfPXmoRXaQfExjIXNhMTgBx1y2COIO9+ysiIK+zp5zcHWomyHTMtMtyylmubxL6ju3ts7A+y0r/Sj72YNiw6i6B07ZjJ8sBY00giPkDrWwO+t67K2ogwmiZNC+KVodG9pa5p8EHyEgiZBDHFC0MjY0Na0eAB4CzRLEfFjzHnbOQ9QFs1eOHhruOLnne//a/0Ue/p97nSH5hv1ZNt/wDp9gG/T+f0+VYEQVO70nJYN0i0xvzAtgfR/T6zWNHv7cf9VMwYx0Wb+f8AUBb8o2tw17hxO9/qpNEBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERBAZvP2KOZr4yhipchZlgfYPCZkYa1rmtPdxHu4L2l6lxdN0EGWu1MfekawuqzWGcmF3gedHv234UD1ngLGR6lo324eDK1YqkkDopLXolr3PaQ7x37NP7rWyfSty9Q6gbHSrwG9jatWCEyB4Y6PntpdrwOTe/uiLTH1Ng5MfNejy1F1OF3CSYTN4tcfAJ35Oxr7rWu9TVhWr2cbLRuVpop5Gy/NtY0+m3eh2O+/Yn/d8lQWb6ZyT+pZstRgrTMisVbEdd8nATenHLG4b0dEeo0gn3aFBXMJkJcq6rJDFHkMi3I2jWicXMriSBsTOT9AbLm7J+5KDo9nJuhgxknCDdyVkZDpw0N5NLvpOvrPbwNb8rLG5vF5SeaDHZCramh/uMhlDi3vrf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"}},"total-blocking-time":{"id":"total-blocking-time","title":"Total Blocking Time","description":"Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. [Learn more](https://web.dev/lighthouse-total-blocking-time/).","score":1,"scoreDisplayMode":"numeric","numericValue":5.5,"numericUnit":"millisecond","displayValue":"10 ms"},"max-potential-fid":{"id":"max-potential-fid","title":"Max Potential First Input Delay","description":"The maximum potential First Input Delay that your users could experience is the duration of the longest task. [Learn more](https://web.dev/lighthouse-max-potential-fid/).","score":1,"scoreDisplayMode":"numeric","numericValue":61,"numericUnit":"millisecond","displayValue":"60 ms"},"cumulative-layout-shift":{"id":"cumulative-layout-shift","title":"Cumulative Layout Shift","description":"Cumulative Layout Shift measures the movement of visible elements within the viewport. [Learn more](https://web.dev/cls/).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"unitless","displayValue":"0","details":{"type":"debugdata","items":[{"cumulativeLayoutShiftMainFrame":0,"totalCumulativeLayoutShift":0}]}},"errors-in-console":{"id":"errors-in-console","title":"No browser errors logged to the console","description":"Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. [Learn more](https://web.dev/errors-in-console/)","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"server-response-time":{"id":"server-response-time","title":"Initial server response time was short","description":"Keep the server response time for the main document short because all other requests depend on it. [Learn more](https://web.dev/time-to-first-byte/).","score":1,"scoreDisplayMode":"binary","numericValue":0.26200000000000045,"numericUnit":"millisecond","displayValue":"Root document took 0 ms","details":{"type":"opportunity","headings":[{"key":"url","valueType":"url","label":"URL"},{"key":"responseTime","valueType":"timespanMs","label":"Time Spent"}],"items":[{"url":"http://localhost:8008/congo/samples/emoji/","responseTime":0.26200000000000045}],"overallSavingsMs":-99.738}},"interactive":{"id":"interactive","title":"Time to Interactive","description":"Time to interactive is the amount of time it takes for the page to become fully interactive. [Learn more](https://web.dev/interactive/).","score":1,"scoreDisplayMode":"numeric","numericValue":1399.5,"numericUnit":"millisecond","displayValue":"1.4 s"},"user-timings":{"id":"user-timings","title":"User Timing marks and measures","description":"Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. [Learn more](https://web.dev/user-timings/).","score":null,"scoreDisplayMode":"notApplicable","details":{"type":"table","headings":[],"items":[]}},"critical-request-chains":{"id":"critical-request-chains","title":"Avoid chaining critical requests","description":"The Critical Request Chains below show you what resources are loaded with a high priority. Consider reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load. [Learn more](https://web.dev/critical-request-chains/).","score":null,"scoreDisplayMode":"informative","displayValue":"1 chain found","details":{"type":"criticalrequestchain","chains":{"DE50D68EAF490F7A244788310349E2FA":{"request":{"url":"http://localhost:8008/congo/samples/emoji/","startTime":501413.957967,"endTime":501413.971203,"responseReceivedTime":501413.970738,"transferSize":17411},"children":{"97903.2":{"request":{"url":"http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css","startTime":501413.975495,"endTime":501413.97638,"responseReceivedTime":501413.975877,"transferSize":40665}}}}},"longestChain":{"duration":18.412999983411282,"length":2,"transferSize":40665}}},"redirects":{"id":"redirects","title":"Avoid multiple page redirects","description":"Redirects introduce additional delays before the page can be loaded. [Learn more](https://web.dev/redirects/).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0}},"installable-manifest":{"id":"installable-manifest","title":"Web app manifest and service worker meet the installability requirements","description":"Service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. With proper service worker and manifest implementations, browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. [Learn more](https://web.dev/installable-manifest/).","score":1,"scoreDisplayMode":"binary","warnings":[],"details":{"type":"table","headings":[],"items":[],"debugData":{"type":"debugdata","manifestUrl":"http://localhost:8008/congo/site.webmanifest"}}},"apple-touch-icon":{"id":"apple-touch-icon","title":"Provides a valid `apple-touch-icon`","description":"For ideal appearance on iOS when users add a progressive web app to the home screen, define an `apple-touch-icon`. It must point to a non-transparent 192px (or 180px) square PNG. [Learn More](https://web.dev/apple-touch-icon/).","score":1,"scoreDisplayMode":"binary","warnings":[]},"splash-screen":{"id":"splash-screen","title":"Configured for a custom splash screen","description":"A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. [Learn more](https://web.dev/splash-screen/).","score":1,"scoreDisplayMode":"binary","details":{"type":"debugdata","items":[{"failures":[],"isParseFailure":false,"hasStartUrl":true,"hasIconsAtLeast144px":true,"hasIconsAtLeast512px":true,"fetchesIcon":true,"hasPWADisplayValue":true,"hasBackgroundColor":true,"hasThemeColor":true,"hasShortName":true,"shortNameLength":true,"hasName":true,"hasMaskableIcon":true}]}},"themed-omnibox":{"id":"themed-omnibox","title":"Does not set a theme color for the address bar.","description":"The browser address bar can be themed to match your site. [Learn more](https://web.dev/themed-omnibox/).","score":0,"scoreDisplayMode":"binary","explanation":"Failures: No `\u003cmeta name=\"theme-color\">` tag found.","details":{"type":"debugdata","items":[{"failures":["No `\u003cmeta name=\"theme-color\">` tag found"],"themeColor":null,"isParseFailure":false,"hasStartUrl":true,"hasIconsAtLeast144px":true,"hasIconsAtLeast512px":true,"fetchesIcon":true,"hasPWADisplayValue":true,"hasBackgroundColor":true,"hasThemeColor":true,"hasShortName":true,"shortNameLength":true,"hasName":true,"hasMaskableIcon":true}]}},"maskable-icon":{"id":"maskable-icon","title":"Manifest has a maskable icon","description":"A maskable icon ensures that the image fills the entire shape without being letterboxed when installing the app on a device. [Learn more](https://web.dev/maskable-icon-audit/).","score":1,"scoreDisplayMode":"binary"},"content-width":{"id":"content-width","title":"Content is sized correctly for the viewport","description":"If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. [Learn more](https://web.dev/content-width/).","score":1,"scoreDisplayMode":"binary"},"image-aspect-ratio":{"id":"image-aspect-ratio","title":"Displays images with correct aspect ratio","description":"Image display dimensions should match natural aspect ratio. [Learn more](https://web.dev/image-aspect-ratio/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"image-size-responsive":{"id":"image-size-responsive","title":"Serves images with appropriate resolution","description":"Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. [Learn more](https://web.dev/serve-responsive-images/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"preload-fonts":{"id":"preload-fonts","title":"Fonts with `font-display: optional` are preloaded","description":"Preload `optional` fonts so first-time visitors may use them. [Learn more](https://web.dev/preload-optional-fonts/)","score":null,"scoreDisplayMode":"notApplicable","details":{"type":"table","headings":[],"items":[]}},"deprecations":{"id":"deprecations","title":"Avoids deprecated APIs","description":"Deprecated APIs will eventually be removed from the browser. [Learn more](https://web.dev/deprecations/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"mainthread-work-breakdown":{"id":"mainthread-work-breakdown","title":"Minimizes main-thread work","description":"Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn more](https://web.dev/mainthread-work-breakdown/)","score":0.97,"scoreDisplayMode":"numeric","numericValue":1452.7759999999998,"numericUnit":"millisecond","displayValue":"1.5 s","details":{"type":"table","headings":[{"key":"groupLabel","itemType":"text","text":"Category"},{"key":"duration","itemType":"ms","granularity":1,"text":"Time Spent"}],"items":[{"group":"styleLayout","groupLabel":"Style & Layout","duration":1116.8159999999998},{"group":"paintCompositeRender","groupLabel":"Rendering","duration":251.596},{"group":"other","groupLabel":"Other","duration":53.139999999999986},{"group":"scriptEvaluation","groupLabel":"Script Evaluation","duration":20.151999999999997},{"group":"parseHTML","groupLabel":"Parse HTML & CSS","duration":8.315999999999999},{"group":"scriptParseCompile","groupLabel":"Script Parsing & Compilation","duration":2.7560000000000002}]}},"bootup-time":{"id":"bootup-time","title":"JavaScript execution time","description":"Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. [Learn more](https://web.dev/bootup-time/).","score":1,"scoreDisplayMode":"numeric","numericValue":5.332000000000001,"numericUnit":"millisecond","displayValue":"0.0 s","details":{"type":"table","headings":[{"key":"url","itemType":"url","text":"URL"},{"key":"total","granularity":1,"itemType":"ms","text":"Total CPU Time"},{"key":"scripting","granularity":1,"itemType":"ms","text":"Script Evaluation"},{"key":"scriptParseCompile","granularity":1,"itemType":"ms","text":"Script Parse"}],"items":[{"url":"http://localhost:8008/congo/samples/emoji/","total":1411.2879999999998,"scripting":4.244000000000001,"scriptParseCompile":1.0879999999999999}],"summary":{"wastedMs":5.332000000000001}}},"uses-rel-preload":{"id":"uses-rel-preload","title":"Preload key requests","description":"Consider using `\u003clink rel=preload>` to prioritize fetching resources that are currently requested later in page load. [Learn more](https://web.dev/uses-rel-preload/).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0}},"uses-rel-preconnect":{"id":"uses-rel-preconnect","title":"Preconnect to required origins","description":"Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn more](https://web.dev/uses-rel-preconnect/).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","warnings":[],"details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0}},"font-display":{"id":"font-display","title":"All text remains visible during webfont loads","description":"Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. [Learn more](https://web.dev/font-display/).","score":1,"scoreDisplayMode":"binary","warnings":[],"details":{"type":"table","headings":[],"items":[]}},"diagnostics":{"id":"diagnostics","title":"Diagnostics","description":"Collection of useful page vitals.","score":null,"scoreDisplayMode":"informative","details":{"type":"debugdata","items":[{"numRequests":4,"numScripts":1,"numStylesheets":1,"numFonts":0,"numTasks":139,"numTasksOver10ms":3,"numTasksOver25ms":1,"numTasksOver50ms":1,"numTasksOver100ms":1,"numTasksOver500ms":0,"rtt":0.25600000000000006,"throughput":411406043.94101745,"maxRtt":0.25600000000000006,"maxServerLatency":0,"totalByteWeight":93852,"totalTaskTime":363.19399999999985,"mainDocumentTransferSize":17411}]}},"network-requests":{"id":"network-requests","title":"Network Requests","description":"Lists the network requests that were made during page load.","score":null,"scoreDisplayMode":"informative","details":{"type":"table","headings":[{"key":"url","itemType":"url","text":"URL"},{"key":"protocol","itemType":"text","text":"Protocol"},{"key":"startTime","itemType":"ms","granularity":1,"text":"Start Time"},{"key":"endTime","itemType":"ms","granularity":1,"text":"End Time"},{"key":"transferSize","itemType":"bytes","displayUnit":"kb","granularity":1,"text":"Transfer Size"},{"key":"resourceSize","itemType":"bytes","displayUnit":"kb","granularity":1,"text":"Resource Size"},{"key":"statusCode","itemType":"text","text":"Status Code"},{"key":"mimeType","itemType":"text","text":"MIME Type"},{"key":"resourceType","itemType":"text","text":"Resource Type"}],"items":[{"url":"http://localhost:8008/congo/samples/emoji/","protocol":"http/1.1","startTime":0,"endTime":13.235999969765544,"finished":true,"transferSize":17411,"resourceSize":17224,"statusCode":200,"mimeType":"text/html","resourceType":"Document"},{"url":"http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css","protocol":"http/1.1","startTime":17.527999996673316,"endTime":18.412999983411282,"finished":true,"transferSize":40665,"resourceSize":40479,"statusCode":200,"mimeType":"text/css","resourceType":"Stylesheet"},{"url":"http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js","protocol":"http/1.1","startTime":17.801999987568706,"endTime":19.169999985024333,"finished":true,"transferSize":27861,"resourceSize":27661,"statusCode":200,"mimeType":"application/javascript","resourceType":"Script"},{"url":"http://localhost:8008/congo/author_hu052d24d60828c1cca42a6aefe45b8b44_54195_192x192_fill_q75_box_smart1.jpg","protocol":"http/1.1","startTime":18.84299999801442,"endTime":19.597999984398484,"finished":true,"transferSize":7915,"resourceSize":7728,"statusCode":200,"mimeType":"image/jpeg","resourceType":"Image"}]}},"network-rtt":{"id":"network-rtt","title":"Network Round Trip Times","description":"Network round trip times (RTT) have a large impact on performance. If the RTT to an origin is high, it's an indication that servers closer to the user could improve performance. [Learn more](https://hpbn.co/primer-on-latency-and-bandwidth/).","score":null,"scoreDisplayMode":"informative","numericValue":0.25600000000000006,"numericUnit":"millisecond","displayValue":"0 ms","details":{"type":"table","headings":[{"key":"origin","itemType":"text","text":"URL"},{"key":"rtt","itemType":"ms","granularity":1,"text":"Time Spent"}],"items":[{"origin":"http://localhost:8008","rtt":0.25600000000000006}]}},"network-server-latency":{"id":"network-server-latency","title":"Server Backend Latencies","description":"Server latencies can impact web performance. If the server latency of an origin is high, it's an indication the server is overloaded or has poor backend performance. [Learn more](https://hpbn.co/primer-on-web-performance/#analyzing-the-resource-waterfall).","score":null,"scoreDisplayMode":"informative","numericValue":0,"numericUnit":"millisecond","displayValue":"0 ms","details":{"type":"table","headings":[{"key":"origin","itemType":"text","text":"URL"},{"key":"serverResponseTime","itemType":"ms","granularity":1,"text":"Time Spent"}],"items":[{"origin":"http://localhost:8008","serverResponseTime":0}]}},"main-thread-tasks":{"id":"main-thread-tasks","title":"Tasks","description":"Lists the toplevel main thread tasks that executed during page load.","score":null,"scoreDisplayMode":"informative","details":{"type":"table","headings":[{"key":"startTime","itemType":"ms","granularity":1,"text":"Start Time"},{"key":"duration","itemType":"ms","granularity":1,"text":"End Time"}],"items":[{"duration":292.039,"startTime":24.671},{"duration":6.955,"startTime":317.018},{"duration":15.321,"startTime":323.98},{"duration":12.029,"startTime":339.375},{"duration":6.077,"startTime":355.071},{"duration":5.014,"startTime":389.035}]}},"metrics":{"id":"metrics","title":"Metrics","description":"Collects all available metrics.","score":null,"scoreDisplayMode":"informative","numericValue":1400,"numericUnit":"millisecond","details":{"type":"debugdata","items":[{"firstContentfulPaint":1369,"firstMeaningfulPaint":1369,"largestContentfulPaint":1500,"interactive":1400,"speedIndex":1369,"totalBlockingTime":6,"maxPotentialFID":61,"cumulativeLayoutShift":0,"cumulativeLayoutShiftMainFrame":0,"totalCumulativeLayoutShift":0,"observedTimeOrigin":0,"observedTimeOriginTs":501413957034,"observedNavigationStart":0,"observedNavigationStartTs":501413957034,"observedFirstPaint":346,"observedFirstPaintTs":501414302633,"observedFirstContentfulPaint":346,"observedFirstContentfulPaintTs":501414302633,"observedFirstContentfulPaintAllFrames":346,"observedFirstContentfulPaintAllFramesTs":501414302633,"observedFirstMeaningfulPaint":346,"observedFirstMeaningfulPaintTs":501414302633,"observedLargestContentfulPaint":346,"observedLargestContentfulPaintTs":501414302633,"observedLargestContentfulPaintAllFrames":346,"observedLargestContentfulPaintAllFramesTs":501414302633,"observedTraceEnd":2666,"observedTraceEndTs":501416623509,"observedLoad":322,"observedLoadTs":501414278644,"observedDomContentLoaded":317,"observedDomContentLoadedTs":501414274446,"observedCumulativeLayoutShift":0,"observedCumulativeLayoutShiftMainFrame":0,"observedTotalCumulativeLayoutShift":0,"observedFirstVisualChange":352,"observedFirstVisualChangeTs":501414309034,"observedLastVisualChange":718,"observedLastVisualChangeTs":501414675034,"observedSpeedIndex":374,"observedSpeedIndexTs":501414330958},{"lcpInvalidated":false}]}},"performance-budget":{"id":"performance-budget","title":"Performance budget","description":"Keep the quantity and size of network requests under the targets set by the provided performance budget. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/budgets).","score":null,"scoreDisplayMode":"notApplicable"},"timing-budget":{"id":"timing-budget","title":"Timing budget","description":"Set a timing budget to help you keep an eye on the performance of your site. Performant sites load fast and respond to user input events quickly. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/budgets).","score":null,"scoreDisplayMode":"notApplicable"},"resource-summary":{"id":"resource-summary","title":"Keep request counts low and transfer sizes small","description":"To set budgets for the quantity and size of page resources, add a budget.json file. [Learn more](https://web.dev/use-lighthouse-for-performance-budgets/).","score":null,"scoreDisplayMode":"informative","displayValue":"4 requests • 92 KiB","details":{"type":"table","headings":[{"key":"label","itemType":"text","text":"Resource Type"},{"key":"requestCount","itemType":"numeric","text":"Requests"},{"key":"transferSize","itemType":"bytes","text":"Transfer Size"}],"items":[{"resourceType":"total","label":"Total","requestCount":4,"transferSize":93852},{"resourceType":"stylesheet","label":"Stylesheet","requestCount":1,"transferSize":40665},{"resourceType":"script","label":"Script","requestCount":1,"transferSize":27861},{"resourceType":"document","label":"Document","requestCount":1,"transferSize":17411},{"resourceType":"image","label":"Image","requestCount":1,"transferSize":7915},{"resourceType":"media","label":"Media","requestCount":0,"transferSize":0},{"resourceType":"font","label":"Font","requestCount":0,"transferSize":0},{"resourceType":"other","label":"Other","requestCount":0,"transferSize":0},{"resourceType":"third-party","label":"Third-party","requestCount":0,"transferSize":0}]}},"third-party-summary":{"id":"third-party-summary","title":"Minimize third-party usage","description":"Third-party code can significantly impact load performance. Limit the number of redundant third-party providers and try to load third-party code after your page has primarily finished loading. [Learn more](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/loading-third-party-javascript/).","score":null,"scoreDisplayMode":"notApplicable"},"third-party-facades":{"id":"third-party-facades","title":"Lazy load third-party resources with facades","description":"Some third-party embeds can be lazy loaded. Consider replacing them with a facade until they are required. [Learn more](https://web.dev/third-party-facades/).","score":null,"scoreDisplayMode":"notApplicable"},"largest-contentful-paint-element":{"id":"largest-contentful-paint-element","title":"Largest Contentful Paint element","description":"This is the largest contentful element painted within the viewport. [Learn More](https://web.dev/lighthouse-largest-contentful-paint/)","score":null,"scoreDisplayMode":"informative","displayValue":"1 element found","details":{"type":"table","headings":[{"key":"node","itemType":"node","text":"Element"}],"items":[{"node":{"type":"node","lhId":"page-1-SPAN","path":"1,HTML,1,BODY,2,MAIN,0,ARTICLE,1,SECTION,0,DIV,1,DIV,1,SPAN","selector":"section.flex > div.min-w-0 > div.flex > span.dark:text-neutral-300","boundingRect":{"top":335,"bottom":475,"left":68,"right":320,"width":252,"height":140},"snippet":"\u003cspan class=\"dark:text-neutral-300\">","nodeLabel":"Note: The rendering of these glyphs depends on the browser and the platform. To…"}}]}},"layout-shift-elements":{"id":"layout-shift-elements","title":"Avoid large layout shifts","description":"These DOM elements contribute most to the CLS of the page.","score":null,"scoreDisplayMode":"notApplicable","details":{"type":"table","headings":[],"items":[]}},"long-tasks":{"id":"long-tasks","title":"Avoid long main-thread tasks","description":"Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. [Learn more](https://web.dev/long-tasks-devtools/)","score":null,"scoreDisplayMode":"informative","displayValue":"2 long tasks found","details":{"type":"table","headings":[{"key":"url","itemType":"url","text":"URL"},{"key":"startTime","itemType":"ms","granularity":1,"text":"Start Time"},{"key":"duration","itemType":"ms","granularity":1,"text":"Duration"}],"items":[{"url":"http://localhost:8008/congo/samples/emoji/","duration":584,"startTime":785},{"url":"http://localhost:8008/congo/samples/emoji/","duration":61,"startTime":1369}]}},"no-unload-listeners":{"id":"no-unload-listeners","title":"Avoids `unload` event listeners","description":"The `unload` event does not fire reliably and listening for it can prevent browser optimizations like the Back-Forward Cache. Consider using the `pagehide` or `visibilitychange` events instead. [Learn more](https://developers.google.com/web/updates/2018/07/page-lifecycle-api#the-unload-event)","score":1,"scoreDisplayMode":"binary"},"non-composited-animations":{"id":"non-composited-animations","title":"Avoid non-composited animations","description":"Animations which are not composited can be janky and increase CLS. [Learn more](https://web.dev/non-composited-animations)","score":null,"scoreDisplayMode":"informative","displayValue":"18 animated elements found","details":{"type":"table","headings":[{"key":"node","itemType":"node","subItemsHeading":{"key":"failureReason","itemType":"text"},"text":"Element"},{"key":null,"itemType":"text","subItemsHeading":{"key":"animation","itemType":"text"},"text":"Name"}],"items":[{"node":{"type":"node","lhId":"page-2-A","path":"1,HTML,1,BODY,0,DIV,0,A","selector":"body.flex > div#the-top > a.px-3","boundingRect":{"top":-201,"bottom":-173,"left":92,"right":268,"width":176,"height":28},"snippet":"\u003ca class=\"px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 dark:bg-neutr…\" href=\"#main-content\">","nodeLabel":"↓Skip to main content"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: background-color","animation":"background-color"},{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-3-A","path":"1,HTML,1,BODY,1,HEADER,0,DIV,0,A","selector":"body.flex > header.flex > div > a.hover:underline","boundingRect":{"top":-142,"bottom":-121,"left":24,"right":79,"width":55,"height":21},"snippet":"\u003ca class=\"hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…\" rel=\"me\" href=\"/congo/\">","nodeLabel":"Congo"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-4-A","path":"1,HTML,1,BODY,1,HEADER,1,NAV,0,UL,0,LI,0,A","selector":"nav > ul.flex > li.mb-1 > a.hover:underline","boundingRect":{"top":-142,"bottom":-121,"left":293,"right":336,"width":43,"height":21},"snippet":"\u003ca class=\"hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…\" href=\"/congo/docs/\">","nodeLabel":"Docs"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-5-A","path":"1,HTML,1,BODY,1,HEADER,1,NAV,0,UL,1,LI,0,A","selector":"nav > ul.flex > li.mb-1 > a.hover:underline","boundingRect":{"top":-108,"bottom":-87,"left":264,"right":336,"width":72,"height":21},"snippet":"\u003ca class=\"hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…\" href=\"/congo/samples/\">","nodeLabel":"Samples"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-6-A","path":"1,HTML,1,BODY,1,HEADER,1,NAV,0,UL,2,LI,0,A","selector":"nav > ul.flex > li.mb-1 > a.hover:underline","boundingRect":{"top":-76,"bottom":-55,"left":287,"right":336,"width":49,"height":21},"snippet":"\u003ca class=\"hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…\" href=\"/congo/users/\">","nodeLabel":"Users"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-7-A","path":"1,HTML,1,BODY,1,HEADER,1,NAV,0,UL,3,LI,0,A","selector":"nav > ul.flex > li.mb-1 > a.hover:underline","boundingRect":{"top":-44,"bottom":-23,"left":277,"right":336,"width":59,"height":21},"snippet":"\u003ca class=\"hover:underline hover:decoration-primary-500 hover:decoration-2 hover:unde…\" href=\"https://github.com/jpanther/congo\">","nodeLabel":"GitHub"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-8-BUTTON","path":"1,HTML,1,BODY,1,HEADER,1,NAV,0,UL,4,LI,0,BUTTON","selector":"nav > ul.flex > li.ltr:text-right > button#search-button","boundingRect":{"top":-13,"bottom":11,"left":320,"right":336,"width":16,"height":24},"snippet":"\u003cbutton id=\"search-button\" class=\"text-base hover:text-primary-600 dark:hover:text-primary-400\">","nodeLabel":"button"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-9-A","path":"1,HTML,1,BODY,2,MAIN,0,ARTICLE,0,HEADER,0,OL,1,LI,0,A","selector":"header.max-w-prose > ol.text-sm > li.inline > a.hover:underline","boundingRect":{"top":38,"bottom":55,"left":24,"right":135,"width":111,"height":17},"snippet":"\u003ca class=\"hover:underline hover:decoration-neutral-300 dark:underline-neutral-600\" href=\"/congo/samples/\">","nodeLabel":"Content Samples"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-10-A","path":"1,HTML,1,BODY,2,MAIN,0,ARTICLE,1,SECTION,0,DIV,2,P,3,A","selector":"section.flex > div.min-w-0 > p > a","boundingRect":{"top":542,"bottom":588,"left":24,"right":300,"width":276,"height":46},"snippet":"\u003ca href=\"http://localhost:8008/congo/docs/configuration/#site-configuration\">","nodeLabel":"site configuration"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"},{"failureReason":"Unsupported CSS Property: text-decoration-color","animation":"text-decoration-color"}]}},{"node":{"type":"node","lhId":"page-11-A","path":"1,HTML,1,BODY,2,MAIN,0,ARTICLE,1,SECTION,0,DIV,4,P,1,A","selector":"section.flex > div.min-w-0 > p > a","boundingRect":{"top":750,"bottom":768,"left":56,"right":188,"width":132,"height":18},"snippet":"\u003ca href=\"http://www.emoji-cheat-sheet.com/\">","nodeLabel":"Emoji cheat sheet"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"},{"failureReason":"Unsupported CSS Property: text-decoration-color","animation":"text-decoration-color"}]}},{"node":{"type":"node","lhId":"page-12-A","path":"1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,0,DIV,1,DIV,3,DIV,0,DIV,0,A","selector":"div.place-self-center > div.text-2xl > div.flex > a.px-1","boundingRect":{"top":989,"bottom":1021,"left":136,"right":168,"width":32,"height":32},"snippet":"\u003ca class=\"px-1 hover:text-primary-700 dark:hover:text-primary-400\" href=\"https://twitter.com/\" target=\"_blank\" aria-label=\"Twitter\" rel=\"me noopener noreferrer\">","nodeLabel":"Twitter"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-13-A","path":"1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,0,DIV,1,DIV,3,DIV,0,DIV,1,A","selector":"div.place-self-center > div.text-2xl > div.flex > a.px-1","boundingRect":{"top":989,"bottom":1021,"left":168,"right":200,"width":32,"height":32},"snippet":"\u003ca class=\"px-1 hover:text-primary-700 dark:hover:text-primary-400\" href=\"https://facebook.com/\" target=\"_blank\" aria-label=\"Facebook\" rel=\"me noopener noreferrer\">","nodeLabel":"Facebook"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-14-A","path":"1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,0,DIV,1,DIV,3,DIV,0,DIV,2,A","selector":"div.place-self-center > div.text-2xl > div.flex > a.px-1","boundingRect":{"top":989,"bottom":1021,"left":200,"right":232,"width":32,"height":32},"snippet":"\u003ca class=\"px-1 hover:text-primary-700 dark:hover:text-primary-400\" href=\"https://linkedin.com/\" target=\"_blank\" aria-label=\"Linkedin\" rel=\"me noopener noreferrer\">","nodeLabel":"Linkedin"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-15-A","path":"1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,0,DIV,1,DIV,3,DIV,0,DIV,3,A","selector":"div.place-self-center > div.text-2xl > div.flex > a.px-1","boundingRect":{"top":989,"bottom":1021,"left":232,"right":264,"width":32,"height":32},"snippet":"\u003ca class=\"px-1 hover:text-primary-700 dark:hover:text-primary-400\" href=\"https://youtube.com/\" target=\"_blank\" aria-label=\"Youtube\" rel=\"me noopener noreferrer\">","nodeLabel":"Youtube"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-16-A","path":"1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,1,DIV,1,DIV,0,SPAN,0,A","selector":"div.pt-8 > div.flex > span > a.flex","boundingRect":{"top":1068,"bottom":1111,"left":24,"right":255,"width":231,"height":43},"snippet":"\u003ca class=\"flex\" href=\"/congo/samples/diagrams-flowcharts/\">","nodeLabel":"←\nDiagrams and Flowcharts\n6 March 2019"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-17-BUTTON","path":"1,HTML,1,BODY,3,DIV,0,DIV,0,HEADER,1,BUTTON","selector":"div#search-wrapper > div#search-modal > header.relative > button#close-search-button","boundingRect":{"top":25,"bottom":57,"left":303,"right":335,"width":32,"height":32},"snippet":"\u003cbutton id=\"close-search-button\" class=\"flex items-center justify-center w-8 h-8 text-neutral-700 dark:text-neutra…\">","nodeLabel":"button"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-18-A","path":"1,HTML,1,BODY,4,FOOTER,0,DIV,0,DIV,1,P,1,A","selector":"div.flex > div > p.text-xs > a.hover:underline","boundingRect":{"top":1171,"bottom":1186,"left":93,"right":124,"width":30,"height":15},"snippet":"\u003ca class=\"hover:underline hover:decoration-primary-400 hover:text-primary-500\" href=\"https://gohugo.io/\" target=\"_blank\" rel=\"noopener noreferrer\">","nodeLabel":"Hugo"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}},{"node":{"type":"node","lhId":"page-19-A","path":"1,HTML,1,BODY,4,FOOTER,0,DIV,0,DIV,1,P,3,A","selector":"div.flex > div > p.text-xs > a.hover:underline","boundingRect":{"top":1171,"bottom":1186,"left":139,"right":176,"width":37,"height":15},"snippet":"\u003ca class=\"hover:underline hover:decoration-primary-400 hover:text-primary-500\" href=\"https://git.io/hugo-congo\" target=\"_blank\" rel=\"noopener noreferrer\">","nodeLabel":"Congo"},"subItems":{"type":"subitems","items":[{"failureReason":"Unsupported CSS Property: color","animation":"color"}]}}]}},"unsized-images":{"id":"unsized-images","title":"Image elements have explicit `width` and `height`","description":"Set an explicit width and height on image elements to reduce layout shifts and improve CLS. [Learn more](https://web.dev/optimize-cls/#images-without-dimensions)","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"valid-source-maps":{"id":"valid-source-maps","title":"Page has valid source maps","description":"Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. [Learn more](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"preload-lcp-image":{"id":"preload-lcp-image","title":"Preload Largest Contentful Paint image","description":"Preload the image used by the LCP element in order to improve your LCP time. [Learn more](https://web.dev/optimize-lcp/#preload-important-resources).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0}},"csp-xss":{"id":"csp-xss","title":"Ensure CSP is effective against XSS attacks","description":"A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. [Learn more](https://web.dev/strict-csp/)","score":null,"scoreDisplayMode":"informative","details":{"type":"table","headings":[{"key":"description","itemType":"text","subItemsHeading":{"key":"description"},"text":"Description"},{"key":"directive","itemType":"code","subItemsHeading":{"key":"directive"},"text":"Directive"},{"key":"severity","itemType":"text","subItemsHeading":{"key":"severity"},"text":"Severity"}],"items":[{"severity":"High","description":"No CSP found in enforcement mode"}]}},"script-treemap-data":{"id":"script-treemap-data","title":"Script Treemap Data","description":"Used for treemap app","score":null,"scoreDisplayMode":"informative","details":{"type":"treemap-data","nodes":[{"name":"http://localhost:8008/congo/samples/emoji/","resourceBytes":591},{"name":"http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js","resourceBytes":27661,"unusedBytes":21746}]}},"pwa-cross-browser":{"id":"pwa-cross-browser","title":"Site works cross-browser","description":"To reach the most number of users, sites should work across every major browser. [Learn more](https://web.dev/pwa-cross-browser/).","score":null,"scoreDisplayMode":"manual"},"pwa-page-transitions":{"id":"pwa-page-transitions","title":"Page transitions don't feel like they block on the network","description":"Transitions should feel snappy as you tap around, even on a slow network. This experience is key to a user's perception of performance. [Learn more](https://web.dev/pwa-page-transitions/).","score":null,"scoreDisplayMode":"manual"},"pwa-each-page-has-url":{"id":"pwa-each-page-has-url","title":"Each page has a URL","description":"Ensure individual pages are deep linkable via URL and that URLs are unique for the purpose of shareability on social media. [Learn more](https://web.dev/pwa-each-page-has-url/).","score":null,"scoreDisplayMode":"manual"},"accesskeys":{"id":"accesskeys","title":"`[accesskey]` values are unique","description":"Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more](https://web.dev/accesskeys/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-allowed-attr":{"id":"aria-allowed-attr","title":"`[aria-*]` attributes match their roles","description":"Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn more](https://web.dev/aria-allowed-attr/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"aria-command-name":{"id":"aria-command-name","title":"`button`, `link`, and `menuitem` elements have accessible names","description":"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-hidden-body":{"id":"aria-hidden-body","title":"`[aria-hidden=\"true\"]` is not present on the document `\u003cbody>`","description":"Assistive technologies, like screen readers, work inconsistently when `aria-hidden=\"true\"` is set on the document `\u003cbody>`. [Learn more](https://web.dev/aria-hidden-body/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"aria-hidden-focus":{"id":"aria-hidden-focus","title":"`[aria-hidden=\"true\"]` elements do not contain focusable descendents","description":"Focusable descendents within an `[aria-hidden=\"true\"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn more](https://web.dev/aria-hidden-focus/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"aria-input-field-name":{"id":"aria-input-field-name","title":"ARIA input fields have accessible names","description":"When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-meter-name":{"id":"aria-meter-name","title":"ARIA `meter` elements have accessible names","description":"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-progressbar-name":{"id":"aria-progressbar-name","title":"ARIA `progressbar` elements have accessible names","description":"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-required-attr":{"id":"aria-required-attr","title":"`[role]`s have all required `[aria-*]` attributes","description":"Some ARIA roles have required attributes that describe the state of the element to screen readers. [Learn more](https://web.dev/aria-required-attr/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-required-children":{"id":"aria-required-children","title":"Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.","description":"Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. [Learn more](https://web.dev/aria-required-children/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-required-parent":{"id":"aria-required-parent","title":"`[role]`s are contained by their required parent element","description":"Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. [Learn more](https://web.dev/aria-required-parent/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-roles":{"id":"aria-roles","title":"`[role]` values are valid","description":"ARIA roles must have valid values in order to perform their intended accessibility functions. [Learn more](https://web.dev/aria-roles/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-toggle-field-name":{"id":"aria-toggle-field-name","title":"ARIA toggle fields have accessible names","description":"When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-tooltip-name":{"id":"aria-tooltip-name","title":"ARIA `tooltip` elements have accessible names","description":"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-treeitem-name":{"id":"aria-treeitem-name","title":"ARIA `treeitem` elements have accessible names","description":"When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-name/).","score":null,"scoreDisplayMode":"notApplicable"},"aria-valid-attr-value":{"id":"aria-valid-attr-value","title":"`[aria-*]` attributes have valid values","description":"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. [Learn more](https://web.dev/aria-valid-attr-value/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"aria-valid-attr":{"id":"aria-valid-attr","title":"`[aria-*]` attributes are valid and not misspelled","description":"Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. [Learn more](https://web.dev/aria-valid-attr/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"button-name":{"id":"button-name","title":"Buttons have an accessible name","description":"When a button doesn't have an accessible name, screen readers announce it as \"button\", making it unusable for users who rely on screen readers. [Learn more](https://web.dev/button-name/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"bypass":{"id":"bypass","title":"The page contains a heading, skip link, or landmark region","description":"Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. [Learn more](https://web.dev/bypass/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"color-contrast":{"id":"color-contrast","title":"Background and foreground colors have a sufficient contrast ratio","description":"Low-contrast text is difficult or impossible for many users to read. [Learn more](https://web.dev/color-contrast/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"definition-list":{"id":"definition-list","title":"`\u003cdl>`'s contain only properly-ordered `\u003cdt>` and `\u003cdd>` groups, `\u003cscript>`, `\u003ctemplate>` or `\u003cdiv>` elements.","description":"When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn more](https://web.dev/definition-list/).","score":null,"scoreDisplayMode":"notApplicable"},"dlitem":{"id":"dlitem","title":"Definition list items are wrapped in `\u003cdl>` elements","description":"Definition list items (`\u003cdt>` and `\u003cdd>`) must be wrapped in a parent `\u003cdl>` element to ensure that screen readers can properly announce them. [Learn more](https://web.dev/dlitem/).","score":null,"scoreDisplayMode":"notApplicable"},"document-title":{"id":"document-title","title":"Document has a `\u003ctitle>` element","description":"The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. [Learn more](https://web.dev/document-title/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"duplicate-id-active":{"id":"duplicate-id-active","title":"`[id]` attributes on active, focusable elements are unique","description":"All focusable elements must have a unique `id` to ensure that they're visible to assistive technologies. [Learn more](https://web.dev/duplicate-id-active/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"duplicate-id-aria":{"id":"duplicate-id-aria","title":"ARIA IDs are unique","description":"The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. [Learn more](https://web.dev/duplicate-id-aria/).","score":null,"scoreDisplayMode":"notApplicable"},"form-field-multiple-labels":{"id":"form-field-multiple-labels","title":"No form fields have multiple labels","description":"Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. [Learn more](https://web.dev/form-field-multiple-labels/).","score":null,"scoreDisplayMode":"notApplicable"},"frame-title":{"id":"frame-title","title":"`\u003cframe>` or `\u003ciframe>` elements have a title","description":"Screen reader users rely on frame titles to describe the contents of frames. [Learn more](https://web.dev/frame-title/).","score":null,"scoreDisplayMode":"notApplicable"},"heading-order":{"id":"heading-order","title":"Heading elements appear in a sequentially-descending order","description":"Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. [Learn more](https://web.dev/heading-order/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"html-has-lang":{"id":"html-has-lang","title":"`\u003chtml>` element has a `[lang]` attribute","description":"If a page doesn't specify a lang attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. [Learn more](https://web.dev/html-has-lang/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"html-lang-valid":{"id":"html-lang-valid","title":"`\u003chtml>` element has a valid value for its `[lang]` attribute","description":"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) helps screen readers announce text properly. [Learn more](https://web.dev/html-lang-valid/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"image-alt":{"id":"image-alt","title":"Image elements have `[alt]` attributes","description":"Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. [Learn more](https://web.dev/image-alt/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"input-image-alt":{"id":"input-image-alt","title":"`\u003cinput type=\"image\">` elements have `[alt]` text","description":"When an image is being used as an `\u003cinput>` button, providing alternative text can help screen reader users understand the purpose of the button. [Learn more](https://web.dev/input-image-alt/).","score":null,"scoreDisplayMode":"notApplicable"},"label":{"id":"label","title":"Form elements have associated labels","description":"Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more](https://web.dev/label/).","score":null,"scoreDisplayMode":"notApplicable"},"link-name":{"id":"link-name","title":"Links have a discernible name","description":"Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. [Learn more](https://web.dev/link-name/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"list":{"id":"list","title":"Lists contain only `\u003cli>` elements and script supporting elements (`\u003cscript>` and `\u003ctemplate>`).","description":"Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. [Learn more](https://web.dev/list/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"listitem":{"id":"listitem","title":"List items (`\u003cli>`) are contained within `\u003cul>` or `\u003col>` parent elements","description":"Screen readers require list items (`\u003cli>`) to be contained within a parent `\u003cul>` or `\u003col>` to be announced properly. [Learn more](https://web.dev/listitem/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"meta-refresh":{"id":"meta-refresh","title":"The document does not use `\u003cmeta http-equiv=\"refresh\">`","description":"Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. [Learn more](https://web.dev/meta-refresh/).","score":null,"scoreDisplayMode":"notApplicable"},"meta-viewport":{"id":"meta-viewport","title":"`[user-scalable=\"no\"]` is not used in the `\u003cmeta name=\"viewport\">` element and the `[maximum-scale]` attribute is not less than 5.","description":"Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. [Learn more](https://web.dev/meta-viewport/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"object-alt":{"id":"object-alt","title":"`\u003cobject>` elements have `[alt]` text","description":"Screen readers cannot translate non-text content. Adding alt text to `\u003cobject>` elements helps screen readers convey meaning to users. [Learn more](https://web.dev/object-alt/).","score":null,"scoreDisplayMode":"notApplicable"},"tabindex":{"id":"tabindex","title":"No element has a `[tabindex]` value greater than 0","description":"A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more](https://web.dev/tabindex/).","score":null,"scoreDisplayMode":"notApplicable"},"td-headers-attr":{"id":"td-headers-attr","title":"Cells in a `\u003ctable>` element that use the `[headers]` attribute refer to table cells within the same table.","description":"Screen readers have features to make navigating tables easier. Ensuring `\u003ctd>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more](https://web.dev/td-headers-attr/).","score":null,"scoreDisplayMode":"notApplicable"},"th-has-data-cells":{"id":"th-has-data-cells","title":"`\u003cth>` elements and elements with `[role=\"columnheader\"/\"rowheader\"]` have data cells they describe.","description":"Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more](https://web.dev/th-has-data-cells/).","score":null,"scoreDisplayMode":"notApplicable"},"valid-lang":{"id":"valid-lang","title":"`[lang]` attributes have a valid value","description":"Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) on elements helps ensure that text is pronounced correctly by a screen reader. [Learn more](https://web.dev/valid-lang/).","score":null,"scoreDisplayMode":"notApplicable"},"video-caption":{"id":"video-caption","title":"`\u003cvideo>` elements contain a `\u003ctrack>` element with `[kind=\"captions\"]`","description":"When a video provides a caption it is easier for deaf and hearing impaired users to access its information. [Learn more](https://web.dev/video-caption/).","score":null,"scoreDisplayMode":"notApplicable"},"custom-controls-labels":{"id":"custom-controls-labels","title":"Custom controls have associated labels","description":"Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. [Learn more](https://web.dev/custom-controls-labels/).","score":null,"scoreDisplayMode":"manual"},"custom-controls-roles":{"id":"custom-controls-roles","title":"Custom controls have ARIA roles","description":"Custom interactive controls have appropriate ARIA roles. [Learn more](https://web.dev/custom-control-roles/).","score":null,"scoreDisplayMode":"manual"},"focus-traps":{"id":"focus-traps","title":"User focus is not accidentally trapped in a region","description":"A user can tab into and out of any control or region without accidentally trapping their focus. [Learn more](https://web.dev/focus-traps/).","score":null,"scoreDisplayMode":"manual"},"focusable-controls":{"id":"focusable-controls","title":"Interactive controls are keyboard focusable","description":"Custom interactive controls are keyboard focusable and display a focus indicator. [Learn more](https://web.dev/focusable-controls/).","score":null,"scoreDisplayMode":"manual"},"interactive-element-affordance":{"id":"interactive-element-affordance","title":"Interactive elements indicate their purpose and state","description":"Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. [Learn more](https://web.dev/interactive-element-affordance/).","score":null,"scoreDisplayMode":"manual"},"logical-tab-order":{"id":"logical-tab-order","title":"The page has a logical tab order","description":"Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. [Learn more](https://web.dev/logical-tab-order/).","score":null,"scoreDisplayMode":"manual"},"managed-focus":{"id":"managed-focus","title":"The user's focus is directed to new content added to the page","description":"If new content, such as a dialog, is added to the page, the user's focus is directed to it. [Learn more](https://web.dev/managed-focus/).","score":null,"scoreDisplayMode":"manual"},"offscreen-content-hidden":{"id":"offscreen-content-hidden","title":"Offscreen content is hidden from assistive technology","description":"Offscreen content is hidden with display: none or aria-hidden=true. [Learn more](https://web.dev/offscreen-content-hidden/).","score":null,"scoreDisplayMode":"manual"},"use-landmarks":{"id":"use-landmarks","title":"HTML5 landmark elements are used to improve navigation","description":"Landmark elements (\u003cmain>, \u003cnav>, etc.) are used to improve the keyboard navigation of the page for assistive technology. [Learn more](https://web.dev/use-landmarks/).","score":null,"scoreDisplayMode":"manual"},"visual-order-follows-dom":{"id":"visual-order-follows-dom","title":"Visual order on the page follows DOM order","description":"DOM order matches the visual order, improving navigation for assistive technology. [Learn more](https://web.dev/visual-order-follows-dom/).","score":null,"scoreDisplayMode":"manual"},"total-byte-weight":{"id":"total-byte-weight","title":"Avoids enormous network payloads","description":"Large network payloads cost users real money and are highly correlated with long load times. [Learn more](https://web.dev/total-byte-weight/).","score":1,"scoreDisplayMode":"numeric","numericValue":93852,"numericUnit":"byte","displayValue":"Total size was 92 KiB","details":{"type":"table","headings":[{"key":"url","itemType":"url","text":"URL"},{"key":"totalBytes","itemType":"bytes","text":"Transfer Size"}],"items":[{"url":"http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css","totalBytes":40665},{"url":"http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js","totalBytes":27861},{"url":"http://localhost:8008/congo/samples/emoji/","totalBytes":17411},{"url":"http://localhost:8008/congo/author_hu052d24d60828c1cca42a6aefe45b8b44_54195_192x192_fill_q75_box_smart1.jpg","totalBytes":7915}]}},"offscreen-images":{"id":"offscreen-images","title":"Defer offscreen images","description":"Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn more](https://web.dev/offscreen-images/).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","warnings":[],"details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0,"overallSavingsBytes":0}},"render-blocking-resources":{"id":"render-blocking-resources","title":"Eliminate render-blocking resources","description":"Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn more](https://web.dev/render-blocking-resources/).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"Potential savings of 0 ms","details":{"type":"opportunity","headings":[{"key":"url","valueType":"url","label":"URL"},{"key":"totalBytes","valueType":"bytes","label":"Transfer Size"},{"key":"wastedMs","valueType":"timespanMs","label":"Potential Savings"}],"items":[{"url":"http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css","totalBytes":40665,"wastedMs":480}],"overallSavingsMs":0}},"unminified-css":{"id":"unminified-css","title":"Minify CSS","description":"Minifying CSS files can reduce network payload sizes. [Learn more](https://web.dev/unminified-css/).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0,"overallSavingsBytes":0}},"unminified-javascript":{"id":"unminified-javascript","title":"Minify JavaScript","description":"Minifying JavaScript files can reduce payload sizes and script parse time. [Learn more](https://web.dev/unminified-javascript/).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","warnings":[],"details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0,"overallSavingsBytes":0}},"unused-css-rules":{"id":"unused-css-rules","title":"Reduce unused CSS","description":"Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn more](https://web.dev/unused-css-rules/).","score":0.76,"scoreDisplayMode":"numeric","numericValue":290,"numericUnit":"millisecond","displayValue":"Potential savings of 28 KiB","details":{"type":"opportunity","headings":[{"key":"url","valueType":"url","label":"URL"},{"key":"totalBytes","valueType":"bytes","label":"Transfer Size"},{"key":"wastedBytes","valueType":"bytes","label":"Potential Savings"}],"items":[{"url":"http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css","wastedBytes":28581,"wastedPercent":70.28335680229254,"totalBytes":40665}],"overallSavingsMs":290,"overallSavingsBytes":28581}},"unused-javascript":{"id":"unused-javascript","title":"Reduce unused JavaScript","description":"Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn more](https://web.dev/unused-javascript/).","score":0.88,"scoreDisplayMode":"numeric","numericValue":150,"numericUnit":"millisecond","displayValue":"Potential savings of 21 KiB","details":{"type":"opportunity","headings":[{"key":"url","valueType":"url","subItemsHeading":{"key":"source","valueType":"code"},"label":"URL"},{"key":"totalBytes","valueType":"bytes","subItemsHeading":{"key":"sourceBytes"},"label":"Transfer Size"},{"key":"wastedBytes","valueType":"bytes","subItemsHeading":{"key":"sourceWastedBytes"},"label":"Potential Savings"}],"items":[{"url":"http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js","totalBytes":27861,"wastedBytes":21903,"wastedPercent":78.61610209319981}],"overallSavingsMs":150,"overallSavingsBytes":21903}},"modern-image-formats":{"id":"modern-image-formats","title":"Serve images in next-gen formats","description":"Image formats like JPEG 2000, JPEG XR, and WebP often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more](https://web.dev/uses-webp-images/).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","warnings":[],"details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0,"overallSavingsBytes":0}},"uses-optimized-images":{"id":"uses-optimized-images","title":"Efficiently encode images","description":"Optimized images load faster and consume less cellular data. [Learn more](https://web.dev/uses-optimized-images/).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","warnings":[],"details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0,"overallSavingsBytes":0}},"uses-responsive-images":{"id":"uses-responsive-images","title":"Properly size images","description":"Serve images that are appropriately-sized to save cellular data and improve load time. [Learn more](https://web.dev/uses-responsive-images/).","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0,"overallSavingsBytes":0}},"efficient-animated-content":{"id":"efficient-animated-content","title":"Use video formats for animated content","description":"Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. [Learn more](https://web.dev/efficient-animated-content/)","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0,"overallSavingsBytes":0}},"duplicated-javascript":{"id":"duplicated-javascript","title":"Remove duplicate modules in JavaScript bundles","description":"Remove large, duplicate JavaScript modules from bundles to reduce unnecessary bytes consumed by network activity. ","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"","details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0,"overallSavingsBytes":0}},"legacy-javascript":{"id":"legacy-javascript","title":"Avoid serving legacy JavaScript to modern browsers","description":"Polyfills and transforms enable legacy browsers to use new JavaScript features. However, many aren't necessary for modern browsers. For your bundled JavaScript, adopt a modern script deployment strategy using module/nomodule feature detection to reduce the amount of code shipped to modern browsers, while retaining support for legacy browsers. [Learn More](https://philipwalton.com/articles/deploying-es2015-code-in-production-today/)","score":1,"scoreDisplayMode":"numeric","numericValue":0,"numericUnit":"millisecond","displayValue":"Potential savings of 0 KiB","details":{"type":"opportunity","headings":[{"key":"url","valueType":"url","subItemsHeading":{"key":"location","valueType":"source-location"},"label":"URL"},{"key":null,"valueType":"code","subItemsHeading":{"key":"signal"},"label":""},{"key":"wastedBytes","valueType":"bytes","label":"Potential Savings"}],"items":[{"url":"http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js","wastedBytes":168,"subItems":{"type":"subitems","items":[{"signal":"@babel/plugin-transform-classes","location":{"type":"source-location","url":"http://localhost:8008/congo/js/main.bundle.min.81d5d44787f3f7c0220442722b6d0c72da50dab39103321d578502e81b226ed5a87e765e5e2a7c0533fdddeb4697bd499a39be89310453fba5c129f5ba69bdea.js","line":0,"column":2227,"urlProvider":"network"}}]},"totalBytes":0}],"overallSavingsMs":0,"overallSavingsBytes":168}},"appcache-manifest":{"id":"appcache-manifest","title":"Avoids Application Cache","description":"Application Cache is deprecated. [Learn more](https://web.dev/appcache-manifest/).","score":1,"scoreDisplayMode":"binary"},"doctype":{"id":"doctype","title":"Page has the HTML doctype","description":"Specifying a doctype prevents the browser from switching to quirks-mode. [Learn more](https://web.dev/doctype/).","score":1,"scoreDisplayMode":"binary"},"charset":{"id":"charset","title":"Properly defines charset","description":"A character encoding declaration is required. It can be done with a `\u003cmeta>` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. [Learn more](https://web.dev/charset/).","score":1,"scoreDisplayMode":"binary"},"dom-size":{"id":"dom-size","title":"Avoids an excessive DOM size","description":"A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn more](https://web.dev/dom-size/).","score":1,"scoreDisplayMode":"numeric","numericValue":120,"numericUnit":"element","displayValue":"120 elements","details":{"type":"table","headings":[{"key":"statistic","itemType":"text","text":"Statistic"},{"key":"node","itemType":"node","text":"Element"},{"key":"value","itemType":"numeric","text":"Value"}],"items":[{"statistic":"Total DOM Elements","value":120},{"node":{"type":"node","lhId":"4-49-path","path":"1,HTML,1,BODY,2,MAIN,0,ARTICLE,2,FOOTER,0,DIV,1,DIV,3,DIV,0,DIV,0,A,0,SPAN,0,svg,0,path","selector":"a.px-1 > span.relative > svg.svg-inline--fa > path","boundingRect":{"top":1164,"bottom":1184,"left":140,"right":164,"width":24,"height":19},"snippet":"\u003cpath fill=\"currentcolor\" d=\"M459.37 151.716c.325 4.548.325 9.097.325 13.645.0 138.72-105.583 298.558-2…\">","nodeLabel":"path"},"statistic":"Maximum DOM Depth","value":12},{"node":{"type":"node","lhId":"4-50-BODY","path":"1,HTML,1,BODY","selector":"body.flex","boundingRect":{"top":0,"bottom":640,"left":0,"right":360,"width":360,"height":640},"snippet":"\u003cbody class=\"flex flex-col h-screen px-6 m-auto text-lg leading-7 bg-neutral text-neutr…\">","nodeLabel":"body"},"statistic":"Maximum Child Elements","value":5}]}},"external-anchors-use-rel-noopener":{"id":"external-anchors-use-rel-noopener","title":"Links to cross-origin destinations are safe","description":"Add `rel=\"noopener\"` or `rel=\"noreferrer\"` to any external links to improve performance and prevent security vulnerabilities. [Learn more](https://web.dev/external-anchors-use-rel-noopener/).","score":1,"scoreDisplayMode":"binary","warnings":[],"details":{"type":"table","headings":[],"items":[]}},"geolocation-on-start":{"id":"geolocation-on-start","title":"Avoids requesting the geolocation permission on page load","description":"Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. [Learn more](https://web.dev/geolocation-on-start/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"inspector-issues":{"id":"inspector-issues","title":"No issues in the `Issues` panel in Chrome Devtools","description":"Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"no-document-write":{"id":"no-document-write","title":"Avoids `document.write()`","description":"For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. [Learn more](https://web.dev/no-document-write/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"no-vulnerable-libraries":{"id":"no-vulnerable-libraries","title":"Avoids front-end JavaScript libraries with known security vulnerabilities","description":"Some third-party scripts may contain known security vulnerabilities that are easily identified and exploited by attackers. [Learn more](https://web.dev/no-vulnerable-libraries/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[],"summary":{}}},"js-libraries":{"id":"js-libraries","title":"Detected JavaScript libraries","description":"All front-end JavaScript libraries detected on the page. [Learn more](https://web.dev/js-libraries/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[{"key":"name","itemType":"text","text":"Name"},{"key":"version","itemType":"text","text":"Version"}],"items":[{"name":"FuseJS","npm":"fuse.js"}],"summary":{},"debugData":{"type":"debugdata","stacks":[{"id":"fusejs"}]}}},"notification-on-start":{"id":"notification-on-start","title":"Avoids requesting the notification permission on page load","description":"Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. [Learn more](https://web.dev/notification-on-start/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"password-inputs-can-be-pasted-into":{"id":"password-inputs-can-be-pasted-into","title":"Allows users to paste into password fields","description":"Preventing password pasting undermines good security policy. [Learn more](https://web.dev/password-inputs-can-be-pasted-into/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"uses-http2":{"id":"uses-http2","title":"Use HTTP/2","description":"HTTP/2 offers many benefits over HTTP/1.1, including binary headers and multiplexing. [Learn more](https://web.dev/uses-http2/).","score":1,"scoreDisplayMode":"binary","numericValue":0,"numericUnit":"millisecond","details":{"type":"opportunity","headings":[],"items":[],"overallSavingsMs":0}},"uses-passive-event-listeners":{"id":"uses-passive-event-listeners","title":"Uses passive listeners to improve scrolling performance","description":"Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. [Learn more](https://web.dev/uses-passive-event-listeners/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"meta-description":{"id":"meta-description","title":"Document has a meta description","description":"Meta descriptions may be included in search results to concisely summarize page content. [Learn more](https://web.dev/meta-description/).","score":1,"scoreDisplayMode":"binary"},"http-status-code":{"id":"http-status-code","title":"Page has successful HTTP status code","description":"Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more](https://web.dev/http-status-code/).","score":1,"scoreDisplayMode":"binary"},"font-size":{"id":"font-size","title":"Document uses legible font sizes","description":"Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have >60% of page text ≥12px. [Learn more](https://web.dev/font-size/).","score":1,"scoreDisplayMode":"binary","displayValue":"99.75% legible text","details":{"type":"table","headings":[{"key":"source","itemType":"source-location","text":"Source"},{"key":"selector","itemType":"code","text":"Selector"},{"key":"coverage","itemType":"text","text":"% of Page Text"},{"key":"fontSize","itemType":"text","text":"Font Size"}],"items":[{"source":{"type":"source-location","url":"http://localhost:8008/congo/css/main.bundle.min.6783e342ffedbcc698d9afb9ffe11276f4f9de79bfc45cf670b35d5f9948d266086106596bc9e59820d7de0959e5889ce97e073fbafd380be9dc7b33b75295f2.css","urlProvider":"network","line":0,"column":28538},"selector":".text-\\[0\\.6rem\\]","coverage":"0.25%","fontSize":"9.6px"},{"source":{"type":"code","value":"Legible text"},"selector":"","coverage":"99.75%","fontSize":"≥ 12px"}]}},"link-text":{"id":"link-text","title":"Links have descriptive text","description":"Descriptive link text helps search engines understand your content. [Learn more](https://web.dev/link-text/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[],"summary":{}}},"crawlable-anchors":{"id":"crawlable-anchors","title":"Links are crawlable","description":"Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. [Learn More](https://support.google.com/webmasters/answer/9112205)","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"is-crawlable":{"id":"is-crawlable","title":"Page isn’t blocked from indexing","description":"Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more](https://web.dev/is-crawable/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"robots-txt":{"id":"robots-txt","title":"robots.txt is valid","description":"If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. [Learn more](https://web.dev/robots-txt/).","score":null,"scoreDisplayMode":"notApplicable"},"tap-targets":{"id":"tap-targets","title":"Tap targets are sized appropriately","description":"Interactive elements like buttons and links should be large enough (48x48px), and have enough space around them, to be easy enough to tap without overlapping onto other elements. [Learn more](https://web.dev/tap-targets/).","score":1,"scoreDisplayMode":"binary","displayValue":"100% appropriately sized tap targets","details":{"type":"table","headings":[],"items":[]}},"hreflang":{"id":"hreflang","title":"Document has a valid `hreflang`","description":"hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more](https://web.dev/hreflang/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"plugins":{"id":"plugins","title":"Document avoids plugins","description":"Search engines can't index plugin content, and many devices restrict plugins or don't support them. [Learn more](https://web.dev/plugins/).","score":1,"scoreDisplayMode":"binary","details":{"type":"table","headings":[],"items":[]}},"canonical":{"id":"canonical","title":"Document has a valid `rel=canonical`","description":"Canonical links suggest which URL to show in search results. [Learn more](https://web.dev/canonical/).","score":1,"scoreDisplayMode":"binary"},"structured-data":{"id":"structured-data","title":"Structured data is valid","description":"Run the [Structured Data Testing Tool](https://search.google.com/structured-data/testing-tool/) and the [Structured Data Linter](http://linter.structured-data.org/) to validate structured data. [Learn more](https://web.dev/structured-data/).","score":null,"scoreDisplayMode":"manual"}},"configSettings":{"output":["json"],"maxWaitForFcp":30000,"maxWaitForLoad":45000,"formFactor":"mobile","throttling":{"rttMs":150,"throughputKbps":1638.4,"requestLatencyMs":562.5,"downloadThroughputKbps":1474.5600000000002,"uploadThroughputKbps":675,"cpuSlowdownMultiplier":4},"throttlingMethod":"simulate","screenEmulation":{"mobile":true,"width":360,"height":640,"deviceScaleFactor":2.625,"disabled":false},"emulatedUserAgent":"Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4420.0 Mobile Safari/537.36 Chrome-Lighthouse","auditMode":false,"gatherMode":false,"disableStorageReset":false,"channel":"cli","budgets":null,"locale":"en-US","blockedUrlPatterns":null,"additionalTraceCategories":null,"extraHeaders":null,"precomputedLanternData":null,"onlyAudits":null,"onlyCategories":null,"skipAudits":["uses-text-compression","uses-long-cache-ttl"]},"categories":{"performance":{"title":"Performance","auditRefs":[{"id":"first-contentful-paint","weight":10,"group":"metrics","acronym":"FCP","relevantAudits":["server-response-time","render-blocking-resources","redirects","critical-request-chains","uses-text-compression","uses-rel-preconnect","uses-rel-preload","font-display","unminified-javascript","unminified-css","unused-css-rules"]},{"id":"speed-index","weight":10,"group":"metrics","acronym":"SI"},{"id":"largest-contentful-paint","weight":25,"group":"metrics","acronym":"LCP","relevantAudits":["server-response-time","render-blocking-resources","redirects","critical-request-chains","uses-text-compression","uses-rel-preconnect","uses-rel-preload","font-display","unminified-javascript","unminified-css","unused-css-rules","largest-contentful-paint-element","preload-lcp-image","unused-javascript","efficient-animated-content","total-byte-weight"]},{"id":"interactive","weight":10,"group":"metrics","acronym":"TTI"},{"id":"total-blocking-time","weight":30,"group":"metrics","acronym":"TBT","relevantAudits":["long-tasks","third-party-summary","third-party-facades","bootup-time","mainthread-work-breakdown","dom-size","duplicated-javascript","legacy-javascript"]},{"id":"cumulative-layout-shift","weight":15,"group":"metrics","acronym":"CLS","relevantAudits":["layout-shift-elements","non-composited-animations","unsized-images"]},{"id":"max-potential-fid","weight":0},{"id":"first-meaningful-paint","weight":0,"acronym":"FMP"},{"id":"render-blocking-resources","weight":0,"group":"load-opportunities"},{"id":"uses-responsive-images","weight":0,"group":"load-opportunities"},{"id":"offscreen-images","weight":0,"group":"load-opportunities"},{"id":"unminified-css","weight":0,"group":"load-opportunities"},{"id":"unminified-javascript","weight":0,"group":"load-opportunities"},{"id":"unused-css-rules","weight":0,"group":"load-opportunities"},{"id":"unused-javascript","weight":0,"group":"load-opportunities"},{"id":"uses-optimized-images","weight":0,"group":"load-opportunities"},{"id":"modern-image-formats","weight":0,"group":"load-opportunities"},{"id":"uses-rel-preconnect","weight":0,"group":"load-opportunities"},{"id":"server-response-time","weight":0,"group":"load-opportunities"},{"id":"redirects","weight":0,"group":"load-opportunities"},{"id":"uses-rel-preload","weight":0,"group":"load-opportunities"},{"id":"uses-http2","weight":0,"group":"load-opportunities"},{"id":"efficient-animated-content","weight":0,"group":"load-opportunities"},{"id":"duplicated-javascript","weight":0,"group":"load-opportunities"},{"id":"legacy-javascript","weight":0,"group":"load-opportunities"},{"id":"preload-lcp-image","weight":0,"group":"load-opportunities"},{"id":"total-byte-weight","weight":0,"group":"diagnostics"},{"id":"dom-size","weight":0,"group":"diagnostics"},{"id":"critical-request-chains","weight":0,"group":"diagnostics"},{"id":"user-timings","weight":0,"group":"diagnostics"},{"id":"bootup-time","weight":0,"group":"diagnostics"},{"id":"mainthread-work-breakdown","weight":0,"group":"diagnostics"},{"id":"font-display","weight":0,"group":"diagnostics"},{"id":"performance-budget","weight":0,"group":"budgets"},{"id":"timing-budget","weight":0,"group":"budgets"},{"id":"resource-summary","weight":0,"group":"diagnostics"},{"id":"third-party-summary","weight":0,"group":"diagnostics"},{"id":"third-party-facades","weight":0,"group":"diagnostics"},{"id":"largest-contentful-paint-element","weight":0,"group":"diagnostics"},{"id":"layout-shift-elements","weight":0,"group":"diagnostics"},{"id":"uses-passive-event-listeners","weight":0,"group":"diagnostics"},{"id":"no-document-write","weight":0,"group":"diagnostics"},{"id":"long-tasks","weight":0,"group":"diagnostics"},{"id":"non-composited-animations","weight":0,"group":"diagnostics"},{"id":"unsized-images","weight":0,"group":"diagnostics"},{"id":"network-requests","weight":0},{"id":"network-rtt","weight":0},{"id":"network-server-latency","weight":0},{"id":"main-thread-tasks","weight":0},{"id":"diagnostics","weight":0},{"id":"metrics","weight":0},{"id":"screenshot-thumbnails","weight":0},{"id":"final-screenshot","weight":0},{"id":"script-treemap-data","weight":0}],"id":"performance","score":1},"accessibility":{"title":"Accessibility","description":"These checks highlight opportunities to [improve the accessibility of your web app](https://developers.google.com/web/fundamentals/accessibility). Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged.","manualDescription":"These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://developers.google.com/web/fundamentals/accessibility/how-to-review).","auditRefs":[{"id":"accesskeys","weight":0,"group":"a11y-navigation"},{"id":"aria-allowed-attr","weight":10,"group":"a11y-aria"},{"id":"aria-command-name","weight":0,"group":"a11y-aria"},{"id":"aria-hidden-body","weight":10,"group":"a11y-aria"},{"id":"aria-hidden-focus","weight":3,"group":"a11y-aria"},{"id":"aria-input-field-name","weight":0,"group":"a11y-aria"},{"id":"aria-meter-name","weight":0,"group":"a11y-aria"},{"id":"aria-progressbar-name","weight":0,"group":"a11y-aria"},{"id":"aria-required-attr","weight":0,"group":"a11y-aria"},{"id":"aria-required-children","weight":0,"group":"a11y-aria"},{"id":"aria-required-parent","weight":0,"group":"a11y-aria"},{"id":"aria-roles","weight":0,"group":"a11y-aria"},{"id":"aria-toggle-field-name","weight":0,"group":"a11y-aria"},{"id":"aria-tooltip-name","weight":0,"group":"a11y-aria"},{"id":"aria-treeitem-name","weight":0,"group":"a11y-aria"},{"id":"aria-valid-attr-value","weight":10,"group":"a11y-aria"},{"id":"aria-valid-attr","weight":10,"group":"a11y-aria"},{"id":"button-name","weight":10,"group":"a11y-names-labels"},{"id":"bypass","weight":3,"group":"a11y-navigation"},{"id":"color-contrast","weight":3,"group":"a11y-color-contrast"},{"id":"definition-list","weight":0,"group":"a11y-tables-lists"},{"id":"dlitem","weight":0,"group":"a11y-tables-lists"},{"id":"document-title","weight":3,"group":"a11y-names-labels"},{"id":"duplicate-id-active","weight":3,"group":"a11y-navigation"},{"id":"duplicate-id-aria","weight":0,"group":"a11y-aria"},{"id":"form-field-multiple-labels","weight":0,"group":"a11y-names-labels"},{"id":"frame-title","weight":0,"group":"a11y-names-labels"},{"id":"heading-order","weight":2,"group":"a11y-navigation"},{"id":"html-has-lang","weight":3,"group":"a11y-language"},{"id":"html-lang-valid","weight":3,"group":"a11y-language"},{"id":"image-alt","weight":10,"group":"a11y-names-labels"},{"id":"input-image-alt","weight":0,"group":"a11y-names-labels"},{"id":"label","weight":0,"group":"a11y-names-labels"},{"id":"link-name","weight":3,"group":"a11y-names-labels"},{"id":"list","weight":3,"group":"a11y-tables-lists"},{"id":"listitem","weight":3,"group":"a11y-tables-lists"},{"id":"meta-refresh","weight":0,"group":"a11y-best-practices"},{"id":"meta-viewport","weight":10,"group":"a11y-best-practices"},{"id":"object-alt","weight":0,"group":"a11y-names-labels"},{"id":"tabindex","weight":0,"group":"a11y-navigation"},{"id":"td-headers-attr","weight":0,"group":"a11y-tables-lists"},{"id":"th-has-data-cells","weight":0,"group":"a11y-tables-lists"},{"id":"valid-lang","weight":0,"group":"a11y-language"},{"id":"video-caption","weight":0,"group":"a11y-audio-video"},{"id":"logical-tab-order","weight":0},{"id":"focusable-controls","weight":0},{"id":"interactive-element-affordance","weight":0},{"id":"managed-focus","weight":0},{"id":"focus-traps","weight":0},{"id":"custom-controls-labels","weight":0},{"id":"custom-controls-roles","weight":0},{"id":"visual-order-follows-dom","weight":0},{"id":"offscreen-content-hidden","weight":0},{"id":"use-landmarks","weight":0}],"id":"accessibility","score":1},"best-practices":{"title":"Best Practices","auditRefs":[{"id":"is-on-https","weight":1,"group":"best-practices-trust-safety"},{"id":"external-anchors-use-rel-noopener","weight":1,"group":"best-practices-trust-safety"},{"id":"geolocation-on-start","weight":1,"group":"best-practices-trust-safety"},{"id":"notification-on-start","weight":1,"group":"best-practices-trust-safety"},{"id":"no-vulnerable-libraries","weight":1,"group":"best-practices-trust-safety"},{"id":"csp-xss","weight":0,"group":"best-practices-trust-safety"},{"id":"password-inputs-can-be-pasted-into","weight":1,"group":"best-practices-ux"},{"id":"image-aspect-ratio","weight":1,"group":"best-practices-ux"},{"id":"image-size-responsive","weight":1,"group":"best-practices-ux"},{"id":"preload-fonts","weight":0,"group":"best-practices-ux"},{"id":"doctype","weight":1,"group":"best-practices-browser-compat"},{"id":"charset","weight":1,"group":"best-practices-browser-compat"},{"id":"no-unload-listeners","weight":1,"group":"best-practices-general"},{"id":"appcache-manifest","weight":1,"group":"best-practices-general"},{"id":"js-libraries","weight":0,"group":"best-practices-general"},{"id":"deprecations","weight":1,"group":"best-practices-general"},{"id":"errors-in-console","weight":1,"group":"best-practices-general"},{"id":"valid-source-maps","weight":0,"group":"best-practices-general"},{"id":"inspector-issues","weight":1,"group":"best-practices-general"}],"id":"best-practices","score":1},"seo":{"title":"SEO","description":"These checks ensure that your page is optimized for search engine results ranking. There are additional factors Lighthouse does not check that may affect your search ranking. [Learn more](https://support.google.com/webmasters/answer/35769).","manualDescription":"Run these additional validators on your site to check additional SEO best practices.","auditRefs":[{"id":"viewport","weight":1,"group":"seo-mobile"},{"id":"document-title","weight":1,"group":"seo-content"},{"id":"meta-description","weight":1,"group":"seo-content"},{"id":"http-status-code","weight":1,"group":"seo-crawl"},{"id":"link-text","weight":1,"group":"seo-content"},{"id":"crawlable-anchors","weight":1,"group":"seo-crawl"},{"id":"is-crawlable","weight":1,"group":"seo-crawl"},{"id":"robots-txt","weight":0,"group":"seo-crawl"},{"id":"image-alt","weight":1,"group":"seo-content"},{"id":"hreflang","weight":1,"group":"seo-content"},{"id":"canonical","weight":1,"group":"seo-content"},{"id":"font-size","weight":1,"group":"seo-mobile"},{"id":"plugins","weight":1,"group":"seo-content"},{"id":"tap-targets","weight":1,"group":"seo-mobile"},{"id":"structured-data","weight":0}],"id":"seo","score":1},"pwa":{"title":"Progressive Web App","description":"These checks validate the aspects of a Progressive Web App. [Learn more](https://developers.google.com/web/progressive-web-apps/checklist).","manualDescription":"These checks are required by the baseline [PWA Checklist](https://developers.google.com/web/progressive-web-apps/checklist) but are not automatically checked by Lighthouse. They do not affect your score but it's important that you verify them manually.","auditRefs":[{"id":"installable-manifest","weight":2,"group":"pwa-installable"},{"id":"service-worker","weight":1,"group":"pwa-optimized"},{"id":"redirects-http","weight":0,"group":"pwa-optimized"},{"id":"splash-screen","weight":1,"group":"pwa-optimized"},{"id":"themed-omnibox","weight":1,"group":"pwa-optimized"},{"id":"content-width","weight":1,"group":"pwa-optimized"},{"id":"viewport","weight":2,"group":"pwa-optimized"},{"id":"apple-touch-icon","weight":1,"group":"pwa-optimized"},{"id":"maskable-icon","weight":1,"group":"pwa-optimized"},{"id":"pwa-cross-browser","weight":0},{"id":"pwa-page-transitions","weight":0},{"id":"pwa-each-page-has-url","weight":0}],"id":"pwa","score":0.8}},"categoryGroups":{"metrics":{"title":"Metrics"},"load-opportunities":{"title":"Opportunities","description":"These suggestions can help your page load faster. They don't [directly affect](https://web.dev/performance-scoring/) the Performance score."},"budgets":{"title":"Budgets","description":"Performance budgets set standards for the performance of your site."},"diagnostics":{"title":"Diagnostics","description":"More information about the performance of your application. These numbers don't [directly affect](https://web.dev/performance-scoring/) the Performance score."},"pwa-installable":{"title":"Installable"},"pwa-optimized":{"title":"PWA Optimized"},"a11y-best-practices":{"title":"Best practices","description":"These items highlight common accessibility best practices."},"a11y-color-contrast":{"title":"Contrast","description":"These are opportunities to improve the legibility of your content."},"a11y-names-labels":{"title":"Names and labels","description":"These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader."},"a11y-navigation":{"title":"Navigation","description":"These are opportunities to improve keyboard navigation in your application."},"a11y-aria":{"title":"ARIA","description":"These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader."},"a11y-language":{"title":"Internationalization and localization","description":"These are opportunities to improve the interpretation of your content by users in different locales."},"a11y-audio-video":{"title":"Audio and video","description":"These are opportunities to provide alternative content for audio and video. This may improve the experience for users with hearing or vision impairments."},"a11y-tables-lists":{"title":"Tables and lists","description":"These are opportunities to improve the experience of reading tabular or list data using assistive technology, like a screen reader."},"seo-mobile":{"title":"Mobile Friendly","description":"Make sure your pages are mobile friendly so users don’t have to pinch or zoom in order to read the content pages. [Learn more](https://developers.google.com/search/mobile-sites/)."},"seo-content":{"title":"Content Best Practices","description":"Format your HTML in a way that enables crawlers to better understand your app’s content."},"seo-crawl":{"title":"Crawling and Indexing","description":"To appear in search results, crawlers need access to your app."},"best-practices-trust-safety":{"title":"Trust and Safety"},"best-practices-ux":{"title":"User Experience"},"best-practices-browser-compat":{"title":"Browser Compatibility"},"best-practices-general":{"title":"General"}},"timing":{"entries":[{"startTime":755.72,"name":"lh:config:requireGatherers","duration":15.92,"entryType":"measure"},{"startTime":771.88,"name":"lh:config:requireAudits","duration":205.48,"entryType":"measure"},{"startTime":754.03,"name":"lh:init:config","duration":292.77,"entryType":"measure"},{"startTime":1047.72,"name":"lh:init:connect","duration":15.07,"entryType":"measure"},{"startTime":1062.88,"name":"lh:gather:loadBlank","duration":54.81,"entryType":"measure"},{"startTime":1117.82,"name":"lh:gather:getVersion","duration":0.31,"entryType":"measure"},{"startTime":1118.22,"name":"lh:gather:getBenchmarkIndex","duration":1005.53,"entryType":"measure"},{"startTime":2123.89,"name":"lh:gather:setupDriver","duration":7.14,"entryType":"measure"},{"startTime":2131.39,"name":"lh:gather:loadBlank","duration":4.66,"entryType":"measure"},{"startTime":2149.88,"name":"lh:storage:clearBrowserCaches","duration":3.67,"entryType":"measure"},{"startTime":2153.64,"name":"lh:gather:prepareNetworkForNavigation","duration":0.76,"entryType":"measure"},{"startTime":2154.51,"name":"lh:gather:beforePass:CSSUsage","duration":0.08,"entryType":"measure"},{"startTime":2154.61,"name":"lh:gather:beforePass:JsUsage","duration":1.39,"entryType":"measure"},{"startTime":2156.03,"name":"lh:gather:beforePass:ViewportDimensions","duration":0.01,"entryType":"measure"},{"startTime":2156.06,"name":"lh:gather:beforePass:ConsoleMessages","duration":0.9,"entryType":"measure"},{"startTime":2156.98,"name":"lh:gather:beforePass:AnchorElements","duration":0.01,"entryType":"measure"},{"startTime":2157.01,"name":"lh:gather:beforePass:ImageElements","duration":0.01,"entryType":"measure"},{"startTime":2157.03,"name":"lh:gather:beforePass:LinkElements","duration":0.01,"entryType":"measure"},{"startTime":2157.04,"name":"lh:gather:beforePass:MetaElements","duration":0.01,"entryType":"measure"},{"startTime":2157.06,"name":"lh:gather:beforePass:ScriptElements","duration":0.02,"entryType":"measure"},{"startTime":2157.09,"name":"lh:gather:beforePass:MainDocumentContent","duration":0.01,"entryType":"measure"},{"startTime":2157.11,"name":"lh:gather:beforePass:GlobalListeners","duration":0.01,"entryType":"measure"},{"startTime":2157.14,"name":"lh:gather:beforePass:AppCacheManifest","duration":0.06,"entryType":"measure"},{"startTime":2157.22,"name":"lh:gather:beforePass:Doctype","duration":0.01,"entryType":"measure"},{"startTime":2157.24,"name":"lh:gather:beforePass:DOMStats","duration":0.01,"entryType":"measure"},{"startTime":2157.26,"name":"lh:gather:beforePass:OptimizedImages","duration":0.01,"entryType":"measure"},{"startTime":2157.29,"name":"lh:gather:beforePass:PasswordInputsWithPreventedPaste","duration":0.02,"entryType":"measure"},{"startTime":2157.32,"name":"lh:gather:beforePass:TagsBlockingFirstPaint","duration":0.34,"entryType":"measure"},{"startTime":2157.69,"name":"lh:gather:beforePass:FontSize","duration":0.01,"entryType":"measure"},{"startTime":2157.72,"name":"lh:gather:beforePass:EmbeddedContent","duration":0.01,"entryType":"measure"},{"startTime":2157.8,"name":"lh:gather:beforePass:RobotsTxt","duration":0.01,"entryType":"measure"},{"startTime":2157.83,"name":"lh:gather:beforePass:TapTargets","duration":0.01,"entryType":"measure"},{"startTime":2157.85,"name":"lh:gather:beforePass:Accessibility","duration":0.01,"entryType":"measure"},{"startTime":2157.87,"name":"lh:gather:beforePass:TraceElements","duration":0.34,"entryType":"measure"},{"startTime":2158.23,"name":"lh:gather:beforePass:InspectorIssues","duration":0.28,"entryType":"measure"},{"startTime":2158.52,"name":"lh:gather:beforePass:SourceMaps","duration":0.06,"entryType":"measure"},{"startTime":2154.5,"name":"lh:gather:beforePass","duration":4.1,"entryType":"measure"},{"startTime":2158.64,"name":"lh:gather:beginRecording","duration":42.32,"entryType":"measure"},{"startTime":2201.11,"name":"lh:gather:loadPage-defaultPass","duration":2666.31,"entryType":"measure"},{"startTime":4867.55,"name":"lh:gather:pass","duration":0.68,"entryType":"measure"},{"startTime":4868.32,"name":"lh:gather:getTrace","duration":40.6,"entryType":"measure"},{"startTime":4909.15,"name":"lh:computed:NetworkRecords","duration":0.44,"entryType":"measure"},{"startTime":4908.96,"name":"lh:gather:getDevtoolsLog","duration":0.64,"entryType":"measure"},{"startTime":4913.19,"name":"lh:gather:afterPass:CSSUsage","duration":16.17,"entryType":"measure"},{"startTime":4929.4,"name":"lh:gather:afterPass:JsUsage","duration":2.97,"entryType":"measure"},{"startTime":4932.41,"name":"lh:gather:afterPass:ViewportDimensions","duration":1.29,"entryType":"measure"},{"startTime":4933.74,"name":"lh:gather:afterPass:ConsoleMessages","duration":1.24,"entryType":"measure"},{"startTime":4935.01,"name":"lh:gather:afterPass:AnchorElements","duration":13.34,"entryType":"measure"},{"startTime":4948.4,"name":"lh:gather:afterPass:ImageElements","duration":19,"entryType":"measure"},{"startTime":4967.45,"name":"lh:gather:afterPass:LinkElements","duration":4.16,"entryType":"measure"},{"startTime":4971.66,"name":"lh:gather:afterPass:MetaElements","duration":4,"entryType":"measure"},{"startTime":4975.7,"name":"lh:gather:afterPass:ScriptElements","duration":3.62,"entryType":"measure"},{"startTime":4979.36,"name":"lh:gather:afterPass:MainDocumentContent","duration":1.25,"entryType":"measure"},{"startTime":4980.65,"name":"lh:gather:afterPass:GlobalListeners","duration":1.44,"entryType":"measure"},{"startTime":4982.12,"name":"lh:gather:afterPass:AppCacheManifest","duration":1.2,"entryType":"measure"},{"startTime":4983.34,"name":"lh:gather:afterPass:Doctype","duration":1.17,"entryType":"measure"},{"startTime":4984.55,"name":"lh:gather:afterPass:DOMStats","duration":3.67,"entryType":"measure"},{"startTime":4988.29,"name":"lh:gather:afterPass:OptimizedImages","duration":6.77,"entryType":"measure"},{"startTime":4995.11,"name":"lh:gather:afterPass:PasswordInputsWithPreventedPaste","duration":1.82,"entryType":"measure"},{"startTime":4996.97,"name":"lh:gather:afterPass:TagsBlockingFirstPaint","duration":1.84,"entryType":"measure"},{"startTime":4998.85,"name":"lh:gather:afterPass:FontSize","duration":17.27,"entryType":"measure"},{"startTime":5016.17,"name":"lh:gather:afterPass:EmbeddedContent","duration":2.03,"entryType":"measure"},{"startTime":5018.35,"name":"lh:gather:getVersion","duration":0.26,"entryType":"measure"},{"startTime":5019.19,"name":"lh:gather:getVersion","duration":0.21,"entryType":"measure"},{"startTime":5018.24,"name":"lh:gather:afterPass:RobotsTxt","duration":3.71,"entryType":"measure"},{"startTime":5022,"name":"lh:gather:afterPass:TapTargets","duration":6.62,"entryType":"measure"},{"startTime":5028.67,"name":"lh:gather:afterPass:Accessibility","duration":147.99,"entryType":"measure"},{"startTime":5176.69,"name":"lh:gather:afterPass:TraceElements","duration":34.63,"entryType":"measure"},{"startTime":5211.36,"name":"lh:gather:afterPass:InspectorIssues","duration":1.04,"entryType":"measure"},{"startTime":5212.42,"name":"lh:gather:afterPass:SourceMaps","duration":0.75,"entryType":"measure"},{"startTime":4910.41,"name":"lh:gather:afterPass","duration":302.8,"entryType":"measure"},{"startTime":2131.29,"name":"lh:gather:runPass-defaultPass","duration":3082.04,"entryType":"measure"},{"startTime":5213.65,"name":"lh:gather:getWebAppManifest","duration":3.35,"entryType":"measure"},{"startTime":5217.06,"name":"lh:gather:getInstallabilityErrors","duration":0.23,"entryType":"measure"},{"startTime":5217.37,"name":"lh:gather:collectStacks","duration":10.06,"entryType":"measure"},{"startTime":5213.58,"name":"lh:gather:populateBaseArtifacts","duration":13.98,"entryType":"measure"},{"startTime":5228.2,"name":"lh:gather:loadBlank","duration":5.59,"entryType":"measure"},{"startTime":5233.82,"name":"lh:gather:prepareNetworkForNavigation","duration":0.64,"entryType":"measure"},{"startTime":5234.5,"name":"lh:gather:beforePass:ServiceWorker","duration":0.96,"entryType":"measure"},{"startTime":5234.48,"name":"lh:gather:beforePass","duration":0.99,"entryType":"measure"},{"startTime":5235.49,"name":"lh:gather:beginRecording","duration":0.04,"entryType":"measure"},{"startTime":5235.54,"name":"lh:gather:loadPage-offlinePass","duration":15.72,"entryType":"measure"},{"startTime":5251.29,"name":"lh:gather:pass","duration":0.05,"entryType":"measure"},{"startTime":5251.59,"name":"lh:computed:NetworkRecords","duration":0.12,"entryType":"measure"},{"startTime":5251.35,"name":"lh:gather:getDevtoolsLog","duration":0.37,"entryType":"measure"},{"startTime":5253.94,"name":"lh:gather:afterPass:ServiceWorker","duration":0.73,"entryType":"measure"},{"startTime":5252.11,"name":"lh:gather:afterPass","duration":2.59,"entryType":"measure"},{"startTime":5228.04,"name":"lh:gather:runPass-offlinePass","duration":26.68,"entryType":"measure"},{"startTime":5254.82,"name":"lh:gather:loadBlank","duration":5.95,"entryType":"measure"},{"startTime":5260.8,"name":"lh:gather:prepareNetworkForNavigation","duration":0.54,"entryType":"measure"},{"startTime":5261.37,"name":"lh:gather:beforePass:HTTPRedirect","duration":0.08,"entryType":"measure"},{"startTime":5261.37,"name":"lh:gather:beforePass","duration":0.1,"entryType":"measure"},{"startTime":5261.48,"name":"lh:gather:beginRecording","duration":0.03,"entryType":"measure"},{"startTime":5261.52,"name":"lh:gather:loadPage-redirectPass","duration":16.89,"entryType":"measure"},{"startTime":5278.45,"name":"lh:gather:pass","duration":0.06,"entryType":"measure"},{"startTime":5278.55,"name":"lh:computed:NetworkRecords","duration":0.18,"entryType":"measure"},{"startTime":5278.52,"name":"lh:gather:getDevtoolsLog","duration":0.23,"entryType":"measure"},{"startTime":5282.33,"name":"lh:gather:afterPass:HTTPRedirect","duration":1.42,"entryType":"measure"},{"startTime":5280.45,"name":"lh:gather:afterPass","duration":3.33,"entryType":"measure"},{"startTime":5254.78,"name":"lh:gather:runPass-redirectPass","duration":29.02,"entryType":"measure"},{"startTime":5283.89,"name":"lh:gather:disconnect","duration":6.1,"entryType":"measure"},{"startTime":5291.54,"name":"lh:audit:is-on-https","duration":1.93,"entryType":"measure"},{"startTime":5293.83,"name":"lh:audit:redirects-http","duration":0.96,"entryType":"measure"},{"startTime":5295.2,"name":"lh:audit:service-worker","duration":1.26,"entryType":"measure"},{"startTime":5297.15,"name":"lh:computed:ViewportMeta","duration":0.41,"entryType":"measure"},{"startTime":5296.8,"name":"lh:audit:viewport","duration":2.54,"entryType":"measure"},{"startTime":5300.09,"name":"lh:computed:TraceOfTab","duration":5.92,"entryType":"measure"},{"startTime":5306.25,"name":"lh:computed:PageDependencyGraph","duration":1.94,"entryType":"measure"},{"startTime":5308.29,"name":"lh:computed:NetworkAnalysis","duration":0.77,"entryType":"measure"},{"startTime":5308.22,"name":"lh:computed:LoadSimulator","duration":1,"entryType":"measure"},{"startTime":5306.13,"name":"lh:computed:LanternFirstContentfulPaint","duration":6.32,"entryType":"measure"},{"startTime":5300,"name":"lh:computed:FirstContentfulPaint","duration":12.47,"entryType":"measure"},{"startTime":5299.59,"name":"lh:audit:first-contentful-paint","duration":14.15,"entryType":"measure"},{"startTime":5314.41,"name":"lh:computed:LanternLargestContentfulPaint","duration":1.62,"entryType":"measure"},{"startTime":5314.37,"name":"lh:computed:LargestContentfulPaint","duration":1.69,"entryType":"measure"},{"startTime":5314,"name":"lh:audit:largest-contentful-paint","duration":2.72,"entryType":"measure"},{"startTime":5317.34,"name":"lh:computed:LanternFirstMeaningfulPaint","duration":0.84,"entryType":"measure"},{"startTime":5317.3,"name":"lh:computed:FirstMeaningfulPaint","duration":0.91,"entryType":"measure"},{"startTime":5316.97,"name":"lh:audit:first-meaningful-paint","duration":1.87,"entryType":"measure"},{"startTime":5319.62,"name":"lh:computed:Speedline","duration":146.74,"entryType":"measure"},{"startTime":5319.58,"name":"lh:computed:LanternSpeedIndex","duration":147.65,"entryType":"measure"},{"startTime":5319.54,"name":"lh:computed:SpeedIndex","duration":147.71,"entryType":"measure"},{"startTime":5319.2,"name":"lh:audit:speed-index","duration":148.66,"entryType":"measure"},{"startTime":5467.89,"name":"lh:audit:screenshot-thumbnails","duration":137.06,"entryType":"measure"},{"startTime":5605.16,"name":"lh:computed:Screenshots","duration":0.17,"entryType":"measure"},{"startTime":5605,"name":"lh:audit:final-screenshot","duration":0.37,"entryType":"measure"},{"startTime":5606.57,"name":"lh:computed:LanternInteractive","duration":0.78,"entryType":"measure"},{"startTime":5606.5,"name":"lh:computed:LanternTotalBlockingTime","duration":1.63,"entryType":"measure"},{"startTime":5606.46,"name":"lh:computed:TotalBlockingTime","duration":1.68,"entryType":"measure"},{"startTime":5605.91,"name":"lh:audit:total-blocking-time","duration":3.19,"entryType":"measure"},{"startTime":5610.08,"name":"lh:computed:LanternMaxPotentialFID","duration":0.68,"entryType":"measure"},{"startTime":5610.04,"name":"lh:computed:MaxPotentialFID","duration":0.73,"entryType":"measure"},{"startTime":5609.54,"name":"lh:audit:max-potential-fid","duration":2.17,"entryType":"measure"},{"startTime":5612.53,"name":"lh:computed:CumulativeLayoutShift","duration":0.16,"entryType":"measure"},{"startTime":5612.09,"name":"lh:audit:cumulative-layout-shift","duration":1.3,"entryType":"measure"},{"startTime":5613.91,"name":"lh:audit:errors-in-console","duration":1.62,"entryType":"measure"},{"startTime":5616.58,"name":"lh:computed:MainResource","duration":0.1,"entryType":"measure"},{"startTime":5615.98,"name":"lh:audit:server-response-time","duration":1.77,"entryType":"measure"},{"startTime":5618.46,"name":"lh:computed:Interactive","duration":0.05,"entryType":"measure"},{"startTime":5618.08,"name":"lh:audit:interactive","duration":1.1,"entryType":"measure"},{"startTime":5619.92,"name":"lh:computed:UserTimings","duration":0.2,"entryType":"measure"},{"startTime":5619.53,"name":"lh:audit:user-timings","duration":1.37,"entryType":"measure"},{"startTime":5623.82,"name":"lh:computed:CriticalRequestChains","duration":0.32,"entryType":"measure"},{"startTime":5623.29,"name":"lh:audit:critical-request-chains","duration":2.93,"entryType":"measure"},{"startTime":5626.53,"name":"lh:audit:redirects","duration":1.24,"entryType":"measure"},{"startTime":5629.22,"name":"lh:computed:ManifestValues","duration":0.5,"entryType":"measure"},{"startTime":5628.47,"name":"lh:audit:installable-manifest","duration":2.7,"entryType":"measure"},{"startTime":5631.64,"name":"lh:audit:apple-touch-icon","duration":1.41,"entryType":"measure"},{"startTime":5633.92,"name":"lh:computed:ManifestValues","duration":0.05,"entryType":"measure"},{"startTime":5633.47,"name":"lh:audit:splash-screen","duration":3.27,"entryType":"measure"},{"startTime":5637.59,"name":"lh:computed:ManifestValues","duration":0.07,"entryType":"measure"},{"startTime":5637.14,"name":"lh:audit:themed-omnibox","duration":1.48,"entryType":"measure"},{"startTime":5639.1,"name":"lh:audit:maskable-icon","duration":1.34,"entryType":"measure"},{"startTime":5640.88,"name":"lh:audit:content-width","duration":1.25,"entryType":"measure"},{"startTime":5642.5,"name":"lh:audit:image-aspect-ratio","duration":1.2,"entryType":"measure"},{"startTime":5644.09,"name":"lh:audit:image-size-responsive","duration":1.4,"entryType":"measure"},{"startTime":5645.86,"name":"lh:audit:preload-fonts","duration":1.31,"entryType":"measure"},{"startTime":5647.51,"name":"lh:audit:deprecations","duration":0.96,"entryType":"measure"},{"startTime":5649.34,"name":"lh:computed:MainThreadTasks","duration":2.1,"entryType":"measure"},{"startTime":5648.87,"name":"lh:audit:mainthread-work-breakdown","duration":3.66,"entryType":"measure"},{"startTime":5652.92,"name":"lh:audit:bootup-time","duration":1.85,"entryType":"measure"},{"startTime":5655.49,"name":"lh:computed:LoadSimulator","duration":0.04,"entryType":"measure"},{"startTime":5655.07,"name":"lh:audit:uses-rel-preload","duration":2.15,"entryType":"measure"},{"startTime":5657.53,"name":"lh:audit:uses-rel-preconnect","duration":1.31,"entryType":"measure"},{"startTime":5659.23,"name":"lh:audit:font-display","duration":1.26,"entryType":"measure"},{"startTime":5660.52,"name":"lh:audit:diagnostics","duration":0.31,"entryType":"measure"},{"startTime":5660.85,"name":"lh:audit:network-requests","duration":0.3,"entryType":"measure"},{"startTime":5661.53,"name":"lh:audit:network-rtt","duration":1.22,"entryType":"measure"},{"startTime":5663.11,"name":"lh:audit:network-server-latency","duration":1.16,"entryType":"measure"},{"startTime":5664.29,"name":"lh:audit:main-thread-tasks","duration":0.15,"entryType":"measure"},{"startTime":5664.75,"name":"lh:computed:FirstContentfulPaintAllFrames","duration":0.06,"entryType":"measure"},{"startTime":5664.85,"name":"lh:computed:LargestContentfulPaintAllFrames","duration":0.15,"entryType":"measure"},{"startTime":5664.56,"name":"lh:computed:TimingSummary","duration":0.85,"entryType":"measure"},{"startTime":5664.46,"name":"lh:audit:metrics","duration":1.1,"entryType":"measure"},{"startTime":5666.25,"name":"lh:computed:ResourceSummary","duration":0.37,"entryType":"measure"},{"startTime":5665.9,"name":"lh:audit:performance-budget","duration":1.27,"entryType":"measure"},{"startTime":5667.48,"name":"lh:audit:timing-budget","duration":0.93,"entryType":"measure"},{"startTime":5668.72,"name":"lh:audit:resource-summary","duration":1.69,"entryType":"measure"},{"startTime":5670.96,"name":"lh:audit:third-party-summary","duration":1.92,"entryType":"measure"},{"startTime":5673.3,"name":"lh:audit:third-party-facades","duration":1.42,"entryType":"measure"},{"startTime":5674.99,"name":"lh:audit:largest-contentful-paint-element","duration":1.45,"entryType":"measure"},{"startTime":5676.68,"name":"lh:audit:layout-shift-elements","duration":0.73,"entryType":"measure"},{"startTime":5677.69,"name":"lh:audit:long-tasks","duration":1.68,"entryType":"measure"},{"startTime":5679.77,"name":"lh:audit:no-unload-listeners","duration":1.14,"entryType":"measure"},{"startTime":5681.16,"name":"lh:audit:non-composited-animations","duration":3.74,"entryType":"measure"},{"startTime":5685.27,"name":"lh:audit:unsized-images","duration":1.21,"entryType":"measure"},{"startTime":5686.95,"name":"lh:audit:valid-source-maps","duration":1.57,"entryType":"measure"},{"startTime":5689.2,"name":"lh:computed:LanternFirstContentfulPaint","duration":0.5,"entryType":"measure"},{"startTime":5689.19,"name":"lh:computed:LanternLargestContentfulPaint","duration":1.07,"entryType":"measure"},{"startTime":5688.8,"name":"lh:audit:preload-lcp-image","duration":2.13,"entryType":"measure"},{"startTime":5691.21,"name":"lh:audit:csp-xss","duration":1.01,"entryType":"measure"},{"startTime":5692.44,"name":"lh:computed:JSBundles","duration":0.07,"entryType":"measure"},{"startTime":5692.53,"name":"lh:computed:ModuleDuplication","duration":0.13,"entryType":"measure"},{"startTime":5692.69,"name":"lh:computed:UnusedJavascriptSummary","duration":1.27,"entryType":"measure"},{"startTime":5692.24,"name":"lh:audit:script-treemap-data","duration":1.75,"entryType":"measure"},{"startTime":5694.27,"name":"lh:audit:pwa-cross-browser","duration":1.25,"entryType":"measure"},{"startTime":5695.88,"name":"lh:audit:pwa-page-transitions","duration":0.82,"entryType":"measure"},{"startTime":5696.98,"name":"lh:audit:pwa-each-page-has-url","duration":0.71,"entryType":"measure"},{"startTime":5698.02,"name":"lh:audit:accesskeys","duration":1.1,"entryType":"measure"},{"startTime":5699.47,"name":"lh:audit:aria-allowed-attr","duration":4.3,"entryType":"measure"},{"startTime":5704.2,"name":"lh:audit:aria-command-name","duration":1.36,"entryType":"measure"},{"startTime":5705.93,"name":"lh:audit:aria-hidden-body","duration":4.89,"entryType":"measure"},{"startTime":5711.23,"name":"lh:audit:aria-hidden-focus","duration":4.53,"entryType":"measure"},{"startTime":5716.13,"name":"lh:audit:aria-input-field-name","duration":1.24,"entryType":"measure"},{"startTime":5717.73,"name":"lh:audit:aria-meter-name","duration":1.38,"entryType":"measure"},{"startTime":5719.47,"name":"lh:audit:aria-progressbar-name","duration":2.04,"entryType":"measure"},{"startTime":5721.85,"name":"lh:audit:aria-required-attr","duration":1.43,"entryType":"measure"},{"startTime":5723.73,"name":"lh:audit:aria-required-children","duration":2.17,"entryType":"measure"},{"startTime":5726.25,"name":"lh:audit:aria-required-parent","duration":1.73,"entryType":"measure"},{"startTime":5728.26,"name":"lh:audit:aria-roles","duration":1.45,"entryType":"measure"},{"startTime":5730.06,"name":"lh:audit:aria-toggle-field-name","duration":2.36,"entryType":"measure"},{"startTime":5732.77,"name":"lh:audit:aria-tooltip-name","duration":2.05,"entryType":"measure"},{"startTime":5735.17,"name":"lh:audit:aria-treeitem-name","duration":2.15,"entryType":"measure"},{"startTime":5737.61,"name":"lh:audit:aria-valid-attr-value","duration":3.39,"entryType":"measure"},{"startTime":5741.29,"name":"lh:audit:aria-valid-attr","duration":3.76,"entryType":"measure"},{"startTime":5745.38,"name":"lh:audit:button-name","duration":3.88,"entryType":"measure"},{"startTime":5749.59,"name":"lh:audit:bypass","duration":3.83,"entryType":"measure"},{"startTime":5753.74,"name":"lh:audit:color-contrast","duration":4.12,"entryType":"measure"},{"startTime":5758.38,"name":"lh:audit:definition-list","duration":2.6,"entryType":"measure"},{"startTime":5761.33,"name":"lh:audit:dlitem","duration":2.24,"entryType":"measure"},{"startTime":5763.9,"name":"lh:audit:document-title","duration":4.21,"entryType":"measure"},{"startTime":5768.43,"name":"lh:audit:duplicate-id-active","duration":3.69,"entryType":"measure"},{"startTime":5772.39,"name":"lh:audit:duplicate-id-aria","duration":1.86,"entryType":"measure"},{"startTime":5774.57,"name":"lh:audit:form-field-multiple-labels","duration":2.64,"entryType":"measure"},{"startTime":5777.5,"name":"lh:audit:frame-title","duration":2.08,"entryType":"measure"},{"startTime":5779.92,"name":"lh:audit:heading-order","duration":4.53,"entryType":"measure"},{"startTime":5784.91,"name":"lh:audit:html-has-lang","duration":5.66,"entryType":"measure"},{"startTime":5790.92,"name":"lh:audit:html-lang-valid","duration":3.99,"entryType":"measure"},{"startTime":5795.22,"name":"lh:audit:image-alt","duration":3.93,"entryType":"measure"},{"startTime":5799.5,"name":"lh:audit:input-image-alt","duration":2.72,"entryType":"measure"},{"startTime":5802.51,"name":"lh:audit:label","duration":2.28,"entryType":"measure"},{"startTime":5805.1,"name":"lh:audit:link-name","duration":4,"entryType":"measure"},{"startTime":5809.48,"name":"lh:audit:list","duration":4.36,"entryType":"measure"},{"startTime":5814.25,"name":"lh:audit:listitem","duration":4.18,"entryType":"measure"},{"startTime":5818.79,"name":"lh:audit:meta-refresh","duration":3.31,"entryType":"measure"},{"startTime":5822.55,"name":"lh:audit:meta-viewport","duration":5.22,"entryType":"measure"},{"startTime":5828.07,"name":"lh:audit:object-alt","duration":2.91,"entryType":"measure"},{"startTime":5831.34,"name":"lh:audit:tabindex","duration":3.65,"entryType":"measure"},{"startTime":5835.5,"name":"lh:audit:td-headers-attr","duration":5.43,"entryType":"measure"},{"startTime":5841.36,"name":"lh:audit:th-has-data-cells","duration":4.48,"entryType":"measure"},{"startTime":5846.17,"name":"lh:audit:valid-lang","duration":3.58,"entryType":"measure"},{"startTime":5850.09,"name":"lh:audit:video-caption","duration":3.91,"entryType":"measure"},{"startTime":5854.04,"name":"lh:audit:custom-controls-labels","duration":0.04,"entryType":"measure"},{"startTime":5854.1,"name":"lh:audit:custom-controls-roles","duration":0.03,"entryType":"measure"},{"startTime":5854.14,"name":"lh:audit:focus-traps","duration":0.03,"entryType":"measure"},{"startTime":5854.19,"name":"lh:audit:focusable-controls","duration":0.02,"entryType":"measure"},{"startTime":5854.23,"name":"lh:audit:interactive-element-affordance","duration":0.02,"entryType":"measure"},{"startTime":5854.27,"name":"lh:audit:logical-tab-order","duration":0.02,"entryType":"measure"},{"startTime":5854.31,"name":"lh:audit:managed-focus","duration":0.02,"entryType":"measure"},{"startTime":5854.35,"name":"lh:audit:offscreen-content-hidden","duration":0.02,"entryType":"measure"},{"startTime":5854.39,"name":"lh:audit:use-landmarks","duration":0.02,"entryType":"measure"},{"startTime":5854.43,"name":"lh:audit:visual-order-follows-dom","duration":0.02,"entryType":"measure"},{"startTime":5854.73,"name":"lh:audit:total-byte-weight","duration":1.13,"entryType":"measure"},{"startTime":5856.11,"name":"lh:audit:offscreen-images","duration":1.82,"entryType":"measure"},{"startTime":5858.64,"name":"lh:computed:UnusedCSS","duration":0.29,"entryType":"measure"},{"startTime":5859,"name":"lh:computed:LanternFirstContentfulPaint","duration":0.48,"entryType":"measure"},{"startTime":5858.97,"name":"lh:computed:FirstContentfulPaint","duration":0.53,"entryType":"measure"},{"startTime":5858.19,"name":"lh:audit:render-blocking-resources","duration":2.37,"entryType":"measure"},{"startTime":5860.75,"name":"lh:audit:unminified-css","duration":6.61,"entryType":"measure"},{"startTime":5867.57,"name":"lh:audit:unminified-javascript","duration":15.07,"entryType":"measure"},{"startTime":5882.91,"name":"lh:audit:unused-css-rules","duration":1.39,"entryType":"measure"},{"startTime":5884.93,"name":"lh:computed:JSBundles","duration":0.03,"entryType":"measure"},{"startTime":5884.54,"name":"lh:audit:unused-javascript","duration":1.82,"entryType":"measure"},{"startTime":5886.64,"name":"lh:audit:modern-image-formats","duration":1.33,"entryType":"measure"},{"startTime":5888.17,"name":"lh:audit:uses-optimized-images","duration":1.09,"entryType":"measure"},{"startTime":5889.47,"name":"lh:audit:uses-responsive-images","duration":1.2,"entryType":"measure"},{"startTime":5890.95,"name":"lh:audit:efficient-animated-content","duration":1.37,"entryType":"measure"},{"startTime":5893,"name":"lh:computed:JSBundles","duration":0.03,"entryType":"measure"},{"startTime":5892.99,"name":"lh:computed:ModuleDuplication","duration":0.07,"entryType":"measure"},{"startTime":5892.55,"name":"lh:audit:duplicated-javascript","duration":1.34,"entryType":"measure"},{"startTime":5894.3,"name":"lh:audit:legacy-javascript","duration":7.21,"entryType":"measure"},{"startTime":5901.77,"name":"lh:audit:appcache-manifest","duration":0.57,"entryType":"measure"},{"startTime":5902.61,"name":"lh:audit:doctype","duration":0.72,"entryType":"measure"},{"startTime":5903.68,"name":"lh:audit:charset","duration":1.13,"entryType":"measure"},{"startTime":5905.15,"name":"lh:audit:dom-size","duration":1.69,"entryType":"measure"},{"startTime":5907.16,"name":"lh:audit:external-anchors-use-rel-noopener","duration":0.95,"entryType":"measure"},{"startTime":5908.46,"name":"lh:audit:geolocation-on-start","duration":0.99,"entryType":"measure"},{"startTime":5909.85,"name":"lh:audit:inspector-issues","duration":1.15,"entryType":"measure"},{"startTime":5911.28,"name":"lh:audit:no-document-write","duration":0.78,"entryType":"measure"},{"startTime":5912.41,"name":"lh:audit:no-vulnerable-libraries","duration":1.12,"entryType":"measure"},{"startTime":5913.72,"name":"lh:audit:js-libraries","duration":0.59,"entryType":"measure"},{"startTime":5914.65,"name":"lh:audit:notification-on-start","duration":0.96,"entryType":"measure"},{"startTime":5915.88,"name":"lh:audit:password-inputs-can-be-pasted-into","duration":0.75,"entryType":"measure"},{"startTime":5916.83,"name":"lh:audit:uses-http2","duration":1.25,"entryType":"measure"},{"startTime":5918.41,"name":"lh:audit:uses-passive-event-listeners","duration":1.22,"entryType":"measure"},{"startTime":5919.91,"name":"lh:audit:meta-description","duration":0.77,"entryType":"measure"},{"startTime":5920.95,"name":"lh:audit:http-status-code","duration":0.75,"entryType":"measure"},{"startTime":5922.05,"name":"lh:audit:font-size","duration":1.44,"entryType":"measure"},{"startTime":5923.75,"name":"lh:audit:link-text","duration":0.99,"entryType":"measure"},{"startTime":5925.08,"name":"lh:audit:crawlable-anchors","duration":1.2,"entryType":"measure"},{"startTime":5926.59,"name":"lh:audit:is-crawlable","duration":0.95,"entryType":"measure"},{"startTime":5927.83,"name":"lh:audit:robots-txt","duration":0.82,"entryType":"measure"},{"startTime":5928.99,"name":"lh:audit:tap-targets","duration":1.97,"entryType":"measure"},{"startTime":5931.27,"name":"lh:audit:hreflang","duration":1.01,"entryType":"measure"},{"startTime":5932.56,"name":"lh:audit:plugins","duration":0.8,"entryType":"measure"},{"startTime":5933.91,"name":"lh:audit:canonical","duration":0.99,"entryType":"measure"},{"startTime":5935.17,"name":"lh:audit:structured-data","duration":0.64,"entryType":"measure"},{"startTime":5290.23,"name":"lh:runner:auditing","duration":645.6,"entryType":"measure"},{"startTime":5935.85,"name":"lh:runner:generate","duration":0.45,"entryType":"measure"},{"startTime":1047.15,"name":"lh:runner:run","duration":4889.18,"entryType":"measure"}],"total":4889.18},"i18n":{"rendererFormattedStrings":{"calculatorLink":"See calculator.","crcInitialNavigation":"Initial Navigation","crcLongestDurationLabel":"Maximum critical path latency:","dropdownCopyJSON":"Copy JSON","dropdownDarkTheme":"Toggle Dark Theme","dropdownPrintExpanded":"Print Expanded","dropdownPrintSummary":"Print Summary","dropdownSaveGist":"Save as Gist","dropdownSaveHTML":"Save as HTML","dropdownSaveJSON":"Save as JSON","dropdownViewer":"Open in Viewer","errorLabel":"Error!","errorMissingAuditInfo":"Report error: no audit information","footerIssue":"File an issue","labDataTitle":"Lab Data","lsPerformanceCategoryDescription":"[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.","manualAuditsGroupTitle":"Additional items to manually check","notApplicableAuditsGroupTitle":"Not applicable","opportunityResourceColumnLabel":"Opportunity","opportunitySavingsColumnLabel":"Estimated Savings","passedAuditsGroupTitle":"Passed audits","runtimeDesktopEmulation":"Emulated Desktop","runtimeMobileEmulation":"Emulated Moto G4","runtimeNoEmulation":"No emulation","runtimeSettingsAxeVersion":"Axe version","runtimeSettingsBenchmark":"CPU/Memory Power","runtimeSettingsChannel":"Channel","runtimeSettingsCPUThrottling":"CPU throttling","runtimeSettingsDevice":"Device","runtimeSettingsFetchTime":"Fetch Time","runtimeSettingsNetworkThrottling":"Network throttling","runtimeSettingsTitle":"Runtime Settings","runtimeSettingsUA":"User agent (host)","runtimeSettingsUANetwork":"User agent (network)","runtimeSettingsUrl":"URL","runtimeUnknown":"Unknown","showRelevantAudits":"Show audits relevant to:","snippetCollapseButtonLabel":"Collapse snippet","snippetExpandButtonLabel":"Expand snippet","thirdPartyResourcesLabel":"Show 3rd-party resources","throttlingProvided":"Provided by environment","toplevelWarningsMessage":"There were issues affecting this run of Lighthouse:","varianceDisclaimer":"Values are estimated and may vary. The [performance score is calculated](https://web.dev/performance-scoring/) directly from these metrics.","viewTreemapLabel":"View Treemap","warningAuditsGroupTitle":"Passed audits but with warnings","warningHeader":"Warnings: "},"icuMessagePaths":{"lighthouse-core/audits/is-on-https.js | title":["audits[is-on-https].title"],"lighthouse-core/audits/is-on-https.js | description":["audits[is-on-https].description"],"lighthouse-core/audits/redirects-http.js | title":["audits[redirects-http].title"],"lighthouse-core/audits/redirects-http.js | description":["audits[redirects-http].description"],"lighthouse-core/audits/service-worker.js | failureTitle":["audits[service-worker].title"],"lighthouse-core/audits/service-worker.js | description":["audits[service-worker].description"],"lighthouse-core/audits/viewport.js | title":["audits.viewport.title"],"lighthouse-core/audits/viewport.js | description":["audits.viewport.description"],"lighthouse-core/lib/i18n/i18n.js | firstContentfulPaintMetric":["audits[first-contentful-paint].title"],"lighthouse-core/audits/metrics/first-contentful-paint.js | description":["audits[first-contentful-paint].description"],"lighthouse-core/lib/i18n/i18n.js | seconds":[{"values":{"timeInMs":1369},"path":"audits[first-contentful-paint].displayValue"},{"values":{"timeInMs":1500},"path":"audits[largest-contentful-paint].displayValue"},{"values":{"timeInMs":1369},"path":"audits[first-meaningful-paint].displayValue"},{"values":{"timeInMs":1369},"path":"audits[speed-index].displayValue"},{"values":{"timeInMs":1399.5},"path":"audits.interactive.displayValue"},{"values":{"timeInMs":1452.7759999999998},"path":"audits[mainthread-work-breakdown].displayValue"},{"values":{"timeInMs":5.332000000000001},"path":"audits[bootup-time].displayValue"}],"lighthouse-core/lib/i18n/i18n.js | largestContentfulPaintMetric":["audits[largest-contentful-paint].title"],"lighthouse-core/audits/metrics/largest-contentful-paint.js | description":["audits[largest-contentful-paint].description"],"lighthouse-core/lib/i18n/i18n.js | firstMeaningfulPaintMetric":["audits[first-meaningful-paint].title"],"lighthouse-core/audits/metrics/first-meaningful-paint.js | description":["audits[first-meaningful-paint].description"],"lighthouse-core/lib/i18n/i18n.js | speedIndexMetric":["audits[speed-index].title"],"lighthouse-core/audits/metrics/speed-index.js | description":["audits[speed-index].description"],"lighthouse-core/lib/i18n/i18n.js | totalBlockingTimeMetric":["audits[total-blocking-time].title"],"lighthouse-core/audits/metrics/total-blocking-time.js | description":["audits[total-blocking-time].description"],"lighthouse-core/lib/i18n/i18n.js | ms":[{"values":{"timeInMs":5.5},"path":"audits[total-blocking-time].displayValue"},{"values":{"timeInMs":61},"path":"audits[max-potential-fid].displayValue"},{"values":{"timeInMs":0.25600000000000006},"path":"audits[network-rtt].displayValue"},{"values":{"timeInMs":0},"path":"audits[network-server-latency].displayValue"}],"lighthouse-core/lib/i18n/i18n.js | maxPotentialFIDMetric":["audits[max-potential-fid].title"],"lighthouse-core/audits/metrics/max-potential-fid.js | description":["audits[max-potential-fid].description"],"lighthouse-core/lib/i18n/i18n.js | cumulativeLayoutShiftMetric":["audits[cumulative-layout-shift].title"],"lighthouse-core/audits/metrics/cumulative-layout-shift.js | description":["audits[cumulative-layout-shift].description"],"lighthouse-core/audits/errors-in-console.js | title":["audits[errors-in-console].title"],"lighthouse-core/audits/errors-in-console.js | description":["audits[errors-in-console].description"],"lighthouse-core/audits/server-response-time.js | title":["audits[server-response-time].title"],"lighthouse-core/audits/server-response-time.js | description":["audits[server-response-time].description"],"lighthouse-core/audits/server-response-time.js | displayValue":[{"values":{"timeInMs":0.26200000000000045},"path":"audits[server-response-time].displayValue"}],"lighthouse-core/lib/i18n/i18n.js | columnURL":["audits[server-response-time].details.headings[0].label","audits[bootup-time].details.headings[0].text","audits[network-rtt].details.headings[0].text","audits[network-server-latency].details.headings[0].text","audits[long-tasks].details.headings[0].text","audits[total-byte-weight].details.headings[0].text","audits[render-blocking-resources].details.headings[0].label","audits[unused-css-rules].details.headings[0].label","audits[unused-javascript].details.headings[0].label","audits[legacy-javascript].details.headings[0].label"],"lighthouse-core/lib/i18n/i18n.js | columnTimeSpent":["audits[server-response-time].details.headings[1].label","audits[mainthread-work-breakdown].details.headings[1].text","audits[network-rtt].details.headings[1].text","audits[network-server-latency].details.headings[1].text"],"lighthouse-core/lib/i18n/i18n.js | interactiveMetric":["audits.interactive.title"],"lighthouse-core/audits/metrics/interactive.js | description":["audits.interactive.description"],"lighthouse-core/audits/user-timings.js | title":["audits[user-timings].title"],"lighthouse-core/audits/user-timings.js | description":["audits[user-timings].description"],"lighthouse-core/audits/critical-request-chains.js | title":["audits[critical-request-chains].title"],"lighthouse-core/audits/critical-request-chains.js | description":["audits[critical-request-chains].description"],"lighthouse-core/audits/critical-request-chains.js | displayValue":[{"values":{"itemCount":1},"path":"audits[critical-request-chains].displayValue"}],"lighthouse-core/audits/redirects.js | title":["audits.redirects.title"],"lighthouse-core/audits/redirects.js | description":["audits.redirects.description"],"lighthouse-core/audits/installable-manifest.js | title":["audits[installable-manifest].title"],"lighthouse-core/audits/installable-manifest.js | description":["audits[installable-manifest].description"],"lighthouse-core/audits/apple-touch-icon.js | title":["audits[apple-touch-icon].title"],"lighthouse-core/audits/apple-touch-icon.js | description":["audits[apple-touch-icon].description"],"lighthouse-core/audits/splash-screen.js | title":["audits[splash-screen].title"],"lighthouse-core/audits/splash-screen.js | description":["audits[splash-screen].description"],"lighthouse-core/audits/themed-omnibox.js | failureTitle":["audits[themed-omnibox].title"],"lighthouse-core/audits/themed-omnibox.js | description":["audits[themed-omnibox].description"],"lighthouse-core/audits/maskable-icon.js | title":["audits[maskable-icon].title"],"lighthouse-core/audits/maskable-icon.js | description":["audits[maskable-icon].description"],"lighthouse-core/audits/content-width.js | title":["audits[content-width].title"],"lighthouse-core/audits/content-width.js | description":["audits[content-width].description"],"lighthouse-core/audits/image-aspect-ratio.js | title":["audits[image-aspect-ratio].title"],"lighthouse-core/audits/image-aspect-ratio.js | description":["audits[image-aspect-ratio].description"],"lighthouse-core/audits/image-size-responsive.js | title":["audits[image-size-responsive].title"],"lighthouse-core/audits/image-size-responsive.js | description":["audits[image-size-responsive].description"],"lighthouse-core/audits/preload-fonts.js | title":["audits[preload-fonts].title"],"lighthouse-core/audits/preload-fonts.js | description":["audits[preload-fonts].description"],"lighthouse-core/audits/deprecations.js | title":["audits.deprecations.title"],"lighthouse-core/audits/deprecations.js | description":["audits.deprecations.description"],"lighthouse-core/audits/mainthread-work-breakdown.js | title":["audits[mainthread-work-breakdown].title"],"lighthouse-core/audits/mainthread-work-breakdown.js | description":["audits[mainthread-work-breakdown].description"],"lighthouse-core/audits/mainthread-work-breakdown.js | columnCategory":["audits[mainthread-work-breakdown].details.headings[0].text"],"lighthouse-core/audits/bootup-time.js | title":["audits[bootup-time].title"],"lighthouse-core/audits/bootup-time.js | description":["audits[bootup-time].description"],"lighthouse-core/audits/bootup-time.js | columnTotal":["audits[bootup-time].details.headings[1].text"],"lighthouse-core/audits/bootup-time.js | columnScriptEval":["audits[bootup-time].details.headings[2].text"],"lighthouse-core/audits/bootup-time.js | columnScriptParse":["audits[bootup-time].details.headings[3].text"],"lighthouse-core/audits/uses-rel-preload.js | title":["audits[uses-rel-preload].title"],"lighthouse-core/audits/uses-rel-preload.js | description":["audits[uses-rel-preload].description"],"lighthouse-core/audits/uses-rel-preconnect.js | title":["audits[uses-rel-preconnect].title"],"lighthouse-core/audits/uses-rel-preconnect.js | description":["audits[uses-rel-preconnect].description"],"lighthouse-core/audits/font-display.js | title":["audits[font-display].title"],"lighthouse-core/audits/font-display.js | description":["audits[font-display].description"],"lighthouse-core/audits/network-rtt.js | title":["audits[network-rtt].title"],"lighthouse-core/audits/network-rtt.js | description":["audits[network-rtt].description"],"lighthouse-core/audits/network-server-latency.js | title":["audits[network-server-latency].title"],"lighthouse-core/audits/network-server-latency.js | description":["audits[network-server-latency].description"],"lighthouse-core/audits/performance-budget.js | title":["audits[performance-budget].title"],"lighthouse-core/audits/performance-budget.js | description":["audits[performance-budget].description"],"lighthouse-core/audits/timing-budget.js | title":["audits[timing-budget].title"],"lighthouse-core/audits/timing-budget.js | description":["audits[timing-budget].description"],"lighthouse-core/audits/resource-summary.js | title":["audits[resource-summary].title"],"lighthouse-core/audits/resource-summary.js | description":["audits[resource-summary].description"],"lighthouse-core/audits/resource-summary.js | displayValue":[{"values":{"requestCount":4,"byteCount":93852},"path":"audits[resource-summary].displayValue"}],"lighthouse-core/lib/i18n/i18n.js | columnResourceType":["audits[resource-summary].details.headings[0].text"],"lighthouse-core/lib/i18n/i18n.js | columnRequests":["audits[resource-summary].details.headings[1].text"],"lighthouse-core/lib/i18n/i18n.js | columnTransferSize":["audits[resource-summary].details.headings[2].text","audits[total-byte-weight].details.headings[1].text","audits[render-blocking-resources].details.headings[1].label","audits[unused-css-rules].details.headings[1].label","audits[unused-javascript].details.headings[1].label"],"lighthouse-core/lib/i18n/i18n.js | totalResourceType":["audits[resource-summary].details.items[0].label"],"lighthouse-core/lib/i18n/i18n.js | stylesheetResourceType":["audits[resource-summary].details.items[1].label"],"lighthouse-core/lib/i18n/i18n.js | scriptResourceType":["audits[resource-summary].details.items[2].label"],"lighthouse-core/lib/i18n/i18n.js | documentResourceType":["audits[resource-summary].details.items[3].label"],"lighthouse-core/lib/i18n/i18n.js | imageResourceType":["audits[resource-summary].details.items[4].label"],"lighthouse-core/lib/i18n/i18n.js | mediaResourceType":["audits[resource-summary].details.items[5].label"],"lighthouse-core/lib/i18n/i18n.js | fontResourceType":["audits[resource-summary].details.items[6].label"],"lighthouse-core/lib/i18n/i18n.js | otherResourceType":["audits[resource-summary].details.items[7].label"],"lighthouse-core/lib/i18n/i18n.js | thirdPartyResourceType":["audits[resource-summary].details.items[8].label"],"lighthouse-core/audits/third-party-summary.js | title":["audits[third-party-summary].title"],"lighthouse-core/audits/third-party-summary.js | description":["audits[third-party-summary].description"],"lighthouse-core/audits/third-party-facades.js | title":["audits[third-party-facades].title"],"lighthouse-core/audits/third-party-facades.js | description":["audits[third-party-facades].description"],"lighthouse-core/audits/largest-contentful-paint-element.js | title":["audits[largest-contentful-paint-element].title"],"lighthouse-core/audits/largest-contentful-paint-element.js | description":["audits[largest-contentful-paint-element].description"],"lighthouse-core/lib/i18n/i18n.js | displayValueElementsFound":[{"values":{"nodeCount":1},"path":"audits[largest-contentful-paint-element].displayValue"}],"lighthouse-core/lib/i18n/i18n.js | columnElement":["audits[largest-contentful-paint-element].details.headings[0].text","audits[non-composited-animations].details.headings[0].text","audits[dom-size].details.headings[1].text"],"lighthouse-core/audits/layout-shift-elements.js | title":["audits[layout-shift-elements].title"],"lighthouse-core/audits/layout-shift-elements.js | description":["audits[layout-shift-elements].description"],"lighthouse-core/audits/long-tasks.js | title":["audits[long-tasks].title"],"lighthouse-core/audits/long-tasks.js | description":["audits[long-tasks].description"],"lighthouse-core/audits/long-tasks.js | displayValue":[{"values":{"itemCount":2},"path":"audits[long-tasks].displayValue"}],"lighthouse-core/lib/i18n/i18n.js | columnStartTime":["audits[long-tasks].details.headings[1].text"],"lighthouse-core/lib/i18n/i18n.js | columnDuration":["audits[long-tasks].details.headings[2].text"],"lighthouse-core/audits/no-unload-listeners.js | title":["audits[no-unload-listeners].title"],"lighthouse-core/audits/no-unload-listeners.js | description":["audits[no-unload-listeners].description"],"lighthouse-core/audits/non-composited-animations.js | title":["audits[non-composited-animations].title"],"lighthouse-core/audits/non-composited-animations.js | description":["audits[non-composited-animations].description"],"lighthouse-core/audits/non-composited-animations.js | displayValue":[{"values":{"itemCount":18},"path":"audits[non-composited-animations].displayValue"}],"lighthouse-core/lib/i18n/i18n.js | columnName":["audits[non-composited-animations].details.headings[1].text","audits[js-libraries].details.headings[0].text"],"lighthouse-core/audits/non-composited-animations.js | unsupportedCSSProperty":[{"values":{"propertyCount":1,"properties":"background-color"},"path":"audits[non-composited-animations].details.items[0].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[0].subItems.items[1].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[1].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[2].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[3].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[4].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[5].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[6].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[7].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[8].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"text-decoration-color"},"path":"audits[non-composited-animations].details.items[8].subItems.items[1].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[9].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"text-decoration-color"},"path":"audits[non-composited-animations].details.items[9].subItems.items[1].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[10].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[11].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[12].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[13].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[14].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[15].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[16].subItems.items[0].failureReason"},{"values":{"propertyCount":1,"properties":"color"},"path":"audits[non-composited-animations].details.items[17].subItems.items[0].failureReason"}],"lighthouse-core/audits/unsized-images.js | title":["audits[unsized-images].title"],"lighthouse-core/audits/unsized-images.js | description":["audits[unsized-images].description"],"lighthouse-core/audits/valid-source-maps.js | title":["audits[valid-source-maps].title"],"lighthouse-core/audits/valid-source-maps.js | description":["audits[valid-source-maps].description"],"lighthouse-core/audits/preload-lcp-image.js | title":["audits[preload-lcp-image].title"],"lighthouse-core/audits/preload-lcp-image.js | description":["audits[preload-lcp-image].description"],"lighthouse-core/audits/csp-xss.js | title":["audits[csp-xss].title"],"lighthouse-core/audits/csp-xss.js | description":["audits[csp-xss].description"],"lighthouse-core/lib/i18n/i18n.js | columnDescription":["audits[csp-xss].details.headings[0].text"],"lighthouse-core/audits/csp-xss.js | columnDirective":["audits[csp-xss].details.headings[1].text"],"lighthouse-core/audits/csp-xss.js | columnSeverity":["audits[csp-xss].details.headings[2].text"],"lighthouse-core/lib/i18n/i18n.js | itemSeverityHigh":["audits[csp-xss].details.items[0].severity"],"lighthouse-core/audits/csp-xss.js | noCsp":["audits[csp-xss].details.items[0].description"],"lighthouse-core/audits/manual/pwa-cross-browser.js | title":["audits[pwa-cross-browser].title"],"lighthouse-core/audits/manual/pwa-cross-browser.js | description":["audits[pwa-cross-browser].description"],"lighthouse-core/audits/manual/pwa-page-transitions.js | title":["audits[pwa-page-transitions].title"],"lighthouse-core/audits/manual/pwa-page-transitions.js | description":["audits[pwa-page-transitions].description"],"lighthouse-core/audits/manual/pwa-each-page-has-url.js | title":["audits[pwa-each-page-has-url].title"],"lighthouse-core/audits/manual/pwa-each-page-has-url.js | description":["audits[pwa-each-page-has-url].description"],"lighthouse-core/audits/accessibility/accesskeys.js | title":["audits.accesskeys.title"],"lighthouse-core/audits/accessibility/accesskeys.js | description":["audits.accesskeys.description"],"lighthouse-core/audits/accessibility/aria-allowed-attr.js | title":["audits[aria-allowed-attr].title"],"lighthouse-core/audits/accessibility/aria-allowed-attr.js | description":["audits[aria-allowed-attr].description"],"lighthouse-core/audits/accessibility/aria-command-name.js | title":["audits[aria-command-name].title"],"lighthouse-core/audits/accessibility/aria-command-name.js | description":["audits[aria-command-name].description"],"lighthouse-core/audits/accessibility/aria-hidden-body.js | title":["audits[aria-hidden-body].title"],"lighthouse-core/audits/accessibility/aria-hidden-body.js | description":["audits[aria-hidden-body].description"],"lighthouse-core/audits/accessibility/aria-hidden-focus.js | title":["audits[aria-hidden-focus].title"],"lighthouse-core/audits/accessibility/aria-hidden-focus.js | description":["audits[aria-hidden-focus].description"],"lighthouse-core/audits/accessibility/aria-input-field-name.js | title":["audits[aria-input-field-name].title"],"lighthouse-core/audits/accessibility/aria-input-field-name.js | description":["audits[aria-input-field-name].description"],"lighthouse-core/audits/accessibility/aria-meter-name.js | title":["audits[aria-meter-name].title"],"lighthouse-core/audits/accessibility/aria-meter-name.js | description":["audits[aria-meter-name].description"],"lighthouse-core/audits/accessibility/aria-progressbar-name.js | title":["audits[aria-progressbar-name].title"],"lighthouse-core/audits/accessibility/aria-progressbar-name.js | description":["audits[aria-progressbar-name].description"],"lighthouse-core/audits/accessibility/aria-required-attr.js | title":["audits[aria-required-attr].title"],"lighthouse-core/audits/accessibility/aria-required-attr.js | description":["audits[aria-required-attr].description"],"lighthouse-core/audits/accessibility/aria-required-children.js | title":["audits[aria-required-children].title"],"lighthouse-core/audits/accessibility/aria-required-children.js | description":["audits[aria-required-children].description"],"lighthouse-core/audits/accessibility/aria-required-parent.js | title":["audits[aria-required-parent].title"],"lighthouse-core/audits/accessibility/aria-required-parent.js | description":["audits[aria-required-parent].description"],"lighthouse-core/audits/accessibility/aria-roles.js | title":["audits[aria-roles].title"],"lighthouse-core/audits/accessibility/aria-roles.js | description":["audits[aria-roles].description"],"lighthouse-core/audits/accessibility/aria-toggle-field-name.js | title":["audits[aria-toggle-field-name].title"],"lighthouse-core/audits/accessibility/aria-toggle-field-name.js | description":["audits[aria-toggle-field-name].description"],"lighthouse-core/audits/accessibility/aria-tooltip-name.js | title":["audits[aria-tooltip-name].title"],"lighthouse-core/audits/accessibility/aria-tooltip-name.js | description":["audits[aria-tooltip-name].description"],"lighthouse-core/audits/accessibility/aria-treeitem-name.js | title":["audits[aria-treeitem-name].title"],"lighthouse-core/audits/accessibility/aria-treeitem-name.js | description":["audits[aria-treeitem-name].description"],"lighthouse-core/audits/accessibility/aria-valid-attr-value.js | title":["audits[aria-valid-attr-value].title"],"lighthouse-core/audits/accessibility/aria-valid-attr-value.js | description":["audits[aria-valid-attr-value].description"],"lighthouse-core/audits/accessibility/aria-valid-attr.js | title":["audits[aria-valid-attr].title"],"lighthouse-core/audits/accessibility/aria-valid-attr.js | description":["audits[aria-valid-attr].description"],"lighthouse-core/audits/accessibility/button-name.js | title":["audits[button-name].title"],"lighthouse-core/audits/accessibility/button-name.js | description":["audits[button-name].description"],"lighthouse-core/audits/accessibility/bypass.js | title":["audits.bypass.title"],"lighthouse-core/audits/accessibility/bypass.js | description":["audits.bypass.description"],"lighthouse-core/audits/accessibility/color-contrast.js | title":["audits[color-contrast].title"],"lighthouse-core/audits/accessibility/color-contrast.js | description":["audits[color-contrast].description"],"lighthouse-core/audits/accessibility/definition-list.js | title":["audits[definition-list].title"],"lighthouse-core/audits/accessibility/definition-list.js | description":["audits[definition-list].description"],"lighthouse-core/audits/accessibility/dlitem.js | title":["audits.dlitem.title"],"lighthouse-core/audits/accessibility/dlitem.js | description":["audits.dlitem.description"],"lighthouse-core/audits/accessibility/document-title.js | title":["audits[document-title].title"],"lighthouse-core/audits/accessibility/document-title.js | description":["audits[document-title].description"],"lighthouse-core/audits/accessibility/duplicate-id-active.js | title":["audits[duplicate-id-active].title"],"lighthouse-core/audits/accessibility/duplicate-id-active.js | description":["audits[duplicate-id-active].description"],"lighthouse-core/audits/accessibility/duplicate-id-aria.js | title":["audits[duplicate-id-aria].title"],"lighthouse-core/audits/accessibility/duplicate-id-aria.js | description":["audits[duplicate-id-aria].description"],"lighthouse-core/audits/accessibility/form-field-multiple-labels.js | title":["audits[form-field-multiple-labels].title"],"lighthouse-core/audits/accessibility/form-field-multiple-labels.js | description":["audits[form-field-multiple-labels].description"],"lighthouse-core/audits/accessibility/frame-title.js | title":["audits[frame-title].title"],"lighthouse-core/audits/accessibility/frame-title.js | description":["audits[frame-title].description"],"lighthouse-core/audits/accessibility/heading-order.js | title":["audits[heading-order].title"],"lighthouse-core/audits/accessibility/heading-order.js | description":["audits[heading-order].description"],"lighthouse-core/audits/accessibility/html-has-lang.js | title":["audits[html-has-lang].title"],"lighthouse-core/audits/accessibility/html-has-lang.js | description":["audits[html-has-lang].description"],"lighthouse-core/audits/accessibility/html-lang-valid.js | title":["audits[html-lang-valid].title"],"lighthouse-core/audits/accessibility/html-lang-valid.js | description":["audits[html-lang-valid].description"],"lighthouse-core/audits/accessibility/image-alt.js | title":["audits[image-alt].title"],"lighthouse-core/audits/accessibility/image-alt.js | description":["audits[image-alt].description"],"lighthouse-core/audits/accessibility/input-image-alt.js | title":["audits[input-image-alt].title"],"lighthouse-core/audits/accessibility/input-image-alt.js | description":["audits[input-image-alt].description"],"lighthouse-core/audits/accessibility/label.js | title":["audits.label.title"],"lighthouse-core/audits/accessibility/label.js | description":["audits.label.description"],"lighthouse-core/audits/accessibility/link-name.js | title":["audits[link-name].title"],"lighthouse-core/audits/accessibility/link-name.js | description":["audits[link-name].description"],"lighthouse-core/audits/accessibility/list.js | title":["audits.list.title"],"lighthouse-core/audits/accessibility/list.js | description":["audits.list.description"],"lighthouse-core/audits/accessibility/listitem.js | title":["audits.listitem.title"],"lighthouse-core/audits/accessibility/listitem.js | description":["audits.listitem.description"],"lighthouse-core/audits/accessibility/meta-refresh.js | title":["audits[meta-refresh].title"],"lighthouse-core/audits/accessibility/meta-refresh.js | description":["audits[meta-refresh].description"],"lighthouse-core/audits/accessibility/meta-viewport.js | title":["audits[meta-viewport].title"],"lighthouse-core/audits/accessibility/meta-viewport.js | description":["audits[meta-viewport].description"],"lighthouse-core/audits/accessibility/object-alt.js | title":["audits[object-alt].title"],"lighthouse-core/audits/accessibility/object-alt.js | description":["audits[object-alt].description"],"lighthouse-core/audits/accessibility/tabindex.js | title":["audits.tabindex.title"],"lighthouse-core/audits/accessibility/tabindex.js | description":["audits.tabindex.description"],"lighthouse-core/audits/accessibility/td-headers-attr.js | title":["audits[td-headers-attr].title"],"lighthouse-core/audits/accessibility/td-headers-attr.js | description":["audits[td-headers-attr].description"],"lighthouse-core/audits/accessibility/th-has-data-cells.js | title":["audits[th-has-data-cells].title"],"lighthouse-core/audits/accessibility/th-has-data-cells.js | description":["audits[th-has-data-cells].description"],"lighthouse-core/audits/accessibility/valid-lang.js | title":["audits[valid-lang].title"],"lighthouse-core/audits/accessibility/valid-lang.js | description":["audits[valid-lang].description"],"lighthouse-core/audits/accessibility/video-caption.js | title":["audits[video-caption].title"],"lighthouse-core/audits/accessibility/video-caption.js | description":["audits[video-caption].description"],"lighthouse-core/audits/byte-efficiency/total-byte-weight.js | title":["audits[total-byte-weight].title"],"lighthouse-core/audits/byte-efficiency/total-byte-weight.js | description":["audits[total-byte-weight].description"],"lighthouse-core/audits/byte-efficiency/total-byte-weight.js | displayValue":[{"values":{"totalBytes":93852},"path":"audits[total-byte-weight].displayValue"}],"lighthouse-core/audits/byte-efficiency/offscreen-images.js | title":["audits[offscreen-images].title"],"lighthouse-core/audits/byte-efficiency/offscreen-images.js | description":["audits[offscreen-images].description"],"lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | title":["audits[render-blocking-resources].title"],"lighthouse-core/audits/byte-efficiency/render-blocking-resources.js | description":["audits[render-blocking-resources].description"],"lighthouse-core/lib/i18n/i18n.js | displayValueMsSavings":[{"values":{"wastedMs":0},"path":"audits[render-blocking-resources].displayValue"}],"lighthouse-core/lib/i18n/i18n.js | columnWastedBytes":["audits[render-blocking-resources].details.headings[2].label","audits[unused-css-rules].details.headings[2].label","audits[unused-javascript].details.headings[2].label","audits[legacy-javascript].details.headings[2].label"],"lighthouse-core/audits/byte-efficiency/unminified-css.js | title":["audits[unminified-css].title"],"lighthouse-core/audits/byte-efficiency/unminified-css.js | description":["audits[unminified-css].description"],"lighthouse-core/audits/byte-efficiency/unminified-javascript.js | title":["audits[unminified-javascript].title"],"lighthouse-core/audits/byte-efficiency/unminified-javascript.js | description":["audits[unminified-javascript].description"],"lighthouse-core/audits/byte-efficiency/unused-css-rules.js | title":["audits[unused-css-rules].title"],"lighthouse-core/audits/byte-efficiency/unused-css-rules.js | description":["audits[unused-css-rules].description"],"lighthouse-core/lib/i18n/i18n.js | displayValueByteSavings":[{"values":{"wastedBytes":28581},"path":"audits[unused-css-rules].displayValue"},{"values":{"wastedBytes":21903},"path":"audits[unused-javascript].displayValue"},{"values":{"wastedBytes":168},"path":"audits[legacy-javascript].displayValue"}],"lighthouse-core/audits/byte-efficiency/unused-javascript.js | title":["audits[unused-javascript].title"],"lighthouse-core/audits/byte-efficiency/unused-javascript.js | description":["audits[unused-javascript].description"],"lighthouse-core/audits/byte-efficiency/modern-image-formats.js | title":["audits[modern-image-formats].title"],"lighthouse-core/audits/byte-efficiency/modern-image-formats.js | description":["audits[modern-image-formats].description"],"lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | title":["audits[uses-optimized-images].title"],"lighthouse-core/audits/byte-efficiency/uses-optimized-images.js | description":["audits[uses-optimized-images].description"],"lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | title":["audits[uses-responsive-images].title"],"lighthouse-core/audits/byte-efficiency/uses-responsive-images.js | description":["audits[uses-responsive-images].description"],"lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | title":["audits[efficient-animated-content].title"],"lighthouse-core/audits/byte-efficiency/efficient-animated-content.js | description":["audits[efficient-animated-content].description"],"lighthouse-core/audits/byte-efficiency/duplicated-javascript.js | title":["audits[duplicated-javascript].title"],"lighthouse-core/audits/byte-efficiency/duplicated-javascript.js | description":["audits[duplicated-javascript].description"],"lighthouse-core/audits/byte-efficiency/legacy-javascript.js | title":["audits[legacy-javascript].title"],"lighthouse-core/audits/byte-efficiency/legacy-javascript.js | description":["audits[legacy-javascript].description"],"lighthouse-core/audits/dobetterweb/appcache-manifest.js | title":["audits[appcache-manifest].title"],"lighthouse-core/audits/dobetterweb/appcache-manifest.js | description":["audits[appcache-manifest].description"],"lighthouse-core/audits/dobetterweb/doctype.js | title":["audits.doctype.title"],"lighthouse-core/audits/dobetterweb/doctype.js | description":["audits.doctype.description"],"lighthouse-core/audits/dobetterweb/charset.js | title":["audits.charset.title"],"lighthouse-core/audits/dobetterweb/charset.js | description":["audits.charset.description"],"lighthouse-core/audits/dobetterweb/dom-size.js | title":["audits[dom-size].title"],"lighthouse-core/audits/dobetterweb/dom-size.js | description":["audits[dom-size].description"],"lighthouse-core/audits/dobetterweb/dom-size.js | displayValue":[{"values":{"itemCount":120},"path":"audits[dom-size].displayValue"}],"lighthouse-core/audits/dobetterweb/dom-size.js | columnStatistic":["audits[dom-size].details.headings[0].text"],"lighthouse-core/audits/dobetterweb/dom-size.js | columnValue":["audits[dom-size].details.headings[2].text"],"lighthouse-core/audits/dobetterweb/dom-size.js | statisticDOMElements":["audits[dom-size].details.items[0].statistic"],"lighthouse-core/audits/dobetterweb/dom-size.js | statisticDOMDepth":["audits[dom-size].details.items[1].statistic"],"lighthouse-core/audits/dobetterweb/dom-size.js | statisticDOMWidth":["audits[dom-size].details.items[2].statistic"],"lighthouse-core/audits/dobetterweb/external-anchors-use-rel-noopener.js | title":["audits[external-anchors-use-rel-noopener].title"],"lighthouse-core/audits/dobetterweb/external-anchors-use-rel-noopener.js | description":["audits[external-anchors-use-rel-noopener].description"],"lighthouse-core/audits/dobetterweb/geolocation-on-start.js | title":["audits[geolocation-on-start].title"],"lighthouse-core/audits/dobetterweb/geolocation-on-start.js | description":["audits[geolocation-on-start].description"],"lighthouse-core/audits/dobetterweb/inspector-issues.js | title":["audits[inspector-issues].title"],"lighthouse-core/audits/dobetterweb/inspector-issues.js | description":["audits[inspector-issues].description"],"lighthouse-core/audits/dobetterweb/no-document-write.js | title":["audits[no-document-write].title"],"lighthouse-core/audits/dobetterweb/no-document-write.js | description":["audits[no-document-write].description"],"lighthouse-core/audits/dobetterweb/no-vulnerable-libraries.js | title":["audits[no-vulnerable-libraries].title"],"lighthouse-core/audits/dobetterweb/no-vulnerable-libraries.js | description":["audits[no-vulnerable-libraries].description"],"lighthouse-core/audits/dobetterweb/js-libraries.js | title":["audits[js-libraries].title"],"lighthouse-core/audits/dobetterweb/js-libraries.js | description":["audits[js-libraries].description"],"lighthouse-core/audits/dobetterweb/js-libraries.js | columnVersion":["audits[js-libraries].details.headings[1].text"],"lighthouse-core/audits/dobetterweb/notification-on-start.js | title":["audits[notification-on-start].title"],"lighthouse-core/audits/dobetterweb/notification-on-start.js | description":["audits[notification-on-start].description"],"lighthouse-core/audits/dobetterweb/password-inputs-can-be-pasted-into.js | title":["audits[password-inputs-can-be-pasted-into].title"],"lighthouse-core/audits/dobetterweb/password-inputs-can-be-pasted-into.js | description":["audits[password-inputs-can-be-pasted-into].description"],"lighthouse-core/audits/dobetterweb/uses-http2.js | title":["audits[uses-http2].title"],"lighthouse-core/audits/dobetterweb/uses-http2.js | description":["audits[uses-http2].description"],"lighthouse-core/audits/dobetterweb/uses-passive-event-listeners.js | title":["audits[uses-passive-event-listeners].title"],"lighthouse-core/audits/dobetterweb/uses-passive-event-listeners.js | description":["audits[uses-passive-event-listeners].description"],"lighthouse-core/audits/seo/meta-description.js | title":["audits[meta-description].title"],"lighthouse-core/audits/seo/meta-description.js | description":["audits[meta-description].description"],"lighthouse-core/audits/seo/http-status-code.js | title":["audits[http-status-code].title"],"lighthouse-core/audits/seo/http-status-code.js | description":["audits[http-status-code].description"],"lighthouse-core/audits/seo/font-size.js | title":["audits[font-size].title"],"lighthouse-core/audits/seo/font-size.js | description":["audits[font-size].description"],"lighthouse-core/audits/seo/font-size.js | displayValue":[{"values":{"decimalProportion":0.9974926870037609},"path":"audits[font-size].displayValue"}],"lighthouse-core/lib/i18n/i18n.js | columnSource":["audits[font-size].details.headings[0].text"],"lighthouse-core/audits/seo/font-size.js | columnSelector":["audits[font-size].details.headings[1].text"],"lighthouse-core/audits/seo/font-size.js | columnPercentPageText":["audits[font-size].details.headings[2].text"],"lighthouse-core/audits/seo/font-size.js | columnFontSize":["audits[font-size].details.headings[3].text"],"lighthouse-core/audits/seo/font-size.js | legibleText":["audits[font-size].details.items[1].source.value"],"lighthouse-core/audits/seo/link-text.js | title":["audits[link-text].title"],"lighthouse-core/audits/seo/link-text.js | description":["audits[link-text].description"],"lighthouse-core/audits/seo/crawlable-anchors.js | title":["audits[crawlable-anchors].title"],"lighthouse-core/audits/seo/crawlable-anchors.js | description":["audits[crawlable-anchors].description"],"lighthouse-core/audits/seo/is-crawlable.js | title":["audits[is-crawlable].title"],"lighthouse-core/audits/seo/is-crawlable.js | description":["audits[is-crawlable].description"],"lighthouse-core/audits/seo/robots-txt.js | title":["audits[robots-txt].title"],"lighthouse-core/audits/seo/robots-txt.js | description":["audits[robots-txt].description"],"lighthouse-core/audits/seo/tap-targets.js | title":["audits[tap-targets].title"],"lighthouse-core/audits/seo/tap-targets.js | description":["audits[tap-targets].description"],"lighthouse-core/audits/seo/tap-targets.js | displayValue":[{"values":{"decimalProportion":1},"path":"audits[tap-targets].displayValue"}],"lighthouse-core/audits/seo/hreflang.js | title":["audits.hreflang.title"],"lighthouse-core/audits/seo/hreflang.js | description":["audits.hreflang.description"],"lighthouse-core/audits/seo/plugins.js | title":["audits.plugins.title"],"lighthouse-core/audits/seo/plugins.js | description":["audits.plugins.description"],"lighthouse-core/audits/seo/canonical.js | title":["audits.canonical.title"],"lighthouse-core/audits/seo/canonical.js | description":["audits.canonical.description"],"lighthouse-core/audits/seo/manual/structured-data.js | title":["audits[structured-data].title"],"lighthouse-core/audits/seo/manual/structured-data.js | description":["audits[structured-data].description"],"lighthouse-core/config/default-config.js | performanceCategoryTitle":["categories.performance.title"],"lighthouse-core/config/default-config.js | a11yCategoryTitle":["categories.accessibility.title"],"lighthouse-core/config/default-config.js | a11yCategoryDescription":["categories.accessibility.description"],"lighthouse-core/config/default-config.js | a11yCategoryManualDescription":["categories.accessibility.manualDescription"],"lighthouse-core/config/default-config.js | bestPracticesCategoryTitle":["categories[best-practices].title"],"lighthouse-core/config/default-config.js | seoCategoryTitle":["categories.seo.title"],"lighthouse-core/config/default-config.js | seoCategoryDescription":["categories.seo.description"],"lighthouse-core/config/default-config.js | seoCategoryManualDescription":["categories.seo.manualDescription"],"lighthouse-core/config/default-config.js | pwaCategoryTitle":["categories.pwa.title"],"lighthouse-core/config/default-config.js | pwaCategoryDescription":["categories.pwa.description"],"lighthouse-core/config/default-config.js | pwaCategoryManualDescription":["categories.pwa.manualDescription"],"lighthouse-core/config/default-config.js | metricGroupTitle":["categoryGroups.metrics.title"],"lighthouse-core/config/default-config.js | loadOpportunitiesGroupTitle":["categoryGroups[load-opportunities].title"],"lighthouse-core/config/default-config.js | loadOpportunitiesGroupDescription":["categoryGroups[load-opportunities].description"],"lighthouse-core/config/default-config.js | budgetsGroupTitle":["categoryGroups.budgets.title"],"lighthouse-core/config/default-config.js | budgetsGroupDescription":["categoryGroups.budgets.description"],"lighthouse-core/config/default-config.js | diagnosticsGroupTitle":["categoryGroups.diagnostics.title"],"lighthouse-core/config/default-config.js | diagnosticsGroupDescription":["categoryGroups.diagnostics.description"],"lighthouse-core/config/default-config.js | pwaInstallableGroupTitle":["categoryGroups[pwa-installable].title"],"lighthouse-core/config/default-config.js | pwaOptimizedGroupTitle":["categoryGroups[pwa-optimized].title"],"lighthouse-core/config/default-config.js | a11yBestPracticesGroupTitle":["categoryGroups[a11y-best-practices].title"],"lighthouse-core/config/default-config.js | a11yBestPracticesGroupDescription":["categoryGroups[a11y-best-practices].description"],"lighthouse-core/config/default-config.js | a11yColorContrastGroupTitle":["categoryGroups[a11y-color-contrast].title"],"lighthouse-core/config/default-config.js | a11yColorContrastGroupDescription":["categoryGroups[a11y-color-contrast].description"],"lighthouse-core/config/default-config.js | a11yNamesLabelsGroupTitle":["categoryGroups[a11y-names-labels].title"],"lighthouse-core/config/default-config.js | a11yNamesLabelsGroupDescription":["categoryGroups[a11y-names-labels].description"],"lighthouse-core/config/default-config.js | a11yNavigationGroupTitle":["categoryGroups[a11y-navigation].title"],"lighthouse-core/config/default-config.js | a11yNavigationGroupDescription":["categoryGroups[a11y-navigation].description"],"lighthouse-core/config/default-config.js | a11yAriaGroupTitle":["categoryGroups[a11y-aria].title"],"lighthouse-core/config/default-config.js | a11yAriaGroupDescription":["categoryGroups[a11y-aria].description"],"lighthouse-core/config/default-config.js | a11yLanguageGroupTitle":["categoryGroups[a11y-language].title"],"lighthouse-core/config/default-config.js | a11yLanguageGroupDescription":["categoryGroups[a11y-language].description"],"lighthouse-core/config/default-config.js | a11yAudioVideoGroupTitle":["categoryGroups[a11y-audio-video].title"],"lighthouse-core/config/default-config.js | a11yAudioVideoGroupDescription":["categoryGroups[a11y-audio-video].description"],"lighthouse-core/config/default-config.js | a11yTablesListsVideoGroupTitle":["categoryGroups[a11y-tables-lists].title"],"lighthouse-core/config/default-config.js | a11yTablesListsVideoGroupDescription":["categoryGroups[a11y-tables-lists].description"],"lighthouse-core/config/default-config.js | seoMobileGroupTitle":["categoryGroups[seo-mobile].title"],"lighthouse-core/config/default-config.js | seoMobileGroupDescription":["categoryGroups[seo-mobile].description"],"lighthouse-core/config/default-config.js | seoContentGroupTitle":["categoryGroups[seo-content].title"],"lighthouse-core/config/default-config.js | seoContentGroupDescription":["categoryGroups[seo-content].description"],"lighthouse-core/config/default-config.js | seoCrawlingGroupTitle":["categoryGroups[seo-crawl].title"],"lighthouse-core/config/default-config.js | seoCrawlingGroupDescription":["categoryGroups[seo-crawl].description"],"lighthouse-core/config/default-config.js | bestPracticesTrustSafetyGroupTitle":["categoryGroups[best-practices-trust-safety].title"],"lighthouse-core/config/default-config.js | bestPracticesUXGroupTitle":["categoryGroups[best-practices-ux].title"],"lighthouse-core/config/default-config.js | bestPracticesBrowserCompatGroupTitle":["categoryGroups[best-practices-browser-compat].title"],"lighthouse-core/config/default-config.js | bestPracticesGeneralGroupTitle":["categoryGroups[best-practices-general].title"]}},"stackPacks":[]};</script>
+  <script>console.log('window.__LIGHTHOUSE_JSON__', __LIGHTHOUSE_JSON__);</script>
+  <script>
+    function __initLighthouseReport__() {
+      const dom = new DOM(document);
+      const renderer = new ReportRenderer(dom);
+
+      const container = document.querySelector('main');
+      renderer.renderReport(window.__LIGHTHOUSE_JSON__, container);
+
+      // Hook in JS features and page-level event listeners after the report
+      // is in the document.
+      const features = new ReportUIFeatures(dom);
+      features.initFeatures(window.__LIGHTHOUSE_JSON__);
+    }
+    window.addEventListener('DOMContentLoaded', __initLighthouseReport__);
+
+    document.addEventListener('lh-analytics', e => {
+      if (window.ga) {
+        ga(e.detail.cmd, e.detail.fields);
+      }
+    });
+
+    document.addEventListener('lh-log', e => {
+      const logger = new Logger(document.querySelector('#lh-log'));
+
+      switch (e.detail.cmd) {
+        case 'log':
+          logger.log(e.detail.msg);
+          break;
+        case 'warn':
+          logger.warn(e.detail.msg);
+          break;
+        case 'error':
+          logger.error(e.detail.msg);
+          break;
+        case 'hide':
+          logger.hide();
+          break;
+      }
+    });
+  </script>
+
+
+</body></html>
\ No newline at end of file
diff --git a/web/themes/congo/exampleSite/content/docs/version-2/lighthouse.jpg b/web/themes/congo/exampleSite/content/docs/version-2/lighthouse.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..22a895ca6afcf2216e4e4ef5d5911682b70d3fe1
Binary files /dev/null and b/web/themes/congo/exampleSite/content/docs/version-2/lighthouse.jpg differ
diff --git a/web/themes/congo/exampleSite/content/docs/version-2/upgrade/index.md b/web/themes/congo/exampleSite/content/docs/version-2/upgrade/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..cb681f3eff06489d2abb3ecf29c38f505575bfd0
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/docs/version-2/upgrade/index.md
@@ -0,0 +1,198 @@
+---
+title: "Upgrading from Congo 1.x"
+date: 2022-01-20
+draft: false
+description: "Discover what's new in Congo version 2.0."
+tags: ["new", "docs"]
+---
+
+Although Congo 2.0 contains a large number of changes, the theme has been designed to minimise the effort required to upgrade to the latest release.
+
+That said, there are some changes that require adjustments to existing sites that are built with Congo version 1.x. This guide will step you through the process and highlight things you need to consider.
+
+## Step 1: Upgrade Hugo
+
+{{< alert >}}
+Congo 2.0 requires a minimum of **Hugo v0.87.0 or later**
+{{< /alert >}}
+
+Congo is built to take advantage of some of the latest Hugo features. You should regularly keep your Hugo installation up to date to avoid any issues.
+
+You can check your current version using the command `hugo version`. Visit the [Hugo docs](https://gohugo.io/getting-started/installing/) for information on obtaining a newer release for your platform.
+
+## Step 2: Upgrade Congo
+
+The process for upgrading Congo will depend on how you include the theme in your project. Instructions for each method can be found below.
+
+- [Upgrade using Hugo](#upgrade-using-hugo)
+- [Upgrade using git](#upgrade-using-git)
+- [Upgrade manually](#upgrade-manually)
+
+### Upgrade using Hugo
+
+To upgrade a go module to a new major release, the `modules.toml` and `go.mod` files need to be updated. In each file, update the path to the theme from `github.com/jpanther/congo` to `github.com/jpanther/congo/v2`.
+
+Then change into your project directory and execute the following command:
+
+```shell
+hugo mod get -u
+```
+
+Note that in some circumstances there may be issues with this step due to the way that Hugo locally caches modules. If the command above doesn't work, try using `hugo mod clean` to clear out the local cache and re-download any modules.
+
+Once the theme has been upgraded, continue to the [next section](#step-3-theme-configuration).
+
+### Upgrade using git
+
+Git submodules can be upgraded using the `git` command. Simply execute the following command and the latest version of the theme will be downloaded into your local repository:
+
+```shell
+git submodule update --remote --merge
+```
+
+Once the submodule has been upgraded, continue to the [next section](#step-3-theme-configuration).
+
+### Upgrade manually
+
+Updating Congo manually requires you to download the latest copy of the theme and replace the old version in your project.
+
+{{< alert >}}
+Note that any local customisations you have made to the theme files will be lost during this process.
+{{< /alert >}}
+
+1. Download the latest release of the theme source code.
+
+   {{< button href="https://github.com/jpanther/congo/releases/latest" target="_blank" >}}Download from Github{{< /button >}}
+
+2. Extract the archive, rename the folder to `congo` and move it to the `themes/` directory inside your Hugo project's root folder. You will need to overwrite the existing directory to replace all the theme files.
+
+3. Continue to the [next section](#step-3-theme-configuration).
+
+## Step 3: Theme configuration
+
+Congo 2.0 introduces a number of new theme configuration parameters. Although the theme will adapt to existing version 1 configurations, in order to take advantage of some of the newer theme features, you will need to adjust your existing configuration.
+
+The simplest way to do this is to take a copy of the theme's default configuration and compare it to your existing files. The process is outlined in greater detail below.
+
+### Languages.toml
+
+In order to provide multilingual support, language-specific theme parameters have been moved to a new config file `languages.[lang-code].toml`. The theme comes with a template `languages.en.toml` file which can be used as a guide.
+
+{{< alert >}}
+This step is optional if you do not need multilingual support, although completing it now will make future theme upgrades easier.
+{{< /alert >}}
+
+The languages config file follows this structure:
+
+```toml
+# config/_default/languagues.en.toml
+
+languageCode = "en"
+languageName = "English"
+displayName = "EN"
+htmlCode = "en"
+weight = 1
+rtl = false
+
+# Language-specific parameters go here
+```
+
+Using your preferred language, simply create this new file in `config/_default/` and then move the language-specific parameters from any existing config files over to this new file. The table below outlines the parameters that need to be moved.
+
+| Parameter     | Old location  |
+| ------------- | ------------- |
+| `title`       | `config.toml` |
+| `description` | `params.toml` |
+| `copyright`   | `config.toml` |
+| `dateFormat`  | `params.toml` |
+| `[author]`    | `config.toml` |
+
+Once the values have been moved to the new location, these parameters should be deleted from their original locations.
+
+### Menus.toml
+
+As the theme is now aware of languages, the `menus.toml` file should also be renamed to include a language code. Rename the existing `menus.toml` to `menus.[lang-code].toml`, where the language code matches the code used in the `languages.toml` file in the previous section.
+
+### Config.toml
+
+The `config.toml` file now only contains base Hugo configuration values. Other than removing the language-specific strings above, there are only two changes to consider.
+
+If you're using a language other than English, provide a `defaultContentLanguage` value that matches the language code in the config file you created for your language. Secondly, to take advange of the new site search in Congo 2.0, an `[outputs]` block needs to be provided.
+
+```toml
+# config/_default/config.toml
+
+defaultContentLanguage = "en"
+
+enableRobotsTXT = true
+paginate = 10
+summaryLength = 0
+
+[outputs]
+  home = ["HTML", "RSS", "JSON"]
+```
+
+### Markup.toml
+
+Congo 2.0 adds support for tables of contents on article pages. Although Hugo ships with default settings for generating contents listings, you can adjust this behaviour by adding a new `[tableOfContents]` block to your `markup.toml` file.
+
+The recommended settings are as follows, which includes any headings in the Markdown content at levels 2, 3 and 4:
+
+```toml
+# config/_default/markup.toml
+
+[tableOfContents]
+  startLevel = 2
+  endLevel = 4
+```
+
+### Params.toml
+
+A number of new theme parameters have been introduced in Congo 2.0. Some minor changes are requried to existing configurations. Remember, the theme will always revert to a sensible default if a parameter is not provided.
+
+The way that dark mode works in Congo has been changed to allow greater flexibility around configuration. The old `darkMode` and `darkToggle` parameters have been **removed and replaced** by three new parameters. These new options operate independently of each other, making it possible to force the appearance while still allowing the user to override.
+
+<!-- prettier-ignore-start -->
+| New parameter | Type | Default | Description |
+| --- | --- | --- | --- |
+| `defaultAppearance` | String | `"light"` | Default theme appearance; either `light` or `dark`.<br>:warning: _Setting this to `light` replicates the old `darkMode = false` setting, while `dark` replicates `darkMode = true`._ |
+| `autoSwitchAppearance` | Boolean | `true` | Whether the theme appearance automatically switches based upon the operating system preference. Set to `false` to force the site to always use the `defaultAppearance`. <br>:warning: _Setting this to `true` replicates the old `darkMode = "auto"` setting._ |
+| `showAppearanceSwitcher` | Boolean | `false` | Whether the theme appearance switcher is dispalyed in the site footer. <br>:warning: _This parameter replaces `darkToggle`._ |
+<!-- prettier-ignore-end -->
+
+The following table outlines some other key **new parameters** that control new features in version 2:
+
+| New parameter                 | Type    | Default |
+| ----------------------------- | ------- | ------- |
+| `enableSearch`                | Boolean | `false` |
+| `showScrollToTop`             | Boolean | `true`  |
+| `article.showTaxonomies`      | Boolean | `false` |
+| `article.showTableOfContents` | Boolean | `false` |
+| `list.showTableOfContents`    | Boolean | `false` |
+
+For the full list of supported parameters, refer to the [Configuration]({{< ref "docs/configuration" >}}) docs.
+
+## Step 4: Move assets
+
+All site assets, with the exception of favicons, now use Hugo Pipes to build an optimised version of your project. In order for the theme to locate your files, any previously static theme assets need to be moved to the Hugo assets folder. Primarily this is the author image and site logo:
+
+`static/me.jpg` **&rarr;** `assets/me.jpg`  
+`static/logo.jpg` **&rarr;** `assets/logo.jpg`
+
+If you have provided an author image or site logo, simply move these assets from `static/` to `assets/`. If you use the same directory structure the theme will know where to find these files automatically. If you would like to provide a new path, update the `logo` and `author.image` config values accordingly.
+
+Note that this step does not apply to any assets in your project that are actually static. For example, a PDF file that you link directly to from within an article is a static asset. These files should remain in the `static/` directory to ensure they are copied to the output folder when Hugo builds the site.
+
+## Step 5: Check content
+
+The behavior of the `figure` shortcode is different in version 2. If you are using `figure` in your content and have advanced use cases, you may need to adjust the parameters you are providing.
+
+Consult the [shortcode docs]({{< ref "docs/shortcodes#figure" >}}) to learn more about supported parameters.
+
+## Step 6: Rebuild
+
+Now that all the configuration changes are complete, it's time to rebuild the site. Run `hugo`, or your build command, and check that everything works as expected.
+
+If you come across any errors, check the configuration is correct and refer to the [full documentation]({{< ref "docs" >}}) for further guidance. Remember, the example config files bundled with the theme contain all the default parameters and are a great starting point.
+
+🙋‍♀️ If you still need help, feel free to ask your question on [GitHub Discussions](https://github.com/jpanther/congo/discussions).
diff --git a/web/themes/congo/exampleSite/content/samples/_index.md b/web/themes/congo/exampleSite/content/samples/_index.md
new file mode 100755
index 0000000000000000000000000000000000000000..2d9820c91877205340c11ffe4ce7a18ec70fe51b
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/samples/_index.md
@@ -0,0 +1,18 @@
+---
+title: "Content Samples"
+description: "See what's possible with Congo."
+
+cascade:
+  showEdit: false
+  showSummary: true
+---
+
+{{< lead >}}
+Congo brings your content to life. :heart_eyes:
+{{< /lead >}}
+
+This section contains some demo pages that show how Congo renders different types of content. You can also see an example [taxonomy listing]({{< ref "tags" >}}) page.
+
+_**Sidenote:** This page is just a standard Congo article listing and Hugo has been configured to generate a `samples` content type and display article summaries._
+
+---
diff --git a/web/themes/congo/exampleSite/content/samples/charts/index.md b/web/themes/congo/exampleSite/content/samples/charts/index.md
new file mode 100755
index 0000000000000000000000000000000000000000..b88624e4739a16fb2e019551bf57a0c152575060
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/samples/charts/index.md
@@ -0,0 +1,85 @@
+---
+title: "Charts"
+date: 2019-03-06
+description: "Guide to Chart.js usage in Congo"
+summary: "Congo includes Chart.js for powerful charts and data visualisations."
+tags: ["chart", "sample", "graph", "shortcodes"]
+---
+
+Congo includes support for Chart.js using the `chart` shortcode. Simply wrap the chart markup within the shortcode. Congo automatically themes charts to match the configured `colorScheme` parameter, however the colours can be customised using normal Chart.js syntax.
+
+Refer to the [chart shortcode]({{< ref "docs/shortcodes#chart" >}}) docs for more details.
+
+The examples below are a small selection taken from the [official Chart.js docs](https://www.chartjs.org/docs/latest/samples). You can also [view the page source](https://raw.githubusercontent.com/jpanther/congo/dev/exampleSite/content/samples/charts.md) on GitHub to see the markup.
+
+## Bar chart
+
+<!-- prettier-ignore-start -->
+{{< chart >}}
+type: 'bar',
+data: {
+  labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
+  datasets: [{
+    label: 'My First Dataset',
+    data: [65, 59, 80, 81, 56, 55, 40],
+    backgroundColor: [
+      'rgba(255, 99, 132, 0.2)',
+      'rgba(255, 159, 64, 0.2)',
+      'rgba(255, 205, 86, 0.2)',
+      'rgba(75, 192, 192, 0.2)',
+      'rgba(54, 162, 235, 0.2)',
+      'rgba(153, 102, 255, 0.2)',
+      'rgba(201, 203, 207, 0.2)'
+    ],
+    borderColor: [
+      'rgb(255, 99, 132)',
+      'rgb(255, 159, 64)',
+      'rgb(255, 205, 86)',
+      'rgb(75, 192, 192)',
+      'rgb(54, 162, 235)',
+      'rgb(153, 102, 255)',
+      'rgb(201, 203, 207)'
+    ],
+    borderWidth: 1
+  }]
+}
+{{< /chart >}}
+<!-- prettier-ignore-end -->
+
+## Line chart
+
+<!-- prettier-ignore-start -->
+{{< chart >}}
+type: 'line',
+data: {
+  labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
+  datasets: [{
+    label: 'My First Dataset',
+    data: [65, 59, 80, 81, 56, 55, 40],
+    tension: 0.2
+  }]
+}
+{{< /chart >}}
+<!-- prettier-ignore-end -->
+
+## Doughnut chart
+
+<!-- prettier-ignore-start -->
+{{< chart >}}
+type: 'doughnut',
+data: {
+  labels: ['Red', 'Blue', 'Yellow'],
+  datasets: [{
+    label: 'My First Dataset',
+    data: [300, 50, 100],
+    backgroundColor: [
+      'rgba(255, 99, 132, 0.7)',
+      'rgba(54, 162, 235, 0.7)',
+      'rgba(255, 205, 86, 0.7)'
+    ],
+    borderWidth: 0,
+    hoverOffset: 4
+  }]
+}
+{{< /chart >}}
+<!-- prettier-ignore-end -->
diff --git a/web/themes/congo/exampleSite/content/samples/charts/thumb-jason-coudriet-eQux_nmDew0-unsplash.jpg b/web/themes/congo/exampleSite/content/samples/charts/thumb-jason-coudriet-eQux_nmDew0-unsplash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..697cb369817aaff7e7c7087febd070faa5851508
Binary files /dev/null and b/web/themes/congo/exampleSite/content/samples/charts/thumb-jason-coudriet-eQux_nmDew0-unsplash.jpg differ
diff --git a/web/themes/congo/exampleSite/content/samples/diagrams-flowcharts/index.md b/web/themes/congo/exampleSite/content/samples/diagrams-flowcharts/index.md
new file mode 100755
index 0000000000000000000000000000000000000000..d8a7448b51dae32f0567bff2e0c2c4fa22399114
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/samples/diagrams-flowcharts/index.md
@@ -0,0 +1,92 @@
+---
+title: "Diagrams and Flowcharts"
+date: 2019-03-06
+description: "Guide to Mermaid usage in Congo"
+summary: "It's easy to add diagrams and flowcharts to articles using Mermaid."
+tags: ["mermaid", "sample", "diagram", "shortcodes"]
+---
+
+Mermaid diagrams are supported in Congo using the `mermaid` shortcode. Simply wrap the diagram markup within the shortcode. Congo automatically themes Mermaid diagrams to match the configured `colorScheme` parameter.
+
+Refer to the [mermaid shortcode]({{< ref "docs/shortcodes#mermaid" >}}) docs for more details.
+
+The examples below are a small selection taken from the [official Mermaid docs](https://mermaid-js.github.io/mermaid/). You can also [view the page source](https://raw.githubusercontent.com/jpanther/congo/dev/exampleSite/content/samples/diagrams-flowcharts.md) on GitHub to see the markup.
+
+## Flowchart
+
+{{< mermaid >}}
+graph TD
+A[Christmas] -->|Get money| B(Go shopping)
+B --> C{Let me think}
+B --> G[/Another/]
+C ==>|One| D[Laptop]
+C -->|Two| E[iPhone]
+C -->|Three| F[Car]
+subgraph Section
+C
+D
+E
+F
+G
+end
+{{< /mermaid >}}
+
+## Sequence diagram
+
+{{< mermaid >}}
+sequenceDiagram
+autonumber
+par Action 1
+Alice->>John: Hello John, how are you?
+and Action 2
+Alice->>Bob: Hello Bob, how are you?
+end
+Alice->>+John: Hello John, how are you?
+Alice->>+John: John, can you hear me?
+John-->>-Alice: Hi Alice, I can hear you!
+Note right of John: John is perceptive
+John-->>-Alice: I feel great!
+loop Every minute
+John-->Alice: Great!
+end
+{{< /mermaid >}}
+
+## Class diagram
+
+{{< mermaid >}}
+classDiagram
+Animal "1" <|-- Duck
+Animal <|-- Fish
+Animal <--o Zebra
+Animal : +int age
+Animal : +String gender
+Animal: +isMammal()
+Animal: +mate()
+class Duck{
++String beakColor
++swim()
++quack()
+}
+class Fish{
+-int sizeInFeet
+-canEat()
+}
+class Zebra{
++bool is_wild
++run()
+}
+{{< /mermaid >}}
+
+## Entity relationship diagram
+
+{{< mermaid >}}
+erDiagram
+CUSTOMER }|..|{ DELIVERY-ADDRESS : has
+CUSTOMER ||--o{ ORDER : places
+CUSTOMER ||--o{ INVOICE : "liable for"
+DELIVERY-ADDRESS ||--o{ ORDER : receives
+INVOICE ||--|{ ORDER : covers
+ORDER ||--|{ ORDER-ITEM : includes
+PRODUCT-CATEGORY ||--|{ PRODUCT : contains
+PRODUCT ||--o{ ORDER-ITEM : "ordered in"
+{{< /mermaid >}}
diff --git a/web/themes/congo/exampleSite/content/samples/diagrams-flowcharts/thumb-christina-wocintechchat-com-tYVkjjMYFBo-unsplash.jpg b/web/themes/congo/exampleSite/content/samples/diagrams-flowcharts/thumb-christina-wocintechchat-com-tYVkjjMYFBo-unsplash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1ecd81316c1c5d72d57913a702597703c03458df
Binary files /dev/null and b/web/themes/congo/exampleSite/content/samples/diagrams-flowcharts/thumb-christina-wocintechchat-com-tYVkjjMYFBo-unsplash.jpg differ
diff --git a/web/themes/congo/exampleSite/content/samples/emoji/feature-domingo-alvarez-e-Cs3y8Mn6-Gk-unsplash.jpg b/web/themes/congo/exampleSite/content/samples/emoji/feature-domingo-alvarez-e-Cs3y8Mn6-Gk-unsplash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3abb4c525ba8d2affc19ee10668af9c126938250
Binary files /dev/null and b/web/themes/congo/exampleSite/content/samples/emoji/feature-domingo-alvarez-e-Cs3y8Mn6-Gk-unsplash.jpg differ
diff --git a/web/themes/congo/exampleSite/content/samples/emoji/index.md b/web/themes/congo/exampleSite/content/samples/emoji/index.md
new file mode 100755
index 0000000000000000000000000000000000000000..b36c7bc2a6261af286f3a65b4d5b5d0320fb9192
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/samples/emoji/index.md
@@ -0,0 +1,19 @@
+---
+title: "Emoji :parachute:"
+date: 2019-03-05
+description: "Guide to Emoji usage in Congo"
+summary: "📖🏞️🧗🏽🐉🧙🏽‍♂️🧚🏽👸"
+tags: ["emoji", "sample"]
+---
+
+Emoji is supported throughout Congo by default. Emoji can be used in titles, menu items and article content.
+
+{{< alert >}}
+**Note:** The rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack.
+{{< /alert >}}
+
+Emoji replacements are automatic throughout Congo, so you can use shorthand codes in your content and front matter and they will be converted to their corresponding symbols at build time.
+
+**Example:** `see_no_evil` :see_no_evil:, `hear_no_evil` :hear_no_evil:, `speak_no_evil` :speak_no_evil:.
+
+The [Emoji cheat sheet](http://www.emoji-cheat-sheet.com/) is a useful reference for emoji shorthand codes.
diff --git a/web/themes/congo/exampleSite/content/samples/external/index.md b/web/themes/congo/exampleSite/content/samples/external/index.md
new file mode 100755
index 0000000000000000000000000000000000000000..7fe42574e2659fed6a5e967ca4f0db922eeb023a
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/samples/external/index.md
@@ -0,0 +1,14 @@
+---
+title: "External Article - Why I switched to Fathom Analytics"
+date: 2019-01-24
+externalUrl: "https://jamespanther.com/writings/i-switched-from-google-analytics-to-fathom-analytics/"
+summary: "The `externalUrl` front matter parameter can link to any URL. This article looks just like any other, but will link to a post that is outside the Hugo project."
+showReadingTime: false
+_build:
+  render: "never"
+  list: "local"
+---
+
+This page uses the `externalUrl` front matter parameter to link to an article outside of this Hugo website.
+
+It's great for things like linking to posts on Medium or to research papers you may have hosted on third party websites.
diff --git a/web/themes/congo/exampleSite/content/samples/external/thumb-clint-adair-BW0vK-FA3eg-unsplash.jpg b/web/themes/congo/exampleSite/content/samples/external/thumb-clint-adair-BW0vK-FA3eg-unsplash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b1031d1995439537d01352bfb7a6f2c7705bd0b9
Binary files /dev/null and b/web/themes/congo/exampleSite/content/samples/external/thumb-clint-adair-BW0vK-FA3eg-unsplash.jpg differ
diff --git a/web/themes/congo/exampleSite/content/samples/icons/index.md b/web/themes/congo/exampleSite/content/samples/icons/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..f55c058d2fdd6623d3cfe1b6fcc356ca41e0cb7f
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/samples/icons/index.md
@@ -0,0 +1,75 @@
+---
+title: "Icons"
+date: 2020-08-14
+lastmod: 2022-03-09
+draft: false
+description: "Icon support in Congo."
+slug: "icons"
+tags: ["icons", "sample", "shortcodes"]
+showDateUpdated: true
+---
+
+Congo has built-in support for a number of [FontAwesome 6](https://fontawesome.com/icons) icons. These can be included in your website through either the [icon partial]({{< ref "docs/partials#icon" >}}) or [icon shortcode]({{< ref "docs/shortcodes#icon" >}}).
+
+Additionally, custom icons are also fully supported. Simply provide your own SVG icon assets by placing them in the `assets/icons/` directory in the root of your project. Any icons in the icons directory will then be available to use throughout the theme.
+
+The full list of built-in icons and their corresponding names can referenced below.
+
+| Icon name            | Preview                           |
+| -------------------- | --------------------------------- |
+| amazon               | {{< icon amazon >}}               |
+| apple                | {{< icon apple >}}                |
+| bars                 | {{< icon bars >}}                 |
+| blogger              | {{< icon blogger >}}              |
+| bug                  | {{< icon bug >}}                  |
+| check                | {{< icon check >}}                |
+| circle-info          | {{< icon circle-info >}}          |
+| codepen              | {{< icon codepen >}}              |
+| comment              | {{< icon comment >}}              |
+| dev                  | {{< icon dev >}}                  |
+| dribbble             | {{< icon dribbble >}}             |
+| edit                 | {{< icon edit >}}                 |
+| email                | {{< icon email >}}                |
+| facebook             | {{< icon facebook >}}             |
+| flickr               | {{< icon flickr >}}               |
+| foursquare           | {{< icon foursquare >}}           |
+| github               | {{< icon github >}}               |
+| gitlab               | {{< icon gitlab >}}               |
+| google               | {{< icon google >}}               |
+| hashnode             | {{< icon hashnode >}}             |
+| instagram            | {{< icon instagram >}}            |
+| keybase              | {{< icon keybase >}}              |
+| kickstarter          | {{< icon kickstarter >}}          |
+| lastfm               | {{< icon lastfm >}}               |
+| lightbulb            | {{< icon lightbulb >}}            |
+| link                 | {{< icon link >}}                 |
+| linkedin             | {{< icon linkedin >}}             |
+| list                 | {{< icon list >}}                 |
+| mastodon             | {{< icon mastodon >}}             |
+| medium               | {{< icon medium >}}               |
+| microsoft            | {{< icon microsoft >}}            |
+| moon                 | {{< icon moon >}}                 |
+| orcid                | {{< icon orcid >}}                |
+| patreon              | {{< icon patreon >}}              |
+| pencil               | {{< icon pencil >}}               |
+| pinterest            | {{< icon pinterest >}}            |
+| reddit               | {{< icon reddit >}}               |
+| researchgate         | {{< icon researchgate >}}         |
+| search               | {{< icon search >}}               |
+| skull-crossbones     | {{< icon skull-crossbones >}}     |
+| slack                | {{< icon slack >}}                |
+| snapchat             | {{< icon snapchat >}}             |
+| soundcloud           | {{< icon soundcloud >}}           |
+| stack-overflow       | {{< icon stack-overflow >}}       |
+| steam                | {{< icon steam >}}                |
+| sun                  | {{< icon sun >}}                  |
+| tag                  | {{< icon tag >}}                  |
+| telegram             | {{< icon telegram >}}             |
+| tiktok               | {{< icon tiktok >}}               |
+| triangle-exclamation | {{< icon triangle-exclamation >}} |
+| tumblr               | {{< icon tumblr >}}               |
+| twitch               | {{< icon twitch >}}               |
+| twitter              | {{< icon twitter >}}              |
+| whatsapp             | {{< icon whatsapp >}}             |
+| xmark                | {{< icon xmark >}}                |
+| youtube              | {{< icon youtube >}}              |
diff --git a/web/themes/congo/exampleSite/content/samples/icons/thumb-harpal-singh-_zKxPsGOGKg-unsplash-2.jpg b/web/themes/congo/exampleSite/content/samples/icons/thumb-harpal-singh-_zKxPsGOGKg-unsplash-2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7df166824964876c8aaf10f7544b512a348d1485
Binary files /dev/null and b/web/themes/congo/exampleSite/content/samples/icons/thumb-harpal-singh-_zKxPsGOGKg-unsplash-2.jpg differ
diff --git a/web/themes/congo/exampleSite/content/samples/markdown/index.md b/web/themes/congo/exampleSite/content/samples/markdown/index.md
new file mode 100755
index 0000000000000000000000000000000000000000..601fae2a6db33dda3f42e1bd1c1604149d8a16e9
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/samples/markdown/index.md
@@ -0,0 +1,145 @@
+---
+title: "Markdown"
+date: 2019-03-11
+description: "Sample article showcasing basic Markdown syntax and formatting for HTML elements."
+tags: ["markdown", "css", "html", "sample"]
+---
+
+This article offers a sample of basic Markdown formatting that can be used in Congo, also it shows how some basic HTML elements are decorated.
+
+<!--more-->
+
+## Headings
+
+The following HTML `<h1>`—`<h6>` elements represent six levels of section headings. `<h1>` is the highest section level while `<h6>` is the lowest.
+
+# H1
+
+## H2
+
+### H3
+
+#### H4
+
+##### H5
+
+###### H6
+
+## Paragraph
+
+Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.
+
+Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.
+
+## Blockquotes
+
+The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a `footer` or `cite` element, and optionally with in-line changes such as annotations and abbreviations.
+
+### Blockquote without attribution
+
+> Tiam, ad mint andaepu dandae nostion secatur sequo quae.
+> **Note** that you can use _Markdown syntax_ within a blockquote.
+
+### Blockquote with attribution
+
+> Don't communicate by sharing memory, share memory by communicating.<br>
+> — <cite>Rob Pike[^1]</cite>
+
+[^1]: The above quote is excerpted from Rob Pike's [talk `about` nothing](https://www.youtube.com/watch?v=PAAkCSZUG1c) during Gopherfest, November 18, 2015.
+
+## Tables
+
+Tables aren't part of the core Markdown spec, but Hugo supports supports them out-of-the-box.
+
+| Name  | Age |
+| ----- | --- |
+| Bob   | 27  |
+| Alice | 23  |
+
+### Inline Markdown within tables
+
+| Italics   | Bold     | Code   |
+| --------- | -------- | ------ |
+| _italics_ | **bold** | `code` |
+
+## Code Blocks
+
+### Code block with backticks
+
+```html
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <title>Example HTML5 Document</title>
+  </head>
+  <body>
+    <p>Test</p>
+  </body>
+</html>
+```
+
+### Code block indented with four spaces
+
+    <!DOCTYPE html>
+    <html lang="en">
+    <head>
+      <meta charset="utf-8">
+      <title>Example HTML5 Document</title>
+    </head>
+    <body>
+      <p>Test</p>
+    </body>
+    </html>
+
+### Code block with Hugo's internal highlight shortcode
+
+{{< highlight html "linenos=table,hl_lines=4 7-9" >}}
+
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title>Example HTML5 Document</title>
+</head>
+<body>
+  <p>Test</p>
+</body>
+</html>
+{{< /highlight >}}
+
+## List Types
+
+### Ordered List
+
+1. First item
+2. Second item
+3. Third item
+
+### Unordered List
+
+- List item
+- Another item
+- And another item
+
+### Nested list
+
+- Fruit
+  - Apple
+  - Orange
+  - Banana
+- Dairy
+  - Milk
+  - Cheese
+
+## Other Elements — abbr, sub, sup, kbd, mark
+
+<abbr title="Graphics Interchange Format">GIF</abbr> is a bitmap image format.
+
+H<sub>2</sub>O
+
+X<sup>n</sup> + Y<sup>n</sup> = Z<sup>n</sup>
+
+Press <kbd>CTRL</kbd>+<kbd>ALT</kbd>+<kbd>Delete</kbd> to end the session.
+
+Most <mark>salamanders</mark> are nocturnal, and hunt for insects, worms, and other small creatures.
diff --git a/web/themes/congo/exampleSite/content/samples/markdown/thumb-surendran-mp-IhWYiwSxm8g-unsplash.jpg b/web/themes/congo/exampleSite/content/samples/markdown/thumb-surendran-mp-IhWYiwSxm8g-unsplash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8bd2a0c4fdd54d98e291b46a1d46c69b654f35a6
Binary files /dev/null and b/web/themes/congo/exampleSite/content/samples/markdown/thumb-surendran-mp-IhWYiwSxm8g-unsplash.jpg differ
diff --git a/web/themes/congo/exampleSite/content/samples/mathematical-notation/feature-artturi-jalli-gYrYa37fAKI-unsplash.jpg b/web/themes/congo/exampleSite/content/samples/mathematical-notation/feature-artturi-jalli-gYrYa37fAKI-unsplash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..640b4d75fe69f4b4845c499511c0eba0d7b8eca1
Binary files /dev/null and b/web/themes/congo/exampleSite/content/samples/mathematical-notation/feature-artturi-jalli-gYrYa37fAKI-unsplash.jpg differ
diff --git a/web/themes/congo/exampleSite/content/samples/mathematical-notation/index.md b/web/themes/congo/exampleSite/content/samples/mathematical-notation/index.md
new file mode 100755
index 0000000000000000000000000000000000000000..0b184800c95cc1ee669a9652693fa9851cd3b657
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/samples/mathematical-notation/index.md
@@ -0,0 +1,46 @@
+---
+title: Mathematical notation
+date: 2019-03-08
+description: A brief sample of mathematical notation in Congo.
+tags: ["sample", "katex", "maths", "shortcodes"]
+---
+
+KaTeX can be used to render mathematical notation within articles.
+
+<!--more-->
+
+{{< katex >}}
+
+Congo will only bundle the KaTeX assets into your project if you make use of mathematical notation. In order for this to work, simply include the [`katex` shortcode]({{< ref "docs/shortcodes#katex" >}}) within the article. Any KaTeX syntax on that page will then be automatically rendered.
+
+Use the online reference of [supported TeX functions](https://katex.org/docs/supported.html) for the available syntax.
+
+## Inline notation
+
+Inline notation can be generated by wrapping the expression in `\\(` and `\\)` delimiters.
+
+**Example:**
+
+```tex
+% KaTeX inline notation
+Inline notation: \\(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\\)
+```
+
+Inline notation: \\(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\\)
+
+## Block notation
+
+Alternatively, block notation can be generated using `$$` delimiters. This will output the expression in its own HTML block.
+
+**Example:**
+
+```tex
+% KaTeX block notation
+$$
+ \varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } }
+$$
+```
+
+$$
+ \varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } }
+$$
diff --git a/web/themes/congo/exampleSite/content/samples/placeholder-text/index.md b/web/themes/congo/exampleSite/content/samples/placeholder-text/index.md
new file mode 100755
index 0000000000000000000000000000000000000000..533463999a777556ea89cf0c0e07e1af9949824b
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/samples/placeholder-text/index.md
@@ -0,0 +1,39 @@
+---
+title: "Placeholder Text"
+date: "2019-03-09"
+lastmod: "2022-01-24"
+draft: true
+description: "Lorem Ipsum Dolor Si Amet"
+tags: ["markdown", "text", "sample", "latin"]
+showDateUpdated: true
+xml: false
+---
+
+Lorem est tota propiore conpellat pectoribus de pectora summo. <!--more-->Redit teque digerit hominumque toris verebor lumina non cervice subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.
+
+1. Exierant elisi ambit vivere dedere
+2. Duce pollice
+3. Eris modo
+4. Spargitque ferrea quos palude
+
+Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria tractus malis.
+
+1. Comas hunc haec pietate fetum procerum dixit
+2. Post torum vates letum Tiresia
+3. Flumen querellas
+4. Arcanaque montibus omnes
+5. Quidem et
+
+## Vagus elidunt
+
+<svg xmlns="http://www.w3.org/2000/svg" overflow="visible" viewBox="0 0 496 373" height="186" width="248"><g fill="none"><path stroke="#000" stroke-width="2" d="M.599 372.348L495.263 1.206M.312.633l494.95 370.853M.312 372.633L247.643.92M248.502.92l246.76 370.566M330.828 123.869V1.134M330.396 1.134L165.104 124.515"></path><path stroke="#ED1C24" stroke-width="2" d="M275.73 41.616h166.224v249.05H275.73zM54.478 41.616h166.225v249.052H54.478z"></path><path stroke="#000" stroke-width="2" d="M.479.375h495v372h-495zM247.979.875v372"></path><ellipse cx="498.729" cy="177.625" rx="2" ry="1.25"></ellipse><ellipse cx="247.229" cy="377.375" rx="2" ry="1.25"></ellipse></g></svg>
+
+[The Van de Graaf Canon](https://en.wikipedia.org/wiki/Canons_of_page_construction#Van_de_Graaf_canon)
+
+### Mane refeci capiebant unda mulcebat
+
+Victa caducifer, malo vulnere contra dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. **Faces illo pepulere** tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.
+
+Iubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae vulnus haerentia iuste et exercebat, sui et.
+
+Eurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel **mitis temploque** vocatus, inque alis, _oculos nomen_ non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem Propoetides **parte**.
diff --git a/web/themes/congo/exampleSite/content/samples/placeholder-text/thumb-kelly-sikkema-NBkMT8duVSI-unsplash.jpg b/web/themes/congo/exampleSite/content/samples/placeholder-text/thumb-kelly-sikkema-NBkMT8duVSI-unsplash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..4162e513cd99423c33a2da99fa4325ae8113e68c
Binary files /dev/null and b/web/themes/congo/exampleSite/content/samples/placeholder-text/thumb-kelly-sikkema-NBkMT8duVSI-unsplash.jpg differ
diff --git a/web/themes/congo/exampleSite/content/samples/rich-content/feature-alexander-shatov-mr4JG4SYOF8-unsplash.jpg b/web/themes/congo/exampleSite/content/samples/rich-content/feature-alexander-shatov-mr4JG4SYOF8-unsplash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..31e6d5f484aafc7438694698df4427a1d5f84ada
Binary files /dev/null and b/web/themes/congo/exampleSite/content/samples/rich-content/feature-alexander-shatov-mr4JG4SYOF8-unsplash.jpg differ
diff --git a/web/themes/congo/exampleSite/content/samples/rich-content/index.md b/web/themes/congo/exampleSite/content/samples/rich-content/index.md
new file mode 100755
index 0000000000000000000000000000000000000000..efe6bb7615347a621d8b9c955f712cf4c5d1553a
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/samples/rich-content/index.md
@@ -0,0 +1,35 @@
+---
+title: "Rich Content"
+date: 2019-03-10
+description: "A brief description of Hugo Shortcodes"
+summary: "This is an _example_ of a **rich** content summary."
+tags: ["shortcodes", "privacy", "sample", "gist", "twitter", "youtube", "vimeo"]
+---
+
+Hugo ships with several [built-in shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugos-built-in-shortcodes) for rich content, along with a [privacy config](https://gohugo.io/about/hugo-and-gdpr/) and a set of _simple shortcodes_ that enable static and no-JS versions of various social media embeds.
+
+## YouTube
+
+Below is an example using the built-in `youtube` shortcode.
+
+{{< youtube ZJthWmvUzzc >}}
+
+## Twitter
+
+This example uses the `twitter_simple` shortcode to output a Tweet. It requires two named parameters `user` and `id`.
+
+{{< twitter_simple user="DesignReviewed" id="1085870671291310081" >}}
+
+Alternatively, the `tweet` shortcode can be used to embed a fully marked up Twitter card.
+
+## Gist
+
+The `gist` shortcode can be used to embed a GitHub Gist. It requires two unnamed parameters: the username and ID of the Gist.
+
+{{< gist jpanther a873e1219ffeaa80a926bbe8255f348e >}}
+
+## Vimeo
+
+The `vimeo_simple` shortcode will embed a Vimeo video.
+
+{{< vimeo_simple 48912912 >}}
diff --git a/web/themes/congo/exampleSite/content/squid.jpg b/web/themes/congo/exampleSite/content/squid.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..67b122417ed8194217fcecda6bb4d57a380dceae
Binary files /dev/null and b/web/themes/congo/exampleSite/content/squid.jpg differ
diff --git a/web/themes/congo/exampleSite/content/tags/_index.md b/web/themes/congo/exampleSite/content/tags/_index.md
new file mode 100644
index 0000000000000000000000000000000000000000..54090f33924953082ee149c4d601ab85078be549
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/tags/_index.md
@@ -0,0 +1,9 @@
+---
+title: Tags
+---
+
+Congo has full support for Hugo taxonomies and will adapt to any taxonomy set up. Taxonomy listings like this one also support custom content to be displayed above the list of terms.
+
+This area could be used to add some extra decriptive text to each taxonomy. Check out the [advanced tag]({{< ref "advanced" >}}) below to see how to take this concept even further.
+
+---
diff --git a/web/themes/congo/exampleSite/content/tags/advanced/_index.md b/web/themes/congo/exampleSite/content/tags/advanced/_index.md
new file mode 100644
index 0000000000000000000000000000000000000000..2ade4bcb470d3b3346cece41bd5e1d64938b1767
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/tags/advanced/_index.md
@@ -0,0 +1,7 @@
+---
+title: advanced
+---
+
+This is the advanced tag. Just like other listing pages in Congo, you can add custom content to individual taxonomy terms and it will be displayed at the top of the term listing. :rocket:
+
+You can also use these content pages to define Hugo metadata like titles and descriptions that will be used for SEO and other purposes.
diff --git a/web/themes/congo/exampleSite/content/users.md b/web/themes/congo/exampleSite/content/users.md
new file mode 100644
index 0000000000000000000000000000000000000000..1a016af9ddabb6b7ab12a4e51b61e13ce3a8199d
--- /dev/null
+++ b/web/themes/congo/exampleSite/content/users.md
@@ -0,0 +1,52 @@
+---
+title: "Users"
+date: 2020-08-14
+draft: false
+description: "Some real-life Congo examples."
+slug: "users"
+tags: ["users", "sample"]
+showDate: false
+showAuthor: false
+showReadingTime: false
+showEdit: false
+---
+
+{{< lead >}}
+Real websites that are built with Congo.
+{{< /lead >}}
+
+| Website                                                                | Details                      |
+| ---------------------------------------------------------------------- | ---------------------------- |
+| [jamespanther.com](https://jamespanther.com)                           | Personal site - Theme author |
+| [antoinesoetewey.com](https://antoinesoetewey.com/)                    | Personal site                |
+| [leif.io](https://leif.io/)                                            | Personal site and Tech blog  |
+| [dr460nf1r3.org](https://dr460nf1r3.org/)                              | Personal site and Blog       |
+| [OCram85.com](https://ocram85.com)                                     | Personal site and Blog       |
+| [mackiser.github.io](https://mackiser.github.io)                       | Personal site and Blog       |
+| [jamesmillner.dev](https://jamesmillner.dev)                           | Personal site and Blog       |
+| [jeremic.ca](https://jeremic.ca)                                       | Personal site and Blog       |
+| [rohn.tech](https://rohn.tech)                                         | Personal site                |
+| [klimafreundlicher-kochen.de](https://www.klimafreundlicher-kochen.de) | Food blog (in German)        |
+| [seyslee.github.io](https://seyslee.github.io)                         | Tech blog (in Korean)        |
+| [datanalyze.be](https://datanalyze.be/)                                | Professional site            |
+| [sneaky-potato.github.io](https://sneaky-potato.github.io/)            | Professional site and Blog   |
+| [kelset.dev](https://kelset.dev)                                       | Personal site                |
+| [docteurelsavancaster.com](https://docteurelsavancaster.com/)          | Professional site            |
+| [ruihao-li.github.io](https://ruihao-li.github.io/)                    | Personal site and Blog       |
+| [phalanxhead.dev](https://phalanxhead.dev)                             | Personal site and Blog       |
+| [Bible Multi Apps](https://hotlittlewhitedog.gitlab.io/biblemulti)     | Personal site and Blog       |
+| [Jh123x](https://jh123x.com/)                                          | Personal site and Blog       |
+| [sforzando LLC. and Inc.](https://sfz.dev/)                            | Corporate site and Blog      |
+| [aidansmith.me](https://aidansmith.me/)                                | Personal Site                |
+| [nunocoracao.com](https://nunocoracao.com)                             | Personal site and Blog       |
+| [szegedkungfu.hu](https://balance-se.github.io/)                       | Sports association site      |
+| [jcransom.com](https://www.jcransom.com/)                              | Personal Site and Blog       |
+| [cbrincoveanu.com](https://www.cbrincoveanu.com/)                      | Personal site and Blog       |
+| [medical-humanities](https://medical-humanities.org)                   | Academic site                |
+| [boyersnet.com](https://boyersnet.com)                                 | Personal site and Blog       |
+| [major.io](https://major.io)                                           | Personal site and Blog       |
+| [bayas.dev](https://bayas.dev)                                         | Personal site and Blog       |
+| [顾宇的博客](https://www.guyu.me/)                                     | Personal Blog (in Chinese)   |
+| [cgutierr-zgz.github.io](https://cgutierr-zgz.github.io/)              | Personal site and Tech blog  |
+
+**Congo user?** To add your site to this list, [submit a pull request](https://github.com/jpanther/congo/blob/dev/exampleSite/content/users.md).
diff --git a/web/themes/congo/exampleSite/layouts/partials/home/custom.html b/web/themes/congo/exampleSite/layouts/partials/home/custom.html
new file mode 100644
index 0000000000000000000000000000000000000000..960ff02e7fd0ce82cbf86be06670aa9ddde1b341
--- /dev/null
+++ b/web/themes/congo/exampleSite/layouts/partials/home/custom.html
@@ -0,0 +1,8 @@
+{{ $jsHome := resources.Get "js/home.js" | resources.Minify | resources.Fingerprint "sha512" }}
+<div id="page">
+  {{ partial "partials/home/page.html" . }}
+</div>
+<div id="profile" class="hidden h-full">
+  {{ partial "partials/home/profile.html" . }}
+</div>
+<script defer type="text/javascript" src="{{ $jsHome.RelPermalink }}" integrity="{{ $jsHome.Data.Integrity }}"></script>
diff --git a/web/themes/congo/exampleSite/layouts/shortcodes/swatches.html b/web/themes/congo/exampleSite/layouts/shortcodes/swatches.html
new file mode 100644
index 0000000000000000000000000000000000000000..322db53e4ee9606ed6e50e13c07c4208151307e5
--- /dev/null
+++ b/web/themes/congo/exampleSite/layouts/shortcodes/swatches.html
@@ -0,0 +1,14 @@
+<div class="flex justify-between">
+  <span
+    class="w-full py-6 mr-3 rounded-md"
+    {{ with .Get 0 }}style="background-color: {{ . }}"{{ end }}
+  ></span>
+  <span
+    class="w-full py-6 mr-3 rounded-md"
+    {{ with .Get 1 }}style="background-color: {{ . }}"{{ end }}
+  ></span>
+  <span
+    class="w-full py-6 mr-3 rounded-md"
+    {{ with .Get 2 }}style="background-color: {{ . }}"{{ end }}
+  ></span>
+</div>
diff --git a/web/themes/congo/go.mod b/web/themes/congo/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..b3f1e7f79eede4cafdcbb1e0506d365c9c5c1e74
--- /dev/null
+++ b/web/themes/congo/go.mod
@@ -0,0 +1,3 @@
+module github.com/jpanther/congo/v2
+
+go 1.16
diff --git a/web/themes/congo/i18n/bn.yaml b/web/themes/congo/i18n/bn.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..380c21c7288b1c4e29bb077b57e1062b8343e5c5
--- /dev/null
+++ b/web/themes/congo/i18n/bn.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Anchor"
+  date: "{{ .Date }}"
+  date_updated: "সর্বশেষ সম্পাদনার তারিখ: {{ .Date }}"
+  draft: "খসড়া"
+  edit_title: "সম্পাদনা করুন"
+  reading_time:
+    one: "{{ .Count }} মিনিট"
+    other: "{{ .Count }} মিনিট"
+  reading_time_title: "পড়ার সময়"
+  table_of_contents: "বিষয়সূচী"
+  word_count:
+    one: "{{ .Count }} টি শব্দ"
+    other: "{{ .Count }} টি শব্দ"
+
+author:
+  byline_title: "লেখক"
+
+code:
+  copy: "কপি করুন"
+  copied: "কপি হয়ে গেছে"
+
+error:
+  404_title: "পেজটি খুঁজে পাওয়া যায়নি :confused:"
+  404_error: "Error 404"
+  404_description: "মনে হচ্ছে, আপনার অনুরোধ করা পেজটি খুঁজে পাওয়া যায়নি।"
+
+footer:
+  dark_appearance: "ডার্ক মোডে স্যুইচ করুন"
+  light_appearance: "লাইট মোডে স্যুইচ করুন"
+  powered_by: "{{ .Hugo }} এবং {{ .Congo }} দ্বারা চালিত"
+
+list:
+  externalurl_title: "অন্য ওয়েবসাইটের লিংক"
+  no_articles: "এখানে তালিকাভুক্ত করার মতো আপাতত কিছুই নেই।"
+
+nav:
+  scroll_to_top_title: "পেজের উপরের দিকে যান"
+  skip_to_main: "মূল বিষয়ে যান"
+
+search:
+  open_button_title: "খুঁজুন (/)"
+  close_button_title: "বন্ধ করুন (Esc)"
+  input_placeholder: "খুঁজুন"
+
+sharing:
+  email: "ইমেল করুন"
+  facebook: "ফেসবুকে শেয়ার করুন"
+  linkedin: "লিংকডইনে শেয়ার করুন"
+  pinterest: "পিন্টারেস্টে পিন করুন"
+  reddit: "রেড্ডিটে জমা দিন"
+  twitter: "ট্যুইট করুন"
+
+shortcode:
+  recent_articles: "সাম্প্রতিক"
diff --git a/web/themes/congo/i18n/de.yaml b/web/themes/congo/i18n/de.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3136b93b316938cbd7b70fbdc6820b9919cd1b98
--- /dev/null
+++ b/web/themes/congo/i18n/de.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Anker"
+  date: "{{ .Date }}"
+  date_updated: "Aktualisiert: {{ .Date }}"
+  draft: "Entwurf"
+  edit_title: "Inhalt bearbeiten"
+  reading_time:
+    one: "{{ .Count }} min"
+    other: "{{ .Count }} min"
+  reading_time_title: "Lesezeit"
+  table_of_contents: "Inhaltsverzeichnis"
+  word_count:
+   one: "{{ .Count }} Wort"
+   other: "{{ .Count }} Wörter"
+
+author:
+  byline_title: "Autor"
+
+code:
+  copy: "Kopieren"
+  copied: "Kopiert"
+
+error:
+  404_title: "Seite nicht gefunden :confused:"
+  404_error: "Fehler 404"
+  404_description: "Es sieht so aus, als ob es diese Seite nicht gibt."
+
+footer:
+  dark_appearance: "Zum dunklen Erscheinungsbild wechseln"
+  light_appearance: "Zum hellen Erscheinungsbild wechseln"
+  powered_by: "Erstellt mit {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "Link zu einer externen Seite"
+  no_articles: "Es gibt hier noch keine Beiträge."
+
+nav:
+   scroll_to_top_title: "Zum Anfang scrollen"
+   skip_to_main: "Zum Hauptinhalt springen"
+
+search:
+   open_button_title: "Suche (/)"
+   close_button_title: "Schließen (Esc)"
+   input_placeholder: "Suchen"
+
+sharing:
+  email: "Per E-Mail teilen"
+  facebook: "Auf Facebook teilen"
+  linkedin: "Auf LinkedIn teilen"
+  pinterest: "Auf Pinterest pinnen"
+  reddit: "An Reddit senden"
+  twitter: "Auf Twitter teilen"
+
+shortcode:
+  recent_articles: "Neue Beiträge"
diff --git a/web/themes/congo/i18n/en.yaml b/web/themes/congo/i18n/en.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6787754e6f5caeacdd52ee725de31ecea51b4690
--- /dev/null
+++ b/web/themes/congo/i18n/en.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Anchor"
+  date: "{{ .Date }}"
+  date_updated: "Updated: {{ .Date }}"
+  draft: "Draft"
+  edit_title: "Edit content"
+  reading_time:
+    one: "{{ .Count }} min"
+    other: "{{ .Count }} mins"
+  reading_time_title: "Reading time"
+  table_of_contents: "Table of Contents"
+  word_count:
+    one: "{{ .Count }} word"
+    other: "{{ .Count }} words"
+
+author:
+  byline_title: "Author"
+
+code:
+  copy: "Copy"
+  copied: "Copied"
+
+error:
+  404_title: "Page Not Found :confused:"
+  404_error: "Error 404"
+  404_description: "It seems that the page you've requested does not exist."
+
+footer:
+  dark_appearance: "Switch to dark appearance"
+  light_appearance: "Switch to light appearance"
+  powered_by: ""
+
+list:
+  externalurl_title: "Link to external site"
+  no_articles: "There's no articles to list here yet."
+
+nav:
+  scroll_to_top_title: "Scroll to top"
+  skip_to_main: "Skip to main content"
+
+search:
+  open_button_title: "Search (/)"
+  close_button_title: "Close (Esc)"
+  input_placeholder: "Search"
+
+sharing:
+  email: "Send via email"
+  facebook: "Share on Facebook"
+  linkedin: "Share on LinkedIn"
+  pinterest: "Pin on Pinterest"
+  reddit: "Submit to Reddit"
+  twitter: "Tweet on Twitter"
+
+shortcode:
+  recent_articles: "Recent"
diff --git a/web/themes/congo/i18n/es.yaml b/web/themes/congo/i18n/es.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0e821b9d405d105560238db930c62497692479c8
--- /dev/null
+++ b/web/themes/congo/i18n/es.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Ancla"
+  date: "{{ .Date }}"
+  date_updated: "Actualizado: {{ .Date }}"
+  draft: "Borrador"
+  edit_title: "Editar contenido"
+  reading_time:
+    one: "{{ .Count }} min"
+    other: "{{ .Count }} mins"
+  reading_time_title: "Tiempo de lectura"
+  table_of_contents: "Tabla de contenido"
+  word_count:
+    one: "{{ .Count }} palabra"
+    other: "{{ .Count }} palabras"
+
+author:
+  byline_title: "Autor"
+
+code:
+  copy: "Copiar"
+  copied: "Copiado"
+
+error:
+  404_title: "Página no encontrada :confused:"
+  404_error: "Error 404"
+  404_description: "Parece que la página que solicitaste no existe."
+
+footer:
+  dark_appearance: "Cambiar a modo oscuro"
+  light_appearance: "Cambiar a modo claro"
+  powered_by: "Desarrollada con {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "Link a página externa"
+  no_articles: "Aún no hay artículos para listar aquí."
+
+nav:
+  scroll_to_top_title: "Ir arriba"
+  skip_to_main: "Ir al contenido"
+
+search:
+  open_button_title: "Buscar (/)"
+  close_button_title: "Cerrar (Esc)"
+  input_placeholder: "Buscar"
+
+sharing:
+  email: "Enviar vía email"
+  facebook: "Compartir en Facebook"
+  linkedin: "Compartir en LinkedIn"
+  pinterest: "Pinear en Pinterest"
+  reddit: "Publicar en Reddit"
+  twitter: "Tuitear en Twitter"
+
+shortcode:
+  recent_articles: "Reciente"
diff --git a/web/themes/congo/i18n/fi.yaml b/web/themes/congo/i18n/fi.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ac95bd7cd201f5a95017a6666460713c34e5e25b
--- /dev/null
+++ b/web/themes/congo/i18n/fi.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Ankkuri"
+  date: "{{ .Date }}"
+  date_updated: "Päivitetty: {{ .Date }}"
+  draft: "Luonnos"
+  edit_title: "Muokkaa sisältöä"
+  reading_time:
+    one: "{{ .Count }} minuutti"
+    other: "{{ .Count }} minuuttia"
+  reading_time_title: "Lukuaika"
+  table_of_contents: "Sisällysluettelo"
+  word_count:
+    one: "{{ .Count }} sana"
+    other: "{{ .Count }} sanaa"
+
+author:
+  byline_title: "Kirjoittaja"
+
+code:
+  copy: "Kopioi"
+  copied: "Kopioitu"
+
+error:
+  404_title: "Sivua ei löydy :confused:"
+  404_error: "Virhe 404"
+  404_description: "Valitettavasti pyytämääsi sivua ei ole olemassa."
+
+footer:
+  dark_appearance: "Vaihda tummaan teemaan"
+  light_appearance: "Vaihda valoisaan teemaan"
+  powered_by: "Voimanlähteenä {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "Linkki ulkoiselle sivustolle"
+  no_articles: "Täällä ei vielä ole listattavia artikkeleita, vielä."
+
+nav:
+  scroll_to_top_title: "Takaisin ylös"
+  skip_to_main: "Siirry pääsisältöön"
+
+search:
+  open_button_title: "Hae (/)"
+  close_button_title: "Sulje (Esc)"
+  input_placeholder: "Haku"
+
+sharing:
+  email: "Lähetä sähköpostilla"
+  facebook: "Jaa Facebookissa"
+  linkedin: "Jaa LinkedInissä"
+  pinterest: "Kiinnitä Pinterestiin"
+  reddit: "Lähetä Reddittiin"
+  twitter: "Twiittaa Twitterissä"
+
+shortcode:
+  recent_articles: "Viimeaikaiset"
diff --git a/web/themes/congo/i18n/fr.yaml b/web/themes/congo/i18n/fr.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ca93d03f391e13f584e71ffa38ec003ed0bfc904
--- /dev/null
+++ b/web/themes/congo/i18n/fr.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Ancre"
+  date: "{{ .Date }}"
+  date_updated: "Mis à jour : {{ .Date }}"
+  draft: "Brouillon"
+  edit_title: "Modifier"
+  reading_time:
+    one: "{{ .Count }} min"
+    other: "{{ .Count }} mins"
+  reading_time_title: "Temps de lecture"
+  table_of_contents: "Sommaire"
+  word_count:
+    one: "{{ .Count }} mot"
+    other: "{{ .Count }} mots"
+
+author:
+  byline_title: "Auteur"
+
+code:
+  copy: "Copier"
+  copied: "Copié"
+
+error:
+  404_title: "Cette page n'existe pas :confused:"
+  404_error: "Erreur 404"
+  404_description: "Il semble que la page que vous cherchiez n'existe pas."
+
+footer:
+  dark_appearance: "Passer au thème sombre"
+  light_appearance: "Passer au thème clair"
+  powered_by: "Propulsé par {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "Lien d'article externe."
+  no_articles: "Il n'y a pas encore d'article ici."
+
+nav:
+  scroll_to_top_title: "Faire défiler jusqu'au bas de la page"
+  skip_to_main: "Aller au contenu"
+
+search:
+  open_button_title: "Rechercher (/)"
+  close_button_title: "Fermer (Esc)"
+  input_placeholder: "Rechercher"
+
+sharing:
+  email: "Envoyer par email"
+  facebook: "Poster sur Facebook"
+  linkedin: "Poster sur LinkedIn"
+  pinterest: "Poster sur Pinterest"
+  reddit: "Poster sur Reddit"
+  twitter: "Tweeter"
+
+shortcode:
+  recent_articles: "Articles récents"
diff --git a/web/themes/congo/i18n/he.yaml b/web/themes/congo/i18n/he.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..444084d23171465cd774aafdd2b0aea5ee517cf4
--- /dev/null
+++ b/web/themes/congo/i18n/he.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "עוגן"
+  date: "{{ .Date }}"
+  date_updated: "עודכן: {{ .Date }}"
+  draft: "טיוטה"
+  edit_title: "ערוך תוכן"
+  reading_time:
+    one: "{{ .Count }} דקה"
+    other: "{{ .Count }} דקות"
+  reading_time_title: "זמן קריאה"
+  table_of_contents: "תוכן עניינים"
+  word_count:
+    one: "{{ .Count }} מילה"
+    other: "{{ .Count }} מילים"
+
+author:
+  byline_title: "מחבר"
+
+code:
+  copy: "העתק"
+  copied: "הועתק"
+
+error:
+  404_title: "הדף לא נמצא :confused:"
+  404_error: "שגיאה 404"
+  404_description: "נראה שהדף שביקשת לא קיים."
+
+footer:
+  dark_appearance: "מעבר למצב לילה"
+  light_appearance: "מעבר למצב יום"
+  powered_by: "בנוי בעזרת {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "קישור לאתר חיצוני"
+  no_articles: "אין כרגע מאמרים ברשימה זו."
+
+nav:
+  scroll_to_top_title: "חזרה למעלה"
+  skip_to_main: "דילוג לתוכן"
+
+search:
+  open_button_title: "חיפוש (/)"
+  close_button_title: "סגירה (Esc)"
+  input_placeholder: "חיפוש"
+
+sharing:
+  email: "שליחת אימייל"
+  facebook: "שיתוף בפייסבוק"
+  linkedin: "שיתוף בלינקדאין"
+  pinterest: "שיתוף בפינטרסט"
+  reddit: "שליחה לרדיט"
+  twitter: "ציוץ בטוויטר"
+
+shortcode:
+  recent_articles: "חדשים"
diff --git a/web/themes/congo/i18n/hu.yaml b/web/themes/congo/i18n/hu.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..333e6e9e007211d1f808a1da4b0595fe445e1904
--- /dev/null
+++ b/web/themes/congo/i18n/hu.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Horgony"
+  date: "{{ .Date }}"
+  date_updated: "Frissítve: {{ .Date }}"
+  draft: "Vázlat"
+  edit_title: "Tartalom szerkesztése"
+  reading_time:
+    one: "{{ .Count }} perc"
+    other: "{{ .Count }} perc"
+  reading_time_title: "Olvasási idő"
+  table_of_contents: "Tartalomjegyzék"
+  word_count:
+    one: "{{ .Count }} szó"
+    other: "{{ .Count }} szó"
+
+author:
+  byline_title: "Szerző"
+
+code:
+  copy: "Másolás"
+  copied: "Másolva"
+
+error:
+  404_title: "Az oldal nem található :confused:"
+  404_error: "404-es hiba"
+  404_description: "Úgy tűnik a kért oldal nem található."
+
+footer:
+  dark_appearance: "Váltás sötét megjelenésre"
+  light_appearance: "Váltás világos megjelenésre"
+  powered_by: "Működteti {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "Link külső oldalra"
+  no_articles: "Itt még nincsenek tartalmak."
+
+nav:
+  scroll_to_top_title: "Görgess fel"
+  skip_to_main: "Ugrás a tartalomra"
+
+search:
+  open_button_title: "Keresés (/)"
+  close_button_title: "Bezárás (Esc)"
+  input_placeholder: "Keresés"
+
+sharing:
+  email: "Küldés emailben"
+  facebook: "Megosztás a Facebookon"
+  linkedin: "Megosztás a LinkedInen"
+  pinterest: "Megosztás a Pinteresten"
+  reddit: "Megosztás a Redditen"
+  twitter: "Megosztás a Twitteren"
+
+shortcode:
+  recent_articles: "Friss"
diff --git a/web/themes/congo/i18n/it.yaml b/web/themes/congo/i18n/it.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ec1190a76e29abd8c2bc7ecfda94ad71aa4533d6
--- /dev/null
+++ b/web/themes/congo/i18n/it.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Ancora"
+  date: "{{ .Date }}"
+  date_updated: "Aggiornato: {{ .Date }}"
+  draft: "Bozza"
+  edit_title: "Modifica i contenuti"
+  reading_time:
+    one: "{{ .Count }} minuto"
+    other: "{{ .Count }} minuti"
+  reading_time_title: "Tempo di lettura"
+  table_of_contents: "Indice dei contenuti"
+  word_count:
+    one: "{{ .Count }} parola"
+    other: "{{ .Count }} parole"
+
+author:
+  byline_title: "Autore"
+
+code:
+  copy: "Copia"
+  copied: "Copiato"
+
+error:
+  404_title: "Pagina non trovata :confused:"
+  404_error: "Errore 404"
+  404_description: "Sembra che la pagina che hai richiesto non esista."
+
+footer:
+  dark_appearance: "Passa all'aspetto scuro"
+  light_appearance: "Passa all'aspetto chiaro"
+  powered_by: "Creato con {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "Link a sito esterno"
+  no_articles: "Non ci sono ancora articoli da elencare"
+
+nav:
+  scroll_to_top_title: "Torna in cima"
+  skip_to_main: "Salta al contenuto principale"
+
+search:
+  open_button_title: "Cerca (/)"
+  close_button_title: "Chiudi (Esc)"
+  input_placeholder: "Cerca"
+
+sharing:
+  email: "Invia tramite email"
+  facebook: "Condividi su Facebook"
+  linkedin: "Condividi su LinkedIn"
+  pinterest: "Pinna su Pinterest"
+  reddit: "Invia a Reddit"
+  twitter: "Tweetta su Twitter"
+
+shortcode:
+  recent_articles: "Recenti"
diff --git a/web/themes/congo/i18n/ja.yaml b/web/themes/congo/i18n/ja.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..84c8deeea8bd29d8f4d635bd55ad1226ee18a418
--- /dev/null
+++ b/web/themes/congo/i18n/ja.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "アンカー"
+  date: "{{ .Date }}"
+  date_updated: "æ›´æ–°æ—¥: {{ .Date }}"
+  draft: "下書き"
+  edit_title: "編集"
+  reading_time:
+    one: "{{ .Count }} 分"
+    other: "{{ .Count }} 分"
+  reading_time_title: "読むのに必要な時間"
+  table_of_contents: "目次"
+  word_count:
+    one: "{{ .Count }} 文字"
+    other: "{{ .Count }} 文字"
+  
+author:
+  byline_title: "著者"
+
+code:
+  copy: "コピー"
+  copied: "コピーしました"
+
+error:
+  404_title: "ページが見つかりませんでした。 :confused:"
+  404_error: "Error 404"
+  404_description: "ご要望のページは存在しないようです。"
+
+footer:
+  dark_appearance: "ダークモードへ切り替え"
+  light_appearance: "ライトモードへ切り替え"
+  powered_by: "Powered by {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "外部サイトへリンク"
+  no_articles: "ここに掲載する記事はまだありません。"
+
+nav:
+  scroll_to_top_title: "TOPへスクロール"
+  skip_to_main: "メインコンテンツへスキップ"
+
+search:
+  open_button_title: "検索 (/)"
+  close_button_title: "閉じる (Esc)"
+  input_placeholder: "Search"
+
+sharing:
+  email: " Eメールを送る"
+  facebook: "Facebookでシェアする"
+  linkedin: "LinkedInでシェアする"
+  pinterest: "Pinterestでピンする"
+  reddit: "Redditに投稿する"
+  twitter: "Twitterに投稿する"
+
+shortcode:
+  recent_articles: "最近の記事"
diff --git a/web/themes/congo/i18n/nl.yaml b/web/themes/congo/i18n/nl.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d73695b7860be042c493dfaea306f576aaf93934
--- /dev/null
+++ b/web/themes/congo/i18n/nl.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Anker"
+  date: "{{ .Date }}"
+  date_updated: "Bijgwerkt: {{ .Date }}"
+  draft: "Concept"
+  edit_title: "Bewerk inhoud"
+  reading_time:
+    one: "{{ .Count }} minuut"
+    other: "{{ .Count }} minuten"
+  reading_time_title: "Leestijd"
+  table_of_contents: "Inhoudsopgave"
+  word_count:
+    one: "{{ .Count }} woord"
+    other: "{{ .Count }} woorden"
+
+author:
+  byline_title: "Auteur"
+
+code:
+  copy: "Kopieer"
+  copied: "Gekopieerd"
+
+error:
+  404_title: "Pagina niet gevonden :confused:"
+  404_error: "Fout 404"
+  404_description: "Het lijkt er op dat de opgevraagde pagina niet bestaat."
+
+footer:
+  dark_appearance: "Omschakelen naar donker uiterlijk"
+  light_appearance: "Omschakelen naar licht uiterlijk"
+  powered_by: "Aangedreven door {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "Link naar externe site"
+  no_articles: "Er zijn nog geen artikelen om hier weer te geven."
+
+nav:
+  scroll_to_top_title: "Scroll naar toven"
+  skip_to_main: "Spring naar inhoud"
+
+search:
+  open_button_title: "Zoeken (/)"
+  close_button_title: "Sluiten (Esc)"
+  input_placeholder: "Zoeken"
+
+sharing:
+  email: "Verstuur via email"
+  facebook: "Deel op Facebook"
+  linkedin: "Deel op LinkedIn"
+  pinterest: "Pin op Pinterest"
+  reddit: "Verzend naar Reddit"
+  twitter: "Tweet op Twitter"
+
+shortcode:
+  recent_articles: "Recent"
\ No newline at end of file
diff --git a/web/themes/congo/i18n/pt-BR.yaml b/web/themes/congo/i18n/pt-BR.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f9cc48b4f1768f438d025f94145063136bf2c2da
--- /dev/null
+++ b/web/themes/congo/i18n/pt-BR.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Anchor"
+  date: "{{ .Date }}"
+  # date_updated: "Updated: {{ .Date }}"
+  draft: "Draft"
+  edit_title: "Editar Conteúdo"
+  reading_time:
+    one: "{{ .Count }} minuto"
+    other: "{{ .Count }} minutos"
+  reading_time_title: "Tempo de leitura"
+  # table_of_contents: "Table of Contents"
+  # word_count:
+  # one: "{{ .Count }} word"
+  # other: "{{ .Count }} words"
+
+author:
+  byline_title: "Autor"
+
+# code:
+#   copy: "Copy"
+#   copied: "Copied"
+
+error:
+  404_title: "Página não econtrada :confused:"
+  404_error: "Erro 404"
+  404_description: "Aparentemente a página requisitada não existe."
+
+footer:
+  dark_appearance: "Mudar para modo escuro"
+  light_appearance: "Mudar para modo claro"
+  powered_by: "Movido por {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "Link para site externo"
+  no_articles: "Não tem artigos para lista aqui ainda."
+
+# nav:
+#   scroll_to_top_title: "Scroll to top"
+#   skip_to_main: "Skip to main content"
+
+# search:
+#   open_button_title: "Search (/)"
+#   close_button_title: "Close (Esc)"
+#   input_placeholder: "Search"
+
+sharing:
+  email: "Enviar por email"
+  facebook: "Compartilhar pelo Facebook"
+  linkedin: "Compartilhar pelo LinkedIn"
+  pinterest: "Pin no Pinterest"
+  reddit: "Postar no Reddit"
+  twitter: "Tweet no Twitter"
+
+shortcode:
+  recent_articles: "Recente"
diff --git a/web/themes/congo/i18n/pt-PT.yaml b/web/themes/congo/i18n/pt-PT.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e326f96a7b33484d9096e6f0f55189981a921ef7
--- /dev/null
+++ b/web/themes/congo/i18n/pt-PT.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Anchor"
+  date: "{{ .Date }}"
+  date_updated: "Atualizado a: {{ .Date }}"
+  draft: "Rascunho"
+  edit_title: "Editar Conteúdo"
+  reading_time:
+    one: "{{ .Count }} minuto"
+    other: "{{ .Count }} minutos"
+  reading_time_title: "Tempo de leitura"
+  table_of_contents: "Tabela de conteúdos"
+  word_count:
+    one: "{{ .Count }} palavra"
+    other: "{{ .Count }} palavras"
+
+author:
+  byline_title: "Autor"
+
+code:
+  copy: "Copiar"
+  copied: "Copiado"
+
+error:
+  404_title: "Página não econtrada :confused:"
+  404_error: "Erro 404"
+  404_description: "Aparentemente a página pretendida não existe."
+
+footer:
+  dark_appearance: "Mudar para modo escuro"
+  light_appearance: "Mudar para modo claro"
+  powered_by: "Movido por {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "Link para site externo"
+  no_articles: "Ainda não existem artigos para listar aqui."
+
+nav:
+  scroll_to_top_title: "Ir para o topo"
+  skip_to_main: "Ir para o conteúdo principal"
+
+search:
+  open_button_title: "Pesquisar (/)"
+  close_button_title: "Fechar (Esc)"
+  input_placeholder: "Pesquisar"
+
+sharing:
+  email: "Partilhar por email"
+  facebook: "Partilhar pelo Facebook"
+  linkedin: "Partilhar pelo LinkedIn"
+  pinterest: "Partilhar no Pinterest"
+  reddit: "Partilhar no Reddit"
+  twitter: "Partilhar no Twitter"
+
+shortcode:
+  recent_articles: "Recente"
diff --git a/web/themes/congo/i18n/ro.yaml b/web/themes/congo/i18n/ro.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d9c49d11c209a466dd105c9ba76d27f76cf0bbdb
--- /dev/null
+++ b/web/themes/congo/i18n/ro.yaml
@@ -0,0 +1,55 @@
+article:
+  anchor_label: "Link"
+  date: "{{ .Date }}"
+  date_updated: "Modificat la: {{ .Date }}"
+  draft: "Draft"
+  edit_title: "Editează"
+  reading_time:
+    one: "{{ .Count }} min"
+    other: "{{ .Count }} minute"
+  reading_time_title: "Citit în"
+  table_of_contents: "Cuprins"
+  word_count:
+    one: "{{ .Count }} cuvânt"
+    other: "{{ .Count }} cuvinte"
+
+author:
+  byline_title: "Autor"
+
+code:
+  copy: "Copiază"
+  copied: "Copiat"
+
+error:
+  404_title: "Pagină Lipsă :confused:"
+  404_error: "Eroare 404"
+  404_description: "Se pare că pagina pe care o cauți nu există."
+
+footer:
+  dark_appearance: "Schimbă la tema de noapte"
+  light_appearance: "Schimbă la tema normală"
+  powered_by: "Powered by {{ .Hugo }} &amp; {{ .Congo }}"
+
+list:
+  externalurl_title: "Link la site extern"
+  no_articles: "Nu avem încă niciun articol."
+
+nav:
+  scroll_to_top_title: "ÃŽnapoi sus"
+  skip_to_main: "Sari la conținut"
+
+search:
+  open_button_title: "Caută (/)"
+  close_button_title: "ÃŽnchide (Esc)"
+  input_placeholder: "Caută"
+
+sharing:
+  email: "Trimite pe email"
+  facebook: "Postează pe Facebook"
+  linkedin: "Postează LinkedIn"
+  pinterest: "Pune pe Pinterest"
+  reddit: "Postează pe Reddit"
+  twitter: "Scrie pe Twitter"
+
+shortcode:
+  recent_articles: "Cele mai noi"
diff --git a/web/themes/congo/i18n/tr.yaml b/web/themes/congo/i18n/tr.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..7361c64099611c7ff4d5eb45f5569da4d7027424
--- /dev/null
+++ b/web/themes/congo/i18n/tr.yaml
@@ -0,0 +1,55 @@
+article:
+  # anchor_label: "Anchor"
+  date: "{{ .Date }}"
+  date_updated: "Güncellendi: {{ .Date }}"
+  draft: "Taslak"
+  edit_title: "İçeriği düzenle"
+  reading_time:
+    one: "{{ .Count }} dk"
+    other: "{{ .Count }} dk"
+  reading_time_title: "Okuma süresi"
+  word_count:
+    one: "{{ .Count }} kelime"
+    other: "{{ .Count }} kelime"
+
+author:
+  byline_title: "Yazar"
+
+code:
+  copy: "Kopyala"
+  copied: "Kopyalandı"
+
+error:
+  404_title: "Sayfa Bulunamadı :confused:"
+  404_error: "Hata 404"
+  404_description: "Görünüşe göre istediğiniz sayfa mevcut değil."
+
+footer:
+  dark_appearance: "Koyu görünüme geç"
+  light_appearance: "Açık görünüme geç"
+  powered_by: "{{ .Hugo }} &amp; {{ .Congo }} tarafından desteklenmektedir."
+
+list:
+  externalurl_title: "Harici siteye bağlantı"
+  no_articles: "Henüz burada listelenecek bir makale yok."
+
+nav:
+  scroll_to_top_title: "Yukarı çık"
+  skip_to_main: "Ana içeriğe geç"
+
+search:
+  open_button_title: "Ara (/)"
+  close_button_title: "Kapat (Esc)"
+  input_placeholder: "Ara"
+
+sharing:
+  email: "Email ile gönder"
+  facebook: "Facebook'ta paylaÅŸ"
+  linkedin: "LinkedIn'te paylaÅŸ"
+  pinterest: "Pinterest'te pinle"
+  reddit: "Reddit'te gönder"
+  twitter: "Twitter'da Tweetle"
+
+shortcode:
+  recent_articles: "Güncel"
+  icon_none: "Icon bulunamadı."
diff --git a/web/themes/congo/i18n/zh-CN.yaml b/web/themes/congo/i18n/zh-CN.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f72e3690f8eefc969a4295d1130321d4982d1332
--- /dev/null
+++ b/web/themes/congo/i18n/zh-CN.yaml
@@ -0,0 +1,54 @@
+article:
+  anchor_label: "锚点"
+  date: "{{ .Date }}"
+  # date_updated: "Updated: {{ .Date }}"
+  draft: "草稿"
+  edit_title: "编辑内容"
+  reading_time:
+    other: "{{ .Count }} 分钟"
+  reading_time_title: "预计阅读"
+  # table_of_contents: "Table of Contents"
+  word_count:
+    one: "{{ .Count }} å­—"
+    other: "{{ .Count }} å­—"
+
+author:
+  byline_title: "作者"
+
+# code:
+#   copy: "Copy"
+#   copied: "Copied"
+
+error:
+  404_title: "找不到网页 :confused:"
+  404_error: "404 错误"
+  404_description: "您请求的页面似乎不存在。"
+
+footer:
+  dark_appearance: "切换为深色模式"
+  light_appearance: "切换为浅色模式"
+  powered_by: "由 {{ .Hugo }} &amp; {{ .Congo }} 强力驱动"
+
+list:
+  externalurl_title: "链接到外部网站"
+  no_articles: "这里还没有任何文章可以列出。"
+
+# nav:
+#   scroll_to_top_title: "Scroll to top"
+#   skip_to_main: "Skip to main content"
+
+# search:
+#   open_button_title: "Search (/)"
+#   close_button_title: "Close (Esc)"
+#   input_placeholder: "Search"
+
+sharing:
+  email: "通过电子邮件发送"
+  facebook: "分享到 Facebook"
+  linkedin: "分享到 LinkedIn"
+  pinterest: "钉到 Pinterest"
+  reddit: "提交到 Reddit"
+  twitter: "分享到 Twitter"
+
+shortcode:
+  recent_articles: "最近的文章"
diff --git a/web/themes/congo/i18n/zh-TW.yaml b/web/themes/congo/i18n/zh-TW.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ef136505edfcb460fda1a224575716f4646ebe79
--- /dev/null
+++ b/web/themes/congo/i18n/zh-TW.yaml
@@ -0,0 +1,54 @@
+article:
+  anchor_label: "定位點"
+  date: "{{ .Date }}"
+  date_updated: "上次編輯: {{ .Date }}"
+  draft: "草稿"
+  edit_title: "編輯內容"
+  reading_time:
+    other: "{{ .Count }} 分鐘"
+  reading_time_title: "預計閱讀時間"
+  table_of_contents: "目錄"
+  word_count:
+    one: "{{ .Count }} å­—"
+    other: "{{ .Count }} å­—"
+
+author:
+  byline_title: "作者"
+
+code:
+  copy: "複製"
+  copied: "已複製"
+
+error:
+  404_title: "找不到網頁 :confused:"
+  404_error: "404 錯誤"
+  404_description: "您在尋找的頁面似乎不存在。"
+
+footer:
+  dark_appearance: "切換為深色模式"
+  light_appearance: "切換為淺色模式"
+  powered_by: "以 {{ .Hugo }} &amp; {{ .Congo }} 製作"
+
+list:
+  externalurl_title: "外部網站連結"
+  no_articles: "這裡還沒有任何文章。"
+
+nav:
+  scroll_to_top_title: "捲動到頁頂"
+  skip_to_main: "快轉到主要內容"
+
+search:
+  open_button_title: "搜尋 (/)"
+  close_button_title: "關閉 (Esc)"
+  input_placeholder: "搜尋"
+
+sharing:
+  email: "以電子郵件發送"
+  facebook: "分享到 Facebook"
+  linkedin: "分享到 LinkedIn"
+  pinterest: "釘到 Pinterest"
+  reddit: "發送到 Reddit"
+  twitter: "推到 Twitter"
+
+shortcode:
+  recent_articles: "最近的文章"
\ No newline at end of file
diff --git a/web/themes/congo/images/home-page.jpg b/web/themes/congo/images/home-page.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2a619e0523ec572fb4c5ddad9361abcbce2372ea
Binary files /dev/null and b/web/themes/congo/images/home-page.jpg differ
diff --git a/web/themes/congo/images/home-profile-list.jpg b/web/themes/congo/images/home-profile-list.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..319da77b7869839ff11b72af5dc3f5025fb24744
Binary files /dev/null and b/web/themes/congo/images/home-profile-list.jpg differ
diff --git a/web/themes/congo/images/home-profile.jpg b/web/themes/congo/images/home-profile.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..006c8576eaac50cfe70cd4af8c1c398aca3fa156
Binary files /dev/null and b/web/themes/congo/images/home-profile.jpg differ
diff --git a/web/themes/congo/images/screenshot.png b/web/themes/congo/images/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..704613402c952d27b87c09984982c9d580a3e937
Binary files /dev/null and b/web/themes/congo/images/screenshot.png differ
diff --git a/web/themes/congo/images/tn.png b/web/themes/congo/images/tn.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ce0437cb7b7458c77647d9617a89f0ed0fa6207
Binary files /dev/null and b/web/themes/congo/images/tn.png differ
diff --git a/web/themes/congo/layouts/404.html b/web/themes/congo/layouts/404.html
new file mode 100644
index 0000000000000000000000000000000000000000..e73c98ce2a86bb03b37ac4e0f5064a2cc98a7d8a
--- /dev/null
+++ b/web/themes/congo/layouts/404.html
@@ -0,0 +1,9 @@
+{{ define "main" }}
+  <h1 class="mb-3 text-4xl font-extrabold">{{ i18n "error.404_title" | emojify }}</h1>
+  <p class="mt-8 mb-12 text-neutral-400 dark:text-neutral-500">
+    {{ i18n "error.404_error" | emojify }}
+  </p>
+  <div class="prose dark:prose-invert">
+    <p>{{ i18n "error.404_description" | emojify }}</p>
+  </div>
+{{ end }}
diff --git a/web/themes/congo/layouts/_default/_markup/render-heading.html b/web/themes/congo/layouts/_default/_markup/render-heading.html
new file mode 100644
index 0000000000000000000000000000000000000000..7ebc04524d54fb961956448e25328f411f98598a
--- /dev/null
+++ b/web/themes/congo/layouts/_default/_markup/render-heading.html
@@ -0,0 +1 @@
+<h{{ .Level }} id="{{ .Anchor | safeURL }}" class="relative group">{{ .Text | safeHTML }} {{ if .Page.Params.showHeadingAnchors | default (.Page.Site.Params.article.showHeadingAnchors | default true) }}<span class="absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#{{ .Anchor | safeURL }}" aria-label="{{ i18n "article.anchor_label" }}">#</a></span>{{ end }}</h{{ .Level }}>
diff --git a/web/themes/congo/layouts/_default/_markup/render-image.html b/web/themes/congo/layouts/_default/_markup/render-image.html
new file mode 100644
index 0000000000000000000000000000000000000000..723c1dc2f1da3f4ef06221f0504380cd2430745e
--- /dev/null
+++ b/web/themes/congo/layouts/_default/_markup/render-image.html
@@ -0,0 +1,36 @@
+{{ $url := urls.Parse .Destination }}
+{{ $altText := .Text }}
+{{ $caption := .Title }}
+{{ if findRE "^https?" $url.Scheme }}
+  <figure>
+    <img class="my-0 rounded-md" src="{{ $url.String }}" alt="{{ $altText }}" />
+    {{ with $caption }}<figcaption>{{ . | markdownify }}</figcaption>{{ end }}
+  </figure>
+{{ else }}
+  {{ $resource := "" }}
+  {{ if $.Page.Resources.GetMatch ($url.String) }}
+    {{ $resource = $.Page.Resources.GetMatch ($url.String) }}
+  {{ else if resources.GetMatch ($url.String) }}
+    {{ $resource = resources.Get ($url.String) }}
+  {{ end }}
+  {{ with $resource }}
+    <figure>
+      <img
+        class="my-0 rounded-md"
+        srcset="
+          {{ (.Resize "330x").RelPermalink }} 330w,
+          {{ (.Resize "660x").RelPermalink }} 660w,
+          {{ (.Resize "1024x").RelPermalink }} 1024w,
+          {{ (.Resize "1320x").RelPermalink }} 2x"
+        src="{{ (.Resize "660x").RelPermalink }}"
+        alt="{{ $altText }}"
+      />
+      {{ with $caption }}<figcaption>{{ . | markdownify }}</figcaption>{{ end }}
+    </figure>
+  {{ else }}
+    <figure>
+      <img class="my-0 rounded-md" src="{{ $url.String }}" alt="{{ $altText }}" />
+      {{ with $caption }}<figcaption>{{ . | markdownify }}</figcaption>{{ end }}
+    </figure>
+  {{ end }}
+{{ end }}
diff --git a/web/themes/congo/layouts/_default/_markup/render-link.html b/web/themes/congo/layouts/_default/_markup/render-link.html
new file mode 100644
index 0000000000000000000000000000000000000000..9ab61ac496337e298769a505e5e420effd2b74cf
--- /dev/null
+++ b/web/themes/congo/layouts/_default/_markup/render-link.html
@@ -0,0 +1,3 @@
+<a href="{{ .Destination | safeURL }}" {{ with .Title}} title="{{ . }}"{{ end }} {{ if or (strings.HasPrefix .Destination "http:") (strings.HasPrefix .Destination "https:") }} target="_blank"{{ end }}>
+    {{- .Text | safeHTML -}}
+</a>
\ No newline at end of file
diff --git a/web/themes/congo/layouts/_default/baseof.html b/web/themes/congo/layouts/_default/baseof.html
new file mode 100644
index 0000000000000000000000000000000000000000..7fc925a84bdbf366a327af5b0b0bdbee1992621b
--- /dev/null
+++ b/web/themes/congo/layouts/_default/baseof.html
@@ -0,0 +1,59 @@
+{{- partial "partials/functions/warnings.html" .Site -}}
+<!DOCTYPE html>
+<html
+  lang="{{ with .Site.Params.isoCode | default (.Site.LanguageCode | default "en") }}
+    {{- . -}}
+  {{ end }}"
+  dir="{{ if .Site.Params.rtl | default false -}}
+    rtl
+  {{- else -}}
+    ltr
+  {{- end }}"
+  class="scroll-smooth"
+  data-default-appearance="{{ .Site.Params.defaultAppearance | default "light" }}"
+  data-auto-appearance="{{ .Site.Params.autoSwitchAppearance | default "true" }}"
+>
+  {{- partial "head.html" . -}}
+  <body
+    class="flex flex-col h-screen px-6 m-auto text-lg leading-7 max-w-7xl bg-neutral text-neutral-900 dark:bg-neutral-800 dark:text-neutral sm:px-14 md:px-24 lg:px-32"
+  >
+    <div id="the-top" class="absolute flex self-center">
+      <a
+        class="px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 focus:translate-y-0 dark:bg-neutral-600"
+        href="#main-content"
+        ><span class="font-bold text-primary-600 ltr:pr-2 rtl:pl-2 dark:text-primary-400"
+          >&darr;</span
+        >{{ i18n "nav.skip_to_main" }}</a
+      >
+    </div>
+    {{ $header := print "partials/header/" .Site.Params.header.layout ".html" }}
+    {{ if templates.Exists $header }}
+      {{ partial $header . }}
+    {{ else }}
+      {{ partial "partials/header/basic.html" . }}
+    {{ end }}
+    <div class="relative flex flex-col grow">
+      <main id="main-content" class="grow">
+        {{ block "main" . }}{{ end }}
+        {{ if and (.Site.Params.footer.showScrollToTop | default true) (gt .WordCount 200) }}
+          <div
+            class="pointer-events-none absolute top-[100vh] bottom-0 w-12 ltr:right-0 rtl:left-0"
+          >
+            <a
+              href="#the-top"
+              class="pointer-events-auto sticky top-[calc(100vh-5.5rem)] flex h-12 w-12 items-center justify-center rounded-full bg-neutral/50 text-xl text-neutral-700 backdrop-blur hover:text-primary-600 dark:bg-neutral-800/50 dark:text-neutral dark:hover:text-primary-400"
+              aria-label="{{ i18n "nav.scroll_to_top_title" }}"
+              title="{{ i18n "nav.scroll_to_top_title" }}"
+            >
+              &uarr;
+            </a>
+          </div>
+        {{ end }}
+      </main>
+      {{- partial "footer.html" . -}}
+      {{ if .Site.Params.enableSearch | default false }}
+        {{- partial "search.html" . -}}
+      {{ end }}
+    </div>
+  </body>
+</html>
diff --git a/web/themes/congo/layouts/_default/index.json b/web/themes/congo/layouts/_default/index.json
new file mode 100644
index 0000000000000000000000000000000000000000..d431d3d7c3eba64fa961e354c49b7a24d9f85770
--- /dev/null
+++ b/web/themes/congo/layouts/_default/index.json
@@ -0,0 +1,13 @@
+{{- $index := slice -}}
+{{- range .Site.Pages -}}
+  {{- $section := .Site.GetPage "section" .Section -}}
+  {{- $index = $index | append (dict
+    "date" (.Date | time.Format (.Site.Language.Params.dateFormat | default ":date_long")) 
+    "title" (.Title | emojify | safeJS)
+    "section" ($section.Title | emojify | safeJS)
+    "summary" (.Summary | emojify | safeJS)
+    "content" (.Plain | emojify | safeJS)
+    "permalink" .RelPermalink
+  ) -}}
+{{- end -}}
+{{- $index | jsonify -}}
diff --git a/web/themes/congo/layouts/_default/list.html b/web/themes/congo/layouts/_default/list.html
new file mode 100644
index 0000000000000000000000000000000000000000..bc901892f66e4a3c0264bd03f4f370e02493f623
--- /dev/null
+++ b/web/themes/congo/layouts/_default/list.html
@@ -0,0 +1,18 @@
+{{ define "main" }}
+  <article class="max-w-full">
+    <header>
+      {{ if .Params.showBreadcrumbs | default (.Site.Params.article.showBreadcrumbs | default false) }}
+        {{ partial "breadcrumbs.html" . }}
+      {{ end }}
+      <h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">
+        {{ .Title | emojify }}
+      </h1>
+    </header>
+    <section class="max-w-full mt-6 prose dark:prose-invert">
+      {{ .Content | emojify }}
+    </section>
+    <footer class="pt-8">
+      {{ partial "sharing-links.html" . }}
+    </footer>
+  </article>
+{{ end }}
diff --git a/web/themes/congo/layouts/_default/list.html.old b/web/themes/congo/layouts/_default/list.html.old
new file mode 100644
index 0000000000000000000000000000000000000000..b07b10ac4bdc53fe6da3dcb3dc600e32a1d9d5b1
--- /dev/null
+++ b/web/themes/congo/layouts/_default/list.html.old
@@ -0,0 +1,21 @@
+
+{{ define "main" }}
+<article class="max-w-full">
+  <header>
+    {{ if .Params.showBreadcrumbs | default (.Site.Params.article.showBreadcrumbs | default false) }}
+      {{ partial "breadcrumbs.html" . }}
+    {{ end }}
+    <h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">
+      {{ .Title | emojify }}
+    </h1>
+  </header>
+  <section class="max-w-full mt-6 prose dark:prose-invert">
+    {{ .Content | emojify }}
+  </section>
+  <footer class="pt-8">
+    {{ partial "sharing-links.html" . }}
+  </footer>
+</article>
+{{ end }}
+
+
diff --git a/web/themes/congo/layouts/_default/simple.html b/web/themes/congo/layouts/_default/simple.html
new file mode 100644
index 0000000000000000000000000000000000000000..cc8847991788a99709a63d9539d0cff34e193774
--- /dev/null
+++ b/web/themes/congo/layouts/_default/simple.html
@@ -0,0 +1,18 @@
+{{ define "main" }}
+  <article class="max-w-full">
+    <header>
+      {{ if .Params.showBreadcrumbs | default (.Site.Params.article.showBreadcrumbs | default false) }}
+        {{ partial "breadcrumbs.html" . }}
+      {{ end }}
+      <h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">
+        {{ .Title | emojify }}
+      </h1>
+    </header>
+    <section class="max-w-full mt-6 prose dark:prose-invert">
+      {{ .Content | emojify }}
+    </section>
+    <footer class="pt-8">
+      {{ partial "sharing-links.html" . }}
+    </footer>
+  </article>
+{{ end }}
diff --git a/web/themes/congo/layouts/_default/single.html b/web/themes/congo/layouts/_default/single.html
new file mode 100644
index 0000000000000000000000000000000000000000..bc901892f66e4a3c0264bd03f4f370e02493f623
--- /dev/null
+++ b/web/themes/congo/layouts/_default/single.html
@@ -0,0 +1,18 @@
+{{ define "main" }}
+  <article class="max-w-full">
+    <header>
+      {{ if .Params.showBreadcrumbs | default (.Site.Params.article.showBreadcrumbs | default false) }}
+        {{ partial "breadcrumbs.html" . }}
+      {{ end }}
+      <h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">
+        {{ .Title | emojify }}
+      </h1>
+    </header>
+    <section class="max-w-full mt-6 prose dark:prose-invert">
+      {{ .Content | emojify }}
+    </section>
+    <footer class="pt-8">
+      {{ partial "sharing-links.html" . }}
+    </footer>
+  </article>
+{{ end }}
diff --git a/web/themes/congo/layouts/_default/single.html.old b/web/themes/congo/layouts/_default/single.html.old
new file mode 100644
index 0000000000000000000000000000000000000000..cc8847991788a99709a63d9539d0cff34e193774
--- /dev/null
+++ b/web/themes/congo/layouts/_default/single.html.old
@@ -0,0 +1,18 @@
+{{ define "main" }}
+  <article class="max-w-full">
+    <header>
+      {{ if .Params.showBreadcrumbs | default (.Site.Params.article.showBreadcrumbs | default false) }}
+        {{ partial "breadcrumbs.html" . }}
+      {{ end }}
+      <h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">
+        {{ .Title | emojify }}
+      </h1>
+    </header>
+    <section class="max-w-full mt-6 prose dark:prose-invert">
+      {{ .Content | emojify }}
+    </section>
+    <footer class="pt-8">
+      {{ partial "sharing-links.html" . }}
+    </footer>
+  </article>
+{{ end }}
diff --git a/web/themes/congo/layouts/_default/sitemap.xml b/web/themes/congo/layouts/_default/sitemap.xml
new file mode 100644
index 0000000000000000000000000000000000000000..45789c64835641bbe167e345ce281fed39e01d5f
--- /dev/null
+++ b/web/themes/congo/layouts/_default/sitemap.xml
@@ -0,0 +1,28 @@
+{{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
+  xmlns:xhtml="http://www.w3.org/1999/xhtml">
+  {{ range .Data.Pages }}
+    {{ if not (in .Site.Params.sitemap.excludedKinds .Kind) }}
+      {{ if and (.Param "xml" | default true) (not (isset .Params "externalUrl")) }}
+        {{- if .Permalink -}}
+          <url>
+            <loc>{{ .Permalink }}</loc>{{ if not .Lastmod.IsZero }}
+            <lastmod>{{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ end }}{{ with .Sitemap.ChangeFreq }}
+            <changefreq>{{ . }}</changefreq>{{ end }}{{ if ge .Sitemap.Priority 0.0 }}
+            <priority>{{ .Sitemap.Priority }}</priority>{{ end }}{{ if .IsTranslated }}{{ range .Translations }}
+            <xhtml:link
+              rel="alternate"
+              hreflang="{{ .Language.Lang }}"
+              href="{{ .Permalink }}"
+              />{{ end }}
+            <xhtml:link
+              rel="alternate"
+              hreflang="{{ .Language.Lang }}"
+              href="{{ .Permalink }}"
+              />{{ end }}
+          </url>
+        {{- end -}}
+      {{ end }}
+    {{ end }}
+  {{ end }}
+</urlset>
diff --git a/web/themes/congo/layouts/_default/taxonomy.html b/web/themes/congo/layouts/_default/taxonomy.html
new file mode 100644
index 0000000000000000000000000000000000000000..a60aee5319e486a58d739f0787bd5bfdc02b677e
--- /dev/null
+++ b/web/themes/congo/layouts/_default/taxonomy.html
@@ -0,0 +1,34 @@
+{{ define "main" }}
+  <header>
+    {{ if .Params.showBreadcrumbs | default (.Site.Params.list.showBreadcrumbs | default false) }}
+      {{ partial "breadcrumbs.html" . }}
+    {{ end }}
+    <h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">{{ .Title }}</h1>
+  </header>
+  {{ if .Content }}
+    <section class="flex flex-col max-w-full mt-0 prose dark:prose-invert lg:flex-row">
+      <div class="min-w-0 min-h-0 max-w-prose grow">
+        {{ .Content | emojify }}
+      </div>
+    </section>
+  {{ end }}
+  <section class="flex flex-wrap -mx-2 overflow-hidden">
+    {{ range .Data.Terms }}
+      <article class="w-full px-2 my-3 overflow-hidden sm:w-1/2 md:w-1/3 lg:w-1/4 xl:w-1/5">
+        <h2 class="flex items-center">
+          <a
+            class="text-xl font-medium decoration-primary-500 hover:underline hover:underline-offset-2"
+            href="{{ .Page.RelPermalink }}"
+            >{{ .Page.Title }}</a
+          >
+          {{ if $.Site.Params.taxonomy.showTermCount | default true }}
+            <span class="px-2 text-base text-primary-500">&middot;</span>
+            <span class="text-base text-neutral-400">
+              {{ .Count }}
+            </span>
+          {{ end }}
+        </h2>
+      </article>
+    {{ end }}
+  </section>
+{{ end }}
diff --git a/web/themes/congo/layouts/_default/term.html b/web/themes/congo/layouts/_default/term.html
new file mode 100644
index 0000000000000000000000000000000000000000..666c84ce3967be320ab9e374c3910fcd46c157eb
--- /dev/null
+++ b/web/themes/congo/layouts/_default/term.html
@@ -0,0 +1,43 @@
+{{ define "main" }}
+  <header>
+    {{ if .Params.showBreadcrumbs | default (.Site.Params.list.showBreadcrumbs | default false) }}
+      {{ partial "breadcrumbs.html" . }}
+    {{ end }}
+    <h1 class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">{{ .Title }}</h1>
+  </header>
+  {{ if .Content }}
+    <section class="flex flex-col max-w-full mt-0 prose dark:prose-invert lg:flex-row">
+      <div class="min-w-0 min-h-0 max-w-prose grow">
+        {{ .Content | emojify }}
+      </div>
+    </section>
+  {{ end }}
+  <section>
+    {{ if .Data.Pages }}
+      <section>
+        {{ if $.Params.groupByYear | default ($.Site.Params.list.groupByYear | default true) }}
+          {{ range (.Paginate (.Pages.GroupByDate "2006")).PageGroups }}
+            <h2 class="mt-12 text-2xl font-bold text-neutral-700 first:mt-8 dark:text-neutral-300">
+              {{ .Key }}
+            </h2>
+            <hr class="border-dotted w-36 border-neutral-400" />
+            {{ range .Pages }}
+              {{ partial "article-link.html" . }}
+            {{ end }}
+          {{ end }}
+        {{ else }}
+          {{ range (.Paginate .Pages).Pages }}
+            {{ partial "article-link.html" . }}
+          {{ end }}
+        {{ end }}
+      </section>
+      {{ partial "pagination.html" . }}
+    {{ else }}
+      <section class="mt-10 prose dark:prose-invert">
+        <p class="py-8 border-t">
+          <em>{{ i18n "list.no_articles" | emojify }}</em>
+        </p>
+      </section>
+    {{ end }}
+  </section>
+{{ end }}
diff --git a/web/themes/congo/layouts/index.html b/web/themes/congo/layouts/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..2feb97aa2e95c24f3d444590703d7a8b92fb9faa
--- /dev/null
+++ b/web/themes/congo/layouts/index.html
@@ -0,0 +1,8 @@
+{{ define "main" }}
+  {{ $partial := print "partials/home/" .Site.Params.homepage.layout ".html" }}
+  {{ if templates.Exists $partial }}
+    {{ partial $partial . }}
+  {{ else }}
+    {{ partial "partials/home/page.html" . }}
+  {{ end }}
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/analytics.html b/web/themes/congo/layouts/partials/analytics.html
new file mode 100644
index 0000000000000000000000000000000000000000..f8c7c2c2727fead09243ac7abe23184257746b6b
--- /dev/null
+++ b/web/themes/congo/layouts/partials/analytics.html
@@ -0,0 +1,10 @@
+{{ if hugo.IsProduction }}
+  {{ with .Site.Params.fathomAnalytics.site }}
+    {{ if isset $.Site.Params.fathomanalytics "domain" }}
+      <script defer src="https://{{ $.Site.Params.fathomanalytics.domain }}/script.js" data-site="{{ . }}"></script>
+    {{ else }}
+      <script defer src="https://cdn.usefathom.com/script.js" data-site="{{ . }}"></script>
+    {{ end }}
+  {{ end }}
+  {{ template "_internal/google_analytics.html" . }}
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/article-link.html b/web/themes/congo/layouts/partials/article-link.html
new file mode 100644
index 0000000000000000000000000000000000000000..0482118168bad851fa0d80c1213815eab5afbcc8
--- /dev/null
+++ b/web/themes/congo/layouts/partials/article-link.html
@@ -0,0 +1,68 @@
+<article class="flex flex-row mt-6 max-w-prose">
+  {{- $images := $.Resources.ByType "image" }}
+  {{- $thumbnail := $images.GetMatch "*thumb*" }}
+  {{- $feature := $images.GetMatch "*feature*" | default $thumbnail }}
+  {{- with $feature }}
+    <div class="flex-none pr-4 sm:pr-6 ">
+      <a
+        href="{{ with $.Params.externalUrl }}
+          {{ . }}
+        {{ else }}
+          {{ $.RelPermalink }}
+        {{ end }}"
+      >
+        <img
+          class="w-24 rounded-md sm:w-40"
+          srcset="
+          {{- (.Fill "160x120 smart").RelPermalink }} 160w,
+          {{- (.Fill "320x240 smart").RelPermalink }} 2x"
+          src="{{ (.Fill "160x120 smart").RelPermalink }}"
+        />
+      </a>
+    </div>
+  {{- end }}
+  <div>
+    <h3 class="flex items-center text-xl font-semibold">
+      {{ with .Params.externalUrl }}
+        <div>
+          <a
+            class="text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral"
+            href="{{ . }}"
+            target="_blank"
+            rel="external"
+            >{{ $.Title | emojify }}</a
+          >
+          <span
+            class="text-xs align-top cursor-default text-neutral-400 dark:text-neutral-500"
+            title="{{ i18n "list.externalurl_title" }}"
+          >
+            <span class="rtl:hidden">&#8599;</span>
+            <span class="ltr:hidden">&#8598;</span>
+          </span>
+        </div>
+      {{ else }}
+        <a
+          class="text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral"
+          href="{{ .RelPermalink }}"
+          >{{ .Title | emojify }}</a
+        >
+      {{ end }}
+      {{ if and .Draft .Site.Params.article.showDraftLabel }}
+        <div class=" ltr:ml-2 rtl:mr-2">
+          {{ partial "badge.html" (i18n "article.draft" | emojify) }}
+        </div>
+      {{ end }}
+      {{ if templates.Exists "partials/extend-article-link.html" }}
+        {{ partial "extend-article-link.html" . }}
+      {{ end }}
+    </h3>
+    <div class="text-sm text-neutral-500 dark:text-neutral-400">
+      {{ partial "article-meta.html" . }}
+    </div>
+    {{ if .Params.showSummary | default (.Site.Params.list.showSummary | default false) }}
+      <div class="py-1 prose dark:prose-invert">
+        {{ .Summary | emojify }}
+      </div>
+    {{ end }}
+  </div>
+</article>
diff --git a/web/themes/congo/layouts/partials/article-meta.html b/web/themes/congo/layouts/partials/article-meta.html
new file mode 100644
index 0000000000000000000000000000000000000000..be6ccf20ea1161ddc7a6feb6aa7c959a28fda34d
--- /dev/null
+++ b/web/themes/congo/layouts/partials/article-meta.html
@@ -0,0 +1,66 @@
+{{/* Determine the correct context and scope */}}
+{{/* This allows for different logic depending on where the partial is called */}}
+{{ $context := . }}
+{{ $scope := default nil }}
+
+{{ if (reflect.IsMap . ) }}
+  {{ $context = .context }}
+  {{ $scope = cond (not .scope) nil .scope }}
+{{ end }}
+
+{{ with $context }}
+  {{ $meta := newScratch }}
+
+  {{/* Gather partials for this context */}}
+  {{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }}
+    {{ $meta.Add "partials" (slice (partial "meta/date.html" .Date)) }}
+  {{ end }}
+
+  {{ if and (.Params.showDateUpdated | default (.Site.Params.article.showDateUpdated | default false)) (ne (partial "functions/date.html" .Date) (partial "functions/date.html" .Lastmod)) }}
+    {{ $meta.Add "partials" (slice (partial "meta/date-updated.html" .Lastmod)) }}
+  {{ end }}
+
+  {{ if and (.Params.showWordCount | default (.Site.Params.article.showWordCount | default false)) (ne .WordCount 0) }}
+    {{ $meta.Add "partials" (slice (partial "meta/word-count.html" .)) }}
+  {{ end }}
+
+  {{ if and (.Params.showReadingTime | default (.Site.Params.article.showReadingTime | default true)) (ne .ReadingTime 0) }}
+    {{ $meta.Add "partials" (slice (partial "meta/reading-time.html" .)) }}
+  {{ end }}
+
+  {{ if and (eq $scope "single") (.Params.showEdit | default (.Site.Params.article.showEdit | default false)) }}
+    {{ $meta.Add "partials" (slice (partial "meta/edit.html" .)) }}
+  {{ end }}
+
+  <div class="flex flex-row flex-wrap items-center">
+    {{/* Output partials */}}
+    {{ with ($meta.Get "partials") }}
+      {{ delimit . "<span class=\"px-2 text-primary-500\">&middot;</span>" }}
+    {{ end }}
+
+    {{/* Output draft label */}}
+    {{ if and (eq $scope "single") (and .Draft .Site.Params.article.showDraftLabel) }}
+      <span class="pl-2">{{ partial "badge.html" (i18n "article.draft" | emojify) }}</span>
+    {{ end }}
+  </div>
+
+  {{/* Output taxonomies */}}
+  {{ if or
+    (and (ne $scope "single") (.Params.showTaxonomies | default (.Site.Params.list.showTaxonomies | default (.Site.Params.article.showTaxonomies | default false))))
+    (and (eq $scope "single") (.Params.showTaxonomies | default (.Site.Params.article.showTaxonomies | default false)))
+  }}
+    <div class="my-1 text-xs text-neutral-500 dark:text-neutral-400 ">
+      {{ range $taxonomy, $terms := .Site.Taxonomies }}
+        {{ if (gt (len ($context.GetTerms $taxonomy)) 0) }}
+          {{ range $context.GetTerms $taxonomy }}
+            <a
+              href="{{ .RelPermalink }}"
+              class="rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400"
+              >{{ .LinkTitle }}</a
+            >
+          {{ end }}
+        {{ end }}
+      {{ end }}
+    </div>
+  {{ end }}
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/article-pagination.html b/web/themes/congo/layouts/partials/article-pagination.html
new file mode 100644
index 0000000000000000000000000000000000000000..e031f67f95fec0930474fb0135789b7d677f2db4
--- /dev/null
+++ b/web/themes/congo/layouts/partials/article-pagination.html
@@ -0,0 +1,65 @@
+{{ if .Params.showPagination | default (.Site.Params.article.showPagination | default true) }}
+  {{ if or .NextInSection .PrevInSection }}
+    {{ $next := .NextInSection }}
+    {{ $prev := .PrevInSection }}
+    {{ if .Params.invertPagination | default (.Site.Params.article.invertPagination | default false) }}
+      {{ $next = .PrevInSection }}
+      {{ $prev = .NextInSection }}
+    {{ end }}
+    <div class="pt-8">
+      <hr class="border-dotted border-neutral-300 dark:border-neutral-600" />
+      <div class="flex justify-between pt-3">
+        <span>
+          {{ if $prev }}
+            <a class="group flex" href="{{ $prev.RelPermalink }}">
+              <span
+                class="mr-2 text-neutral-700 transition-transform group-hover:-translate-x-[2px] group-hover:text-primary-600 ltr:inline rtl:hidden dark:text-neutral dark:group-hover:text-primary-400"
+                >&larr;</span
+              >
+              <span
+                class="ml-2 text-neutral-700 transition-transform group-hover:translate-x-[2px] group-hover:text-primary-600 ltr:hidden rtl:inline dark:text-neutral dark:group-hover:text-primary-400"
+                >&rarr;</span
+              >
+              <span class="flex flex-col">
+                <span
+                  class="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500"
+                  >{{ $prev.Title | emojify }}</span
+                >
+                <span class="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400">
+                  {{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }}
+                    {{ partial "meta/date.html" $prev.Date }}
+                  {{ end }}
+                </span>
+              </span>
+            </a>
+          {{ end }}
+        </span>
+        <span>
+          {{ if $next }}
+            <a class="group flex text-right" href="{{ $next.RelPermalink }}">
+              <span class="flex flex-col">
+                <span
+                  class="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500"
+                  >{{ $next.Title | emojify }}</span
+                >
+                <span class="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400">
+                  {{ if .Params.showDate | default (.Site.Params.article.showDate | default true) }}
+                    {{ partial "meta/date.html" $next.Date }}
+                  {{ end }}
+                </span>
+              </span>
+              <span
+                class="ml-2 text-neutral-700 transition-transform group-hover:translate-x-[2px] group-hover:text-primary-600 ltr:inline rtl:hidden dark:text-neutral dark:group-hover:text-primary-400"
+                >&rarr;</span
+              >
+              <span
+                class="mr-2 text-neutral-700 transition-transform group-hover:-translate-x-[2px] group-hover:text-primary-600 ltr:hidden rtl:inline dark:text-neutral dark:group-hover:text-primary-400"
+                >&larr;</span
+              >
+            </a>
+          {{ end }}
+        </span>
+      </div>
+    </div>
+  {{ end }}
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/author-links.html b/web/themes/congo/layouts/partials/author-links.html
new file mode 100644
index 0000000000000000000000000000000000000000..656860196b117fc85b54d0afb034fd3c2b97763f
--- /dev/null
+++ b/web/themes/congo/layouts/partials/author-links.html
@@ -0,0 +1,16 @@
+{{ with .Site.Author.links }}
+  <div class="flex flex-wrap text-neutral-400 dark:text-neutral-500">
+    {{ range $links := . }}
+      {{ range $name, $url := $links }}
+        <a
+          class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400"
+          href="{{ $url }}"
+          target="_blank"
+          aria-label="{{ $name | title }}"
+          rel="me noopener noreferrer"
+          >{{ partial "icon.html" $name }}</a
+        >
+      {{ end }}
+    {{ end }}
+  </div>
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/author.html b/web/themes/congo/layouts/partials/author.html
new file mode 100644
index 0000000000000000000000000000000000000000..be812abf34fef81a07e2abc717989f225f762c8b
--- /dev/null
+++ b/web/themes/congo/layouts/partials/author.html
@@ -0,0 +1,31 @@
+{{ if .Params.showAuthor | default (.Site.Params.article.showAuthor | default true) }}
+  <div class="flex">
+    {{ with .Site.Author.image }}
+      {{ $authorImage := resources.Get . }}
+      {{ if $authorImage }}
+        {{ $authorImage := $authorImage.Fill "192x192" }}
+        <img
+          class="!mt-0 !mb-0 h-24 w-24 rounded-full ltr:mr-4 rtl:ml-4"
+          width="96"
+          height="96"
+          alt="{{ $.Site.Author.name | default "Author" }}"
+          src="{{ $authorImage.RelPermalink }}"
+        />
+      {{ end }}
+    {{ end }}
+    <div class="place-self-center">
+      {{ with .Site.Author.name | markdownify | emojify }}
+        <div class="text-[0.6rem] uppercase leading-3 text-neutral-500 dark:text-neutral-400">
+          {{ i18n "author.byline_title" | markdownify | emojify }}
+        </div>
+        <div class="font-semibold leading-6 text-neutral-800 dark:text-neutral-300">
+          {{ . }}
+        </div>
+      {{ end }}
+      {{ with .Site.Author.bio | markdownify | emojify }}
+        <div class="text-sm text-neutral-700 dark:text-neutral-400">{{ . }}</div>
+      {{ end }}
+      <div class="text-2xl sm:text-lg">{{ partialCached "author-links.html" . }}</div>
+    </div>
+  </div>
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/badge.html b/web/themes/congo/layouts/partials/badge.html
new file mode 100644
index 0000000000000000000000000000000000000000..da80c6c3eb38e1bddcc982c47e04e6e8091ec924
--- /dev/null
+++ b/web/themes/congo/layouts/partials/badge.html
@@ -0,0 +1,7 @@
+<span class="flex">
+  <span
+    class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 ltr:ml-1 rtl:mr-1 dark:border-primary-600 dark:text-primary-400"
+  >
+    {{ . }}
+  </span>
+</span>
diff --git a/web/themes/congo/layouts/partials/breadcrumbs.html b/web/themes/congo/layouts/partials/breadcrumbs.html
new file mode 100644
index 0000000000000000000000000000000000000000..848699b54e6921f5f9c548df7fdf1a9a1b33ebcd
--- /dev/null
+++ b/web/themes/congo/layouts/partials/breadcrumbs.html
@@ -0,0 +1,21 @@
+<ol class="text-sm text-neutral-500 dark:text-neutral-400 print:hidden">
+  {{ template "crumb" (dict "p1" . "p2" .) }}
+</ol>
+{{ define "crumb" }}
+  {{ if .p1.Parent }}
+    {{ template "crumb" (dict "p1" .p1.Parent "p2" .p2 ) }}
+  {{ else if not .p1.IsHome }}
+    {{ template "crumb" (dict "p1" .p1.Site.Home "p2" .p2 ) }}
+  {{ end }}
+  <li class="inline {{ if or (eq .p1 .p2) (.p1.IsHome) }}hidden{{ end }}">
+    <a
+      class="hover:underline decoration-neutral-300 dark:underline-neutral-600"
+      href="{{ .p1.RelPermalink }}"
+      >{{ if .p1.Title }}
+        {{- .p1.Title -}}
+      {{ else }}
+        {{- .p1.Section -}}
+      {{ end }}</a
+    ><span class="px-1 text-primary-500">/</span>
+  </li>
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/footer.html b/web/themes/congo/layouts/partials/footer.html
new file mode 100644
index 0000000000000000000000000000000000000000..dbf2e703bb6802231fae697b4307e4b5553b09b5
--- /dev/null
+++ b/web/themes/congo/layouts/partials/footer.html
@@ -0,0 +1,74 @@
+<footer class="py-10 print:hidden">
+  {{/* Footer menu */}}
+  {{ if .Site.Menus.footer }}
+    <nav class="pb-4 text-base font-medium text-neutral-500 dark:text-neutral-400">
+      <ul class="flex flex-col list-none sm:flex-row">
+        {{ range .Site.Menus.footer }}
+          <li
+            class="mb-1 ltr:text-right rtl:text-left sm:mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0"
+          >
+            <a
+              class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2"
+              href="{{ .URL }}"
+              title="{{ .Title }}"
+              >{{ .Name | markdownify | emojify }}</a
+            >
+          </li>
+        {{ end }}
+      </ul>
+    </nav>
+  {{ end }}
+  <div class="flex items-center justify-between">
+    <div>
+      {{/* Copyright */}}
+      {{ if .Site.Params.footer.showCopyright | default true }}
+        <p class="text-sm text-neutral-500 dark:text-neutral-400">
+          {{- with .Site.Params.copyright }}
+            {{ . | emojify | markdownify }}
+          {{- else }}
+            &copy;
+            {{ now.Format "2006" }}
+            {{ .Site.Author.name | markdownify | emojify }}
+          {{- end }}
+        </p>
+      {{ end }}
+      {{/* Theme attribution */}}
+      {{ if .Site.Params.footer.showThemeAttribution | default true }}
+        <p class="text-xs text-neutral-500 dark:text-neutral-400">
+          {{ $hugo := printf `<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500"
+            href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a>`
+          }}
+          {{ $congo := printf `<a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href="https://git.io/hugo-congo" target="_blank" rel="noopener noreferrer">Congo</a>` }}
+          {{ i18n "footer.powered_by" (dict "Hugo" $hugo "Congo" $congo) | safeHTML }}
+        </p>
+      {{ end }}
+    </div>
+    {{/* Appearance switch */}}
+    {{ if .Site.Params.footer.showAppearanceSwitcher | default false }}
+      <div
+        class="{{ if .Site.Params.footer.showScrollToTop | default true -}}
+          ltr:mr-14 rtl:ml-14
+        {{- end }} cursor-pointer text-sm text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400"
+      >
+        <button id="appearance-switcher" type="button">
+          <div
+            class="flex items-center justify-center w-12 h-12 dark:hidden"
+            title="{{ i18n "footer.dark_appearance" }}"
+          >
+            {{ partial "icon.html" "moon" }}
+          </div>
+          <div
+            class="items-center justify-center hidden w-12 h-12 dark:flex"
+            title="{{ i18n "footer.light_appearance" }}"
+          >
+            {{ partial "icon.html" "sun" }}
+          </div>
+        </button>
+      </div>
+    {{ end }}
+  </div>
+  {{/* Extend footer - eg. for extra scripts, etc. */}}
+  {{ if templates.Exists "partials/extend-footer.html" }}
+    {{ partialCached "extend-footer.html" . }}
+  {{ end }}
+</footer>
diff --git a/web/themes/congo/layouts/partials/functions/date.html b/web/themes/congo/layouts/partials/functions/date.html
new file mode 100644
index 0000000000000000000000000000000000000000..d9ae5439b6095753ac2cde0e2ffea315bd7cb31b
--- /dev/null
+++ b/web/themes/congo/layouts/partials/functions/date.html
@@ -0,0 +1 @@
+{{ return time.Format (site.Language.Params.dateFormat | default ":date_long") . }}
diff --git a/web/themes/congo/layouts/partials/functions/warnings.html b/web/themes/congo/layouts/partials/functions/warnings.html
new file mode 100644
index 0000000000000000000000000000000000000000..9598c61a4cff150b67deae9f88099159cb1e3c6f
--- /dev/null
+++ b/web/themes/congo/layouts/partials/functions/warnings.html
@@ -0,0 +1,9 @@
+{{ if ne .Site.Params.showAppearanceSwitcher nil }}
+  {{ warnf "[CONGO] Theme parameter `showAppearanceSwitcher` has been renamed to `footer.showAppearanceSwitcher`. Please update your site configuration." }}
+{{ end }}
+{{ if ne .Site.Params.showScrollToTop nil }}
+  {{ warnf "[CONGO] Theme parameter `showScrollToTop` has been renamed to `footer.showScrollToTop`. Please update your site configuration." }}
+{{ end }}
+{{ if ne .Site.Params.logo nil }}
+  {{ warnf "[CONGO] Theme parameter `logo` has been renamed to `header.logo`. Please update your site configuration." }}
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/head.html b/web/themes/congo/layouts/partials/head.html
new file mode 100644
index 0000000000000000000000000000000000000000..871c63b52e03d2bbd484c6d9e7e1ca1c7bc49db8
--- /dev/null
+++ b/web/themes/congo/layouts/partials/head.html
@@ -0,0 +1,115 @@
+<head>
+  <meta charset="utf-8" />
+  {{ with .Site.Language.Params.htmlCode | default .Site.LanguageCode }}
+    <meta http-equiv="content-language" content="{{ . }}" />
+  {{ end }}
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
+  {{/* Title */}}
+  {{ if .IsHome -}}
+    <title>{{ .Site.Title | emojify }}</title>
+    <meta name="title" content="{{ .Site.Title | emojify }}" />
+  {{- else -}}
+    <title>{{ .Title | emojify }} &middot; {{ .Site.Title | emojify }}</title>
+    <meta name="title" content="{{ .Title | emojify }} &middot; {{ .Site.Title | emojify }}" />
+  {{- end }}
+  {{/* Metadata */}}
+  {{ with .Site.Params.description -}}
+    <meta name="description" content="{{ . }}" />
+  {{- end }}
+  {{ with .Site.Params.keywords -}}
+    <meta name="keywords" content="{{ . }}" />
+  {{- end }}
+  {{ with .Site.Params.robots }}
+    <meta name="robots" content="{{ . }}" />
+  {{ end }}
+  {{ with .Params.robots }}
+    <meta name="robots" content="{{ . }}" />
+  {{ end }}
+  <link rel="canonical" href="{{ .Permalink }}" />
+  {{ range .AlternativeOutputFormats -}}
+    {{ printf `<link rel="%s" type="%s" href="%s" title="%s" />` .Rel .MediaType.Type .RelPermalink ($.Site.Title | emojify) | safeHTML }}
+  {{ end -}}
+  {{/* Asset bundles */}}
+  {{ $assets := newScratch }}
+  {{ $cssScheme := resources.Get (printf "css/schemes/%s.css" (lower .Site.Params.colorScheme | default "congo")) }}
+  {{ if not $cssScheme }}
+    {{ $cssScheme = resources.Get "css/schemes/congo.css" }}
+  {{ end }}
+  {{ $assets.Add "css" (slice $cssScheme) }}
+  {{ $cssMain := resources.Get "css/compiled/main.css" }}
+  {{ $assets.Add "css" (slice $cssMain) }}
+  {{ $cssCustom := resources.Get "css/custom.css" }}
+  {{ if $cssCustom }}
+    {{ $assets.Add "css" (slice $cssCustom) }}
+  {{ end }}
+  {{ $bundleCSS := $assets.Get "css" | resources.Concat "css/main.bundle.css" | resources.Minify | resources.Fingerprint "sha512" }}
+  <link
+    type="text/css"
+    rel="stylesheet"
+    href="{{ $bundleCSS.RelPermalink }}"
+    integrity="{{ $bundleCSS.Data.Integrity }}"
+  />
+  {{ $jsAppearance := resources.Get "js/appearance.js" }}
+  {{ $jsAppearance = $jsAppearance | resources.Minify | resources.Fingerprint "sha512" }}
+  <script type="text/javascript" src="{{ $jsAppearance.RelPermalink }}" integrity="{{ $jsAppearance.Data.Integrity }}"></script>
+  {{ if .Site.Params.enableSearch | default false }}
+    {{ $jsFuse := resources.Get "lib/fuse/fuse.min.js" }}
+    {{ $jsSearch := resources.Get "js/search.js" }}
+    {{ $assets.Add "js" (slice $jsFuse $jsSearch) }}
+  {{ end }}
+  {{ if .Site.Params.enableCodeCopy | default false }}
+    {{ $jsCode := resources.Get "js/code.js" }}
+    {{ $assets.Add "js" (slice $jsCode) }}
+  {{ end }}
+  {{ if .Site.Params.rtl | default false }}
+    {{ $jsRTL := resources.Get "js/rtl.js" }}
+    {{ $assets.Add "js" (slice $jsRTL) }}
+  {{ end }}
+  {{ if $assets.Get "js" }}
+    {{ $bundleJS := $assets.Get "js" | resources.Concat "js/main.bundle.js" | resources.Minify | resources.Fingerprint "sha512" }}
+    <script defer type="text/javascript" id="script-bundle" src="{{ $bundleJS.RelPermalink }}" integrity="{{ $bundleJS.Data.Integrity }}" data-copy="{{ i18n "code.copy" }}" data-copied="{{ i18n "code.copied" }}"></script>
+  {{ end }}
+  {{/* Icons */}}
+  {{ if templates.Exists "partials/favicons.html" }}
+    {{ partialCached "favicons.html" .Site }}
+  {{ else }}
+    <link rel="apple-touch-icon" sizes="180x180" href="{{ "apple-touch-icon.png" | relURL }}" />
+    <link rel="icon" type="image/png" sizes="32x32" href="{{ "favicon-32x32.png" | relURL }}" />
+    <link rel="icon" type="image/png" sizes="16x16" href="{{ "favicon-16x16.png" | relURL }}" />
+    <link rel="manifest" href="{{ "site.webmanifest" | relURL }}" />
+  {{ end }}
+  {{/* Site Verification */}}
+  {{ with .Site.Params.verification.google }}
+    <meta name="google-site-verification" content="{{ . }}" />
+  {{ end }}
+  {{ with .Site.Params.verification.bing }}
+    <meta name="msvalidate.01" content="{{ . }}" />
+  {{ end }}
+  {{ with .Site.Params.verification.pinterest }}
+    <meta name="p:domain_verify" content="{{ . }}" />
+  {{ end }}
+  {{ with .Site.Params.verification.yandex }}
+    <meta name="yandex-verification" content="{{ . }}" />
+  {{ end }}
+  {{/* Social */}}
+  {{ template "_internal/opengraph.html" . }}
+  {{ template "_internal/twitter_cards.html" . }}
+  {{/* Schema */}}
+  {{ partial "schema.html" . }}
+  {{/* Me */}}
+  {{ with .Site.Author.name }}<meta name="author" content="{{ . }}" />{{ end }}
+  {{ with .Site.Author.links }}
+    {{ range $links := . }}
+      {{ range $name, $url := $links }}<link href="{{ $url }}" rel="me" />{{ end }}
+    {{ end }}
+  {{ end }}
+  {{/* Vendor */}}
+  {{ partial "vendor.html" . }}
+  {{/* Analytics */}}
+  {{ partialCached "analytics.html" .Site }}
+  {{/* Extend head - eg. for custom analytics scripts, etc. */}}
+  {{ if templates.Exists "partials/extend-head.html" }}
+    {{ partialCached "extend-head.html" .Site }}
+  {{ end }}
+</head>
diff --git a/web/themes/congo/layouts/partials/header/basic.html b/web/themes/congo/layouts/partials/header/basic.html
new file mode 100644
index 0000000000000000000000000000000000000000..4169683cb761b125b0794826c0c885db310df21b
--- /dev/null
+++ b/web/themes/congo/layouts/partials/header/basic.html
@@ -0,0 +1,37 @@
+<header class="py-6 font-semibold text-neutral-900 dark:text-neutral print:hidden sm:py-10">
+  <nav class="flex items-start justify-between sm:items-center">
+    {{/* Site logo/title */}}
+    <div class="flex flex-row items-center">
+      {{ partial "logo.html" . }}
+      {{ partial "translations.html" . }}
+    </div>
+    {{/* Main menu */}}
+    {{ if or .Site.Menus.main (.Site.Params.enableSearch | default false) }}
+      <ul class="flex list-none flex-col ltr:text-right rtl:text-left sm:flex-row">
+        {{ if .Site.Menus.main }}
+          {{ range .Site.Menus.main }}
+            <li class="mb-1 sm:mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0">
+              <a
+                class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2"
+                href="{{ .URL }}"
+                title="{{ .Title }}"
+                >{{ .Name | markdownify | emojify }}</a
+              >
+            </li>
+          {{ end }}
+        {{ end }}
+        {{ if .Site.Params.enableSearch | default false }}
+          <li class="ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0">
+            <button
+              id="search-button"
+              class="text-base hover:text-primary-600 dark:hover:text-primary-400"
+              title="{{ i18n "search.open_button_title" }}"
+            >
+              {{ partial "icon.html" "search" }}
+            </button>
+          </li>
+        {{ end }}
+      </ul>
+    {{ end }}
+  </nav>
+</header>
diff --git a/web/themes/congo/layouts/partials/header/hamburger.html b/web/themes/congo/layouts/partials/header/hamburger.html
new file mode 100644
index 0000000000000000000000000000000000000000..c328994c25558103aa8c2f17d6cb71d71daeba6d
--- /dev/null
+++ b/web/themes/congo/layouts/partials/header/hamburger.html
@@ -0,0 +1,55 @@
+<header class="py-6 font-semibold text-neutral-900 dark:text-neutral print:hidden sm:py-10">
+  <nav class="flex items-start justify-between sm:items-center">
+    {{/* Site logo/title */}}
+    <div class="z-40 flex flex-row items-center">
+      {{ partial "logo.html" . }}
+      {{ partial "translations.html" . }}
+    </div>
+    {{/* Hamburger menu */}}
+    {{ if or .Site.Menus.main (.Site.Params.enableSearch | default false) }}
+      <label id="menu-button" for="menu-controller" class="block">
+        <input type="checkbox" id="menu-controller" class="hidden" />
+        <div class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400">
+          {{ partial "icon.html" "bars" }}
+        </div>
+        <div
+          id="menu-wrapper"
+          class="invisible fixed inset-0 z-30 m-auto h-screen w-screen cursor-default overflow-auto bg-neutral-100/50 opacity-0 backdrop-blur-sm transition-opacity dark:bg-neutral-900/50"
+        >
+          <ul
+            class="mx-auto flex w-full max-w-7xl list-none flex-col overflow-visible px-6 py-6 ltr:text-right rtl:text-left sm:px-14 sm:py-10 sm:pt-10 md:px-24 lg:px-32"
+          >
+            <li class="mb-1">
+              <span class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"
+                >{{ partial "icon.html" "xmark" }}</span
+              >
+            </li>
+            {{ if .Site.Menus.main }}
+              {{ range .Site.Menus.main }}
+                <li class="mb-1">
+                  <a
+                    class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2"
+                    href="{{ .URL }}"
+                    title="{{ .Title }}"
+                    >{{ .Name | markdownify | emojify }}</a
+                  >
+                </li>
+              {{ end }}
+            {{ end }}
+            {{ if .Site.Params.enableSearch | default false }}
+              <li>
+                <button
+                  id="search-button"
+                  class="text-base hover:text-primary-600 dark:hover:text-primary-400"
+                  title="{{ i18n "search.open_button_title" }}"
+                >
+                  {{ partial "icon.html" "search" }}
+                </button>
+              </li>
+            {{ end }}
+          </ul>
+        </div>
+      </label>
+    {{ end }}
+  </nav>
+</header>
diff --git a/web/themes/congo/layouts/partials/header/hybrid.html b/web/themes/congo/layouts/partials/header/hybrid.html
new file mode 100644
index 0000000000000000000000000000000000000000..0800d31aca374c6471c299cec3adae37cb6c5786
--- /dev/null
+++ b/web/themes/congo/layouts/partials/header/hybrid.html
@@ -0,0 +1,81 @@
+<header class="py-6 font-semibold text-neutral-900 dark:text-neutral print:hidden sm:py-10">
+  <nav class="flex items-start justify-between sm:items-center">
+    {{/* Site logo/title */}}
+    <div class="z-40 flex flex-row items-center">
+      {{ partial "logo.html" . }}
+      {{ partial "translations.html" . }}
+    </div>
+    {{ if or .Site.Menus.main (.Site.Params.enableSearch | default false) }}
+      {{/* Hamburger menu */}}
+      <label id="menu-button" for="menu-controller" class="block sm:hidden">
+        <input type="checkbox" id="menu-controller" class="hidden" />
+        <div class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400">
+          {{ partial "icon.html" "bars" }}
+        </div>
+        <div
+          id="menu-wrapper"
+          class="invisible fixed inset-0 z-30 m-auto h-screen w-screen cursor-default overflow-auto bg-neutral-100/50 opacity-0 backdrop-blur-sm transition-opacity dark:bg-neutral-900/50"
+        >
+          <ul
+            class="mx-auto flex w-full max-w-7xl list-none flex-col overflow-visible px-6 py-6 ltr:text-right rtl:text-left sm:px-14 sm:py-10 sm:pt-10 md:px-24 lg:px-32"
+          >
+            <li class="mb-1">
+              <span class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"
+                >{{ partial "icon.html" "xmark" }}</span
+              >
+            </li>
+            {{ if .Site.Menus.main }}
+              {{ range .Site.Menus.main }}
+                <li class="mb-1">
+                  <a
+                    class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2"
+                    href="{{ .URL }}"
+                    title="{{ .Title }}"
+                    >{{ .Name | markdownify | emojify }}</a
+                  >
+                </li>
+              {{ end }}
+            {{ end }}
+            {{ if .Site.Params.enableSearch | default false }}
+              <li>
+                <button
+                  id="search-button-2"
+                  class="text-base hover:text-primary-600 dark:hover:text-primary-400"
+                  title="{{ i18n "search.open_button_title" }}"
+                >
+                  {{ partial "icon.html" "search" }}
+                </button>
+              </li>
+            {{ end }}
+          </ul>
+        </div>
+      </label>
+      {{/* Basic menu */}}
+      <ul class="hidden list-none flex-row ltr:text-right rtl:text-left sm:flex">
+        {{ if .Site.Menus.main }}
+          {{ range .Site.Menus.main }}
+            <li class="mb-1 sm:mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0">
+              <a
+                class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2"
+                href="{{ .URL }}"
+                title="{{ .Title }}"
+                >{{ .Name | markdownify | emojify }}</a
+              >
+            </li>
+          {{ end }}
+        {{ end }}
+        {{ if .Site.Params.enableSearch | default false }}
+          <li class="ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0">
+            <button
+              id="search-button-1"
+              class="text-base hover:text-primary-600 dark:hover:text-primary-400"
+              title="{{ i18n "search.open_button_title" }}"
+            >
+              {{ partial "icon.html" "search" }}
+            </button>
+          </li>
+        {{ end }}
+      </ul>
+    {{ end }}
+  </nav>
+</header>
diff --git a/web/themes/congo/layouts/partials/home/page.html b/web/themes/congo/layouts/partials/home/page.html
new file mode 100644
index 0000000000000000000000000000000000000000..fbc7945c1d4674445928dc8cfcdb2f922adfe718
--- /dev/null
+++ b/web/themes/congo/layouts/partials/home/page.html
@@ -0,0 +1,11 @@
+<article class="max-w-full prose dark:prose-invert">
+  {{ with .Title }}
+    <header>
+      <h1>{{ . | emojify }}</h1>
+    </header>
+  {{ end }}
+  <section>{{ .Content | emojify }}</section>
+</article>
+<section>
+  {{ partial "recent-articles.html" . }}
+</section>
diff --git a/web/themes/congo/layouts/partials/home/profile.html b/web/themes/congo/layouts/partials/home/profile.html
new file mode 100644
index 0000000000000000000000000000000000000000..8e77f764556d2a3bae456968c1f76dacdf043969
--- /dev/null
+++ b/web/themes/congo/layouts/partials/home/profile.html
@@ -0,0 +1,36 @@
+<article
+  class="{{ if not .Site.Params.homepage.showRecent }}
+    h-full
+  {{ end }} flex flex-col items-center justify-center text-center"
+>
+  <header class="flex flex-col items-center mb-3">
+    {{ with .Site.Author.image }}
+      {{ $authorImage := resources.Get . }}
+      {{ if $authorImage }}
+        {{ $authorImage := $authorImage.Fill "288x288" }}
+        <img
+          class="mb-2 rounded-full h-36 w-36"
+          width="144"
+          height="144"
+          alt="{{ $.Site.Author.name | default "Author" }}"
+          src="{{ $authorImage.RelPermalink }}"
+        />
+      {{ end }}
+    {{ end }}
+    <h1 class="text-4xl font-extrabold">
+      {{ .Site.Author.name | default .Site.Title }}
+    </h1>
+    {{ with .Site.Author.headline }}
+      <h2 class="text-xl text-neutral-500 dark:text-neutral-400">
+        {{ . | markdownify | emojify }}
+      </h2>
+    {{ end }}
+    <div class="mt-1 text-2xl">
+      {{ partialCached "author-links.html" . }}
+    </div>
+  </header>
+  <section class="prose dark:prose-invert">{{ .Content | emojify }}</section>
+</article>
+<section>
+  {{ partial "recent-articles.html" . }}
+</section>
diff --git a/web/themes/congo/layouts/partials/icon.html b/web/themes/congo/layouts/partials/icon.html
new file mode 100644
index 0000000000000000000000000000000000000000..831697a175e380f72135475f191ad1d006326457
--- /dev/null
+++ b/web/themes/congo/layouts/partials/icon.html
@@ -0,0 +1,6 @@
+{{ $icon := resources.Get (print "icons/" . ".svg") }}
+{{ if $icon }}
+  <span class="relative inline-block align-text-bottom icon">
+    {{ $icon.Content | safeHTML }}
+  </span>
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/logo.html b/web/themes/congo/layouts/partials/logo.html
new file mode 100644
index 0000000000000000000000000000000000000000..a9cd2a59c38551e79011ccbdd1c811601f87be2c
--- /dev/null
+++ b/web/themes/congo/layouts/partials/logo.html
@@ -0,0 +1,22 @@
+{{- if .Site.Params.header.logo }}
+  {{- $logo := resources.Get .Site.Params.header.logo }}
+  {{- if $logo }}
+    <a href="{{ "" | relLangURL }}" class="mr-2">
+      <img
+        src="{{ $logo.RelPermalink }}"
+        width="{{ div $logo.Width 2 }}"
+        height="{{ div $logo.Height 2 }}"
+        class="max-h-[10rem] max-w-[10rem] object-scale-down object-left"
+        alt="{{ .Site.Title }}"
+      />
+    </a>
+  {{- end }}
+{{- end }}
+{{- if .Site.Params.header.showTitle | default true }}
+  <a
+    class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2"
+    rel="me"
+    href="{{ "" | relLangURL }}"
+    >{{ .Site.Title | markdownify | emojify }}</a
+  >
+{{- end }}
diff --git a/web/themes/congo/layouts/partials/meta/date-updated.html b/web/themes/congo/layouts/partials/meta/date-updated.html
new file mode 100644
index 0000000000000000000000000000000000000000..cc25c693060d34bd865f81a22bd9a53f39057383
--- /dev/null
+++ b/web/themes/congo/layouts/partials/meta/date-updated.html
@@ -0,0 +1,4 @@
+<time datetime="{{ . }}">
+  {{- i18n "article.date_updated" (dict "Date" (partial "functions/date.html" .)) | markdownify | emojify -}}
+</time>
+{{- /* Trim EOF */ -}}
diff --git a/web/themes/congo/layouts/partials/meta/date.html b/web/themes/congo/layouts/partials/meta/date.html
new file mode 100644
index 0000000000000000000000000000000000000000..654a6c7a9b246572f4f6ba267558869cf041264c
--- /dev/null
+++ b/web/themes/congo/layouts/partials/meta/date.html
@@ -0,0 +1,4 @@
+<time datetime="{{ . }}">
+  {{- i18n "article.date" (dict "Date" (partial "functions/date.html" .)) | markdownify | emojify -}}
+</time>
+{{- /* Trim EOF */ -}}
diff --git a/web/themes/congo/layouts/partials/meta/edit.html b/web/themes/congo/layouts/partials/meta/edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..9318f49d68e4815898a1fcdfae543f0238655285
--- /dev/null
+++ b/web/themes/congo/layouts/partials/meta/edit.html
@@ -0,0 +1,19 @@
+{{ $url := .Params.editURL | default (.Site.Params.article.editURL | default "#") }}
+{{ $slash := "" }}
+{{ if .Params.editAppendPath | default ( .Site.Params.article.editAppendPath | default false ) }}
+  {{ if ne (substr $url -1 1) "/" }}
+    {{ $slash = "/" }}
+  {{ end }}
+  {{ $url = printf "%s%s%s" $url $slash (path.Join .File.Path) }}
+{{ end }}
+<span class="mb-[2px]">
+  <a
+    href="{{ $url }}"
+    class="text-lg hover:text-primary-500"
+    rel="noopener noreferrer"
+    target="_blank"
+    title="{{ i18n "article.edit_title" }}"
+    >{{ partial "icon.html" "edit" }}</a
+  >
+</span>
+{{- /* Trim EOF */ -}}
diff --git a/web/themes/congo/layouts/partials/meta/reading-time.html b/web/themes/congo/layouts/partials/meta/reading-time.html
new file mode 100644
index 0000000000000000000000000000000000000000..71e706d4b8d4cfff418b384f87f9fc18838759db
--- /dev/null
+++ b/web/themes/congo/layouts/partials/meta/reading-time.html
@@ -0,0 +1,4 @@
+<span title="{{ i18n "article.reading_time_title" }}">
+  {{- i18n "article.reading_time" .ReadingTime | markdownify | emojify -}}
+</span>
+{{- /* Trim EOF */ -}}
diff --git a/web/themes/congo/layouts/partials/meta/word-count.html b/web/themes/congo/layouts/partials/meta/word-count.html
new file mode 100644
index 0000000000000000000000000000000000000000..517101a97115832d5228338867b4d020e7311f14
--- /dev/null
+++ b/web/themes/congo/layouts/partials/meta/word-count.html
@@ -0,0 +1,4 @@
+<span>
+  {{- i18n "article.word_count" .WordCount | markdownify | emojify -}}
+</span>
+{{- /* Trim EOF */ -}}
diff --git a/web/themes/congo/layouts/partials/pagination.html b/web/themes/congo/layouts/partials/pagination.html
new file mode 100644
index 0000000000000000000000000000000000000000..3d8e88eca3f697a5367e0f8a3ed11a26cb953673
--- /dev/null
+++ b/web/themes/congo/layouts/partials/pagination.html
@@ -0,0 +1,92 @@
+{{- with .Paginator }}
+  {{- $width := $.Site.Params.list.paginationWidth | default 1 }}
+  {{- $currentPageNumber := .PageNumber }}
+  {{- if gt .TotalPages 1 }}
+    {{- $start := math.Max 1 (sub .PageNumber $width) }}
+    {{- $end := math.Min .TotalPages (add $start (mul $width 2)) }}
+
+    <ul class="flex flex-row mt-8">
+      {{- with .Prev }}
+        <li>
+          <a
+            href="{{ .URL }}"
+            class="mx-1 block min-w-[1.8rem] rounded text-center hover:bg-primary-600 hover:text-neutral"
+            aria-label="Previous page"
+            rel="prev"
+          >
+            &larr;
+          </a>
+        </li>
+      {{- end }}
+
+      {{- with .First }}
+        {{- if gt $currentPageNumber (add 1 $width) }}
+          <li class="mx-1 min-w-[1.8rem] text-center">
+            <a
+              href="{{ .URL }}"
+              class="block rounded hover:bg-primary-600 hover:text-neutral"
+              aria-label="First page"
+            >
+              {{ .PageNumber }}
+            </a>
+          </li>
+          {{- if gt $currentPageNumber (add 2 $width) }}
+            <li>&ctdot;</li>
+          {{- end }}
+        {{- end }}
+      {{- end }}
+
+      {{- range $i := seq $start $end }}
+        <li class="mx-1 min-w-[1.8rem] text-center">
+          {{- if eq $.Paginator.PageNumber $i }}
+            <span
+              aria-current="page"
+              aria-label="Page {{ $i }}"
+              class="block font-semibold rounded bg-primary-200 text-primary-700 dark:bg-primary-400 dark:text-neutral-800"
+            >
+              {{ $i }}
+            </span>
+          {{- else }}
+            <a
+              href="{{ (index $.Paginator.Pagers (sub $i 1)).URL }}"
+              class="block rounded hover:bg-primary-600 hover:text-neutral"
+              aria-label="Page {{ $i }}"
+            >
+              {{ $i }}
+            </a>
+          {{- end }}
+        </li>
+      {{- end }}
+
+      {{- with .Last }}
+        {{- if and (lt $currentPageNumber (sub .TotalPages $width)) (lt $end .TotalPages) }}
+          {{- if lt $currentPageNumber (sub .TotalPages (add $width 1)) }}
+            <li>&ctdot;</li>
+          {{- end }}
+          <li class="mx-1 min-w-[1.8rem] text-center">
+            <a
+              href="{{ .URL }}"
+              class="block rounded hover:bg-primary-600 hover:text-neutral"
+              aria-label="Last page"
+            >
+              {{ .PageNumber }}
+            </a>
+          </li>
+        {{- end }}
+      {{- end }}
+
+      {{- with .Next }}
+        <li>
+          <a
+            href="{{ .URL }}"
+            class="mx-1 block min-w-[1.8rem] rounded text-center hover:bg-primary-600 hover:text-neutral"
+            aria-label="Next page"
+            rel="next"
+          >
+            &rarr;
+          </a>
+        </li>
+      {{- end }}
+    </ul>
+  {{- end }}
+{{- end }}
diff --git a/web/themes/congo/layouts/partials/recent-articles.html b/web/themes/congo/layouts/partials/recent-articles.html
new file mode 100644
index 0000000000000000000000000000000000000000..be1cff894350f8c8d0897b4739201b7244ef121f
--- /dev/null
+++ b/web/themes/congo/layouts/partials/recent-articles.html
@@ -0,0 +1,6 @@
+{{ if .Site.Params.homepage.showRecent | default false }}
+  <h2 class="mt-8 text-2xl font-extrabold">{{ i18n "shortcode.recent_articles" | emojify }}</h2>
+  {{ range first 5 (.Paginate (where .Site.RegularPages "Type" "in" .Site.Params.mainSections) 5).Pages }}
+    {{ partial "article-link.html" . }}
+  {{ end }}
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/schema.html b/web/themes/congo/layouts/partials/schema.html
new file mode 100644
index 0000000000000000000000000000000000000000..77ecfa3cfc9fce6625125dfcb51043f78b88f480
--- /dev/null
+++ b/web/themes/congo/layouts/partials/schema.html
@@ -0,0 +1,49 @@
+{{ if .IsHome -}}
+  <script type="application/ld+json">
+  {
+    "@context": "https://schema.org",
+    "@type": "WebSite",
+    "@id": "{{ (site.GetPage "/").Permalink | safeURL }}",
+    "name": "{{ .Site.Title | safeJS }}",
+    {{ with .Site.Params.description }}"description": "{{ . | safeJS }}",{{ end }}
+    {{ with .Site.LanguageCode }}"inLanguage": "{{ . }}",{{ end }}
+    "url": "{{ (site.GetPage "/").Permalink | safeURL }}",
+    {{ with .Site.Params.keywords }}"keywords": {{ . }},{{ end }}
+    "publisher" : {
+      "@type": "Person",
+      "name": "{{ .Site.Author.name | safeJS }}"
+    }
+  }
+  </script>
+{{ else if .IsPage }}
+  {{- $iso8601 := "2006-01-02T15:04:05-07:00" -}}
+  <script type="application/ld+json">
+  [{
+    "@context": "https://schema.org",
+    "@type": "Article",
+    "articleSection": "{{ (site.GetPage .Section).Title | safeJS }}",
+    "name": "{{ .Title | safeJS }}",
+    "headline": "{{ .Title | safeJS }}",
+    {{ with .Description }}"description": "{{ . | safeJS }}",{{ end }}
+    {{ with .Summary }}"abstract": "{{ . | safeJS }}",{{ end }}
+    {{ with .Site.LanguageCode }}"inLanguage": "{{ . }}",{{ end }}
+    "url" : "{{ .Permalink }}",
+    "author" : {
+      "@type": "Person",
+      "name": "{{ .Site.Author.name | safeJS }}"
+    },
+    {{ with .PublishDate }}"copyrightYear": "{{ .Format "2006" }}",{{ end }}
+    {{ with .Date }}"dateCreated": "{{ .Format $iso8601 }}",{{ end }}
+    {{ with .PublishDate }}"datePublished": "{{ .Format $iso8601 }}",{{ end }}
+    {{ with .ExpiryDate }}"expires": "{{ .Format $iso8601 }}",{{ end }}
+    {{ with .Lastmod }}"dateModified": "{{ .Format $iso8601 }}",{{ end }}
+    {{ if .Keywords }}
+    {{ with .Keywords }}"keywords": {{ . }},{{ end }}
+    {{ else }}
+    {{ with .Params.tags }}"keywords": {{ . }},{{ end }}
+    {{ end }}
+    "mainEntityOfPage": "true",
+    "wordCount": "{{ .WordCount }}"
+  }]
+  </script>
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/search.html b/web/themes/congo/layouts/partials/search.html
new file mode 100644
index 0000000000000000000000000000000000000000..34c2525567209173fac06cd800fc789ee43cb98b
--- /dev/null
+++ b/web/themes/congo/layouts/partials/search.html
@@ -0,0 +1,47 @@
+<div
+  id="search-wrapper"
+  class="invisible fixed inset-0 z-50 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 backdrop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh]"
+  data-url="{{ "" | absLangURL }}"
+>
+  <div
+    id="search-modal"
+    class="flex flex-col w-full max-w-3xl min-h-0 mx-auto border rounded-md shadow-lg top-20 border-neutral-200 bg-neutral dark:border-neutral-700 dark:bg-neutral-800"
+  >
+    <header class="relative z-10 flex items-center justify-between flex-none px-2">
+      <form class="flex items-center flex-auto min-w-0">
+        <div class="flex items-center justify-center w-8 h-8 text-neutral-400">
+          {{ partial "icon.html" "search" }}
+        </div>
+        <input
+          type="search"
+          id="search-query"
+          class="flex flex-auto h-12 mx-1 bg-transparent appearance-none focus:outline-dotted focus:outline-2 focus:outline-transparent"
+          placeholder="{{ i18n "search.input_placeholder" }}"
+          tabindex="0"
+        />
+      </form>
+      <button
+        id="close-search-button"
+        class="flex items-center justify-center w-8 h-8 text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400"
+        title="{{ i18n "search.close_button_title" }}"
+      >
+        {{ partial "icon.html" "xmark" }}
+      </button>
+    </header>
+    <section class="flex-auto px-2 overflow-auto">
+      <ul id="search-results">
+        <!-- <li class="mb-2">
+          <a class="flex items-center px-3 py-2 rounded-md appearance-none bg-neutral-100 dark:bg-neutral-700 focus:bg-primary-100 hover:bg-primary-100 dark:hover:bg-primary-900 dark:focus:bg-primary-900 focus:outline-dotted focus:outline-transparent focus:outline-2" href="${value.item.permalink}" tabindex="0">
+            <div class="grow">
+              <div class="-mb-1 text-lg font-bold">${value.item.title}</div>
+              <div class="text-sm text-neutral-500 dark:text-neutral-400">${value.item.section}<span class="px-2 text-primary-500">&middot;</span>${value.item.date}</span></div>
+              <div class="text-sm italic">${value.item.summary}</div>
+            </div>
+            <div class="ml-2 ltr:block rtl:hidden text-neutral-500">&rarr;</div>
+            <div class="mr-2 ltr:hidden rtl:block text-neutral-500">&larr;</div>
+          </a>
+        </li> -->
+      </ul>
+    </section>
+  </div>
+</div>
diff --git a/web/themes/congo/layouts/partials/sharing-links.html b/web/themes/congo/layouts/partials/sharing-links.html
new file mode 100644
index 0000000000000000000000000000000000000000..ca0162c6351c58a8bc6318b4f904acd0019c0302
--- /dev/null
+++ b/web/themes/congo/layouts/partials/sharing-links.html
@@ -0,0 +1,16 @@
+{{ with .Params.sharingLinks | default (.Site.Params.article.sharingLinks | default false) }}
+  {{ $links := site.Data.sharing }}
+  <section class="flex flex-row flex-wrap justify-center pt-4 text-xl">
+    {{ range . }}
+      {{ with index $links . }}
+        <a
+          class="m-1 inline-block min-w-[2.4rem] rounded bg-neutral-300 p-1 text-center text-neutral-700 hover:bg-primary-500 hover:text-neutral dark:bg-neutral-700 dark:text-neutral-300 dark:hover:bg-primary-400 dark:hover:text-neutral-800"
+          href="{{ printf .url $.Permalink $.Title }}"
+          title="{{ i18n .title }}"
+          aria-label="{{ i18n .title }}"
+          >{{ partial "icon.html" .icon }}</a
+        >
+      {{ end }}
+    {{ end }}
+  </section>
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/toc.html b/web/themes/congo/layouts/partials/toc.html
new file mode 100644
index 0000000000000000000000000000000000000000..a31d5c7a7e5c4d2b42b23628ac137d516eea1561
--- /dev/null
+++ b/web/themes/congo/layouts/partials/toc.html
@@ -0,0 +1,12 @@
+<details open class="mt-0 overflow-hidden rounded-lg ltr:-ml-5 ltr:pl-5 rtl:-mr-5 rtl:pr-5">
+  <summary
+    class="block py-1 text-lg font-semibold cursor-pointer bg-neutral-100 text-neutral-800 ltr:-ml-5 ltr:pl-5 rtl:-mr-5 rtl:pr-5 dark:bg-neutral-700 dark:text-neutral-100 lg:hidden"
+  >
+    {{ i18n "article.table_of_contents" }}
+  </summary>
+  <div
+    class="py-2 border-dotted border-neutral-300 ltr:-ml-5 ltr:border-l ltr:pl-5 rtl:-mr-5 rtl:border-r rtl:pr-5 dark:border-neutral-600"
+  >
+    {{ .TableOfContents | emojify }}
+  </div>
+</details>
diff --git a/web/themes/congo/layouts/partials/translations.html b/web/themes/congo/layouts/partials/translations.html
new file mode 100644
index 0000000000000000000000000000000000000000..979e151fdbf9b4a9116ca3d5441a30a93a1cdc8c
--- /dev/null
+++ b/web/themes/congo/layouts/partials/translations.html
@@ -0,0 +1,13 @@
+{{ if .IsTranslated }}
+  <ul class="flex flex-row list-none">
+    {{ range .AllTranslations }}
+      <li class="ml-2">
+        <a
+          href="{{ .RelPermalink }}"
+          class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2"
+          >{{ .Language.Params.displayName | emojify }}</a
+        >
+      </li>
+    {{ end }}
+  </ul>
+{{ end }}
diff --git a/web/themes/congo/layouts/partials/vendor.html b/web/themes/congo/layouts/partials/vendor.html
new file mode 100644
index 0000000000000000000000000000000000000000..1f0a4db16d2ce85d7cd93b411b21b1b7cca71e2c
--- /dev/null
+++ b/web/themes/congo/layouts/partials/vendor.html
@@ -0,0 +1,36 @@
+{{/* Mermaid */}}
+{{ if .Page.HasShortcode "mermaid" }}
+  {{ $mermaidLib := resources.Get "lib/mermaid/mermaid.min.js" }}
+  {{ $mermaidConfig := resources.Get "js/mermaid.js" }}
+  {{ $mermaidConfig := $mermaidConfig | resources.Minify }}
+  {{ $mermaidJS := slice $mermaidLib $mermaidConfig | resources.Concat "js/mermaid.bundle.js" | resources.Fingerprint "sha512" }}
+  <script defer type="text/javascript" src="{{ $mermaidJS.RelPermalink }}" integrity="{{ $mermaidJS.Data.Integrity }}"></script>
+{{ end }}
+{{/* Chart */}}
+{{ if .Page.HasShortcode "chart" }}
+  {{ $chartLib := resources.Get "lib/chart/chart.min.js" }}
+  {{ $chartConfig := resources.Get "js/chart.js" }}
+  {{ $chartConfig := $chartConfig | resources.Minify }}
+  {{ $chartJS := slice $chartLib $chartConfig | resources.Concat "js/chart.bundle.js" | resources.Fingerprint "sha512" }}
+  <script defer type="text/javascript" src="{{ $chartJS.RelPermalink }}" integrity="{{ $chartJS.Data.Integrity }}"></script>
+{{ end }}
+{{/* Katex */}}
+{{ if .Page.HasShortcode "katex" }}
+  {{ $katexCSS := resources.Get "lib/katex/katex.min.css" }}
+  {{ $katexCSS := $katexCSS | resources.Fingerprint "sha512" }}
+  <link
+    type="text/css" rel="stylesheet"
+    href="{{ $katexCSS.RelPermalink }}"
+    integrity="{{ $katexCSS.Data.Integrity }}"
+  />
+  {{ $katexJS := resources.Get "lib/katex/katex.min.js" }}
+  {{ $katexJS := $katexJS | resources.Fingerprint "sha512" }}
+  <script defer src="{{ $katexJS.RelPermalink }}" integrity="{{ $katexJS.Data.Integrity }}"></script>
+  {{ $katexRenderJS := resources.Get "lib/katex/auto-render.min.js" }}
+  {{ $katexRenderJS := $katexRenderJS | resources.Fingerprint "sha512" }}
+  <script defer src="{{ $katexRenderJS.RelPermalink }}" integrity="{{ $katexRenderJS.Data.Integrity }}" onload="renderMathInElement(document.body);"></script>
+  {{ $katexFonts := resources.Match "lib/katex/fonts/*" }}
+  {{ range $katexFonts }}
+    <!-- {{ .RelPermalink }} -->
+  {{ end }}
+{{ end }}
diff --git a/web/themes/congo/layouts/robots.txt b/web/themes/congo/layouts/robots.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ad35c9dffab623595465e0c75e0b498a2e070f3a
--- /dev/null
+++ b/web/themes/congo/layouts/robots.txt
@@ -0,0 +1,7 @@
+User-agent: *
+{{- if hugo.IsProduction | or (eq .Site.Params.env "production") }}
+Allow: /
+{{- else }}
+Disallow: /
+{{- end }}
+Sitemap: {{ "sitemap.xml" | absURL }}
diff --git a/web/themes/congo/layouts/shortcodes/alert.html b/web/themes/congo/layouts/shortcodes/alert.html
new file mode 100644
index 0000000000000000000000000000000000000000..5cf4a11716999fa906610c94048016391cc2a6ca
--- /dev/null
+++ b/web/themes/congo/layouts/shortcodes/alert.html
@@ -0,0 +1,8 @@
+<div class="flex px-4 py-3 rounded-md bg-primary-100 dark:bg-primary-900">
+  <span class="text-primary-400 ltr:pr-3 rtl:pl-3">
+    {{ partial "icon.html" (.Get 0 | default "triangle-exclamation") }}
+  </span>
+  <span class="dark:text-neutral-300">
+    {{- .Inner | markdownify -}}
+  </span>
+</div>
diff --git a/web/themes/congo/layouts/shortcodes/badge.html b/web/themes/congo/layouts/shortcodes/badge.html
new file mode 100644
index 0000000000000000000000000000000000000000..86d4e24b7096fef4f88ca8338e3d59f7df9a4524
--- /dev/null
+++ b/web/themes/congo/layouts/shortcodes/badge.html
@@ -0,0 +1 @@
+{{ partial "badge.html" .Inner }}
diff --git a/web/themes/congo/layouts/shortcodes/button.html b/web/themes/congo/layouts/shortcodes/button.html
new file mode 100644
index 0000000000000000000000000000000000000000..3dd80a7df6882411c693d930922472637fcd0ac4
--- /dev/null
+++ b/web/themes/congo/layouts/shortcodes/button.html
@@ -0,0 +1,9 @@
+<a
+  class="inline-block !rounded-md bg-primary-600 px-4 py-1 !text-neutral !no-underline hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
+  {{ with .Get "href" }}href="{{ . }}"{{ end }}
+  {{ with .Get "target" }}target="{{ . }}"{{ end }}
+  {{ with .Get "download" }}download="{{ . }}"{{ end }}
+  role="button"
+>
+  {{ .Inner }}
+</a>
diff --git a/web/themes/congo/layouts/shortcodes/chart.html b/web/themes/congo/layouts/shortcodes/chart.html
new file mode 100644
index 0000000000000000000000000000000000000000..98ae8fa768c4c5d8f066dbbec2933b45506f1bde
--- /dev/null
+++ b/web/themes/congo/layouts/shortcodes/chart.html
@@ -0,0 +1,12 @@
+<div class="chart">
+  {{ $id := delimit (shuffle (seq 1 9)) "" }}
+  <canvas id="{{ $id }}"></canvas>
+  <script type="text/javascript">
+    window.addEventListener("DOMContentLoaded", (event) => {
+      const ctx = document.getElementById("{{ $id }}");
+      const chart = new Chart(ctx, {
+        {{ .Inner | safeJS }}
+      });
+    });
+  </script>
+</div>
diff --git a/web/themes/congo/layouts/shortcodes/figure.html b/web/themes/congo/layouts/shortcodes/figure.html
new file mode 100644
index 0000000000000000000000000000000000000000..e8220ca6a9232adb1e9ad7e1f8598c6a639ffad8
--- /dev/null
+++ b/web/themes/congo/layouts/shortcodes/figure.html
@@ -0,0 +1,44 @@
+{{ if .Get "default" }}
+  {{ template "_internal/shortcodes/figure.html" . }}
+{{ else }}
+  {{ $url := urls.Parse (.Get "src") }}
+  {{ $altText := .Get "alt" }}
+  {{ $caption := .Get "caption" }}
+  {{ $href := .Get "href" }}
+  {{ $class := .Get "class" }}
+  {{ if findRE "^https?" $url.Scheme }}
+    <figure>
+      <img class="my-0 rounded-md" src="{{ $url.String }}" alt="{{ $altText }}" />
+      {{ with $caption }}<figcaption>{{ . | markdownify }}</figcaption>{{ end }}
+    </figure>
+  {{ else }}
+    {{ $resource := "" }}
+    {{ if $.Page.Resources.GetMatch ($url.String) }}
+      {{ $resource = $.Page.Resources.GetMatch ($url.String) }}
+    {{ else if resources.GetMatch ($url.String) }}
+      {{ $resource = resources.Get ($url.String) }}
+    {{ end }}
+    {{ with $resource }}
+      <figure {{ with $class }}class="{{ . }}"{{ end }}>
+        {{ with $href }}<a href="{{ . }}">{{ end }}
+          <img
+            class="my-0 rounded-md"
+            srcset="
+            {{ (.Resize "330x").RelPermalink }} 330w,
+            {{ (.Resize "660x").RelPermalink }} 660w,
+            {{ (.Resize "1024x").RelPermalink }} 1024w,
+            {{ (.Resize "1320x").RelPermalink }} 2x"
+            src="{{ (.Resize "660x").RelPermalink }}"
+            alt="{{ $altText }}"
+          />
+        {{ if $href }}</a>{{ end }}
+        {{ with $caption }}<figcaption>{{ . | markdownify }}</figcaption>{{ end }}
+      </figure>
+    {{ else }}
+      <figure>
+        <img class="my-0 rounded-md" src="{{ $url.String }}" alt="{{ $altText }}" />
+        {{ with $caption }}<figcaption>{{ . | markdownify }}</figcaption>{{ end }}
+      </figure>
+    {{ end }}
+  {{ end }}
+{{ end }}
diff --git a/web/themes/congo/layouts/shortcodes/icon.html b/web/themes/congo/layouts/shortcodes/icon.html
new file mode 100644
index 0000000000000000000000000000000000000000..af699236a1fce98fdedbccee3d107edf6154015a
--- /dev/null
+++ b/web/themes/congo/layouts/shortcodes/icon.html
@@ -0,0 +1,8 @@
+{{ $icon := resources.Get (printf "icons/%s.svg" ($.Get 0)) }}
+{{ if $icon }}
+  <span class="relative inline-block align-text-bottom icon">
+    {{ $icon.Content | safeHTML }}
+  </span>
+{{ else }}
+  {{ errorf `[CONGO] Shortcode "icon" error in "%s": Resource "%s" not found. Check the path is correct or remove the shortcode.` .Page.Path (printf "icons/%s.svg" ($.Get 0)) }}
+{{ end }}
diff --git a/web/themes/congo/layouts/shortcodes/katex.html b/web/themes/congo/layouts/shortcodes/katex.html
new file mode 100644
index 0000000000000000000000000000000000000000..a4160bfbd12d595a1a2ea6a0b76c84fc2b17f68c
--- /dev/null
+++ b/web/themes/congo/layouts/shortcodes/katex.html
@@ -0,0 +1 @@
+{{/* Nothing to see here */}}
diff --git a/web/themes/congo/layouts/shortcodes/lead.html b/web/themes/congo/layouts/shortcodes/lead.html
new file mode 100644
index 0000000000000000000000000000000000000000..d01e72f53a7b0f529ad595e05186acbd50e77d2c
--- /dev/null
+++ b/web/themes/congo/layouts/shortcodes/lead.html
@@ -0,0 +1,3 @@
+<div class="lead !mb-9 text-xl">
+  {{ .Inner | markdownify }}
+</div>
diff --git a/web/themes/congo/layouts/shortcodes/mermaid.html b/web/themes/congo/layouts/shortcodes/mermaid.html
new file mode 100644
index 0000000000000000000000000000000000000000..7246bf8236a47ec44230e05d689be8c422473585
--- /dev/null
+++ b/web/themes/congo/layouts/shortcodes/mermaid.html
@@ -0,0 +1,3 @@
+<div class="mermaid" align="center">
+  {{ .Inner }}
+</div>
diff --git a/web/themes/congo/layouts/shortcodes/screenshot.html b/web/themes/congo/layouts/shortcodes/screenshot.html
new file mode 100644
index 0000000000000000000000000000000000000000..39640ac31b1d9bc1a0b744e6d24a321b633c4420
--- /dev/null
+++ b/web/themes/congo/layouts/shortcodes/screenshot.html
@@ -0,0 +1,22 @@
+{{ if .Get "src" }}
+  {{ $image := .Page.Resources.GetMatch (printf "*%s*" (.Get "src")) }}
+  <figure{{ with .Get "class" }} class="{{ . }}"{{ end }}>
+    {{- if .Get "href" -}}
+      <a href="{{ .Get "href" }}">
+    {{- end -}}
+    <img src="{{ $image.RelPermalink }}"
+      {{- if or (.Get "alt") (.Get "caption") }}
+        alt="{{ with .Get "alt" }}{{ . }}{{ else }}{{ .Get "caption" | markdownify | plainify }}{{ end }}"
+      {{- end -}}
+      width="100%"
+      height="auto"
+      style="max-width:{{ div $image.Width 2 }}px; max-height:{{ div $image.Height 2 }}px;"
+    />
+    {{- if .Get "href" }}</a>{{ end -}}
+    {{- if .Get "caption" -}}
+      <figcaption>
+        {{- .Get "caption" | markdownify -}}
+      </figcaption>
+    {{- end }}
+  </figure>
+{{ end }}
diff --git a/web/themes/congo/lighthouserc.js b/web/themes/congo/lighthouserc.js
new file mode 100644
index 0000000000000000000000000000000000000000..31dda910012780eba72f7dbf8e9d5fe727f17759
--- /dev/null
+++ b/web/themes/congo/lighthouserc.js
@@ -0,0 +1,15 @@
+module.exports = {
+  ci: {
+    collect: {
+      startServerCommand: "npm run example -- --disableLiveReload --minify",
+      startServerReadyPattern: "Web Server is available",
+      url: ["http://localhost:8008/congo/samples/emoji/"],
+      settings: {
+        skipAudits: ["uses-text-compression", "uses-long-cache-ttl"],
+      },
+    },
+    upload: {
+      target: "temporary-public-storage",
+    },
+  },
+};
diff --git a/web/themes/congo/netlify.toml b/web/themes/congo/netlify.toml
new file mode 100644
index 0000000000000000000000000000000000000000..415095a00c3f2dda7461e54a8431d68d9d316cf0
--- /dev/null
+++ b/web/themes/congo/netlify.toml
@@ -0,0 +1,24 @@
+[build]
+  command = "cd exampleSite && hugo --gc --minify -D -b $URL"
+  publish = "exampleSite/public"
+
+[build.environment]
+HUGO_THEMESDIR = "../.."
+HUGO_THEME = "repo"
+TZ = "Australia/Melbourne"
+
+[context.production.environment]
+HUGO_VERSION = "0.105.0"
+HUGO_ENV = "production"
+
+[context.deploy-preview]
+command = "cd exampleSite && hugo --gc --minify -D -b $DEPLOY_PRIME_URL"
+
+[context.deploy-preview.environment]
+HUGO_VERSION = "0.105.0"
+
+[context.branch-deploy]
+command = "cd exampleSite && hugo --gc --minify -D -b $DEPLOY_PRIME_URL"
+
+[context.branch-deploy.environment]
+HUGO_VERSION = "0.105.0"
diff --git a/web/themes/congo/package-lock.json b/web/themes/congo/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..f966f86fa08c99ea2ebdbd49a0d7653f24df3b49
--- /dev/null
+++ b/web/themes/congo/package-lock.json
@@ -0,0 +1,3460 @@
+{
+  "name": "hugo-congo-theme",
+  "version": "2.4.0",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "hugo-congo-theme",
+      "version": "2.4.0",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "devDependencies": {
+        "@tailwindcss/typography": "^0.5.8",
+        "chart.js": "^3.9.1",
+        "fuse.js": "^6.6.2",
+        "katex": "^0.16.3",
+        "mermaid": "^9.2.2",
+        "prettier": "^2.7.1",
+        "prettier-plugin-go-template": "^0.0.13",
+        "prettier-plugin-tailwindcss": "^0.1.13",
+        "rimraf": "^3.0.2",
+        "tailwindcss": "^3.2.4",
+        "vendor-copy": "^3.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jpanther"
+      }
+    },
+    "node_modules/@braintree/sanitize-url": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.0.tgz",
+      "integrity": "sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w==",
+      "dev": true
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@tailwindcss/typography": {
+      "version": "0.5.8",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.8.tgz",
+      "integrity": "sha512-xGQEp8KXN8Sd8m6R4xYmwxghmswrd0cPnNI2Lc6fmrC3OojysTBJJGSIVwPV56q4t6THFUK3HJ0EaWwpglSxWw==",
+      "dev": true,
+      "dependencies": {
+        "lodash.castarray": "^4.4.0",
+        "lodash.isplainobject": "^4.0.6",
+        "lodash.merge": "^4.6.2",
+        "postcss-selector-parser": "6.0.10"
+      },
+      "peerDependencies": {
+        "tailwindcss": ">=3.0.0 || insiders"
+      }
+    },
+    "node_modules/acorn": {
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "dev": true,
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/acorn-node": {
+      "version": "1.8.2",
+      "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+      "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+      "dev": true,
+      "dependencies": {
+        "acorn": "^7.0.0",
+        "acorn-walk": "^7.0.0",
+        "xtend": "^4.0.2"
+      }
+    },
+    "node_modules/acorn-walk": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/anymatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+      "dev": true,
+      "dependencies": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/arg": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+      "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+      "dev": true
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "dev": true
+    },
+    "node_modules/binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "dev": true,
+      "dependencies": {
+        "fill-range": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/camelcase-css": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+      "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/chart.js": {
+      "version": "3.9.1",
+      "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz",
+      "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==",
+      "dev": true
+    },
+    "node_modules/chokidar": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://paulmillr.com/funding/"
+        }
+      ],
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/chokidar/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/commander": {
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+      "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+      "dev": true,
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
+    },
+    "node_modules/cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "dev": true,
+      "bin": {
+        "cssesc": "bin/cssesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/d3": {
+      "version": "7.4.3",
+      "resolved": "https://registry.npmjs.org/d3/-/d3-7.4.3.tgz",
+      "integrity": "sha512-x5cxHjtlXjtCzzaFv23mk6JKHKJzkYm/ePygQdeztcwYVedTHVQ7INyuAmRfjO7d4HTzQuofxzqva/d06Nh++Q==",
+      "dev": true,
+      "dependencies": {
+        "d3-array": "3",
+        "d3-axis": "3",
+        "d3-brush": "3",
+        "d3-chord": "3",
+        "d3-color": "3",
+        "d3-contour": "3",
+        "d3-delaunay": "6",
+        "d3-dispatch": "3",
+        "d3-drag": "3",
+        "d3-dsv": "3",
+        "d3-ease": "3",
+        "d3-fetch": "3",
+        "d3-force": "3",
+        "d3-format": "3",
+        "d3-geo": "3",
+        "d3-hierarchy": "3",
+        "d3-interpolate": "3",
+        "d3-path": "3",
+        "d3-polygon": "3",
+        "d3-quadtree": "3",
+        "d3-random": "3",
+        "d3-scale": "4",
+        "d3-scale-chromatic": "3",
+        "d3-selection": "3",
+        "d3-shape": "3",
+        "d3-time": "3",
+        "d3-time-format": "4",
+        "d3-timer": "3",
+        "d3-transition": "3",
+        "d3-zoom": "3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-array": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.5.tgz",
+      "integrity": "sha512-Rs6syGyepVjAYXWvhiFiVWUM8l4B/0p33tvlS+eXCVOaFrbz1dU7t+T16SJx/frnaLMXmFmKoXg/5aUVXxmMKQ==",
+      "dev": true,
+      "dependencies": {
+        "internmap": "1 - 2"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-axis": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+      "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-brush": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
+      "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+      "dev": true,
+      "dependencies": {
+        "d3-dispatch": "1 - 3",
+        "d3-drag": "2 - 3",
+        "d3-interpolate": "1 - 3",
+        "d3-selection": "3",
+        "d3-transition": "3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-chord": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
+      "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+      "dev": true,
+      "dependencies": {
+        "d3-path": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-collection": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz",
+      "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==",
+      "dev": true
+    },
+    "node_modules/d3-color": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+      "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-contour": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-3.0.1.tgz",
+      "integrity": "sha512-0Oc4D0KyhwhM7ZL0RMnfGycLN7hxHB8CMmwZ3+H26PWAG0ozNuYG5hXSDNgmP1SgJkQMrlG6cP20HoaSbvcJTQ==",
+      "dev": true,
+      "dependencies": {
+        "d3-array": "2 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-delaunay": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz",
+      "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==",
+      "dev": true,
+      "dependencies": {
+        "delaunator": "5"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-dispatch": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+      "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-drag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
+      "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+      "dev": true,
+      "dependencies": {
+        "d3-dispatch": "1 - 3",
+        "d3-selection": "3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-dsv": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+      "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+      "dev": true,
+      "dependencies": {
+        "commander": "7",
+        "iconv-lite": "0.6",
+        "rw": "1"
+      },
+      "bin": {
+        "csv2json": "bin/dsv2json.js",
+        "csv2tsv": "bin/dsv2dsv.js",
+        "dsv2dsv": "bin/dsv2dsv.js",
+        "dsv2json": "bin/dsv2json.js",
+        "json2csv": "bin/json2dsv.js",
+        "json2dsv": "bin/json2dsv.js",
+        "json2tsv": "bin/json2dsv.js",
+        "tsv2csv": "bin/dsv2dsv.js",
+        "tsv2json": "bin/dsv2json.js"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-dsv/node_modules/commander": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/d3-ease": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+      "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-fetch": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
+      "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+      "dev": true,
+      "dependencies": {
+        "d3-dsv": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-force": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+      "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+      "dev": true,
+      "dependencies": {
+        "d3-dispatch": "1 - 3",
+        "d3-quadtree": "1 - 3",
+        "d3-timer": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-format": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+      "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-geo": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz",
+      "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==",
+      "dev": true,
+      "dependencies": {
+        "d3-array": "2.5.0 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-hierarchy": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+      "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-interpolate": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+      "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+      "dev": true,
+      "dependencies": {
+        "d3-color": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-path": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz",
+      "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-polygon": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
+      "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-quadtree": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+      "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-random": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
+      "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-scale": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+      "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+      "dev": true,
+      "dependencies": {
+        "d3-array": "2.10.0 - 3",
+        "d3-format": "1 - 3",
+        "d3-interpolate": "1.2.0 - 3",
+        "d3-time": "2.1.1 - 3",
+        "d3-time-format": "2 - 4"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-scale-chromatic": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
+      "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==",
+      "dev": true,
+      "dependencies": {
+        "d3-color": "1 - 3",
+        "d3-interpolate": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-selection": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+      "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-shape": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz",
+      "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==",
+      "dev": true,
+      "dependencies": {
+        "d3-path": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-time": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz",
+      "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==",
+      "dev": true,
+      "dependencies": {
+        "d3-array": "2 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-time-format": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+      "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+      "dev": true,
+      "dependencies": {
+        "d3-time": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-timer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+      "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-transition": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
+      "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+      "dev": true,
+      "dependencies": {
+        "d3-color": "1 - 3",
+        "d3-dispatch": "1 - 3",
+        "d3-ease": "1 - 3",
+        "d3-interpolate": "1 - 3",
+        "d3-timer": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "d3-selection": "2 - 3"
+      }
+    },
+    "node_modules/d3-voronoi": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz",
+      "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==",
+      "dev": true
+    },
+    "node_modules/d3-zoom": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
+      "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+      "dev": true,
+      "dependencies": {
+        "d3-dispatch": "1 - 3",
+        "d3-drag": "2 - 3",
+        "d3-interpolate": "1 - 3",
+        "d3-selection": "2 - 3",
+        "d3-transition": "2 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/dagre": {
+      "version": "0.8.5",
+      "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz",
+      "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==",
+      "dev": true,
+      "dependencies": {
+        "graphlib": "^2.1.8",
+        "lodash": "^4.17.15"
+      }
+    },
+    "node_modules/dagre-d3": {
+      "version": "0.6.4",
+      "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz",
+      "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==",
+      "dev": true,
+      "dependencies": {
+        "d3": "^5.14",
+        "dagre": "^0.8.5",
+        "graphlib": "^2.1.8",
+        "lodash": "^4.17.15"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3": {
+      "version": "5.16.0",
+      "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz",
+      "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==",
+      "dev": true,
+      "dependencies": {
+        "d3-array": "1",
+        "d3-axis": "1",
+        "d3-brush": "1",
+        "d3-chord": "1",
+        "d3-collection": "1",
+        "d3-color": "1",
+        "d3-contour": "1",
+        "d3-dispatch": "1",
+        "d3-drag": "1",
+        "d3-dsv": "1",
+        "d3-ease": "1",
+        "d3-fetch": "1",
+        "d3-force": "1",
+        "d3-format": "1",
+        "d3-geo": "1",
+        "d3-hierarchy": "1",
+        "d3-interpolate": "1",
+        "d3-path": "1",
+        "d3-polygon": "1",
+        "d3-quadtree": "1",
+        "d3-random": "1",
+        "d3-scale": "2",
+        "d3-scale-chromatic": "1",
+        "d3-selection": "1",
+        "d3-shape": "1",
+        "d3-time": "1",
+        "d3-time-format": "2",
+        "d3-timer": "1",
+        "d3-transition": "1",
+        "d3-voronoi": "1",
+        "d3-zoom": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-array": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
+      "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-axis": {
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz",
+      "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-brush": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz",
+      "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==",
+      "dev": true,
+      "dependencies": {
+        "d3-dispatch": "1",
+        "d3-drag": "1",
+        "d3-interpolate": "1",
+        "d3-selection": "1",
+        "d3-transition": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-chord": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz",
+      "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==",
+      "dev": true,
+      "dependencies": {
+        "d3-array": "1",
+        "d3-path": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-color": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz",
+      "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-contour": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz",
+      "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==",
+      "dev": true,
+      "dependencies": {
+        "d3-array": "^1.1.1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-dispatch": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz",
+      "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-drag": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz",
+      "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==",
+      "dev": true,
+      "dependencies": {
+        "d3-dispatch": "1",
+        "d3-selection": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-dsv": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz",
+      "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==",
+      "dev": true,
+      "dependencies": {
+        "commander": "2",
+        "iconv-lite": "0.4",
+        "rw": "1"
+      },
+      "bin": {
+        "csv2json": "bin/dsv2json",
+        "csv2tsv": "bin/dsv2dsv",
+        "dsv2dsv": "bin/dsv2dsv",
+        "dsv2json": "bin/dsv2json",
+        "json2csv": "bin/json2dsv",
+        "json2dsv": "bin/json2dsv",
+        "json2tsv": "bin/json2dsv",
+        "tsv2csv": "bin/dsv2dsv",
+        "tsv2json": "bin/dsv2json"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-ease": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz",
+      "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-fetch": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz",
+      "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==",
+      "dev": true,
+      "dependencies": {
+        "d3-dsv": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-force": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz",
+      "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==",
+      "dev": true,
+      "dependencies": {
+        "d3-collection": "1",
+        "d3-dispatch": "1",
+        "d3-quadtree": "1",
+        "d3-timer": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-format": {
+      "version": "1.4.5",
+      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz",
+      "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-geo": {
+      "version": "1.12.1",
+      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz",
+      "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==",
+      "dev": true,
+      "dependencies": {
+        "d3-array": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-hierarchy": {
+      "version": "1.1.9",
+      "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz",
+      "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-interpolate": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
+      "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
+      "dev": true,
+      "dependencies": {
+        "d3-color": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-path": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+      "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-polygon": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz",
+      "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-quadtree": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz",
+      "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-random": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz",
+      "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-scale": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz",
+      "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==",
+      "dev": true,
+      "dependencies": {
+        "d3-array": "^1.2.0",
+        "d3-collection": "1",
+        "d3-format": "1",
+        "d3-interpolate": "1",
+        "d3-time": "1",
+        "d3-time-format": "2"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-scale-chromatic": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz",
+      "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==",
+      "dev": true,
+      "dependencies": {
+        "d3-color": "1",
+        "d3-interpolate": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-selection": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz",
+      "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-shape": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+      "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+      "dev": true,
+      "dependencies": {
+        "d3-path": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-time": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
+      "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-time-format": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz",
+      "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==",
+      "dev": true,
+      "dependencies": {
+        "d3-time": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-timer": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz",
+      "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==",
+      "dev": true
+    },
+    "node_modules/dagre-d3/node_modules/d3-transition": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz",
+      "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==",
+      "dev": true,
+      "dependencies": {
+        "d3-color": "1",
+        "d3-dispatch": "1",
+        "d3-ease": "1",
+        "d3-interpolate": "1",
+        "d3-selection": "^1.1.0",
+        "d3-timer": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/d3-zoom": {
+      "version": "1.8.3",
+      "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz",
+      "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==",
+      "dev": true,
+      "dependencies": {
+        "d3-dispatch": "1",
+        "d3-drag": "1",
+        "d3-interpolate": "1",
+        "d3-selection": "1",
+        "d3-transition": "1"
+      }
+    },
+    "node_modules/dagre-d3/node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dev": true,
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/defined": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+      "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==",
+      "dev": true
+    },
+    "node_modules/delaunator": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz",
+      "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==",
+      "dev": true,
+      "dependencies": {
+        "robust-predicates": "^3.0.0"
+      }
+    },
+    "node_modules/detective": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
+      "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
+      "dev": true,
+      "dependencies": {
+        "acorn-node": "^1.8.2",
+        "defined": "^1.0.0",
+        "minimist": "^1.2.6"
+      },
+      "bin": {
+        "detective": "bin/detective.js"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/didyoumean": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+      "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+      "dev": true
+    },
+    "node_modules/dlv": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+      "dev": true
+    },
+    "node_modules/dompurify": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz",
+      "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==",
+      "dev": true
+    },
+    "node_modules/fast-clone": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz",
+      "integrity": "sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==",
+      "dev": true
+    },
+    "node_modules/fast-glob": {
+      "version": "3.2.12",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+      "dev": true,
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fast-glob/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+      "dev": true,
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "dev": true,
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "dev": true
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "dev": true,
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "node_modules/fuse.js": {
+      "version": "6.6.2",
+      "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz",
+      "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/glob": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/graphlib": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz",
+      "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==",
+      "dev": true,
+      "dependencies": {
+        "lodash": "^4.17.15"
+      }
+    },
+    "node_modules/has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "dependencies": {
+        "function-bind": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+      "dev": true,
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
+      "dependencies": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "dev": true
+    },
+    "node_modules/internmap": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+      "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+      "dev": true,
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dev": true,
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+      "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+      "dev": true,
+      "dependencies": {
+        "has": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/katex": {
+      "version": "0.16.3",
+      "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.3.tgz",
+      "integrity": "sha512-3EykQddareoRmbtNiNEDgl3IGjryyrp2eg/25fHDEnlHymIDi33bptkMv6K4EOC2LZCybLW/ZkEo6Le+EM9pmA==",
+      "dev": true,
+      "funding": [
+        "https://opencollective.com/katex",
+        "https://github.com/sponsors/katex"
+      ],
+      "dependencies": {
+        "commander": "^8.0.0"
+      },
+      "bin": {
+        "katex": "cli.js"
+      }
+    },
+    "node_modules/khroma": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz",
+      "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==",
+      "dev": true
+    },
+    "node_modules/lilconfig": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+      "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "dev": true
+    },
+    "node_modules/lodash.castarray": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+      "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=",
+      "dev": true
+    },
+    "node_modules/lodash.isplainobject": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+      "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+      "dev": true
+    },
+    "node_modules/lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+      "dev": true
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/mermaid": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.2.2.tgz",
+      "integrity": "sha512-6s7eKMqFJGS+0MYjmx8f6ZigqKBJVoSx5ql2gw6a4Aa+WJ49QiEJg7gPwywaBg3DZMs79UP7trESp4+jmaQccw==",
+      "dev": true,
+      "dependencies": {
+        "@braintree/sanitize-url": "^6.0.0",
+        "d3": "^7.0.0",
+        "dagre": "^0.8.5",
+        "dagre-d3": "^0.6.4",
+        "dompurify": "2.4.0",
+        "fast-clone": "^1.5.13",
+        "graphlib": "^2.1.8",
+        "khroma": "^2.0.0",
+        "lodash": "^4.17.21",
+        "moment-mini": "^2.24.0",
+        "non-layered-tidy-tree-layout": "^2.0.2",
+        "stylis": "^4.1.2",
+        "uuid": "^9.0.0"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "dev": true,
+      "dependencies": {
+        "braces": "^3.0.2",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+      "dev": true
+    },
+    "node_modules/moment-mini": {
+      "version": "2.24.0",
+      "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.24.0.tgz",
+      "integrity": "sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ==",
+      "dev": true
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+      "dev": true,
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/ncp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+      "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
+      "dev": true,
+      "bin": {
+        "ncp": "bin/ncp"
+      }
+    },
+    "node_modules/non-layered-tidy-tree-layout": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz",
+      "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==",
+      "dev": true
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-hash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "dev": true,
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.4.18",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz",
+      "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        }
+      ],
+      "dependencies": {
+        "nanoid": "^3.3.4",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/postcss-import": {
+      "version": "14.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
+      "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+      "dev": true,
+      "dependencies": {
+        "postcss-value-parser": "^4.0.0",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.0"
+      }
+    },
+    "node_modules/postcss-js": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+      "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
+      "dev": true,
+      "dependencies": {
+        "camelcase-css": "^2.0.1"
+      },
+      "engines": {
+        "node": "^12 || ^14 || >= 16"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": "^8.3.3"
+      }
+    },
+    "node_modules/postcss-load-config": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+      "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+      "dev": true,
+      "dependencies": {
+        "lilconfig": "^2.0.5",
+        "yaml": "^1.10.2"
+      },
+      "engines": {
+        "node": ">= 10"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": ">=8.0.9",
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        },
+        "ts-node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/postcss-nested": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz",
+      "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==",
+      "dev": true,
+      "dependencies": {
+        "postcss-selector-parser": "^6.0.10"
+      },
+      "engines": {
+        "node": ">=12.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": "^8.2.14"
+      }
+    },
+    "node_modules/postcss-selector-parser": {
+      "version": "6.0.10",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+      "dev": true,
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+      "dev": true
+    },
+    "node_modules/prettier": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
+      "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
+      "dev": true,
+      "bin": {
+        "prettier": "bin-prettier.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    },
+    "node_modules/prettier-plugin-go-template": {
+      "version": "0.0.13",
+      "resolved": "https://registry.npmjs.org/prettier-plugin-go-template/-/prettier-plugin-go-template-0.0.13.tgz",
+      "integrity": "sha512-gG/xT5kd+kCzoMaTchXvdfBdsunyRCV6G8cgdPGPd2V5JGGKXUG7SjzBKU7jaGh2RTeblcAdBb/E+S/duOAMsA==",
+      "dev": true,
+      "dependencies": {
+        "ulid": "^2.3.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "prettier": "^2.0.0"
+      }
+    },
+    "node_modules/prettier-plugin-tailwindcss": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.1.13.tgz",
+      "integrity": "sha512-/EKQURUrxLu66CMUg4+1LwGdxnz8of7IDvrSLqEtDqhLH61SAlNNUSr90UTvZaemujgl3OH/VHg+fyGltrNixw==",
+      "dev": true,
+      "engines": {
+        "node": ">=12.17.0"
+      },
+      "peerDependencies": {
+        "prettier": ">=2.2.0"
+      }
+    },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/quick-lru": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+      "dev": true,
+      "dependencies": {
+        "pify": "^2.3.0"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+      "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+      "dev": true,
+      "dependencies": {
+        "is-core-module": "^2.9.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true,
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "dev": true,
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/robust-predicates": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz",
+      "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==",
+      "dev": true
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/rw": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+      "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=",
+      "dev": true
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
+    },
+    "node_modules/source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/stylis": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz",
+      "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==",
+      "dev": true
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/tailwindcss": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz",
+      "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==",
+      "dev": true,
+      "dependencies": {
+        "arg": "^5.0.2",
+        "chokidar": "^3.5.3",
+        "color-name": "^1.1.4",
+        "detective": "^5.2.1",
+        "didyoumean": "^1.2.2",
+        "dlv": "^1.1.3",
+        "fast-glob": "^3.2.12",
+        "glob-parent": "^6.0.2",
+        "is-glob": "^4.0.3",
+        "lilconfig": "^2.0.6",
+        "micromatch": "^4.0.5",
+        "normalize-path": "^3.0.0",
+        "object-hash": "^3.0.0",
+        "picocolors": "^1.0.0",
+        "postcss": "^8.4.18",
+        "postcss-import": "^14.1.0",
+        "postcss-js": "^4.0.0",
+        "postcss-load-config": "^3.1.4",
+        "postcss-nested": "6.0.0",
+        "postcss-selector-parser": "^6.0.10",
+        "postcss-value-parser": "^4.2.0",
+        "quick-lru": "^5.1.1",
+        "resolve": "^1.22.1"
+      },
+      "bin": {
+        "tailwind": "lib/cli.js",
+        "tailwindcss": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=12.13.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.9"
+      }
+    },
+    "node_modules/tailwindcss/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/ulid": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/ulid/-/ulid-2.3.0.tgz",
+      "integrity": "sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==",
+      "dev": true,
+      "bin": {
+        "ulid": "bin/cli.js"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "node_modules/uuid": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
+      "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
+      "dev": true,
+      "bin": {
+        "uuid": "dist/bin/uuid"
+      }
+    },
+    "node_modules/vendor-copy": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/vendor-copy/-/vendor-copy-3.0.1.tgz",
+      "integrity": "sha512-XjQ707tDNDVR9HBH2XoDffBB6em2QmWmD52uh8mt+KbFjv94DjDtz/Sh9lXSEWU1POg/fWXnjswe8hW5fqgL+w==",
+      "dev": true,
+      "dependencies": {
+        "ncp": "^2.0.0"
+      },
+      "bin": {
+        "vendor-copy": "cli.js"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+      "dev": true
+    },
+    "node_modules/xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4"
+      }
+    },
+    "node_modules/yaml": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 6"
+      }
+    }
+  },
+  "dependencies": {
+    "@braintree/sanitize-url": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.0.tgz",
+      "integrity": "sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w==",
+      "dev": true
+    },
+    "@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true
+    },
+    "@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      }
+    },
+    "@tailwindcss/typography": {
+      "version": "0.5.8",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.8.tgz",
+      "integrity": "sha512-xGQEp8KXN8Sd8m6R4xYmwxghmswrd0cPnNI2Lc6fmrC3OojysTBJJGSIVwPV56q4t6THFUK3HJ0EaWwpglSxWw==",
+      "dev": true,
+      "requires": {
+        "lodash.castarray": "^4.4.0",
+        "lodash.isplainobject": "^4.0.6",
+        "lodash.merge": "^4.6.2",
+        "postcss-selector-parser": "6.0.10"
+      }
+    },
+    "acorn": {
+      "version": "7.4.1",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+      "dev": true
+    },
+    "acorn-node": {
+      "version": "1.8.2",
+      "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
+      "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+      "dev": true,
+      "requires": {
+        "acorn": "^7.0.0",
+        "acorn-walk": "^7.0.0",
+        "xtend": "^4.0.2"
+      }
+    },
+    "acorn-walk": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+      "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+      "dev": true
+    },
+    "anymatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+      "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+      "dev": true,
+      "requires": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      }
+    },
+    "arg": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+      "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+      "dev": true
+    },
+    "balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "dev": true
+    },
+    "binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "dev": true
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "dev": true,
+      "requires": {
+        "fill-range": "^7.0.1"
+      }
+    },
+    "camelcase-css": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+      "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+      "dev": true
+    },
+    "chart.js": {
+      "version": "3.9.1",
+      "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz",
+      "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==",
+      "dev": true
+    },
+    "chokidar": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "dev": true,
+      "requires": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "fsevents": "~2.3.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+          "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+          "dev": true,
+          "requires": {
+            "is-glob": "^4.0.1"
+          }
+        }
+      }
+    },
+    "commander": {
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+      "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+      "dev": true
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
+    },
+    "cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "dev": true
+    },
+    "d3": {
+      "version": "7.4.3",
+      "resolved": "https://registry.npmjs.org/d3/-/d3-7.4.3.tgz",
+      "integrity": "sha512-x5cxHjtlXjtCzzaFv23mk6JKHKJzkYm/ePygQdeztcwYVedTHVQ7INyuAmRfjO7d4HTzQuofxzqva/d06Nh++Q==",
+      "dev": true,
+      "requires": {
+        "d3-array": "3",
+        "d3-axis": "3",
+        "d3-brush": "3",
+        "d3-chord": "3",
+        "d3-color": "3",
+        "d3-contour": "3",
+        "d3-delaunay": "6",
+        "d3-dispatch": "3",
+        "d3-drag": "3",
+        "d3-dsv": "3",
+        "d3-ease": "3",
+        "d3-fetch": "3",
+        "d3-force": "3",
+        "d3-format": "3",
+        "d3-geo": "3",
+        "d3-hierarchy": "3",
+        "d3-interpolate": "3",
+        "d3-path": "3",
+        "d3-polygon": "3",
+        "d3-quadtree": "3",
+        "d3-random": "3",
+        "d3-scale": "4",
+        "d3-scale-chromatic": "3",
+        "d3-selection": "3",
+        "d3-shape": "3",
+        "d3-time": "3",
+        "d3-time-format": "4",
+        "d3-timer": "3",
+        "d3-transition": "3",
+        "d3-zoom": "3"
+      }
+    },
+    "d3-array": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.5.tgz",
+      "integrity": "sha512-Rs6syGyepVjAYXWvhiFiVWUM8l4B/0p33tvlS+eXCVOaFrbz1dU7t+T16SJx/frnaLMXmFmKoXg/5aUVXxmMKQ==",
+      "dev": true,
+      "requires": {
+        "internmap": "1 - 2"
+      }
+    },
+    "d3-axis": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+      "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+      "dev": true
+    },
+    "d3-brush": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
+      "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+      "dev": true,
+      "requires": {
+        "d3-dispatch": "1 - 3",
+        "d3-drag": "2 - 3",
+        "d3-interpolate": "1 - 3",
+        "d3-selection": "3",
+        "d3-transition": "3"
+      }
+    },
+    "d3-chord": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
+      "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+      "dev": true,
+      "requires": {
+        "d3-path": "1 - 3"
+      }
+    },
+    "d3-collection": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz",
+      "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==",
+      "dev": true
+    },
+    "d3-color": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+      "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+      "dev": true
+    },
+    "d3-contour": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-3.0.1.tgz",
+      "integrity": "sha512-0Oc4D0KyhwhM7ZL0RMnfGycLN7hxHB8CMmwZ3+H26PWAG0ozNuYG5hXSDNgmP1SgJkQMrlG6cP20HoaSbvcJTQ==",
+      "dev": true,
+      "requires": {
+        "d3-array": "2 - 3"
+      }
+    },
+    "d3-delaunay": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz",
+      "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==",
+      "dev": true,
+      "requires": {
+        "delaunator": "5"
+      }
+    },
+    "d3-dispatch": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+      "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+      "dev": true
+    },
+    "d3-drag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
+      "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+      "dev": true,
+      "requires": {
+        "d3-dispatch": "1 - 3",
+        "d3-selection": "3"
+      }
+    },
+    "d3-dsv": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+      "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+      "dev": true,
+      "requires": {
+        "commander": "7",
+        "iconv-lite": "0.6",
+        "rw": "1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+          "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+          "dev": true
+        }
+      }
+    },
+    "d3-ease": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+      "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+      "dev": true
+    },
+    "d3-fetch": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
+      "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+      "dev": true,
+      "requires": {
+        "d3-dsv": "1 - 3"
+      }
+    },
+    "d3-force": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+      "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+      "dev": true,
+      "requires": {
+        "d3-dispatch": "1 - 3",
+        "d3-quadtree": "1 - 3",
+        "d3-timer": "1 - 3"
+      }
+    },
+    "d3-format": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+      "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+      "dev": true
+    },
+    "d3-geo": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz",
+      "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==",
+      "dev": true,
+      "requires": {
+        "d3-array": "2.5.0 - 3"
+      }
+    },
+    "d3-hierarchy": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+      "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+      "dev": true
+    },
+    "d3-interpolate": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+      "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+      "dev": true,
+      "requires": {
+        "d3-color": "1 - 3"
+      }
+    },
+    "d3-path": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz",
+      "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==",
+      "dev": true
+    },
+    "d3-polygon": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
+      "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+      "dev": true
+    },
+    "d3-quadtree": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+      "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+      "dev": true
+    },
+    "d3-random": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
+      "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+      "dev": true
+    },
+    "d3-scale": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+      "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+      "dev": true,
+      "requires": {
+        "d3-array": "2.10.0 - 3",
+        "d3-format": "1 - 3",
+        "d3-interpolate": "1.2.0 - 3",
+        "d3-time": "2.1.1 - 3",
+        "d3-time-format": "2 - 4"
+      }
+    },
+    "d3-scale-chromatic": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
+      "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==",
+      "dev": true,
+      "requires": {
+        "d3-color": "1 - 3",
+        "d3-interpolate": "1 - 3"
+      }
+    },
+    "d3-selection": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+      "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+      "dev": true
+    },
+    "d3-shape": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz",
+      "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==",
+      "dev": true,
+      "requires": {
+        "d3-path": "1 - 3"
+      }
+    },
+    "d3-time": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz",
+      "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==",
+      "dev": true,
+      "requires": {
+        "d3-array": "2 - 3"
+      }
+    },
+    "d3-time-format": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+      "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+      "dev": true,
+      "requires": {
+        "d3-time": "1 - 3"
+      }
+    },
+    "d3-timer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+      "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+      "dev": true
+    },
+    "d3-transition": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
+      "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+      "dev": true,
+      "requires": {
+        "d3-color": "1 - 3",
+        "d3-dispatch": "1 - 3",
+        "d3-ease": "1 - 3",
+        "d3-interpolate": "1 - 3",
+        "d3-timer": "1 - 3"
+      }
+    },
+    "d3-voronoi": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz",
+      "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==",
+      "dev": true
+    },
+    "d3-zoom": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
+      "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+      "dev": true,
+      "requires": {
+        "d3-dispatch": "1 - 3",
+        "d3-drag": "2 - 3",
+        "d3-interpolate": "1 - 3",
+        "d3-selection": "2 - 3",
+        "d3-transition": "2 - 3"
+      }
+    },
+    "dagre": {
+      "version": "0.8.5",
+      "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz",
+      "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==",
+      "dev": true,
+      "requires": {
+        "graphlib": "^2.1.8",
+        "lodash": "^4.17.15"
+      }
+    },
+    "dagre-d3": {
+      "version": "0.6.4",
+      "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz",
+      "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==",
+      "dev": true,
+      "requires": {
+        "d3": "^5.14",
+        "dagre": "^0.8.5",
+        "graphlib": "^2.1.8",
+        "lodash": "^4.17.15"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.20.3",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+          "dev": true
+        },
+        "d3": {
+          "version": "5.16.0",
+          "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz",
+          "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==",
+          "dev": true,
+          "requires": {
+            "d3-array": "1",
+            "d3-axis": "1",
+            "d3-brush": "1",
+            "d3-chord": "1",
+            "d3-collection": "1",
+            "d3-color": "1",
+            "d3-contour": "1",
+            "d3-dispatch": "1",
+            "d3-drag": "1",
+            "d3-dsv": "1",
+            "d3-ease": "1",
+            "d3-fetch": "1",
+            "d3-force": "1",
+            "d3-format": "1",
+            "d3-geo": "1",
+            "d3-hierarchy": "1",
+            "d3-interpolate": "1",
+            "d3-path": "1",
+            "d3-polygon": "1",
+            "d3-quadtree": "1",
+            "d3-random": "1",
+            "d3-scale": "2",
+            "d3-scale-chromatic": "1",
+            "d3-selection": "1",
+            "d3-shape": "1",
+            "d3-time": "1",
+            "d3-time-format": "2",
+            "d3-timer": "1",
+            "d3-transition": "1",
+            "d3-voronoi": "1",
+            "d3-zoom": "1"
+          }
+        },
+        "d3-array": {
+          "version": "1.2.4",
+          "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
+          "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==",
+          "dev": true
+        },
+        "d3-axis": {
+          "version": "1.0.12",
+          "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz",
+          "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==",
+          "dev": true
+        },
+        "d3-brush": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz",
+          "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==",
+          "dev": true,
+          "requires": {
+            "d3-dispatch": "1",
+            "d3-drag": "1",
+            "d3-interpolate": "1",
+            "d3-selection": "1",
+            "d3-transition": "1"
+          }
+        },
+        "d3-chord": {
+          "version": "1.0.6",
+          "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz",
+          "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==",
+          "dev": true,
+          "requires": {
+            "d3-array": "1",
+            "d3-path": "1"
+          }
+        },
+        "d3-color": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz",
+          "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==",
+          "dev": true
+        },
+        "d3-contour": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz",
+          "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==",
+          "dev": true,
+          "requires": {
+            "d3-array": "^1.1.1"
+          }
+        },
+        "d3-dispatch": {
+          "version": "1.0.6",
+          "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz",
+          "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==",
+          "dev": true
+        },
+        "d3-drag": {
+          "version": "1.2.5",
+          "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz",
+          "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==",
+          "dev": true,
+          "requires": {
+            "d3-dispatch": "1",
+            "d3-selection": "1"
+          }
+        },
+        "d3-dsv": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz",
+          "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==",
+          "dev": true,
+          "requires": {
+            "commander": "2",
+            "iconv-lite": "0.4",
+            "rw": "1"
+          }
+        },
+        "d3-ease": {
+          "version": "1.0.7",
+          "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz",
+          "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==",
+          "dev": true
+        },
+        "d3-fetch": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz",
+          "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==",
+          "dev": true,
+          "requires": {
+            "d3-dsv": "1"
+          }
+        },
+        "d3-force": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz",
+          "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==",
+          "dev": true,
+          "requires": {
+            "d3-collection": "1",
+            "d3-dispatch": "1",
+            "d3-quadtree": "1",
+            "d3-timer": "1"
+          }
+        },
+        "d3-format": {
+          "version": "1.4.5",
+          "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz",
+          "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==",
+          "dev": true
+        },
+        "d3-geo": {
+          "version": "1.12.1",
+          "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz",
+          "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==",
+          "dev": true,
+          "requires": {
+            "d3-array": "1"
+          }
+        },
+        "d3-hierarchy": {
+          "version": "1.1.9",
+          "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz",
+          "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==",
+          "dev": true
+        },
+        "d3-interpolate": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
+          "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
+          "dev": true,
+          "requires": {
+            "d3-color": "1"
+          }
+        },
+        "d3-path": {
+          "version": "1.0.9",
+          "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+          "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
+          "dev": true
+        },
+        "d3-polygon": {
+          "version": "1.0.6",
+          "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz",
+          "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==",
+          "dev": true
+        },
+        "d3-quadtree": {
+          "version": "1.0.7",
+          "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz",
+          "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==",
+          "dev": true
+        },
+        "d3-random": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz",
+          "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==",
+          "dev": true
+        },
+        "d3-scale": {
+          "version": "2.2.2",
+          "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz",
+          "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==",
+          "dev": true,
+          "requires": {
+            "d3-array": "^1.2.0",
+            "d3-collection": "1",
+            "d3-format": "1",
+            "d3-interpolate": "1",
+            "d3-time": "1",
+            "d3-time-format": "2"
+          }
+        },
+        "d3-scale-chromatic": {
+          "version": "1.5.0",
+          "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz",
+          "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==",
+          "dev": true,
+          "requires": {
+            "d3-color": "1",
+            "d3-interpolate": "1"
+          }
+        },
+        "d3-selection": {
+          "version": "1.4.2",
+          "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz",
+          "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==",
+          "dev": true
+        },
+        "d3-shape": {
+          "version": "1.3.7",
+          "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+          "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+          "dev": true,
+          "requires": {
+            "d3-path": "1"
+          }
+        },
+        "d3-time": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
+          "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==",
+          "dev": true
+        },
+        "d3-time-format": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz",
+          "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==",
+          "dev": true,
+          "requires": {
+            "d3-time": "1"
+          }
+        },
+        "d3-timer": {
+          "version": "1.0.10",
+          "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz",
+          "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==",
+          "dev": true
+        },
+        "d3-transition": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz",
+          "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==",
+          "dev": true,
+          "requires": {
+            "d3-color": "1",
+            "d3-dispatch": "1",
+            "d3-ease": "1",
+            "d3-interpolate": "1",
+            "d3-selection": "^1.1.0",
+            "d3-timer": "1"
+          }
+        },
+        "d3-zoom": {
+          "version": "1.8.3",
+          "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz",
+          "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==",
+          "dev": true,
+          "requires": {
+            "d3-dispatch": "1",
+            "d3-drag": "1",
+            "d3-interpolate": "1",
+            "d3-selection": "1",
+            "d3-transition": "1"
+          }
+        },
+        "iconv-lite": {
+          "version": "0.4.24",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+          "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+          "dev": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3"
+          }
+        }
+      }
+    },
+    "defined": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+      "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==",
+      "dev": true
+    },
+    "delaunator": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz",
+      "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==",
+      "dev": true,
+      "requires": {
+        "robust-predicates": "^3.0.0"
+      }
+    },
+    "detective": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
+      "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
+      "dev": true,
+      "requires": {
+        "acorn-node": "^1.8.2",
+        "defined": "^1.0.0",
+        "minimist": "^1.2.6"
+      }
+    },
+    "didyoumean": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+      "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+      "dev": true
+    },
+    "dlv": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+      "dev": true
+    },
+    "dompurify": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz",
+      "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==",
+      "dev": true
+    },
+    "fast-clone": {
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz",
+      "integrity": "sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==",
+      "dev": true
+    },
+    "fast-glob": {
+      "version": "3.2.12",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+      "dev": true,
+      "requires": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+          "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+          "dev": true,
+          "requires": {
+            "is-glob": "^4.0.1"
+          }
+        }
+      }
+    },
+    "fastq": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+      "dev": true,
+      "requires": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "fill-range": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "dev": true,
+      "requires": {
+        "to-regex-range": "^5.0.1"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "dev": true
+    },
+    "fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "dev": true,
+      "optional": true
+    },
+    "function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "fuse.js": {
+      "version": "6.6.2",
+      "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.6.2.tgz",
+      "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==",
+      "dev": true
+    },
+    "glob": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+      "dev": true,
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+      "dev": true,
+      "requires": {
+        "is-glob": "^4.0.3"
+      }
+    },
+    "graphlib": {
+      "version": "2.1.8",
+      "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz",
+      "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.15"
+      }
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1"
+      }
+    },
+    "iconv-lite": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+      "dev": true,
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      }
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "dev": true
+    },
+    "internmap": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+      "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+      "dev": true
+    },
+    "is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dev": true,
+      "requires": {
+        "binary-extensions": "^2.0.0"
+      }
+    },
+    "is-core-module": {
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+      "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.3"
+      }
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true
+    },
+    "katex": {
+      "version": "0.16.3",
+      "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.3.tgz",
+      "integrity": "sha512-3EykQddareoRmbtNiNEDgl3IGjryyrp2eg/25fHDEnlHymIDi33bptkMv6K4EOC2LZCybLW/ZkEo6Le+EM9pmA==",
+      "dev": true,
+      "requires": {
+        "commander": "^8.0.0"
+      }
+    },
+    "khroma": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz",
+      "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==",
+      "dev": true
+    },
+    "lilconfig": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+      "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
+      "dev": true
+    },
+    "lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "dev": true
+    },
+    "lodash.castarray": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
+      "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=",
+      "dev": true
+    },
+    "lodash.isplainobject": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+      "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+      "dev": true
+    },
+    "lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+      "dev": true
+    },
+    "merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true
+    },
+    "mermaid": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.2.2.tgz",
+      "integrity": "sha512-6s7eKMqFJGS+0MYjmx8f6ZigqKBJVoSx5ql2gw6a4Aa+WJ49QiEJg7gPwywaBg3DZMs79UP7trESp4+jmaQccw==",
+      "dev": true,
+      "requires": {
+        "@braintree/sanitize-url": "^6.0.0",
+        "d3": "^7.0.0",
+        "dagre": "^0.8.5",
+        "dagre-d3": "^0.6.4",
+        "dompurify": "2.4.0",
+        "fast-clone": "^1.5.13",
+        "graphlib": "^2.1.8",
+        "khroma": "^2.0.0",
+        "lodash": "^4.17.21",
+        "moment-mini": "^2.24.0",
+        "non-layered-tidy-tree-layout": "^2.0.2",
+        "stylis": "^4.1.2",
+        "uuid": "^9.0.0"
+      }
+    },
+    "micromatch": {
+      "version": "4.0.5",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+      "dev": true,
+      "requires": {
+        "braces": "^3.0.2",
+        "picomatch": "^2.3.1"
+      }
+    },
+    "minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+      "dev": true
+    },
+    "moment-mini": {
+      "version": "2.24.0",
+      "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.24.0.tgz",
+      "integrity": "sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ==",
+      "dev": true
+    },
+    "nanoid": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+      "dev": true
+    },
+    "ncp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz",
+      "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=",
+      "dev": true
+    },
+    "non-layered-tidy-tree-layout": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz",
+      "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==",
+      "dev": true
+    },
+    "normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true
+    },
+    "object-hash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+      "dev": true
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "dev": true,
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
+    },
+    "path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true
+    },
+    "picocolors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "dev": true
+    },
+    "picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true
+    },
+    "pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+      "dev": true
+    },
+    "postcss": {
+      "version": "8.4.18",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz",
+      "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==",
+      "dev": true,
+      "requires": {
+        "nanoid": "^3.3.4",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      }
+    },
+    "postcss-import": {
+      "version": "14.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
+      "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
+      "dev": true,
+      "requires": {
+        "postcss-value-parser": "^4.0.0",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      }
+    },
+    "postcss-js": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz",
+      "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==",
+      "dev": true,
+      "requires": {
+        "camelcase-css": "^2.0.1"
+      }
+    },
+    "postcss-load-config": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
+      "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
+      "dev": true,
+      "requires": {
+        "lilconfig": "^2.0.5",
+        "yaml": "^1.10.2"
+      }
+    },
+    "postcss-nested": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz",
+      "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==",
+      "dev": true,
+      "requires": {
+        "postcss-selector-parser": "^6.0.10"
+      }
+    },
+    "postcss-selector-parser": {
+      "version": "6.0.10",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+      "dev": true,
+      "requires": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      }
+    },
+    "postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+      "dev": true
+    },
+    "prettier": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
+      "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
+      "dev": true
+    },
+    "prettier-plugin-go-template": {
+      "version": "0.0.13",
+      "resolved": "https://registry.npmjs.org/prettier-plugin-go-template/-/prettier-plugin-go-template-0.0.13.tgz",
+      "integrity": "sha512-gG/xT5kd+kCzoMaTchXvdfBdsunyRCV6G8cgdPGPd2V5JGGKXUG7SjzBKU7jaGh2RTeblcAdBb/E+S/duOAMsA==",
+      "dev": true,
+      "requires": {
+        "ulid": "^2.3.0"
+      }
+    },
+    "prettier-plugin-tailwindcss": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.1.13.tgz",
+      "integrity": "sha512-/EKQURUrxLu66CMUg4+1LwGdxnz8of7IDvrSLqEtDqhLH61SAlNNUSr90UTvZaemujgl3OH/VHg+fyGltrNixw==",
+      "dev": true,
+      "requires": {}
+    },
+    "queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true
+    },
+    "quick-lru": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+      "dev": true
+    },
+    "read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+      "dev": true,
+      "requires": {
+        "pify": "^2.3.0"
+      }
+    },
+    "readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
+      "requires": {
+        "picomatch": "^2.2.1"
+      }
+    },
+    "resolve": {
+      "version": "1.22.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+      "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+      "dev": true,
+      "requires": {
+        "is-core-module": "^2.9.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      }
+    },
+    "reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "dev": true
+    },
+    "rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.1.3"
+      }
+    },
+    "robust-predicates": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz",
+      "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==",
+      "dev": true
+    },
+    "run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "requires": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "rw": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+      "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=",
+      "dev": true
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "dev": true
+    },
+    "source-map-js": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+      "dev": true
+    },
+    "stylis": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz",
+      "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==",
+      "dev": true
+    },
+    "supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true
+    },
+    "tailwindcss": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz",
+      "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==",
+      "dev": true,
+      "requires": {
+        "arg": "^5.0.2",
+        "chokidar": "^3.5.3",
+        "color-name": "^1.1.4",
+        "detective": "^5.2.1",
+        "didyoumean": "^1.2.2",
+        "dlv": "^1.1.3",
+        "fast-glob": "^3.2.12",
+        "glob-parent": "^6.0.2",
+        "is-glob": "^4.0.3",
+        "lilconfig": "^2.0.6",
+        "micromatch": "^4.0.5",
+        "normalize-path": "^3.0.0",
+        "object-hash": "^3.0.0",
+        "picocolors": "^1.0.0",
+        "postcss": "^8.4.18",
+        "postcss-import": "^14.1.0",
+        "postcss-js": "^4.0.0",
+        "postcss-load-config": "^3.1.4",
+        "postcss-nested": "6.0.0",
+        "postcss-selector-parser": "^6.0.10",
+        "postcss-value-parser": "^4.2.0",
+        "quick-lru": "^5.1.1",
+        "resolve": "^1.22.1"
+      },
+      "dependencies": {
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true
+        }
+      }
+    },
+    "to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
+      "requires": {
+        "is-number": "^7.0.0"
+      }
+    },
+    "ulid": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/ulid/-/ulid-2.3.0.tgz",
+      "integrity": "sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==",
+      "dev": true
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
+    },
+    "uuid": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
+      "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==",
+      "dev": true
+    },
+    "vendor-copy": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/vendor-copy/-/vendor-copy-3.0.1.tgz",
+      "integrity": "sha512-XjQ707tDNDVR9HBH2XoDffBB6em2QmWmD52uh8mt+KbFjv94DjDtz/Sh9lXSEWU1POg/fWXnjswe8hW5fqgL+w==",
+      "dev": true,
+      "requires": {
+        "ncp": "^2.0.0"
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+      "dev": true
+    },
+    "xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+      "dev": true
+    },
+    "yaml": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+      "dev": true
+    }
+  }
+}
diff --git a/web/themes/congo/package.json b/web/themes/congo/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..40c5d9f7cc72b32e46101719dd0824b78a1e0367
--- /dev/null
+++ b/web/themes/congo/package.json
@@ -0,0 +1,75 @@
+{
+  "name": "hugo-congo-theme",
+  "version": "2.4.1",
+  "description": "Congo theme for Hugo",
+  "scripts": {
+    "preinstall": "rimraf assets/vendor",
+    "postinstall": "vendor-copy",
+    "assets": "rimraf assets/vendor && vendor-copy",
+    "dev": "NODE_ENV=development ./node_modules/tailwindcss/lib/cli.js -i ./assets/css/main.css -o ./assets/css/compiled/main.css --jit -w",
+    "build": "NODE_ENV=production ./node_modules/tailwindcss/lib/cli.js -i ./assets/css/main.css -o ./assets/css/compiled/main.css --jit",
+    "example": "hugo server --source exampleSite --themesDir ../.. --buildDrafts -b http://localhost/congo/ -p 8008",
+    "lighthouse": "lhci autorun"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/jpanther/congo.git"
+  },
+  "keywords": [
+    "hugo",
+    "hugo-theme",
+    "tailwind",
+    "dark-mode"
+  ],
+  "author": "James Panther",
+  "funding": "https://github.com/sponsors/jpanther",
+  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/jpanther/congo/issues"
+  },
+  "homepage": "https://github.com/jpanther/congo#readme",
+  "devDependencies": {
+    "@tailwindcss/typography": "^0.5.8",
+    "chart.js": "^3.9.1",
+    "fuse.js": "^6.6.2",
+    "katex": "^0.16.3",
+    "mermaid": "^9.2.2",
+    "prettier": "^2.7.1",
+    "prettier-plugin-go-template": "^0.0.13",
+    "prettier-plugin-tailwindcss": "^0.1.13",
+    "rimraf": "^3.0.2",
+    "tailwindcss": "^3.2.4",
+    "vendor-copy": "^3.0.1"
+  },
+  "vendorCopy": [],
+  "devVendorCopy": [
+    {
+      "from": "node_modules/mermaid/dist/mermaid.min.js",
+      "to": "assets/lib/mermaid/mermaid.min.js"
+    },
+    {
+      "from": "node_modules/chart.js/dist/chart.min.js",
+      "to": "assets/lib/chart/chart.min.js"
+    },
+    {
+      "from": "node_modules/katex/dist/katex.min.js",
+      "to": "assets/lib/katex/katex.min.js"
+    },
+    {
+      "from": "node_modules/katex/dist/katex.min.css",
+      "to": "assets/lib/katex/katex.min.css"
+    },
+    {
+      "from": "node_modules/katex/dist/contrib/auto-render.min.js",
+      "to": "assets/lib/katex/auto-render.min.js"
+    },
+    {
+      "from": "node_modules/katex/dist/fonts/",
+      "to": "assets/lib/katex/fonts/"
+    },
+    {
+      "from": "node_modules/fuse.js/dist/fuse.min.js",
+      "to": "assets/lib/fuse/fuse.min.js"
+    }
+  ]
+}
diff --git a/web/themes/congo/release.sh b/web/themes/congo/release.sh
new file mode 100755
index 0000000000000000000000000000000000000000..1505410f36b3f17542eedb482c7df5701f522e3d
--- /dev/null
+++ b/web/themes/congo/release.sh
@@ -0,0 +1,68 @@
+#!bin/bash
+
+# get current branch
+branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')
+
+# push any local changes
+git push
+
+# run a build to catch any uncommitted updates
+npm run build
+
+# branch validation
+if [ $branch = "dev" ]; then
+	# check current branch is clean
+	if output=$(git status --porcelain) && [ -z "$output" ]; then
+		
+		# get the version number
+		echo "Enter the release version (eg. 1.2.0):"
+		read version
+
+		echo "Started releasing Congo v$version..."
+
+		# update package version
+		jq --arg version "$version" '.version=$version' package.json > package.tmp && mv package.tmp package.json
+		sed -i "" -e "1s/^\(\/\*! Congo \)v[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}/\1v$version/" assets/css/main.css
+
+		# update changelog
+		chan release $version || exit
+		npx prettier --write CHANGELOG.md
+
+		# build project
+		npm run build
+
+		# commit version updates
+		git commit -a -m "🔨 Preparing release v$version"
+		git push
+
+		# switch to stable branch
+		git checkout stable
+
+		# pull latest from stable
+		git pull
+
+		# merge in changes from dev branch
+		git merge --no-ff dev -m "🔖 Release v$version"
+
+		# create tag
+		git tag "v$version"
+
+		# push commit and tag to remote
+		git push
+		git push --tags
+
+		# publish GitHub release
+		timeout 2 chan gh-release $version
+
+		echo "Congo v$version successfully released! 🎉"
+		echo "Returning to dev branch..."
+
+		git checkout dev
+
+	else	
+		echo "ERROR: There are unstaged changes in development!"
+		echo "Clean the working directory and try again."
+	fi
+else 
+	echo "ERROR: Releases can only be published from the dev branch!"
+fi
diff --git a/web/themes/congo/static/android-chrome-192x192.png b/web/themes/congo/static/android-chrome-192x192.png
new file mode 100755
index 0000000000000000000000000000000000000000..eeb320e32bbaf3ad8cf6a0367d1f03b56cdd05cf
Binary files /dev/null and b/web/themes/congo/static/android-chrome-192x192.png differ
diff --git a/web/themes/congo/static/android-chrome-512x512.png b/web/themes/congo/static/android-chrome-512x512.png
new file mode 100755
index 0000000000000000000000000000000000000000..698731a51c4bc72efcdb46d64ae4e97333ae35cb
Binary files /dev/null and b/web/themes/congo/static/android-chrome-512x512.png differ
diff --git a/web/themes/congo/static/apple-touch-icon.png b/web/themes/congo/static/apple-touch-icon.png
new file mode 100755
index 0000000000000000000000000000000000000000..e3ad14a128307b1aaffbbf14def18de28b352c74
Binary files /dev/null and b/web/themes/congo/static/apple-touch-icon.png differ
diff --git a/web/themes/congo/static/favicon-16x16.png b/web/themes/congo/static/favicon-16x16.png
new file mode 100755
index 0000000000000000000000000000000000000000..8ecbbe95e78762ec6dddc6a4c19063dc3629d33a
Binary files /dev/null and b/web/themes/congo/static/favicon-16x16.png differ
diff --git a/web/themes/congo/static/favicon-32x32.png b/web/themes/congo/static/favicon-32x32.png
new file mode 100755
index 0000000000000000000000000000000000000000..6f409e8f4de4707b5a875a7ae30ecf74504271d1
Binary files /dev/null and b/web/themes/congo/static/favicon-32x32.png differ
diff --git a/web/themes/congo/static/favicon.ico b/web/themes/congo/static/favicon.ico
new file mode 100755
index 0000000000000000000000000000000000000000..879d75557d4bd69082f5a74e68ca3ac51fe17101
Binary files /dev/null and b/web/themes/congo/static/favicon.ico differ
diff --git a/web/themes/congo/static/site.webmanifest b/web/themes/congo/static/site.webmanifest
new file mode 100755
index 0000000000000000000000000000000000000000..03c13dab84719aa6c6d3e15dd740ab821f4f5c06
--- /dev/null
+++ b/web/themes/congo/static/site.webmanifest
@@ -0,0 +1 @@
+{"name":"Congo","short_name":"Congo","icons":[{"src": "/android-chrome-192x192.png","sizes": "192x192","type": "image/png","purpose": "any maskable"},{"src": "/android-chrome-512x512.png","sizes": "512x512","type": "image/png","purpose": "any maskable"}],"theme_color":"#ffffff","background_color":"#7c3aed","display":"standalone"}
\ No newline at end of file
diff --git a/web/themes/congo/tailwind.config.js b/web/themes/congo/tailwind.config.js
new file mode 100644
index 0000000000000000000000000000000000000000..6c3b01f69d54fb30358b2b65069d045d6dec0c66
--- /dev/null
+++ b/web/themes/congo/tailwind.config.js
@@ -0,0 +1,133 @@
+module.exports = {
+  content: [
+    "./layouts/**/*.html",
+    "./content/**/*.{html,md}",
+    "./themes/congo/layouts/**/*.html",
+    "./themes/congo/content/**/*.{html,md}",
+  ],
+  darkMode: "class",
+  theme: {
+    colors: {
+      transparent: "transparent",
+      neutral: {
+        DEFAULT: "rgba(var(--color-neutral), <alpha-value>)",
+        50: "rgba(var(--color-neutral-50), <alpha-value>)",
+        100: "rgba(var(--color-neutral-100), <alpha-value>)",
+        200: "rgba(var(--color-neutral-200), <alpha-value>)",
+        300: "rgba(var(--color-neutral-300), <alpha-value>)",
+        400: "rgba(var(--color-neutral-400), <alpha-value>)",
+        500: "rgba(var(--color-neutral-500), <alpha-value>)",
+        600: "rgba(var(--color-neutral-600), <alpha-value>)",
+        700: "rgba(var(--color-neutral-700), <alpha-value>)",
+        800: "rgba(var(--color-neutral-800), <alpha-value>)",
+        900: "rgba(var(--color-neutral-900), <alpha-value>)",
+      },
+      primary: {
+        50: "rgba(var(--color-primary-50), <alpha-value>)",
+        100: "rgba(var(--color-primary-100), <alpha-value>)",
+        200: "rgba(var(--color-primary-200), <alpha-value>)",
+        300: "rgba(var(--color-primary-300), <alpha-value>)",
+        400: "rgba(var(--color-primary-400), <alpha-value>)",
+        500: "rgba(var(--color-primary-500), <alpha-value>)",
+        600: "rgba(var(--color-primary-600), <alpha-value>)",
+        700: "rgba(var(--color-primary-700), <alpha-value>)",
+        800: "rgba(var(--color-primary-800), <alpha-value>)",
+        900: "rgba(var(--color-primary-900), <alpha-value>)",
+      },
+      secondary: {
+        50: "rgba(var(--color-secondary-50), <alpha-value>)",
+        100: "rgba(var(--color-secondary-100), <alpha-value>)",
+        200: "rgba(var(--color-secondary-200), <alpha-value>)",
+        300: "rgba(var(--color-secondary-300), <alpha-value>)",
+        400: "rgba(var(--color-secondary-400), <alpha-value>)",
+        500: "rgba(var(--color-secondary-500), <alpha-value>)",
+        600: "rgba(var(--color-secondary-600), <alpha-value>)",
+        700: "rgba(var(--color-secondary-700), <alpha-value>)",
+        800: "rgba(var(--color-secondary-800), <alpha-value>)",
+        900: "rgba(var(--color-secondary-900), <alpha-value>)",
+      },
+    },
+    extend: {
+      typography: ({ theme }) => ({
+        DEFAULT: {
+          css: {
+            "--tw-prose-body": theme("colors.neutral.700 / 1"),
+            "--tw-prose-headings": theme("colors.neutral.800 / 1"),
+            "--tw-prose-lead": theme("colors.neutral.500 / 1"),
+            "--tw-prose-links": theme("colors.primary.700 / 1"),
+            "--tw-prose-bold": theme("colors.neutral.900 / 1"),
+            "--tw-prose-counters": theme("colors.neutral.800 / 1"),
+            "--tw-prose-bullets": theme("colors.neutral.500 / 1"),
+            "--tw-prose-hr": theme("colors.neutral.200 / 1"),
+            "--tw-prose-quotes": theme("colors.neutral.700 / 1"),
+            "--tw-prose-quote-borders": theme("colors.primary.200 / 1"),
+            "--tw-prose-captions": theme("colors.neutral.500 / 1"),
+            "--tw-prose-code": theme("colors.secondary.700 / 1"),
+            "--tw-prose-pre-code": theme("colors.neutral.700 / 1"),
+            "--tw-prose-pre-bg": theme("colors.neutral.50 / 1"),
+            "--tw-prose-th-borders": theme("colors.neutral.500 / 1"),
+            "--tw-prose-td-borders": theme("colors.neutral.300 / 1"),
+            "--tw-prose-invert-body": theme("colors.neutral.300 / 1"),
+            "--tw-prose-invert-headings": theme("colors.neutral.50 / 1"),
+            "--tw-prose-invert-lead": theme("colors.neutral.500 / 1"),
+            "--tw-prose-invert-links": theme("colors.primary.400 / 1"),
+            "--tw-prose-invert-bold": theme("colors.neutral.DEFAULT / 1"),
+            "--tw-prose-invert-counters": theme("colors.neutral.400 / 1"),
+            "--tw-prose-invert-bullets": theme("colors.neutral.600 / 1"),
+            "--tw-prose-invert-hr": theme("colors.neutral.500 / 1"),
+            "--tw-prose-invert-quotes": theme("colors.neutral.200 / 1"),
+            "--tw-prose-invert-quote-borders": theme("colors.primary.900 / 1"),
+            "--tw-prose-invert-captions": theme("colors.neutral.400 / 1"),
+            "--tw-prose-invert-code": theme("colors.secondary.400 / 1"),
+            "--tw-prose-invert-pre-code": theme("colors.neutral.200 / 1"),
+            "--tw-prose-invert-pre-bg": theme("colors.neutral.700 / 1"),
+            "--tw-prose-invert-th-borders": theme("colors.neutral.500 / 1"),
+            "--tw-prose-invert-td-borders": theme("colors.neutral.700 / 1"),
+            a: {
+              textDecoration: "underline",
+              textDecorationColor: theme("colors.primary.300 / 1"),
+              fontWeight: "500",
+              "&:hover": {
+                color: theme("colors.neutral.DEFAULT / 1"),
+                textDecoration: "none",
+                backgroundColor: theme("colors.primary.600 / 1"),
+                borderRadius: "0.09rem",
+              },
+            },
+            "a code": {
+              color: "var(--tw-prose-code)",
+            },
+            kbd: {
+              backgroundColor: theme("colors.neutral.200 / 1"),
+              padding: "0.1rem 0.4rem",
+              borderRadius: "0.25rem",
+              fontSize: "0.9rem",
+              fontWeight: "600",
+            },
+            mark: {
+              color: theme("colors.neutral.800 / 1"),
+              backgroundColor: theme("colors.secondary.200 / 1"),
+              padding: "0.1rem 0.2rem",
+              borderRadius: "0.12rem",
+            },
+          },
+        },
+        invert: {
+          css: {
+            a: {
+              textDecorationColor: theme("colors.neutral.600 / 1"),
+            },
+            kbd: {
+              color: theme("colors.neutral.200 / 1"),
+              backgroundColor: theme("colors.neutral.700 / 1"),
+            },
+            mark: {
+              backgroundColor: theme("colors.secondary.400 / 1"),
+            },
+          },
+        },
+      }),
+    },
+  },
+  plugins: [require("@tailwindcss/typography")],
+};
diff --git a/web/themes/congo/theme.toml b/web/themes/congo/theme.toml
new file mode 100644
index 0000000000000000000000000000000000000000..fbf4731d1c28209e3a70683f36dad2773c610d05
--- /dev/null
+++ b/web/themes/congo/theme.toml
@@ -0,0 +1,16 @@
+# Congo theme for Hugo
+
+name = "congo"
+license = "MIT"
+licenselink = "https://github.com/jpanther/congo/blob/master/LICENSE"
+description = "A powerful, lightweight theme for Hugo built with Tailwind CSS."
+
+homepage = "https://github.com/jpanther/congo/"
+demosite = "https://jpanther.github.io/congo/"
+
+tags = ["blog", "minimal", "responsive", "dark mode", "dark", "light", "tailwind", "personal"]
+features = ["syntax higlighting", "dark mode", "emoji"]
+
+[author]
+  name = "James Panther"
+  homepage = "https://jamespanther.com/"
diff --git a/web/themes/hugo-flex/layouts.test/404.html b/web/themes/hugo-flex/layouts.test/404.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/web/themes/hugo-flex/layouts.test/_default/baseof.html b/web/themes/hugo-flex/layouts.test/_default/baseof.html
new file mode 100644
index 0000000000000000000000000000000000000000..0a5d1f7329ba493ecdcb399474f814c77b0c50fb
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/_default/baseof.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="{{ .Site.Language.Lang }}">
+    {{- partial "head.html" . -}}
+    <body>
+        {{- partial "header.html" . -}}
+        <main id="content">
+        {{- block "main" . }}{{- end }}
+        </main>
+        {{- partial "footer.html" . -}}
+    </body>
+</html>
diff --git a/web/themes/hugo-flex/layouts.test/_default/li.html b/web/themes/hugo-flex/layouts.test/_default/li.html
new file mode 100644
index 0000000000000000000000000000000000000000..f418cb93d0234d773b3611d0cd93bcd9fa76e08e
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/_default/li.html
@@ -0,0 +1,6 @@
+<li>
+    <a href="{{ .Permalink }}">
+        {{ .Title }}
+        <small><time>{{ .Date | time.Format (i18n "posts.date") }}</time></small>
+    </a>
+</li>
diff --git a/web/themes/hugo-flex/layouts.test/_default/list.html b/web/themes/hugo-flex/layouts.test/_default/list.html
new file mode 100644
index 0000000000000000000000000000000000000000..97af0e385ef9a40c6f83ec657813b41906e714b5
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/_default/list.html
@@ -0,0 +1,3 @@
+{{ define "main" }}
+{{- partial "posts.html" . -}}
+{{ end }}
diff --git a/web/themes/hugo-flex/layouts.test/_default/rss.xml b/web/themes/hugo-flex/layouts.test/_default/rss.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4acceddbccfa8caf7aa7d1d8fd51c8ccf1482e62
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/_default/rss.xml
@@ -0,0 +1,41 @@
+{{- $pctx := . -}}
+{{- if .IsHome -}}{{ $pctx = .Site }}{{- end -}}
+{{- $pages := slice -}}
+{{- if or $.IsHome $.IsSection -}}
+{{- $pages = $pctx.RegularPages -}}
+{{- else -}}
+{{- $pages = $pctx.Pages -}}
+{{- end -}}
+{{- $limit := .Site.Config.Services.RSS.Limit -}}
+{{- if ge $limit 1 -}}
+{{- $pages = $pages | first $limit -}}
+{{- end -}}
+{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>{{ if eq  .Title  .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} on {{ end }}{{ .Site.Title }}{{ end }}</title>
+    <link>{{ .Permalink }}</link>
+    <description>Recent content {{ if ne  .Title  .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
+    <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
+    <language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
+    <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
+    <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
+    <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
+    <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
+    {{ with .OutputFormats.Get "RSS" }}
+	{{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
+    {{ end }}
+    {{ range where .Site.Pages "Kind" "page" }}
+    {{ if or (eq .Section "posts") (eq .Section "post") }}
+    <item>
+      <title>{{ .Title }}</title>
+      <link>{{ .Permalink }}</link>
+      <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
+      {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
+      <guid>{{ .Permalink }}</guid>
+      <description>{{ .Content | html }}</description>
+    </item>
+    {{ end }}
+    {{ end }}
+  </channel>
+</rss>
diff --git a/web/themes/hugo-flex/layouts.test/_default/single.html b/web/themes/hugo-flex/layouts.test/_default/single.html
new file mode 100644
index 0000000000000000000000000000000000000000..281e0644bc18bbc83a56b2ee338b76f918c7d88e
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/_default/single.html
@@ -0,0 +1,17 @@
+{{ define "main" }}
+<article>
+    <header id="post-header">
+        <h1>{{ .Title }}</h1>
+        <div>
+        {{- if isset .Params "date" -}}
+            {{ if eq .Lastmod .Date }}
+                <time>{{ .Date | time.Format (i18n "post.created") }}</time>
+            {{ else }}
+                <time>{{ .Lastmod | time.Format (i18n "post.updated") }}</time>
+            {{ end }}
+        {{- end -}}
+        </div>
+    </header>
+    {{- .Content -}}
+</article>
+{{ end }}
diff --git a/web/themes/hugo-flex/layouts.test/_default/taxonomy.html b/web/themes/hugo-flex/layouts.test/_default/taxonomy.html
new file mode 100644
index 0000000000000000000000000000000000000000..86677c22bebafa5094f5a7aee4a519b525c8b156
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/_default/taxonomy.html
@@ -0,0 +1,8 @@
+{{ define "main" }}
+<h3>{{ .Title }}</h3>
+<ul id="posts">
+{{- range .Pages }}
+    {{ .Render "li" }}
+{{- end }}
+</ul>
+{{ end }}
diff --git a/web/themes/hugo-flex/layouts.test/index.html b/web/themes/hugo-flex/layouts.test/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..9983b08160deb42e133ae4ecf205442907eca1e8
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/index.html
@@ -0,0 +1,3 @@
+{{ define "main" }}
+{{ .Content }}
+{{ end }}
diff --git a/web/themes/hugo-flex/layouts.test/partials/footer.html b/web/themes/hugo-flex/layouts.test/partials/footer.html
new file mode 100644
index 0000000000000000000000000000000000000000..73420ef3dd1c2453227607dc6bec59122a3357d6
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/partials/footer.html
@@ -0,0 +1,3 @@
+<footer id="footer">
+    {{ .Site.Params.copyright }}
+</footer>
diff --git a/web/themes/hugo-flex/layouts.test/partials/head.html b/web/themes/hugo-flex/layouts.test/partials/head.html
new file mode 100644
index 0000000000000000000000000000000000000000..bb7ef8bdcc7780ae599013d435aa4e893f24311d
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/partials/head.html
@@ -0,0 +1,32 @@
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    {{ with .Site.Params.description -}}
+    <meta name="description" content="{{ . }}">
+    {{ end }}
+    {{ printf `<link rel="shortcut icon" href="%s">` ("favicon.ico" | absURL) | safeHTML }}
+    {{ with .OutputFormats.Get "rss" -}}
+        {{ printf `<link rel="%s" type="%s" href="%s" title="%s">` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
+    {{ end -}}
+
+    {{ $resources := slice -}}
+
+    {{ $resources = $resources | append (resources.Get "css/main.css") -}}
+
+    {{ $resources = $resources | append (resources.Get "css/min770px.css") -}}
+
+    {{ $dark := .Site.Params.dark | default "auto" -}}
+    {{ if not (eq $dark "off") -}}
+        {{ $resources = $resources | append (resources.Get "css/dark.css" | resources.ExecuteAsTemplate "dark.css" .) -}}
+    {{ end -}}
+
+    {{ if .Site.Params.highlight -}}
+        {{ $resources = $resources | append (resources.Get "css/syntax.css") -}}
+    {{ end -}}
+
+    {{ $css := $resources | resources.Concat "css/style.css" | minify }}
+    {{ printf `<link rel="stylesheet" href="%s">` $css.RelPermalink | safeHTML }}
+
+    <link rel="canonical" href="{{ .Permalink }}" />
+    <title>{{ .Title }}</title>
+</head>
diff --git a/web/themes/hugo-flex/layouts.test/partials/header.html b/web/themes/hugo-flex/layouts.test/partials/header.html
new file mode 100644
index 0000000000000000000000000000000000000000..9a6644970d96946ea006770b829942281cdde942
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/partials/header.html
@@ -0,0 +1,12 @@
+<header id="banner">
+    <h2><a href="{{ .Site.BaseURL }}">{{ .Site.Title }}</a></h2>
+    <nav>
+        <ul>
+            {{ range .Site.Menus.main.ByWeight -}}
+            <li>
+                {{ .Pre }}<a href="{{ .URL }}" title="{{ .Title }}">{{- .Name -}}</a>{{ .Post }}
+            </li>
+            {{- end }}
+        </ul>
+    </nav>
+</header>
diff --git a/web/themes/hugo-flex/layouts.test/partials/posts.html b/web/themes/hugo-flex/layouts.test/partials/posts.html
new file mode 100644
index 0000000000000000000000000000000000000000..a741908be82679f1e95b89fcdd3b343f73b4cd9c
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/partials/posts.html
@@ -0,0 +1,6 @@
+<h3>{{ i18n "posts.title" }}</h3>
+<ul id="posts">
+{{- range where site.RegularPages "Type" "in" site.Params.mainSections }}
+    {{ .Render "li" }}
+{{- end }}
+</ul>
diff --git a/web/themes/hugo-flex/layouts.test/shortcodes/toc.html b/web/themes/hugo-flex/layouts.test/shortcodes/toc.html
new file mode 100644
index 0000000000000000000000000000000000000000..22da6e7b469787f786aa851804648c07872a34b3
--- /dev/null
+++ b/web/themes/hugo-flex/layouts.test/shortcodes/toc.html
@@ -0,0 +1,4 @@
+<aside id="toc">
+    <h4>Table of Contents</h4>
+    {{ .Page.TableOfContents }}
+</aside>
diff --git a/web/themes/paige/.github/workflows/pages.yml b/web/themes/paige/.github/workflows/pages.yml
new file mode 100644
index 0000000000000000000000000000000000000000..bd73265fe964df63a6477b2d5d82333559bcdbdf
--- /dev/null
+++ b/web/themes/paige/.github/workflows/pages.yml
@@ -0,0 +1,69 @@
+# Sample workflow for building and deploying a Hugo site to GitHub Pages
+name: Deploy Hugo site to Pages
+
+on:
+  # Runs on pushes targeting the default branch
+  push:
+    branches: ["master"]
+
+  # Allows you to run this workflow manually from the Actions tab
+  workflow_dispatch:
+
+# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
+permissions:
+  contents: read
+  pages: write
+  id-token: write
+
+# Allow one concurrent deployment
+concurrency:
+  group: "pages"
+  cancel-in-progress: true
+
+# Default to bash
+defaults:
+  run:
+    shell: bash
+
+jobs:
+  # Build job
+  build:
+    runs-on: ubuntu-latest
+    env:
+      HUGO_VERSION: 0.102.3
+    steps:
+      - name: Install Hugo CLI
+        run: |
+          wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.deb \
+          && sudo dpkg -i ${{ runner.temp }}/hugo.deb
+      - name: Checkout
+        uses: actions/checkout@v3
+        with:
+          submodules: recursive
+      - name: Setup Pages
+        id: pages
+        uses: actions/configure-pages@v2
+      - name: Build with Hugo
+        env:
+          # For maximum backward compatibility with Hugo modules
+          HUGO_ENVIRONMENT: production
+          HUGO_ENV: production
+        run: |
+          cd exampleSite
+          hugo --minify --baseURL ${{ steps.pages.outputs.base_url }} --themesDir ../..
+      - name: Upload artifact
+        uses: actions/upload-pages-artifact@v1
+        with:
+          path: ./exampleSite/public
+
+  # Deployment job
+  deploy:
+    environment:
+      name: github-pages
+      url: ${{ steps.pages.outputs.base_url }}
+    runs-on: ubuntu-latest
+    needs: build
+    steps:
+      - name: Deploy to GitHub Pages
+        id: deployment
+        uses: actions/deploy-pages@v1
diff --git a/web/themes/paige/LICENSE b/web/themes/paige/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..4c6930728fc54147b9051dbd4b304c2d1614ceba
--- /dev/null
+++ b/web/themes/paige/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2022 Will Faught
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/web/themes/paige/README.md b/web/themes/paige/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..117c31abbc6240463fad8f80180b279a7a18387b
--- /dev/null
+++ b/web/themes/paige/README.md
@@ -0,0 +1,82 @@
+# paige
+
+A simple Hugo theme. [Try it out.](https://willfaught.com/paige)
+
+<img src="https://github.com/willfaught/paige/raw/master/images/screenshot.png" style="width: 100%">
+
+## Features
+
+- Blog
+- Facebook sharing support
+- Google Analytics support
+- Landing page
+- Light color scheme
+- Menu navigation
+- Minimal design
+- Responsive, mobile-first layout
+- Sections for other kinds of content
+- Single column presentation
+- Social links
+- Twitter sharing support
+
+## Design
+
+HTML metadata is set automatically. The HTML author is the site author.
+The HTML description is the page description. The HTML keywords is a
+union of the page keywords, tags, and categories. Enhanced Facebook and
+Twitter sharing is enabled. Google Analytics is included at the bottom
+of the body, if configured. You must create favicons yourself.
+
+The HTML title is the page title, followed by a middle dot, followed by
+the site title. If one is missing, the other is used without the middle
+dot. If both are the same, only one is used without the middle dot.
+
+The HTML body can have a header, a body, and a footer. The header has
+the section menus, if any; the page title, if any; the page description,
+if any; and the page date, if any. The body has the page content, if
+any. The footer has the site copyright notice, if any.
+
+The section menus are activated if their path matches the current page.
+Pages in the directory `content/` match the section path `/`. Pages in
+the directory `content/foo/` match the section path `/foo/`. The section
+menu identifiers, names, weights, paths, and order are configured in
+`config.yaml`.
+
+The page date is the publish date, if any; otherwise, it's the creation
+date.
+
+Everything is stacked vertically in one column and aligned to the
+center.
+
+The home page shows the `blurb`, `description`, `greeting`, and `title`
+parameters from `content/_index.md`, the `avatar.jpg` and `cover.jpg`
+images at the site root, and linked icons for all the social sites
+configured in `config.yaml`.
+
+Single pages use the `link` front matter parameter, if any, as the
+reference for an anchor around the page title, if any.
+
+List and term pages show page titles and descriptions per month and year
+in descending order. An empty list has a "Nothing Here" header, and no
+body.
+
+Taxonomy pages list term links in an inline, unordered, sorted list.
+
+The 404 page has a "Not Found" header, and no body.
+
+If `partials/head.html` exists in the site, it is included at the end of
+the head tag. If `partials/body.html` exists in the site, it is included
+at the end of the body tag.
+
+Stock Bootstrap 5.2.2 CSS and JavaScript, and Bootstrap Icons 1.10.2,
+are used for style, functionality, and icons. They're loaded from the
+Bootstrap CDN for every page.
+
+## Configuration
+
+See the example site directory for an example configuration.
+
+## Credits
+
+- Avatar photo by [Yuvraj Singh](https://unsplash.com/photos/ljziSm0DXg8)
+- Cover photo by [Kamran Sabir](https://www.pexels.com/photo/green-lake-surrounded-by-mountain-127753/)
diff --git a/web/themes/paige/archetypes/default.md b/web/themes/paige/archetypes/default.md
new file mode 100644
index 0000000000000000000000000000000000000000..a4d718f89e305b6e9bf96d4c817bb7bad8890df3
--- /dev/null
+++ b/web/themes/paige/archetypes/default.md
@@ -0,0 +1,10 @@
+---
+categories: []
+date: {{ .Date }}
+description: ""
+draft: true
+keywords: []
+link: ""
+tags: []
+title: "{{ replace .Name "-" " " | title }}"
+---
diff --git a/web/themes/paige/config.toml b/web/themes/paige/config.toml
new file mode 100644
index 0000000000000000000000000000000000000000..a4adb24046ee8acef8b3cb32064e35706a9e278a
--- /dev/null
+++ b/web/themes/paige/config.toml
@@ -0,0 +1,4 @@
+[module]
+  [module.hugoVersion]
+    extended = true
+    min = "0.101.0"
diff --git a/web/themes/paige/exampleSite/config.yaml b/web/themes/paige/exampleSite/config.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..29f6191074661e97eefd409af69c09ed9e30ee4d
--- /dev/null
+++ b/web/themes/paige/exampleSite/config.yaml
@@ -0,0 +1,61 @@
+author:
+  email: example@example.com
+  name: Michael Bluth
+baseurl: https://example.com
+copyright: © Michael Bluth
+languagecode: en-us
+enablerobotstxt: true
+markup:
+  goldmark:
+    renderer:
+      unsafe: true
+  highlight:
+    style: vs
+menu:
+  main:
+  - identifier: home
+    name: Home
+    weight: 10
+    url: /
+  - identifier: about
+    name: About
+    weight: 20
+    url: /about/
+  - identifier: blog
+    name: Blog
+    weight: 30
+    url: /blog/
+  - identifier: articles
+    name: Articles
+    weight: 40
+    url: /articles/
+  - identifier: projects
+    name: Projects
+    weight: 50
+    url: /projects/
+  - identifier: categories
+    name: Categories
+    weight: 60
+    url: /categories/
+  - identifier: tags
+    name: Tags
+    weight: 70
+    url: /tags/
+paginate: 50
+permalinks:
+  blog: /blog/:year/:month/:day/:title/
+social:
+  envelope: mailto:example@example.com
+  discord: https://discord.com/users/example
+  github: https://github.com/example
+  facebook: https://facebook.com/example
+  instagram: https://instagram.com/example
+  linkedin: https://www.linkedin.com/in/example
+  reddit: https://reddit.com/u/example
+  twitch: https://www.twitch.tv/example
+  twitter: https://twitter.com/example
+  youtube: https://www.youtube.com/user/example
+theme: paige
+timezone: America/Los_Angeles
+title: No Borders, No Limits
+titlecasestyle: Go
diff --git a/web/themes/paige/exampleSite/content/LICENSE b/web/themes/paige/exampleSite/content/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..4527efb9c067932d21b145e55cc7a38d58b24c13
--- /dev/null
+++ b/web/themes/paige/exampleSite/content/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Steve Francia
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/web/themes/paige/exampleSite/content/_index.md b/web/themes/paige/exampleSite/content/_index.md
new file mode 100644
index 0000000000000000000000000000000000000000..6783288fa99a3ab9fe223a2bebb01664e006b073
--- /dev/null
+++ b/web/themes/paige/exampleSite/content/_index.md
@@ -0,0 +1,6 @@
+---
+blurb: <p class="lead">There's a new daddy in town. A discipline daddy. If I make this comeback, I'll buy you a hundred George Michaels that you can teach to drive! These are my awards, Mother. From Army. The seal is for marksmanship, and the gorilla is for sand racing. We'll have to find something to do so that people can look at you without wanting to kill <a href="https://bluthipsum.com">themselves</a>.</p><p class="lead"><a href="https://github.com/willfaught/paige">A simple Hugo theme.</a></p>
+description: Go ahead, touch the Cornballer
+greeting: You know [best](https://www.youtube.com/watch?v=1WDW8XKEGgU)
+title: No Borders, No Limits
+---
diff --git a/web/themes/paige/exampleSite/content/about.md b/web/themes/paige/exampleSite/content/about.md
new file mode 100644
index 0000000000000000000000000000000000000000..b31bf1da953485da446a4d372f0c07bae585e95b
--- /dev/null
+++ b/web/themes/paige/exampleSite/content/about.md
@@ -0,0 +1,25 @@
++++
+title = "About"
+description = "Hugo, the world's fastest framework for building websites"
+date = "2019-02-28"
+aliases = ["about-us", "about-hugo", "contact"]
+author = "Hugo Authors"
++++
+
+Written in Go, Hugo is an open source static site generator available under the [Apache Licence 2.0.](https://github.com/gohugoio/hugo/blob/master/LICENSE) Hugo supports TOML, YAML and JSON data file types, Markdown and HTML content files and uses shortcodes to add rich content. Other notable features are taxonomies, multilingual mode, image processing, custom output formats, HTML/CSS/JS minification and support for Sass SCSS workflows.
+
+Hugo makes use of a variety of open source projects including:
+
+* https://github.com/yuin/goldmark
+* https://github.com/alecthomas/chroma
+* https://github.com/muesli/smartcrop
+* https://github.com/spf13/cobra
+* https://github.com/spf13/viper
+
+Hugo is ideal for blogs, corporate websites, creative portfolios, online magazines, single page applications or even a website with thousands of pages.
+
+Hugo is for people who want to hand code their own website without worrying about setting up complicated runtimes, dependencies and databases.
+
+Websites built with Hugo are extremely fast, secure and can be deployed anywhere including, AWS, GitHub Pages, Heroku, Netlify and any other hosting provider.
+
+Learn more and contribute on [GitHub](https://github.com/gohugoio).
diff --git a/web/themes/paige/exampleSite/content/articles/_index.md b/web/themes/paige/exampleSite/content/articles/_index.md
new file mode 100644
index 0000000000000000000000000000000000000000..d0cf847455262ad740775e08d6235a5e4cdb535f
--- /dev/null
+++ b/web/themes/paige/exampleSite/content/articles/_index.md
@@ -0,0 +1,3 @@
+---
+title: Articles
+---
diff --git a/web/themes/paige/exampleSite/content/articles/bluth-ipsum.md b/web/themes/paige/exampleSite/content/articles/bluth-ipsum.md
new file mode 100644
index 0000000000000000000000000000000000000000..5528e1cb69136fa1cd7260d302d77bda48ab88b0
--- /dev/null
+++ b/web/themes/paige/exampleSite/content/articles/bluth-ipsum.md
@@ -0,0 +1,31 @@
+---
+categories:
+- bluth
+- ipsum
+date: 2022-09-07T12:45:03-07:00
+description: Helpful dummy text from Arrested Development
+tags:
+- bluth
+- ipsum
+title: Bluth Ipsum
+---
+
+Yes, she happens to be more experienced than a normal girl, but sometimes love should be... terrifying. Talk you off what, Pop Pop? Monday morning. COME ON! If I make this comeback, I'll buy you a hundred George Michaels that you can teach to drive! Those are balls. Ohhh little guy. The tears aren't coming. The tears just aren't coming. These are my awards, Mother. From Army. The seal is for marksmanship, and the gorilla is for sand racing. 
+
+Let me take off my assistant's skirt and put on my Barbra-Streisand-in-The-Prince-of-Tides ass-masking therapist pantsuit. Although George Michael had only got to second base, he'd gone in head first, like Pete Rose. Let me give that oatmeal some brown sugar. No! These are just strippers! Look how hot they are! Stop licking my hand, you horse's ass! This is the best free scrapbooking class I've ever taken! 
+
+Bob Loblaw Lobs Law Bomb. But I'm the oldest. The matriarch if you will. See for more good stuff. I don't criticize you! And if you're worried about criticism, sometimes a diet is the best defense. Can't a guy call his mother pretty without it seeming strange? Amen. And how about that little piece of tail on her? Cute! You stay on top of her, Buddy. Don't be afraid to ride her. Hard. Did you know that more frozen bananas are sold right here on this boardwalk than anywhere in the OC? I hear the jury's still out on science. 
+
+I don't want no part of yo' tight-ass country club, ya freak bitch! I just dont want him to point out my cracker ass in front of Ann. Buster's in what we like to call a light to no coma. In layman's terms, it might be considered a very heavy nap. When a.. man.. needs to prove to a woman that he's actually.. \[pause\].. When a man loves a woman.. One of the guys told me to take my head out of my BOTTOM and get back to work...my BOTTOM! Hahahaha. Either I zip down, or he zips up, and that is a mighty long zipper on Mother's Cher jumpsuit. It's a wonderful restaurant! 
+
+There's a new daddy in town. A discipline daddy. I never thought I'd miss a hand so much! 
+
+She's a girl, I need to teach her how to be a woman. Within her lies a queen. Let me out that queen. Fun and failure both start out the same way. I hear the jury's still out on science. 
+
+No borders, no limits... go ahead, touch the Cornballer... you know best? Did you know that more frozen bananas are sold right here on this boardwalk than anywhere on the OC? I'll buy you a hundred George Michaels that you can teach to drive! You can always tell a Milford man. It walked on my pillow! 
+
+I see you've wasted no time in filling my seat hole. It's as Ann as the nose on plain's face. I was once called the worst audience participant Cirque du Soleil ever had. Gosh Mom... after all these years, God's not going to take a call from you. We need a name. Maybe 'Operation Hot Mother'. What, so the guy we are meeting with can't even grow his own hair? COME ON! Tobias Fünke costume. I've always been deeply passionate about nature. Perhaps you remember Neuterfest? *M:* I'll never forget your wedding. 
+
+We'll have to find something to do so that people can look at you without wanting to kill themselves. A lady of the evening. Working girl. She turns illusions for money. When a.. man.. needs to prove to a woman that he's actually.. \[pause\].. When a man loves a woman.. Quicken! Premiere! I'm afraid I'm with Michael on this one. The guy runs a prison, he can have any piece of ass he wants. We'll have to find something to do so that people can look at you without wanting to kill themselves. I'm gonna build me an airport, put my name on it. Why, Michael? So you can fly away from your feelings? 
+
+I \[bleeped\] the business model. Yeah, she had all kinds of orgasms. So did you see the new Poof? His name's Gary, and we don't need anymore lawsuits. Yeah, like anyone would want to R her. Yo quiero leche. Yo quiero leche de madre. Buster's in what we like to call a light to no coma. In layman's terms, it might be considered a very heavy nap.
diff --git a/web/themes/paige/exampleSite/content/blog/_index.md b/web/themes/paige/exampleSite/content/blog/_index.md
new file mode 100644
index 0000000000000000000000000000000000000000..8a084d901075c012f34b484ffdc0352f8c1f2b40
--- /dev/null
+++ b/web/themes/paige/exampleSite/content/blog/_index.md
@@ -0,0 +1,6 @@
++++
+aliases = ["posts", "articles", "blog", "showcase", "docs"]
+title = "Posts"
+author = "Hugo Authors"
+tags = ["index"]
++++
diff --git a/web/themes/paige/exampleSite/content/blog/emoji-support.md b/web/themes/paige/exampleSite/content/blog/emoji-support.md
new file mode 100644
index 0000000000000000000000000000000000000000..f17f49a2b2ebf3a204e4a1dff6e4690a4af798c7
--- /dev/null
+++ b/web/themes/paige/exampleSite/content/blog/emoji-support.md
@@ -0,0 +1,46 @@
++++
+author = "Hugo Authors"
+title = "Emoji Support"
+date = "2019-03-05"
+description = "Guide to emoji usage in Hugo"
+tags = [
+    "emoji",
+]
++++
+
+Emoji can be enabled in a Hugo project in a number of ways.
+<!--more-->
+The [`emojify`](https://gohugo.io/functions/emojify/) function can be called directly in templates or [Inline Shortcodes](https://gohugo.io/templates/shortcode-templates/#inline-shortcodes).
+
+To enable emoji globally, set `enableEmoji` to `true` in your site's [configuration](https://gohugo.io/getting-started/configuration/) and then you can type emoji shorthand codes directly in content files; e.g.
+
+<p><span class="nowrap"><span class="emojify">🙈</span> <code>:see_no_evil:</code></span>  <span class="nowrap"><span class="emojify">🙉</span> <code>:hear_no_evil:</code></span>  <span class="nowrap"><span class="emojify">🙊</span> <code>:speak_no_evil:</code></span></p>
+<br>
+
+The [Emoji cheat sheet](http://www.emoji-cheat-sheet.com/) is a useful reference for emoji shorthand codes.
+
+***
+
+**N.B.** The above steps enable Unicode Standard emoji characters and sequences in Hugo, however the rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack; e.g.
+
+{{< highlight html >}}
+.emoji {
+  font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
+}
+{{< /highlight >}}
+
+{{< css.inline >}}
+<style>
+.emojify {
+	font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
+	font-size: 2rem;
+	vertical-align: middle;
+}
+@media screen and (max-width:650px) {
+  .nowrap {
+    display: block;
+    margin: 25px 0;
+  }
+}
+</style>
+{{< /css.inline >}}
diff --git a/web/themes/paige/exampleSite/content/blog/markdown-syntax.md b/web/themes/paige/exampleSite/content/blog/markdown-syntax.md
new file mode 100644
index 0000000000000000000000000000000000000000..ad74a692e5c8d834cbd2a252739ac0bc6e04c641
--- /dev/null
+++ b/web/themes/paige/exampleSite/content/blog/markdown-syntax.md
@@ -0,0 +1,147 @@
++++
+author = "Hugo Authors"
+title = "Markdown Syntax Guide"
+date = "2019-03-11"
+description = "Sample article showcasing basic Markdown syntax and formatting for HTML elements."
+tags = [
+    "markdown",
+    "css",
+    "html",
+]
+categories = [
+    "themes",
+    "syntax",
+]
+aliases = ["migrate-from-jekyl"]
++++
+
+This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme.
+<!--more-->
+
+## Headings
+
+The following HTML `<h1>`—`<h6>` elements represent six levels of section headings. `<h1>` is the highest section level while `<h6>` is the lowest.
+
+# H1
+## H2
+### H3
+#### H4
+##### H5
+###### H6
+
+## Paragraph
+
+Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.
+
+Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.
+
+## Blockquotes
+
+The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a `footer` or `cite` element, and optionally with in-line changes such as annotations and abbreviations.
+
+#### Blockquote without attribution
+
+> Tiam, ad mint andaepu dandae nostion secatur sequo quae.
+> **Note** that you can use *Markdown syntax* within a blockquote.
+
+#### Blockquote with attribution
+
+> Don't communicate by sharing memory, share memory by communicating.<br>
+> — <cite>Rob Pike[^1]</cite>
+
+[^1]: The above quote is excerpted from Rob Pike's [talk](https://www.youtube.com/watch?v=PAAkCSZUG1c) during Gopherfest, November 18, 2015.
+
+## Tables
+
+Tables aren't part of the core Markdown spec, but Hugo supports supports them out-of-the-box.
+
+   Name | Age
+--------|------
+    Bob | 27
+  Alice | 23
+
+#### Inline Markdown within tables
+
+| Italics   | Bold     | Code   |
+| --------  | -------- | ------ |
+| *italics* | **bold** | `code` |
+
+## Code Blocks
+
+#### Code block with backticks
+
+```html
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title>Example HTML5 Document</title>
+</head>
+<body>
+  <p>Test</p>
+</body>
+</html>
+```
+
+#### Code block indented with four spaces
+
+    <!doctype html>
+    <html lang="en">
+    <head>
+      <meta charset="utf-8">
+      <title>Example HTML5 Document</title>
+    </head>
+    <body>
+      <p>Test</p>
+    </body>
+    </html>
+
+#### Code block with Hugo's internal highlight shortcode
+{{< highlight html >}}
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title>Example HTML5 Document</title>
+</head>
+<body>
+  <p>Test</p>
+</body>
+</html>
+{{< /highlight >}}
+
+## List Types
+
+#### Ordered List
+
+1. First item
+2. Second item
+3. Third item
+
+#### Unordered List
+
+* List item
+* Another item
+* And another item
+
+#### Nested list
+
+* Fruit
+  * Apple
+  * Orange
+  * Banana
+* Dairy
+  * Milk
+  * Cheese
+
+## Other Elements — abbr, sub, sup, kbd, mark
+
+<abbr title="Graphics Interchange Format">GIF</abbr> is a bitmap image format.
+
+H<sub>2</sub>O
+
+X<sup>n</sup> + Y<sup>n</sup> = Z<sup>n</sup>
+
+Press <kbd><kbd>CTRL</kbd>+<kbd>ALT</kbd>+<kbd>Delete</kbd></kbd> to end the session.
+
+Most <mark>salamanders</mark> are nocturnal, and hunt for insects, worms, and other small creatures.
diff --git a/web/themes/paige/exampleSite/content/blog/math-typesetting.md b/web/themes/paige/exampleSite/content/blog/math-typesetting.md
new file mode 100644
index 0000000000000000000000000000000000000000..62831a9c122e1126dd8709cbd30cbaeca3c089af
--- /dev/null
+++ b/web/themes/paige/exampleSite/content/blog/math-typesetting.md
@@ -0,0 +1,49 @@
+---
+author: Hugo Authors
+title: Math Typesetting
+date: 2019-03-08
+description: A brief guide to setup KaTeX
+math: true
+---
+
+Mathematical notation in a Hugo project can be enabled by using third party JavaScript libraries.
+<!--more-->
+
+In this example we will be using [KaTeX](https://katex.org/)
+
+- Create a partial under `/layouts/partials/math.html`
+- Within this partial reference the [Auto-render Extension](https://katex.org/docs/autorender.html) or host these scripts locally.
+- Include the partial in your templates like so:
+
+```bash
+{{ if or .Params.math .Site.Params.math }}
+{{ partial "math.html" . }}
+{{ end }}
+```
+
+- To enable KaTex globally set the parameter `math` to `true` in a project's configuration
+- To enable KaTex on a per page basis include the parameter `math: true` in content files
+
+**Note:** Use the online reference of [Supported TeX Functions](https://katex.org/docs/supported.html)
+
+{{< math.inline >}}
+{{ if or .Page.Params.math .Site.Params.math }}
+<!-- KaTeX -->
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css" integrity="sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq" crossorigin="anonymous">
+<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js" integrity="sha384-y23I5Q6l+B6vatafAwxRu/0oK/79VlbSz7Q9aiSZUvyWYIYsd+qj+o24G5ZU2zJz" crossorigin="anonymous"></script>
+<script defer src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js" integrity="sha384-kWPLUVMOks5AQFrykwIup5lo0m3iMkkHrD0uJ4H5cjeGihAutqP0yW0J6dpFiVkI" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>
+{{ end }}
+{{</ math.inline >}}
+
+### Examples
+
+{{< math.inline >}}
+<p>
+Inline math: \(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\)
+</p>
+{{</ math.inline >}}
+
+Block math:
+$$
+ \varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } }
+$$
diff --git a/web/themes/paige/exampleSite/content/blog/placeholder-text.md b/web/themes/paige/exampleSite/content/blog/placeholder-text.md
new file mode 100644
index 0000000000000000000000000000000000000000..9ed5f69a52331b1ac102807eea15062d715cf6d0
--- /dev/null
+++ b/web/themes/paige/exampleSite/content/blog/placeholder-text.md
@@ -0,0 +1,45 @@
++++
+author = "Hugo Authors"
+title = "Placeholder Text"
+date = "2019-03-09"
+description = "Lorem Ipsum Dolor Si Amet"
+tags = [
+    "markdown",
+    "text",
+]
++++
+
+Lorem est tota propiore conpellat pectoribus de pectora summo. <!--more-->Redit teque digerit hominumque toris verebor lumina non cervice subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.
+
+1. Exierant elisi ambit vivere dedere
+2. Duce pollice
+3. Eris modo
+4. Spargitque ferrea quos palude
+
+Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria tractus malis.
+
+1. Comas hunc haec pietate fetum procerum dixit
+2. Post torum vates letum Tiresia
+3. Flumen querellas
+4. Arcanaque montibus omnes
+5. Quidem et
+
+# Vagus elidunt
+
+<svg class="canon" xmlns="http://www.w3.org/2000/svg" overflow="visible" viewBox="0 0 496 373" height="373" width="496"><g fill="none"><path stroke="#000" stroke-width=".75" d="M.599 372.348L495.263 1.206M.312.633l494.95 370.853M.312 372.633L247.643.92M248.502.92l246.76 370.566M330.828 123.869V1.134M330.396 1.134L165.104 124.515"></path><path stroke="#ED1C24" stroke-width=".75" d="M275.73 41.616h166.224v249.05H275.73zM54.478 41.616h166.225v249.052H54.478z"></path><path stroke="#000" stroke-width=".75" d="M.479.375h495v372h-495zM247.979.875v372"></path><ellipse cx="498.729" cy="177.625" rx=".75" ry="1.25"></ellipse><ellipse cx="247.229" cy="377.375" rx=".75" ry="1.25"></ellipse></g></svg>
+
+[The Van de Graaf Canon](https://en.wikipedia.org/wiki/Canons_of_page_construction#Van_de_Graaf_canon)
+
+## Mane refeci capiebant unda mulcebat
+
+Victa caducifer, malo vulnere contra dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. **Faces illo pepulere** tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.
+
+Iubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae vulnus haerentia iuste et exercebat, sui et.
+
+Eurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel **mitis temploque** vocatus, inque alis, *oculos nomen* non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem Propoetides **parte**.
+
+{{< css.inline >}}
+<style>
+.canon { background: white; width: 100%; height: auto; }
+</style>
+{{< /css.inline >}}
diff --git a/web/themes/paige/exampleSite/content/blog/rich-content.md b/web/themes/paige/exampleSite/content/blog/rich-content.md
new file mode 100644
index 0000000000000000000000000000000000000000..92b4b03f36956213a87028bcf5b59ec51e6b0f9d
--- /dev/null
+++ b/web/themes/paige/exampleSite/content/blog/rich-content.md
@@ -0,0 +1,34 @@
++++
+author = "Hugo Authors"
+title = "Rich Content"
+date = "2019-03-10"
+description = "A brief description of Hugo Shortcodes"
+tags = [
+    "shortcodes",
+    "privacy",
+]
++++
+
+Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugos-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.
+<!--more-->
+---
+
+## YouTube Privacy Enhanced Shortcode
+
+{{< youtube ZJthWmvUzzc >}}
+
+<br>
+
+---
+
+## Twitter Simple Shortcode
+
+{{< twitter_simple 1085870671291310081 >}}
+
+<br>
+
+---
+
+## Vimeo Simple Shortcode
+
+{{< vimeo_simple 48912912 >}}
diff --git a/web/themes/paige/exampleSite/content/projects/_index.md b/web/themes/paige/exampleSite/content/projects/_index.md
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/web/themes/paige/exampleSite/static/avatar.jpg b/web/themes/paige/exampleSite/static/avatar.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..dad7e2cc13ca52eaf0a4dd76ad7b96ac93434821
Binary files /dev/null and b/web/themes/paige/exampleSite/static/avatar.jpg differ
diff --git a/web/themes/paige/exampleSite/static/cover.jpg b/web/themes/paige/exampleSite/static/cover.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fc303c42e427fa9460e73c2004b52fc25094631f
Binary files /dev/null and b/web/themes/paige/exampleSite/static/cover.jpg differ
diff --git a/web/themes/paige/go.mod b/web/themes/paige/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..32ca2ec5c2d3a4edfe1c618bc5a2bc9c24110146
--- /dev/null
+++ b/web/themes/paige/go.mod
@@ -0,0 +1,3 @@
+module github.com/willfaught/paige
+
+go 1.19
diff --git a/web/themes/paige/images/screenshot.png b/web/themes/paige/images/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ee1ca21f166e88b0777c48690a82082c3704e03
Binary files /dev/null and b/web/themes/paige/images/screenshot.png differ
diff --git a/web/themes/paige/images/tn.png b/web/themes/paige/images/tn.png
new file mode 100644
index 0000000000000000000000000000000000000000..e193be67555136027556d2d08c946dc379b02d8f
Binary files /dev/null and b/web/themes/paige/images/tn.png differ
diff --git a/web/themes/paige/layouts/404.html b/web/themes/paige/layouts/404.html
new file mode 100644
index 0000000000000000000000000000000000000000..fc50110aeb01c88ad540f0f227900779efd374a4
--- /dev/null
+++ b/web/themes/paige/layouts/404.html
@@ -0,0 +1,3 @@
+{{ define "main" -}}
+<h1 class="display-5 fw-bold text-center">Not Found</h1>
+{{- end }}
diff --git a/web/themes/paige/layouts/_default/baseof.html b/web/themes/paige/layouts/_default/baseof.html
new file mode 100644
index 0000000000000000000000000000000000000000..5cbfd48cfbbe5a08c44f8bc83b45e899aeda7db1
--- /dev/null
+++ b/web/themes/paige/layouts/_default/baseof.html
@@ -0,0 +1,91 @@
+<!doctype html>
+<html lang="{{ .Site.LanguageCode }}">
+    <head>
+        <meta charset="utf-8">
+        {{ if .Site.Author.name }}
+        <meta content="{{ .Site.Author.name }}" name="author">
+        {{ end }}
+        {{ if .Description }}
+        <meta content="{{ .Description }}" name="description">
+        {{ end }}
+        {{ if or .Keywords .Params.tags .Params.categories }}
+        <meta content="{{ delimit (sort (union (union .Keywords .Params.tags) .Params.categories)) `, ` }}" name="keywords">
+        {{ end }}
+        <meta content="width=device-width, initial-scale=1" name="viewport">
+        {{ template "_internal/opengraph.html" . }}
+        {{ template "_internal/twitter_cards.html" . }}
+        {{ if and (and .Title .Site.Title) (or (not (eq .Title .Site.Title)) (not .IsHome)) }}
+        <title>{{ .Title | markdownify | plainify | htmlUnescape }} &middot; {{ .Site.Title | markdownify | plainify | htmlUnescape }}</title>
+        {{ else if .Title }}
+        <title>{{ .Title | markdownify | plainify | htmlUnescape }}</title>
+        {{ else if .Site.Title }}
+        <title>{{ .Site.Title | markdownify | plainify | htmlUnescape }}</title>
+        {{ end }}
+        <link crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" rel="stylesheet">
+        <link crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.2/font/bootstrap-icons.css" rel="stylesheet">
+        {{ if or .Params.math .Site.Params.math }}
+        <link crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/katex@0.16.3/dist/katex.min.css" integrity="sha384-Juol1FqnotbkyZUT5Z7gUPjQ9gzlwCENvUZTpQBAPxtusdwFLRy382PSDx5UUJ4/" rel="stylesheet">
+        {{ end }}
+        {{ range .AlternativeOutputFormats }}
+        <link href="{{ .Permalink }}" rel="{{ .Rel }}" title="{{ $.Site.Title }}" type="{{ .MediaType.Type }}">
+        {{ end }}
+        {{ if templates.Exists "partials/head.html" }}
+        {{ partial "head" . }}
+        {{ end }}
+        <style>
+            #content div {
+                margin-bottom: 1rem;
+            }
+        </style>
+    </head>
+    <body class="d-flex flex-column">
+        <div class="container flex-fill">
+            {{ if .Site.Menus.main }}
+            <header>
+                <div class="row">
+                    <div class="col">
+                        <nav class="d-flex justify-content-center my-3">
+                            <ul class="justify-content-center nav nav-pills">
+                                {{ $p := . }}
+                                {{ $basePath := path.Clean (urls.Parse .Site.BaseURL).Path }}
+                                {{ if eq $basePath "/" }}
+                                {{ $basePath = "" }}
+                                {{ end }}
+                                {{ range .Site.Menus.main }}
+                                {{ $pagePath := strings.TrimPrefix $basePath $p.RelPermalink }}
+                                {{ $menuPath := strings.TrimPrefix $basePath .URL }}
+                                {{ $active := or (and (eq $menuPath `/`) (eq $pagePath `/`)) (and (ne $menuPath `/`) (hasPrefix $pagePath $menuPath)) }}
+                                <li class="nav-item"><a href="{{ .URL }}" class="nav-link{{if $active }} active{{ end }}">{{ .Name }}</a></li>
+                                {{ end }}
+                            </ul>
+                        </nav>
+                    </div>
+                </div>
+            </header>
+            {{ end }}
+            <main>
+                {{ block "main" . }}{{ end }}
+            </main>
+            {{ if .Site.Copyright }}
+            <footer>
+                <div class="justify-content-center row">
+                    <div class="col col-auto">
+                        <p class="text-muted">{{ .Site.Copyright | markdownify }}</p>
+                    </div>
+                </div>
+            </footer>
+            {{ end }}
+        </div>
+        <script crossorigin="anonymous" src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"></script>
+        {{ if or .Params.math .Site.Params.math }}
+        <script crossorigin="anonymous" defer integrity="sha384-97gW6UIJxnlKemYavrqDHSX3SiygeOwIZhwyOKRfSaf0JWKRVj9hLASHgFTzT+0O" src="https://cdn.jsdelivr.net/npm/katex@0.16.3/dist/katex.min.js"></script>
+        <script crossorigin="anonymous" defer integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" onload="renderMathInElement(document.body);" src="https://cdn.jsdelivr.net/npm/katex@0.16.3/dist/contrib/auto-render.min.js"></script>
+        {{ end }}
+        {{ if .Site.GoogleAnalytics }}
+        {{ template "_internal/google_analytics.html" . }}
+        {{ end }}
+        {{ if templates.Exists "partials/body.html" }}
+        {{ partial "body" . }}
+        {{ end }}
+    </body>
+</html>
diff --git a/web/themes/paige/layouts/_default/home.html b/web/themes/paige/layouts/_default/home.html
new file mode 100644
index 0000000000000000000000000000000000000000..2cc38e5c4ecb9d0ab3caba287da9a49b5bdb8d3d
--- /dev/null
+++ b/web/themes/paige/layouts/_default/home.html
@@ -0,0 +1,41 @@
+{{ define "main" }}
+{{ if or .Title .Description }}
+<div class="row text-center">
+    <div class="col">
+        {{ if .Title }}
+        <h1 class="display-1 fw-bold">{{ .Title | markdownify }}</h1>
+        {{ end }}
+        {{ if .Description }}
+        <p class="lead">{{ .Description | markdownify }}</p>
+        {{ end }}
+    </div>
+</div>
+{{ end }}
+<div class="row py-3">
+    <div class="col">
+        <div class="rounded-4" style="background-image: url('{{ .Site.BaseURL }}/cover.jpg'); background-position: center; background-size: cover; height: 20rem; width: 100%"></div>
+    </div>
+</div>
+<div class="d-flex justify-content-center py-3 row">
+    <div class="col-12 col-xl-10">
+        <div class="d-flex justify-content-evenly align-items-center row">
+            <div class="col-12 col-md-6">
+                <p class="display-5 fw-bold lh-1">{{ .Params.greeting | markdownify }}</p>
+                <p class="lead">{{ .Params.blurb | markdownify }}</p>
+            </div>
+            <div class="col-12 col-md-6 text-center">
+                <img alt="Avatar" class="rounded-4" src="{{ .Site.BaseURL }}/avatar.jpg" style="max-height: 20rem; max-width: 100%">
+            </div>
+        </div>
+    </div>
+</div>
+{{ if .Site.Social }}
+<div class="py-3 row">
+    <div class="col text-center">
+        {{ range $k, $v := .Site.Social }}
+        <a href="{{ $v }}"><i class="bi bi-{{ $k }} display-6 px-2"></i></a>
+        {{ end }}
+    </div>
+</div>
+{{ end }}
+{{ end }}
diff --git a/web/themes/paige/layouts/_default/list.html b/web/themes/paige/layouts/_default/list.html
new file mode 100644
index 0000000000000000000000000000000000000000..9385f92085d9ae5ca3134cbbd436185f6835b702
--- /dev/null
+++ b/web/themes/paige/layouts/_default/list.html
@@ -0,0 +1,73 @@
+{{ define "main" }}
+{{ if not (or .Title .Description .Content .Pages) }}
+<section>
+    <h1 class="display-5 fw-bold text-center">Nothing Here</h1>
+</section>
+{{ else }}
+<section>
+    {{ if or .Title .Description }}
+    <header>
+        <div class="row text-center justify-content-center">
+            <div class="col">
+                {{ if .Title }}
+                <h1 class="display-5 fw-bold">
+                    {{ if .Params.link }}
+                    <a href="{{ .Params.link }}">{{ .Title | markdownify }}</a>
+                    {{ else }}
+                    {{ .Title | markdownify }}
+                    {{ end }}
+                </h1>
+                {{ end }}
+                {{ if .Description }}
+                <p class="lead">{{ .Description | markdownify }}</p>
+                {{ end }}
+            </div>
+        </div>
+    </header>
+    {{ end }}
+    {{ if .Content }}
+    <div class="row">
+        <div class="col">
+            <div class="mx-auto">
+                {{ .Content }}
+            </div>
+        </div>
+    </div>
+    {{ end }}
+    {{ if .Pages }}
+    {{ $p := .Paginate (.Pages.ByDate.Reverse.GroupByDate "January 2006") }}
+    <section>
+        <div class="row">
+            <div class="col">
+                <div class="mx-auto text-center">
+                    {{ range $p.PageGroups }}
+                    <h5>{{ .Key }}</h5>
+                    {{ range .Pages }}
+                    <p>
+                        <a href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a>
+                        {{- if .Description -}}
+                        <br/>
+                        {{- .Description | markdownify -}}
+                        {{- end -}}
+                    </p>
+                    {{ end }}
+                    {{ end }}
+                </div>
+            </div>
+        </div>
+    </section>
+    {{ if or $p.HasPrev $p.HasNext }}
+    <footer>
+        <div class="row">
+            <div class="col">
+                <div class="d-flex justify-content-center pt-3">
+                    {{ partial "pagination" . }}
+                </div>
+            </div>
+        </div>
+    </footer>
+    {{ end }}
+    {{ end }}
+</section>
+{{ end }}
+{{ end }}
diff --git a/web/themes/paige/layouts/_default/rss.xml b/web/themes/paige/layouts/_default/rss.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1b850dbac3e40002ace8a7aabc37868f5eaca4eb
--- /dev/null
+++ b/web/themes/paige/layouts/_default/rss.xml
@@ -0,0 +1,76 @@
+{{ $pctx := . }}
+{{ if .IsHome }}{{ $pctx = .Site }}{{ end }}
+{{ $pages := slice }}
+{{ if or $.IsHome $.IsSection }}
+{{ $pages = $pctx.RegularPages }}
+{{ else }}
+{{ $pages = $pctx.Pages }}
+{{ end }}
+{{ $limit := .Site.Config.Services.RSS.Limit }}
+{{ if ge $limit 1 }}
+{{ $pages = $pages | first $limit }}
+{{ end }}
+{{ $title := "" }}
+{{ if or .Title .Site.Title }}
+{{ if and .Title .Site.Title }}
+{{ if eq .Title .Site.Title }}
+{{ $title = .Title }}
+{{ else }}
+{{ $title = printf "%s · %s" .Title .Site.Title }}
+{{ end }}
+{{ else if .Title }}
+{{ $title = .Title }}
+{{ else }}
+{{ $title = .Site.Title }}
+{{ end }}
+{{ end }}
+{{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    {{ with $title }}
+    <title>{{ . }}</title>
+    {{ end }}
+    <link>{{ .Permalink }}</link>
+    <description>Recent content{{ with $title }} in {{ . }}{{ end }}</description>
+    {{ with .Site.LanguageCode }}
+    <language>{{ . }}</language>
+    {{ end }}
+    {{ with .Site.Author.email }}
+    <managingEditor>{{ . }}</managingEditor>
+    <webMaster>{{ . }}</webMaster>
+    {{ end }}
+    {{ with .Site.Copyright }}
+    <copyright>{{ . }}</copyright>
+    {{ end }}
+    {{ if and .Date (not .Date.IsZero) }}
+    <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>
+    {{ end }}
+    {{ with .OutputFormats.Get "RSS" }}
+    {{ printf "<atom:link href=%q rel=\"self\" type=%q/>" .Permalink .MediaType | safeHTML }}
+    {{ end }}
+    {{ range $pages }}
+    <item>
+      {{ with .Title }}
+      <title>{{ . }}</title>
+      {{ end }}
+      {{ with .Permalink }}
+      <link>{{ . }}</link>
+      <guid>{{ . }}</guid>
+      {{ end }}
+      {{ with .Date }}
+      <pubDate>{{ .Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
+      {{ end }}
+      {{ with .Site.Author.email }}
+      <author>{{ . }}</author>
+      {{ end }}
+      {{ if .Content }}
+      <description>{{ printf "<![CDATA[%s]]>" .Content | safeHTML }}</description>
+      {{ else if .Summary }}
+      <description>{{ .Summary | html }}</description>
+      {{ else if .Description }}
+      <description>{{ .Description | html }}</description>
+      {{ end }}
+    </item>
+    {{ end }}
+  </channel>
+</rss>
diff --git a/web/themes/paige/layouts/_default/single.html b/web/themes/paige/layouts/_default/single.html
new file mode 100644
index 0000000000000000000000000000000000000000..91aa1d3902a74b040a1ec04436edb10a9b27e61f
--- /dev/null
+++ b/web/themes/paige/layouts/_default/single.html
@@ -0,0 +1,40 @@
+{{ define "main" }}
+{{ if not (or .Title .Description .PublishDate .Content) }}
+<section>
+    <h1 class="display-5 fw-bold text-center">Nothing Here</h1>
+</section>
+{{ else }}
+<article>
+    {{ if or .Title .Description .PublishDate }}
+    <header>
+        <div class="justify-content-center row">
+            <div class="col col-auto text-center">
+                {{ if .Title }}
+                <h1 class="display-5 fw-bold">
+                    {{ if .Params.link }}
+                    <a href="{{ .Params.link }}">{{ .Title | markdownify }}</a>
+                    {{ else }}
+                    {{ .Title | markdownify }}
+                    {{ end }}
+                </h1>
+                {{ end }}
+                {{ if .Description }}
+                <p class="lead">{{ .Description | markdownify }}</p>
+                {{ end }}
+                {{ if .PublishDate }}
+                <p class="text-muted"><time datetime="{{ .PublishDate.Format `2006-01-02` }}">{{ .PublishDate.Format "January 2, 2006" }}</time></p>
+                {{ end }}
+            </div>
+        </div>
+    </header>
+    {{ end }}
+    {{ if .Content }}
+    <div class="justify-content-center row">
+        <div class="col col-auto" id="content">
+            {{ .Content }}
+        </div>
+    </div>
+    {{ end }}
+</article>
+{{ end }}
+{{ end }}
diff --git a/web/themes/paige/layouts/_default/taxonomy.html b/web/themes/paige/layouts/_default/taxonomy.html
new file mode 100644
index 0000000000000000000000000000000000000000..e33b084aa5fbcc5a25a8b02e8e17876d99a261e7
--- /dev/null
+++ b/web/themes/paige/layouts/_default/taxonomy.html
@@ -0,0 +1,40 @@
+{{ define "main" }}
+{{ if not (or .Title .Pages) }}
+<section>
+    <h1 class="display-5 fw-bold text-center">Nothing Here</h1>
+</section>
+{{ else }}
+<section>
+    {{ if .Title }}
+    <header>
+        <div class="row text-center">
+            <div class="col">
+                <h1 class="display-5 fw-bold">
+                    {{ if .Params.link }}
+                    <a href="{{ .Params.link }}">{{ .Title | markdownify }}</a>
+                    {{ else }}
+                    {{ .Title | markdownify }}
+                    {{ end }}
+                </h1>
+            </div>
+        </div>
+    </header>
+    {{ end }}
+    {{ if .Pages }}
+    <div class="row">
+        <div class="col">
+            <div class="mx-auto text-center">
+                <ul class="list-inline">
+                    {{ range (sort .Pages "Title") }}
+                    <li class="list-inline-item">
+                        <a href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a>
+                    </li>
+                    {{ end }}
+                </ul>
+            </div>
+        </div>
+    </div>
+    {{ end }}
+</section>
+{{ end }}
+{{ end }}
diff --git a/web/themes/paige/layouts/_default/term.html b/web/themes/paige/layouts/_default/term.html
new file mode 100644
index 0000000000000000000000000000000000000000..4aeae7306cf1f1e8d071cbc1640c9028d2618765
--- /dev/null
+++ b/web/themes/paige/layouts/_default/term.html
@@ -0,0 +1,34 @@
+{{ define "main" }}
+<section>
+    <header>
+        <div class="row text-center justify-content-center">
+            <div class="col">
+                <h1 class="display-5 fw-bold">
+                    {{ .Title }}
+                </h1>
+            </div>
+        </div>
+    </header>
+    {{ $p := .Paginate (.Pages.ByDate.Reverse.GroupByDate "January 2006") }}
+    <section>
+        <div class="row">
+            <div class="col">
+                <div class="mx-auto text-center">
+                    {{ range $p.PageGroups }}
+                    <h5>{{ .Key }}</h5>
+                    {{ range .Pages }}
+                    <p>
+                        <a href="{{ .RelPermalink }}">{{ .Title | markdownify }}</a>
+                        {{- if .Description -}}
+                        <br/>
+                        {{- .Description | markdownify -}}
+                        {{- end -}}
+                    </p>
+                    {{ end }}
+                    {{ end }}
+                </div>
+            </div>
+        </div>
+    </section>
+</section>
+{{ end }}
diff --git a/web/themes/paige/layouts/partials/pagination.html b/web/themes/paige/layouts/partials/pagination.html
new file mode 100644
index 0000000000000000000000000000000000000000..e2c862cc37cdb0703ca25f2a53e7f476e264e2f4
--- /dev/null
+++ b/web/themes/paige/layouts/partials/pagination.html
@@ -0,0 +1,365 @@
+{{/*
+Copied from:
+    https://github.com/gohugoio/hugo/blob/133e4bfbeee47bf6843fbcad90f14501f3d3a099/tpl/tplimpl/embedded/templates/pagination.html
+
+License:
+    https://github.com/gohugoio/hugo/blob/133e4bfbeee47bf6843fbcad90f14501f3d3a099/LICENSE
+
+License content:
+    Apache License
+    Version 2.0, January 2004
+    http://www.apache.org/licenses/
+
+    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+    1. Definitions.
+
+    "License" shall mean the terms and conditions for use, reproduction,
+    and distribution as defined by Sections 1 through 9 of this document.
+
+    "Licensor" shall mean the copyright owner or entity authorized by
+    the copyright owner that is granting the License.
+
+    "Legal Entity" shall mean the union of the acting entity and all
+    other entities that control, are controlled by, or are under common
+    control with that entity. For the purposes of this definition,
+    "control" means (i) the power, direct or indirect, to cause the
+    direction or management of such entity, whether by contract or
+    otherwise, or (ii) ownership of fifty percent (50%) or more of the
+    outstanding shares, or (iii) beneficial ownership of such entity.
+
+    "You" (or "Your") shall mean an individual or Legal Entity
+    exercising permissions granted by this License.
+
+    "Source" form shall mean the preferred form for making modifications,
+    including but not limited to software source code, documentation
+    source, and configuration files.
+
+    "Object" form shall mean any form resulting from mechanical
+    transformation or translation of a Source form, including but
+    not limited to compiled object code, generated documentation,
+    and conversions to other media types.
+
+    "Work" shall mean the work of authorship, whether in Source or
+    Object form, made available under the License, as indicated by a
+    copyright notice that is included in or attached to the work
+    (an example is provided in the Appendix below).
+
+    "Derivative Works" shall mean any work, whether in Source or Object
+    form, that is based on (or derived from) the Work and for which the
+    editorial revisions, annotations, elaborations, or other modifications
+    represent, as a whole, an original work of authorship. For the purposes
+    of this License, Derivative Works shall not include works that remain
+    separable from, or merely link (or bind by name) to the interfaces of,
+    the Work and Derivative Works thereof.
+
+    "Contribution" shall mean any work of authorship, including
+    the original version of the Work and any modifications or additions
+    to that Work or Derivative Works thereof, that is intentionally
+    submitted to Licensor for inclusion in the Work by the copyright owner
+    or by an individual or Legal Entity authorized to submit on behalf of
+    the copyright owner. For the purposes of this definition, "submitted"
+    means any form of electronic, verbal, or written communication sent
+    to the Licensor or its representatives, including but not limited to
+    communication on electronic mailing lists, source code control systems,
+    and issue tracking systems that are managed by, or on behalf of, the
+    Licensor for the purpose of discussing and improving the Work, but
+    excluding communication that is conspicuously marked or otherwise
+    designated in writing by the copyright owner as "Not a Contribution."
+
+    "Contributor" shall mean Licensor and any individual or Legal Entity
+    on behalf of whom a Contribution has been received by Licensor and
+    subsequently incorporated within the Work.
+
+    2. Grant of Copyright License. Subject to the terms and conditions of
+    this License, each Contributor hereby grants to You a perpetual,
+    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+    copyright license to reproduce, prepare Derivative Works of,
+    publicly display, publicly perform, sublicense, and distribute the
+    Work and such Derivative Works in Source or Object form.
+
+    3. Grant of Patent License. Subject to the terms and conditions of
+    this License, each Contributor hereby grants to You a perpetual,
+    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+    (except as stated in this section) patent license to make, have made,
+    use, offer to sell, sell, import, and otherwise transfer the Work,
+    where such license applies only to those patent claims licensable
+    by such Contributor that are necessarily infringed by their
+    Contribution(s) alone or by combination of their Contribution(s)
+    with the Work to which such Contribution(s) was submitted. If You
+    institute patent litigation against any entity (including a
+    cross-claim or counterclaim in a lawsuit) alleging that the Work
+    or a Contribution incorporated within the Work constitutes direct
+    or contributory patent infringement, then any patent licenses
+    granted to You under this License for that Work shall terminate
+    as of the date such litigation is filed.
+
+    4. Redistribution. You may reproduce and distribute copies of the
+    Work or Derivative Works thereof in any medium, with or without
+    modifications, and in Source or Object form, provided that You
+    meet the following conditions:
+
+    (a) You must give any other recipients of the Work or
+    Derivative Works a copy of this License; and
+
+    (b) You must cause any modified files to carry prominent notices
+    stating that You changed the files; and
+
+    (c) You must retain, in the Source form of any Derivative Works
+    that You distribute, all copyright, patent, trademark, and
+    attribution notices from the Source form of the Work,
+    excluding those notices that do not pertain to any part of
+    the Derivative Works; and
+
+    (d) If the Work includes a "NOTICE" text file as part of its
+    distribution, then any Derivative Works that You distribute must
+    include a readable copy of the attribution notices contained
+    within such NOTICE file, excluding those notices that do not
+    pertain to any part of the Derivative Works, in at least one
+    of the following places: within a NOTICE text file distributed
+    as part of the Derivative Works; within the Source form or
+    documentation, if provided along with the Derivative Works; or,
+    within a display generated by the Derivative Works, if and
+    wherever such third-party notices normally appear. The contents
+    of the NOTICE file are for informational purposes only and
+    do not modify the License. You may add Your own attribution
+    notices within Derivative Works that You distribute, alongside
+    or as an addendum to the NOTICE text from the Work, provided
+    that such additional attribution notices cannot be construed
+    as modifying the License.
+
+    You may add Your own copyright statement to Your modifications and
+    may provide additional or different license terms and conditions
+    for use, reproduction, or distribution of Your modifications, or
+    for any such Derivative Works as a whole, provided Your use,
+    reproduction, and distribution of the Work otherwise complies with
+    the conditions stated in this License.
+
+    5. Submission of Contributions. Unless You explicitly state otherwise,
+    any Contribution intentionally submitted for inclusion in the Work
+    by You to the Licensor shall be under the terms and conditions of
+    this License, without any additional terms or conditions.
+    Notwithstanding the above, nothing herein shall supersede or modify
+    the terms of any separate license agreement you may have executed
+    with Licensor regarding such Contributions.
+
+    6. Trademarks. This License does not grant permission to use the trade
+    names, trademarks, service marks, or product names of the Licensor,
+    except as required for reasonable and customary use in describing the
+    origin of the Work and reproducing the content of the NOTICE file.
+
+    7. Disclaimer of Warranty. Unless required by applicable law or
+    agreed to in writing, Licensor provides the Work (and each
+    Contributor provides its Contributions) on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+    implied, including, without limitation, any warranties or conditions
+    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+    PARTICULAR PURPOSE. You are solely responsible for determining the
+    appropriateness of using or redistributing the Work and assume any
+    risks associated with Your exercise of permissions under this License.
+
+    8. Limitation of Liability. In no event and under no legal theory,
+    whether in tort (including negligence), contract, or otherwise,
+    unless required by applicable law (such as deliberate and grossly
+    negligent acts) or agreed to in writing, shall any Contributor be
+    liable to You for damages, including any direct, indirect, special,
+    incidental, or consequential damages of any character arising as a
+    result of this License or out of the use or inability to use the
+    Work (including but not limited to damages for loss of goodwill,
+    work stoppage, computer failure or malfunction, or any and all
+    other commercial damages or losses), even if such Contributor
+    has been advised of the possibility of such damages.
+
+    9. Accepting Warranty or Additional Liability. While redistributing
+    the Work or Derivative Works thereof, You may choose to offer,
+    and charge a fee for, acceptance of support, warranty, indemnity,
+    or other liability obligations and/or rights consistent with this
+    License. However, in accepting such obligations, You may act only
+    on Your own behalf and on Your sole responsibility, not on behalf
+    of any other Contributor, and only if You agree to indemnify,
+    defend, and hold each Contributor harmless for any liability
+    incurred by, or claims asserted against, such Contributor by reason
+    of your accepting any such warranty or additional liability.
+
+    END OF TERMS AND CONDITIONS
+
+    APPENDIX: How to apply the Apache License to your work.
+
+    To apply the Apache License to your work, attach the following
+    boilerplate notice, with the fields enclosed by brackets "[]"
+    replaced with your own identifying information. (Don't include
+    the brackets!)  The text should be enclosed in the appropriate
+    comment syntax for the file format. We also recommend that a
+    file or class name and description of purpose be included on the
+    same "printed page" as the copyright notice for easier
+    identification within third-party archives.
+
+    Copyright [yyyy] [name of copyright owner]
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+*/}}
+
+{{- $validFormats := slice "default" "terse" }}
+
+{{- $msg1 := "When passing a map to the internal pagination template, one of the elements must be named 'page', and it must be set to the context of the current page." }}
+{{- $msg2 := "The 'format' specified in the map passed to the internal pagination template is invalid. Valid choices are: %s." }}
+
+{{- $page := . }}
+{{- $format := "default" }}
+
+{{- if reflect.IsMap . }}
+  {{- with .page }}
+    {{- $page = . }}
+  {{- else }}
+    {{- errorf $msg1 }}
+  {{- end }}
+  {{- with .format }}
+    {{- $format = lower . }}
+  {{- end }}
+{{- end }}
+
+{{- if in $validFormats $format }}
+  {{- if gt $page.Paginator.TotalPages 1 }}
+    <ul class="pagination pagination-{{ $format }}">
+      {{- partial (printf "partials/inline/pagination/%s" $format) $page }}
+    </ul>
+  {{- end }}
+{{- else }}
+  {{- errorf $msg2 (delimit $validFormats ", ") }}
+{{- end -}}
+
+{{/* Format: default
+{{/* --------------------------------------------------------------------- */}}
+{{- define "partials/inline/pagination/default" }}
+  {{- with .Paginator }}
+    {{- $currentPageNumber := .PageNumber }}
+
+    {{- with .First }}
+      {{- if ne $currentPageNumber .PageNumber }}
+      <li class="page-item">
+        <a href="{{ .URL }}" aria-label="First" class="page-link" role="button"><span aria-hidden="true">&laquo;</span></a>
+      </li>
+      {{- else }}
+      <li class="page-item disabled">
+        <a aria-disabled="true" aria-label="First" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">&laquo;</span></a>
+      </li>
+      {{- end }}
+    {{- end }}
+
+    {{- with .Prev }}
+      <li class="page-item">
+        <a href="{{ .URL }}" aria-label="Previous" class="page-link" role="button"><span aria-hidden="true">&lsaquo;</span></a>
+      </li>
+    {{- else }}
+      <li class="page-item disabled">
+        <a aria-disabled="true" aria-label="Previous" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">&lsaquo;</span></a>
+      </li>
+    {{- end }}
+
+    {{- $slots := 5 }}
+    {{- $start := math.Max 1 (sub .PageNumber (math.Floor (div $slots 2))) }}
+    {{- $end := math.Min .TotalPages (sub (add $start $slots) 1) }}
+    {{- if lt (add (sub $end $start) 1) $slots }}
+      {{- $start = math.Max 1 (add (sub $end $slots) 1) }}
+    {{- end }}
+
+    {{- range $k := seq $start $end }}
+      {{- if eq $.Paginator.PageNumber $k }}
+      <li class="page-item active">
+        <a aria-current="page" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
+      </li>
+      {{- else }}
+      <li class="page-item">
+        <a href="{{ (index $.Paginator.Pagers (sub $k 1)).URL }}" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
+      </li>
+      {{- end }}
+    {{- end }}
+
+    {{- with .Next }}
+      <li class="page-item">
+        <a href="{{ .URL }}" aria-label="Next" class="page-link" role="button"><span aria-hidden="true">&rsaquo;</span></a>
+      </li>
+    {{- else }}
+      <li class="page-item disabled">
+        <a aria-disabled="true" aria-label="Next" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">&rsaquo;</span></a>
+      </li>
+    {{- end }}
+
+    {{- with .Last }}
+      {{- if ne $currentPageNumber .PageNumber }}
+      <li class="page-item">
+        <a href="{{ .URL }}" aria-label="Last" class="page-link" role="button"><span aria-hidden="true">&raquo;</span></a>
+      </li>
+      {{- else }}
+      <li class="page-item disabled">
+        <a aria-disabled="true" aria-label="Last" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">&raquo;</span></a>
+      </li>
+      {{- end }}
+    {{- end }}
+  {{- end }}
+{{- end -}}
+
+{{/* Format: terse
+{{/* --------------------------------------------------------------------- */}}
+{{- define "partials/inline/pagination/terse" }}
+  {{- with .Paginator }}
+    {{- $currentPageNumber := .PageNumber }}
+
+    {{- with .First }}
+      {{- if ne $currentPageNumber .PageNumber }}
+      <li class="page-item">
+        <a href="{{ .URL }}" aria-label="First" class="page-link" role="button"><span aria-hidden="true">&laquo;</span></a>
+      </li>
+      {{- end }}
+    {{- end }}
+
+    {{- with .Prev }}
+      <li class="page-item">
+        <a href="{{ .URL }}" aria-label="Previous" class="page-link" role="button"><span aria-hidden="true">&lsaquo;</span></a>
+      </li>
+    {{- end }}
+
+    {{- $slots := 3 }}
+    {{- $start := math.Max 1 (sub .PageNumber (math.Floor (div $slots 2))) }}
+    {{- $end := math.Min .TotalPages (sub (add $start $slots) 1) }}
+    {{- if lt (add (sub $end $start) 1) $slots }}
+      {{- $start = math.Max 1 (add (sub $end $slots) 1) }}
+    {{- end }}
+
+    {{- range $k := seq $start $end }}
+      {{- if eq $.Paginator.PageNumber $k }}
+      <li class="page-item active">
+        <a aria-current="page" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
+      </li>
+      {{- else }}
+      <li class="page-item">
+        <a href="{{ (index $.Paginator.Pagers (sub $k 1)).URL }}" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
+      </li>
+      {{- end }}
+    {{- end }}
+
+    {{- with .Next }}
+      <li class="page-item">
+        <a href="{{ .URL }}" aria-label="Next" class="page-link" role="button"><span aria-hidden="true">&rsaquo;</span></a>
+      </li>
+    {{- end }}
+
+    {{- with .Last }}
+      {{- if ne $currentPageNumber .PageNumber }}
+      <li class="page-item">
+        <a href="{{ .URL }}" aria-label="Last" class="page-link" role="button"><span aria-hidden="true">&raquo;</span></a>
+      </li>
+      {{- end }}
+    {{- end }}
+  {{- end }}
+{{- end -}}
diff --git a/web/themes/paige/theme.toml b/web/themes/paige/theme.toml
new file mode 100644
index 0000000000000000000000000000000000000000..52aa0391be3369b3de6d1ccdfe7fd3b9f7185e86
--- /dev/null
+++ b/web/themes/paige/theme.toml
@@ -0,0 +1,12 @@
+demosite = "https://willfaught.com/paige"
+description = "A simple Hugo theme"
+features = ["blog", "landing page", "responsive", "single column", "menus", "social links"]
+homepage = "https://github.com/willfaught/paige"
+license = "Apache-2.0"
+licenselink = "https://www.apache.org/licenses/LICENSE-2.0"
+name = "Paige"
+tags = ["articles", "blog", "bootstrap", "landing", "light", "minimal", "personal", "projects", "responsive", "social"]
+
+[author]
+  homepage = "https://willfaught.com"
+  name = "Will Faught"
diff --git a/web/themes/ucax/LICENSE b/web/themes/ucax/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..147d5944c76cacbc868a040786b44909fc8d8541
--- /dev/null
+++ b/web/themes/ucax/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2022 YOUR_NAME_HERE
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/web/themes/ucax/archetypes/default.md b/web/themes/ucax/archetypes/default.md
new file mode 100644
index 0000000000000000000000000000000000000000..ac36e0622776b9ea3aff3dd3e2b43b1cdf833eed
--- /dev/null
+++ b/web/themes/ucax/archetypes/default.md
@@ -0,0 +1,2 @@
++++
++++
diff --git a/web/themes/ucax/layouts/404.html b/web/themes/ucax/layouts/404.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/web/themes/ucax/layouts/_default/baseof.html b/web/themes/ucax/layouts/_default/baseof.html
new file mode 100644
index 0000000000000000000000000000000000000000..5f8e2ec023617e039fca216fbce12e2cf3abc73d
--- /dev/null
+++ b/web/themes/ucax/layouts/_default/baseof.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+    {{- partial "head.html" . -}}
+    <body>
+        {{- partial "header.html" . -}}
+        <div id="content">
+        {{- block "main" . }}{{- end }}
+        </div>
+        {{- partial "footer.html" . -}}
+    </body>
+</html>
diff --git a/web/themes/ucax/layouts/_default/list.html b/web/themes/ucax/layouts/_default/list.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/web/themes/ucax/layouts/_default/single.html b/web/themes/ucax/layouts/_default/single.html
new file mode 100644
index 0000000000000000000000000000000000000000..f7e8c656dbe695ba0f7276689eff30945d38f86a
--- /dev/null
+++ b/web/themes/ucax/layouts/_default/single.html
@@ -0,0 +1,3 @@
+{{ define "main" }}
+{{ .Content }}
+{{ end }}
diff --git a/web/themes/ucax/layouts/index.html b/web/themes/ucax/layouts/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..f7e8c656dbe695ba0f7276689eff30945d38f86a
--- /dev/null
+++ b/web/themes/ucax/layouts/index.html
@@ -0,0 +1,3 @@
+{{ define "main" }}
+{{ .Content }}
+{{ end }}
diff --git a/web/themes/ucax/layouts/partials/footer.html b/web/themes/ucax/layouts/partials/footer.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/web/themes/ucax/layouts/partials/head.html b/web/themes/ucax/layouts/partials/head.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/web/themes/ucax/layouts/partials/header.html b/web/themes/ucax/layouts/partials/header.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/web/themes/ucax/theme.toml b/web/themes/ucax/theme.toml
new file mode 100644
index 0000000000000000000000000000000000000000..6df1107fd8d5b6b5da97ef98155ffffabcccac9a
--- /dev/null
+++ b/web/themes/ucax/theme.toml
@@ -0,0 +1,21 @@
+# theme.toml template for a Hugo theme
+# See https://github.com/gohugoio/hugoThemes#themetoml for an example
+
+name = "Ucax"
+license = "MIT"
+licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE"
+description = ""
+homepage = "http://example.com/"
+tags = []
+features = []
+min_version = "0.41.0"
+
+[author]
+  name = ""
+  homepage = ""
+
+# If porting an existing theme
+[original]
+  name = ""
+  homepage = ""
+  repo = ""