diff --git a/compendium-frontend/vite.config.ts b/compendium-frontend/vite.config.ts
index 325058f7fcecd17049444937df45914934e2aa17..828570e516f1b42e9c7eb986a6c0250321d5c339 100644
--- a/compendium-frontend/vite.config.ts
+++ b/compendium-frontend/vite.config.ts
@@ -55,14 +55,14 @@ export default defineConfig({
         sourcemap: process.env.NODE_ENV !== 'production',
         rollupOptions: {
             output: {
-                entryFileNames: '[name].js',
+                entryFileNames: '[name]-[hash].js',
                 assetFileNames: function (assetInfo) {
                     const names = assetInfo.names;
                     if (names.some(name => name.endsWith('.css'))) {
                         if (names.some(name => name.toLowerCase().includes('component'))) {
                             return '[hash].[ext]';
                         }
-                        return '[name].[ext]';
+                        return '[name]-[hash].[ext]';
                     }
                     return '[hash].[ext]';
 
diff --git a/compendium_v2/static/AlienWave-6fWajwYt.js b/compendium_v2/static/AlienWave-6fWajwYt.js
new file mode 100644
index 0000000000000000000000000000000000000000..642a9d7257f13c6c4d4d223dd79410e1af1ef592
--- /dev/null
+++ b/compendium_v2/static/AlienWave-6fWajwYt.js
@@ -0,0 +1,9 @@
+import{c as T,r as Y,F as S,j as v,t as j,S as E}from"./index-DunMf8wQ.js";import{u as W,g as C,n as F,D as M,F as P,f as R}from"./useData-DvdT9bkc.js";import{P as L}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function K(){const e=T.c(30);let a;e[0]===Symbol.for("react.memo_cache_sentinel")?(a=d=>d.alien_wave_third_party!==null,e[0]=a):a=e[0];const x=a,{filterSelection:t,setFilterSelection:p}=Y.useContext(S),{data:_,years:w,nrens:y}=W("/api/alien-wave",p,x);let s,h;if(e[1]!==_||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let d;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(d=g=>t.selectedYears.includes(g.year)&&t.selectedNrens.includes(g.nren),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=d):d=e[8],s=_.filter(d);const D=C(s,"alien_wave_third_party");h=F(D,A),e[1]=_,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=h}else s=e[4],h=e[5];const b=h;let n,m;e[9]===Symbol.for("react.memo_cache_sentinel")?(n=["Yes","Planned","No"],m=new Map([[n[0],"yes"],[n[1],"planned"],[n[2],"no"]]),e[9]=n,e[10]=m):(n=e[9],m=e[10]);const k=m;let i;e[11]!==w?(i=[...w],e[11]=w,e[12]=i):i=e[12];let r;e[13]!==y?(r=y.values(),e[13]=y,e[14]=r):r=e[14];let l;e[15]!==r?(l=[...r],e[15]=r,e[16]=l):l=e[16];let o;e[17]!==i||e[18]!==l?(o={availableYears:i,availableNrens:l},e[17]=i,e[18]=l,e[19]=o):o=e[19];let u;e[20]!==t||e[21]!==p||e[22]!==o?(u=v.jsx(P,{filterOptions:o,filterSelection:t,setFilterSelection:p,coloredYears:!0}),e[20]=t,e[21]=p,e[22]=o,e[23]=u):u=e[23];const N=u;let c;e[24]!==b?(c=v.jsx(R,{children:v.jsx(L,{columns:n,columnLookup:k,dataLookup:b})}),e[24]=b,e[25]=c):c=e[25];let f;return e[26]!==N||e[27]!==s||e[28]!==c?(f=v.jsx(M,{title:j["alien-wave"],description:`The table below shows NREN usage of alien wavelength or lightpath services provided by third parties. 
+            It does not include alien waves used internally inside the NRENs own networks, as that is covered in another table. 
+            In the optical network world, the term “alien wavelength” or “alien wave” (AW) is used to describe wavelengths in a 
+            DWDM line system that pass through the network, i.e. they are not sourced/terminated by the line-system operator’s 
+            equipment (hence “alien”). This setup is in contrast to traditional DWDM systems, where the DWDM light source 
+            (transponder) operates in the same management domain as the amplifiers.
+
+            Where NRENs have given the number of individual alien wavelength services, the figure is available in a hover-over 
+            box. These are indicated by a black line around the coloured marker.`,category:E.Network,filter:N,data:s,filename:"alien_wave_nrens_per_year",children:c}),e[26]=N,e[27]=s,e[28]=c,e[29]=f):f=e[29],f}function A(e,a){if(a.nr_of_alien_wave_third_party_services)return`No. of alien wavelength services: ${a.nr_of_alien_wave_third_party_services} `}export{K as default};
diff --git a/compendium_v2/static/AlienWave-DO1S2459.js b/compendium_v2/static/AlienWave-DO1S2459.js
deleted file mode 100644
index c39131de1903f4086b0abc4ec5c5790832744e8c..0000000000000000000000000000000000000000
--- a/compendium_v2/static/AlienWave-DO1S2459.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import{c as T,r as Y,F as S,j as v,t as j,S as E}from"./index.js";import{u as W,g as C,n as F,D as M,F as P,f as R}from"./useData-CxftshCa.js";import{P as L}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function K(){const e=T.c(30);let a;e[0]===Symbol.for("react.memo_cache_sentinel")?(a=d=>d.alien_wave_third_party!==null,e[0]=a):a=e[0];const x=a,{filterSelection:t,setFilterSelection:p}=Y.useContext(S),{data:_,years:w,nrens:y}=W("/api/alien-wave",p,x);let s,h;if(e[1]!==_||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let d;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(d=g=>t.selectedYears.includes(g.year)&&t.selectedNrens.includes(g.nren),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=d):d=e[8],s=_.filter(d);const D=C(s,"alien_wave_third_party");h=F(D,A),e[1]=_,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=h}else s=e[4],h=e[5];const b=h;let n,m;e[9]===Symbol.for("react.memo_cache_sentinel")?(n=["Yes","Planned","No"],m=new Map([[n[0],"yes"],[n[1],"planned"],[n[2],"no"]]),e[9]=n,e[10]=m):(n=e[9],m=e[10]);const k=m;let i;e[11]!==w?(i=[...w],e[11]=w,e[12]=i):i=e[12];let r;e[13]!==y?(r=y.values(),e[13]=y,e[14]=r):r=e[14];let l;e[15]!==r?(l=[...r],e[15]=r,e[16]=l):l=e[16];let o;e[17]!==i||e[18]!==l?(o={availableYears:i,availableNrens:l},e[17]=i,e[18]=l,e[19]=o):o=e[19];let u;e[20]!==t||e[21]!==p||e[22]!==o?(u=v.jsx(P,{filterOptions:o,filterSelection:t,setFilterSelection:p,coloredYears:!0}),e[20]=t,e[21]=p,e[22]=o,e[23]=u):u=e[23];const N=u;let c;e[24]!==b?(c=v.jsx(R,{children:v.jsx(L,{columns:n,columnLookup:k,dataLookup:b})}),e[24]=b,e[25]=c):c=e[25];let f;return e[26]!==N||e[27]!==s||e[28]!==c?(f=v.jsx(M,{title:j["alien-wave"],description:`The table below shows NREN usage of alien wavelength or lightpath services provided by third parties. 
-            It does not include alien waves used internally inside the NRENs own networks, as that is covered in another table. 
-            In the optical network world, the term “alien wavelength” or “alien wave” (AW) is used to describe wavelengths in a 
-            DWDM line system that pass through the network, i.e. they are not sourced/terminated by the line-system operator’s 
-            equipment (hence “alien”). This setup is in contrast to traditional DWDM systems, where the DWDM light source 
-            (transponder) operates in the same management domain as the amplifiers.
-
-            Where NRENs have given the number of individual alien wavelength services, the figure is available in a hover-over 
-            box. These are indicated by a black line around the coloured marker.`,category:E.Network,filter:N,data:s,filename:"alien_wave_nrens_per_year",children:c}),e[26]=N,e[27]=s,e[28]=c,e[29]=f):f=e[29],f}function A(e,a){if(a.nr_of_alien_wave_third_party_services)return`No. of alien wavelength services: ${a.nr_of_alien_wave_third_party_services} `}export{K as default};
diff --git a/compendium_v2/static/AlienWaveInternal-BhuqQCyf.js b/compendium_v2/static/AlienWaveInternal-BhuqQCyf.js
deleted file mode 100644
index 7042b855dabf50f49c071e1e9b70a7d16a610699..0000000000000000000000000000000000000000
--- a/compendium_v2/static/AlienWaveInternal-BhuqQCyf.js
+++ /dev/null
@@ -1,9 +0,0 @@
-import{c as k,r as Y,F as S,j as w,t as j,S as F}from"./index.js";import{u as M,g as T,D as W,F as C,f as E}from"./useData-CxftshCa.js";import{P}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=k.c(30);let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=c=>c.alien_wave_internal!==null,e[0]=m):m=e[0];const N=m,{filterSelection:t,setFilterSelection:d}=Y.useContext(S),{data:v,years:g,nrens:x}=M("/api/alien-wave",d,N);let s,p;if(e[1]!==v||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let c;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(c=D=>t.selectedYears.includes(D.year)&&t.selectedNrens.includes(D.nren),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=c):c=e[8],s=v.filter(c),p=T(s,"alien_wave_internal"),e[1]=v,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=p}else s=e[4],p=e[5];const y=p;let n,u;e[9]===Symbol.for("react.memo_cache_sentinel")?(n=["Yes","No"],u=new Map([[n[0],"True"],[n[1],"False"]]),e[9]=n,e[10]=u):(n=e[9],u=e[10]);const b=u;let a;e[11]!==g?(a=[...g],e[11]=g,e[12]=a):a=e[12];let l;e[13]!==x?(l=x.values(),e[13]=x,e[14]=l):l=e[14];let i;e[15]!==l?(i=[...l],e[15]=l,e[16]=i):i=e[16];let r;e[17]!==a||e[18]!==i?(r={availableYears:a,availableNrens:i},e[17]=a,e[18]=i,e[19]=r):r=e[19];let h;e[20]!==t||e[21]!==d||e[22]!==r?(h=w.jsx(C,{filterOptions:r,filterSelection:t,setFilterSelection:d,coloredYears:!0}),e[20]=t,e[21]=d,e[22]=r,e[23]=h):h=e[23];const _=h;let o;e[24]!==y?(o=w.jsx(E,{children:w.jsx(P,{columns:n,columnLookup:b,dataLookup:y})}),e[24]=y,e[25]=o):o=e[25];let f;return e[26]!==_||e[27]!==s||e[28]!==o?(f=w.jsx(W,{title:j["alien-wave-internal"],description:`The table below shows NREN usage of alien waves internally within their own networks. 
-            This includes, for example, alien waves used between two equipment vendors, 
-            eg. coloured optics on routes carried over DWDM (dense wavelength division multiplexing) equipment.
-
-            In the optical network world, the term “alien wavelength” or “alien wave” (AW) is used to describe 
-            wavelengths in a DWDM line system that pass through the network, i.e. they are not sourced/terminated 
-            by the line-system operator’s equipment (hence “alien”). This setup is in contrast to traditional 
-            DWDM systems, where the DWDM light source (transponder) operates in the same management domain 
-            as the amplifiers.`,category:F.Network,filter:_,data:s,filename:"alien_wave_internal_nrens_per_year",children:o}),e[26]=_,e[27]=s,e[28]=o,e[29]=f):f=e[29],f}export{B as default};
diff --git a/compendium_v2/static/AlienWaveInternal-Dbz1_Gp9.js b/compendium_v2/static/AlienWaveInternal-Dbz1_Gp9.js
new file mode 100644
index 0000000000000000000000000000000000000000..e06aaedcc59c331b4aa9051d7504a41863315ee7
--- /dev/null
+++ b/compendium_v2/static/AlienWaveInternal-Dbz1_Gp9.js
@@ -0,0 +1,9 @@
+import{c as k,r as Y,F as S,j as w,t as j,S as F}from"./index-DunMf8wQ.js";import{u as M,g as T,D as W,F as C,f as E}from"./useData-DvdT9bkc.js";import{P}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function B(){const e=k.c(30);let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=c=>c.alien_wave_internal!==null,e[0]=m):m=e[0];const N=m,{filterSelection:t,setFilterSelection:d}=Y.useContext(S),{data:v,years:g,nrens:x}=M("/api/alien-wave",d,N);let s,p;if(e[1]!==v||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let c;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(c=D=>t.selectedYears.includes(D.year)&&t.selectedNrens.includes(D.nren),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=c):c=e[8],s=v.filter(c),p=T(s,"alien_wave_internal"),e[1]=v,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=p}else s=e[4],p=e[5];const y=p;let n,u;e[9]===Symbol.for("react.memo_cache_sentinel")?(n=["Yes","No"],u=new Map([[n[0],"True"],[n[1],"False"]]),e[9]=n,e[10]=u):(n=e[9],u=e[10]);const b=u;let a;e[11]!==g?(a=[...g],e[11]=g,e[12]=a):a=e[12];let l;e[13]!==x?(l=x.values(),e[13]=x,e[14]=l):l=e[14];let i;e[15]!==l?(i=[...l],e[15]=l,e[16]=i):i=e[16];let r;e[17]!==a||e[18]!==i?(r={availableYears:a,availableNrens:i},e[17]=a,e[18]=i,e[19]=r):r=e[19];let h;e[20]!==t||e[21]!==d||e[22]!==r?(h=w.jsx(C,{filterOptions:r,filterSelection:t,setFilterSelection:d,coloredYears:!0}),e[20]=t,e[21]=d,e[22]=r,e[23]=h):h=e[23];const _=h;let o;e[24]!==y?(o=w.jsx(E,{children:w.jsx(P,{columns:n,columnLookup:b,dataLookup:y})}),e[24]=y,e[25]=o):o=e[25];let f;return e[26]!==_||e[27]!==s||e[28]!==o?(f=w.jsx(W,{title:j["alien-wave-internal"],description:`The table below shows NREN usage of alien waves internally within their own networks. 
+            This includes, for example, alien waves used between two equipment vendors, 
+            eg. coloured optics on routes carried over DWDM (dense wavelength division multiplexing) equipment.
+
+            In the optical network world, the term “alien wavelength” or “alien wave” (AW) is used to describe 
+            wavelengths in a DWDM line system that pass through the network, i.e. they are not sourced/terminated 
+            by the line-system operator’s equipment (hence “alien”). This setup is in contrast to traditional 
+            DWDM systems, where the DWDM light source (transponder) operates in the same management domain 
+            as the amplifiers.`,category:F.Network,filter:_,data:s,filename:"alien_wave_internal_nrens_per_year",children:o}),e[26]=_,e[27]=s,e[28]=o,e[29]=f):f=e[29],f}export{B as default};
diff --git a/compendium_v2/static/Audits-CufRH5if.js b/compendium_v2/static/Audits-CufRH5if.js
new file mode 100644
index 0000000000000000000000000000000000000000..8bb789464d631df5600c70c08ec6a9a629edc32c
--- /dev/null
+++ b/compendium_v2/static/Audits-CufRH5if.js
@@ -0,0 +1,5 @@
+import{c as Y,r as w,F as j,j as x,t as F,S as P}from"./index-DunMf8wQ.js";import{u as C,g as D,n as E,D as L,F as R,f as M}from"./useData-DvdT9bkc.js";import{P as A}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function K(){const e=Y.c(30);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=d=>d.audits!==null,e[0]=s):s=e[0];const k=s,{filterSelection:t,setFilterSelection:u}=w.useContext(j),{data:b,years:y,nrens:N}=C("/api/standards",u,k);let i,m;if(e[1]!==b||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let d;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(d=_=>t.selectedYears.includes(_.year)&&t.selectedNrens.includes(_.nren)&&_.audits!==null,e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=d):d=e[8],i=b.filter(d);const T=D(i,"audits");m=E(T,I),e[1]=b,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=i,e[5]=m}else i=e[4],m=e[5];const g=m;let a,p;e[9]===Symbol.for("react.memo_cache_sentinel")?(a=["Yes","No"],p=new Map([[a[0],"True"],[a[1],"False"]]),e[9]=a,e[10]=p):(a=e[9],p=e[10]);const S=p;let r;e[11]!==y?(r=[...y],e[11]=y,e[12]=r):r=e[12];let l;e[13]!==N?(l=N.values(),e[13]=N,e[14]=l):l=e[14];let o;e[15]!==l?(o=[...l],e[15]=l,e[16]=o):o=e[16];let n;e[17]!==r||e[18]!==o?(n={availableYears:r,availableNrens:o},e[17]=r,e[18]=o,e[19]=n):n=e[19];let f;e[20]!==t||e[21]!==u||e[22]!==n?(f=x.jsx(R,{filterOptions:n,filterSelection:t,setFilterSelection:u,coloredYears:!0}),e[20]=t,e[21]=u,e[22]=n,e[23]=f):f=e[23];const v=f;let c;e[24]!==g?(c=x.jsx(M,{children:x.jsx(A,{columns:a,columnLookup:S,dataLookup:g})}),e[24]=g,e[25]=c):c=e[25];let h;return e[26]!==v||e[27]!==i||e[28]!==c?(h=x.jsx(L,{title:F.audits,description:`The table below shows whether NRENs have external and/or internal audits 
+            of the information security management systems (eg. risk management and policies). 
+            Where extra information has been provided, such as whether a certified security auditor 
+            on ISP 27001 is performing the audits, it can be viewed by hovering over the indicator 
+            mark ringed in black.`,category:P.Policy,filter:v,data:i,filename:"audits_nrens_per_year",children:c}),e[26]=v,e[27]=i,e[28]=c,e[29]=h):h=e[29],h}function I(e,s){if(s.audit_specifics)return s.audit_specifics}export{K as default};
diff --git a/compendium_v2/static/Audits-DfjcC9VL.js b/compendium_v2/static/Audits-DfjcC9VL.js
deleted file mode 100644
index dd643cf070f9b6d1533b2ed93dca17b5233de768..0000000000000000000000000000000000000000
--- a/compendium_v2/static/Audits-DfjcC9VL.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import{c as Y,r as w,F as j,j as x,t as F,S as P}from"./index.js";import{u as C,g as D,n as E,D as L,F as R,f as M}from"./useData-CxftshCa.js";import{P as A}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function K(){const e=Y.c(30);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=d=>d.audits!==null,e[0]=s):s=e[0];const k=s,{filterSelection:t,setFilterSelection:u}=w.useContext(j),{data:b,years:y,nrens:N}=C("/api/standards",u,k);let i,m;if(e[1]!==b||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let d;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(d=_=>t.selectedYears.includes(_.year)&&t.selectedNrens.includes(_.nren)&&_.audits!==null,e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=d):d=e[8],i=b.filter(d);const T=D(i,"audits");m=E(T,I),e[1]=b,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=i,e[5]=m}else i=e[4],m=e[5];const g=m;let a,p;e[9]===Symbol.for("react.memo_cache_sentinel")?(a=["Yes","No"],p=new Map([[a[0],"True"],[a[1],"False"]]),e[9]=a,e[10]=p):(a=e[9],p=e[10]);const S=p;let r;e[11]!==y?(r=[...y],e[11]=y,e[12]=r):r=e[12];let l;e[13]!==N?(l=N.values(),e[13]=N,e[14]=l):l=e[14];let o;e[15]!==l?(o=[...l],e[15]=l,e[16]=o):o=e[16];let n;e[17]!==r||e[18]!==o?(n={availableYears:r,availableNrens:o},e[17]=r,e[18]=o,e[19]=n):n=e[19];let f;e[20]!==t||e[21]!==u||e[22]!==n?(f=x.jsx(R,{filterOptions:n,filterSelection:t,setFilterSelection:u,coloredYears:!0}),e[20]=t,e[21]=u,e[22]=n,e[23]=f):f=e[23];const v=f;let c;e[24]!==g?(c=x.jsx(M,{children:x.jsx(A,{columns:a,columnLookup:S,dataLookup:g})}),e[24]=g,e[25]=c):c=e[25];let h;return e[26]!==v||e[27]!==i||e[28]!==c?(h=x.jsx(L,{title:F.audits,description:`The table below shows whether NRENs have external and/or internal audits 
-            of the information security management systems (eg. risk management and policies). 
-            Where extra information has been provided, such as whether a certified security auditor 
-            on ISP 27001 is performing the audits, it can be viewed by hovering over the indicator 
-            mark ringed in black.`,category:P.Policy,filter:v,data:i,filename:"audits_nrens_per_year",children:c}),e[26]=v,e[27]=i,e[28]=c,e[29]=h):h=e[29],h}function I(e,s){if(s.audit_specifics)return s.audit_specifics}export{K as default};
diff --git a/compendium_v2/static/Automation-DzfRRQiO.js b/compendium_v2/static/Automation-Dxks_3hH.js
similarity index 77%
rename from compendium_v2/static/Automation-DzfRRQiO.js
rename to compendium_v2/static/Automation-Dxks_3hH.js
index 8979b214385063c80dd535ddde71a37bf9c424d9..9f951ea1c7797168006be33db567d871446a9039 100644
--- a/compendium_v2/static/Automation-DzfRRQiO.js
+++ b/compendium_v2/static/Automation-Dxks_3hH.js
@@ -1,4 +1,4 @@
-import{c as ee,r as te,F as se,S as ne,j as t,t as le}from"./index.js";import{u as oe,g as re,F as ie,D as ae,f as ce}from"./useData-CxftshCa.js";import{C as Q}from"./ColorPill-CXvWIfWz.js";import{T as he}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";function we(){const e=ee.c(69),{filterSelection:l,setFilterSelection:p}=te.useContext(se),{data:U,years:c,nrens:R}=oe("/api/network-automation",p);let m,f,x,j,u,g,w,y,_,h,d,b,S,Y,v;if(e[0]!==l||e[1]!==R||e[2]!==U||e[3]!==p||e[4]!==c){let A;e[20]!==l.selectedNrens||e[21]!==l.selectedYears?(A=F=>l.selectedYears.includes(F.year)&&l.selectedNrens.includes(F.nren),e[20]=l.selectedNrens,e[21]=l.selectedYears,e[22]=A):A=e[22];const V=U.filter(A),X=re(V,"network_automation");let C;e[23]!==c?(C=[...c],e[23]=c,e[24]=C):C=e[24];let T;e[25]!==R?(T=R.values(),e[25]=R,e[26]=T):T=e[26];let D;e[27]!==T?(D=[...T],e[27]=T,e[28]=D):D=e[28];let $;e[29]!==C||e[30]!==D?($={availableYears:C,availableNrens:D},e[29]=C,e[30]=D,e[31]=$):$=e[31];let L;e[32]!==l||e[33]!==p||e[34]!==$?(L=t.jsx(ie,{filterOptions:$,filterSelection:l,setFilterSelection:p,coloredYears:!0}),e[32]=l,e[33]=p,e[34]=$,e[35]=L):L=e[35];const Z=L;let M;e[36]!==c?(M=F=>c.has(F),e[36]=c,e[37]=M):M=e[37];const W=[...l.selectedYears.filter(M)].sort();x=ae,b=le["network-automation"],S=`The table below shows which NRENs have, or plan to, automate their 
+import{c as ee,r as te,F as se,S as ne,j as t,t as le}from"./index-DunMf8wQ.js";import{u as oe,g as re,F as ie,D as ae,f as ce}from"./useData-DvdT9bkc.js";import{C as Q}from"./ColorPill-CXsYrUiQ.js";import{T as he}from"./Table-BUrPWwZB.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";function we(){const e=ee.c(69),{filterSelection:l,setFilterSelection:p}=te.useContext(se),{data:U,years:c,nrens:R}=oe("/api/network-automation",p);let m,f,x,j,u,g,w,y,_,h,d,b,S,Y,v;if(e[0]!==l||e[1]!==R||e[2]!==U||e[3]!==p||e[4]!==c){let A;e[20]!==l.selectedNrens||e[21]!==l.selectedYears?(A=F=>l.selectedYears.includes(F.year)&&l.selectedNrens.includes(F.nren),e[20]=l.selectedNrens,e[21]=l.selectedYears,e[22]=A):A=e[22];const V=U.filter(A),X=re(V,"network_automation");let C;e[23]!==c?(C=[...c],e[23]=c,e[24]=C):C=e[24];let T;e[25]!==R?(T=R.values(),e[25]=R,e[26]=T):T=e[26];let D;e[27]!==T?(D=[...T],e[27]=T,e[28]=D):D=e[28];let $;e[29]!==C||e[30]!==D?($={availableYears:C,availableNrens:D},e[29]=C,e[30]=D,e[31]=$):$=e[31];let L;e[32]!==l||e[33]!==p||e[34]!==$?(L=t.jsx(ie,{filterOptions:$,filterSelection:l,setFilterSelection:p,coloredYears:!0}),e[32]=l,e[33]=p,e[34]=$,e[35]=L):L=e[35];const Z=L;let M;e[36]!==c?(M=F=>c.has(F),e[36]=c,e[37]=M):M=e[37];const W=[...l.selectedYears.filter(M)].sort();x=ae,b=le["network-automation"],S=`The table below shows which NRENs have, or plan to, automate their 
             operational processes, with specification of which processes, and the names of 
             software and tools used for this given when appropriate. 
             Where NRENs indicated that they are using automation for some network tasks, 
diff --git a/compendium_v2/static/Budget-DX8h4kEm.js b/compendium_v2/static/Budget-DX8h4kEm.js
deleted file mode 100644
index a6d6cdab2d25b04db690e8f89c42e937232df494..0000000000000000000000000000000000000000
--- a/compendium_v2/static/Budget-DX8h4kEm.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as _,r as S,F as j,j as s,t as v,S as C}from"./index.js";import{L as R}from"./index-CjWPDfDC.js";import{C as L,a as w,L as D,P as F,b as P,p as M,c as O,d as T,u as B,e as G,D as k,F as q,f as A}from"./useData-CxftshCa.js";import{g as H}from"./charthelpers-B0zLHD4s.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";L.register(w,D,F,P,M,O,T);function Q(){const e=_.c(24),{filterSelection:t,setFilterSelection:o}=S.useContext(j),{data:m,nrens:b}=B("/api/budget",o);let a,l;if(e[0]!==m||e[1]!==t.selectedNrens){let h;e[4]!==t.selectedNrens?(h=E=>t.selectedNrens.includes(E.nren),e[4]=t.selectedNrens,e[5]=h):h=e[5],a=m.filter(h),l=G(a,"budget"),e[0]=m,e[1]=t.selectedNrens,e[2]=a,e[3]=l}else a=e[2],l=e[3];const N=l;let c;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=[],e[6]=c):c=e[6];let i;e[7]!==b?(i=b.values(),e[7]=b,e[8]=i):i=e[8];let r;e[9]!==i?(r={availableYears:c,availableNrens:[...i]},e[9]=i,e[10]=r):r=e[10];let d;e[11]!==t||e[12]!==o||e[13]!==r?(d=s.jsx(q,{filterOptions:r,filterSelection:t,setFilterSelection:o}),e[11]=t,e[12]=o,e[13]=r,e[14]=d):d=e[14];const y=d;let f;e[15]===Symbol.for("react.memo_cache_sentinel")?(f=H({title:"Budget in M€",tooltipUnit:"M€",unit:"M€"}),e[15]=f):f=e[15];const x=f;let g;e[16]===Symbol.for("react.memo_cache_sentinel")?(g=s.jsx("br",{}),e[16]=g):g=e[16];let p;e[17]===Symbol.for("react.memo_cache_sentinel")?(p=s.jsxs("span",{children:["The graph shows NREN budgets per year (in millions Euro). When budgets are not per calendar year, the NREN is asked to provide figures of the budget that covers the largest part of the year, and to include any GÉANT subsidy they may receive.",g,"NRENs are free to decide how they define the part of their organisation dedicated to core NREN business, and the budget. The merging of different parts of a large NREN into a single organisation, with a single budget can lead to significant changes between years, as can receiving funding for specific time-bound projects.",s.jsx("br",{}),"Hovering over the graph data points shows the NREN budget for the year. Gaps indicate that the budget question was not filled in for a particular year."]}),e[17]=p):p=e[17];let n;e[18]!==N?(n=s.jsx(A,{children:s.jsx(R,{data:N,options:x})}),e[18]=N,e[19]=n):n=e[19];let u;return e[20]!==y||e[21]!==a||e[22]!==n?(u=s.jsx(k,{title:v.budget,description:p,category:C.Organisation,filter:y,data:a,filename:"budget_data",children:n}),e[20]=y,e[21]=a,e[22]=n,e[23]=u):u=e[23],u}export{Q as default};
diff --git a/compendium_v2/static/Budget-DaieNipA.js b/compendium_v2/static/Budget-DaieNipA.js
new file mode 100644
index 0000000000000000000000000000000000000000..82876c4bae323dd73a8bb8af54638f1bfab6eb06
--- /dev/null
+++ b/compendium_v2/static/Budget-DaieNipA.js
@@ -0,0 +1 @@
+import{c as _,r as S,F as j,j as s,t as v,S as C}from"./index-DunMf8wQ.js";import{L as R}from"./index-C2DQFzVc.js";import{C as L,a as w,L as D,P as F,b as P,p as M,c as O,d as T,u as B,e as G,D as k,F as q,f as A}from"./useData-DvdT9bkc.js";import{g as H}from"./charthelpers-vHYh9qxV.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";L.register(w,D,F,P,M,O,T);function Q(){const e=_.c(24),{filterSelection:t,setFilterSelection:o}=S.useContext(j),{data:m,nrens:b}=B("/api/budget",o);let a,l;if(e[0]!==m||e[1]!==t.selectedNrens){let h;e[4]!==t.selectedNrens?(h=E=>t.selectedNrens.includes(E.nren),e[4]=t.selectedNrens,e[5]=h):h=e[5],a=m.filter(h),l=G(a,"budget"),e[0]=m,e[1]=t.selectedNrens,e[2]=a,e[3]=l}else a=e[2],l=e[3];const N=l;let c;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=[],e[6]=c):c=e[6];let i;e[7]!==b?(i=b.values(),e[7]=b,e[8]=i):i=e[8];let r;e[9]!==i?(r={availableYears:c,availableNrens:[...i]},e[9]=i,e[10]=r):r=e[10];let d;e[11]!==t||e[12]!==o||e[13]!==r?(d=s.jsx(q,{filterOptions:r,filterSelection:t,setFilterSelection:o}),e[11]=t,e[12]=o,e[13]=r,e[14]=d):d=e[14];const y=d;let f;e[15]===Symbol.for("react.memo_cache_sentinel")?(f=H({title:"Budget in M€",tooltipUnit:"M€",unit:"M€"}),e[15]=f):f=e[15];const x=f;let g;e[16]===Symbol.for("react.memo_cache_sentinel")?(g=s.jsx("br",{}),e[16]=g):g=e[16];let p;e[17]===Symbol.for("react.memo_cache_sentinel")?(p=s.jsxs("span",{children:["The graph shows NREN budgets per year (in millions Euro). When budgets are not per calendar year, the NREN is asked to provide figures of the budget that covers the largest part of the year, and to include any GÉANT subsidy they may receive.",g,"NRENs are free to decide how they define the part of their organisation dedicated to core NREN business, and the budget. The merging of different parts of a large NREN into a single organisation, with a single budget can lead to significant changes between years, as can receiving funding for specific time-bound projects.",s.jsx("br",{}),"Hovering over the graph data points shows the NREN budget for the year. Gaps indicate that the budget question was not filled in for a particular year."]}),e[17]=p):p=e[17];let n;e[18]!==N?(n=s.jsx(A,{children:s.jsx(R,{data:N,options:x})}),e[18]=N,e[19]=n):n=e[19];let u;return e[20]!==y||e[21]!==a||e[22]!==n?(u=s.jsx(k,{title:v.budget,description:p,category:C.Organisation,filter:y,data:a,filename:"budget_data",children:n}),e[20]=y,e[21]=a,e[22]=n,e[23]=u):u=e[23],u}export{Q as default};
diff --git a/compendium_v2/static/BusinessContinuity-BNzcQNhU.js b/compendium_v2/static/BusinessContinuity-BNzcQNhU.js
new file mode 100644
index 0000000000000000000000000000000000000000..76f9e67f7806fa07a7b28c605aa7a0813baaa7f2
--- /dev/null
+++ b/compendium_v2/static/BusinessContinuity-BNzcQNhU.js
@@ -0,0 +1,5 @@
+import{c as v,r as S,F as j,j as y,t as C,S as E}from"./index-DunMf8wQ.js";import{u as F,g as P,n as D,D as L,F as R,f as M}from"./useData-DvdT9bkc.js";import{P as B}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function Q(){const e=v.c(30);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=u=>u.business_continuity_plans!==null,e[0]=s):s=e[0];const w=s,{filterSelection:t,setFilterSelection:p}=S.useContext(j),{data:b,years:_,nrens:x}=F("/api/standards",p,w);let n,d;if(e[1]!==b||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let u;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(u=k=>t.selectedYears.includes(k.year)&&t.selectedNrens.includes(k.nren)&&k.business_continuity_plans!==null,e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=u):u=e[8],n=b.filter(u);const g=P(n,"business_continuity_plans");d=D(g,O),e[1]=b,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=n,e[5]=d}else n=e[4],d=e[5];const N=d;let i,f;e[9]===Symbol.for("react.memo_cache_sentinel")?(i=["Yes","No"],f=new Map([[i[0],"True"],[i[1],"False"]]),e[9]=i,e[10]=f):(i=e[9],f=e[10]);const Y=f;let l;e[11]!==_?(l=[..._],e[11]=_,e[12]=l):l=e[12];let o;e[13]!==x?(o=x.values(),e[13]=x,e[14]=o):o=e[14];let a;e[15]!==o?(a=[...o],e[15]=o,e[16]=a):a=e[16];let r;e[17]!==l||e[18]!==a?(r={availableYears:l,availableNrens:a},e[17]=l,e[18]=a,e[19]=r):r=e[19];let m;e[20]!==t||e[21]!==p||e[22]!==r?(m=y.jsx(R,{filterOptions:r,filterSelection:t,setFilterSelection:p,coloredYears:!0}),e[20]=t,e[21]=p,e[22]=r,e[23]=m):m=e[23];const T=m;let c;e[24]!==N?(c=y.jsx(M,{children:y.jsx(B,{columns:i,columnLookup:Y,dataLookup:N})}),e[24]=N,e[25]=c):c=e[25];let h;return e[26]!==T||e[27]!==n||e[28]!==c?(h=y.jsx(L,{title:C["business-continuity"],description:`The table below shows which NRENs have business continuity plans in place to 
+            ensure business continuation and operations. Extra details about whether the NREN 
+            complies with any international standards, and whether they test the continuity plans 
+            regularly can be seen by hovering over the marker. The presence of this extra information 
+            is denoted by a black ring around the marker.`,category:E.Policy,filter:T,data:n,filename:"business_continuity_nrens_per_year",children:c}),e[26]=T,e[27]=n,e[28]=c,e[29]=h):h=e[29],h}function O(e,s){if(s.business_continuity_plans_specifics)return s.business_continuity_plans_specifics}export{Q as default};
diff --git a/compendium_v2/static/BusinessContinuity-CswNIFcO.js b/compendium_v2/static/BusinessContinuity-CswNIFcO.js
deleted file mode 100644
index 7b2eebad70a414ba0bba6e126a049a71feacf920..0000000000000000000000000000000000000000
--- a/compendium_v2/static/BusinessContinuity-CswNIFcO.js
+++ /dev/null
@@ -1,5 +0,0 @@
-import{c as v,r as S,F as j,j as y,t as C,S as E}from"./index.js";import{u as F,g as P,n as D,D as L,F as R,f as M}from"./useData-CxftshCa.js";import{P as B}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function Q(){const e=v.c(30);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=u=>u.business_continuity_plans!==null,e[0]=s):s=e[0];const w=s,{filterSelection:t,setFilterSelection:p}=S.useContext(j),{data:b,years:_,nrens:x}=F("/api/standards",p,w);let n,d;if(e[1]!==b||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let u;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(u=k=>t.selectedYears.includes(k.year)&&t.selectedNrens.includes(k.nren)&&k.business_continuity_plans!==null,e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=u):u=e[8],n=b.filter(u);const g=P(n,"business_continuity_plans");d=D(g,O),e[1]=b,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=n,e[5]=d}else n=e[4],d=e[5];const N=d;let i,f;e[9]===Symbol.for("react.memo_cache_sentinel")?(i=["Yes","No"],f=new Map([[i[0],"True"],[i[1],"False"]]),e[9]=i,e[10]=f):(i=e[9],f=e[10]);const Y=f;let l;e[11]!==_?(l=[..._],e[11]=_,e[12]=l):l=e[12];let o;e[13]!==x?(o=x.values(),e[13]=x,e[14]=o):o=e[14];let a;e[15]!==o?(a=[...o],e[15]=o,e[16]=a):a=e[16];let r;e[17]!==l||e[18]!==a?(r={availableYears:l,availableNrens:a},e[17]=l,e[18]=a,e[19]=r):r=e[19];let m;e[20]!==t||e[21]!==p||e[22]!==r?(m=y.jsx(R,{filterOptions:r,filterSelection:t,setFilterSelection:p,coloredYears:!0}),e[20]=t,e[21]=p,e[22]=r,e[23]=m):m=e[23];const T=m;let c;e[24]!==N?(c=y.jsx(M,{children:y.jsx(B,{columns:i,columnLookup:Y,dataLookup:N})}),e[24]=N,e[25]=c):c=e[25];let h;return e[26]!==T||e[27]!==n||e[28]!==c?(h=y.jsx(L,{title:C["business-continuity"],description:`The table below shows which NRENs have business continuity plans in place to 
-            ensure business continuation and operations. Extra details about whether the NREN 
-            complies with any international standards, and whether they test the continuity plans 
-            regularly can be seen by hovering over the marker. The presence of this extra information 
-            is denoted by a black ring around the marker.`,category:E.Policy,filter:T,data:n,filename:"business_continuity_nrens_per_year",children:c}),e[26]=T,e[27]=n,e[28]=c,e[29]=h):h=e[29],h}function O(e,s){if(s.business_continuity_plans_specifics)return s.business_continuity_plans_specifics}export{Q as default};
diff --git a/compendium_v2/static/CapacityCoreIP-DiIZVI-s.js b/compendium_v2/static/CapacityCoreIP-DiIZVI-s.js
new file mode 100644
index 0000000000000000000000000000000000000000..e8a3daaab33349ec89986fe147939401d98e718c
--- /dev/null
+++ b/compendium_v2/static/CapacityCoreIP-DiIZVI-s.js
@@ -0,0 +1,3 @@
+import{c as P,r as Y,F as I,j as y,S as G,t as R}from"./index-DunMf8wQ.js";import{B as L}from"./index-C2DQFzVc.js";import{C as O,a as $,L as A,B as M,p as T,c as U,d as q,u as z,o as H,D as J,F as K,f as Q}from"./useData-DvdT9bkc.js";import{p as V}from"./chartjs-plugin-datalabels.esm-Bb0FwIXw.js";import{a as W}from"./charthelpers-vHYh9qxV.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";O.register($,A,M,T,U,q);function oe(){const e=P.c(39);let b;e[0]===Symbol.for("react.memo_cache_sentinel")?(b=n=>n.typical_backbone_capacity!=null,e[0]=b):b=e[0];const B=b,{filterSelection:t,setFilterSelection:s}=Y.useContext(I),{data:N,years:d,nrens:u}=z("/api/capacity",s,B);let i,l,a,g;if(e[1]!==N||e[2]!==t||e[3]!==u||e[4]!==s||e[5]!==d){let n;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(n=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren)&&B(j),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=n):n=e[12],a=N.filter(n),i=H(a,"typical_backbone_capacity","Backbone IP Capacity");let p;e[13]!==d?(p=[...d],e[13]=d,e[14]=p):p=e[14];let f;e[15]!==u?(f=u.values(),e[15]=u,e[16]=f):f=e[16];let m;e[17]!==f?(m=[...f],e[17]=f,e[18]=m):m=e[18];let h;e[19]!==p||e[20]!==m?(h={availableYears:p,availableNrens:m},e[19]=p,e[20]=m,e[21]=h):h=e[21];let S;e[22]!==t||e[23]!==s||e[24]!==h?(S=y.jsx(K,{filterOptions:h,filterSelection:t,setFilterSelection:s}),e[22]=t,e[23]=s,e[24]=h,e[25]=S):S=e[25],l=S,g=Array.from(new Set(a.map(X))),e[1]=N,e[2]=t,e[3]=u,e[4]=s,e[5]=d,e[6]=i,e[7]=l,e[8]=a,e[9]=g}else i=e[6],l=e[7],a=e[8],g=e[9];const w=g.length,D=Math.max(w*t.selectedYears.length*1.5+5,50),v=R["capacity-core-ip"],E=`The graph below shows the typical core usable backbone IP capacity of 
+    NREN networks, expressed in Gbit/s. It refers to the circuit capacity, not the traffic over 
+    the network.`;let _;e[26]===Symbol.for("react.memo_cache_sentinel")?(_=W({title:v,tooltipUnit:"Gbit/s",unit:"Gbit/s"}),e[26]=_):_=e[26];const F=_,k=`${D}rem`;let r;e[27]!==k?(r={height:k},e[27]=k,e[28]=r):r=e[28];let x;e[29]===Symbol.for("react.memo_cache_sentinel")?(x=[V],e[29]=x):x=e[29];let c;e[30]!==i?(c=y.jsx(L,{data:i,options:F,plugins:x}),e[30]=i,e[31]=c):c=e[31];let o;e[32]!==r||e[33]!==c?(o=y.jsx(Q,{children:y.jsx("div",{className:"chart-container",style:r,children:c})}),e[32]=r,e[33]=c,e[34]=o):o=e[34];let C;return e[35]!==l||e[36]!==a||e[37]!==o?(C=y.jsx(J,{title:v,description:E,category:G.Network,filter:l,data:a,filename:"capacity_core_ip",children:o}),e[35]=l,e[36]=a,e[37]=o,e[38]=C):C=e[38],C}function X(e){return e.nren}export{oe as default};
diff --git a/compendium_v2/static/CapacityCoreIP-P2rbPvQY.js b/compendium_v2/static/CapacityCoreIP-P2rbPvQY.js
deleted file mode 100644
index 68ab16b7e4a7b491ee8aa151ebb09882549144bd..0000000000000000000000000000000000000000
--- a/compendium_v2/static/CapacityCoreIP-P2rbPvQY.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import{c as P,r as Y,F as I,j as y,S as G,t as R}from"./index.js";import{B as L}from"./index-CjWPDfDC.js";import{C as O,a as $,L as A,B as M,p as T,c as U,d as q,u as z,o as H,D as J,F as K,f as Q}from"./useData-CxftshCa.js";import{p as V}from"./chartjs-plugin-datalabels.esm-CjG-nxnq.js";import{a as W}from"./charthelpers-B0zLHD4s.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";O.register($,A,M,T,U,q);function oe(){const e=P.c(39);let b;e[0]===Symbol.for("react.memo_cache_sentinel")?(b=n=>n.typical_backbone_capacity!=null,e[0]=b):b=e[0];const B=b,{filterSelection:t,setFilterSelection:s}=Y.useContext(I),{data:N,years:d,nrens:u}=z("/api/capacity",s,B);let i,l,a,g;if(e[1]!==N||e[2]!==t||e[3]!==u||e[4]!==s||e[5]!==d){let n;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(n=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren)&&B(j),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=n):n=e[12],a=N.filter(n),i=H(a,"typical_backbone_capacity","Backbone IP Capacity");let p;e[13]!==d?(p=[...d],e[13]=d,e[14]=p):p=e[14];let f;e[15]!==u?(f=u.values(),e[15]=u,e[16]=f):f=e[16];let m;e[17]!==f?(m=[...f],e[17]=f,e[18]=m):m=e[18];let h;e[19]!==p||e[20]!==m?(h={availableYears:p,availableNrens:m},e[19]=p,e[20]=m,e[21]=h):h=e[21];let S;e[22]!==t||e[23]!==s||e[24]!==h?(S=y.jsx(K,{filterOptions:h,filterSelection:t,setFilterSelection:s}),e[22]=t,e[23]=s,e[24]=h,e[25]=S):S=e[25],l=S,g=Array.from(new Set(a.map(X))),e[1]=N,e[2]=t,e[3]=u,e[4]=s,e[5]=d,e[6]=i,e[7]=l,e[8]=a,e[9]=g}else i=e[6],l=e[7],a=e[8],g=e[9];const w=g.length,D=Math.max(w*t.selectedYears.length*1.5+5,50),v=R["capacity-core-ip"],E=`The graph below shows the typical core usable backbone IP capacity of 
-    NREN networks, expressed in Gbit/s. It refers to the circuit capacity, not the traffic over 
-    the network.`;let _;e[26]===Symbol.for("react.memo_cache_sentinel")?(_=W({title:v,tooltipUnit:"Gbit/s",unit:"Gbit/s"}),e[26]=_):_=e[26];const F=_,k=`${D}rem`;let r;e[27]!==k?(r={height:k},e[27]=k,e[28]=r):r=e[28];let x;e[29]===Symbol.for("react.memo_cache_sentinel")?(x=[V],e[29]=x):x=e[29];let c;e[30]!==i?(c=y.jsx(L,{data:i,options:F,plugins:x}),e[30]=i,e[31]=c):c=e[31];let o;e[32]!==r||e[33]!==c?(o=y.jsx(Q,{children:y.jsx("div",{className:"chart-container",style:r,children:c})}),e[32]=r,e[33]=c,e[34]=o):o=e[34];let C;return e[35]!==l||e[36]!==a||e[37]!==o?(C=y.jsx(J,{title:v,description:E,category:G.Network,filter:l,data:a,filename:"capacity_core_ip",children:o}),e[35]=l,e[36]=a,e[37]=o,e[38]=C):C=e[38],C}function X(e){return e.nren}export{oe as default};
diff --git a/compendium_v2/static/CapacityLargestLink-CGhxu47M.js b/compendium_v2/static/CapacityLargestLink-CGhxu47M.js
deleted file mode 100644
index f42b477e054040f32bf2b9b505d5020388132106..0000000000000000000000000000000000000000
--- a/compendium_v2/static/CapacityLargestLink-CGhxu47M.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import{c as L,r as Y,F as G,j as u,S as R,t as O}from"./index.js";import{B as P}from"./index-CjWPDfDC.js";import{C as $,a as A,L as M,B as U,p as W,c as q,d as z,u as H,o as I,D as J,F as K,f as Q}from"./useData-CxftshCa.js";import{p as T}from"./chartjs-plugin-datalabels.esm-CjG-nxnq.js";import{a as V}from"./charthelpers-B0zLHD4s.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";$.register(A,M,U,W,q,z);function ce(){const e=L.c(39);let y;e[0]===Symbol.for("react.memo_cache_sentinel")?(y=o=>o.largest_link_capacity!=null,e[0]=y):y=e[0];const j=y,{filterSelection:t,setFilterSelection:s}=Y.useContext(G),{data:b,years:h,nrens:g}=H("/api/capacity",s,j);let i,l,a,_;if(e[1]!==b||e[2]!==t||e[3]!==g||e[4]!==s||e[5]!==h){let o;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(o=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren)&&j(v),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=o):o=e[12],a=b.filter(o),i=I(a,"largest_link_capacity","Link capacity");let p;e[13]!==h?(p=[...h],e[13]=h,e[14]=p):p=e[14];let f;e[15]!==g?(f=g.values(),e[15]=g,e[16]=f):f=e[16];let m;e[17]!==f?(m=[...f],e[17]=f,e[18]=m):m=e[18];let d;e[19]!==p||e[20]!==m?(d={availableYears:p,availableNrens:m},e[19]=p,e[20]=m,e[21]=d):d=e[21];let S;e[22]!==t||e[23]!==s||e[24]!==d?(S=u.jsx(K,{filterOptions:d,filterSelection:t,setFilterSelection:s}),e[22]=t,e[23]=s,e[24]=d,e[25]=S):S=e[25],l=S,_=Array.from(new Set(a.map(X))),e[1]=b,e[2]=t,e[3]=g,e[4]=s,e[5]=h,e[6]=i,e[7]=l,e[8]=a,e[9]=_}else i=e[6],l=e[7],a=e[8],_=e[9];const B=_.length,D=Math.max(B*t.selectedYears.length*1.5+5,50),w=O["capacity-largest-link"],E=`NRENs were asked to give the capacity (in Gbits/s) of the largest link in 
-    their network used for internet traffic (either shared or dedicated). While they were invited to 
-    provide the sum of aggregated links, backup capacity was not to be included.`;let k;e[26]===Symbol.for("react.memo_cache_sentinel")?(k=V({title:w,tooltipUnit:"Gbit/s",unit:"Gbit/s"}),e[26]=k):k=e[26];const F=k,N=`${D}rem`;let r;e[27]!==N?(r={height:N},e[27]=N,e[28]=r):r=e[28];let x;e[29]===Symbol.for("react.memo_cache_sentinel")?(x=[T],e[29]=x):x=e[29];let n;e[30]!==i?(n=u.jsx(P,{data:i,options:F,plugins:x}),e[30]=i,e[31]=n):n=e[31];let c;e[32]!==r||e[33]!==n?(c=u.jsx(Q,{children:u.jsx("div",{className:"chart-container",style:r,children:n})}),e[32]=r,e[33]=n,e[34]=c):c=e[34];let C;return e[35]!==l||e[36]!==a||e[37]!==c?(C=u.jsx(J,{title:w,description:E,category:R.Network,filter:l,data:a,filename:"capacity_largest_link",children:c}),e[35]=l,e[36]=a,e[37]=c,e[38]=C):C=e[38],C}function X(e){return e.nren}export{ce as default};
diff --git a/compendium_v2/static/CapacityLargestLink-xwsd4prK.js b/compendium_v2/static/CapacityLargestLink-xwsd4prK.js
new file mode 100644
index 0000000000000000000000000000000000000000..0cc5e7b88cef34919decd64831b87937fd2a70fd
--- /dev/null
+++ b/compendium_v2/static/CapacityLargestLink-xwsd4prK.js
@@ -0,0 +1,3 @@
+import{c as L,r as Y,F as G,j as u,S as R,t as O}from"./index-DunMf8wQ.js";import{B as P}from"./index-C2DQFzVc.js";import{C as $,a as A,L as M,B as U,p as W,c as q,d as z,u as H,o as I,D as J,F as K,f as Q}from"./useData-DvdT9bkc.js";import{p as T}from"./chartjs-plugin-datalabels.esm-Bb0FwIXw.js";import{a as V}from"./charthelpers-vHYh9qxV.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";$.register(A,M,U,W,q,z);function ce(){const e=L.c(39);let y;e[0]===Symbol.for("react.memo_cache_sentinel")?(y=o=>o.largest_link_capacity!=null,e[0]=y):y=e[0];const j=y,{filterSelection:t,setFilterSelection:s}=Y.useContext(G),{data:b,years:h,nrens:g}=H("/api/capacity",s,j);let i,l,a,_;if(e[1]!==b||e[2]!==t||e[3]!==g||e[4]!==s||e[5]!==h){let o;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(o=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren)&&j(v),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=o):o=e[12],a=b.filter(o),i=I(a,"largest_link_capacity","Link capacity");let p;e[13]!==h?(p=[...h],e[13]=h,e[14]=p):p=e[14];let f;e[15]!==g?(f=g.values(),e[15]=g,e[16]=f):f=e[16];let m;e[17]!==f?(m=[...f],e[17]=f,e[18]=m):m=e[18];let d;e[19]!==p||e[20]!==m?(d={availableYears:p,availableNrens:m},e[19]=p,e[20]=m,e[21]=d):d=e[21];let S;e[22]!==t||e[23]!==s||e[24]!==d?(S=u.jsx(K,{filterOptions:d,filterSelection:t,setFilterSelection:s}),e[22]=t,e[23]=s,e[24]=d,e[25]=S):S=e[25],l=S,_=Array.from(new Set(a.map(X))),e[1]=b,e[2]=t,e[3]=g,e[4]=s,e[5]=h,e[6]=i,e[7]=l,e[8]=a,e[9]=_}else i=e[6],l=e[7],a=e[8],_=e[9];const B=_.length,D=Math.max(B*t.selectedYears.length*1.5+5,50),w=O["capacity-largest-link"],E=`NRENs were asked to give the capacity (in Gbits/s) of the largest link in 
+    their network used for internet traffic (either shared or dedicated). While they were invited to 
+    provide the sum of aggregated links, backup capacity was not to be included.`;let k;e[26]===Symbol.for("react.memo_cache_sentinel")?(k=V({title:w,tooltipUnit:"Gbit/s",unit:"Gbit/s"}),e[26]=k):k=e[26];const F=k,N=`${D}rem`;let r;e[27]!==N?(r={height:N},e[27]=N,e[28]=r):r=e[28];let x;e[29]===Symbol.for("react.memo_cache_sentinel")?(x=[T],e[29]=x):x=e[29];let n;e[30]!==i?(n=u.jsx(P,{data:i,options:F,plugins:x}),e[30]=i,e[31]=n):n=e[31];let c;e[32]!==r||e[33]!==n?(c=u.jsx(Q,{children:u.jsx("div",{className:"chart-container",style:r,children:n})}),e[32]=r,e[33]=n,e[34]=c):c=e[34];let C;return e[35]!==l||e[36]!==a||e[37]!==c?(C=u.jsx(J,{title:w,description:E,category:R.Network,filter:l,data:a,filename:"capacity_largest_link",children:c}),e[35]=l,e[36]=a,e[37]=c,e[38]=C):C=e[38],C}function X(e){return e.nren}export{ce as default};
diff --git a/compendium_v2/static/CentralProcurement-C6FG3PH8.js b/compendium_v2/static/CentralProcurement-C6FG3PH8.js
new file mode 100644
index 0000000000000000000000000000000000000000..d1ae1476ed64c0c8ea8a27ed91f1c4332a52780a
--- /dev/null
+++ b/compendium_v2/static/CentralProcurement-C6FG3PH8.js
@@ -0,0 +1 @@
+import{c as Y,r as I,F as T,j as h,S as $,t as L}from"./index-DunMf8wQ.js";import{C as O,a as V,L as k,B as A,p as M,c as U,d as Z,u as q,o as z,D as G,F as H,f as J}from"./useData-DvdT9bkc.js";import{p as K}from"./chartjs-plugin-datalabels.esm-Bb0FwIXw.js";import{B as Q}from"./index-C2DQFzVc.js";import{a as W}from"./charthelpers-vHYh9qxV.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";O.register(V,k,A,M,U,Z);function ce(){const e=Y.c(40);let g;e[0]===Symbol.for("react.memo_cache_sentinel")?(g=s=>s.amount!=null,e[0]=g):g=e[0];const v=g,{filterSelection:t,setFilterSelection:l}=I.useContext(T),{data:w,years:d,nrens:y}=q("/api/central-procurement",l,v);let o,n,r,x;if(e[1]!==w||e[2]!==t||e[3]!==y||e[4]!==l||e[5]!==d){let s;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(s=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=s):s=e[12],r=w.filter(s),o=z(r,"amount","Procurement Value");let a;e[13]!==d?(a=[...d],e[13]=d,e[14]=a):a=e[14];let f;e[15]!==y?(f=y.values(),e[15]=y,e[16]=f):f=e[16];let u;e[17]!==f?(u=[...f],e[17]=f,e[18]=u):u=e[18];let p;e[19]!==a||e[20]!==u?(p={availableYears:a,availableNrens:u},e[19]=a,e[20]=u,e[21]=p):p=e[21];let b;e[22]!==t||e[23]!==l||e[24]!==p?(b=h.jsx(H,{filterOptions:p,filterSelection:t,setFilterSelection:l}),e[22]=t,e[23]=l,e[24]=p,e[25]=b):b=e[25],n=b,x=Array.from(new Set(r.map(X))),e[1]=w,e[2]=t,e[3]=y,e[4]=l,e[5]=d,e[6]=o,e[7]=n,e[8]=r,e[9]=x}else o=e[6],n=e[7],r=e[8],x=e[9];const P=x.length,B=Math.max(P*t.selectedYears.length*1.5+5,50),D=L["central-procurement"];let N;e[26]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:"Some NRENs centrally procure software for their customers. The graph below shows the total value (in Euro) of software procured in the previous year by the NRENs. Please note you can only see the select NRENs which carry out this type of procurement. Those who do not offer this are not selectable."}),e[26]=N):N=e[26];const F=N;let S;e[27]===Symbol.for("react.memo_cache_sentinel")?(S=W({title:"Software Procurement Value",valueTransform(s){return`${new Intl.NumberFormat(void 0,{style:"currency",currency:"EUR",trailingZeroDisplay:"stripIfInteger"}).format(s)}`}}),e[27]=S):S=e[27];const R=S,E=`${B}rem`;let i;e[28]!==E?(i={height:E},e[28]=E,e[29]=i):i=e[29];let _;e[30]===Symbol.for("react.memo_cache_sentinel")?(_=[K],e[30]=_):_=e[30];let c;e[31]!==o?(c=h.jsx(Q,{data:o,options:R,plugins:_}),e[31]=o,e[32]=c):c=e[32];let m;e[33]!==i||e[34]!==c?(m=h.jsx(J,{children:h.jsx("div",{className:"chart-container",style:i,children:c})}),e[33]=i,e[34]=c,e[35]=m):m=e[35];let C;return e[36]!==n||e[37]!==r||e[38]!==m?(C=h.jsx(G,{title:D,description:F,category:$.Policy,filter:n,data:r,filename:"central_procurement",children:m}),e[36]=n,e[37]=r,e[38]=m,e[39]=C):C=e[39],C}function X(e){return e.nren}export{ce as default};
diff --git a/compendium_v2/static/CentralProcurement-_z44vsb4.js b/compendium_v2/static/CentralProcurement-_z44vsb4.js
deleted file mode 100644
index ede8176ed7d472def42cfdc541584c6052d1d029..0000000000000000000000000000000000000000
--- a/compendium_v2/static/CentralProcurement-_z44vsb4.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as Y,r as I,F as T,j as h,S as $,t as L}from"./index.js";import{C as O,a as V,L as k,B as A,p as M,c as U,d as Z,u as q,o as z,D as G,F as H,f as J}from"./useData-CxftshCa.js";import{p as K}from"./chartjs-plugin-datalabels.esm-CjG-nxnq.js";import{B as Q}from"./index-CjWPDfDC.js";import{a as W}from"./charthelpers-B0zLHD4s.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";O.register(V,k,A,M,U,Z);function ce(){const e=Y.c(40);let g;e[0]===Symbol.for("react.memo_cache_sentinel")?(g=s=>s.amount!=null,e[0]=g):g=e[0];const v=g,{filterSelection:t,setFilterSelection:l}=I.useContext(T),{data:w,years:d,nrens:y}=q("/api/central-procurement",l,v);let o,n,r,x;if(e[1]!==w||e[2]!==t||e[3]!==y||e[4]!==l||e[5]!==d){let s;e[10]!==t.selectedNrens||e[11]!==t.selectedYears?(s=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren),e[10]=t.selectedNrens,e[11]=t.selectedYears,e[12]=s):s=e[12],r=w.filter(s),o=z(r,"amount","Procurement Value");let a;e[13]!==d?(a=[...d],e[13]=d,e[14]=a):a=e[14];let f;e[15]!==y?(f=y.values(),e[15]=y,e[16]=f):f=e[16];let u;e[17]!==f?(u=[...f],e[17]=f,e[18]=u):u=e[18];let p;e[19]!==a||e[20]!==u?(p={availableYears:a,availableNrens:u},e[19]=a,e[20]=u,e[21]=p):p=e[21];let b;e[22]!==t||e[23]!==l||e[24]!==p?(b=h.jsx(H,{filterOptions:p,filterSelection:t,setFilterSelection:l}),e[22]=t,e[23]=l,e[24]=p,e[25]=b):b=e[25],n=b,x=Array.from(new Set(r.map(X))),e[1]=w,e[2]=t,e[3]=y,e[4]=l,e[5]=d,e[6]=o,e[7]=n,e[8]=r,e[9]=x}else o=e[6],n=e[7],r=e[8],x=e[9];const P=x.length,B=Math.max(P*t.selectedYears.length*1.5+5,50),D=L["central-procurement"];let N;e[26]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:"Some NRENs centrally procure software for their customers. The graph below shows the total value (in Euro) of software procured in the previous year by the NRENs. Please note you can only see the select NRENs which carry out this type of procurement. Those who do not offer this are not selectable."}),e[26]=N):N=e[26];const F=N;let S;e[27]===Symbol.for("react.memo_cache_sentinel")?(S=W({title:"Software Procurement Value",valueTransform(s){return`${new Intl.NumberFormat(void 0,{style:"currency",currency:"EUR",trailingZeroDisplay:"stripIfInteger"}).format(s)}`}}),e[27]=S):S=e[27];const R=S,E=`${B}rem`;let i;e[28]!==E?(i={height:E},e[28]=E,e[29]=i):i=e[29];let _;e[30]===Symbol.for("react.memo_cache_sentinel")?(_=[K],e[30]=_):_=e[30];let c;e[31]!==o?(c=h.jsx(Q,{data:o,options:R,plugins:_}),e[31]=o,e[32]=c):c=e[32];let m;e[33]!==i||e[34]!==c?(m=h.jsx(J,{children:h.jsx("div",{className:"chart-container",style:i,children:c})}),e[33]=i,e[34]=c,e[35]=m):m=e[35];let C;return e[36]!==n||e[37]!==r||e[38]!==m?(C=h.jsx(G,{title:D,description:F,category:$.Policy,filter:n,data:r,filename:"central_procurement",children:m}),e[36]=n,e[37]=r,e[38]=m,e[39]=C):C=e[39],C}function X(e){return e.nren}export{ce as default};
diff --git a/compendium_v2/static/CertificateProvider-CpWnMPbq.js b/compendium_v2/static/CertificateProvider-CpWnMPbq.js
deleted file mode 100644
index fd53cd70634086e944be5654ff1b33be2139b71c..0000000000000000000000000000000000000000
--- a/compendium_v2/static/CertificateProvider-CpWnMPbq.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as _,r as Y,F as j,j as S,t as k,S as D}from"./index.js";import{u as E,g as P,D as T,F as w,f as F}from"./useData-CxftshCa.js";import{P as L}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function G(){const e=_.c(29),{filterSelection:t,setFilterSelection:c}=Y.useContext(j),{data:N,years:x,nrens:b}=E("/api/certificate-providers",c);let s,n;if(e[0]!==N||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=g=>t.selectedYears.includes(g.year)&&t.selectedNrens.includes(g.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=N.filter(u),n=P(s,"provider_names"),e[0]=N,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=n}else s=e[3],n=e[4];const v=n;let r;e[8]!==x?(r=[...x],e[8]=x,e[9]=r):r=e[9];let i;e[10]!==b?(i=b.values(),e[10]=b,e[11]=i):i=e[11];let l;e[12]!==i?(l=[...i],e[12]=i,e[13]=l):l=e[13];let o;e[14]!==r||e[15]!==l?(o={availableYears:r,availableNrens:l},e[14]=r,e[15]=l,e[16]=o):o=e[16];let f;e[17]!==t||e[18]!==c||e[19]!==o?(f=S.jsx(w,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=o,e[20]=f):f=e[20];const C=f;let d;e[21]===Symbol.for("react.memo_cache_sentinel")?(d=["TCS","Digicert","Sectigo (outside of TCS)","Let's Encrypt","Entrust Datacard"],e[21]=d):d=e[21];const h=d;let p;e[22]===Symbol.for("react.memo_cache_sentinel")?(p=new Map([["Sectigo (outside of TCS)","Sectigo"]]),e[22]=p):p=e[22];const y=p;let a;e[23]!==v?(a=S.jsx(F,{children:S.jsx(L,{columns:h,dataLookup:v,circle:!0,columnLookup:y})}),e[23]=v,e[24]=a):a=e[24];let m;return e[25]!==C||e[26]!==s||e[27]!==a?(m=S.jsx(T,{title:k["certificate-provider"],description:"The table below shows the kinds of Network Certificate Providers used by NRENs.",category:D.Network,filter:C,data:s,filename:"certificate_provider_nrens_per_year",children:a}),e[25]=C,e[26]=s,e[27]=a,e[28]=m):m=e[28],m}export{G as default};
diff --git a/compendium_v2/static/CertificateProvider-D9Qr_R-E.js b/compendium_v2/static/CertificateProvider-D9Qr_R-E.js
new file mode 100644
index 0000000000000000000000000000000000000000..42313a2f9dc74fb02a7e73a903059c7a10a699c8
--- /dev/null
+++ b/compendium_v2/static/CertificateProvider-D9Qr_R-E.js
@@ -0,0 +1 @@
+import{c as _,r as Y,F as j,j as S,t as k,S as D}from"./index-DunMf8wQ.js";import{u as E,g as P,D as T,F as w,f as F}from"./useData-DvdT9bkc.js";import{P as L}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function G(){const e=_.c(29),{filterSelection:t,setFilterSelection:c}=Y.useContext(j),{data:N,years:x,nrens:b}=E("/api/certificate-providers",c);let s,n;if(e[0]!==N||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=g=>t.selectedYears.includes(g.year)&&t.selectedNrens.includes(g.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=N.filter(u),n=P(s,"provider_names"),e[0]=N,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=n}else s=e[3],n=e[4];const v=n;let r;e[8]!==x?(r=[...x],e[8]=x,e[9]=r):r=e[9];let i;e[10]!==b?(i=b.values(),e[10]=b,e[11]=i):i=e[11];let l;e[12]!==i?(l=[...i],e[12]=i,e[13]=l):l=e[13];let o;e[14]!==r||e[15]!==l?(o={availableYears:r,availableNrens:l},e[14]=r,e[15]=l,e[16]=o):o=e[16];let f;e[17]!==t||e[18]!==c||e[19]!==o?(f=S.jsx(w,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=o,e[20]=f):f=e[20];const C=f;let d;e[21]===Symbol.for("react.memo_cache_sentinel")?(d=["TCS","Digicert","Sectigo (outside of TCS)","Let's Encrypt","Entrust Datacard"],e[21]=d):d=e[21];const h=d;let p;e[22]===Symbol.for("react.memo_cache_sentinel")?(p=new Map([["Sectigo (outside of TCS)","Sectigo"]]),e[22]=p):p=e[22];const y=p;let a;e[23]!==v?(a=S.jsx(F,{children:S.jsx(L,{columns:h,dataLookup:v,circle:!0,columnLookup:y})}),e[23]=v,e[24]=a):a=e[24];let m;return e[25]!==C||e[26]!==s||e[27]!==a?(m=S.jsx(T,{title:k["certificate-provider"],description:"The table below shows the kinds of Network Certificate Providers used by NRENs.",category:D.Network,filter:C,data:s,filename:"certificate_provider_nrens_per_year",children:a}),e[25]=C,e[26]=s,e[27]=a,e[28]=m):m=e[28],m}export{G as default};
diff --git a/compendium_v2/static/ChargingStructure-BiXVfonj.js b/compendium_v2/static/ChargingStructure-BiXVfonj.js
deleted file mode 100644
index cde4fb9fc11a5c1d7b36b5de44d04d4de46e42dc..0000000000000000000000000000000000000000
--- a/compendium_v2/static/ChargingStructure-BiXVfonj.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import{c as Y,r as j,F as v,j as p,t as E,S as F}from"./index.js";import{u as D,g as R,D as k,F as w,f as P}from"./useData-CxftshCa.js";import{P as T}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function G(){const e=Y.c(29),C=L,{filterSelection:t,setFilterSelection:c}=j.useContext(v),{data:g,years:b,nrens:N}=D("/api/charging",c,C);let a,f;if(e[0]!==g||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],a=g.filter(m),f=R(a,"fee_type"),e[0]=g,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=a,e[4]=f}else a=e[3],f=e[4];const _=f;let r;e[8]!==b?(r=[...b],e[8]=b,e[9]=r):r=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let l;e[12]!==i?(l=[...i],e[12]=i,e[13]=l):l=e[13];let n;e[14]!==r||e[15]!==l?(n={availableYears:r,availableNrens:l},e[14]=r,e[15]=l,e[16]=n):n=e[16];let u;e[17]!==t||e[18]!==c||e[19]!==n?(u=p.jsx(w,{filterOptions:n,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=n,e[20]=u):u=e[20];const y=u;let s,d;e[21]===Symbol.for("react.memo_cache_sentinel")?(s=["Flat fee based on bandwidth","Usage based fee","Combination flat fee & usage basedfee","No Direct Charge","Other"],d=new Map([[s[0],"flat_fee"],[s[1],"usage_based_fee"],[s[2],"combination"],[s[3],"no_charge"],[s[4],"other"]]),e[21]=s,e[22]=d):(s=e[21],d=e[22]);const S=d;let o;e[23]!==_?(o=p.jsx(P,{children:p.jsx(T,{columns:s,dataLookup:_,columnLookup:S})}),e[23]=_,e[24]=o):o=e[24];let h;return e[25]!==y||e[26]!==a||e[27]!==o?(h=p.jsx(k,{title:E.charging,description:`The charging structure is the way in which NRENs charge their customers for the services they provide.
-         The charging structure can be based on a flat fee, usage based fee, a combination of both, or no direct charge. 
-         By selecting multiple years and NRENs, the table can be used to compare the charging structure of NRENs.`,category:F.Organisation,filter:y,data:a,filename:"charging_mechanism_of_nrens_per_year",children:o}),e[25]=y,e[26]=a,e[27]=o,e[28]=h):h=e[28],h}function L(e){return e.fee_type!=null}export{G as default};
diff --git a/compendium_v2/static/ChargingStructure-DXabP1VZ.js b/compendium_v2/static/ChargingStructure-DXabP1VZ.js
new file mode 100644
index 0000000000000000000000000000000000000000..81d722ad5eb309fcb6708e0facecbb9935981edb
--- /dev/null
+++ b/compendium_v2/static/ChargingStructure-DXabP1VZ.js
@@ -0,0 +1,3 @@
+import{c as Y,r as j,F as v,j as p,t as E,S as F}from"./index-DunMf8wQ.js";import{u as D,g as R,D as k,F as w,f as P}from"./useData-DvdT9bkc.js";import{P as T}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function G(){const e=Y.c(29),C=L,{filterSelection:t,setFilterSelection:c}=j.useContext(v),{data:g,years:b,nrens:N}=D("/api/charging",c,C);let a,f;if(e[0]!==g||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],a=g.filter(m),f=R(a,"fee_type"),e[0]=g,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=a,e[4]=f}else a=e[3],f=e[4];const _=f;let r;e[8]!==b?(r=[...b],e[8]=b,e[9]=r):r=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let l;e[12]!==i?(l=[...i],e[12]=i,e[13]=l):l=e[13];let n;e[14]!==r||e[15]!==l?(n={availableYears:r,availableNrens:l},e[14]=r,e[15]=l,e[16]=n):n=e[16];let u;e[17]!==t||e[18]!==c||e[19]!==n?(u=p.jsx(w,{filterOptions:n,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=n,e[20]=u):u=e[20];const y=u;let s,d;e[21]===Symbol.for("react.memo_cache_sentinel")?(s=["Flat fee based on bandwidth","Usage based fee","Combination flat fee & usage basedfee","No Direct Charge","Other"],d=new Map([[s[0],"flat_fee"],[s[1],"usage_based_fee"],[s[2],"combination"],[s[3],"no_charge"],[s[4],"other"]]),e[21]=s,e[22]=d):(s=e[21],d=e[22]);const S=d;let o;e[23]!==_?(o=p.jsx(P,{children:p.jsx(T,{columns:s,dataLookup:_,columnLookup:S})}),e[23]=_,e[24]=o):o=e[24];let h;return e[25]!==y||e[26]!==a||e[27]!==o?(h=p.jsx(k,{title:E.charging,description:`The charging structure is the way in which NRENs charge their customers for the services they provide.
+         The charging structure can be based on a flat fee, usage based fee, a combination of both, or no direct charge. 
+         By selecting multiple years and NRENs, the table can be used to compare the charging structure of NRENs.`,category:F.Organisation,filter:y,data:a,filename:"charging_mechanism_of_nrens_per_year",children:o}),e[25]=y,e[26]=a,e[27]=o,e[28]=h):h=e[28],h}function L(e){return e.fee_type!=null}export{G as default};
diff --git a/compendium_v2/static/ColorPill-CXsYrUiQ.js b/compendium_v2/static/ColorPill-CXsYrUiQ.js
new file mode 100644
index 0000000000000000000000000000000000000000..105bf934f15c02e7eddca215a9255fab34d93990
--- /dev/null
+++ b/compendium_v2/static/ColorPill-CXsYrUiQ.js
@@ -0,0 +1 @@
+import{c as m,j as a}from"./index-DunMf8wQ.js";function f(p){const t=m.c(10),{year:e,active:s,tooltip:i,rounded:c}=p,n=(c===void 0?!1:c)?"30px":"75px";let d;t[0]!==n?(d={width:n,height:"30px",margin:"2px"},t[0]=n,t[1]=d):d=t[1];const l=d;let o;t[2]!==s||t[3]!==l||t[4]!==i||t[5]!==e?(o=s&&i?a.jsx("div",{className:`rounded-pill bg-color-of-the-year-${e%9} bottom-tooltip pill-shadow`,style:l,"data-description":`${e}: ${i}`}):s?a.jsx("div",{className:`rounded-pill bg-color-of-the-year-${e%9} bottom-tooltip-small`,style:l,"data-description":e}):a.jsx("div",{className:"rounded-pill bg-color-of-the-year-blank",style:l}),t[2]=s,t[3]=l,t[4]=i,t[5]=e,t[6]=o):o=t[6];let r;return t[7]!==o||t[8]!==e?(r=a.jsx("div",{className:"d-inline-block",children:o},e),t[7]=o,t[8]=e,t[9]=r):r=t[9],r}export{f as C};
diff --git a/compendium_v2/static/ColorPill-CXvWIfWz.js b/compendium_v2/static/ColorPill-CXvWIfWz.js
deleted file mode 100644
index 8a6c0af388c700b170e37c55a5cc5e009fc7a7f7..0000000000000000000000000000000000000000
--- a/compendium_v2/static/ColorPill-CXvWIfWz.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as m,j as a}from"./index.js";function f(p){const t=m.c(10),{year:e,active:s,tooltip:i,rounded:c}=p,n=(c===void 0?!1:c)?"30px":"75px";let d;t[0]!==n?(d={width:n,height:"30px",margin:"2px"},t[0]=n,t[1]=d):d=t[1];const l=d;let o;t[2]!==s||t[3]!==l||t[4]!==i||t[5]!==e?(o=s&&i?a.jsx("div",{className:`rounded-pill bg-color-of-the-year-${e%9} bottom-tooltip pill-shadow`,style:l,"data-description":`${e}: ${i}`}):s?a.jsx("div",{className:`rounded-pill bg-color-of-the-year-${e%9} bottom-tooltip-small`,style:l,"data-description":e}):a.jsx("div",{className:"rounded-pill bg-color-of-the-year-blank",style:l}),t[2]=s,t[3]=l,t[4]=i,t[5]=e,t[6]=o):o=t[6];let r;return t[7]!==o||t[8]!==e?(r=a.jsx("div",{className:"d-inline-block",children:o},e),t[7]=o,t[8]=e,t[9]=r):r=t[9],r}export{f as C};
diff --git a/compendium_v2/static/ConnectedInstitutionsURLs-BSBw8xZy.js b/compendium_v2/static/ConnectedInstitutionsURLs-BSBw8xZy.js
deleted file mode 100644
index 3648f8eaaa987c83728b7ff72ed803305bff87d0..0000000000000000000000000000000000000000
--- a/compendium_v2/static/ConnectedInstitutionsURLs-BSBw8xZy.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as g,r as y,F as C,j as x,t as L,S as R}from"./index.js";import{u as S,q as k,k as v,i as F,D as T,F as U,f as w,s as E}from"./useData-CxftshCa.js";import{N as O}from"./NrenYearTable-tQrmAmRo.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";function G(){const t=g.c(24),{filterSelection:e,setFilterSelection:s}=y.useContext(C),{data:i,nrens:a}=S("/api/institution-urls",s);let n,o,u;if(t[0]!==i||t[1]!==e||t[2]!==a||t[3]!==s){const j=i?k(i):[];let d;t[7]!==e.selectedNrens?(d=N=>e.selectedNrens.includes(N.nren),t[7]=e.selectedNrens,t[8]=d):d=t[8];const D=j.filter(d),h=v(D);n=F(h,_);let m;t[9]===Symbol.for("react.memo_cache_sentinel")?(m=[],t[9]=m):m=t[9];let l;t[10]!==a?(l=a.values(),t[10]=a,t[11]=l):l=t[11];let c;t[12]!==l?(c={availableYears:m,availableNrens:[...l]},t[12]=l,t[13]=c):c=t[13];let p;t[14]!==e||t[15]!==s||t[16]!==c?(p=x.jsx(U,{filterOptions:c,filterSelection:e,setFilterSelection:s}),t[14]=e,t[15]=s,t[16]=c,t[17]=p):p=t[17],o=p,u=D.map(Y),t[0]=i,t[1]=e,t[2]=a,t[3]=s,t[4]=n,t[5]=o,t[6]=u}else n=t[4],o=t[5],u=t[6];const b=u;let r;t[18]!==n?(r=x.jsx(w,{children:x.jsx(O,{data:n,columnTitle:"Institution URLs",keysAreURLs:!0,noDots:!0})}),t[18]=n,t[19]=r):r=t[19];let f;return t[20]!==b||t[21]!==o||t[22]!==r?(f=x.jsx(T,{title:L["institutions-urls"],description:"Many NRENs have a page on their website listing user institutions. Links to the pages are shown in the table below.",category:R.ConnectedUsers,filter:o,data:b,filename:"institution_urls",children:r}),t[20]=b,t[21]=o,t[22]=r,t[23]=f):f=t[23],f}function Y(t){return{...t,urls:(t.urls??[]).join(", ")}}function _(t,e){const s=E(e);if(s!=null)for(const[i,a]of Object.entries(s))t[i]=a}export{G as default};
diff --git a/compendium_v2/static/ConnectedInstitutionsURLs-DCBf9aew.js b/compendium_v2/static/ConnectedInstitutionsURLs-DCBf9aew.js
new file mode 100644
index 0000000000000000000000000000000000000000..86d6b8e5934f17ebc89bc8cf292eb2e8392d7fc7
--- /dev/null
+++ b/compendium_v2/static/ConnectedInstitutionsURLs-DCBf9aew.js
@@ -0,0 +1 @@
+import{c as g,r as y,F as C,j as x,t as L,S as R}from"./index-DunMf8wQ.js";import{u as S,q as k,k as v,i as F,D as T,F as U,f as w,s as E}from"./useData-DvdT9bkc.js";import{N as O}from"./NrenYearTable-D3mNeVd3.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";function G(){const t=g.c(24),{filterSelection:e,setFilterSelection:s}=y.useContext(C),{data:i,nrens:a}=S("/api/institution-urls",s);let n,o,u;if(t[0]!==i||t[1]!==e||t[2]!==a||t[3]!==s){const j=i?k(i):[];let d;t[7]!==e.selectedNrens?(d=N=>e.selectedNrens.includes(N.nren),t[7]=e.selectedNrens,t[8]=d):d=t[8];const D=j.filter(d),h=v(D);n=F(h,_);let m;t[9]===Symbol.for("react.memo_cache_sentinel")?(m=[],t[9]=m):m=t[9];let l;t[10]!==a?(l=a.values(),t[10]=a,t[11]=l):l=t[11];let c;t[12]!==l?(c={availableYears:m,availableNrens:[...l]},t[12]=l,t[13]=c):c=t[13];let p;t[14]!==e||t[15]!==s||t[16]!==c?(p=x.jsx(U,{filterOptions:c,filterSelection:e,setFilterSelection:s}),t[14]=e,t[15]=s,t[16]=c,t[17]=p):p=t[17],o=p,u=D.map(Y),t[0]=i,t[1]=e,t[2]=a,t[3]=s,t[4]=n,t[5]=o,t[6]=u}else n=t[4],o=t[5],u=t[6];const b=u;let r;t[18]!==n?(r=x.jsx(w,{children:x.jsx(O,{data:n,columnTitle:"Institution URLs",keysAreURLs:!0,noDots:!0})}),t[18]=n,t[19]=r):r=t[19];let f;return t[20]!==b||t[21]!==o||t[22]!==r?(f=x.jsx(T,{title:L["institutions-urls"],description:"Many NRENs have a page on their website listing user institutions. Links to the pages are shown in the table below.",category:R.ConnectedUsers,filter:o,data:b,filename:"institution_urls",children:r}),t[20]=b,t[21]=o,t[22]=r,t[23]=f):f=t[23],f}function Y(t){return{...t,urls:(t.urls??[]).join(", ")}}function _(t,e){const s=E(e);if(s!=null)for(const[i,a]of Object.entries(s))t[i]=a}export{G as default};
diff --git a/compendium_v2/static/ConnectedUser-DXYx3bSL.js b/compendium_v2/static/ConnectedUser-DXYx3bSL.js
deleted file mode 100644
index c01b304d783d4fe1a986b6d5b0f640fa98b81156..0000000000000000000000000000000000000000
--- a/compendium_v2/static/ConnectedUser-DXYx3bSL.js
+++ /dev/null
@@ -1 +0,0 @@
-import{a as t,t as l,j as o,L as Y,c as F,r as U,F as D,S as A,b as T,d as P,U as j}from"./index.js";import{u as G,r as u,D as $,F as q,f as B}from"./useData-CxftshCa.js";import{S as z}from"./ScrollableMatrix-Dxr22l4i.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";const I={[t.ConnectedProportion]:l["connected-proportion"],[t.ConnectivityLevel]:l["connectivity-level"],[t.ConnectionCarrier]:l["connection-carrier"],[t.ConnectivityLoad]:l["connectivity-load"],[t.ConnectivityGrowth]:l["connectivity-growth"],[t.CommercialChargingLevel]:l["commercial-charging-level"],[t.CommercialConnectivity]:l["commercial-connectivity"]},H={[t.ConnectedProportion]:o.jsxs("span",{children:["European NRENs all have different connectivity remits, as is shown in the table below. The categories of institutions make use of the ISCED 2011 classification system, the UNESCO scheme for International Standard Classification of Education.",o.jsx("br",{}),"The table shows whether a particular category of institution falls within the connectivity remit of the NREN, the actual number of such institutions connected, the % market share this represents, and the actual number of end users served in the category."]}),[t.ConnectivityLevel]:o.jsxs("span",{children:["The table below shows the average level of connectivity for each category of institution. The connectivity remit of different NRENs is shown on a different page, and NRENs are asked, at a minimum, to provide information about the typical and highest capacities (in Mbit/s) at which Universities and Research Institutes are connected.",o.jsx("br",{}),"NRENs are also asked to show proportionally how many institutions are connected at the highest capacity they offer."]}),[t.ConnectionCarrier]:o.jsxs("span",{children:["The table below shows the different mechanisms employed by NRENs to carry traffic to the different types of users they serve. Not all NRENs connect all of the types of institution listed below - details of connectivity remits can be found here: ",o.jsx(Y,{to:"/connected-proportion",className:"",children:o.jsx("span",{children:I[t.ConnectedProportion]})})]}),[t.ConnectivityLoad]:o.jsx("span",{children:"The table below shows the traffic load in Mbit/s to and from institutions served by NRENs; both the average load, and peak load, when given. The types of institutions are broken down using the ISCED 2011 classification system (the UNESCO scheme for International Standard Classification of Education), plus other types."}),[t.ConnectivityGrowth]:o.jsx("span",{children:"The table below illustrates the anticipated traffic growth within NREN networks over the next three years."}),[t.CommercialChargingLevel]:o.jsx("span",{children:"The table below outlines the typical charging levels for various types of commercial connections."}),[t.CommercialConnectivity]:o.jsx("span",{children:"The table below outlines the types of commercial organizations NRENs connect."})},L={[t.ConnectedProportion]:{"Remit cover connectivity":"coverage","Number of institutions connected":"number_connected","Percentage market share of institutions connected":"market_share","Number of users served":"users_served"},[t.ConnectivityLevel]:{"Typical link speed (Mbit/s):":"typical_speed","Highest speed link (Mbit/s):":"highest_speed","Proportionally how many institutions in this category are connected at the highest capacity? (%):":"highest_speed_proportion"},[t.ConnectionCarrier]:{"Commercial Provider Backbone":"commercial_provider_backbone","NREN Local Loops":"nren_local_loops","Regional NREN Backbone":"regional_nren_backbone",MAN:"man",Other:"other"},[t.ConnectivityLoad]:{"Average Load From Institutions (Mbit/s)":"average_load_from_institutions","Average Load To Institutions (Mbit/s)":"average_load_to_institutions","Peak Load To Institution (Mbit/s)":"peak_load_to_institutions","Peak Load From Institution (Mbit/s)":"peak_load_from_institutions"},[t.ConnectivityGrowth]:{"Percentage growth":"growth"},[t.CommercialChargingLevel]:{"No charges applied if requested by R&E users":"no_charges_if_r_e_requested","Same charging model as for R&E users":"same_as_r_e_charges","Charges typically higher than for R&E users":"higher_than_r_e_charges","Charges typically lower than for R&E users":"lower_than_r_e_charges"},[t.CommercialConnectivity]:{"No - but we offer a direct or IX peering":"no_but_direct_peering","No - not eligible for policy reasons":"no_policy","No - financial restrictions (NREN is unable to charge/recover costs)":"no_financial","No - other reason / unsure":"no_other","Yes - National NREN access only":"yes_national_nren","Yes - Including transit to other networks":"yes_incl_other","Yes - only if sponsored by a connected institution":"yes_if_sponsored"}};function te(M){const e=F.c(36),{page:n}=M,O=`/api/connected-${n.toString()}`,{filterSelection:i,setFilterSelection:y}=U.useContext(D),{data:_,years:b,nrens:N}=G(O,y);let r,a,c,s;if(e[0]!==_||e[1]!==i.selectedNrens||e[2]!==i.selectedYears||e[3]!==n){let C;e[8]!==i.selectedNrens||e[9]!==i.selectedYears?(C=S=>i.selectedYears.includes(S.year)&&i.selectedNrens.includes(S.nren),e[8]=i.selectedNrens,e[9]=i.selectedYears,e[10]=C):C=e[10],s=_.filter(C),c=!1,n==t.CommercialConnectivity?(r=T,c=!0,a=u(s,Object.keys(T),void 0)):n==t.CommercialChargingLevel?(r=P,c=!0,a=u(s,Object.keys(P),void 0)):n==t.ConnectionCarrier?(r=j,c=!0,a=u(s,["carry_mechanism"],"user_category")):n==t.ConnectedProportion?(r=j,a=u(s,Object.values(L[n]),"user_category",!1)):(r=j,a=u(s,Object.values(L[n]),"user_category",!1)),e[0]=_,e[1]=i.selectedNrens,e[2]=i.selectedYears,e[3]=n,e[4]=r,e[5]=a,e[6]=c,e[7]=s}else r=e[4],a=e[5],c=e[6],s=e[7];let h;e[11]!==b?(h=[...b],e[11]=b,e[12]=h):h=e[12];let d;e[13]!==N?(d=N.values(),e[13]=N,e[14]=d):d=e[14];let f;e[15]!==d?(f=[...d],e[15]=d,e[16]=f):f=e[16];let p;e[17]!==h||e[18]!==f?(p={availableYears:h,availableNrens:f},e[17]=h,e[18]=f,e[19]=p):p=e[19];let g;e[20]!==i||e[21]!==y||e[22]!==p?(g=o.jsx(q,{filterOptions:p,filterSelection:i,setFilterSelection:y}),e[20]=i,e[21]=y,e[22]=p,e[23]=g):g=e[23];const w=g,E=L[n],k=`nren_connected_${n.toString()}`,x=I[n],R=H[n];let m;e[24]!==r||e[25]!==a||e[26]!==c||e[27]!==E?(m=o.jsx(B,{children:o.jsx(z,{dataLookup:a,rowInfo:E,isTickIcon:c,categoryLookup:r})}),e[24]=r,e[25]=a,e[26]=c,e[27]=E,e[28]=m):m=e[28];let v;return e[29]!==k||e[30]!==w||e[31]!==s||e[32]!==x||e[33]!==R||e[34]!==m?(v=o.jsx($,{title:x,description:R,category:A.ConnectedUsers,filter:w,data:s,filename:k,children:m}),e[29]=k,e[30]=w,e[31]=s,e[32]=x,e[33]=R,e[34]=m,e[35]=v):v=e[35],v}export{te as default};
diff --git a/compendium_v2/static/ConnectedUser-queHyxHS.js b/compendium_v2/static/ConnectedUser-queHyxHS.js
new file mode 100644
index 0000000000000000000000000000000000000000..cbe3b8db20785e52d979f08388c66f0deee7569a
--- /dev/null
+++ b/compendium_v2/static/ConnectedUser-queHyxHS.js
@@ -0,0 +1 @@
+import{a as t,t as l,j as o,L as Y,c as F,r as U,F as D,S as A,b as T,d as P,U as j}from"./index-DunMf8wQ.js";import{u as G,r as u,D as $,F as q,f as B}from"./useData-DvdT9bkc.js";import{S as z}from"./ScrollableMatrix-D6caiSg1.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";const I={[t.ConnectedProportion]:l["connected-proportion"],[t.ConnectivityLevel]:l["connectivity-level"],[t.ConnectionCarrier]:l["connection-carrier"],[t.ConnectivityLoad]:l["connectivity-load"],[t.ConnectivityGrowth]:l["connectivity-growth"],[t.CommercialChargingLevel]:l["commercial-charging-level"],[t.CommercialConnectivity]:l["commercial-connectivity"]},H={[t.ConnectedProportion]:o.jsxs("span",{children:["European NRENs all have different connectivity remits, as is shown in the table below. The categories of institutions make use of the ISCED 2011 classification system, the UNESCO scheme for International Standard Classification of Education.",o.jsx("br",{}),"The table shows whether a particular category of institution falls within the connectivity remit of the NREN, the actual number of such institutions connected, the % market share this represents, and the actual number of end users served in the category."]}),[t.ConnectivityLevel]:o.jsxs("span",{children:["The table below shows the average level of connectivity for each category of institution. The connectivity remit of different NRENs is shown on a different page, and NRENs are asked, at a minimum, to provide information about the typical and highest capacities (in Mbit/s) at which Universities and Research Institutes are connected.",o.jsx("br",{}),"NRENs are also asked to show proportionally how many institutions are connected at the highest capacity they offer."]}),[t.ConnectionCarrier]:o.jsxs("span",{children:["The table below shows the different mechanisms employed by NRENs to carry traffic to the different types of users they serve. Not all NRENs connect all of the types of institution listed below - details of connectivity remits can be found here: ",o.jsx(Y,{to:"/connected-proportion",className:"",children:o.jsx("span",{children:I[t.ConnectedProportion]})})]}),[t.ConnectivityLoad]:o.jsx("span",{children:"The table below shows the traffic load in Mbit/s to and from institutions served by NRENs; both the average load, and peak load, when given. The types of institutions are broken down using the ISCED 2011 classification system (the UNESCO scheme for International Standard Classification of Education), plus other types."}),[t.ConnectivityGrowth]:o.jsx("span",{children:"The table below illustrates the anticipated traffic growth within NREN networks over the next three years."}),[t.CommercialChargingLevel]:o.jsx("span",{children:"The table below outlines the typical charging levels for various types of commercial connections."}),[t.CommercialConnectivity]:o.jsx("span",{children:"The table below outlines the types of commercial organizations NRENs connect."})},L={[t.ConnectedProportion]:{"Remit cover connectivity":"coverage","Number of institutions connected":"number_connected","Percentage market share of institutions connected":"market_share","Number of users served":"users_served"},[t.ConnectivityLevel]:{"Typical link speed (Mbit/s):":"typical_speed","Highest speed link (Mbit/s):":"highest_speed","Proportionally how many institutions in this category are connected at the highest capacity? (%):":"highest_speed_proportion"},[t.ConnectionCarrier]:{"Commercial Provider Backbone":"commercial_provider_backbone","NREN Local Loops":"nren_local_loops","Regional NREN Backbone":"regional_nren_backbone",MAN:"man",Other:"other"},[t.ConnectivityLoad]:{"Average Load From Institutions (Mbit/s)":"average_load_from_institutions","Average Load To Institutions (Mbit/s)":"average_load_to_institutions","Peak Load To Institution (Mbit/s)":"peak_load_to_institutions","Peak Load From Institution (Mbit/s)":"peak_load_from_institutions"},[t.ConnectivityGrowth]:{"Percentage growth":"growth"},[t.CommercialChargingLevel]:{"No charges applied if requested by R&E users":"no_charges_if_r_e_requested","Same charging model as for R&E users":"same_as_r_e_charges","Charges typically higher than for R&E users":"higher_than_r_e_charges","Charges typically lower than for R&E users":"lower_than_r_e_charges"},[t.CommercialConnectivity]:{"No - but we offer a direct or IX peering":"no_but_direct_peering","No - not eligible for policy reasons":"no_policy","No - financial restrictions (NREN is unable to charge/recover costs)":"no_financial","No - other reason / unsure":"no_other","Yes - National NREN access only":"yes_national_nren","Yes - Including transit to other networks":"yes_incl_other","Yes - only if sponsored by a connected institution":"yes_if_sponsored"}};function te(M){const e=F.c(36),{page:n}=M,O=`/api/connected-${n.toString()}`,{filterSelection:i,setFilterSelection:y}=U.useContext(D),{data:_,years:b,nrens:N}=G(O,y);let r,a,c,s;if(e[0]!==_||e[1]!==i.selectedNrens||e[2]!==i.selectedYears||e[3]!==n){let C;e[8]!==i.selectedNrens||e[9]!==i.selectedYears?(C=S=>i.selectedYears.includes(S.year)&&i.selectedNrens.includes(S.nren),e[8]=i.selectedNrens,e[9]=i.selectedYears,e[10]=C):C=e[10],s=_.filter(C),c=!1,n==t.CommercialConnectivity?(r=T,c=!0,a=u(s,Object.keys(T),void 0)):n==t.CommercialChargingLevel?(r=P,c=!0,a=u(s,Object.keys(P),void 0)):n==t.ConnectionCarrier?(r=j,c=!0,a=u(s,["carry_mechanism"],"user_category")):n==t.ConnectedProportion?(r=j,a=u(s,Object.values(L[n]),"user_category",!1)):(r=j,a=u(s,Object.values(L[n]),"user_category",!1)),e[0]=_,e[1]=i.selectedNrens,e[2]=i.selectedYears,e[3]=n,e[4]=r,e[5]=a,e[6]=c,e[7]=s}else r=e[4],a=e[5],c=e[6],s=e[7];let h;e[11]!==b?(h=[...b],e[11]=b,e[12]=h):h=e[12];let d;e[13]!==N?(d=N.values(),e[13]=N,e[14]=d):d=e[14];let f;e[15]!==d?(f=[...d],e[15]=d,e[16]=f):f=e[16];let p;e[17]!==h||e[18]!==f?(p={availableYears:h,availableNrens:f},e[17]=h,e[18]=f,e[19]=p):p=e[19];let g;e[20]!==i||e[21]!==y||e[22]!==p?(g=o.jsx(q,{filterOptions:p,filterSelection:i,setFilterSelection:y}),e[20]=i,e[21]=y,e[22]=p,e[23]=g):g=e[23];const w=g,E=L[n],k=`nren_connected_${n.toString()}`,x=I[n],R=H[n];let m;e[24]!==r||e[25]!==a||e[26]!==c||e[27]!==E?(m=o.jsx(B,{children:o.jsx(z,{dataLookup:a,rowInfo:E,isTickIcon:c,categoryLookup:r})}),e[24]=r,e[25]=a,e[26]=c,e[27]=E,e[28]=m):m=e[28];let v;return e[29]!==k||e[30]!==w||e[31]!==s||e[32]!==x||e[33]!==R||e[34]!==m?(v=o.jsx($,{title:x,description:R,category:A.ConnectedUsers,filter:w,data:s,filename:k,children:m}),e[29]=k,e[30]=w,e[31]=s,e[32]=x,e[33]=R,e[34]=m,e[35]=v):v=e[35],v}export{te as default};
diff --git a/compendium_v2/static/CorporateStrategy-BrErbevP.js b/compendium_v2/static/CorporateStrategy-BrErbevP.js
deleted file mode 100644
index 81eaf37ea401be92a2a1ab2b087a41b225fb0435..0000000000000000000000000000000000000000
--- a/compendium_v2/static/CorporateStrategy-BrErbevP.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import{c as k,r as C,F as j,j as y,t as E,S as F}from"./index.js";import{u as R,q as T,k as Y,i as w,D as L,F as P,f as B}from"./useData-CxftshCa.js";import{N as q}from"./NrenYearTable-tQrmAmRo.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";function J(){const e=k.c(23);let l;e[0]===Symbol.for("react.memo_cache_sentinel")?(l=x=>!!x.strategic_plan,e[0]=l):l=e[0];const b=l,{filterSelection:t,setFilterSelection:i}=C.useContext(j),{data:n,nrens:h}=R("/api/policy",i,b);let a,c;if(e[1]!==n||e[2]!==t.selectedNrens){const x=n?T(n):[];let d;e[5]!==t.selectedNrens?(d=D=>t.selectedNrens.includes(D.nren),e[5]=t.selectedNrens,e[6]=d):d=e[6],a=x.filter(d);const v=Y(a);let u;e[7]===Symbol.for("react.memo_cache_sentinel")?(u=(D,S)=>{const _=S.strategic_plan;D[_]=_},e[7]=u):u=e[7],c=w(v,u),e[1]=n,e[2]=t.selectedNrens,e[3]=a,e[4]=c}else a=e[3],c=e[4];const g=c;let p;e[8]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[8]=p):p=e[8];let s;e[9]!==h?(s=h.values(),e[9]=h,e[10]=s):s=e[10];let r;e[11]!==s?(r={availableYears:p,availableNrens:[...s]},e[11]=s,e[12]=r):r=e[12];let m;e[13]!==t||e[14]!==i||e[15]!==r?(m=y.jsx(P,{filterOptions:r,filterSelection:t,setFilterSelection:i}),e[13]=t,e[14]=i,e[15]=r,e[16]=m):m=e[16];const N=m;let o;e[17]!==g?(o=y.jsx(B,{children:y.jsx(q,{data:g,columnTitle:"Corporate Strategy",noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[17]=g,e[18]=o):o=e[18];let f;return e[19]!==N||e[20]!==a||e[21]!==o?(f=y.jsx(L,{title:E["corporate-strategy"],description:`The table below contains links to the NRENs most recent corporate strategic plans. 
-            NRENs are asked if updates have been made to their corporate strategy over the previous year. 
-            To avoid showing outdated links, only the most recent responses are shown.`,category:F.Policy,filter:N,data:a,filename:"nren_corporate_strategy",children:o}),e[19]=N,e[20]=a,e[21]=o,e[22]=f):f=e[22],f}export{J as default};
diff --git a/compendium_v2/static/CorporateStrategy-we6KtBv4.js b/compendium_v2/static/CorporateStrategy-we6KtBv4.js
new file mode 100644
index 0000000000000000000000000000000000000000..595acb78d1f54eb08331406cee5498c89d5805ab
--- /dev/null
+++ b/compendium_v2/static/CorporateStrategy-we6KtBv4.js
@@ -0,0 +1,3 @@
+import{c as k,r as C,F as j,j as y,t as E,S as F}from"./index-DunMf8wQ.js";import{u as R,q as T,k as Y,i as w,D as L,F as P,f as B}from"./useData-DvdT9bkc.js";import{N as q}from"./NrenYearTable-D3mNeVd3.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";function J(){const e=k.c(23);let l;e[0]===Symbol.for("react.memo_cache_sentinel")?(l=x=>!!x.strategic_plan,e[0]=l):l=e[0];const b=l,{filterSelection:t,setFilterSelection:i}=C.useContext(j),{data:n,nrens:h}=R("/api/policy",i,b);let a,c;if(e[1]!==n||e[2]!==t.selectedNrens){const x=n?T(n):[];let d;e[5]!==t.selectedNrens?(d=D=>t.selectedNrens.includes(D.nren),e[5]=t.selectedNrens,e[6]=d):d=e[6],a=x.filter(d);const v=Y(a);let u;e[7]===Symbol.for("react.memo_cache_sentinel")?(u=(D,S)=>{const _=S.strategic_plan;D[_]=_},e[7]=u):u=e[7],c=w(v,u),e[1]=n,e[2]=t.selectedNrens,e[3]=a,e[4]=c}else a=e[3],c=e[4];const g=c;let p;e[8]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[8]=p):p=e[8];let s;e[9]!==h?(s=h.values(),e[9]=h,e[10]=s):s=e[10];let r;e[11]!==s?(r={availableYears:p,availableNrens:[...s]},e[11]=s,e[12]=r):r=e[12];let m;e[13]!==t||e[14]!==i||e[15]!==r?(m=y.jsx(P,{filterOptions:r,filterSelection:t,setFilterSelection:i}),e[13]=t,e[14]=i,e[15]=r,e[16]=m):m=e[16];const N=m;let o;e[17]!==g?(o=y.jsx(B,{children:y.jsx(q,{data:g,columnTitle:"Corporate Strategy",noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[17]=g,e[18]=o):o=e[18];let f;return e[19]!==N||e[20]!==a||e[21]!==o?(f=y.jsx(L,{title:E["corporate-strategy"],description:`The table below contains links to the NRENs most recent corporate strategic plans. 
+            NRENs are asked if updates have been made to their corporate strategy over the previous year. 
+            To avoid showing outdated links, only the most recent responses are shown.`,category:F.Policy,filter:N,data:a,filename:"nren_corporate_strategy",children:o}),e[19]=N,e[20]=a,e[21]=o,e[22]=f):f=e[22],f}export{J as default};
diff --git a/compendium_v2/static/CrisisExercises-miIhkp8m.js b/compendium_v2/static/CrisisExercises-miIhkp8m.js
new file mode 100644
index 0000000000000000000000000000000000000000..235d1dcb671408a4bdabfd44e08b44fc693571e1
--- /dev/null
+++ b/compendium_v2/static/CrisisExercises-miIhkp8m.js
@@ -0,0 +1,2 @@
+import{c as P,r as S,F as D,S as L,j as W,t as M}from"./index-DunMf8wQ.js";import{u as R,g as O,F as A,D as G,f as V}from"./useData-DvdT9bkc.js";import{P as $}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function Z(){const e=P.c(51),{filterSelection:t,setFilterSelection:i}=S.useContext(D),{data:C,years:E,nrens:T}=R("/api/crisis-exercises",i);let s,w;if(e[0]!==C||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let r;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(r=F=>t.selectedYears.includes(F.year)&&t.selectedNrens.includes(F.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=r):r=e[7],s=C.filter(r),w=O(s,"exercise_descriptions"),e[0]=C,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=w}else s=e[3],w=e[4];const Y=w;let a;e[8]!==E?(a=[...E],e[8]=E,e[9]=a):a=e[9];let l;e[10]!==T?(l=T.values(),e[10]=T,e[11]=l):l=e[11];let n;e[12]!==l?(n=[...l],e[12]=l,e[13]=n):n=e[13];let o;e[14]!==a||e[15]!==n?(o={availableYears:a,availableNrens:n},e[14]=a,e[15]=n,e[16]=o):o=e[16];let v;e[17]!==t||e[18]!==i||e[19]!==o?(v=W.jsx(A,{filterOptions:o,filterSelection:t,setFilterSelection:i,coloredYears:!0}),e[17]=t,e[18]=i,e[19]=o,e[20]=v):v=e[20];const k=v;let c,p,u,d,m,x,f,h,N,_,y;if(e[21]!==k||e[22]!==s){const r={geant_workshops:"We participate in GEANT Crisis workshops such as CLAW",national_excercises:"We participated in National crisis exercises ",tabletop_exercises:"We run our own tabletop exercises",simulation_excercises:"We run our own simulation exercises",other_excercises:"We have done/participated in other exercises or trainings",real_crisis:"We had a real crisis",internal_security_programme:"We run an internal security awareness programme",none:"No, we have not done any crisis exercises or trainings"};d=new Map(Object.entries(r).map(q)),u=G,N=M["crisis-exercise"],_=`Many NRENs run or participate in crisis exercises to test procedures and train employees. 
+            The table below shows whether NRENs have run or participated in an exercise in the previous year. `,y=L.Policy,m=k,x=s,f="crisis_exercise_nrens_per_year",p=V,c=$,h=Object.values(r),e[21]=k,e[22]=s,e[23]=c,e[24]=p,e[25]=u,e[26]=d,e[27]=m,e[28]=x,e[29]=f,e[30]=h,e[31]=N,e[32]=_,e[33]=y}else c=e[23],p=e[24],u=e[25],d=e[26],m=e[27],x=e[28],f=e[29],h=e[30],N=e[31],_=e[32],y=e[33];let b;e[34]!==c||e[35]!==d||e[36]!==Y||e[37]!==h?(b=W.jsx(c,{columns:h,dataLookup:Y,circle:!0,columnLookup:d}),e[34]=c,e[35]=d,e[36]=Y,e[37]=h,e[38]=b):b=e[38];let g;e[39]!==p||e[40]!==b?(g=W.jsx(p,{children:b}),e[39]=p,e[40]=b,e[41]=g):g=e[41];let j;return e[42]!==u||e[43]!==m||e[44]!==x||e[45]!==f||e[46]!==g||e[47]!==N||e[48]!==_||e[49]!==y?(j=W.jsx(u,{title:N,description:_,category:y,filter:m,data:x,filename:f,children:g}),e[42]=u,e[43]=m,e[44]=x,e[45]=f,e[46]=g,e[47]=N,e[48]=_,e[49]=y,e[50]=j):j=e[50],j}function q(e){const[t,i]=e;return[i,t]}export{Z as default};
diff --git a/compendium_v2/static/CrisisExercises-mu7CJTN3.js b/compendium_v2/static/CrisisExercises-mu7CJTN3.js
deleted file mode 100644
index 9fac7defa7ddf111a5facde0718836ffe0d62ddc..0000000000000000000000000000000000000000
--- a/compendium_v2/static/CrisisExercises-mu7CJTN3.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{c as P,r as S,F as D,S as L,j as W,t as M}from"./index.js";import{u as R,g as O,F as A,D as G,f as V}from"./useData-CxftshCa.js";import{P as $}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function Z(){const e=P.c(51),{filterSelection:t,setFilterSelection:i}=S.useContext(D),{data:C,years:E,nrens:T}=R("/api/crisis-exercises",i);let s,w;if(e[0]!==C||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let r;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(r=F=>t.selectedYears.includes(F.year)&&t.selectedNrens.includes(F.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=r):r=e[7],s=C.filter(r),w=O(s,"exercise_descriptions"),e[0]=C,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=w}else s=e[3],w=e[4];const Y=w;let a;e[8]!==E?(a=[...E],e[8]=E,e[9]=a):a=e[9];let l;e[10]!==T?(l=T.values(),e[10]=T,e[11]=l):l=e[11];let n;e[12]!==l?(n=[...l],e[12]=l,e[13]=n):n=e[13];let o;e[14]!==a||e[15]!==n?(o={availableYears:a,availableNrens:n},e[14]=a,e[15]=n,e[16]=o):o=e[16];let v;e[17]!==t||e[18]!==i||e[19]!==o?(v=W.jsx(A,{filterOptions:o,filterSelection:t,setFilterSelection:i,coloredYears:!0}),e[17]=t,e[18]=i,e[19]=o,e[20]=v):v=e[20];const k=v;let c,p,u,d,m,x,f,h,N,_,y;if(e[21]!==k||e[22]!==s){const r={geant_workshops:"We participate in GEANT Crisis workshops such as CLAW",national_excercises:"We participated in National crisis exercises ",tabletop_exercises:"We run our own tabletop exercises",simulation_excercises:"We run our own simulation exercises",other_excercises:"We have done/participated in other exercises or trainings",real_crisis:"We had a real crisis",internal_security_programme:"We run an internal security awareness programme",none:"No, we have not done any crisis exercises or trainings"};d=new Map(Object.entries(r).map(q)),u=G,N=M["crisis-exercise"],_=`Many NRENs run or participate in crisis exercises to test procedures and train employees. 
-            The table below shows whether NRENs have run or participated in an exercise in the previous year. `,y=L.Policy,m=k,x=s,f="crisis_exercise_nrens_per_year",p=V,c=$,h=Object.values(r),e[21]=k,e[22]=s,e[23]=c,e[24]=p,e[25]=u,e[26]=d,e[27]=m,e[28]=x,e[29]=f,e[30]=h,e[31]=N,e[32]=_,e[33]=y}else c=e[23],p=e[24],u=e[25],d=e[26],m=e[27],x=e[28],f=e[29],h=e[30],N=e[31],_=e[32],y=e[33];let b;e[34]!==c||e[35]!==d||e[36]!==Y||e[37]!==h?(b=W.jsx(c,{columns:h,dataLookup:Y,circle:!0,columnLookup:d}),e[34]=c,e[35]=d,e[36]=Y,e[37]=h,e[38]=b):b=e[38];let g;e[39]!==p||e[40]!==b?(g=W.jsx(p,{children:b}),e[39]=p,e[40]=b,e[41]=g):g=e[41];let j;return e[42]!==u||e[43]!==m||e[44]!==x||e[45]!==f||e[46]!==g||e[47]!==N||e[48]!==_||e[49]!==y?(j=W.jsx(u,{title:N,description:_,category:y,filter:m,data:x,filename:f,children:g}),e[42]=u,e[43]=m,e[44]=x,e[45]=f,e[46]=g,e[47]=N,e[48]=_,e[49]=y,e[50]=j):j=e[50],j}function q(e){const[t,i]=e;return[i,t]}export{Z as default};
diff --git a/compendium_v2/static/CrisisManagement-BxTFYm8e.js b/compendium_v2/static/CrisisManagement-BxTFYm8e.js
deleted file mode 100644
index de3346273b26b6958c9b90761a790b6cb7e17e79..0000000000000000000000000000000000000000
--- a/compendium_v2/static/CrisisManagement-BxTFYm8e.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as C,r as F,F as v,j as x,t as P,S as k}from"./index.js";import{u as w,g as D,D as E,F as T,f as L}from"./useData-CxftshCa.js";import{P as M}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function H(){const e=C.c(30);let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=c=>c.crisis_management_procedure!==null,e[0]=m):m=e[0];const S=m,{filterSelection:t,setFilterSelection:d}=F.useContext(v),{data:N,years:_,nrens:g}=w("/api/standards",d,S);let s,f;if(e[1]!==N||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let c;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(c=Y=>t.selectedYears.includes(Y.year)&&t.selectedNrens.includes(Y.nren)&&S(Y),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=c):c=e[8],s=N.filter(c),f=D(s,"crisis_management_procedure"),e[1]=N,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=f}else s=e[4],f=e[5];const b=f;let l,p;e[9]===Symbol.for("react.memo_cache_sentinel")?(l=["Yes","No"],p=new Map([[l[0],"True"],[l[1],"False"]]),e[9]=l,e[10]=p):(l=e[9],p=e[10]);const j=p;let a;e[11]!==_?(a=[..._],e[11]=_,e[12]=a):a=e[12];let r;e[13]!==g?(r=g.values(),e[13]=g,e[14]=r):r=e[14];let i;e[15]!==r?(i=[...r],e[15]=r,e[16]=i):i=e[16];let n;e[17]!==a||e[18]!==i?(n={availableYears:a,availableNrens:i},e[17]=a,e[18]=i,e[19]=n):n=e[19];let u;e[20]!==t||e[21]!==d||e[22]!==n?(u=x.jsx(T,{filterOptions:n,filterSelection:t,setFilterSelection:d,coloredYears:!0}),e[20]=t,e[21]=d,e[22]=n,e[23]=u):u=e[23];const y=u;let o;e[24]!==b?(o=x.jsx(L,{children:x.jsx(M,{columns:l,columnLookup:j,dataLookup:b})}),e[24]=b,e[25]=o):o=e[25];let h;return e[26]!==y||e[27]!==s||e[28]!==o?(h=x.jsx(E,{title:P["crisis-management"],description:"The table below shows whether NRENs have a formal crisis management procedure.",category:k.Policy,filter:y,data:s,filename:"crisis_management_nrens_per_year",children:o}),e[26]=y,e[27]=s,e[28]=o,e[29]=h):h=e[29],h}export{H as default};
diff --git a/compendium_v2/static/CrisisManagement-PDrUgEjD.js b/compendium_v2/static/CrisisManagement-PDrUgEjD.js
new file mode 100644
index 0000000000000000000000000000000000000000..95ecb8eb64433b255a71a3d561b32f03846c2624
--- /dev/null
+++ b/compendium_v2/static/CrisisManagement-PDrUgEjD.js
@@ -0,0 +1 @@
+import{c as C,r as F,F as v,j as x,t as P,S as k}from"./index-DunMf8wQ.js";import{u as w,g as D,D as E,F as T,f as L}from"./useData-DvdT9bkc.js";import{P as M}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function H(){const e=C.c(30);let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=c=>c.crisis_management_procedure!==null,e[0]=m):m=e[0];const S=m,{filterSelection:t,setFilterSelection:d}=F.useContext(v),{data:N,years:_,nrens:g}=w("/api/standards",d,S);let s,f;if(e[1]!==N||e[2]!==t.selectedNrens||e[3]!==t.selectedYears){let c;e[6]!==t.selectedNrens||e[7]!==t.selectedYears?(c=Y=>t.selectedYears.includes(Y.year)&&t.selectedNrens.includes(Y.nren)&&S(Y),e[6]=t.selectedNrens,e[7]=t.selectedYears,e[8]=c):c=e[8],s=N.filter(c),f=D(s,"crisis_management_procedure"),e[1]=N,e[2]=t.selectedNrens,e[3]=t.selectedYears,e[4]=s,e[5]=f}else s=e[4],f=e[5];const b=f;let l,p;e[9]===Symbol.for("react.memo_cache_sentinel")?(l=["Yes","No"],p=new Map([[l[0],"True"],[l[1],"False"]]),e[9]=l,e[10]=p):(l=e[9],p=e[10]);const j=p;let a;e[11]!==_?(a=[..._],e[11]=_,e[12]=a):a=e[12];let r;e[13]!==g?(r=g.values(),e[13]=g,e[14]=r):r=e[14];let i;e[15]!==r?(i=[...r],e[15]=r,e[16]=i):i=e[16];let n;e[17]!==a||e[18]!==i?(n={availableYears:a,availableNrens:i},e[17]=a,e[18]=i,e[19]=n):n=e[19];let u;e[20]!==t||e[21]!==d||e[22]!==n?(u=x.jsx(T,{filterOptions:n,filterSelection:t,setFilterSelection:d,coloredYears:!0}),e[20]=t,e[21]=d,e[22]=n,e[23]=u):u=e[23];const y=u;let o;e[24]!==b?(o=x.jsx(L,{children:x.jsx(M,{columns:l,columnLookup:j,dataLookup:b})}),e[24]=b,e[25]=o):o=e[25];let h;return e[26]!==y||e[27]!==s||e[28]!==o?(h=x.jsx(E,{title:P["crisis-management"],description:"The table below shows whether NRENs have a formal crisis management procedure.",category:k.Policy,filter:y,data:s,filename:"crisis_management_nrens_per_year",children:o}),e[26]=y,e[27]=s,e[28]=o,e[29]=h):h=e[29],h}export{H as default};
diff --git a/compendium_v2/static/DarkFibreInstalled-DQjFL8rw.js b/compendium_v2/static/DarkFibreInstalled-DQjFL8rw.js
new file mode 100644
index 0000000000000000000000000000000000000000..a9525746a899289d3bb1766c2677a6282dc6a40c
--- /dev/null
+++ b/compendium_v2/static/DarkFibreInstalled-DQjFL8rw.js
@@ -0,0 +1 @@
+import{c as N,r as j,F as D,j as n,t as F,S as L}from"./index-DunMf8wQ.js";import{L as w}from"./index-C2DQFzVc.js";import{C as E,a as v,L as P,P as R,b as I,p as K,c as O,d as T,u as U,e as Y,D as $,F as q,f as z}from"./useData-DvdT9bkc.js";import{g as A}from"./charthelpers-vHYh9qxV.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";E.register(v,P,R,I,K,O,T);function X(){const e=N.c(24);let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=r=>r.fibre_length_in_country!=null,e[0]=o):o=e[0];const k=o,{filterSelection:t,setFilterSelection:c}=j.useContext(D),{data:u,nrens:_}=U("/api/dark-fibre-installed",c,k);let i,f;if(e[1]!==u||e[2]!==t.selectedNrens){let r;e[5]!==t.selectedNrens?(r=y=>t.selectedNrens.includes(y.nren)&&k(y),e[5]=t.selectedNrens,e[6]=r):r=e[6],i=u.filter(r),f=Y(i,"fibre_length_in_country"),e[1]=u,e[2]=t.selectedNrens,e[3]=i,e[4]=f}else i=e[3],f=e[4];const g=f;let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=[],e[7]=m):m=e[7];let s;e[8]!==_?(s=_.values(),e[8]=_,e[9]=s):s=e[9];let l;e[10]!==s?(l={availableYears:m,availableNrens:[...s]},e[10]=s,e[11]=l):l=e[11];let d;e[12]!==t||e[13]!==c||e[14]!==l?(d=n.jsx(q,{filterOptions:l,filterSelection:t,setFilterSelection:c}),e[12]=t,e[13]=c,e[14]=l,e[15]=d):d=e[15];const x=d;let p;e[16]===Symbol.for("react.memo_cache_sentinel")?(p=A({title:"Kilometres of Installed Dark Fibre",tooltipUnit:"km",unit:"km"}),e[16]=p):p=e[16];const S=p;let h;e[17]===Symbol.for("react.memo_cache_sentinel")?(h=n.jsx("span",{children:"This graph shows the number of Kilometres of dark fibre installed by NRENs within their own countries, which they own themselves. The distance is the number of kilometres of the fibre pairs, or if bidirectional traffic on a single fibre, it is treated as a fibre pair."}),e[17]=h):h=e[17];const C=h;let a;e[18]!==g?(a=n.jsx(z,{children:n.jsx(w,{data:g,options:S})}),e[18]=g,e[19]=a):a=e[19];let b;return e[20]!==x||e[21]!==i||e[22]!==a?(b=n.jsx($,{title:F["dark-fibre-installed"],description:C,category:L.Network,filter:x,data:i,filename:"dark_fibre_lease_installed",children:a}),e[20]=x,e[21]=i,e[22]=a,e[23]=b):b=e[23],b}export{X as default};
diff --git a/compendium_v2/static/DarkFibreInstalled-Uox2eGX8.js b/compendium_v2/static/DarkFibreInstalled-Uox2eGX8.js
deleted file mode 100644
index ea92281f5464636ffad43918c394800f726b9b83..0000000000000000000000000000000000000000
--- a/compendium_v2/static/DarkFibreInstalled-Uox2eGX8.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as N,r as j,F as D,j as n,t as F,S as L}from"./index.js";import{L as w}from"./index-CjWPDfDC.js";import{C as E,a as v,L as P,P as R,b as I,p as K,c as O,d as T,u as U,e as Y,D as $,F as q,f as z}from"./useData-CxftshCa.js";import{g as A}from"./charthelpers-B0zLHD4s.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";E.register(v,P,R,I,K,O,T);function X(){const e=N.c(24);let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=r=>r.fibre_length_in_country!=null,e[0]=o):o=e[0];const k=o,{filterSelection:t,setFilterSelection:c}=j.useContext(D),{data:u,nrens:_}=U("/api/dark-fibre-installed",c,k);let i,f;if(e[1]!==u||e[2]!==t.selectedNrens){let r;e[5]!==t.selectedNrens?(r=y=>t.selectedNrens.includes(y.nren)&&k(y),e[5]=t.selectedNrens,e[6]=r):r=e[6],i=u.filter(r),f=Y(i,"fibre_length_in_country"),e[1]=u,e[2]=t.selectedNrens,e[3]=i,e[4]=f}else i=e[3],f=e[4];const g=f;let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=[],e[7]=m):m=e[7];let s;e[8]!==_?(s=_.values(),e[8]=_,e[9]=s):s=e[9];let l;e[10]!==s?(l={availableYears:m,availableNrens:[...s]},e[10]=s,e[11]=l):l=e[11];let d;e[12]!==t||e[13]!==c||e[14]!==l?(d=n.jsx(q,{filterOptions:l,filterSelection:t,setFilterSelection:c}),e[12]=t,e[13]=c,e[14]=l,e[15]=d):d=e[15];const x=d;let p;e[16]===Symbol.for("react.memo_cache_sentinel")?(p=A({title:"Kilometres of Installed Dark Fibre",tooltipUnit:"km",unit:"km"}),e[16]=p):p=e[16];const S=p;let h;e[17]===Symbol.for("react.memo_cache_sentinel")?(h=n.jsx("span",{children:"This graph shows the number of Kilometres of dark fibre installed by NRENs within their own countries, which they own themselves. The distance is the number of kilometres of the fibre pairs, or if bidirectional traffic on a single fibre, it is treated as a fibre pair."}),e[17]=h):h=e[17];const C=h;let a;e[18]!==g?(a=n.jsx(z,{children:n.jsx(w,{data:g,options:S})}),e[18]=g,e[19]=a):a=e[19];let b;return e[20]!==x||e[21]!==i||e[22]!==a?(b=n.jsx($,{title:F["dark-fibre-installed"],description:C,category:L.Network,filter:x,data:i,filename:"dark_fibre_lease_installed",children:a}),e[20]=x,e[21]=i,e[22]=a,e[23]=b):b=e[23],b}export{X as default};
diff --git a/compendium_v2/static/DarkFibreLease-DVVVHWmb.js b/compendium_v2/static/DarkFibreLease-DVVVHWmb.js
new file mode 100644
index 0000000000000000000000000000000000000000..63d752505da1fc44cd3971925cb731598942d3c6
--- /dev/null
+++ b/compendium_v2/static/DarkFibreLease-DVVVHWmb.js
@@ -0,0 +1 @@
+import{c as w,r as R,F as P,j as c,S as I,t as D}from"./index-DunMf8wQ.js";import{L as U}from"./index-C2DQFzVc.js";import{C as K,a as O,L as T,P as $,b as A,p as Y,c as q,d as z,u as B,e as G,D as H,F as J,f as M}from"./useData-DvdT9bkc.js";import{g as Q}from"./charthelpers-vHYh9qxV.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";K.register(O,T,$,A,Y,q,z);function ae(E){const e=w.c(32),{national:f}=E,s=f?"fibre_length_in_country":"fibre_length_outside_country";let d;e[0]!==s?(d=o=>o[s]!=null,e[0]=s,e[1]=d):d=e[1];const a=d,{filterSelection:t,setFilterSelection:m}=R.useContext(P),{data:k,nrens:x}=B("/api/dark-fibre-lease",m,a);let i,p;if(e[2]!==k||e[3]!==s||e[4]!==t.selectedNrens||e[5]!==a){let o;e[8]!==t.selectedNrens||e[9]!==a?(o=j=>t.selectedNrens.includes(j.nren)&&a(j),e[8]=t.selectedNrens,e[9]=a,e[10]=o):o=e[10],i=k.filter(o),p=G(i,s),e[2]=k,e[3]=s,e[4]=t.selectedNrens,e[5]=a,e[6]=i,e[7]=p}else i=e[6],p=e[7];const N=p;let h;e[11]===Symbol.for("react.memo_cache_sentinel")?(h=[],e[11]=h):h=e[11];let l;e[12]!==x?(l=x.values(),e[12]=x,e[13]=l):l=e[13];let r;e[14]!==l?(r={availableYears:h,availableNrens:[...l]},e[14]=l,e[15]=r):r=e[15];let b;e[16]!==t||e[17]!==m||e[18]!==r?(b=c.jsx(J,{filterOptions:r,filterSelection:t,setFilterSelection:m}),e[16]=t,e[17]=m,e[18]=r,e[19]=b):b=e[19];const y=b;let u;e[20]===Symbol.for("react.memo_cache_sentinel")?(u=Q({title:"Kilometres of Leased Dark Fibre",tooltipUnit:"km",unit:"km"}),e[20]=u):u=e[20];const F=u,C=f?"within":"outside";let g;e[21]!==C?(g=c.jsxs("span",{children:["This graph shows the number of Kilometres of dark fibre leased by NRENs ",C," their own countries. Also included is fibre leased via an IRU (Indefeasible Right of Use), a type of long-term lease of a portion of the capacity of a cable. It does not however, include fibre NRENs have installed, and own, themselves. The distance is the number of kilometres of the fibre pairs, or if bidirectional traffic on a single fibre, it is treated as a fibre pair."]}),e[21]=C,e[22]=g):g=e[22];const L=g,S=f?D["dark-fibre-lease"]:D["dark-fibre-lease-international"],v=`dark_fibre_lease_${f?"national":"international"}`;let n;e[23]!==N?(n=c.jsx(M,{children:c.jsx(U,{data:N,options:F})}),e[23]=N,e[24]=n):n=e[24];let _;return e[25]!==L||e[26]!==y||e[27]!==i||e[28]!==S||e[29]!==v||e[30]!==n?(_=c.jsx(H,{title:S,description:L,category:I.Network,filter:y,data:i,filename:v,children:n}),e[25]=L,e[26]=y,e[27]=i,e[28]=S,e[29]=v,e[30]=n,e[31]=_):_=e[31],_}export{ae as default};
diff --git a/compendium_v2/static/DarkFibreLease-Nz1_rVx9.js b/compendium_v2/static/DarkFibreLease-Nz1_rVx9.js
deleted file mode 100644
index 1b7d87f5328ff4ac220705aa01ed10da960284aa..0000000000000000000000000000000000000000
--- a/compendium_v2/static/DarkFibreLease-Nz1_rVx9.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as w,r as R,F as P,j as c,S as I,t as D}from"./index.js";import{L as U}from"./index-CjWPDfDC.js";import{C as K,a as O,L as T,P as $,b as A,p as Y,c as q,d as z,u as B,e as G,D as H,F as J,f as M}from"./useData-CxftshCa.js";import{g as Q}from"./charthelpers-B0zLHD4s.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";K.register(O,T,$,A,Y,q,z);function ae(E){const e=w.c(32),{national:f}=E,s=f?"fibre_length_in_country":"fibre_length_outside_country";let d;e[0]!==s?(d=o=>o[s]!=null,e[0]=s,e[1]=d):d=e[1];const a=d,{filterSelection:t,setFilterSelection:m}=R.useContext(P),{data:k,nrens:x}=B("/api/dark-fibre-lease",m,a);let i,p;if(e[2]!==k||e[3]!==s||e[4]!==t.selectedNrens||e[5]!==a){let o;e[8]!==t.selectedNrens||e[9]!==a?(o=j=>t.selectedNrens.includes(j.nren)&&a(j),e[8]=t.selectedNrens,e[9]=a,e[10]=o):o=e[10],i=k.filter(o),p=G(i,s),e[2]=k,e[3]=s,e[4]=t.selectedNrens,e[5]=a,e[6]=i,e[7]=p}else i=e[6],p=e[7];const N=p;let h;e[11]===Symbol.for("react.memo_cache_sentinel")?(h=[],e[11]=h):h=e[11];let l;e[12]!==x?(l=x.values(),e[12]=x,e[13]=l):l=e[13];let r;e[14]!==l?(r={availableYears:h,availableNrens:[...l]},e[14]=l,e[15]=r):r=e[15];let b;e[16]!==t||e[17]!==m||e[18]!==r?(b=c.jsx(J,{filterOptions:r,filterSelection:t,setFilterSelection:m}),e[16]=t,e[17]=m,e[18]=r,e[19]=b):b=e[19];const y=b;let u;e[20]===Symbol.for("react.memo_cache_sentinel")?(u=Q({title:"Kilometres of Leased Dark Fibre",tooltipUnit:"km",unit:"km"}),e[20]=u):u=e[20];const F=u,C=f?"within":"outside";let g;e[21]!==C?(g=c.jsxs("span",{children:["This graph shows the number of Kilometres of dark fibre leased by NRENs ",C," their own countries. Also included is fibre leased via an IRU (Indefeasible Right of Use), a type of long-term lease of a portion of the capacity of a cable. It does not however, include fibre NRENs have installed, and own, themselves. The distance is the number of kilometres of the fibre pairs, or if bidirectional traffic on a single fibre, it is treated as a fibre pair."]}),e[21]=C,e[22]=g):g=e[22];const L=g,S=f?D["dark-fibre-lease"]:D["dark-fibre-lease-international"],v=`dark_fibre_lease_${f?"national":"international"}`;let n;e[23]!==N?(n=c.jsx(M,{children:c.jsx(U,{data:N,options:F})}),e[23]=N,e[24]=n):n=e[24];let _;return e[25]!==L||e[26]!==y||e[27]!==i||e[28]!==S||e[29]!==v||e[30]!==n?(_=c.jsx(H,{title:S,description:L,category:I.Network,filter:y,data:i,filename:v,children:n}),e[25]=L,e[26]=y,e[27]=i,e[28]=S,e[29]=v,e[30]=n,e[31]=_):_=e[31],_}export{ae as default};
diff --git a/compendium_v2/static/ECProjects-BytaiuC6.js b/compendium_v2/static/ECProjects-BytaiuC6.js
new file mode 100644
index 0000000000000000000000000000000000000000..439a9222be7effaf85b5feb983f28ebfdbe163a7
--- /dev/null
+++ b/compendium_v2/static/ECProjects-BytaiuC6.js
@@ -0,0 +1 @@
+import{c as v,r as Y,F as y,j as u,S as C}from"./index-DunMf8wQ.js";import{u as D,h as T,i as _,D as g,F,f as P}from"./useData-DvdT9bkc.js";import{N as R}from"./NrenYearTable-D3mNeVd3.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";function $(){const e=v.c(27),{filterSelection:t,setFilterSelection:s}=Y.useContext(y),{data:a,years:j,nrens:N}=D("/api/ec-project",s);let r,d;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==a){let f;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(f=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=f):f=e[7],r=a.filter(f);const E=T(r);d=_(E,S),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=a,e[3]=r,e[4]=d}else r=e[3],d=e[4];const b=d;let o;e[8]!==j?(o=[...j],e[8]=j,e[9]=o):o=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let n;e[12]!==i?(n=[...i],e[12]=i,e[13]=n):n=e[13];let l;e[14]!==o||e[15]!==n?(l={availableYears:o,availableNrens:n},e[14]=o,e[15]=n,e[16]=l):l=e[16];let p;e[17]!==t||e[18]!==s||e[19]!==l?(p=u.jsx(F,{filterOptions:l,filterSelection:t,setFilterSelection:s}),e[17]=t,e[18]=s,e[19]=l,e[20]=p):p=e[20];const h=p;let c;e[21]!==b?(c=u.jsx(P,{children:u.jsx(R,{data:b,columnTitle:"EC Project Membership",dottedBorder:!0})}),e[21]=b,e[22]=c):c=e[22];let m;return e[23]!==h||e[24]!==r||e[25]!==c?(m=u.jsx(g,{title:"NREN Involvement in European Commission Projects",description:"Many NRENs are involved in a number of different European Commission project, besides GÉANT. The list of projects in the table below is not necessarily exhaustive, but does contain projects the NRENs consider important or worthy of mention.",category:C.Organisation,filter:h,data:r,filename:"nren_involvement_in_european_commission_projects",children:c}),e[23]=h,e[24]=r,e[25]=c,e[26]=m):m=e[26],m}function S(e,t){const s=t.map(O).sort();s.length&&s.forEach(a=>{e[a]=a})}function O(e){return e.project}export{$ as default};
diff --git a/compendium_v2/static/ECProjects-Ixano_sS.js b/compendium_v2/static/ECProjects-Ixano_sS.js
deleted file mode 100644
index 3232f21ca80dbb90dfda7bbd019301e6c5925665..0000000000000000000000000000000000000000
--- a/compendium_v2/static/ECProjects-Ixano_sS.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as v,r as Y,F as y,j as u,S as C}from"./index.js";import{u as D,h as T,i as _,D as g,F,f as P}from"./useData-CxftshCa.js";import{N as R}from"./NrenYearTable-tQrmAmRo.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";function $(){const e=v.c(27),{filterSelection:t,setFilterSelection:s}=Y.useContext(y),{data:a,years:j,nrens:N}=D("/api/ec-project",s);let r,d;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==a){let f;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(f=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=f):f=e[7],r=a.filter(f);const E=T(r);d=_(E,S),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=a,e[3]=r,e[4]=d}else r=e[3],d=e[4];const b=d;let o;e[8]!==j?(o=[...j],e[8]=j,e[9]=o):o=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let n;e[12]!==i?(n=[...i],e[12]=i,e[13]=n):n=e[13];let l;e[14]!==o||e[15]!==n?(l={availableYears:o,availableNrens:n},e[14]=o,e[15]=n,e[16]=l):l=e[16];let p;e[17]!==t||e[18]!==s||e[19]!==l?(p=u.jsx(F,{filterOptions:l,filterSelection:t,setFilterSelection:s}),e[17]=t,e[18]=s,e[19]=l,e[20]=p):p=e[20];const h=p;let c;e[21]!==b?(c=u.jsx(P,{children:u.jsx(R,{data:b,columnTitle:"EC Project Membership",dottedBorder:!0})}),e[21]=b,e[22]=c):c=e[22];let m;return e[23]!==h||e[24]!==r||e[25]!==c?(m=u.jsx(g,{title:"NREN Involvement in European Commission Projects",description:"Many NRENs are involved in a number of different European Commission project, besides GÉANT. The list of projects in the table below is not necessarily exhaustive, but does contain projects the NRENs consider important or worthy of mention.",category:C.Organisation,filter:h,data:r,filename:"nren_involvement_in_european_commission_projects",children:c}),e[23]=h,e[24]=r,e[25]=c,e[26]=m):m=e[26],m}function S(e,t){const s=t.map(O).sort();s.length&&s.forEach(a=>{e[a]=a})}function O(e){return e.project}export{$ as default};
diff --git a/compendium_v2/static/EOSCListings-DWYL3kBM.js b/compendium_v2/static/EOSCListings-DWYL3kBM.js
deleted file mode 100644
index 10f2ece7f5658ce5484683f7f08917405905ec4a..0000000000000000000000000000000000000000
--- a/compendium_v2/static/EOSCListings-DWYL3kBM.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as Y,r as j,F as C,j as f,t as D,S as E}from"./index.js";import{u as _,h as F,i as R,D as L,F as k,f as O}from"./useData-CxftshCa.js";import{N as P}from"./NrenYearTable-tQrmAmRo.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";function H(){const e=Y.c(28),{filterSelection:t,setFilterSelection:l}=j.useContext(C),{data:a,years:N,nrens:x}=_("/api/eosc-listings",l);let s,d;if(e[0]!==a||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let h;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(h=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=h):h=e[7],s=a.filter(h);const y=F(s);d=R(y,T),e[0]=a,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=d}else s=e[3],d=e[4];const S=d;let i;e[8]!==N?(i=[...N],e[8]=N,e[9]=i):i=e[9];let r;e[10]!==x?(r=x.values(),e[10]=x,e[11]=r):r=e[11];let o;e[12]!==r?(o=[...r],e[12]=r,e[13]=o):o=e[13];let n;e[14]!==i||e[15]!==o?(n={availableYears:i,availableNrens:o},e[14]=i,e[15]=o,e[16]=n):n=e[16];let m;e[17]!==t||e[18]!==l||e[19]!==n?(m=f.jsx(k,{filterOptions:n,filterSelection:t,setFilterSelection:l}),e[17]=t,e[18]=l,e[19]=n,e[20]=m):m=e[20];const g=m;let p;e[21]===Symbol.for("react.memo_cache_sentinel")?(p=f.jsx("span",{children:"Some NRENs choose to list services on the EOSC portal, these can be seen in the table below. Click on the name of the NREN to expand the detail and see the names of the services they list."}),e[21]=p):p=e[21];const v=p;let c;e[22]!==S?(c=f.jsx(O,{children:f.jsx(P,{data:S,columnTitle:"Service Name",dottedBorder:!0,keysAreURLs:!0,noDots:!0})}),e[22]=S,e[23]=c):c=e[23];let u;return e[24]!==g||e[25]!==s||e[26]!==c?(u=f.jsx(L,{title:D.eosc_listings,description:v,category:E.Policy,filter:g,data:s,filename:"nren_eosc_listings",children:c}),e[24]=g,e[25]=s,e[26]=c,e[27]=u):u=e[27],u}function T(e,t){for(const l of t)for(const a of l.service_names)e[a]=a}export{H as default};
diff --git a/compendium_v2/static/EOSCListings-H_13YHeq.js b/compendium_v2/static/EOSCListings-H_13YHeq.js
new file mode 100644
index 0000000000000000000000000000000000000000..6d6d183920ef17261c77781992fcfe76df7edfa3
--- /dev/null
+++ b/compendium_v2/static/EOSCListings-H_13YHeq.js
@@ -0,0 +1 @@
+import{c as Y,r as j,F as C,j as f,t as D,S as E}from"./index-DunMf8wQ.js";import{u as _,h as F,i as R,D as L,F as k,f as O}from"./useData-DvdT9bkc.js";import{N as P}from"./NrenYearTable-D3mNeVd3.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";function H(){const e=Y.c(28),{filterSelection:t,setFilterSelection:l}=j.useContext(C),{data:a,years:N,nrens:x}=_("/api/eosc-listings",l);let s,d;if(e[0]!==a||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let h;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(h=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=h):h=e[7],s=a.filter(h);const y=F(s);d=R(y,T),e[0]=a,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=d}else s=e[3],d=e[4];const S=d;let i;e[8]!==N?(i=[...N],e[8]=N,e[9]=i):i=e[9];let r;e[10]!==x?(r=x.values(),e[10]=x,e[11]=r):r=e[11];let o;e[12]!==r?(o=[...r],e[12]=r,e[13]=o):o=e[13];let n;e[14]!==i||e[15]!==o?(n={availableYears:i,availableNrens:o},e[14]=i,e[15]=o,e[16]=n):n=e[16];let m;e[17]!==t||e[18]!==l||e[19]!==n?(m=f.jsx(k,{filterOptions:n,filterSelection:t,setFilterSelection:l}),e[17]=t,e[18]=l,e[19]=n,e[20]=m):m=e[20];const g=m;let p;e[21]===Symbol.for("react.memo_cache_sentinel")?(p=f.jsx("span",{children:"Some NRENs choose to list services on the EOSC portal, these can be seen in the table below. Click on the name of the NREN to expand the detail and see the names of the services they list."}),e[21]=p):p=e[21];const v=p;let c;e[22]!==S?(c=f.jsx(O,{children:f.jsx(P,{data:S,columnTitle:"Service Name",dottedBorder:!0,keysAreURLs:!0,noDots:!0})}),e[22]=S,e[23]=c):c=e[23];let u;return e[24]!==g||e[25]!==s||e[26]!==c?(u=f.jsx(L,{title:D.eosc_listings,description:v,category:E.Policy,filter:g,data:s,filename:"nren_eosc_listings",children:c}),e[24]=g,e[25]=s,e[26]=c,e[27]=u):u=e[27],u}function T(e,t){for(const l of t)for(const a of l.service_names)e[a]=a}export{H as default};
diff --git a/compendium_v2/static/ExternalConnections-BVnV4NEl.js b/compendium_v2/static/ExternalConnections-BVnV4NEl.js
deleted file mode 100644
index 887261f1395331ceb6411c24507a1ba0339d93f3..0000000000000000000000000000000000000000
--- a/compendium_v2/static/ExternalConnections-BVnV4NEl.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as _,j as r,e as C,r as S,F as E,t as w,S as D}from"./index.js";import{u as F,h as T,D as Y,F as R,f as L}from"./useData-CxftshCa.js";import{T as O}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";function $(e){const t=_.c(8),{dataLookup:l,columnInfo:a}=e;if(!l){let s;return t[0]===Symbol.for("react.memo_cache_sentinel")?(s=r.jsx("div",{className:"matrix-border-round"}),t[0]=s):s=t[0],s}let d;if(t[1]!==a||t[2]!==l){let s;t[4]!==a?(s=j=>{const[i,h]=j;return r.jsx(C,{title:i,theme:"-table",startCollapsed:!0,children:r.jsx("div",{className:"scrollable-horizontal",children:Array.from(h.entries()).map(m=>{const[o,b]=m,x={"--before-color":`var(--color-of-the-year-muted-${o%9})`};return r.jsxs("div",{children:[r.jsx("span",{className:`scrollable-table-year color-of-the-year-${o%9} bold-caps-16pt pt-3 ps-3`,style:x,children:o}),r.jsx("div",{className:`colored-table bg-muted-color-of-the-year-${o%9}`,children:r.jsxs(O,{children:[r.jsx("thead",{children:r.jsx("tr",{children:Object.keys(a).map(c=>r.jsx("th",{style:{position:"relative"},children:r.jsx("span",{style:x,children:c})},c))})}),r.jsx("tbody",{children:b.map((c,k)=>r.jsx("tr",{children:Object.entries(a).map(u=>{const[g,f]=u,y=c[f];return r.jsx("td",{children:y},g)})},k))})]})})]},o)})})},i)},t[4]=a,t[5]=s):s=t[5],d=Array.from(l.entries()).map(s),t[1]=a,t[2]=l,t[3]=d}else d=t[3];const p=d;let n;return t[6]!==p?(n=r.jsx("div",{className:"matrix-border-round",children:p}),t[6]=p,t[7]=n):n=t[7],n}function q(){const e=_.c(29),{filterSelection:t,setFilterSelection:l}=S.useContext(E),{data:a,years:d,nrens:p}=F("/api/external-connections",l);let n,s;if(e[0]!==a||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let N;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(N=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=N):N=e[7],n=a.filter(N),s=T([...n]),e[0]=a,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=n,e[4]=s}else n=e[3],s=e[4];const j=s;let i;e[8]!==d?(i=[...d],e[8]=d,e[9]=i):i=e[9];let h;e[10]!==p?(h=p.values(),e[10]=p,e[11]=h):h=e[11];let m;e[12]!==h?(m=[...h],e[12]=h,e[13]=m):m=e[13];let o;e[14]!==i||e[15]!==m?(o={availableYears:i,availableNrens:m},e[14]=i,e[15]=m,e[16]=o):o=e[16];let b;e[17]!==t||e[18]!==l||e[19]!==o?(b=r.jsx(R,{filterOptions:o,filterSelection:t,setFilterSelection:l,coloredYears:!0}),e[17]=t,e[18]=l,e[19]=o,e[20]=b):b=e[20];const x=b;let c;e[21]===Symbol.for("react.memo_cache_sentinel")?(c={"Link Name":"link_name","Capacity (Gbit/s)":"capacity","From Organisation":"from_organization","To Organisation":"to_organization","Interconnection Method":"interconnection_method"},e[21]=c):c=e[21];const k=c;let u;e[22]===Symbol.for("react.memo_cache_sentinel")?(u=r.jsxs(r.Fragment,{children:[r.jsx("p",{children:"The table below shows the operational external IP connections of each NREN. These include links to their regional backbone (ie. GÉANT), to other research locations, to the commercial internet, peerings to internet exchanges, cross-border dark fibre links, and any other links they may have."}),r.jsx("p",{children:"NRENs are asked to state the capacity for production purposes, not any additional link that may be there solely for the purpose of giving resilience. Cross-border fibre links are meant as those links which have been commissioned or established by the NREN from a point on their network, which is near the border to another point near the border on the network of a neighbouring NREN."})]}),e[22]=u):u=e[22];const g=u;let f;e[23]!==j?(f=r.jsx(L,{children:r.jsx($,{dataLookup:j,columnInfo:k})}),e[23]=j,e[24]=f):f=e[24];let y;return e[25]!==x||e[26]!==n||e[27]!==f?(y=r.jsx(Y,{title:w["external-connections"],description:g,category:D.Network,filter:x,data:n,filename:"nren_external_connections",children:f}),e[25]=x,e[26]=n,e[27]=f,e[28]=y):y=e[28],y}export{q as default};
diff --git a/compendium_v2/static/ExternalConnections-Bw3LdeFf.js b/compendium_v2/static/ExternalConnections-Bw3LdeFf.js
new file mode 100644
index 0000000000000000000000000000000000000000..acdb52ce24f43f1ba00c6b303047c23556802d05
--- /dev/null
+++ b/compendium_v2/static/ExternalConnections-Bw3LdeFf.js
@@ -0,0 +1 @@
+import{c as _,j as r,e as C,r as S,F as E,t as w,S as D}from"./index-DunMf8wQ.js";import{u as F,h as T,D as Y,F as R,f as L}from"./useData-DvdT9bkc.js";import{T as O}from"./Table-BUrPWwZB.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";function $(e){const t=_.c(8),{dataLookup:l,columnInfo:a}=e;if(!l){let s;return t[0]===Symbol.for("react.memo_cache_sentinel")?(s=r.jsx("div",{className:"matrix-border-round"}),t[0]=s):s=t[0],s}let d;if(t[1]!==a||t[2]!==l){let s;t[4]!==a?(s=j=>{const[i,h]=j;return r.jsx(C,{title:i,theme:"-table",startCollapsed:!0,children:r.jsx("div",{className:"scrollable-horizontal",children:Array.from(h.entries()).map(m=>{const[o,b]=m,x={"--before-color":`var(--color-of-the-year-muted-${o%9})`};return r.jsxs("div",{children:[r.jsx("span",{className:`scrollable-table-year color-of-the-year-${o%9} bold-caps-16pt pt-3 ps-3`,style:x,children:o}),r.jsx("div",{className:`colored-table bg-muted-color-of-the-year-${o%9}`,children:r.jsxs(O,{children:[r.jsx("thead",{children:r.jsx("tr",{children:Object.keys(a).map(c=>r.jsx("th",{style:{position:"relative"},children:r.jsx("span",{style:x,children:c})},c))})}),r.jsx("tbody",{children:b.map((c,k)=>r.jsx("tr",{children:Object.entries(a).map(u=>{const[g,f]=u,y=c[f];return r.jsx("td",{children:y},g)})},k))})]})})]},o)})})},i)},t[4]=a,t[5]=s):s=t[5],d=Array.from(l.entries()).map(s),t[1]=a,t[2]=l,t[3]=d}else d=t[3];const p=d;let n;return t[6]!==p?(n=r.jsx("div",{className:"matrix-border-round",children:p}),t[6]=p,t[7]=n):n=t[7],n}function q(){const e=_.c(29),{filterSelection:t,setFilterSelection:l}=S.useContext(E),{data:a,years:d,nrens:p}=F("/api/external-connections",l);let n,s;if(e[0]!==a||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let N;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(N=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=N):N=e[7],n=a.filter(N),s=T([...n]),e[0]=a,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=n,e[4]=s}else n=e[3],s=e[4];const j=s;let i;e[8]!==d?(i=[...d],e[8]=d,e[9]=i):i=e[9];let h;e[10]!==p?(h=p.values(),e[10]=p,e[11]=h):h=e[11];let m;e[12]!==h?(m=[...h],e[12]=h,e[13]=m):m=e[13];let o;e[14]!==i||e[15]!==m?(o={availableYears:i,availableNrens:m},e[14]=i,e[15]=m,e[16]=o):o=e[16];let b;e[17]!==t||e[18]!==l||e[19]!==o?(b=r.jsx(R,{filterOptions:o,filterSelection:t,setFilterSelection:l,coloredYears:!0}),e[17]=t,e[18]=l,e[19]=o,e[20]=b):b=e[20];const x=b;let c;e[21]===Symbol.for("react.memo_cache_sentinel")?(c={"Link Name":"link_name","Capacity (Gbit/s)":"capacity","From Organisation":"from_organization","To Organisation":"to_organization","Interconnection Method":"interconnection_method"},e[21]=c):c=e[21];const k=c;let u;e[22]===Symbol.for("react.memo_cache_sentinel")?(u=r.jsxs(r.Fragment,{children:[r.jsx("p",{children:"The table below shows the operational external IP connections of each NREN. These include links to their regional backbone (ie. GÉANT), to other research locations, to the commercial internet, peerings to internet exchanges, cross-border dark fibre links, and any other links they may have."}),r.jsx("p",{children:"NRENs are asked to state the capacity for production purposes, not any additional link that may be there solely for the purpose of giving resilience. Cross-border fibre links are meant as those links which have been commissioned or established by the NREN from a point on their network, which is near the border to another point near the border on the network of a neighbouring NREN."})]}),e[22]=u):u=e[22];const g=u;let f;e[23]!==j?(f=r.jsx(L,{children:r.jsx($,{dataLookup:j,columnInfo:k})}),e[23]=j,e[24]=f):f=e[24];let y;return e[25]!==x||e[26]!==n||e[27]!==f?(y=r.jsx(Y,{title:w["external-connections"],description:g,category:D.Network,filter:x,data:n,filename:"nren_external_connections",children:f}),e[25]=x,e[26]=n,e[27]=f,e[28]=y):y=e[28],y}export{q as default};
diff --git a/compendium_v2/static/FibreLight-Di0VQOdw.js b/compendium_v2/static/FibreLight-Di0VQOdw.js
new file mode 100644
index 0000000000000000000000000000000000000000..4466a10940c495c653540663d5a87930688b5f20
--- /dev/null
+++ b/compendium_v2/static/FibreLight-Di0VQOdw.js
@@ -0,0 +1,2 @@
+import{c as Y,r as j,F as k,j as h,t as v,S as E}from"./index-DunMf8wQ.js";import{u as F,g as S,D as R,F as C,f as D}from"./useData-DvdT9bkc.js";import{P as L}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function B(){const e=Y.c(29),{filterSelection:t,setFilterSelection:c}=j.useContext(k),{data:_,years:N,nrens:g}=F("/api/fibre-light",c);let s,p;if(e[0]!==_||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],s=_.filter(m),p=S(s,"light_description"),e[0]=_,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=p}else s=e[3],p=e[4];const w=p;let i;e[8]!==N?(i=[...N],e[8]=N,e[9]=i):i=e[9];let o;e[10]!==g?(o=g.values(),e[10]=g,e[11]=o):o=e[11];let n;e[12]!==o?(n=[...o],e[12]=o,e[13]=n):n=e[13];let l;e[14]!==i||e[15]!==n?(l={availableYears:i,availableNrens:n},e[14]=i,e[15]=n,e[16]=l):l=e[16];let d;e[17]!==t||e[18]!==c||e[19]!==l?(d=h.jsx(C,{filterOptions:l,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=l,e[20]=d):d=e[20];const x=d;let r,f;e[21]===Symbol.for("react.memo_cache_sentinel")?(r=["NREN owns and operates equipment","NREN owns equipment and operation is outsourced","Ownership and management are out-sourced (turn-key model)"],f=new Map([[r[0],"nren_owns_and_operates"],[r[1],"nren_owns_outsourced_operation"],[r[2],"outsourced_ownership_and_operation"]]),e[21]=r,e[22]=f):(r=e[21],f=e[22]);const y=f;let a;e[23]!==w?(a=h.jsx(D,{children:h.jsx(L,{columns:r,dataLookup:w,columnLookup:y,circle:!0})}),e[23]=w,e[24]=a):a=e[24];let u;return e[25]!==x||e[26]!==s||e[27]!==a?(u=h.jsx(R,{title:v["fibre-light"],description:`This graphic shows the different ways NRENs can light their fibre networks. 
+            The option 'Other' is given, with extra information if you hover over the icon.`,category:E.Network,filter:x,data:s,filename:"fibre_light_of_nrens_per_year",children:a}),e[25]=x,e[26]=s,e[27]=a,e[28]=u):u=e[28],u}export{B as default};
diff --git a/compendium_v2/static/FibreLight-UtHnGi0p.js b/compendium_v2/static/FibreLight-UtHnGi0p.js
deleted file mode 100644
index 914a0c7567a680778f3d8119820a306e43c09975..0000000000000000000000000000000000000000
--- a/compendium_v2/static/FibreLight-UtHnGi0p.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{c as Y,r as j,F as k,j as h,t as v,S as E}from"./index.js";import{u as F,g as S,D as R,F as C,f as D}from"./useData-CxftshCa.js";import{P as L}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=Y.c(29),{filterSelection:t,setFilterSelection:c}=j.useContext(k),{data:_,years:N,nrens:g}=F("/api/fibre-light",c);let s,p;if(e[0]!==_||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],s=_.filter(m),p=S(s,"light_description"),e[0]=_,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=p}else s=e[3],p=e[4];const w=p;let i;e[8]!==N?(i=[...N],e[8]=N,e[9]=i):i=e[9];let o;e[10]!==g?(o=g.values(),e[10]=g,e[11]=o):o=e[11];let n;e[12]!==o?(n=[...o],e[12]=o,e[13]=n):n=e[13];let l;e[14]!==i||e[15]!==n?(l={availableYears:i,availableNrens:n},e[14]=i,e[15]=n,e[16]=l):l=e[16];let d;e[17]!==t||e[18]!==c||e[19]!==l?(d=h.jsx(C,{filterOptions:l,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=l,e[20]=d):d=e[20];const x=d;let r,f;e[21]===Symbol.for("react.memo_cache_sentinel")?(r=["NREN owns and operates equipment","NREN owns equipment and operation is outsourced","Ownership and management are out-sourced (turn-key model)"],f=new Map([[r[0],"nren_owns_and_operates"],[r[1],"nren_owns_outsourced_operation"],[r[2],"outsourced_ownership_and_operation"]]),e[21]=r,e[22]=f):(r=e[21],f=e[22]);const y=f;let a;e[23]!==w?(a=h.jsx(D,{children:h.jsx(L,{columns:r,dataLookup:w,columnLookup:y,circle:!0})}),e[23]=w,e[24]=a):a=e[24];let u;return e[25]!==x||e[26]!==s||e[27]!==a?(u=h.jsx(R,{title:v["fibre-light"],description:`This graphic shows the different ways NRENs can light their fibre networks. 
-            The option 'Other' is given, with extra information if you hover over the icon.`,category:E.Network,filter:x,data:s,filename:"fibre_light_of_nrens_per_year",children:a}),e[25]=x,e[26]=s,e[27]=a,e[28]=u):u=e[28],u}export{B as default};
diff --git a/compendium_v2/static/FundingSource-CnnYyCrH.js b/compendium_v2/static/FundingSource-CnnYyCrH.js
new file mode 100644
index 0000000000000000000000000000000000000000..cc39053bffa6267f8565df24311625d9c0381097
--- /dev/null
+++ b/compendium_v2/static/FundingSource-CnnYyCrH.js
@@ -0,0 +1 @@
+import{c as D,j as s,r as P,F as z,t as G,S as M,C as y,R as T}from"./index-DunMf8wQ.js";import{B as H}from"./index-C2DQFzVc.js";import{C as N,a as W,L as q,B as J,p as K,c as Q,d as U,u as V,j as X,D as Z,F as I,f as ee}from"./useData-DvdT9bkc.js";import{p as te}from"./chartjs-plugin-datalabels.esm-Bb0FwIXw.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";function j(e){const t=D.c(6),{index:i,active:l}=e,n=l===void 0?!0:l;let a;t[0]!==n||t[1]!==i?(a=n?s.jsx("div",{className:`color-of-badge-${i%5}`,style:{width:"20px",height:"35px",margin:"2px"}}):s.jsx("div",{className:"color-of-badge-blank",style:{width:"15px",height:"30px",margin:"2px"}}),t[0]=n,t[1]=i,t[2]=a):a=t[2];let r;return t[3]!==i||t[4]!==a?(r=s.jsx("div",{className:"d-inline-block m-2",children:a},i),t[3]=i,t[4]=a,t[5]=r):r=t[5],r}N.register(W,q,J,K,Q,U);const se={maintainAspectRatio:!1,layout:{padding:{right:60}},animation:{duration:0},plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(e){let t=e.dataset.label||"";return e.parsed.y!==null&&(t+=`: ${e.parsed.x}%`),t}}}},scales:{x:{position:"top",ticks:{callback:e=>`${e}%`,stepSize:10},max:100,min:0},xBottom:{ticks:{callback:e=>`${e}%`,stepSize:10},max:100,min:0,grid:{drawOnChartArea:!1},afterDataLimits:function(e){const t=Object.keys(N.instances);let i=-999999,l=999999;for(const n of t)N.instances[n]&&e.chart.scales.xBottom&&(l=Math.min(N.instances[n].scales.x.min,l),i=Math.max(N.instances[n].scales.x.max,i));e.chart.scales.xBottom.options.min=l,e.chart.scales.xBottom.options.max=i,e.chart.scales.xBottom.min=l,e.chart.scales.xBottom.max=i}},y:{ticks:{autoSkip:!1}}},indexAxis:"y"};function $(){const e=D.c(5);let t;e[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:0},0),"Client Institutions"]}),e[0]=t):t=e[0];let i;e[1]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:1},1),"Commercial"]}),e[1]=i):i=e[1];let l;e[2]===Symbol.for("react.memo_cache_sentinel")?(l=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:2},2),"European Funding"]}),e[2]=l):l=e[2];let n;e[3]===Symbol.for("react.memo_cache_sentinel")?(n=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:3},3),"Gov/Public Bodies"]}),e[3]=n):n=e[3];let a;return e[4]===Symbol.for("react.memo_cache_sentinel")?(a=s.jsx("div",{className:"d-flex justify-content-center bold-grey-12pt",children:s.jsxs(T,{xs:"auto",className:"border rounded-3 border-1 my-5 justify-content-center",children:[t,i,l,n,s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:4},4),"Other"]})]})}),e[4]=a):a=e[4],a}function ue(){const e=D.c(44),{filterSelection:t,setFilterSelection:i}=P.useContext(z),{data:l,years:n,nrens:a}=V("/api/funding",i);let r,c,o,_;if(e[0]!==t||e[1]!==l||e[2]!==a||e[3]!==i||e[4]!==n){let E;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(E=m=>t.selectedYears.includes(m.year)&&t.selectedNrens.includes(m.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=E):E=e[11],o=l.filter(E),c=X(o),c.datasets.forEach(m=>{m.data=m.data.filter((ne,L)=>t.selectedNrens.includes(c.labels[L]))});let k;e[12]!==t.selectedNrens?(k=m=>t.selectedNrens.includes(m),e[12]=t.selectedNrens,e[13]=k):k=e[13],c.labels=c.labels.filter(k);let x;e[14]!==n?(x=[...n],e[14]=n,e[15]=x):x=e[15];let p;e[16]!==a?(p=a.values(),e[16]=a,e[17]=p):p=e[17];let g;e[18]!==p?(g=[...p],e[18]=p,e[19]=g):g=e[19];let b;e[20]!==x||e[21]!==g?(b={availableYears:x,availableNrens:g},e[20]=x,e[21]=g,e[22]=b):b=e[22];let F;e[23]!==t||e[24]!==i||e[25]!==b?(F=s.jsx(I,{filterOptions:b,filterSelection:t,setFilterSelection:i}),e[23]=t,e[24]=i,e[25]=b,e[26]=F):F=e[26],r=F,_=Array.from(new Set(o.map(ie))),e[0]=t,e[1]=l,e[2]=a,e[3]=i,e[4]=n,e[5]=r,e[6]=c,e[7]=o,e[8]=_}else r=e[5],c=e[6],o=e[7],_=e[8];const O=_.length,Y=t.selectedYears.length,A=O*Y*2+5;let S;e[27]===Symbol.for("react.memo_cache_sentinel")?(S=s.jsxs("span",{children:['The graph shows the percentage share of their income that NRENs derive from different sources, with any funding and NREN may receive from GÉANT included within "European funding". By "Client institutions" NRENs may be referring to universities, schools, research institutes, commercial clients, or other types of organisation. "Commercial services" include services such as being a domain registry, or security support.',s.jsx("br",{}),"Hovering over the graph bars will show the exact figures, per source. When viewing multiple years, it is advisable to restrict the number of NRENs being compared."]}),e[27]=S):S=e[27];let v;e[28]===Symbol.for("react.memo_cache_sentinel")?(v=s.jsx($,{}),e[28]=v):v=e[28];const R=`${A}rem`;let d;e[29]!==R?(d={height:R},e[29]=R,e[30]=d):d=e[30];let C;e[31]===Symbol.for("react.memo_cache_sentinel")?(C=[te],e[31]=C):C=e[31];let f;e[32]!==c?(f=s.jsx(H,{plugins:C,data:c,options:se}),e[32]=c,e[33]=f):f=e[33];let u;e[34]!==d||e[35]!==f?(u=s.jsx("div",{className:"chart-container",style:d,children:f}),e[34]=d,e[35]=f,e[36]=u):u=e[36];let B;e[37]===Symbol.for("react.memo_cache_sentinel")?(B=s.jsx($,{}),e[37]=B):B=e[37];let h;e[38]!==u?(h=s.jsxs(ee,{children:[v,u,B]}),e[38]=u,e[39]=h):h=e[39];let w;return e[40]!==r||e[41]!==o||e[42]!==h?(w=s.jsx(Z,{title:G.funding,description:S,category:M.Organisation,filter:r,data:o,filename:"income_source_of_nren_per_year",children:h}),e[40]=r,e[41]=o,e[42]=h,e[43]=w):w=e[43],w}function ie(e){return e.nren}export{ue as default};
diff --git a/compendium_v2/static/FundingSource-DoZCzgMa.js b/compendium_v2/static/FundingSource-DoZCzgMa.js
deleted file mode 100644
index fc8f2e44b3246dc3c23455d9326d6f64e54b079a..0000000000000000000000000000000000000000
--- a/compendium_v2/static/FundingSource-DoZCzgMa.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as D,j as s,r as P,F as z,t as G,S as M,C as y,R as T}from"./index.js";import{B as H}from"./index-CjWPDfDC.js";import{C as N,a as W,L as q,B as J,p as K,c as Q,d as U,u as V,j as X,D as Z,F as I,f as ee}from"./useData-CxftshCa.js";import{p as te}from"./chartjs-plugin-datalabels.esm-CjG-nxnq.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";function j(e){const t=D.c(6),{index:i,active:l}=e,n=l===void 0?!0:l;let a;t[0]!==n||t[1]!==i?(a=n?s.jsx("div",{className:`color-of-badge-${i%5}`,style:{width:"20px",height:"35px",margin:"2px"}}):s.jsx("div",{className:"color-of-badge-blank",style:{width:"15px",height:"30px",margin:"2px"}}),t[0]=n,t[1]=i,t[2]=a):a=t[2];let r;return t[3]!==i||t[4]!==a?(r=s.jsx("div",{className:"d-inline-block m-2",children:a},i),t[3]=i,t[4]=a,t[5]=r):r=t[5],r}N.register(W,q,J,K,Q,U);const se={maintainAspectRatio:!1,layout:{padding:{right:60}},animation:{duration:0},plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(e){let t=e.dataset.label||"";return e.parsed.y!==null&&(t+=`: ${e.parsed.x}%`),t}}}},scales:{x:{position:"top",ticks:{callback:e=>`${e}%`,stepSize:10},max:100,min:0},xBottom:{ticks:{callback:e=>`${e}%`,stepSize:10},max:100,min:0,grid:{drawOnChartArea:!1},afterDataLimits:function(e){const t=Object.keys(N.instances);let i=-999999,l=999999;for(const n of t)N.instances[n]&&e.chart.scales.xBottom&&(l=Math.min(N.instances[n].scales.x.min,l),i=Math.max(N.instances[n].scales.x.max,i));e.chart.scales.xBottom.options.min=l,e.chart.scales.xBottom.options.max=i,e.chart.scales.xBottom.min=l,e.chart.scales.xBottom.max=i}},y:{ticks:{autoSkip:!1}}},indexAxis:"y"};function $(){const e=D.c(5);let t;e[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:0},0),"Client Institutions"]}),e[0]=t):t=e[0];let i;e[1]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:1},1),"Commercial"]}),e[1]=i):i=e[1];let l;e[2]===Symbol.for("react.memo_cache_sentinel")?(l=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:2},2),"European Funding"]}),e[2]=l):l=e[2];let n;e[3]===Symbol.for("react.memo_cache_sentinel")?(n=s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:3},3),"Gov/Public Bodies"]}),e[3]=n):n=e[3];let a;return e[4]===Symbol.for("react.memo_cache_sentinel")?(a=s.jsx("div",{className:"d-flex justify-content-center bold-grey-12pt",children:s.jsxs(T,{xs:"auto",className:"border rounded-3 border-1 my-5 justify-content-center",children:[t,i,l,n,s.jsxs(y,{className:"d-flex align-items-center",children:[s.jsx(j,{index:4},4),"Other"]})]})}),e[4]=a):a=e[4],a}function ue(){const e=D.c(44),{filterSelection:t,setFilterSelection:i}=P.useContext(z),{data:l,years:n,nrens:a}=V("/api/funding",i);let r,c,o,_;if(e[0]!==t||e[1]!==l||e[2]!==a||e[3]!==i||e[4]!==n){let E;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(E=m=>t.selectedYears.includes(m.year)&&t.selectedNrens.includes(m.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=E):E=e[11],o=l.filter(E),c=X(o),c.datasets.forEach(m=>{m.data=m.data.filter((ne,L)=>t.selectedNrens.includes(c.labels[L]))});let k;e[12]!==t.selectedNrens?(k=m=>t.selectedNrens.includes(m),e[12]=t.selectedNrens,e[13]=k):k=e[13],c.labels=c.labels.filter(k);let x;e[14]!==n?(x=[...n],e[14]=n,e[15]=x):x=e[15];let p;e[16]!==a?(p=a.values(),e[16]=a,e[17]=p):p=e[17];let g;e[18]!==p?(g=[...p],e[18]=p,e[19]=g):g=e[19];let b;e[20]!==x||e[21]!==g?(b={availableYears:x,availableNrens:g},e[20]=x,e[21]=g,e[22]=b):b=e[22];let F;e[23]!==t||e[24]!==i||e[25]!==b?(F=s.jsx(I,{filterOptions:b,filterSelection:t,setFilterSelection:i}),e[23]=t,e[24]=i,e[25]=b,e[26]=F):F=e[26],r=F,_=Array.from(new Set(o.map(ie))),e[0]=t,e[1]=l,e[2]=a,e[3]=i,e[4]=n,e[5]=r,e[6]=c,e[7]=o,e[8]=_}else r=e[5],c=e[6],o=e[7],_=e[8];const O=_.length,Y=t.selectedYears.length,A=O*Y*2+5;let S;e[27]===Symbol.for("react.memo_cache_sentinel")?(S=s.jsxs("span",{children:['The graph shows the percentage share of their income that NRENs derive from different sources, with any funding and NREN may receive from GÉANT included within "European funding". By "Client institutions" NRENs may be referring to universities, schools, research institutes, commercial clients, or other types of organisation. "Commercial services" include services such as being a domain registry, or security support.',s.jsx("br",{}),"Hovering over the graph bars will show the exact figures, per source. When viewing multiple years, it is advisable to restrict the number of NRENs being compared."]}),e[27]=S):S=e[27];let v;e[28]===Symbol.for("react.memo_cache_sentinel")?(v=s.jsx($,{}),e[28]=v):v=e[28];const R=`${A}rem`;let d;e[29]!==R?(d={height:R},e[29]=R,e[30]=d):d=e[30];let C;e[31]===Symbol.for("react.memo_cache_sentinel")?(C=[te],e[31]=C):C=e[31];let f;e[32]!==c?(f=s.jsx(H,{plugins:C,data:c,options:se}),e[32]=c,e[33]=f):f=e[33];let u;e[34]!==d||e[35]!==f?(u=s.jsx("div",{className:"chart-container",style:d,children:f}),e[34]=d,e[35]=f,e[36]=u):u=e[36];let B;e[37]===Symbol.for("react.memo_cache_sentinel")?(B=s.jsx($,{}),e[37]=B):B=e[37];let h;e[38]!==u?(h=s.jsxs(ee,{children:[v,u,B]}),e[38]=u,e[39]=h):h=e[39];let w;return e[40]!==r||e[41]!==o||e[42]!==h?(w=s.jsx(Z,{title:G.funding,description:S,category:M.Organisation,filter:r,data:o,filename:"income_source_of_nren_per_year",children:h}),e[40]=r,e[41]=o,e[42]=h,e[43]=w):w=e[43],w}function ie(e){return e.nren}export{ue as default};
diff --git a/compendium_v2/static/HTMLLegendPlugin-C-L3dIU1.js b/compendium_v2/static/HTMLLegendPlugin-C-L3dIU1.js
deleted file mode 100644
index a773a200b35634fa7833c48955f3f21d49d92632..0000000000000000000000000000000000000000
--- a/compendium_v2/static/HTMLLegendPlugin-C-L3dIU1.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as g,j as p}from"./index.js";import{f as m,C as c}from"./useData-CxftshCa.js";const C=o=>{const e=g.c(8);let{children:s,location:t}=o;t||(t="both");const r=t==="top"||t==="both",a=t==="bottom"||t==="both";let n;e[0]!==r?(n=r&&p.jsx("div",{style:{paddingLeft:"33%",paddingTop:"2.5rem",paddingBottom:"1.5rem"},id:"legendtop"}),e[0]=r,e[1]=n):n=e[1];let l;e[2]!==a?(l=a&&p.jsx("div",{style:{paddingLeft:"33%",paddingTop:"1.5rem"},id:"legendbottom"}),e[2]=a,e[3]=l):l=e[3];let i;return e[4]!==s||e[5]!==n||e[6]!==l?(i=p.jsxs(m,{children:[n,s,l]}),e[4]=s,e[5]=n,e[6]=l,e[7]=i):i=e[7],i},u=(o,e)=>{const s=document.getElementById(e);if(!s)return null;let t=s.querySelector("ul");return t||(t=document.createElement("ul"),t.style.display="flex",t.style.flexDirection="row",t.style.margin="0",t.style.padding="0",s.appendChild(t)),t},b={id:"htmlLegend",afterUpdate(o,e,s){for(const t of s.containerIDs){const r=u(o,t);if(!r)return;for(;r.firstChild;)r.firstChild.remove();o.options.plugins.legend.labels.generateLabels(o).forEach(n=>{const l=document.createElement("li");l.style.alignItems="center",l.style.cursor="pointer",l.style.display="flex",l.style.flexDirection="row",l.style.marginLeft="10px",l.onclick=()=>{const{type:f}=o.config;f==="pie"||f==="doughnut"?o.toggleDataVisibility(n.index):o.setDatasetVisibility(n.datasetIndex,!o.isDatasetVisible(n.datasetIndex)),o.update()};const i=document.createElement("span");i.style.background=n.fillStyle,i.style.borderColor=n.strokeStyle,i.style.borderWidth=n.lineWidth+"px",i.style.display="inline-block",i.style.height="1rem",i.style.marginRight="10px",i.style.width="2.5rem";const d=document.createElement("p");d.style.color=n.fontColor,d.style.margin="0",d.style.padding="0",d.style.textDecoration=n.hidden?"line-through":"",d.style.fontSize=`${c.defaults.font.size}px`,d.style.fontFamily=`${c.defaults.font.family}`,d.style.fontWeight=`${c.defaults.font.weight}`;const y=document.createTextNode(n.text);d.appendChild(y),l.appendChild(i),l.appendChild(d),r.appendChild(l)})}}};export{C as W,b as h};
diff --git a/compendium_v2/static/HTMLLegendPlugin-DF0OaxMQ.js b/compendium_v2/static/HTMLLegendPlugin-DF0OaxMQ.js
new file mode 100644
index 0000000000000000000000000000000000000000..24c7ce7bc77838db970ad10f4ec38f69e4557f56
--- /dev/null
+++ b/compendium_v2/static/HTMLLegendPlugin-DF0OaxMQ.js
@@ -0,0 +1 @@
+import{c as g,j as p}from"./index-DunMf8wQ.js";import{f as m,C as c}from"./useData-DvdT9bkc.js";const C=o=>{const e=g.c(8);let{children:s,location:t}=o;t||(t="both");const r=t==="top"||t==="both",a=t==="bottom"||t==="both";let n;e[0]!==r?(n=r&&p.jsx("div",{style:{paddingLeft:"33%",paddingTop:"2.5rem",paddingBottom:"1.5rem"},id:"legendtop"}),e[0]=r,e[1]=n):n=e[1];let l;e[2]!==a?(l=a&&p.jsx("div",{style:{paddingLeft:"33%",paddingTop:"1.5rem"},id:"legendbottom"}),e[2]=a,e[3]=l):l=e[3];let i;return e[4]!==s||e[5]!==n||e[6]!==l?(i=p.jsxs(m,{children:[n,s,l]}),e[4]=s,e[5]=n,e[6]=l,e[7]=i):i=e[7],i},u=(o,e)=>{const s=document.getElementById(e);if(!s)return null;let t=s.querySelector("ul");return t||(t=document.createElement("ul"),t.style.display="flex",t.style.flexDirection="row",t.style.margin="0",t.style.padding="0",s.appendChild(t)),t},b={id:"htmlLegend",afterUpdate(o,e,s){for(const t of s.containerIDs){const r=u(o,t);if(!r)return;for(;r.firstChild;)r.firstChild.remove();o.options.plugins.legend.labels.generateLabels(o).forEach(n=>{const l=document.createElement("li");l.style.alignItems="center",l.style.cursor="pointer",l.style.display="flex",l.style.flexDirection="row",l.style.marginLeft="10px",l.onclick=()=>{const{type:f}=o.config;f==="pie"||f==="doughnut"?o.toggleDataVisibility(n.index):o.setDatasetVisibility(n.datasetIndex,!o.isDatasetVisible(n.datasetIndex)),o.update()};const i=document.createElement("span");i.style.background=n.fillStyle,i.style.borderColor=n.strokeStyle,i.style.borderWidth=n.lineWidth+"px",i.style.display="inline-block",i.style.height="1rem",i.style.marginRight="10px",i.style.width="2.5rem";const d=document.createElement("p");d.style.color=n.fontColor,d.style.margin="0",d.style.padding="0",d.style.textDecoration=n.hidden?"line-through":"",d.style.fontSize=`${c.defaults.font.size}px`,d.style.fontFamily=`${c.defaults.font.family}`,d.style.fontWeight=`${c.defaults.font.weight}`;const y=document.createTextNode(n.text);d.appendChild(y),l.appendChild(i),l.appendChild(d),r.appendChild(l)})}}};export{C as W,b as h};
diff --git a/compendium_v2/static/IRUDuration-CI7E3kyS.js b/compendium_v2/static/IRUDuration-CI7E3kyS.js
deleted file mode 100644
index f83919c20e350e0a56261a90d1921b54c4256420..0000000000000000000000000000000000000000
--- a/compendium_v2/static/IRUDuration-CI7E3kyS.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as C,r as D,F as L,j as n,t as R,S as j}from"./index.js";import{L as E}from"./index-CjWPDfDC.js";import{C as v,a as k,L as F,P as I,b as U,p as P,c as w,d as O,u as Y,e as T,D as $,F as q,f as z}from"./useData-CxftshCa.js";import{g as A}from"./charthelpers-B0zLHD4s.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";v.register(k,F,I,U,P,w,O);function W(){const e=C.c(24);let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=r=>r.iru_duration!=null,e[0]=o):o=e[0];const N=o,{filterSelection:t,setFilterSelection:c}=D.useContext(L),{data:g,nrens:_}=Y("/api/dark-fibre-lease",c,N);let a,f;if(e[1]!==g||e[2]!==t.selectedNrens){let r;e[5]!==t.selectedNrens?(r=S=>t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=r):r=e[6],a=g.filter(r),f=T(a,"iru_duration"),e[1]=g,e[2]=t.selectedNrens,e[3]=a,e[4]=f}else a=e[3],f=e[4];const x=f;let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=[],e[7]=m):m=e[7];let s;e[8]!==_?(s=_.values(),e[8]=_,e[9]=s):s=e[9];let i;e[10]!==s?(i={availableYears:m,availableNrens:[...s]},e[10]=s,e[11]=i):i=e[11];let d;e[12]!==t||e[13]!==c||e[14]!==i?(d=n.jsx(q,{filterOptions:i,filterSelection:t,setFilterSelection:c}),e[12]=t,e[13]=c,e[14]=i,e[15]=d):d=e[15];const y=d;let p;e[16]===Symbol.for("react.memo_cache_sentinel")?(p=A({title:"Lease Duration In Years",tooltipUnit:"years",tickLimit:999}),e[16]=p):p=e[16];const b=p;let u;e[17]===Symbol.for("react.memo_cache_sentinel")?(u=n.jsx("span",{children:"NRENs sometimes take out an IRU (Indefeasible Right of Use), which is essentially a long-term lease, on a portion of the capacity of a cable rather than laying cable themselves. This graph shows the average duration, in years, of the IRUs of NRENs."}),e[17]=u):u=e[17];let l;e[18]!==x?(l=n.jsx(z,{children:n.jsx(E,{data:x,options:b})}),e[18]=x,e[19]=l):l=e[19];let h;return e[20]!==y||e[21]!==a||e[22]!==l?(h=n.jsx($,{title:R["iru-duration"],description:u,category:j.Network,filter:y,data:a,filename:"iru_duration_data",children:l}),e[20]=y,e[21]=a,e[22]=l,e[23]=h):h=e[23],h}export{W as default};
diff --git a/compendium_v2/static/IRUDuration-CwtYlEdU.js b/compendium_v2/static/IRUDuration-CwtYlEdU.js
new file mode 100644
index 0000000000000000000000000000000000000000..36ad1a183e5a0977e3ca8b3fc6eca401e002ef07
--- /dev/null
+++ b/compendium_v2/static/IRUDuration-CwtYlEdU.js
@@ -0,0 +1 @@
+import{c as C,r as D,F as L,j as n,t as R,S as j}from"./index-DunMf8wQ.js";import{L as E}from"./index-C2DQFzVc.js";import{C as v,a as k,L as F,P as I,b as U,p as P,c as w,d as O,u as Y,e as T,D as $,F as q,f as z}from"./useData-DvdT9bkc.js";import{g as A}from"./charthelpers-vHYh9qxV.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";v.register(k,F,I,U,P,w,O);function W(){const e=C.c(24);let o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=r=>r.iru_duration!=null,e[0]=o):o=e[0];const N=o,{filterSelection:t,setFilterSelection:c}=D.useContext(L),{data:g,nrens:_}=Y("/api/dark-fibre-lease",c,N);let a,f;if(e[1]!==g||e[2]!==t.selectedNrens){let r;e[5]!==t.selectedNrens?(r=S=>t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=r):r=e[6],a=g.filter(r),f=T(a,"iru_duration"),e[1]=g,e[2]=t.selectedNrens,e[3]=a,e[4]=f}else a=e[3],f=e[4];const x=f;let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=[],e[7]=m):m=e[7];let s;e[8]!==_?(s=_.values(),e[8]=_,e[9]=s):s=e[9];let i;e[10]!==s?(i={availableYears:m,availableNrens:[...s]},e[10]=s,e[11]=i):i=e[11];let d;e[12]!==t||e[13]!==c||e[14]!==i?(d=n.jsx(q,{filterOptions:i,filterSelection:t,setFilterSelection:c}),e[12]=t,e[13]=c,e[14]=i,e[15]=d):d=e[15];const y=d;let p;e[16]===Symbol.for("react.memo_cache_sentinel")?(p=A({title:"Lease Duration In Years",tooltipUnit:"years",tickLimit:999}),e[16]=p):p=e[16];const b=p;let u;e[17]===Symbol.for("react.memo_cache_sentinel")?(u=n.jsx("span",{children:"NRENs sometimes take out an IRU (Indefeasible Right of Use), which is essentially a long-term lease, on a portion of the capacity of a cable rather than laying cable themselves. This graph shows the average duration, in years, of the IRUs of NRENs."}),e[17]=u):u=e[17];let l;e[18]!==x?(l=n.jsx(z,{children:n.jsx(E,{data:x,options:b})}),e[18]=x,e[19]=l):l=e[19];let h;return e[20]!==y||e[21]!==a||e[22]!==l?(h=n.jsx($,{title:R["iru-duration"],description:u,category:j.Network,filter:y,data:a,filename:"iru_duration_data",children:l}),e[20]=y,e[21]=a,e[22]=l,e[23]=h):h=e[23],h}export{W as default};
diff --git a/compendium_v2/static/Landing-35TvxyJ6.js b/compendium_v2/static/Landing-35TvxyJ6.js
deleted file mode 100644
index 7c44e34ae3546f3b157978ad51e41ced4790b34a..0000000000000000000000000000000000000000
--- a/compendium_v2/static/Landing-35TvxyJ6.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as Q,Q as K,r as L,a1 as X,D as Z,j as t,L as z,E as ee,R as te}from"./index.js";import{u as W,w as ne}from"./xlsx-BHRztzV8.js";import{S as re}from"./SurveySidebar-CG0gwQ6b.js";import{f as se,a as le}from"./survey-3meXCY6T.js";import{T as q}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";const oe=()=>{const e=Q.c(32);let i;e[0]===Symbol.for("react.memo_cache_sentinel")?(i=[],e[0]=i):i=e[0];const[u,m]=L.useState(i);let n;e[1]===Symbol.for("react.memo_cache_sentinel")?(n=[],e[1]=n):n=e[1];const[a,h]=L.useState(n);let s;e[2]===Symbol.for("react.memo_cache_sentinel")?(s=function(){fetch("/api/nren-exclusions").then(de).then(r=>{m(r)}).catch(me)},e[2]=s):s=e[2];const c=s;let f,P;e[3]===Symbol.for("react.memo_cache_sentinel")?(f=()=>{fetch("/api/nren/list").then(he).then(l=>{const r=l.map(ue);h(r)}).catch(fe)},P=[],e[3]=f,e[4]=P):(f=e[3],P=e[4]),L.useEffect(f,P);let E;e[5]===Symbol.for("react.memo_cache_sentinel")?(E=async function(r,D){const N=await fetch("/api/nren-exclusions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({nren:r,year:D})}),$=await N.json();N.ok?m($):alert($.message),document.getElementById("excludenren").value="",document.getElementById("excludeyear").value=""},e[5]=E):E=e[5];const G=E;let S;e[6]===Symbol.for("react.memo_cache_sentinel")?(S=async function(r,D){const N=await fetch("/api/nren-exclusions",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({nren:r,year:D})}),$=await N.json();N.ok?m($):alert($.message)},e[6]=S):S=e[6];const H=S;let w,M;e[7]===Symbol.for("react.memo_cache_sentinel")?(w=()=>{c()},M=[],e[7]=w,e[8]=M):(w=e[7],M=e[8]),L.useEffect(w,M);let x,C,k,R;e[9]===Symbol.for("react.memo_cache_sentinel")?(R=t.jsx("hr",{className:"fake-divider"}),x=t.jsx("h2",{children:"NREN Exclusions"}),C=t.jsx("p",{children:"Use this table to exclude data for a specific NREN and year."}),k=t.jsx("p",{children:"If an NREN shows up in this table, they will not be allowed to view/edit or answer their survey."}),e[9]=x,e[10]=C,e[11]=k,e[12]=R):(x=e[9],C=e[10],k=e[11],R=e[12]);let T;e[13]===Symbol.for("react.memo_cache_sentinel")?(T=t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"NREN"}),t.jsx("th",{children:"Year"}),t.jsx("th",{children:"Actions"})]})}),e[13]=T):T=e[13];let A;e[14]===Symbol.for("react.memo_cache_sentinel")?(A=t.jsx("option",{value:"",children:"Select NREN"}),e[14]=A):A=e[14];let y;e[15]!==a?(y=a.map(xe),e[15]=a,e[16]=y):y=e[16];let p;e[17]!==y?(p=t.jsx("td",{children:t.jsxs("select",{id:"excludenren",children:[A,y]})}),e[17]=y,e[18]=p):p=e[18];let O;e[19]===Symbol.for("react.memo_cache_sentinel")?(O=t.jsx("td",{children:t.jsx("input",{id:"excludeyear",type:"year",name:"year"})}),e[19]=O):O=e[19];let I;e[20]===Symbol.for("react.memo_cache_sentinel")?(I=t.jsx("td",{children:t.jsx("button",{className:"btn btn-primary",onClick:()=>{const l=document.getElementById("excludenren").value,r=parseInt(document.getElementById("excludeyear").value);if(!l||!r){alert("Please enter an NREN and year");return}G(l,r)},children:"Add Exclusion"})}),e[20]=I):I=e[20];let j;e[21]!==p?(j=t.jsxs("tr",{children:[p,O,I]}),e[21]=p,e[22]=j):j=e[22];let b;if(e[23]!==u){let l;e[25]===Symbol.for("react.memo_cache_sentinel")?(l=r=>t.jsxs("tr",{children:[t.jsx("td",{children:r.nren}),t.jsx("td",{children:r.year}),t.jsx("td",{children:t.jsx("button",{className:"btn btn-danger",onClick:()=>H(r.nren,r.year),children:"Delete"})})]},r.nren+r.year),e[25]=l):l=e[25],b=u.map(l),e[23]=u,e[24]=b}else b=e[24];let d;e[26]!==j||e[27]!==b?(d=t.jsxs(q,{striped:!0,bordered:!0,responsive:!0,children:[T,t.jsxs("tbody",{children:[j,b]})]}),e[26]=j,e[27]=b,e[28]=d):d=e[28];let _;e[29]===Symbol.for("react.memo_cache_sentinel")?(_=t.jsx("hr",{className:"fake-divider"}),e[29]=_):_=e[29];let v;return e[30]!==d?(v=t.jsxs(t.Fragment,{children:[R,x,C,k,d,_]}),e[30]=d,e[31]=v):v=e[31],v},ce=()=>{const e=Q.c(7),[i,u]=L.useState();let m,n;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{le().then(c=>{u(c[0])})},n=[],e[0]=m,e[1]=n):(m=e[0],n=e[1]),L.useEffect(m,n);let a;e[2]===Symbol.for("react.memo_cache_sentinel")?(a=t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"(N)REN"}),t.jsx("th",{children:"Link"}),t.jsx("th",{children:"Survey Status"})]})}),e[2]=a):a=e[2];let h;e[3]!==i?(h=i&&i.responses.map(c=>t.jsxs("tr",{children:[t.jsx("td",{children:c.nren.name}),t.jsx("td",{children:t.jsx(z,{to:`/survey/response/${i.year}/${c.nren.name}`,children:t.jsx("span",{children:"Navigate to survey"})})}),t.jsx("td",{children:c.status})]},c.nren.id)),e[3]=i,e[4]=h):h=e[4];let s;return e[5]!==h?(s=t.jsxs(q,{striped:!0,bordered:!0,responsive:!0,children:[a,t.jsx("tbody",{children:h})]}),e[5]=h,e[6]=s):s=e[6],s};function ge(){const e=Q.c(40),{trackPageView:i}=K(),{user:u}=L.useContext(X),m=Z(),n=!!u.id,a=n?!!u.nrens.length:!1,h=a?u.nrens[0]:"",s=n?u.permissions.admin:!1,c=n?u.role==="observer":!1,[f,P]=L.useState(null);let E,G;e[0]!==i?(E=()=>{(async()=>{const N=await se();P(N)})(),i({documentTitle:"GEANT Survey Landing Page"})},G=[i],e[0]=i,e[1]=E,e[2]=G):(E=e[1],G=e[2]),L.useEffect(E,G);let S;e[3]!==h||e[4]!==f||e[5]!==m?(S=()=>{try{return m(`/survey/response/${f}/${h}`),t.jsx("li",{children:"Redirecting to survey..."})}catch(D){return console.error("Error navigating:",D),null}},e[3]=h,e[4]=f,e[5]=m,e[6]=S):S=e[6];const H=S;let w;if(e[7]===Symbol.for("react.memo_cache_sentinel")){const D=function(Y,F,g){const B=W.decode_range(Y["!ref"]??"");let J=-1;for(let o=B.s.c;o<=B.e.c;o++){const U=W.encode_cell({r:B.s.r,c:o}),V=Y[U];if(V&&typeof V.v=="string"&&V.v===F){J=o;break}}if(J===-1){console.error(`Column '${F}' not found.`);return}for(let o=B.s.r+1;o<=B.e.r;++o){const U=W.encode_cell({r:o,c:J});Y[U]&&Y[U].t==="n"&&(Y[U].z=g)}},N=function(Y){const F=W.book_new();Y.forEach(o=>{const U=W.json_to_sheet(o.data);o.meta&&D(U,o.meta.columnName,o.meta.format),W.book_append_sheet(F,U,o.name)});const g=ne(F,{bookType:"xlsx",type:"binary"}),B=new ArrayBuffer(g.length),J=new Uint8Array(B);for(let o=0;o<g.length;o++)J[o]=g.charCodeAt(o)&255;return new Blob([B],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"})};w=function(){fetch("/api/data-download").then(ae).then(Y=>{const F=N(Y),g=document.createElement("a");g.href=URL.createObjectURL(F),g.download="data.xlsx",document.body.appendChild(g),g.click(),document.body.removeChild(g)}).catch(ie)},e[7]=w}else w=e[7];const M=w;let x;e[8]!==s?(x=s&&t.jsx(re,{}),e[8]=s,e[9]=x):x=e[9];let C;e[10]===Symbol.for("react.memo_cache_sentinel")?(C=t.jsx("h1",{className:"geant-header",children:"THE GÉANT COMPENDIUM OF NRENS SURVEY"}),e[10]=C):C=e[10];let k,R;e[11]===Symbol.for("react.memo_cache_sentinel")?(k={maxWidth:"75rem"},R={textAlign:"left"},e[11]=k,e[12]=R):(k=e[11],R=e[12]);let T;e[13]===Symbol.for("react.memo_cache_sentinel")?(T=t.jsx("br",{}),e[13]=T):T=e[13];let A;e[14]===Symbol.for("react.memo_cache_sentinel")?(A=t.jsx("a",{href:"/login",children:"here"}),e[14]=A):A=e[14];let y;e[15]===Symbol.for("react.memo_cache_sentinel")?(y=t.jsx("br",{}),e[15]=y):y=e[15];let p;e[16]===Symbol.for("react.memo_cache_sentinel")?(p=t.jsx("br",{}),e[16]=p):p=e[16];let O,I,j,b;e[17]===Symbol.for("react.memo_cache_sentinel")?(O=t.jsxs("p",{style:R,children:["Hello,",T,"Welcome to the GÉANT Compendium Survey. (N)REN Compendium administrators can login via Single Sign On (SSO) ",A,", which will complete their registration to fill in the latest Compendium survey. This will send a notification to the Compendium administration team and they will assign you to your (N)REN.",y,"Once this step has been completed, you will receive an email from the administration team. We aim to get back to you the same working day, but sometimes may take a little longer.",p,"If you are not sure whether you are a Compendium Administrator for your (N)REN, please contact your GÉANT Partner Relations relationship manager.",t.jsx("br",{}),"Thank you."]}),I=t.jsx("span",{children:"Current registration status:"}),j=t.jsx("br",{}),b=t.jsx("br",{}),e[17]=O,e[18]=I,e[19]=j,e[20]=b):(O=e[17],I=e[18],j=e[19],b=e[20]);let d;e[21]!==f||e[22]!==a||e[23]!==s||e[24]!==c||e[25]!==n||e[26]!==H?(d=s?t.jsxs("ul",{children:[t.jsx("li",{children:t.jsx("span",{children:"You are logged in as a Compendium Administrator"})}),t.jsx("li",{children:t.jsxs("span",{children:["Click ",t.jsx(z,{to:"/survey/admin/surveys",children:"here"})," to access the survey management page."]})}),t.jsx("li",{children:t.jsxs("span",{children:["Click ",t.jsx(z,{to:"/survey/admin/users",children:"here"})," to access the user management page."]})}),t.jsx("li",{children:t.jsxs("span",{children:["Click ",t.jsx("a",{href:"#",onClick:M,children:"here"})," to do the full data download."]})})]}):t.jsxs("ul",{children:[f&&!s&&!c&&a&&H(),n?t.jsx("li",{children:t.jsx("span",{children:"You are logged in"})}):t.jsx("li",{children:t.jsx("span",{children:"You are not logged in"})}),n&&!c&&!a&&t.jsx("li",{children:t.jsx("span",{children:"Your access to the survey has not yet been approved"})}),n&&!c&&!a&&t.jsx("li",{children:t.jsx("span",{children:"Once you have been approved, you will immediately be directed to the relevant survey upon visiting this page"})}),n&&c&&t.jsx("li",{children:t.jsx("span",{children:"You have read-only access to the following surveys:"})})]}),e[21]=f,e[22]=a,e[23]=s,e[24]=c,e[25]=n,e[26]=H,e[27]=d):d=e[27];let _;e[28]!==s?(_=s&&t.jsx(oe,{}),e[28]=s,e[29]=_):_=e[29];let v;e[30]!==c||e[31]!==n?(v=n&&c&&t.jsx(ce,{}),e[30]=c,e[31]=n,e[32]=v):v=e[32];let l;e[33]!==d||e[34]!==_||e[35]!==v?(l=t.jsx(ee,{className:"py-5 grey-container",children:t.jsx(te,{children:t.jsxs("div",{className:"center-text",children:[C,t.jsxs("div",{className:"wordwrap pt-4",style:k,children:[O,I,j,b,d,_,v]})]})})}),e[33]=d,e[34]=_,e[35]=v,e[36]=l):l=e[36];let r;return e[37]!==l||e[38]!==x?(r=t.jsxs(t.Fragment,{children:[x,l]}),e[37]=l,e[38]=x,e[39]=r):r=e[39],r}function ie(e){console.error("Error fetching data:",e),alert("An error occurred while creating the data download Excel file.")}function ae(e){if(!e.ok)throw new Error("Network response was not ok");return e.json()}function de(e){return e.json()}function me(e){console.error("Error fetching NREN exclusions:",e)}function he(e){return e.json()}function ue(e){return e.name}function fe(e){console.error("Error fetching NRENs:",e)}function xe(e){return t.jsx("option",{value:e,children:e},e)}export{ge as default};
diff --git a/compendium_v2/static/Landing-wYnIDduc.js b/compendium_v2/static/Landing-wYnIDduc.js
new file mode 100644
index 0000000000000000000000000000000000000000..c20de01905f56051ac71ac20b8bca2d28f590c32
--- /dev/null
+++ b/compendium_v2/static/Landing-wYnIDduc.js
@@ -0,0 +1 @@
+import{c as Q,Q as K,r as L,a1 as X,D as Z,j as t,L as z,E as ee,R as te}from"./index-DunMf8wQ.js";import{u as W,w as ne}from"./xlsx-BHRztzV8.js";import{S as re}from"./SurveySidebar-B89Xtwv2.js";import{f as se,a as le}from"./survey-3meXCY6T.js";import{T as q}from"./Table-BUrPWwZB.js";import"./SideBar-DC9SKCkF.js";const oe=()=>{const e=Q.c(32);let i;e[0]===Symbol.for("react.memo_cache_sentinel")?(i=[],e[0]=i):i=e[0];const[u,m]=L.useState(i);let n;e[1]===Symbol.for("react.memo_cache_sentinel")?(n=[],e[1]=n):n=e[1];const[a,h]=L.useState(n);let s;e[2]===Symbol.for("react.memo_cache_sentinel")?(s=function(){fetch("/api/nren-exclusions").then(de).then(r=>{m(r)}).catch(me)},e[2]=s):s=e[2];const c=s;let f,P;e[3]===Symbol.for("react.memo_cache_sentinel")?(f=()=>{fetch("/api/nren/list").then(he).then(l=>{const r=l.map(ue);h(r)}).catch(fe)},P=[],e[3]=f,e[4]=P):(f=e[3],P=e[4]),L.useEffect(f,P);let E;e[5]===Symbol.for("react.memo_cache_sentinel")?(E=async function(r,D){const N=await fetch("/api/nren-exclusions",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({nren:r,year:D})}),$=await N.json();N.ok?m($):alert($.message),document.getElementById("excludenren").value="",document.getElementById("excludeyear").value=""},e[5]=E):E=e[5];const G=E;let S;e[6]===Symbol.for("react.memo_cache_sentinel")?(S=async function(r,D){const N=await fetch("/api/nren-exclusions",{method:"DELETE",headers:{"Content-Type":"application/json"},body:JSON.stringify({nren:r,year:D})}),$=await N.json();N.ok?m($):alert($.message)},e[6]=S):S=e[6];const H=S;let w,M;e[7]===Symbol.for("react.memo_cache_sentinel")?(w=()=>{c()},M=[],e[7]=w,e[8]=M):(w=e[7],M=e[8]),L.useEffect(w,M);let x,C,k,R;e[9]===Symbol.for("react.memo_cache_sentinel")?(R=t.jsx("hr",{className:"fake-divider"}),x=t.jsx("h2",{children:"NREN Exclusions"}),C=t.jsx("p",{children:"Use this table to exclude data for a specific NREN and year."}),k=t.jsx("p",{children:"If an NREN shows up in this table, they will not be allowed to view/edit or answer their survey."}),e[9]=x,e[10]=C,e[11]=k,e[12]=R):(x=e[9],C=e[10],k=e[11],R=e[12]);let T;e[13]===Symbol.for("react.memo_cache_sentinel")?(T=t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"NREN"}),t.jsx("th",{children:"Year"}),t.jsx("th",{children:"Actions"})]})}),e[13]=T):T=e[13];let A;e[14]===Symbol.for("react.memo_cache_sentinel")?(A=t.jsx("option",{value:"",children:"Select NREN"}),e[14]=A):A=e[14];let y;e[15]!==a?(y=a.map(xe),e[15]=a,e[16]=y):y=e[16];let p;e[17]!==y?(p=t.jsx("td",{children:t.jsxs("select",{id:"excludenren",children:[A,y]})}),e[17]=y,e[18]=p):p=e[18];let O;e[19]===Symbol.for("react.memo_cache_sentinel")?(O=t.jsx("td",{children:t.jsx("input",{id:"excludeyear",type:"year",name:"year"})}),e[19]=O):O=e[19];let I;e[20]===Symbol.for("react.memo_cache_sentinel")?(I=t.jsx("td",{children:t.jsx("button",{className:"btn btn-primary",onClick:()=>{const l=document.getElementById("excludenren").value,r=parseInt(document.getElementById("excludeyear").value);if(!l||!r){alert("Please enter an NREN and year");return}G(l,r)},children:"Add Exclusion"})}),e[20]=I):I=e[20];let j;e[21]!==p?(j=t.jsxs("tr",{children:[p,O,I]}),e[21]=p,e[22]=j):j=e[22];let b;if(e[23]!==u){let l;e[25]===Symbol.for("react.memo_cache_sentinel")?(l=r=>t.jsxs("tr",{children:[t.jsx("td",{children:r.nren}),t.jsx("td",{children:r.year}),t.jsx("td",{children:t.jsx("button",{className:"btn btn-danger",onClick:()=>H(r.nren,r.year),children:"Delete"})})]},r.nren+r.year),e[25]=l):l=e[25],b=u.map(l),e[23]=u,e[24]=b}else b=e[24];let d;e[26]!==j||e[27]!==b?(d=t.jsxs(q,{striped:!0,bordered:!0,responsive:!0,children:[T,t.jsxs("tbody",{children:[j,b]})]}),e[26]=j,e[27]=b,e[28]=d):d=e[28];let _;e[29]===Symbol.for("react.memo_cache_sentinel")?(_=t.jsx("hr",{className:"fake-divider"}),e[29]=_):_=e[29];let v;return e[30]!==d?(v=t.jsxs(t.Fragment,{children:[R,x,C,k,d,_]}),e[30]=d,e[31]=v):v=e[31],v},ce=()=>{const e=Q.c(7),[i,u]=L.useState();let m,n;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=()=>{le().then(c=>{u(c[0])})},n=[],e[0]=m,e[1]=n):(m=e[0],n=e[1]),L.useEffect(m,n);let a;e[2]===Symbol.for("react.memo_cache_sentinel")?(a=t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"(N)REN"}),t.jsx("th",{children:"Link"}),t.jsx("th",{children:"Survey Status"})]})}),e[2]=a):a=e[2];let h;e[3]!==i?(h=i&&i.responses.map(c=>t.jsxs("tr",{children:[t.jsx("td",{children:c.nren.name}),t.jsx("td",{children:t.jsx(z,{to:`/survey/response/${i.year}/${c.nren.name}`,children:t.jsx("span",{children:"Navigate to survey"})})}),t.jsx("td",{children:c.status})]},c.nren.id)),e[3]=i,e[4]=h):h=e[4];let s;return e[5]!==h?(s=t.jsxs(q,{striped:!0,bordered:!0,responsive:!0,children:[a,t.jsx("tbody",{children:h})]}),e[5]=h,e[6]=s):s=e[6],s};function ge(){const e=Q.c(40),{trackPageView:i}=K(),{user:u}=L.useContext(X),m=Z(),n=!!u.id,a=n?!!u.nrens.length:!1,h=a?u.nrens[0]:"",s=n?u.permissions.admin:!1,c=n?u.role==="observer":!1,[f,P]=L.useState(null);let E,G;e[0]!==i?(E=()=>{(async()=>{const N=await se();P(N)})(),i({documentTitle:"GEANT Survey Landing Page"})},G=[i],e[0]=i,e[1]=E,e[2]=G):(E=e[1],G=e[2]),L.useEffect(E,G);let S;e[3]!==h||e[4]!==f||e[5]!==m?(S=()=>{try{return m(`/survey/response/${f}/${h}`),t.jsx("li",{children:"Redirecting to survey..."})}catch(D){return console.error("Error navigating:",D),null}},e[3]=h,e[4]=f,e[5]=m,e[6]=S):S=e[6];const H=S;let w;if(e[7]===Symbol.for("react.memo_cache_sentinel")){const D=function(Y,F,g){const B=W.decode_range(Y["!ref"]??"");let J=-1;for(let o=B.s.c;o<=B.e.c;o++){const U=W.encode_cell({r:B.s.r,c:o}),V=Y[U];if(V&&typeof V.v=="string"&&V.v===F){J=o;break}}if(J===-1){console.error(`Column '${F}' not found.`);return}for(let o=B.s.r+1;o<=B.e.r;++o){const U=W.encode_cell({r:o,c:J});Y[U]&&Y[U].t==="n"&&(Y[U].z=g)}},N=function(Y){const F=W.book_new();Y.forEach(o=>{const U=W.json_to_sheet(o.data);o.meta&&D(U,o.meta.columnName,o.meta.format),W.book_append_sheet(F,U,o.name)});const g=ne(F,{bookType:"xlsx",type:"binary"}),B=new ArrayBuffer(g.length),J=new Uint8Array(B);for(let o=0;o<g.length;o++)J[o]=g.charCodeAt(o)&255;return new Blob([B],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"})};w=function(){fetch("/api/data-download").then(ae).then(Y=>{const F=N(Y),g=document.createElement("a");g.href=URL.createObjectURL(F),g.download="data.xlsx",document.body.appendChild(g),g.click(),document.body.removeChild(g)}).catch(ie)},e[7]=w}else w=e[7];const M=w;let x;e[8]!==s?(x=s&&t.jsx(re,{}),e[8]=s,e[9]=x):x=e[9];let C;e[10]===Symbol.for("react.memo_cache_sentinel")?(C=t.jsx("h1",{className:"geant-header",children:"THE GÉANT COMPENDIUM OF NRENS SURVEY"}),e[10]=C):C=e[10];let k,R;e[11]===Symbol.for("react.memo_cache_sentinel")?(k={maxWidth:"75rem"},R={textAlign:"left"},e[11]=k,e[12]=R):(k=e[11],R=e[12]);let T;e[13]===Symbol.for("react.memo_cache_sentinel")?(T=t.jsx("br",{}),e[13]=T):T=e[13];let A;e[14]===Symbol.for("react.memo_cache_sentinel")?(A=t.jsx("a",{href:"/login",children:"here"}),e[14]=A):A=e[14];let y;e[15]===Symbol.for("react.memo_cache_sentinel")?(y=t.jsx("br",{}),e[15]=y):y=e[15];let p;e[16]===Symbol.for("react.memo_cache_sentinel")?(p=t.jsx("br",{}),e[16]=p):p=e[16];let O,I,j,b;e[17]===Symbol.for("react.memo_cache_sentinel")?(O=t.jsxs("p",{style:R,children:["Hello,",T,"Welcome to the GÉANT Compendium Survey. (N)REN Compendium administrators can login via Single Sign On (SSO) ",A,", which will complete their registration to fill in the latest Compendium survey. This will send a notification to the Compendium administration team and they will assign you to your (N)REN.",y,"Once this step has been completed, you will receive an email from the administration team. We aim to get back to you the same working day, but sometimes may take a little longer.",p,"If you are not sure whether you are a Compendium Administrator for your (N)REN, please contact your GÉANT Partner Relations relationship manager.",t.jsx("br",{}),"Thank you."]}),I=t.jsx("span",{children:"Current registration status:"}),j=t.jsx("br",{}),b=t.jsx("br",{}),e[17]=O,e[18]=I,e[19]=j,e[20]=b):(O=e[17],I=e[18],j=e[19],b=e[20]);let d;e[21]!==f||e[22]!==a||e[23]!==s||e[24]!==c||e[25]!==n||e[26]!==H?(d=s?t.jsxs("ul",{children:[t.jsx("li",{children:t.jsx("span",{children:"You are logged in as a Compendium Administrator"})}),t.jsx("li",{children:t.jsxs("span",{children:["Click ",t.jsx(z,{to:"/survey/admin/surveys",children:"here"})," to access the survey management page."]})}),t.jsx("li",{children:t.jsxs("span",{children:["Click ",t.jsx(z,{to:"/survey/admin/users",children:"here"})," to access the user management page."]})}),t.jsx("li",{children:t.jsxs("span",{children:["Click ",t.jsx("a",{href:"#",onClick:M,children:"here"})," to do the full data download."]})})]}):t.jsxs("ul",{children:[f&&!s&&!c&&a&&H(),n?t.jsx("li",{children:t.jsx("span",{children:"You are logged in"})}):t.jsx("li",{children:t.jsx("span",{children:"You are not logged in"})}),n&&!c&&!a&&t.jsx("li",{children:t.jsx("span",{children:"Your access to the survey has not yet been approved"})}),n&&!c&&!a&&t.jsx("li",{children:t.jsx("span",{children:"Once you have been approved, you will immediately be directed to the relevant survey upon visiting this page"})}),n&&c&&t.jsx("li",{children:t.jsx("span",{children:"You have read-only access to the following surveys:"})})]}),e[21]=f,e[22]=a,e[23]=s,e[24]=c,e[25]=n,e[26]=H,e[27]=d):d=e[27];let _;e[28]!==s?(_=s&&t.jsx(oe,{}),e[28]=s,e[29]=_):_=e[29];let v;e[30]!==c||e[31]!==n?(v=n&&c&&t.jsx(ce,{}),e[30]=c,e[31]=n,e[32]=v):v=e[32];let l;e[33]!==d||e[34]!==_||e[35]!==v?(l=t.jsx(ee,{className:"py-5 grey-container",children:t.jsx(te,{children:t.jsxs("div",{className:"center-text",children:[C,t.jsxs("div",{className:"wordwrap pt-4",style:k,children:[O,I,j,b,d,_,v]})]})})}),e[33]=d,e[34]=_,e[35]=v,e[36]=l):l=e[36];let r;return e[37]!==l||e[38]!==x?(r=t.jsxs(t.Fragment,{children:[x,l]}),e[37]=l,e[38]=x,e[39]=r):r=e[39],r}function ie(e){console.error("Error fetching data:",e),alert("An error occurred while creating the data download Excel file.")}function ae(e){if(!e.ok)throw new Error("Network response was not ok");return e.json()}function de(e){return e.json()}function me(e){console.error("Error fetching NREN exclusions:",e)}function he(e){return e.json()}function ue(e){return e.name}function fe(e){console.error("Error fetching NRENs:",e)}function xe(e){return t.jsx("option",{value:e,children:e},e)}export{ge as default};
diff --git a/compendium_v2/static/MonitoringTools-BGVkCHJR.js b/compendium_v2/static/MonitoringTools-BGVkCHJR.js
new file mode 100644
index 0000000000000000000000000000000000000000..81b423d547d132c43b1c769fce2fffe80121364e
--- /dev/null
+++ b/compendium_v2/static/MonitoringTools-BGVkCHJR.js
@@ -0,0 +1,2 @@
+import{c as v,r as S,F as T,j as h,t as Y,S as j}from"./index-DunMf8wQ.js";import{u as F,g as D,n as E,D as L,F as C,f as P}from"./useData-DvdT9bkc.js";import{P as R}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function J(){const e=v.c(29),{filterSelection:t,setFilterSelection:c}=S.useContext(T),{data:w,years:_,nrens:N}=F("/api/monitoring-tools",c);let s,f;if(e[0]!==w||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=w.filter(u);const k=D(s,"tool_descriptions");f=E(k,M),e[0]=w,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=f}else s=e[3],f=e[4];const g=f;let o,p;e[8]===Symbol.for("react.memo_cache_sentinel")?(o=["Looking Glass","Network or Services Status Dashboard","Historical traffic volume information","Netflow analysis tool"],p=new Map([[o[0],"looking_glass"],[o[1],"status_dashboard"],[o[2],"historical_traffic_volumes"],[o[3],"netflow_analysis"]]),e[8]=o,e[9]=p):(o=e[8],p=e[9]);const y=p;let l;e[10]!==_?(l=[..._],e[10]=_,e[11]=l):l=e[11];let i;e[12]!==N?(i=N.values(),e[12]=N,e[13]=i):i=e[13];let r;e[14]!==i?(r=[...i],e[14]=i,e[15]=r):r=e[15];let a;e[16]!==l||e[17]!==r?(a={availableYears:l,availableNrens:r},e[16]=l,e[17]=r,e[18]=a):a=e[18];let d;e[19]!==t||e[20]!==c||e[21]!==a?(d=h.jsx(C,{filterOptions:a,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=a,e[22]=d):d=e[22];const b=d;let n;e[23]!==g?(n=h.jsx(P,{children:h.jsx(R,{columns:o,columnLookup:y,dataLookup:g})}),e[23]=g,e[24]=n):n=e[24];let m;return e[25]!==b||e[26]!==s||e[27]!==n?(m=h.jsx(L,{title:Y["monitoring-tools"],description:`The table below shows which tools the NREN offers to client institutions to allow them to monitor the network and troubleshoot any issues which arise. 
+            Four common tools are named, however NRENs also have the opportunity to add their own tools to the table.`,category:j.Network,filter:b,data:s,filename:"monitoring_tools_nrens_per_year",children:n}),e[25]=b,e[26]=s,e[27]=n,e[28]=m):m=e[28],m}function M(e,t){if(e==="netflow_analysis"&&t.netflow_processing_description)return t.netflow_processing_description}export{J as default};
diff --git a/compendium_v2/static/MonitoringTools-C61NJKaR.js b/compendium_v2/static/MonitoringTools-C61NJKaR.js
deleted file mode 100644
index bcc90f2e7ad8ff2f887ef59cc760225a5e928f4f..0000000000000000000000000000000000000000
--- a/compendium_v2/static/MonitoringTools-C61NJKaR.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{c as v,r as S,F as T,j as h,t as Y,S as j}from"./index.js";import{u as F,g as D,n as E,D as L,F as C,f as P}from"./useData-CxftshCa.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function J(){const e=v.c(29),{filterSelection:t,setFilterSelection:c}=S.useContext(T),{data:w,years:_,nrens:N}=F("/api/monitoring-tools",c);let s,f;if(e[0]!==w||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=x=>t.selectedYears.includes(x.year)&&t.selectedNrens.includes(x.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=w.filter(u);const k=D(s,"tool_descriptions");f=E(k,M),e[0]=w,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=f}else s=e[3],f=e[4];const g=f;let o,p;e[8]===Symbol.for("react.memo_cache_sentinel")?(o=["Looking Glass","Network or Services Status Dashboard","Historical traffic volume information","Netflow analysis tool"],p=new Map([[o[0],"looking_glass"],[o[1],"status_dashboard"],[o[2],"historical_traffic_volumes"],[o[3],"netflow_analysis"]]),e[8]=o,e[9]=p):(o=e[8],p=e[9]);const y=p;let l;e[10]!==_?(l=[..._],e[10]=_,e[11]=l):l=e[11];let i;e[12]!==N?(i=N.values(),e[12]=N,e[13]=i):i=e[13];let r;e[14]!==i?(r=[...i],e[14]=i,e[15]=r):r=e[15];let a;e[16]!==l||e[17]!==r?(a={availableYears:l,availableNrens:r},e[16]=l,e[17]=r,e[18]=a):a=e[18];let d;e[19]!==t||e[20]!==c||e[21]!==a?(d=h.jsx(C,{filterOptions:a,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=a,e[22]=d):d=e[22];const b=d;let n;e[23]!==g?(n=h.jsx(P,{children:h.jsx(R,{columns:o,columnLookup:y,dataLookup:g})}),e[23]=g,e[24]=n):n=e[24];let m;return e[25]!==b||e[26]!==s||e[27]!==n?(m=h.jsx(L,{title:Y["monitoring-tools"],description:`The table below shows which tools the NREN offers to client institutions to allow them to monitor the network and troubleshoot any issues which arise. 
-            Four common tools are named, however NRENs also have the opportunity to add their own tools to the table.`,category:j.Network,filter:b,data:s,filename:"monitoring_tools_nrens_per_year",children:n}),e[25]=b,e[26]=s,e[27]=n,e[28]=m):m=e[28],m}function M(e,t){if(e==="netflow_analysis"&&t.netflow_processing_description)return t.netflow_processing_description}export{J as default};
diff --git a/compendium_v2/static/NetworkFunctionVirtualisation-DLW-vjXN.js b/compendium_v2/static/NetworkFunctionVirtualisation-DLW-vjXN.js
deleted file mode 100644
index 382fd4618a3e3d2e3ecbf17d062b0730c1e4ff10..0000000000000000000000000000000000000000
--- a/compendium_v2/static/NetworkFunctionVirtualisation-DLW-vjXN.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as W,r as X,F as Z,S as k,j as t,t as ee}from"./index.js";import{u as te,g as se,F as le,D as re,f as ne}from"./useData-CxftshCa.js";import{C as I}from"./ColorPill-CXvWIfWz.js";import{T as ae}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";function ue(){const e=W.c(67),{filterSelection:n,setFilterSelection:h}=X.useContext(Z),{data:J,years:c,nrens:R}=te("/api/nfv",h);let f,p,x,j,m,u,g,v,b,o,d,w,S,Y,N;if(e[0]!==J||e[1]!==n||e[2]!==R||e[3]!==h||e[4]!==c){let A;e[20]!==n.selectedNrens||e[21]!==n.selectedYears?(A=E=>n.selectedYears.includes(E.year)&&n.selectedNrens.includes(E.nren),e[20]=n.selectedNrens,e[21]=n.selectedYears,e[22]=A):A=e[22];const K=J.filter(A),Q=se(K,"nfv_specifics");let C;e[23]!==c?(C=[...c],e[23]=c,e[24]=C):C=e[24];let T;e[25]!==R?(T=R.values(),e[25]=R,e[26]=T):T=e[26];let $;e[27]!==T?($=[...T],e[27]=T,e[28]=$):$=e[28];let D;e[29]!==C||e[30]!==$?(D={availableYears:C,availableNrens:$},e[29]=C,e[30]=$,e[31]=D):D=e[31];let L;e[32]!==n||e[33]!==h||e[34]!==D?(L=t.jsx(le,{filterOptions:D,filterSelection:n,setFilterSelection:h,coloredYears:!0}),e[32]=n,e[33]=h,e[34]=D,e[35]=L):L=e[35];const U=L;let O;e[36]!==c?(O=E=>c.has(E),e[36]=c,e[37]=O):O=e[37];const M=[...n.selectedYears.filter(O)].sort();x=re,w=ee.nfv,S="The table below shows the kinds of Network Function Virtualisation (NFV) used by NRENs.",Y=k.Network,N=U,u=K,g="network_function_virtualisation_nrens_per_year",p=ne,f=ae,m="charging-struct-table",v=!0,b=!0;let _;e[38]===Symbol.for("react.memo_cache_sentinel")?(_=t.jsx("col",{span:1,style:{width:"20%"}}),e[38]=_):_=e[38];let q;e[39]===Symbol.for("react.memo_cache_sentinel")?(q=t.jsx("col",{span:2,style:{width:"16%"}}),e[39]=q):q=e[39];let z;e[40]===Symbol.for("react.memo_cache_sentinel")?(z=t.jsx("col",{span:2,style:{width:"16%"}}),e[40]=z):z=e[40];let B;e[41]===Symbol.for("react.memo_cache_sentinel")?(B=t.jsx("col",{span:2,style:{width:"16%"}}),e[41]=B):B=e[41];let G;e[42]===Symbol.for("react.memo_cache_sentinel")?(G=t.jsx("col",{span:2,style:{width:"16%"}}),e[42]=G):G=e[42],e[43]===Symbol.for("react.memo_cache_sentinel")?(o=t.jsxs("colgroup",{children:[_,q,z,B,G,t.jsx("col",{span:2,style:{width:"16%"}})]}),d=t.jsxs("thead",{children:[t.jsxs("tr",{children:[t.jsx("th",{}),t.jsx("th",{colSpan:2,children:"Routers/switches"}),t.jsx("th",{colSpan:2,children:"Firewalls"}),t.jsx("th",{colSpan:2,children:"Load balancers"}),t.jsx("th",{colSpan:2,children:"VPN Concentrator Services"}),t.jsx("th",{colSpan:2,children:"Other"})]}),t.jsxs("tr",{children:[t.jsx("th",{}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"})]})]}),e[43]=o,e[44]=d):(o=e[43],d=e[44]),j=Array.from(Q.entries()).map(E=>{const[H,i]=E;return t.jsxs("tr",{children:[t.jsx("td",{children:H}),["routers","firewalls","load_balancers","vpn_concentrators"].map(l=>t.jsxs(t.Fragment,{children:[t.jsx("td",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&r.nfv=="yes"),tooltip:"",rounded:!0},s)})},`${l}-yes`),t.jsx("td",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&r.nfv=="planned"),tooltip:"",rounded:!0},s)})},`${l}-planned`)]})),t.jsx("td",{children:Array.from(i.keys()).filter(ce).map(l=>t.jsx("div",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&(r==null?void 0:r.nfv)=="yes"),tooltip:l,rounded:!0},s)})},`${l}-yes`))},`${H}-other-yes`),t.jsx("td",{children:Array.from(i.keys()).filter(ie).map(l=>t.jsx("div",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&(r==null?void 0:r.nfv)=="planned"),tooltip:l,rounded:!0},s)})},`${l}-planned`))},`${H}-other-planned`)]},H)}),e[0]=J,e[1]=n,e[2]=R,e[3]=h,e[4]=c,e[5]=f,e[6]=p,e[7]=x,e[8]=j,e[9]=m,e[10]=u,e[11]=g,e[12]=v,e[13]=b,e[14]=o,e[15]=d,e[16]=w,e[17]=S,e[18]=Y,e[19]=N}else f=e[5],p=e[6],x=e[7],j=e[8],m=e[9],u=e[10],g=e[11],v=e[12],b=e[13],o=e[14],d=e[15],w=e[16],S=e[17],Y=e[18],N=e[19];let F;e[45]!==j?(F=t.jsx("tbody",{children:j}),e[45]=j,e[46]=F):F=e[46];let y;e[47]!==f||e[48]!==m||e[49]!==F||e[50]!==v||e[51]!==b||e[52]!==o||e[53]!==d?(y=t.jsxs(f,{className:m,striped:v,bordered:b,children:[o,d,F]}),e[47]=f,e[48]=m,e[49]=F,e[50]=v,e[51]=b,e[52]=o,e[53]=d,e[54]=y):y=e[54];let P;e[55]!==p||e[56]!==y?(P=t.jsx(p,{children:y}),e[55]=p,e[56]=y,e[57]=P):P=e[57];let V;return e[58]!==x||e[59]!==u||e[60]!==g||e[61]!==P||e[62]!==w||e[63]!==S||e[64]!==Y||e[65]!==N?(V=t.jsx(x,{title:w,description:S,category:Y,filter:N,data:u,filename:g,children:P}),e[58]=x,e[59]=u,e[60]=g,e[61]=P,e[62]=w,e[63]=S,e[64]=Y,e[65]=N,e[66]=V):V=e[66],V}function ie(e){return!["routers","firewalls","load_balancers","vpn_concentrators"].includes(e)}function ce(e){return!["routers","firewalls","load_balancers","vpn_concentrators"].includes(e)}export{ue as default};
diff --git a/compendium_v2/static/NetworkFunctionVirtualisation-Dkgolz87.js b/compendium_v2/static/NetworkFunctionVirtualisation-Dkgolz87.js
new file mode 100644
index 0000000000000000000000000000000000000000..985a748f92d9699a0937d4a554423a070c406777
--- /dev/null
+++ b/compendium_v2/static/NetworkFunctionVirtualisation-Dkgolz87.js
@@ -0,0 +1 @@
+import{c as W,r as X,F as Z,S as k,j as t,t as ee}from"./index-DunMf8wQ.js";import{u as te,g as se,F as le,D as re,f as ne}from"./useData-DvdT9bkc.js";import{C as I}from"./ColorPill-CXsYrUiQ.js";import{T as ae}from"./Table-BUrPWwZB.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";function ue(){const e=W.c(67),{filterSelection:n,setFilterSelection:h}=X.useContext(Z),{data:J,years:c,nrens:R}=te("/api/nfv",h);let f,p,x,j,m,u,g,v,b,o,d,w,S,Y,N;if(e[0]!==J||e[1]!==n||e[2]!==R||e[3]!==h||e[4]!==c){let A;e[20]!==n.selectedNrens||e[21]!==n.selectedYears?(A=E=>n.selectedYears.includes(E.year)&&n.selectedNrens.includes(E.nren),e[20]=n.selectedNrens,e[21]=n.selectedYears,e[22]=A):A=e[22];const K=J.filter(A),Q=se(K,"nfv_specifics");let C;e[23]!==c?(C=[...c],e[23]=c,e[24]=C):C=e[24];let T;e[25]!==R?(T=R.values(),e[25]=R,e[26]=T):T=e[26];let $;e[27]!==T?($=[...T],e[27]=T,e[28]=$):$=e[28];let D;e[29]!==C||e[30]!==$?(D={availableYears:C,availableNrens:$},e[29]=C,e[30]=$,e[31]=D):D=e[31];let L;e[32]!==n||e[33]!==h||e[34]!==D?(L=t.jsx(le,{filterOptions:D,filterSelection:n,setFilterSelection:h,coloredYears:!0}),e[32]=n,e[33]=h,e[34]=D,e[35]=L):L=e[35];const U=L;let O;e[36]!==c?(O=E=>c.has(E),e[36]=c,e[37]=O):O=e[37];const M=[...n.selectedYears.filter(O)].sort();x=re,w=ee.nfv,S="The table below shows the kinds of Network Function Virtualisation (NFV) used by NRENs.",Y=k.Network,N=U,u=K,g="network_function_virtualisation_nrens_per_year",p=ne,f=ae,m="charging-struct-table",v=!0,b=!0;let _;e[38]===Symbol.for("react.memo_cache_sentinel")?(_=t.jsx("col",{span:1,style:{width:"20%"}}),e[38]=_):_=e[38];let q;e[39]===Symbol.for("react.memo_cache_sentinel")?(q=t.jsx("col",{span:2,style:{width:"16%"}}),e[39]=q):q=e[39];let z;e[40]===Symbol.for("react.memo_cache_sentinel")?(z=t.jsx("col",{span:2,style:{width:"16%"}}),e[40]=z):z=e[40];let B;e[41]===Symbol.for("react.memo_cache_sentinel")?(B=t.jsx("col",{span:2,style:{width:"16%"}}),e[41]=B):B=e[41];let G;e[42]===Symbol.for("react.memo_cache_sentinel")?(G=t.jsx("col",{span:2,style:{width:"16%"}}),e[42]=G):G=e[42],e[43]===Symbol.for("react.memo_cache_sentinel")?(o=t.jsxs("colgroup",{children:[_,q,z,B,G,t.jsx("col",{span:2,style:{width:"16%"}})]}),d=t.jsxs("thead",{children:[t.jsxs("tr",{children:[t.jsx("th",{}),t.jsx("th",{colSpan:2,children:"Routers/switches"}),t.jsx("th",{colSpan:2,children:"Firewalls"}),t.jsx("th",{colSpan:2,children:"Load balancers"}),t.jsx("th",{colSpan:2,children:"VPN Concentrator Services"}),t.jsx("th",{colSpan:2,children:"Other"})]}),t.jsxs("tr",{children:[t.jsx("th",{}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"}),t.jsx("th",{children:"Yes"}),t.jsx("th",{children:"Planned"})]})]}),e[43]=o,e[44]=d):(o=e[43],d=e[44]),j=Array.from(Q.entries()).map(E=>{const[H,i]=E;return t.jsxs("tr",{children:[t.jsx("td",{children:H}),["routers","firewalls","load_balancers","vpn_concentrators"].map(l=>t.jsxs(t.Fragment,{children:[t.jsx("td",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&r.nfv=="yes"),tooltip:"",rounded:!0},s)})},`${l}-yes`),t.jsx("td",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&r.nfv=="planned"),tooltip:"",rounded:!0},s)})},`${l}-planned`)]})),t.jsx("td",{children:Array.from(i.keys()).filter(ce).map(l=>t.jsx("div",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&(r==null?void 0:r.nfv)=="yes"),tooltip:l,rounded:!0},s)})},`${l}-yes`))},`${H}-other-yes`),t.jsx("td",{children:Array.from(i.keys()).filter(ie).map(l=>t.jsx("div",{children:i.has(l)&&M.map(s=>{const a=i.get(l),r=a.get(s);return t.jsx(I,{year:s,active:a.has(s)&&!!(r&&(r==null?void 0:r.nfv)=="planned"),tooltip:l,rounded:!0},s)})},`${l}-planned`))},`${H}-other-planned`)]},H)}),e[0]=J,e[1]=n,e[2]=R,e[3]=h,e[4]=c,e[5]=f,e[6]=p,e[7]=x,e[8]=j,e[9]=m,e[10]=u,e[11]=g,e[12]=v,e[13]=b,e[14]=o,e[15]=d,e[16]=w,e[17]=S,e[18]=Y,e[19]=N}else f=e[5],p=e[6],x=e[7],j=e[8],m=e[9],u=e[10],g=e[11],v=e[12],b=e[13],o=e[14],d=e[15],w=e[16],S=e[17],Y=e[18],N=e[19];let F;e[45]!==j?(F=t.jsx("tbody",{children:j}),e[45]=j,e[46]=F):F=e[46];let y;e[47]!==f||e[48]!==m||e[49]!==F||e[50]!==v||e[51]!==b||e[52]!==o||e[53]!==d?(y=t.jsxs(f,{className:m,striped:v,bordered:b,children:[o,d,F]}),e[47]=f,e[48]=m,e[49]=F,e[50]=v,e[51]=b,e[52]=o,e[53]=d,e[54]=y):y=e[54];let P;e[55]!==p||e[56]!==y?(P=t.jsx(p,{children:y}),e[55]=p,e[56]=y,e[57]=P):P=e[57];let V;return e[58]!==x||e[59]!==u||e[60]!==g||e[61]!==P||e[62]!==w||e[63]!==S||e[64]!==Y||e[65]!==N?(V=t.jsx(x,{title:w,description:S,category:Y,filter:N,data:u,filename:g,children:P}),e[58]=x,e[59]=u,e[60]=g,e[61]=P,e[62]=w,e[63]=S,e[64]=Y,e[65]=N,e[66]=V):V=e[66],V}function ie(e){return!["routers","firewalls","load_balancers","vpn_concentrators"].includes(e)}function ce(e){return!["routers","firewalls","load_balancers","vpn_concentrators"].includes(e)}export{ue as default};
diff --git a/compendium_v2/static/NetworkMapUrls-B3Qc49It.js b/compendium_v2/static/NetworkMapUrls-B3Qc49It.js
deleted file mode 100644
index 21422d15d25052c7257d0a9665259d4f5a45a605..0000000000000000000000000000000000000000
--- a/compendium_v2/static/NetworkMapUrls-B3Qc49It.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as b,r as h,F as j,j as u,t as y,S as _}from"./index.js";import{u as g,q as v,k as S,i as F,D as C,F as E,f as L,s as R}from"./useData-CxftshCa.js";import{N as T}from"./NrenYearTable-tQrmAmRo.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";function z(){const e=b.c(21),{filterSelection:t,setFilterSelection:r}=h.useContext(j),{data:a,nrens:i}=g("/api/network-map-urls",r);let s,c;if(e[0]!==a||e[1]!==t.selectedNrens){const x=a?v(a):[];let d;e[4]!==t.selectedNrens?(d=w=>t.selectedNrens.includes(w.nren),e[4]=t.selectedNrens,e[5]=d):d=e[5],s=x.filter(d);const D=S(s);c=F(D,Y),e[0]=a,e[1]=t.selectedNrens,e[2]=s,e[3]=c}else s=e[2],c=e[3];const k=c;let p;e[6]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[6]=p):p=e[6];let o;e[7]!==i?(o=i.values(),e[7]=i,e[8]=o):o=e[8];let l;e[9]!==o?(l={availableYears:p,availableNrens:[...o]},e[9]=o,e[10]=l):l=e[10];let f;e[11]!==t||e[12]!==r||e[13]!==l?(f=u.jsx(E,{filterOptions:l,filterSelection:t,setFilterSelection:r,coloredYears:!0}),e[11]=t,e[12]=r,e[13]=l,e[14]=f):f=e[14];const N=f;let n;e[15]!==k?(n=u.jsx(L,{children:u.jsx(T,{data:k,columnTitle:"Network Map",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=k,e[16]=n):n=e[16];let m;return e[17]!==N||e[18]!==s||e[19]!==n?(m=u.jsx(C,{title:y["network-map"],description:"This table provides links to NREN network maps, showing layers 1, 2, and 3 of their networks.",category:_.Network,filter:N,data:s,filename:"network_map_nrens_per_year",children:n}),e[17]=N,e[18]=s,e[19]=n,e[20]=m):m=e[20],m}function Y(e,t){const r=R(t);if(r!=null)for(const[a,i]of Object.entries(r))e[a]=i}export{z as default};
diff --git a/compendium_v2/static/NetworkMapUrls-U7kWZFCY.js b/compendium_v2/static/NetworkMapUrls-U7kWZFCY.js
new file mode 100644
index 0000000000000000000000000000000000000000..90ada2dcbe9655047f4b4b9debb9ce0f2e92dfe6
--- /dev/null
+++ b/compendium_v2/static/NetworkMapUrls-U7kWZFCY.js
@@ -0,0 +1 @@
+import{c as b,r as h,F as j,j as u,t as y,S as _}from"./index-DunMf8wQ.js";import{u as g,q as v,k as S,i as F,D as C,F as E,f as L,s as R}from"./useData-DvdT9bkc.js";import{N as T}from"./NrenYearTable-D3mNeVd3.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";function z(){const e=b.c(21),{filterSelection:t,setFilterSelection:r}=h.useContext(j),{data:a,nrens:i}=g("/api/network-map-urls",r);let s,c;if(e[0]!==a||e[1]!==t.selectedNrens){const x=a?v(a):[];let d;e[4]!==t.selectedNrens?(d=w=>t.selectedNrens.includes(w.nren),e[4]=t.selectedNrens,e[5]=d):d=e[5],s=x.filter(d);const D=S(s);c=F(D,Y),e[0]=a,e[1]=t.selectedNrens,e[2]=s,e[3]=c}else s=e[2],c=e[3];const k=c;let p;e[6]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[6]=p):p=e[6];let o;e[7]!==i?(o=i.values(),e[7]=i,e[8]=o):o=e[8];let l;e[9]!==o?(l={availableYears:p,availableNrens:[...o]},e[9]=o,e[10]=l):l=e[10];let f;e[11]!==t||e[12]!==r||e[13]!==l?(f=u.jsx(E,{filterOptions:l,filterSelection:t,setFilterSelection:r,coloredYears:!0}),e[11]=t,e[12]=r,e[13]=l,e[14]=f):f=e[14];const N=f;let n;e[15]!==k?(n=u.jsx(L,{children:u.jsx(T,{data:k,columnTitle:"Network Map",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=k,e[16]=n):n=e[16];let m;return e[17]!==N||e[18]!==s||e[19]!==n?(m=u.jsx(C,{title:y["network-map"],description:"This table provides links to NREN network maps, showing layers 1, 2, and 3 of their networks.",category:_.Network,filter:N,data:s,filename:"network_map_nrens_per_year",children:n}),e[17]=N,e[18]=s,e[19]=n,e[20]=m):m=e[20],m}function Y(e,t){const r=R(t);if(r!=null)for(const[a,i]of Object.entries(r))e[a]=i}export{z as default};
diff --git a/compendium_v2/static/NonRAndEPeer-Bicp8r4m.js b/compendium_v2/static/NonRAndEPeer-Bicp8r4m.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3abe901d479df3f7f51a10339786afdc8932781
--- /dev/null
+++ b/compendium_v2/static/NonRAndEPeer-Bicp8r4m.js
@@ -0,0 +1,2 @@
+import{c as D,r as F,F as Y,j as u,S as v,t as k}from"./index-DunMf8wQ.js";import{B as A}from"./index-C2DQFzVc.js";import{C as L,a as O,L as T,B as $,p as G,c as I,d as M,u as q,o as z,D as H,F as J,f as K}from"./useData-DvdT9bkc.js";import{p as Q}from"./chartjs-plugin-datalabels.esm-Bb0FwIXw.js";import{a as U}from"./charthelpers-vHYh9qxV.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";L.register(O,T,$,G,I,M);function ne(){const e=D.c(38),{filterSelection:t,setFilterSelection:r}=F.useContext(Y),{data:b,years:d,nrens:h}=q("/api/non-re-peers",r);let a,l,s,g;if(e[0]!==b||e[1]!==t||e[2]!==h||e[3]!==r||e[4]!==d){let S;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(S=E=>t.selectedYears.includes(E.year)&&t.selectedNrens.includes(E.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=S):S=e[11],s=b.filter(S),a=z(s,"nr_of_non_r_and_e_peers","Number of Peers");let c;e[12]!==d?(c=[...d],e[12]=d,e[13]=c):c=e[13];let m;e[14]!==h?(m=h.values(),e[14]=h,e[15]=m):m=e[15];let p;e[16]!==m?(p=[...m],e[16]=m,e[17]=p):p=e[17];let f;e[18]!==c||e[19]!==p?(f={availableYears:c,availableNrens:p},e[18]=c,e[19]=p,e[20]=f):f=e[20];let C;e[21]!==t||e[22]!==r||e[23]!==f?(C=u.jsx(J,{filterOptions:f,filterSelection:t,setFilterSelection:r}),e[21]=t,e[22]=r,e[23]=f,e[24]=C):C=e[24],l=C,g=Array.from(new Set(s.map(V))),e[0]=b,e[1]=t,e[2]=h,e[3]=r,e[4]=d,e[5]=a,e[6]=l,e[7]=s,e[8]=g}else a=e[5],l=e[6],s=e[7],g=e[8];const j=g.length,w=Math.max(j*t.selectedYears.length*1.5+5,50),B=k["non-rne-peers"],P=`The graph below shows the number of non-Research and Education networks 
+    NRENs peer with. This includes all direct IP-peerings to commercial networks, eg. Google`;let _;e[25]===Symbol.for("react.memo_cache_sentinel")?(_=U({title:"Number of Non-R&E Peers"}),e[25]=_):_=e[25];const R=_,y=`${w}rem`;let n;e[26]!==y?(n={height:y},e[26]=y,e[27]=n):n=e[27];let N;e[28]===Symbol.for("react.memo_cache_sentinel")?(N=[Q],e[28]=N):N=e[28];let i;e[29]!==a?(i=u.jsx(A,{data:a,options:R,plugins:N}),e[29]=a,e[30]=i):i=e[30];let o;e[31]!==n||e[32]!==i?(o=u.jsx(K,{children:u.jsx("div",{className:"chart-container",style:n,children:i})}),e[31]=n,e[32]=i,e[33]=o):o=e[33];let x;return e[34]!==l||e[35]!==s||e[36]!==o?(x=u.jsx(H,{title:B,description:P,category:v.Network,filter:l,data:s,filename:"non_r_and_e_peering",children:o}),e[34]=l,e[35]=s,e[36]=o,e[37]=x):x=e[37],x}function V(e){return e.nren}export{ne as default};
diff --git a/compendium_v2/static/NonRAndEPeer-Cg_pAdU8.js b/compendium_v2/static/NonRAndEPeer-Cg_pAdU8.js
deleted file mode 100644
index 1c211516c0f10bc470e3c9b991ebc852a09d566b..0000000000000000000000000000000000000000
--- a/compendium_v2/static/NonRAndEPeer-Cg_pAdU8.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{c as D,r as F,F as Y,j as u,S as v,t as k}from"./index.js";import{B as A}from"./index-CjWPDfDC.js";import{C as L,a as O,L as T,B as $,p as G,c as I,d as M,u as q,o as z,D as H,F as J,f as K}from"./useData-CxftshCa.js";import{p as Q}from"./chartjs-plugin-datalabels.esm-CjG-nxnq.js";import{a as U}from"./charthelpers-B0zLHD4s.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";L.register(O,T,$,G,I,M);function ne(){const e=D.c(38),{filterSelection:t,setFilterSelection:r}=F.useContext(Y),{data:b,years:d,nrens:h}=q("/api/non-re-peers",r);let a,l,s,g;if(e[0]!==b||e[1]!==t||e[2]!==h||e[3]!==r||e[4]!==d){let S;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(S=E=>t.selectedYears.includes(E.year)&&t.selectedNrens.includes(E.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=S):S=e[11],s=b.filter(S),a=z(s,"nr_of_non_r_and_e_peers","Number of Peers");let c;e[12]!==d?(c=[...d],e[12]=d,e[13]=c):c=e[13];let m;e[14]!==h?(m=h.values(),e[14]=h,e[15]=m):m=e[15];let p;e[16]!==m?(p=[...m],e[16]=m,e[17]=p):p=e[17];let f;e[18]!==c||e[19]!==p?(f={availableYears:c,availableNrens:p},e[18]=c,e[19]=p,e[20]=f):f=e[20];let C;e[21]!==t||e[22]!==r||e[23]!==f?(C=u.jsx(J,{filterOptions:f,filterSelection:t,setFilterSelection:r}),e[21]=t,e[22]=r,e[23]=f,e[24]=C):C=e[24],l=C,g=Array.from(new Set(s.map(V))),e[0]=b,e[1]=t,e[2]=h,e[3]=r,e[4]=d,e[5]=a,e[6]=l,e[7]=s,e[8]=g}else a=e[5],l=e[6],s=e[7],g=e[8];const j=g.length,w=Math.max(j*t.selectedYears.length*1.5+5,50),B=k["non-rne-peers"],P=`The graph below shows the number of non-Research and Education networks 
-    NRENs peer with. This includes all direct IP-peerings to commercial networks, eg. Google`;let _;e[25]===Symbol.for("react.memo_cache_sentinel")?(_=U({title:"Number of Non-R&E Peers"}),e[25]=_):_=e[25];const R=_,y=`${w}rem`;let n;e[26]!==y?(n={height:y},e[26]=y,e[27]=n):n=e[27];let N;e[28]===Symbol.for("react.memo_cache_sentinel")?(N=[Q],e[28]=N):N=e[28];let i;e[29]!==a?(i=u.jsx(A,{data:a,options:R,plugins:N}),e[29]=a,e[30]=i):i=e[30];let o;e[31]!==n||e[32]!==i?(o=u.jsx(K,{children:u.jsx("div",{className:"chart-container",style:n,children:i})}),e[31]=n,e[32]=i,e[33]=o):o=e[33];let x;return e[34]!==l||e[35]!==s||e[36]!==o?(x=u.jsx(H,{title:B,description:P,category:v.Network,filter:l,data:s,filename:"non_r_and_e_peering",children:o}),e[34]=l,e[35]=s,e[36]=o,e[37]=x):x=e[37],x}function V(e){return e.nren}export{ne as default};
diff --git a/compendium_v2/static/NrenYearTable-D3mNeVd3.js b/compendium_v2/static/NrenYearTable-D3mNeVd3.js
new file mode 100644
index 0000000000000000000000000000000000000000..e76a1e589bea39c0cd9c4ded23dbb046187153e7
--- /dev/null
+++ b/compendium_v2/static/NrenYearTable-D3mNeVd3.js
@@ -0,0 +1 @@
+import{c as j,j as r}from"./index-DunMf8wQ.js";import{w as p}from"./useData-DvdT9bkc.js";import{T as u}from"./Table-BUrPWwZB.js";function N(f,e,s,l,t){return f?l.startsWith("http")?r.jsx("li",{children:r.jsx("a",{href:p(l),target:"_blank",rel:"noopener noreferrer",style:e,children:t})},s):r.jsx("li",{children:r.jsx("span",{children:t})},s):r.jsx("li",{children:r.jsx("span",{children:t})},s)}function b(f,{dottedBorder:e=!1,noDots:s=!1,keysAreURLs:l=!1,removeDecoration:t=!1}){return Array.from(f.entries()).map(([i,x])=>Array.from(x.entries()).map(([o,m],d)=>{const n={};return t&&(n.textDecoration="none"),r.jsxs("tr",{className:e?"dotted-border":"",children:[r.jsx("td",{className:"pt-3 nren-column text-nowrap",children:d===0&&i}),r.jsx("td",{className:"pt-3 year-column",children:o}),r.jsx("td",{className:"pt-3 blue-column",children:r.jsx("ul",{className:s?"no-list-style-type":"",children:Array.from(Object.entries(m)).map(([a,c],h)=>N(l,n,h,c,a))})})]},i+o)}))}function _(f){const e=j.c(15),{data:s,columnTitle:l,dottedBorder:t,noDots:i,keysAreURLs:x,removeDecoration:o}=f;let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=r.jsx("th",{className:"nren-column",children:r.jsx("span",{children:"NREN"})}),e[0]=m):m=e[0];let d;e[1]===Symbol.for("react.memo_cache_sentinel")?(d=r.jsx("th",{className:"year-column",children:r.jsx("span",{children:"Year"})}),e[1]=d):d=e[1];let n;e[2]!==l?(n=r.jsx("thead",{children:r.jsxs("tr",{children:[m,d,r.jsx("th",{className:"blue-column",children:r.jsx("span",{children:l})})]})}),e[2]=l,e[3]=n):n=e[3];let a;e[4]!==s||e[5]!==t||e[6]!==x||e[7]!==i||e[8]!==o?(a=b(s,{dottedBorder:t,noDots:i,keysAreURLs:x,removeDecoration:o}),e[4]=s,e[5]=t,e[6]=x,e[7]=i,e[8]=o,e[9]=a):a=e[9];let c;e[10]!==a?(c=r.jsx("tbody",{children:a}),e[10]=a,e[11]=c):c=e[11];let h;return e[12]!==n||e[13]!==c?(h=r.jsxs(u,{borderless:!0,className:"compendium-table",children:[n,c]}),e[12]=n,e[13]=c,e[14]=h):h=e[14],h}export{_ as N};
diff --git a/compendium_v2/static/NrenYearTable-tQrmAmRo.js b/compendium_v2/static/NrenYearTable-tQrmAmRo.js
deleted file mode 100644
index c33e14b826045a7f2b9556ad9b06a3119d25789c..0000000000000000000000000000000000000000
--- a/compendium_v2/static/NrenYearTable-tQrmAmRo.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as j,j as r}from"./index.js";import{w as p}from"./useData-CxftshCa.js";import{T as u}from"./Table-ClWM2_rS.js";function N(f,e,s,l,t){return f?l.startsWith("http")?r.jsx("li",{children:r.jsx("a",{href:p(l),target:"_blank",rel:"noopener noreferrer",style:e,children:t})},s):r.jsx("li",{children:r.jsx("span",{children:t})},s):r.jsx("li",{children:r.jsx("span",{children:t})},s)}function b(f,{dottedBorder:e=!1,noDots:s=!1,keysAreURLs:l=!1,removeDecoration:t=!1}){return Array.from(f.entries()).map(([i,x])=>Array.from(x.entries()).map(([o,m],d)=>{const n={};return t&&(n.textDecoration="none"),r.jsxs("tr",{className:e?"dotted-border":"",children:[r.jsx("td",{className:"pt-3 nren-column text-nowrap",children:d===0&&i}),r.jsx("td",{className:"pt-3 year-column",children:o}),r.jsx("td",{className:"pt-3 blue-column",children:r.jsx("ul",{className:s?"no-list-style-type":"",children:Array.from(Object.entries(m)).map(([a,c],h)=>N(l,n,h,c,a))})})]},i+o)}))}function _(f){const e=j.c(15),{data:s,columnTitle:l,dottedBorder:t,noDots:i,keysAreURLs:x,removeDecoration:o}=f;let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=r.jsx("th",{className:"nren-column",children:r.jsx("span",{children:"NREN"})}),e[0]=m):m=e[0];let d;e[1]===Symbol.for("react.memo_cache_sentinel")?(d=r.jsx("th",{className:"year-column",children:r.jsx("span",{children:"Year"})}),e[1]=d):d=e[1];let n;e[2]!==l?(n=r.jsx("thead",{children:r.jsxs("tr",{children:[m,d,r.jsx("th",{className:"blue-column",children:r.jsx("span",{children:l})})]})}),e[2]=l,e[3]=n):n=e[3];let a;e[4]!==s||e[5]!==t||e[6]!==x||e[7]!==i||e[8]!==o?(a=b(s,{dottedBorder:t,noDots:i,keysAreURLs:x,removeDecoration:o}),e[4]=s,e[5]=t,e[6]=x,e[7]=i,e[8]=o,e[9]=a):a=e[9];let c;e[10]!==a?(c=r.jsx("tbody",{children:a}),e[10]=a,e[11]=c):c=e[11];let h;return e[12]!==n||e[13]!==c?(h=r.jsxs(u,{borderless:!0,className:"compendium-table",children:[n,c]}),e[12]=n,e[13]=c,e[14]=h):h=e[14],h}export{_ as N};
diff --git a/compendium_v2/static/OPsAutomation-BoFZP12U.js b/compendium_v2/static/OPsAutomation-BoFZP12U.js
deleted file mode 100644
index 312070482f966f1f61e50df7a0ae49bdf8cbfb93..0000000000000000000000000000000000000000
--- a/compendium_v2/static/OPsAutomation-BoFZP12U.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import{c as y,r as P,F as S,j as h,t as g,S as k}from"./index.js";import{u as v,g as F,n as C,D,F as E,f as L}from"./useData-CxftshCa.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function J(){const e=y.c(29),{filterSelection:t,setFilterSelection:c}=P.useContext(S),{data:N,years:x,nrens:_}=v("/api/ops-automation",c);let s,p;if(e[0]!==N||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let d;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(d=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=d):d=e[7],s=N.filter(d);const j=F(s,"ops_automation");p=C(j,M),e[0]=N,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=p}else s=e[3],p=e[4];const w=p;let o,m;e[8]===Symbol.for("react.memo_cache_sentinel")?(o=["Yes","Planned","No"],m=new Map([[o[0],"yes"],[o[1],"planned"],[o[2],"no"]]),e[8]=o,e[9]=m):(o=e[8],m=e[9]);const T=m;let a;e[10]!==x?(a=[...x],e[10]=x,e[11]=a):a=e[11];let l;e[12]!==_?(l=_.values(),e[12]=_,e[13]=l):l=e[13];let i;e[14]!==l?(i=[...l],e[14]=l,e[15]=i):i=e[15];let r;e[16]!==a||e[17]!==i?(r={availableYears:a,availableNrens:i},e[16]=a,e[17]=i,e[18]=r):r=e[18];let u;e[19]!==t||e[20]!==c||e[21]!==r?(u=h.jsx(E,{filterOptions:r,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=r,e[22]=u):u=e[22];const Y=u;let n;e[23]!==w?(n=h.jsx(L,{children:h.jsx(R,{columns:o,columnLookup:T,dataLookup:w})}),e[23]=w,e[24]=n):n=e[24];let f;return e[25]!==Y||e[26]!==s||e[27]!==n?(f=h.jsx(D,{title:g["ops-automation"],description:`The table below shows which NRENs have, or plan to, automate their 
-            operational processes, with specification of which processes, and the names of 
-            software and tools used for this given when appropriate.`,category:k.Network,filter:Y,data:s,filename:"ops_automation_nrens_per_year",children:n}),e[25]=Y,e[26]=s,e[27]=n,e[28]=f):f=e[28],f}function M(e,t){if(t.ops_automation_specifics)return t.ops_automation_specifics}export{J as default};
diff --git a/compendium_v2/static/OPsAutomation-D9uxrxhD.js b/compendium_v2/static/OPsAutomation-D9uxrxhD.js
new file mode 100644
index 0000000000000000000000000000000000000000..4de076af33270e743f1021c6ec325954b4c73f4b
--- /dev/null
+++ b/compendium_v2/static/OPsAutomation-D9uxrxhD.js
@@ -0,0 +1,3 @@
+import{c as y,r as P,F as S,j as h,t as g,S as k}from"./index-DunMf8wQ.js";import{u as v,g as F,n as C,D,F as E,f as L}from"./useData-DvdT9bkc.js";import{P as R}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function J(){const e=y.c(29),{filterSelection:t,setFilterSelection:c}=P.useContext(S),{data:N,years:x,nrens:_}=v("/api/ops-automation",c);let s,p;if(e[0]!==N||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let d;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(d=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=d):d=e[7],s=N.filter(d);const j=F(s,"ops_automation");p=C(j,M),e[0]=N,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=p}else s=e[3],p=e[4];const w=p;let o,m;e[8]===Symbol.for("react.memo_cache_sentinel")?(o=["Yes","Planned","No"],m=new Map([[o[0],"yes"],[o[1],"planned"],[o[2],"no"]]),e[8]=o,e[9]=m):(o=e[8],m=e[9]);const T=m;let a;e[10]!==x?(a=[...x],e[10]=x,e[11]=a):a=e[11];let l;e[12]!==_?(l=_.values(),e[12]=_,e[13]=l):l=e[13];let i;e[14]!==l?(i=[...l],e[14]=l,e[15]=i):i=e[15];let r;e[16]!==a||e[17]!==i?(r={availableYears:a,availableNrens:i},e[16]=a,e[17]=i,e[18]=r):r=e[18];let u;e[19]!==t||e[20]!==c||e[21]!==r?(u=h.jsx(E,{filterOptions:r,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=r,e[22]=u):u=e[22];const Y=u;let n;e[23]!==w?(n=h.jsx(L,{children:h.jsx(R,{columns:o,columnLookup:T,dataLookup:w})}),e[23]=w,e[24]=n):n=e[24];let f;return e[25]!==Y||e[26]!==s||e[27]!==n?(f=h.jsx(D,{title:g["ops-automation"],description:`The table below shows which NRENs have, or plan to, automate their 
+            operational processes, with specification of which processes, and the names of 
+            software and tools used for this given when appropriate.`,category:k.Network,filter:Y,data:s,filename:"ops_automation_nrens_per_year",children:n}),e[25]=Y,e[26]=s,e[27]=n,e[28]=f):f=e[28],f}function M(e,t){if(t.ops_automation_specifics)return t.ops_automation_specifics}export{J as default};
diff --git a/compendium_v2/static/ParentOrganisation-BBwyogJP.js b/compendium_v2/static/ParentOrganisation-BBwyogJP.js
new file mode 100644
index 0000000000000000000000000000000000000000..1e4c796a660e1f123019cb2abb2ad09168357aa5
--- /dev/null
+++ b/compendium_v2/static/ParentOrganisation-BBwyogJP.js
@@ -0,0 +1 @@
+import{c as b,r as y,F as j,j as p,S as v}from"./index-DunMf8wQ.js";import{u as E,k as O,i as S,D as F,F as P,f as R}from"./useData-DvdT9bkc.js";import{N as w}from"./NrenYearTable-D3mNeVd3.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";function q(){const e=b.c(27),{filterSelection:t,setFilterSelection:a}=y.useContext(j),{data:u,years:g,nrens:N}=E("/api/parent-organizations",a);let s,c;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==u){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=h=>t.selectedYears.includes(h.year)&&t.selectedNrens.includes(h.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],s=u.filter(m);const Y=O(s);c=S(Y,C),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=u,e[3]=s,e[4]=c}else s=e[3],c=e[4];const x=c;let r;e[8]!==g?(r=[...g],e[8]=g,e[9]=r):r=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let n;e[12]!==i?(n=[...i],e[12]=i,e[13]=n):n=e[13];let l;e[14]!==r||e[15]!==n?(l={availableYears:r,availableNrens:n},e[14]=r,e[15]=n,e[16]=l):l=e[16];let d;e[17]!==t||e[18]!==a||e[19]!==l?(d=p.jsx(P,{filterOptions:l,filterSelection:t,setFilterSelection:a,max1year:!0}),e[17]=t,e[18]=a,e[19]=l,e[20]=d):d=e[20];const D=d;let o;e[21]!==x?(o=p.jsx(R,{children:p.jsx(w,{data:x,columnTitle:"Parent Organisation",dottedBorder:!0,noDots:!0})}),e[21]=x,e[22]=o):o=e[22];let f;return e[23]!==D||e[24]!==s||e[25]!==o?(f=p.jsx(F,{title:"NREN Parent Organisations",description:"Some NRENs are part of larger organisations, including Ministries or universities. These are shown in the table below. Only NRENs who are managed in this way are available to select.",category:v.Organisation,filter:D,data:s,filename:"nren_parent_organisations",children:o}),e[23]=D,e[24]=s,e[25]=o,e[26]=f):f=e[26],f}function C(e,t){const a=t.name;e[a]=a}export{q as default};
diff --git a/compendium_v2/static/ParentOrganisation-OrE_JaGF.js b/compendium_v2/static/ParentOrganisation-OrE_JaGF.js
deleted file mode 100644
index fd644f14107e794119771b6bb2e91fd2fc35f1a0..0000000000000000000000000000000000000000
--- a/compendium_v2/static/ParentOrganisation-OrE_JaGF.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as b,r as y,F as j,j as p,S as v}from"./index.js";import{u as E,k as O,i as S,D as F,F as P,f as R}from"./useData-CxftshCa.js";import{N as w}from"./NrenYearTable-tQrmAmRo.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";function q(){const e=b.c(27),{filterSelection:t,setFilterSelection:a}=y.useContext(j),{data:u,years:g,nrens:N}=E("/api/parent-organizations",a);let s,c;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==u){let m;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(m=h=>t.selectedYears.includes(h.year)&&t.selectedNrens.includes(h.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=m):m=e[7],s=u.filter(m);const Y=O(s);c=S(Y,C),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=u,e[3]=s,e[4]=c}else s=e[3],c=e[4];const x=c;let r;e[8]!==g?(r=[...g],e[8]=g,e[9]=r):r=e[9];let i;e[10]!==N?(i=N.values(),e[10]=N,e[11]=i):i=e[11];let n;e[12]!==i?(n=[...i],e[12]=i,e[13]=n):n=e[13];let l;e[14]!==r||e[15]!==n?(l={availableYears:r,availableNrens:n},e[14]=r,e[15]=n,e[16]=l):l=e[16];let d;e[17]!==t||e[18]!==a||e[19]!==l?(d=p.jsx(P,{filterOptions:l,filterSelection:t,setFilterSelection:a,max1year:!0}),e[17]=t,e[18]=a,e[19]=l,e[20]=d):d=e[20];const D=d;let o;e[21]!==x?(o=p.jsx(R,{children:p.jsx(w,{data:x,columnTitle:"Parent Organisation",dottedBorder:!0,noDots:!0})}),e[21]=x,e[22]=o):o=e[22];let f;return e[23]!==D||e[24]!==s||e[25]!==o?(f=p.jsx(F,{title:"NREN Parent Organisations",description:"Some NRENs are part of larger organisations, including Ministries or universities. These are shown in the table below. Only NRENs who are managed in this way are available to select.",category:v.Organisation,filter:D,data:s,filename:"nren_parent_organisations",children:o}),e[23]=D,e[24]=s,e[25]=o,e[26]=f):f=e[26],f}function C(e,t){const a=t.name;e[a]=a}export{q as default};
diff --git a/compendium_v2/static/PassiveMonitoring-CE6Z1wsB.js b/compendium_v2/static/PassiveMonitoring-CE6Z1wsB.js
new file mode 100644
index 0000000000000000000000000000000000000000..c1173bc114c551941c04b4ce2b5c635163460c45
--- /dev/null
+++ b/compendium_v2/static/PassiveMonitoring-CE6Z1wsB.js
@@ -0,0 +1 @@
+import{c as Y,r as j,F as _,j as N,t as y,S as F}from"./index-DunMf8wQ.js";import{u as T,g as k,D as w,F as A,f as C}from"./useData-DvdT9bkc.js";import{P as D}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function z(){const e=Y.c(29),{filterSelection:t,setFilterSelection:c}=j.useContext(_),{data:h,years:x,nrens:g}=T("/api/passive-monitoring",c);let o,p;if(e[0]!==h||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],o=h.filter(u),p=k(o,"method",!0),e[0]=h,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=o,e[4]=p}else o=e[3],p=e[4];const v=p;let l;e[8]!==x?(l=[...x],e[8]=x,e[9]=l):l=e[9];let r;e[10]!==g?(r=g.values(),e[10]=g,e[11]=r):r=e[11];let i;e[12]!==r?(i=[...r],e[12]=r,e[13]=i):i=e[13];let a;e[14]!==l||e[15]!==i?(a={availableYears:l,availableNrens:i},e[14]=l,e[15]=i,e[16]=a):a=e[16];let m;e[17]!==t||e[18]!==c||e[19]!==a?(m=N.jsx(A,{filterOptions:a,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=a,e[20]=m):m=e[20];const P=m;let s,f;e[21]===Symbol.for("react.memo_cache_sentinel")?(s=["No monitoring occurs","SPAN ports","Passive optical TAPS","Both SPAN ports and passive optical TAPS"],f=new Map([[s[0],"null"],[s[1],"span_ports"],[s[2],"taps"],[s[3],"both"]]),e[21]=s,e[22]=f):(s=e[21],f=e[22]);const b=f;let n;e[23]!==v?(n=N.jsx(C,{children:N.jsx(D,{columns:s,dataLookup:v,columnLookup:b})}),e[23]=v,e[24]=n):n=e[24];let d;return e[25]!==P||e[26]!==o||e[27]!==n?(d=N.jsx(w,{title:y["passive-monitoring"],description:"The table below shows the methods NRENs use for the passive monitoring of international traffic.",category:F.Network,filter:P,data:o,filename:"passive_monitoring_nrens_per_year",children:n}),e[25]=P,e[26]=o,e[27]=n,e[28]=d):d=e[28],d}export{z as default};
diff --git a/compendium_v2/static/PassiveMonitoring-Cv8zkVr2.js b/compendium_v2/static/PassiveMonitoring-Cv8zkVr2.js
deleted file mode 100644
index 648af8f27e3554d53d80b6a48f5c2dd2b51cace3..0000000000000000000000000000000000000000
--- a/compendium_v2/static/PassiveMonitoring-Cv8zkVr2.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as Y,r as j,F as _,j as N,t as y,S as F}from"./index.js";import{u as T,g as k,D as w,F as A,f as C}from"./useData-CxftshCa.js";import{P as D}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function z(){const e=Y.c(29),{filterSelection:t,setFilterSelection:c}=j.useContext(_),{data:h,years:x,nrens:g}=T("/api/passive-monitoring",c);let o,p;if(e[0]!==h||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],o=h.filter(u),p=k(o,"method",!0),e[0]=h,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=o,e[4]=p}else o=e[3],p=e[4];const v=p;let l;e[8]!==x?(l=[...x],e[8]=x,e[9]=l):l=e[9];let r;e[10]!==g?(r=g.values(),e[10]=g,e[11]=r):r=e[11];let i;e[12]!==r?(i=[...r],e[12]=r,e[13]=i):i=e[13];let a;e[14]!==l||e[15]!==i?(a={availableYears:l,availableNrens:i},e[14]=l,e[15]=i,e[16]=a):a=e[16];let m;e[17]!==t||e[18]!==c||e[19]!==a?(m=N.jsx(A,{filterOptions:a,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[17]=t,e[18]=c,e[19]=a,e[20]=m):m=e[20];const P=m;let s,f;e[21]===Symbol.for("react.memo_cache_sentinel")?(s=["No monitoring occurs","SPAN ports","Passive optical TAPS","Both SPAN ports and passive optical TAPS"],f=new Map([[s[0],"null"],[s[1],"span_ports"],[s[2],"taps"],[s[3],"both"]]),e[21]=s,e[22]=f):(s=e[21],f=e[22]);const b=f;let n;e[23]!==v?(n=N.jsx(C,{children:N.jsx(D,{columns:s,dataLookup:v,columnLookup:b})}),e[23]=v,e[24]=n):n=e[24];let d;return e[25]!==P||e[26]!==o||e[27]!==n?(d=N.jsx(w,{title:y["passive-monitoring"],description:"The table below shows the methods NRENs use for the passive monitoring of international traffic.",category:F.Network,filter:P,data:o,filename:"passive_monitoring_nrens_per_year",children:n}),e[25]=P,e[26]=o,e[27]=n,e[28]=d):d=e[28],d}export{z as default};
diff --git a/compendium_v2/static/PertTeam-Cf_GEMUq.js b/compendium_v2/static/PertTeam-Cf_GEMUq.js
deleted file mode 100644
index cf7d3c39009e027c2a4c90fd0070b61cd639b57a..0000000000000000000000000000000000000000
--- a/compendium_v2/static/PertTeam-Cf_GEMUq.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{c as E,r as _,F as b,j as N,t as g,S as k}from"./index.js";import{u as v,g as F,D as R,F as T,f as C}from"./useData-CxftshCa.js";import{P as D}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=E.c(29),{filterSelection:t,setFilterSelection:c}=_.useContext(b),{data:x,years:P,nrens:Y}=v("/api/pert-team",c);let s,m;if(e[0]!==x||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=x.filter(u),m=F(s,"pert_team"),e[0]=x,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=m}else s=e[3],m=e[4];const h=m;let r,p;e[8]===Symbol.for("react.memo_cache_sentinel")?(r=["Yes","Planned","No"],p=new Map([[r[0],"yes"],[r[1],"planned"],[r[2],"no"]]),e[8]=r,e[9]=p):(r=e[8],p=e[9]);const y=p;let a;e[10]!==P?(a=[...P],e[10]=P,e[11]=a):a=e[11];let l;e[12]!==Y?(l=Y.values(),e[12]=Y,e[13]=l):l=e[13];let n;e[14]!==l?(n=[...l],e[14]=l,e[15]=n):n=e[15];let o;e[16]!==a||e[17]!==n?(o={availableYears:a,availableNrens:n},e[16]=a,e[17]=n,e[18]=o):o=e[18];let f;e[19]!==t||e[20]!==c||e[21]!==o?(f=N.jsx(T,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=o,e[22]=f):f=e[22];const S=f;let i;e[23]!==h?(i=N.jsx(C,{children:N.jsx(D,{columns:r,columnLookup:y,dataLookup:h})}),e[23]=h,e[24]=i):i=e[24];let d;return e[25]!==S||e[26]!==s||e[27]!==i?(d=N.jsx(R,{title:g["pert-team"],description:`Some NRENs have an in-house Performance Enhancement Response Team, 
-            or PERT, to investigate network performance issues.`,category:k.Network,filter:S,data:s,filename:"pert_team_nrens_per_year",children:i}),e[25]=S,e[26]=s,e[27]=i,e[28]=d):d=e[28],d}export{B as default};
diff --git a/compendium_v2/static/PertTeam-LT8kFC71.js b/compendium_v2/static/PertTeam-LT8kFC71.js
new file mode 100644
index 0000000000000000000000000000000000000000..e9fcc81749f5fd3d78fc0c9c64b250e5466c293f
--- /dev/null
+++ b/compendium_v2/static/PertTeam-LT8kFC71.js
@@ -0,0 +1,2 @@
+import{c as E,r as _,F as b,j as N,t as g,S as k}from"./index-DunMf8wQ.js";import{u as v,g as F,D as R,F as T,f as C}from"./useData-DvdT9bkc.js";import{P as D}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function B(){const e=E.c(29),{filterSelection:t,setFilterSelection:c}=_.useContext(b),{data:x,years:P,nrens:Y}=v("/api/pert-team",c);let s,m;if(e[0]!==x||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=j=>t.selectedYears.includes(j.year)&&t.selectedNrens.includes(j.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=x.filter(u),m=F(s,"pert_team"),e[0]=x,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=m}else s=e[3],m=e[4];const h=m;let r,p;e[8]===Symbol.for("react.memo_cache_sentinel")?(r=["Yes","Planned","No"],p=new Map([[r[0],"yes"],[r[1],"planned"],[r[2],"no"]]),e[8]=r,e[9]=p):(r=e[8],p=e[9]);const y=p;let a;e[10]!==P?(a=[...P],e[10]=P,e[11]=a):a=e[11];let l;e[12]!==Y?(l=Y.values(),e[12]=Y,e[13]=l):l=e[13];let n;e[14]!==l?(n=[...l],e[14]=l,e[15]=n):n=e[15];let o;e[16]!==a||e[17]!==n?(o={availableYears:a,availableNrens:n},e[16]=a,e[17]=n,e[18]=o):o=e[18];let f;e[19]!==t||e[20]!==c||e[21]!==o?(f=N.jsx(T,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=o,e[22]=f):f=e[22];const S=f;let i;e[23]!==h?(i=N.jsx(C,{children:N.jsx(D,{columns:r,columnLookup:y,dataLookup:h})}),e[23]=h,e[24]=i):i=e[24];let d;return e[25]!==S||e[26]!==s||e[27]!==i?(d=N.jsx(R,{title:g["pert-team"],description:`Some NRENs have an in-house Performance Enhancement Response Team, 
+            or PERT, to investigate network performance issues.`,category:k.Network,filter:S,data:s,filename:"pert_team_nrens_per_year",children:i}),e[25]=S,e[26]=s,e[27]=i,e[28]=d):d=e[28],d}export{B as default};
diff --git a/compendium_v2/static/PillTable-Cnj0nnFy.js b/compendium_v2/static/PillTable-Cnj0nnFy.js
deleted file mode 100644
index 85cf6a1d47045567e24a3a758e52cae3fded5d44..0000000000000000000000000000000000000000
--- a/compendium_v2/static/PillTable-Cnj0nnFy.js
+++ /dev/null
@@ -1 +0,0 @@
-import{j as t}from"./index.js";import{C as c}from"./ColorPill-CXvWIfWz.js";import{T as u}from"./Table-ClWM2_rS.js";function b({columns:h,dataLookup:o,circle:p=!1,columnLookup:n=new Map}){const x=Array.from(new Set(Array.from(o.values()).flatMap(r=>Array.from(r.keys())))),d=h.map(r=>n.get(r)||r),j=Array.from(new Set(Array.from(o.values()).flatMap(r=>Array.from(r.values()).flatMap(e=>Array.from(e.keys()))))),f=x.filter(r=>{const e=n.get(r);return e?!d.includes(e):!d.includes(r)}).map(r=>n.get(r)||r);return t.jsxs(u,{className:"charging-struct-table",striped:!0,bordered:!0,children:[t.jsx("colgroup",{children:t.jsx("col",{span:1,style:{width:"12rem"}})}),t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{}),h.map(r=>t.jsx("th",{colSpan:1,children:r},r)),f.length?t.jsx("th",{children:"Other"}):null]})}),t.jsx("tbody",{children:Array.from(o.entries()).map(([r,e])=>t.jsxs("tr",{children:[t.jsx("td",{children:r}),d.map(s=>{const a=e.get(s);return a?t.jsx("td",{children:j.map(l=>{const i=a.get(l)||{};return t.jsx(c,{year:l,active:a.has(l),tooltip:i.tooltip,rounded:p},l)})},s):t.jsx("td",{},s)}),!!f.length&&t.jsx("td",{children:f.map(s=>{const a=e.get(s);return a?Array.from(Array.from(a.entries())).map(([i,m])=>t.jsx(c,{year:i,active:!0,tooltip:m.tooltip||s,rounded:p},i)):void 0})},`${r}-other`)]},r))})]})}export{b as P};
diff --git a/compendium_v2/static/PillTable-DEX_WeNY.js b/compendium_v2/static/PillTable-DEX_WeNY.js
new file mode 100644
index 0000000000000000000000000000000000000000..5aec3ec2c0c405f7ae01a4da15215db61e801ab0
--- /dev/null
+++ b/compendium_v2/static/PillTable-DEX_WeNY.js
@@ -0,0 +1 @@
+import{j as t}from"./index-DunMf8wQ.js";import{C as c}from"./ColorPill-CXsYrUiQ.js";import{T as u}from"./Table-BUrPWwZB.js";function b({columns:h,dataLookup:o,circle:p=!1,columnLookup:n=new Map}){const x=Array.from(new Set(Array.from(o.values()).flatMap(r=>Array.from(r.keys())))),d=h.map(r=>n.get(r)||r),j=Array.from(new Set(Array.from(o.values()).flatMap(r=>Array.from(r.values()).flatMap(e=>Array.from(e.keys()))))),f=x.filter(r=>{const e=n.get(r);return e?!d.includes(e):!d.includes(r)}).map(r=>n.get(r)||r);return t.jsxs(u,{className:"charging-struct-table",striped:!0,bordered:!0,children:[t.jsx("colgroup",{children:t.jsx("col",{span:1,style:{width:"12rem"}})}),t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{}),h.map(r=>t.jsx("th",{colSpan:1,children:r},r)),f.length?t.jsx("th",{children:"Other"}):null]})}),t.jsx("tbody",{children:Array.from(o.entries()).map(([r,e])=>t.jsxs("tr",{children:[t.jsx("td",{children:r}),d.map(s=>{const a=e.get(s);return a?t.jsx("td",{children:j.map(l=>{const i=a.get(l)||{};return t.jsx(c,{year:l,active:a.has(l),tooltip:i.tooltip,rounded:p},l)})},s):t.jsx("td",{},s)}),!!f.length&&t.jsx("td",{children:f.map(s=>{const a=e.get(s);return a?Array.from(Array.from(a.entries())).map(([i,m])=>t.jsx(c,{year:i,active:!0,tooltip:m.tooltip||s,rounded:p},i)):void 0})},`${r}-other`)]},r))})]})}export{b as P};
diff --git a/compendium_v2/static/Policy-B0McUfA8.js b/compendium_v2/static/Policy-B0McUfA8.js
new file mode 100644
index 0000000000000000000000000000000000000000..924716ef622b4e25438104eea45d2e6bba33683b
--- /dev/null
+++ b/compendium_v2/static/Policy-B0McUfA8.js
@@ -0,0 +1 @@
+import{c as h,r as v,F as E,j as y,t as _,S as b}from"./index-DunMf8wQ.js";import{u as g,q as j,k,i as S,D as q,F as C,f as F}from"./useData-DvdT9bkc.js";import{N as R}from"./NrenYearTable-D3mNeVd3.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";function W(){const e=h.c(21),{filterSelection:t,setFilterSelection:n}=v.useContext(E),{data:a,nrens:c}=g("/api/policy",n);let i,o;if(e[0]!==a||e[1]!==t.selectedNrens){const D=a?j(a):[];let u;e[4]!==t.selectedNrens?(u=x=>t.selectedNrens.includes(x.nren),e[4]=t.selectedNrens,e[5]=u):u=e[5],i=D.filter(u);const P=k(i);o=S(P,T),e[0]=a,e[1]=t.selectedNrens,e[2]=i,e[3]=o}else i=e[2],o=e[3];const d=o;let p;e[6]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[6]=p):p=e[6];let l;e[7]!==c?(l=c.values(),e[7]=c,e[8]=l):l=e[8];let s;e[9]!==l?(s={availableYears:p,availableNrens:[...l]},e[9]=l,e[10]=s):s=e[10];let f;e[11]!==t||e[12]!==n||e[13]!==s?(f=y.jsx(C,{filterOptions:s,filterSelection:t,setFilterSelection:n}),e[11]=t,e[12]=n,e[13]=s,e[14]=f):f=e[14];const N=f;let r;e[15]!==d?(r=y.jsx(F,{children:y.jsx(R,{data:d,columnTitle:"Policies",noDots:!0,dottedBorder:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=d,e[16]=r):r=e[16];let m;return e[17]!==N||e[18]!==i||e[19]!==r?(m=y.jsx(q,{title:_.policy,description:"The table shows links to the NRENs policies. We only include links from the most recent response from each NREN.",category:b.Policy,filter:N,data:i,filename:"nren_policies",children:r}),e[17]=N,e[18]=i,e[19]=r,e[20]=m):m=e[20],m}function T(e,t){[["acceptable_use","Acceptable Use Policy"],["connectivity","Connectivity Policy"],["data_protection","Data Protection Policy"],["environmental","Environmental Policy"],["equal_opportunity","Equal Opportunity Policy"],["gender_equality","Gender Equality Plan"],["privacy_notice","Privacy Notice"]].forEach(a=>{const[c,i]=a,o=t[c];o&&(e[i]=o)})}export{W as default};
diff --git a/compendium_v2/static/Policy-C19_KfRY.js b/compendium_v2/static/Policy-C19_KfRY.js
deleted file mode 100644
index 88533f378e38257a71ac3d261a99d5484f1861ef..0000000000000000000000000000000000000000
--- a/compendium_v2/static/Policy-C19_KfRY.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as h,r as v,F as E,j as y,t as _,S as b}from"./index.js";import{u as g,q as j,k,i as S,D as q,F as C,f as F}from"./useData-CxftshCa.js";import{N as R}from"./NrenYearTable-tQrmAmRo.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";function W(){const e=h.c(21),{filterSelection:t,setFilterSelection:n}=v.useContext(E),{data:a,nrens:c}=g("/api/policy",n);let i,o;if(e[0]!==a||e[1]!==t.selectedNrens){const D=a?j(a):[];let u;e[4]!==t.selectedNrens?(u=x=>t.selectedNrens.includes(x.nren),e[4]=t.selectedNrens,e[5]=u):u=e[5],i=D.filter(u);const P=k(i);o=S(P,T),e[0]=a,e[1]=t.selectedNrens,e[2]=i,e[3]=o}else i=e[2],o=e[3];const d=o;let p;e[6]===Symbol.for("react.memo_cache_sentinel")?(p=[],e[6]=p):p=e[6];let l;e[7]!==c?(l=c.values(),e[7]=c,e[8]=l):l=e[8];let s;e[9]!==l?(s={availableYears:p,availableNrens:[...l]},e[9]=l,e[10]=s):s=e[10];let f;e[11]!==t||e[12]!==n||e[13]!==s?(f=y.jsx(C,{filterOptions:s,filterSelection:t,setFilterSelection:n}),e[11]=t,e[12]=n,e[13]=s,e[14]=f):f=e[14];const N=f;let r;e[15]!==d?(r=y.jsx(F,{children:y.jsx(R,{data:d,columnTitle:"Policies",noDots:!0,dottedBorder:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=d,e[16]=r):r=e[16];let m;return e[17]!==N||e[18]!==i||e[19]!==r?(m=y.jsx(q,{title:_.policy,description:"The table shows links to the NRENs policies. We only include links from the most recent response from each NREN.",category:b.Policy,filter:N,data:i,filename:"nren_policies",children:r}),e[17]=N,e[18]=i,e[19]=r,e[20]=m):m=e[20],m}function T(e,t){[["acceptable_use","Acceptable Use Policy"],["connectivity","Connectivity Policy"],["data_protection","Data Protection Policy"],["environmental","Environmental Policy"],["equal_opportunity","Equal Opportunity Policy"],["gender_equality","Gender Equality Plan"],["privacy_notice","Privacy Notice"]].forEach(a=>{const[c,i]=a,o=t[c];o&&(e[i]=o)})}export{W as default};
diff --git a/compendium_v2/static/RemoteCampuses-Bh0h6tbY.js b/compendium_v2/static/RemoteCampuses-Bh0h6tbY.js
new file mode 100644
index 0000000000000000000000000000000000000000..73140462d6f9b0893a88a82c804f45cb63eb2903
--- /dev/null
+++ b/compendium_v2/static/RemoteCampuses-Bh0h6tbY.js
@@ -0,0 +1 @@
+import{c as S,j as n,r as D,F as R,t as E,S as g}from"./index-DunMf8wQ.js";import{u as w,h as F,i as k,D as T,F as B,f as L}from"./useData-DvdT9bkc.js";import{T as O}from"./Table-BUrPWwZB.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";function $({data:e,dottedBorder:t=!1,columns:o}){return Array.from(e.entries()).map(([s,a])=>Array.from(a.entries()).map(([i,d],c)=>n.jsxs("tr",{className:t?"dotted-border":"",children:[n.jsx("td",{className:"pt-3 nren-column text-nowrap",children:c===0&&s}),n.jsx("td",{className:"pt-3 year-column",children:i}),Object.keys(o).map((r,l)=>n.jsx("td",{className:"pt-3 blue-column",children:d[r]},l))]},s+i)))}function A(e){const t=S.c(15),{data:o,dottedBorder:s,columns:a}=e;let i;t[0]===Symbol.for("react.memo_cache_sentinel")?(i=n.jsx("th",{className:"nren-column",children:n.jsx("span",{children:"NREN"})}),t[0]=i):i=t[0];let d;t[1]===Symbol.for("react.memo_cache_sentinel")?(d=n.jsx("th",{className:"year-column",children:n.jsx("span",{children:"Year"})}),t[1]=d):d=t[1];let c;t[2]!==a?(c=Object.values(a).map(P),t[2]=a,t[3]=c):c=t[3];let r;t[4]!==c?(r=n.jsx("thead",{children:n.jsxs("tr",{children:[i,d,c]})}),t[4]=c,t[5]=r):r=t[5];let l;t[6]!==a||t[7]!==o||t[8]!==s?(l=$({data:o,dottedBorder:s,columns:a}),t[6]=a,t[7]=o,t[8]=s,t[9]=l):l=t[9];let u;t[10]!==l?(u=n.jsx("tbody",{children:l}),t[10]=l,t[11]=u):u=t[11];let m;return t[12]!==r||t[13]!==u?(m=n.jsxs(O,{borderless:!0,className:"compendium-table",children:[r,u]}),t[12]=r,t[13]=u,t[14]=m):m=t[14],m}function P(e,t){return n.jsx("th",{className:"blue-column",children:n.jsx("span",{children:e})},t)}function Q(){const e=S.c(29);let t;e[0]===Symbol.for("react.memo_cache_sentinel")?(t=x=>!!x.remote_campus_connectivity,e[0]=t):t=e[0];const o=t,{filterSelection:s,setFilterSelection:a}=D.useContext(R),{data:i,years:d,nrens:c}=w("/api/remote-campuses",a,o);let r,l;if(e[1]!==i||e[2]!==s.selectedNrens||e[3]!==s.selectedYears){let x;e[6]!==s.selectedNrens||e[7]!==s.selectedYears?(x=C=>s.selectedYears.includes(C.year)&&s.selectedNrens.includes(C.nren),e[6]=s.selectedNrens,e[7]=s.selectedYears,e[8]=x):x=e[8],r=i.filter(x);const v=F(r);l=k(v,J),e[1]=i,e[2]=s.selectedNrens,e[3]=s.selectedYears,e[4]=r,e[5]=l}else r=e[4],l=e[5];const u=l;let m;e[9]!==d?(m=[...d],e[9]=d,e[10]=m):m=e[10];let f;e[11]!==c?(f=c.values(),e[11]=c,e[12]=f):f=e[12];let p;e[13]!==f?(p=[...f],e[13]=f,e[14]=p):p=e[14];let h;e[15]!==m||e[16]!==p?(h={availableYears:m,availableNrens:p},e[15]=m,e[16]=p,e[17]=h):h=e[17];let j;e[18]!==s||e[19]!==a||e[20]!==h?(j=n.jsx(B,{filterOptions:h,filterSelection:s,setFilterSelection:a}),e[18]=s,e[19]=a,e[20]=h,e[21]=j):j=e[21];const b=j;let N;e[22]===Symbol.for("react.memo_cache_sentinel")?(N={countries:"Countries with Remote Campuses",local_r_and_e_connection:"Local R&E Connection"},e[22]=N):N=e[22];const Y=N;let _;e[23]!==u?(_=n.jsx(L,{children:n.jsx(A,{data:u,columns:Y,dottedBorder:!0})}),e[23]=u,e[24]=_):_=e[24];let y;return e[25]!==b||e[26]!==r||e[27]!==_?(y=n.jsx(T,{title:E["remote-campuses"],description:"NRENs are asked whether they have remote campuses in other countries, and if so, to list the countries where they have remote campuses and whether they are connected to the local R&E network.",category:g.ConnectedUsers,filter:b,data:r,filename:"nren_remote_campuses",children:_}),e[25]=b,e[26]=r,e[27]=_,e[28]=y):y=e[28],y}function J(e,t){for(const o of t){if(!o.remote_campus_connectivity)continue;const s=o.connections.map(X).join(", ");e.countries=s,e.local_r_and_e_connection=o.connections.map(U).join(", ")}}function U(e){return e.local_r_and_e_connection?"Yes":"No"}function X(e){return e.country}export{Q as default};
diff --git a/compendium_v2/static/RemoteCampuses-Bu_1Ucwy.js b/compendium_v2/static/RemoteCampuses-Bu_1Ucwy.js
deleted file mode 100644
index d6a2417e4b46921ddc7492b25a15e9235c7b877e..0000000000000000000000000000000000000000
--- a/compendium_v2/static/RemoteCampuses-Bu_1Ucwy.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as S,j as n,r as D,F as R,t as E,S as g}from"./index.js";import{u as w,h as F,i as k,D as T,F as B,f as L}from"./useData-CxftshCa.js";import{T as O}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";function $({data:e,dottedBorder:t=!1,columns:o}){return Array.from(e.entries()).map(([s,a])=>Array.from(a.entries()).map(([i,d],c)=>n.jsxs("tr",{className:t?"dotted-border":"",children:[n.jsx("td",{className:"pt-3 nren-column text-nowrap",children:c===0&&s}),n.jsx("td",{className:"pt-3 year-column",children:i}),Object.keys(o).map((r,l)=>n.jsx("td",{className:"pt-3 blue-column",children:d[r]},l))]},s+i)))}function A(e){const t=S.c(15),{data:o,dottedBorder:s,columns:a}=e;let i;t[0]===Symbol.for("react.memo_cache_sentinel")?(i=n.jsx("th",{className:"nren-column",children:n.jsx("span",{children:"NREN"})}),t[0]=i):i=t[0];let d;t[1]===Symbol.for("react.memo_cache_sentinel")?(d=n.jsx("th",{className:"year-column",children:n.jsx("span",{children:"Year"})}),t[1]=d):d=t[1];let c;t[2]!==a?(c=Object.values(a).map(P),t[2]=a,t[3]=c):c=t[3];let r;t[4]!==c?(r=n.jsx("thead",{children:n.jsxs("tr",{children:[i,d,c]})}),t[4]=c,t[5]=r):r=t[5];let l;t[6]!==a||t[7]!==o||t[8]!==s?(l=$({data:o,dottedBorder:s,columns:a}),t[6]=a,t[7]=o,t[8]=s,t[9]=l):l=t[9];let u;t[10]!==l?(u=n.jsx("tbody",{children:l}),t[10]=l,t[11]=u):u=t[11];let m;return t[12]!==r||t[13]!==u?(m=n.jsxs(O,{borderless:!0,className:"compendium-table",children:[r,u]}),t[12]=r,t[13]=u,t[14]=m):m=t[14],m}function P(e,t){return n.jsx("th",{className:"blue-column",children:n.jsx("span",{children:e})},t)}function Q(){const e=S.c(29);let t;e[0]===Symbol.for("react.memo_cache_sentinel")?(t=x=>!!x.remote_campus_connectivity,e[0]=t):t=e[0];const o=t,{filterSelection:s,setFilterSelection:a}=D.useContext(R),{data:i,years:d,nrens:c}=w("/api/remote-campuses",a,o);let r,l;if(e[1]!==i||e[2]!==s.selectedNrens||e[3]!==s.selectedYears){let x;e[6]!==s.selectedNrens||e[7]!==s.selectedYears?(x=C=>s.selectedYears.includes(C.year)&&s.selectedNrens.includes(C.nren),e[6]=s.selectedNrens,e[7]=s.selectedYears,e[8]=x):x=e[8],r=i.filter(x);const v=F(r);l=k(v,J),e[1]=i,e[2]=s.selectedNrens,e[3]=s.selectedYears,e[4]=r,e[5]=l}else r=e[4],l=e[5];const u=l;let m;e[9]!==d?(m=[...d],e[9]=d,e[10]=m):m=e[10];let f;e[11]!==c?(f=c.values(),e[11]=c,e[12]=f):f=e[12];let p;e[13]!==f?(p=[...f],e[13]=f,e[14]=p):p=e[14];let h;e[15]!==m||e[16]!==p?(h={availableYears:m,availableNrens:p},e[15]=m,e[16]=p,e[17]=h):h=e[17];let j;e[18]!==s||e[19]!==a||e[20]!==h?(j=n.jsx(B,{filterOptions:h,filterSelection:s,setFilterSelection:a}),e[18]=s,e[19]=a,e[20]=h,e[21]=j):j=e[21];const b=j;let N;e[22]===Symbol.for("react.memo_cache_sentinel")?(N={countries:"Countries with Remote Campuses",local_r_and_e_connection:"Local R&E Connection"},e[22]=N):N=e[22];const Y=N;let _;e[23]!==u?(_=n.jsx(L,{children:n.jsx(A,{data:u,columns:Y,dottedBorder:!0})}),e[23]=u,e[24]=_):_=e[24];let y;return e[25]!==b||e[26]!==r||e[27]!==_?(y=n.jsx(T,{title:E["remote-campuses"],description:"NRENs are asked whether they have remote campuses in other countries, and if so, to list the countries where they have remote campuses and whether they are connected to the local R&E network.",category:g.ConnectedUsers,filter:b,data:r,filename:"nren_remote_campuses",children:_}),e[25]=b,e[26]=r,e[27]=_,e[28]=y):y=e[28],y}function J(e,t){for(const o of t){if(!o.remote_campus_connectivity)continue;const s=o.connections.map(X).join(", ");e.countries=s,e.local_r_and_e_connection=o.connections.map(U).join(", ")}}function U(e){return e.local_r_and_e_connection?"Yes":"No"}function X(e){return e.country}export{Q as default};
diff --git a/compendium_v2/static/ScrollableMatrix-D6caiSg1.js b/compendium_v2/static/ScrollableMatrix-D6caiSg1.js
new file mode 100644
index 0000000000000000000000000000000000000000..6c982180c9fe9ca8b35b573c572ea862288d73ad
--- /dev/null
+++ b/compendium_v2/static/ScrollableMatrix-D6caiSg1.js
@@ -0,0 +1 @@
+import{c as T,j as t,e as k}from"./index-DunMf8wQ.js";import{T as A}from"./Table-BUrPWwZB.js";const L=t.jsx("span",{children:"✔"}),O=8;function V(r){const e=T.c(12),{dataLookup:n,rowInfo:s,categoryLookup:h,isTickIcon:b}=r,l=b===void 0?!1:b;if(!n){let c;return e[0]===Symbol.for("react.memo_cache_sentinel")?(c=t.jsx("div",{className:"matrix-border"}),e[0]=c):c=e[0],c}let d;if(e[1]!==h||e[2]!==n||e[3]!==l||e[4]!==s){let c;e[6]!==n||e[7]!==l||e[8]!==s?(c=v=>{const[p,E]=v,C=Object.entries(s).map(o=>{const[u,a]=o,i=[];return Array.from(n.entries()).sort(F).forEach(y=>{const[,_]=y;_.forEach(g=>{const f=g.get(p);if(!f)return;const N=f[a]!=null?Object.keys(f[a])[0]:null,I=N!=null&&l?L:N;i.push(I)})}),i.length?t.jsxs("tr",{children:[t.jsx("th",{className:"fixed-column",children:u}),i.map(D)]},u):null}),j=Array.from(n.entries()).sort(B).reduce((o,u)=>{const[a,i]=u;return Array.from(i.entries()).forEach(y=>{const[_,g]=y;g.get(p)&&(o[a]||(o[a]=[]),o[a].push(_))}),o},{});for(const o in j)j[o].sort($);return t.jsx(k,{title:E,startCollapsed:!0,theme:"-matrix",children:C?t.jsx("div",{className:"table-responsive",children:t.jsxs(A,{className:"matrix-table",bordered:!0,children:[t.jsx("thead",{children:(()=>{const o=Object.entries(j);return t.jsxs(t.Fragment,{children:[t.jsxs("tr",{children:[t.jsx("th",{className:"fixed-column"}),o.map(w)]}),t.jsxs("tr",{children:[t.jsx("th",{className:"fixed-column"}),o.flatMap(S)]})]})})()}),t.jsx("tbody",{children:C})]})}):t.jsx("div",{style:{paddingLeft:"5%"},children:t.jsx("p",{children:"No data available for this section."})})},p)},e[6]=n,e[7]=l,e[8]=s,e[9]=c):c=e[9],d=Object.entries(h).map(c),e[1]=h,e[2]=n,e[3]=l,e[4]=s,e[5]=d}else d=e[5];const x=d;let m;return e[10]!==x?(m=t.jsx("div",{className:"matrix-border",children:x}),e[10]=x,e[11]=m):m=e[11],m}function S(r){const[e,n]=r;return n.map(s=>t.jsx("th",{children:s},`${e}-${s}`))}function w(r){const[e,n]=r;return t.jsx("th",{colSpan:n.length,style:{width:`${n.length*O}rem`},children:e},e)}function $(r,e){return r-e}function B(r,e){const[n]=r,[s]=e;return n.localeCompare(s)}function D(r,e){return t.jsx("td",{children:r},e)}function F(r,e){const[n]=r,[s]=e;return n.localeCompare(s)}export{V as S};
diff --git a/compendium_v2/static/ScrollableMatrix-Dxr22l4i.js b/compendium_v2/static/ScrollableMatrix-Dxr22l4i.js
deleted file mode 100644
index 6be0491577b792b29b338a90c023f1169e65842e..0000000000000000000000000000000000000000
--- a/compendium_v2/static/ScrollableMatrix-Dxr22l4i.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as T,j as t,e as k}from"./index.js";import{T as A}from"./Table-ClWM2_rS.js";const L=t.jsx("span",{children:"✔"}),O=8;function V(r){const e=T.c(12),{dataLookup:n,rowInfo:s,categoryLookup:h,isTickIcon:b}=r,l=b===void 0?!1:b;if(!n){let c;return e[0]===Symbol.for("react.memo_cache_sentinel")?(c=t.jsx("div",{className:"matrix-border"}),e[0]=c):c=e[0],c}let d;if(e[1]!==h||e[2]!==n||e[3]!==l||e[4]!==s){let c;e[6]!==n||e[7]!==l||e[8]!==s?(c=v=>{const[p,E]=v,C=Object.entries(s).map(o=>{const[u,a]=o,i=[];return Array.from(n.entries()).sort(F).forEach(y=>{const[,_]=y;_.forEach(g=>{const f=g.get(p);if(!f)return;const N=f[a]!=null?Object.keys(f[a])[0]:null,I=N!=null&&l?L:N;i.push(I)})}),i.length?t.jsxs("tr",{children:[t.jsx("th",{className:"fixed-column",children:u}),i.map(D)]},u):null}),j=Array.from(n.entries()).sort(B).reduce((o,u)=>{const[a,i]=u;return Array.from(i.entries()).forEach(y=>{const[_,g]=y;g.get(p)&&(o[a]||(o[a]=[]),o[a].push(_))}),o},{});for(const o in j)j[o].sort($);return t.jsx(k,{title:E,startCollapsed:!0,theme:"-matrix",children:C?t.jsx("div",{className:"table-responsive",children:t.jsxs(A,{className:"matrix-table",bordered:!0,children:[t.jsx("thead",{children:(()=>{const o=Object.entries(j);return t.jsxs(t.Fragment,{children:[t.jsxs("tr",{children:[t.jsx("th",{className:"fixed-column"}),o.map(w)]}),t.jsxs("tr",{children:[t.jsx("th",{className:"fixed-column"}),o.flatMap(S)]})]})})()}),t.jsx("tbody",{children:C})]})}):t.jsx("div",{style:{paddingLeft:"5%"},children:t.jsx("p",{children:"No data available for this section."})})},p)},e[6]=n,e[7]=l,e[8]=s,e[9]=c):c=e[9],d=Object.entries(h).map(c),e[1]=h,e[2]=n,e[3]=l,e[4]=s,e[5]=d}else d=e[5];const x=d;let m;return e[10]!==x?(m=t.jsx("div",{className:"matrix-border",children:x}),e[10]=x,e[11]=m):m=e[11],m}function S(r){const[e,n]=r;return n.map(s=>t.jsx("th",{children:s},`${e}-${s}`))}function w(r){const[e,n]=r;return t.jsx("th",{colSpan:n.length,style:{width:`${n.length*O}rem`},children:e},e)}function $(r,e){return r-e}function B(r,e){const[n]=r,[s]=e;return n.localeCompare(s)}function D(r,e){return t.jsx("td",{children:r},e)}function F(r,e){const[n]=r,[s]=e;return n.localeCompare(s)}export{V as S};
diff --git a/compendium_v2/static/SecurityControls-CkjbRt2j.js b/compendium_v2/static/SecurityControls-CkjbRt2j.js
deleted file mode 100644
index 53b7f661bcb3858b68e726b49e9c7193b2b73ee7..0000000000000000000000000000000000000000
--- a/compendium_v2/static/SecurityControls-CkjbRt2j.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{c as T,r as E,F as L,S as A,j,t as I}from"./index.js";import{u as M,g as O,F as R,D as V,f as W}from"./useData-CxftshCa.js";import{P as $}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function Z(){const e=T.c(51),{filterSelection:t,setFilterSelection:i}=E.useContext(L),{data:w,years:D,nrens:Y}=M("/api/security-controls",i);let s,S;if(e[0]!==w||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let r;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(r=P=>t.selectedYears.includes(P.year)&&t.selectedNrens.includes(P.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=r):r=e[7],s=w.filter(r),S=O(s,"security_control_descriptions"),e[0]=w,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=S}else s=e[3],S=e[4];const C=S;let l;e[8]!==D?(l=[...D],e[8]=D,e[9]=l):l=e[9];let o;e[10]!==Y?(o=Y.values(),e[10]=Y,e[11]=o):o=e[11];let n;e[12]!==o?(n=[...o],e[12]=o,e[13]=n):n=e[13];let a;e[14]!==l||e[15]!==n?(a={availableYears:l,availableNrens:n},e[14]=l,e[15]=n,e[16]=a):a=e[16];let b;e[17]!==t||e[18]!==i||e[19]!==a?(b=j.jsx(R,{filterOptions:a,filterSelection:t,setFilterSelection:i,coloredYears:!0}),e[17]=t,e[18]=i,e[19]=a,e[20]=b):b=e[20];const F=b;let c,u,m,p,f,d,y,g,h,N,x;if(e[21]!==F||e[22]!==s){const r={anti_virus:"Anti Virus",anti_spam:"Anti-Spam",firewall:"Firewall",ddos_mitigation:"DDoS mitigation",monitoring:"Network monitoring",ips_ids:"IPS/IDS",acl:"ACL",segmentation:"Network segmentation",integrity_checking:"Integrity checking"};p=new Map(Object.entries(r).map(q)),m=V,h=I["security-control"],N=`The table below shows the different security controls, such as anti-virus, integrity checkers, and systemic firewalls used by 
-            NRENs to protect their assets. Where 'other' controls are mentioned, hover over the marker for more information.`,x=A.Policy,f=F,d=s,y="security_control_nrens_per_year",u=W,c=$,g=Object.values(r),e[21]=F,e[22]=s,e[23]=c,e[24]=u,e[25]=m,e[26]=p,e[27]=f,e[28]=d,e[29]=y,e[30]=g,e[31]=h,e[32]=N,e[33]=x}else c=e[23],u=e[24],m=e[25],p=e[26],f=e[27],d=e[28],y=e[29],g=e[30],h=e[31],N=e[32],x=e[33];let _;e[34]!==c||e[35]!==p||e[36]!==C||e[37]!==g?(_=j.jsx(c,{columns:g,dataLookup:C,circle:!0,columnLookup:p}),e[34]=c,e[35]=p,e[36]=C,e[37]=g,e[38]=_):_=e[38];let k;e[39]!==u||e[40]!==_?(k=j.jsx(u,{children:_}),e[39]=u,e[40]=_,e[41]=k):k=e[41];let v;return e[42]!==m||e[43]!==f||e[44]!==d||e[45]!==y||e[46]!==k||e[47]!==h||e[48]!==N||e[49]!==x?(v=j.jsx(m,{title:h,description:N,category:x,filter:f,data:d,filename:y,children:k}),e[42]=m,e[43]=f,e[44]=d,e[45]=y,e[46]=k,e[47]=h,e[48]=N,e[49]=x,e[50]=v):v=e[50],v}function q(e){const[t,i]=e;return[i,t]}export{Z as default};
diff --git a/compendium_v2/static/SecurityControls-DPvKKslf.js b/compendium_v2/static/SecurityControls-DPvKKslf.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f37b60fc3886326684e4ea2e91f865cddea998b
--- /dev/null
+++ b/compendium_v2/static/SecurityControls-DPvKKslf.js
@@ -0,0 +1,2 @@
+import{c as T,r as E,F as L,S as A,j,t as I}from"./index-DunMf8wQ.js";import{u as M,g as O,F as R,D as V,f as W}from"./useData-DvdT9bkc.js";import{P as $}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function Z(){const e=T.c(51),{filterSelection:t,setFilterSelection:i}=E.useContext(L),{data:w,years:D,nrens:Y}=M("/api/security-controls",i);let s,S;if(e[0]!==w||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let r;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(r=P=>t.selectedYears.includes(P.year)&&t.selectedNrens.includes(P.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=r):r=e[7],s=w.filter(r),S=O(s,"security_control_descriptions"),e[0]=w,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=S}else s=e[3],S=e[4];const C=S;let l;e[8]!==D?(l=[...D],e[8]=D,e[9]=l):l=e[9];let o;e[10]!==Y?(o=Y.values(),e[10]=Y,e[11]=o):o=e[11];let n;e[12]!==o?(n=[...o],e[12]=o,e[13]=n):n=e[13];let a;e[14]!==l||e[15]!==n?(a={availableYears:l,availableNrens:n},e[14]=l,e[15]=n,e[16]=a):a=e[16];let b;e[17]!==t||e[18]!==i||e[19]!==a?(b=j.jsx(R,{filterOptions:a,filterSelection:t,setFilterSelection:i,coloredYears:!0}),e[17]=t,e[18]=i,e[19]=a,e[20]=b):b=e[20];const F=b;let c,u,m,p,f,d,y,g,h,N,x;if(e[21]!==F||e[22]!==s){const r={anti_virus:"Anti Virus",anti_spam:"Anti-Spam",firewall:"Firewall",ddos_mitigation:"DDoS mitigation",monitoring:"Network monitoring",ips_ids:"IPS/IDS",acl:"ACL",segmentation:"Network segmentation",integrity_checking:"Integrity checking"};p=new Map(Object.entries(r).map(q)),m=V,h=I["security-control"],N=`The table below shows the different security controls, such as anti-virus, integrity checkers, and systemic firewalls used by 
+            NRENs to protect their assets. Where 'other' controls are mentioned, hover over the marker for more information.`,x=A.Policy,f=F,d=s,y="security_control_nrens_per_year",u=W,c=$,g=Object.values(r),e[21]=F,e[22]=s,e[23]=c,e[24]=u,e[25]=m,e[26]=p,e[27]=f,e[28]=d,e[29]=y,e[30]=g,e[31]=h,e[32]=N,e[33]=x}else c=e[23],u=e[24],m=e[25],p=e[26],f=e[27],d=e[28],y=e[29],g=e[30],h=e[31],N=e[32],x=e[33];let _;e[34]!==c||e[35]!==p||e[36]!==C||e[37]!==g?(_=j.jsx(c,{columns:g,dataLookup:C,circle:!0,columnLookup:p}),e[34]=c,e[35]=p,e[36]=C,e[37]=g,e[38]=_):_=e[38];let k;e[39]!==u||e[40]!==_?(k=j.jsx(u,{children:_}),e[39]=u,e[40]=_,e[41]=k):k=e[41];let v;return e[42]!==m||e[43]!==f||e[44]!==d||e[45]!==y||e[46]!==k||e[47]!==h||e[48]!==N||e[49]!==x?(v=j.jsx(m,{title:h,description:N,category:x,filter:f,data:d,filename:y,children:k}),e[42]=m,e[43]=f,e[44]=d,e[45]=y,e[46]=k,e[47]=h,e[48]=N,e[49]=x,e[50]=v):v=e[50],v}function q(e){const[t,i]=e;return[i,t]}export{Z as default};
diff --git a/compendium_v2/static/ServiceLevelTargets-BQyQ1ynP.js b/compendium_v2/static/ServiceLevelTargets-BQyQ1ynP.js
deleted file mode 100644
index 89cd2a3ad9b6b960f7f7d65c49bf758f56d17735..0000000000000000000000000000000000000000
--- a/compendium_v2/static/ServiceLevelTargets-BQyQ1ynP.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{c as y,r as j,F,j as v,t as T,S as _}from"./index.js";import{u as E,g as L,D as P,F as w,f as C}from"./useData-CxftshCa.js";import{P as D}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function A(){const e=y.c(29),{filterSelection:t,setFilterSelection:n}=j.useContext(F),{data:h,years:N,nrens:x}=E("/api/service-management",n);let s,f;if(e[0]!==h||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let p;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(p=Y=>t.selectedYears.includes(Y.year)&&t.selectedNrens.includes(Y.nren)&&Y.service_level_targets!==null,e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=p):p=e[7],s=h.filter(p),f=L(s,"service_level_targets"),e[0]=h,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=f}else s=e[3],f=e[4];const g=f;let l,d;e[8]===Symbol.for("react.memo_cache_sentinel")?(l=["Yes","No"],d=new Map([[l[0],"True"],[l[1],"False"]]),e[8]=l,e[9]=d):(l=e[8],d=e[9]);const b=d;let r;e[10]!==N?(r=[...N],e[10]=N,e[11]=r):r=e[11];let a;e[12]!==x?(a=x.values(),e[12]=x,e[13]=a):a=e[13];let i;e[14]!==a?(i=[...a],e[14]=a,e[15]=i):i=e[15];let o;e[16]!==r||e[17]!==i?(o={availableYears:r,availableNrens:i},e[16]=r,e[17]=i,e[18]=o):o=e[18];let m;e[19]!==t||e[20]!==n||e[21]!==o?(m=v.jsx(w,{filterOptions:o,filterSelection:t,setFilterSelection:n,coloredYears:!0}),e[19]=t,e[20]=n,e[21]=o,e[22]=m):m=e[22];const S=m;let c;e[23]!==g?(c=v.jsx(C,{children:v.jsx(D,{columns:l,columnLookup:b,dataLookup:g})}),e[23]=g,e[24]=c):c=e[24];let u;return e[25]!==S||e[26]!==s||e[27]!==c?(u=v.jsx(P,{title:T["service-level-targets"],description:`The table below shows which NRENs offer Service Levels Targets for their services. 
-            If NRENs have never responded to this question in the survey, they are excluded. `,category:_.Policy,filter:S,data:s,filename:"service_level_targets",children:c}),e[25]=S,e[26]=s,e[27]=c,e[28]=u):u=e[28],u}export{A as default};
diff --git a/compendium_v2/static/ServiceLevelTargets-BTUmV26j.js b/compendium_v2/static/ServiceLevelTargets-BTUmV26j.js
new file mode 100644
index 0000000000000000000000000000000000000000..e714c336457c462f776ed74ea6dd65c4edaa5c91
--- /dev/null
+++ b/compendium_v2/static/ServiceLevelTargets-BTUmV26j.js
@@ -0,0 +1,2 @@
+import{c as y,r as j,F,j as v,t as T,S as _}from"./index-DunMf8wQ.js";import{u as E,g as L,D as P,F as w,f as C}from"./useData-DvdT9bkc.js";import{P as D}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function A(){const e=y.c(29),{filterSelection:t,setFilterSelection:n}=j.useContext(F),{data:h,years:N,nrens:x}=E("/api/service-management",n);let s,f;if(e[0]!==h||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let p;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(p=Y=>t.selectedYears.includes(Y.year)&&t.selectedNrens.includes(Y.nren)&&Y.service_level_targets!==null,e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=p):p=e[7],s=h.filter(p),f=L(s,"service_level_targets"),e[0]=h,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=f}else s=e[3],f=e[4];const g=f;let l,d;e[8]===Symbol.for("react.memo_cache_sentinel")?(l=["Yes","No"],d=new Map([[l[0],"True"],[l[1],"False"]]),e[8]=l,e[9]=d):(l=e[8],d=e[9]);const b=d;let r;e[10]!==N?(r=[...N],e[10]=N,e[11]=r):r=e[11];let a;e[12]!==x?(a=x.values(),e[12]=x,e[13]=a):a=e[13];let i;e[14]!==a?(i=[...a],e[14]=a,e[15]=i):i=e[15];let o;e[16]!==r||e[17]!==i?(o={availableYears:r,availableNrens:i},e[16]=r,e[17]=i,e[18]=o):o=e[18];let m;e[19]!==t||e[20]!==n||e[21]!==o?(m=v.jsx(w,{filterOptions:o,filterSelection:t,setFilterSelection:n,coloredYears:!0}),e[19]=t,e[20]=n,e[21]=o,e[22]=m):m=e[22];const S=m;let c;e[23]!==g?(c=v.jsx(C,{children:v.jsx(D,{columns:l,columnLookup:b,dataLookup:g})}),e[23]=g,e[24]=c):c=e[24];let u;return e[25]!==S||e[26]!==s||e[27]!==c?(u=v.jsx(P,{title:T["service-level-targets"],description:`The table below shows which NRENs offer Service Levels Targets for their services. 
+            If NRENs have never responded to this question in the survey, they are excluded. `,category:_.Policy,filter:S,data:s,filename:"service_level_targets",children:c}),e[25]=S,e[26]=s,e[27]=c,e[28]=u):u=e[28],u}export{A as default};
diff --git a/compendium_v2/static/ServiceManagementFramework-DDW7v-XJ.js b/compendium_v2/static/ServiceManagementFramework-DDW7v-XJ.js
deleted file mode 100644
index 1cd11d839dad9976f19555f836d011e364aaf638..0000000000000000000000000000000000000000
--- a/compendium_v2/static/ServiceManagementFramework-DDW7v-XJ.js
+++ /dev/null
@@ -1,2 +0,0 @@
-import{c as b,r as F,F as S,j as h,t as j,S as _}from"./index.js";import{u as y,g as E,D as P,F as C,f as D}from"./useData-CxftshCa.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function B(){const e=b.c(29),{filterSelection:t,setFilterSelection:c}=F.useContext(S),{data:v,years:N,nrens:w}=y("/api/service-management",c);let s,m;if(e[0]!==v||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=k=>t.selectedYears.includes(k.year)&&t.selectedNrens.includes(k.nren)&&k.service_management_framework!==null,e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=v.filter(u),m=E(s,"service_management_framework"),e[0]=v,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=m}else s=e[3],m=e[4];const g=m;let r,f;e[8]===Symbol.for("react.memo_cache_sentinel")?(r=["Yes","No"],f=new Map([[r[0],"True"],[r[1],"False"]]),e[8]=r,e[9]=f):(r=e[8],f=e[9]);const Y=f;let a;e[10]!==N?(a=[...N],e[10]=N,e[11]=a):a=e[11];let l;e[12]!==w?(l=w.values(),e[12]=w,e[13]=l):l=e[13];let i;e[14]!==l?(i=[...l],e[14]=l,e[15]=i):i=e[15];let o;e[16]!==a||e[17]!==i?(o={availableYears:a,availableNrens:i},e[16]=a,e[17]=i,e[18]=o):o=e[18];let p;e[19]!==t||e[20]!==c||e[21]!==o?(p=h.jsx(C,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=o,e[22]=p):p=e[22];const x=p;let n;e[23]!==g?(n=h.jsx(D,{children:h.jsx(R,{columns:r,columnLookup:Y,dataLookup:g})}),e[23]=g,e[24]=n):n=e[24];let d;return e[25]!==x||e[26]!==s||e[27]!==n?(d=h.jsx(P,{title:j["service-management-framework"],description:`The chart below shows which NRENs operate a formal service management framework 
-            for all of their services. NRENs which have never answered this question cannot be selected.`,category:_.Policy,filter:x,data:s,filename:"service_management_framework",children:n}),e[25]=x,e[26]=s,e[27]=n,e[28]=d):d=e[28],d}export{B as default};
diff --git a/compendium_v2/static/ServiceManagementFramework-DWirH02M.js b/compendium_v2/static/ServiceManagementFramework-DWirH02M.js
new file mode 100644
index 0000000000000000000000000000000000000000..c7433b57e02bb6f37b939fee30f234b87a572ff3
--- /dev/null
+++ b/compendium_v2/static/ServiceManagementFramework-DWirH02M.js
@@ -0,0 +1,2 @@
+import{c as b,r as F,F as S,j as h,t as j,S as _}from"./index-DunMf8wQ.js";import{u as y,g as E,D as P,F as C,f as D}from"./useData-DvdT9bkc.js";import{P as R}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function B(){const e=b.c(29),{filterSelection:t,setFilterSelection:c}=F.useContext(S),{data:v,years:N,nrens:w}=y("/api/service-management",c);let s,m;if(e[0]!==v||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=k=>t.selectedYears.includes(k.year)&&t.selectedNrens.includes(k.nren)&&k.service_management_framework!==null,e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],s=v.filter(u),m=E(s,"service_management_framework"),e[0]=v,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=m}else s=e[3],m=e[4];const g=m;let r,f;e[8]===Symbol.for("react.memo_cache_sentinel")?(r=["Yes","No"],f=new Map([[r[0],"True"],[r[1],"False"]]),e[8]=r,e[9]=f):(r=e[8],f=e[9]);const Y=f;let a;e[10]!==N?(a=[...N],e[10]=N,e[11]=a):a=e[11];let l;e[12]!==w?(l=w.values(),e[12]=w,e[13]=l):l=e[13];let i;e[14]!==l?(i=[...l],e[14]=l,e[15]=i):i=e[15];let o;e[16]!==a||e[17]!==i?(o={availableYears:a,availableNrens:i},e[16]=a,e[17]=i,e[18]=o):o=e[18];let p;e[19]!==t||e[20]!==c||e[21]!==o?(p=h.jsx(C,{filterOptions:o,filterSelection:t,setFilterSelection:c,coloredYears:!0}),e[19]=t,e[20]=c,e[21]=o,e[22]=p):p=e[22];const x=p;let n;e[23]!==g?(n=h.jsx(D,{children:h.jsx(R,{columns:r,columnLookup:Y,dataLookup:g})}),e[23]=g,e[24]=n):n=e[24];let d;return e[25]!==x||e[26]!==s||e[27]!==n?(d=h.jsx(P,{title:j["service-management-framework"],description:`The chart below shows which NRENs operate a formal service management framework 
+            for all of their services. NRENs which have never answered this question cannot be selected.`,category:_.Policy,filter:x,data:s,filename:"service_management_framework",children:n}),e[25]=x,e[26]=s,e[27]=n,e[28]=d):d=e[28],d}export{B as default};
diff --git a/compendium_v2/static/Services-kzZ5IOvA.js b/compendium_v2/static/Services-wGbaoPrz.js
similarity index 86%
rename from compendium_v2/static/Services-kzZ5IOvA.js
rename to compendium_v2/static/Services-wGbaoPrz.js
index 1a7723e878670fb3487a66f6c840eb57cfe76a3b..c0562113e5532fc3d12966fb8da468331a1eb89b 100644
--- a/compendium_v2/static/Services-kzZ5IOvA.js
+++ b/compendium_v2/static/Services-wGbaoPrz.js
@@ -1,4 +1,4 @@
-import{_ as se,c as U,j as s,r as ie,F as re,a0 as g,S as ae,t as N}from"./index.js";import{u as oe,g as le,F as ce,D as ne,f as de}from"./useData-CxftshCa.js";import{T as me}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";function Q(v){return se({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"m10 15.586-3.293-3.293-1.414 1.414L10 18.414l9.707-9.707-1.414-1.414z"},child:[]}]})(v)}function pe(v){const e=U.c(9),{year:i,active:t,serviceInfo:l,tickServiceIndex:u,current:a}=v;let r="No additional information available";if(l!==void 0){const x=l.service_name;let n=l.product_name,d=l.official_description,m=l.additional_information;(n!=""||d!=""||m!="")&&(n=n||"N/A",d=d||"N/A",m=m||"N/A",r=x+`
+import{_ as se,c as U,j as s,r as ie,F as re,a0 as g,S as ae,t as N}from"./index-DunMf8wQ.js";import{u as oe,g as le,F as ce,D as ne,f as de}from"./useData-DvdT9bkc.js";import{T as me}from"./Table-BUrPWwZB.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";function Q(v){return se({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"m10 15.586-3.293-3.293-1.414 1.414L10 18.414l9.707-9.707-1.414-1.414z"},child:[]}]})(v)}function pe(v){const e=U.c(9),{year:i,active:t,serviceInfo:l,tickServiceIndex:u,current:a}=v;let r="No additional information available";if(l!==void 0){const x=l.service_name;let n=l.product_name,d=l.official_description,m=l.additional_information;(n!=""||d!=""||m!="")&&(n=n||"N/A",d=d||"N/A",m=m||"N/A",r=x+`
 `+n+`
 
 Description: `+d+`
diff --git a/compendium_v2/static/ServicesOffered-BnmNlrgs.js b/compendium_v2/static/ServicesOffered-BnmNlrgs.js
deleted file mode 100644
index 1c3803e2a36a4dc2c3ec7981326f99cc421d646b..0000000000000000000000000000000000000000
--- a/compendium_v2/static/ServicesOffered-BnmNlrgs.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as b,r as w,F as j,j as c,t as k,S as C,U as E}from"./index.js";import{u as Y,r as F,D as I,F as P,f as R}from"./useData-CxftshCa.js";import{S as D}from"./ScrollableMatrix-Dxr22l4i.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";function z(){const e=b.c(29),{filterSelection:t,setFilterSelection:n}=w.useContext(j),{data:h,years:g,nrens:v}=Y("/api/services-offered",n);let s,f;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==h){let y;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(y=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=y):y=e[7],s=h.filter(y),f=F(s,["service_category"],"user_category"),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=h,e[3]=s,e[4]=f}else s=e[3],f=e[4];const x=f;let r;e[8]!==g?(r=[...g],e[8]=g,e[9]=r):r=e[9];let i;e[10]!==v?(i=v.values(),e[10]=v,e[11]=i):i=e[11];let o;e[12]!==i?(o=[...i],e[12]=i,e[13]=o):o=e[13];let a;e[14]!==r||e[15]!==o?(a={availableYears:r,availableNrens:o},e[14]=r,e[15]=o,e[16]=a):a=e[16];let d;e[17]!==t||e[18]!==n||e[19]!==a?(d=c.jsx(P,{filterOptions:a,filterSelection:t,setFilterSelection:n}),e[17]=t,e[18]=n,e[19]=a,e[20]=d):d=e[20];const N=d;let p;e[21]===Symbol.for("react.memo_cache_sentinel")?(p={"Identity/T&I":"identity",Multimedia:"multimedia","Professional services":"professional_services","Network services":"network_services",Collaboration:"collaboration",Security:"security","Storage and Hosting":"storage_and_hosting","ISP support":"isp_support"},e[21]=p):p=e[21];const _=p;let u;e[22]===Symbol.for("react.memo_cache_sentinel")?(u=c.jsx("span",{children:"The table below shows the different types of users served by NRENs. Selecting the institution type will expand the detail to show the categories of services offered by NRENs, with a tick indicating that the NREN offers a specific category of service to the type of user."}),e[22]=u):u=e[22];let l;e[23]!==x?(l=c.jsx(R,{children:c.jsx(D,{dataLookup:x,rowInfo:_,categoryLookup:E,isTickIcon:!0})}),e[23]=x,e[24]=l):l=e[24];let m;return e[25]!==N||e[26]!==s||e[27]!==l?(m=c.jsx(I,{title:k["services-offered"],description:u,category:C.Policy,filter:N,data:s,filename:"nren_services_offered",children:l}),e[25]=N,e[26]=s,e[27]=l,e[28]=m):m=e[28],m}export{z as default};
diff --git a/compendium_v2/static/ServicesOffered-C6oTnjq_.js b/compendium_v2/static/ServicesOffered-C6oTnjq_.js
new file mode 100644
index 0000000000000000000000000000000000000000..16e0e8eb714902d60e3264c8888c302a9dc745af
--- /dev/null
+++ b/compendium_v2/static/ServicesOffered-C6oTnjq_.js
@@ -0,0 +1 @@
+import{c as b,r as w,F as j,j as c,t as k,S as C,U as E}from"./index-DunMf8wQ.js";import{u as Y,r as F,D as I,F as P,f as R}from"./useData-DvdT9bkc.js";import{S as D}from"./ScrollableMatrix-D6caiSg1.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";function z(){const e=b.c(29),{filterSelection:t,setFilterSelection:n}=w.useContext(j),{data:h,years:g,nrens:v}=Y("/api/services-offered",n);let s,f;if(e[0]!==t.selectedNrens||e[1]!==t.selectedYears||e[2]!==h){let y;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(y=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=y):y=e[7],s=h.filter(y),f=F(s,["service_category"],"user_category"),e[0]=t.selectedNrens,e[1]=t.selectedYears,e[2]=h,e[3]=s,e[4]=f}else s=e[3],f=e[4];const x=f;let r;e[8]!==g?(r=[...g],e[8]=g,e[9]=r):r=e[9];let i;e[10]!==v?(i=v.values(),e[10]=v,e[11]=i):i=e[11];let o;e[12]!==i?(o=[...i],e[12]=i,e[13]=o):o=e[13];let a;e[14]!==r||e[15]!==o?(a={availableYears:r,availableNrens:o},e[14]=r,e[15]=o,e[16]=a):a=e[16];let d;e[17]!==t||e[18]!==n||e[19]!==a?(d=c.jsx(P,{filterOptions:a,filterSelection:t,setFilterSelection:n}),e[17]=t,e[18]=n,e[19]=a,e[20]=d):d=e[20];const N=d;let p;e[21]===Symbol.for("react.memo_cache_sentinel")?(p={"Identity/T&I":"identity",Multimedia:"multimedia","Professional services":"professional_services","Network services":"network_services",Collaboration:"collaboration",Security:"security","Storage and Hosting":"storage_and_hosting","ISP support":"isp_support"},e[21]=p):p=e[21];const _=p;let u;e[22]===Symbol.for("react.memo_cache_sentinel")?(u=c.jsx("span",{children:"The table below shows the different types of users served by NRENs. Selecting the institution type will expand the detail to show the categories of services offered by NRENs, with a tick indicating that the NREN offers a specific category of service to the type of user."}),e[22]=u):u=e[22];let l;e[23]!==x?(l=c.jsx(R,{children:c.jsx(D,{dataLookup:x,rowInfo:_,categoryLookup:E,isTickIcon:!0})}),e[23]=x,e[24]=l):l=e[24];let m;return e[25]!==N||e[26]!==s||e[27]!==l?(m=c.jsx(I,{title:k["services-offered"],description:u,category:C.Policy,filter:N,data:s,filename:"nren_services_offered",children:l}),e[25]=N,e[26]=s,e[27]=l,e[28]=m):m=e[28],m}export{z as default};
diff --git a/compendium_v2/static/SideBar-CkoMfgfL.js b/compendium_v2/static/SideBar-CkoMfgfL.js
deleted file mode 100644
index cc62725bd772885cf691133066a01b6996db9eb1..0000000000000000000000000000000000000000
--- a/compendium_v2/static/SideBar-CkoMfgfL.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as N,r as y,j as t,Y as S,Z as k}from"./index.js";const _=E=>{const e=N.c(23),{children:x,survey:m}=E,[s,b]=y.useState(!1);let d;e[0]!==s?(d=a=>{a.stopPropagation(),a.preventDefault(),b(!s)},e[0]=s,e[1]=d):d=e[1];const l=d;let f;e[2]===Symbol.for("react.memo_cache_sentinel")?(f=a=>{a.target.closest("#sidebar")||a.target.closest(".toggle-btn")||b(!1)},e[2]=f):f=e[2];const j=f;let p;e[3]===Symbol.for("react.memo_cache_sentinel")?(p=()=>(document.addEventListener("click",j),()=>{document.removeEventListener("click",j)}),e[3]=p):p=e[3],y.useEffect(p);let i;e[4]!==s||e[5]!==m?(i=[],s||i.push("no-sidebar"),m&&i.push("survey"),e[4]=s,e[5]=m,e[6]=i):i=e[6];const g=i.join(" ");let o;e[7]!==x?(o=t.jsx("div",{className:"menu-items",children:x}),e[7]=x,e[8]=o):o=e[8];let c;e[9]!==g||e[10]!==o?(c=t.jsx("nav",{className:g,id:"sidebar",children:o}),e[9]=g,e[10]=o,e[11]=c):c=e[11];const v=`toggle-btn${m?"-survey":""}`;let u;e[12]===Symbol.for("react.memo_cache_sentinel")?(u=t.jsx("span",{children:"MENU"}),e[12]=u):u=e[12];let n;e[13]!==s||e[14]!==l?(n=t.jsxs("div",{className:"toggle-btn-wrapper",children:[u," ",s?t.jsx(S,{style:{color:"white",paddingBottom:"3px",scale:"1.3"},onClick:l}):t.jsx(k,{style:{color:"white",paddingBottom:"3px",scale:"1.3"},onClick:l})]}),e[13]=s,e[14]=l,e[15]=n):n=e[15];let r;e[16]!==v||e[17]!==n||e[18]!==l?(r=t.jsx("div",{className:v,onClick:l,children:n}),e[16]=v,e[17]=n,e[18]=l,e[19]=r):r=e[19];let h;return e[20]!==r||e[21]!==c?(h=t.jsxs("div",{className:"sidebar-wrapper",children:[c,r]}),e[20]=r,e[21]=c,e[22]=h):h=e[22],h};export{_ as S};
diff --git a/compendium_v2/static/SideBar-DC9SKCkF.js b/compendium_v2/static/SideBar-DC9SKCkF.js
new file mode 100644
index 0000000000000000000000000000000000000000..13e023456d2baa503dd5f86054ee8b2fe8d6b6ff
--- /dev/null
+++ b/compendium_v2/static/SideBar-DC9SKCkF.js
@@ -0,0 +1 @@
+import{c as N,r as y,j as t,Y as S,Z as k}from"./index-DunMf8wQ.js";const _=E=>{const e=N.c(23),{children:x,survey:m}=E,[s,b]=y.useState(!1);let d;e[0]!==s?(d=a=>{a.stopPropagation(),a.preventDefault(),b(!s)},e[0]=s,e[1]=d):d=e[1];const l=d;let f;e[2]===Symbol.for("react.memo_cache_sentinel")?(f=a=>{a.target.closest("#sidebar")||a.target.closest(".toggle-btn")||b(!1)},e[2]=f):f=e[2];const j=f;let p;e[3]===Symbol.for("react.memo_cache_sentinel")?(p=()=>(document.addEventListener("click",j),()=>{document.removeEventListener("click",j)}),e[3]=p):p=e[3],y.useEffect(p);let i;e[4]!==s||e[5]!==m?(i=[],s||i.push("no-sidebar"),m&&i.push("survey"),e[4]=s,e[5]=m,e[6]=i):i=e[6];const g=i.join(" ");let o;e[7]!==x?(o=t.jsx("div",{className:"menu-items",children:x}),e[7]=x,e[8]=o):o=e[8];let c;e[9]!==g||e[10]!==o?(c=t.jsx("nav",{className:g,id:"sidebar",children:o}),e[9]=g,e[10]=o,e[11]=c):c=e[11];const v=`toggle-btn${m?"-survey":""}`;let u;e[12]===Symbol.for("react.memo_cache_sentinel")?(u=t.jsx("span",{children:"MENU"}),e[12]=u):u=e[12];let n;e[13]!==s||e[14]!==l?(n=t.jsxs("div",{className:"toggle-btn-wrapper",children:[u," ",s?t.jsx(S,{style:{color:"white",paddingBottom:"3px",scale:"1.3"},onClick:l}):t.jsx(k,{style:{color:"white",paddingBottom:"3px",scale:"1.3"},onClick:l})]}),e[13]=s,e[14]=l,e[15]=n):n=e[15];let r;e[16]!==v||e[17]!==n||e[18]!==l?(r=t.jsx("div",{className:v,onClick:l,children:n}),e[16]=v,e[17]=n,e[18]=l,e[19]=r):r=e[19];let h;return e[20]!==r||e[21]!==c?(h=t.jsxs("div",{className:"sidebar-wrapper",children:[c,r]}),e[20]=r,e[21]=c,e[22]=h):h=e[22],h};export{_ as S};
diff --git a/compendium_v2/static/SiemVendors-W4GM3C-U.js b/compendium_v2/static/SiemVendors-W4GM3C-U.js
new file mode 100644
index 0000000000000000000000000000000000000000..1963b1785e00a06a7c6ca918ec6b162368833bb9
--- /dev/null
+++ b/compendium_v2/static/SiemVendors-W4GM3C-U.js
@@ -0,0 +1 @@
+import{c as Y,r as j,F as E,j as u,t as _,S as g}from"./index-DunMf8wQ.js";import{u as k,g as C,D as F,F as D,f as P}from"./useData-DvdT9bkc.js";import{P as R}from"./PillTable-DEX_WeNY.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./ColorPill-CXsYrUiQ.js";import"./Table-BUrPWwZB.js";function $(){const e=Y.c(28),{filterSelection:t,setFilterSelection:n}=j.useContext(E),{data:x,years:N,nrens:S}=k("/api/siem-vendors",n);let s,c;if(e[0]!==x||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let p;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(p=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=p):p=e[7],s=x.filter(p),c=C(s,"vendor_names"),e[0]=x,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=c}else s=e[3],c=e[4];const b=c;let r;e[8]!==N?(r=[...N],e[8]=N,e[9]=r):r=e[9];let l;e[10]!==S?(l=S.values(),e[10]=S,e[11]=l):l=e[11];let a;e[12]!==l?(a=[...l],e[12]=l,e[13]=a):a=e[13];let i;e[14]!==r||e[15]!==a?(i={availableYears:r,availableNrens:a},e[14]=r,e[15]=a,e[16]=i):i=e[16];let d;e[17]!==t||e[18]!==n||e[19]!==i?(d=u.jsx(D,{filterOptions:i,filterSelection:t,setFilterSelection:n,coloredYears:!0}),e[17]=t,e[18]=n,e[19]=i,e[20]=d):d=e[20];const h=d;let m;e[21]===Symbol.for("react.memo_cache_sentinel")?(m=["Splunk","IBM Qradar","Exabeam","LogRythm","Securonix"],e[21]=m):m=e[21];const y=m;let o;e[22]!==b?(o=u.jsx(P,{children:u.jsx(R,{columns:y,dataLookup:b,circle:!0})}),e[22]=b,e[23]=o):o=e[23];let f;return e[24]!==h||e[25]!==s||e[26]!==o?(f=u.jsx(F,{title:_["siem-vendors"],description:"The table below shows the kinds of vendors of SIEM/SOC systems used by NRENs.",category:g.Network,filter:h,data:s,filename:"siem_vendor_nrens_per_year",children:o}),e[24]=h,e[25]=s,e[26]=o,e[27]=f):f=e[27],f}export{$ as default};
diff --git a/compendium_v2/static/SiemVendors-pjqFJlX2.js b/compendium_v2/static/SiemVendors-pjqFJlX2.js
deleted file mode 100644
index 58029631393fe1800970d454b237d01277abed5a..0000000000000000000000000000000000000000
--- a/compendium_v2/static/SiemVendors-pjqFJlX2.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as Y,r as j,F as E,j as u,t as _,S as g}from"./index.js";import{u as k,g as C,D as F,F as D,f as P}from"./useData-CxftshCa.js";import{P as R}from"./PillTable-Cnj0nnFy.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./ColorPill-CXvWIfWz.js";import"./Table-ClWM2_rS.js";function $(){const e=Y.c(28),{filterSelection:t,setFilterSelection:n}=j.useContext(E),{data:x,years:N,nrens:S}=k("/api/siem-vendors",n);let s,c;if(e[0]!==x||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let p;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(p=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=p):p=e[7],s=x.filter(p),c=C(s,"vendor_names"),e[0]=x,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=s,e[4]=c}else s=e[3],c=e[4];const b=c;let r;e[8]!==N?(r=[...N],e[8]=N,e[9]=r):r=e[9];let l;e[10]!==S?(l=S.values(),e[10]=S,e[11]=l):l=e[11];let a;e[12]!==l?(a=[...l],e[12]=l,e[13]=a):a=e[13];let i;e[14]!==r||e[15]!==a?(i={availableYears:r,availableNrens:a},e[14]=r,e[15]=a,e[16]=i):i=e[16];let d;e[17]!==t||e[18]!==n||e[19]!==i?(d=u.jsx(D,{filterOptions:i,filterSelection:t,setFilterSelection:n,coloredYears:!0}),e[17]=t,e[18]=n,e[19]=i,e[20]=d):d=e[20];const h=d;let m;e[21]===Symbol.for("react.memo_cache_sentinel")?(m=["Splunk","IBM Qradar","Exabeam","LogRythm","Securonix"],e[21]=m):m=e[21];const y=m;let o;e[22]!==b?(o=u.jsx(P,{children:u.jsx(R,{columns:y,dataLookup:b,circle:!0})}),e[22]=b,e[23]=o):o=e[23];let f;return e[24]!==h||e[25]!==s||e[26]!==o?(f=u.jsx(F,{title:_["siem-vendors"],description:"The table below shows the kinds of vendors of SIEM/SOC systems used by NRENs.",category:g.Network,filter:h,data:s,filename:"siem_vendor_nrens_per_year",children:o}),e[24]=h,e[25]=s,e[26]=o,e[27]=f):f=e[27],f}export{$ as default};
diff --git a/compendium_v2/static/StaffGraph-D3mBN476.js b/compendium_v2/static/StaffGraph-D3mBN476.js
deleted file mode 100644
index fe78258908f88b7133fb3ee93637eebab5cc83d3..0000000000000000000000000000000000000000
--- a/compendium_v2/static/StaffGraph-D3mBN476.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import{c as $,r as B,F as A,j as x,S as M,t as R}from"./index.js";import{B as P}from"./index-CjWPDfDC.js";import{C as g,a as q,L as W,B as G,p as V,c as z,d as H,u as J,l as K,D as Q,F as U}from"./useData-CxftshCa.js";import{h as X,W as Z}from"./HTMLLegendPlugin-C-L3dIU1.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";g.register(q,W,G,V,z,H);const I={maintainAspectRatio:!1,animation:{duration:0},plugins:{htmlLegend:{containerIDs:["legendtop","legendbottom"]},legend:{display:!1},tooltip:{callbacks:{label:function(t){let e=t.dataset.label||"";return t.parsed.x!==null&&(e+=`: ${t.parsed.x}%`),e}}}},scales:{x:{position:"top",stacked:!0,ticks:{callback:(t,e)=>`${e*10}%`}},x2:{ticks:{callback:t=>typeof t=="number"?`${t}%`:t},grid:{drawOnChartArea:!1},afterDataLimits:function(t){const e=Object.keys(g.instances);let r=-999999,s=999999;for(const n of e)g.instances[n]&&t.chart.scales.x2&&(s=Math.min(g.instances[n].scales.x.min,s),r=Math.max(g.instances[n].scales.x.max,r));t.chart.scales.x2.options.min=s,t.chart.scales.x2.options.max=r,t.chart.scales.x2.min=s,t.chart.scales.x2.max=r}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"};function ce(t){const e=$.c(39),{roles:r}=t,s=r===void 0?!1:r;let n;e[0]!==s?(n=function(i){return s&&i.technical_fte>0&&i.non_technical_fte>0||!s&&i.permanent_fte>0&&i.subcontracted_fte>0},e[0]=s,e[1]=n):n=e[1];const Y=n,{filterSelection:a,setFilterSelection:y}=B.useContext(A),{data:k,years:S,nrens:w}=J("/api/staff",y,Y);let l,b;if(e[2]!==k||e[3]!==a.selectedNrens||e[4]!==a.selectedYears||e[5]!==s){let u;e[8]!==a.selectedNrens||e[9]!==a.selectedYears?(u=i=>a.selectedYears.includes(i.year)&&a.selectedNrens.includes(i.nren),e[8]=a.selectedNrens,e[9]=a.selectedYears,e[10]=u):u=e[10],l=k.filter(u),b=K(l,s,a.selectedYears[0]),e[2]=k,e[3]=a.selectedNrens,e[4]=a.selectedYears,e[5]=s,e[6]=l,e[7]=b}else l=e[6],b=e[7];const F=b;let c;e[11]!==S?(c=[...S],e[11]=S,e[12]=c):c=e[12];let o;e[13]!==w?(o=w.values(),e[13]=w,e[14]=o):o=e[14];let f;e[15]!==o?(f=[...o],e[15]=o,e[16]=f):f=e[16];let d;e[17]!==c||e[18]!==f?(d={availableYears:c,availableNrens:f},e[17]=c,e[18]=f,e[19]=d):d=e[19];let N;e[20]!==a||e[21]!==y||e[22]!==d?(N=x.jsx(U,{max1year:!0,filterOptions:d,filterSelection:a,setFilterSelection:y}),e[20]=a,e[21]=y,e[22]=d,e[23]=N):N=e[23];const T=N,L=l.length,O=Math.max(L*1.5,20),v=s?R.roles:R.employment,C=s?`The graph shows division of staff FTEs (Full Time Equivalents) between technical and non-techical role per NREN.
-        The exact figures of how many FTEs are dedicated to these two different functional areas can be accessed by downloading the data in either CSV or Excel format`:`The graph shows the percentage of NREN staff who are permanent, and those who are subcontracted.
-        The structures and models of NRENs differ across the community, which is reflected in the types of employment offered.
-        The NRENs are asked to provide the Full Time Equivalents (FTEs) rather absolute numbers of staff.`,j=s?"roles_of_nren_employees":"types_of_employment_for_nrens",D=`${O}rem`;let m;e[24]!==D?(m={height:D},e[24]=D,e[25]=m):m=e[25];let _;e[26]===Symbol.for("react.memo_cache_sentinel")?(_=[X],e[26]=_):_=e[26];let h;e[27]!==F?(h=x.jsx(P,{data:F,options:I,plugins:_}),e[27]=F,e[28]=h):h=e[28];let p;e[29]!==m||e[30]!==h?(p=x.jsx(Z,{children:x.jsx("div",{className:"chart-container",style:m,children:h})}),e[29]=m,e[30]=h,e[31]=p):p=e[31];let E;return e[32]!==C||e[33]!==j||e[34]!==T||e[35]!==l||e[36]!==p||e[37]!==v?(E=x.jsx(Q,{title:v,description:C,category:M.Organisation,filter:T,data:l,filename:j,children:p}),e[32]=C,e[33]=j,e[34]=T,e[35]=l,e[36]=p,e[37]=v,e[38]=E):E=e[38],E}export{ce as default};
diff --git a/compendium_v2/static/StaffGraph-nuZcRAf1.js b/compendium_v2/static/StaffGraph-nuZcRAf1.js
new file mode 100644
index 0000000000000000000000000000000000000000..f1da33e246902cd7f4304c81e708cbf716a44748
--- /dev/null
+++ b/compendium_v2/static/StaffGraph-nuZcRAf1.js
@@ -0,0 +1,4 @@
+import{c as $,r as B,F as A,j as x,S as M,t as R}from"./index-DunMf8wQ.js";import{B as P}from"./index-C2DQFzVc.js";import{C as g,a as q,L as W,B as G,p as V,c as z,d as H,u as J,l as K,D as Q,F as U}from"./useData-DvdT9bkc.js";import{h as X,W as Z}from"./HTMLLegendPlugin-DF0OaxMQ.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";g.register(q,W,G,V,z,H);const I={maintainAspectRatio:!1,animation:{duration:0},plugins:{htmlLegend:{containerIDs:["legendtop","legendbottom"]},legend:{display:!1},tooltip:{callbacks:{label:function(t){let e=t.dataset.label||"";return t.parsed.x!==null&&(e+=`: ${t.parsed.x}%`),e}}}},scales:{x:{position:"top",stacked:!0,ticks:{callback:(t,e)=>`${e*10}%`}},x2:{ticks:{callback:t=>typeof t=="number"?`${t}%`:t},grid:{drawOnChartArea:!1},afterDataLimits:function(t){const e=Object.keys(g.instances);let r=-999999,s=999999;for(const n of e)g.instances[n]&&t.chart.scales.x2&&(s=Math.min(g.instances[n].scales.x.min,s),r=Math.max(g.instances[n].scales.x.max,r));t.chart.scales.x2.options.min=s,t.chart.scales.x2.options.max=r,t.chart.scales.x2.min=s,t.chart.scales.x2.max=r}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"};function ce(t){const e=$.c(39),{roles:r}=t,s=r===void 0?!1:r;let n;e[0]!==s?(n=function(i){return s&&i.technical_fte>0&&i.non_technical_fte>0||!s&&i.permanent_fte>0&&i.subcontracted_fte>0},e[0]=s,e[1]=n):n=e[1];const Y=n,{filterSelection:a,setFilterSelection:y}=B.useContext(A),{data:k,years:S,nrens:w}=J("/api/staff",y,Y);let l,b;if(e[2]!==k||e[3]!==a.selectedNrens||e[4]!==a.selectedYears||e[5]!==s){let u;e[8]!==a.selectedNrens||e[9]!==a.selectedYears?(u=i=>a.selectedYears.includes(i.year)&&a.selectedNrens.includes(i.nren),e[8]=a.selectedNrens,e[9]=a.selectedYears,e[10]=u):u=e[10],l=k.filter(u),b=K(l,s,a.selectedYears[0]),e[2]=k,e[3]=a.selectedNrens,e[4]=a.selectedYears,e[5]=s,e[6]=l,e[7]=b}else l=e[6],b=e[7];const F=b;let c;e[11]!==S?(c=[...S],e[11]=S,e[12]=c):c=e[12];let o;e[13]!==w?(o=w.values(),e[13]=w,e[14]=o):o=e[14];let f;e[15]!==o?(f=[...o],e[15]=o,e[16]=f):f=e[16];let d;e[17]!==c||e[18]!==f?(d={availableYears:c,availableNrens:f},e[17]=c,e[18]=f,e[19]=d):d=e[19];let N;e[20]!==a||e[21]!==y||e[22]!==d?(N=x.jsx(U,{max1year:!0,filterOptions:d,filterSelection:a,setFilterSelection:y}),e[20]=a,e[21]=y,e[22]=d,e[23]=N):N=e[23];const T=N,L=l.length,O=Math.max(L*1.5,20),v=s?R.roles:R.employment,C=s?`The graph shows division of staff FTEs (Full Time Equivalents) between technical and non-techical role per NREN.
+        The exact figures of how many FTEs are dedicated to these two different functional areas can be accessed by downloading the data in either CSV or Excel format`:`The graph shows the percentage of NREN staff who are permanent, and those who are subcontracted.
+        The structures and models of NRENs differ across the community, which is reflected in the types of employment offered.
+        The NRENs are asked to provide the Full Time Equivalents (FTEs) rather absolute numbers of staff.`,j=s?"roles_of_nren_employees":"types_of_employment_for_nrens",D=`${O}rem`;let m;e[24]!==D?(m={height:D},e[24]=D,e[25]=m):m=e[25];let _;e[26]===Symbol.for("react.memo_cache_sentinel")?(_=[X],e[26]=_):_=e[26];let h;e[27]!==F?(h=x.jsx(P,{data:F,options:I,plugins:_}),e[27]=F,e[28]=h):h=e[28];let p;e[29]!==m||e[30]!==h?(p=x.jsx(Z,{children:x.jsx("div",{className:"chart-container",style:m,children:h})}),e[29]=m,e[30]=h,e[31]=p):p=e[31];let E;return e[32]!==C||e[33]!==j||e[34]!==T||e[35]!==l||e[36]!==p||e[37]!==v?(E=x.jsx(Q,{title:v,description:C,category:M.Organisation,filter:T,data:l,filename:j,children:p}),e[32]=C,e[33]=j,e[34]=T,e[35]=l,e[36]=p,e[37]=v,e[38]=E):E=e[38],E}export{ce as default};
diff --git a/compendium_v2/static/StaffGraphAbsolute-B_KY3Vzc.js b/compendium_v2/static/StaffGraphAbsolute-B_KY3Vzc.js
new file mode 100644
index 0000000000000000000000000000000000000000..729aba419c53d6389c5d6932a142231bda7f7dfb
--- /dev/null
+++ b/compendium_v2/static/StaffGraphAbsolute-B_KY3Vzc.js
@@ -0,0 +1 @@
+import{c as D,r as Y,F as B,j as d,S as T,t as P}from"./index-DunMf8wQ.js";import{B as A}from"./index-C2DQFzVc.js";import{C as O,a as q,L,B as $,p as k,c as G,d as M,u as W,m as z,D as H,F as I,f as J}from"./useData-DvdT9bkc.js";import{p as K}from"./chartjs-plugin-datalabels.esm-Bb0FwIXw.js";import{a as Q}from"./charthelpers-vHYh9qxV.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";O.register(q,L,$,k,G,M);function re(){const e=D.c(38),{filterSelection:t,setFilterSelection:a}=Y.useContext(B),{data:b,years:p,nrens:u}=W("/api/staff",a);let i,n,s,g;if(e[0]!==b||e[1]!==t||e[2]!==u||e[3]!==a||e[4]!==p){let E;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(E=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=E):E=e[11],s=b.filter(E),n=z(s,t.selectedYears);let c;e[12]!==p?(c=[...p],e[12]=p,e[13]=c):c=e[13];let f;e[14]!==u?(f=u.values(),e[14]=u,e[15]=f):f=e[15];let m;e[16]!==f?(m=[...f],e[16]=f,e[17]=m):m=e[17];let h;e[18]!==c||e[19]!==m?(h={availableYears:c,availableNrens:m},e[18]=c,e[19]=m,e[20]=h):h=e[20];let S;e[21]!==t||e[22]!==a||e[23]!==h?(S=d.jsx(I,{filterOptions:h,filterSelection:t,setFilterSelection:a}),e[21]=t,e[22]=a,e[23]=h,e[24]=S):S=e[24],i=S,g=Array.from(new Set(s.map(U))),e[0]=b,e[1]=t,e[2]=u,e[3]=a,e[4]=p,e[5]=i,e[6]=n,e[7]=s,e[8]=g}else i=e[5],n=e[6],s=e[7],g=e[8];const R=g.length,w=Math.max(R*t.selectedYears.length*1.5+5,50),C=P["employee-count"],F='The graph shows the total number of employees (in FTEs) at each NREN. When filling in the survey, NRENs are asked about the number of staff engaged (whether permanent or subcontracted) in NREN activities. Please note that diversity within the NREN community means that there is not one single definition of what constitutes "NREN activities". Therefore due to differences in how their organisations are arranged, and the relationship, in some cases, with parent organisations, there can be inconsistencies in how NRENs approach this question.';let N;e[25]===Symbol.for("react.memo_cache_sentinel")?(N=Q({tooltipPrefix:"FTEs",title:"Full-Time Equivalents"}),e[25]=N):N=e[25];const j=N,_=`${w}rem`;let r;e[26]!==_?(r={height:_},e[26]=_,e[27]=r):r=e[27];let x;e[28]===Symbol.for("react.memo_cache_sentinel")?(x=[K],e[28]=x):x=e[28];let l;e[29]!==n?(l=d.jsx(A,{data:n,options:j,plugins:x}),e[29]=n,e[30]=l):l=e[30];let o;e[31]!==r||e[32]!==l?(o=d.jsx(J,{children:d.jsx("div",{className:"chart-container",style:r,children:l})}),e[31]=r,e[32]=l,e[33]=o):o=e[33];let y;return e[34]!==i||e[35]!==s||e[36]!==o?(y=d.jsx(H,{title:C,description:F,category:T.Organisation,filter:i,data:s,filename:"number_of_nren_employees",children:o}),e[34]=i,e[35]=s,e[36]=o,e[37]=y):y=e[37],y}function U(e){return e.nren}export{re as default};
diff --git a/compendium_v2/static/StaffGraphAbsolute-I7Y3C-nj.js b/compendium_v2/static/StaffGraphAbsolute-I7Y3C-nj.js
deleted file mode 100644
index 86358ecc82c8beb3e761bc1f8cbf9a0eb5a14cbc..0000000000000000000000000000000000000000
--- a/compendium_v2/static/StaffGraphAbsolute-I7Y3C-nj.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as D,r as Y,F as B,j as d,S as T,t as P}from"./index.js";import{B as A}from"./index-CjWPDfDC.js";import{C as O,a as q,L,B as $,p as k,c as G,d as M,u as W,m as z,D as H,F as I,f as J}from"./useData-CxftshCa.js";import{p as K}from"./chartjs-plugin-datalabels.esm-CjG-nxnq.js";import{a as Q}from"./charthelpers-B0zLHD4s.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";O.register(q,L,$,k,G,M);function re(){const e=D.c(38),{filterSelection:t,setFilterSelection:a}=Y.useContext(B),{data:b,years:p,nrens:u}=W("/api/staff",a);let i,n,s,g;if(e[0]!==b||e[1]!==t||e[2]!==u||e[3]!==a||e[4]!==p){let E;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(E=v=>t.selectedYears.includes(v.year)&&t.selectedNrens.includes(v.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=E):E=e[11],s=b.filter(E),n=z(s,t.selectedYears);let c;e[12]!==p?(c=[...p],e[12]=p,e[13]=c):c=e[13];let f;e[14]!==u?(f=u.values(),e[14]=u,e[15]=f):f=e[15];let m;e[16]!==f?(m=[...f],e[16]=f,e[17]=m):m=e[17];let h;e[18]!==c||e[19]!==m?(h={availableYears:c,availableNrens:m},e[18]=c,e[19]=m,e[20]=h):h=e[20];let S;e[21]!==t||e[22]!==a||e[23]!==h?(S=d.jsx(I,{filterOptions:h,filterSelection:t,setFilterSelection:a}),e[21]=t,e[22]=a,e[23]=h,e[24]=S):S=e[24],i=S,g=Array.from(new Set(s.map(U))),e[0]=b,e[1]=t,e[2]=u,e[3]=a,e[4]=p,e[5]=i,e[6]=n,e[7]=s,e[8]=g}else i=e[5],n=e[6],s=e[7],g=e[8];const R=g.length,w=Math.max(R*t.selectedYears.length*1.5+5,50),C=P["employee-count"],F='The graph shows the total number of employees (in FTEs) at each NREN. When filling in the survey, NRENs are asked about the number of staff engaged (whether permanent or subcontracted) in NREN activities. Please note that diversity within the NREN community means that there is not one single definition of what constitutes "NREN activities". Therefore due to differences in how their organisations are arranged, and the relationship, in some cases, with parent organisations, there can be inconsistencies in how NRENs approach this question.';let N;e[25]===Symbol.for("react.memo_cache_sentinel")?(N=Q({tooltipPrefix:"FTEs",title:"Full-Time Equivalents"}),e[25]=N):N=e[25];const j=N,_=`${w}rem`;let r;e[26]!==_?(r={height:_},e[26]=_,e[27]=r):r=e[27];let x;e[28]===Symbol.for("react.memo_cache_sentinel")?(x=[K],e[28]=x):x=e[28];let l;e[29]!==n?(l=d.jsx(A,{data:n,options:j,plugins:x}),e[29]=n,e[30]=l):l=e[30];let o;e[31]!==r||e[32]!==l?(o=d.jsx(J,{children:d.jsx("div",{className:"chart-container",style:r,children:l})}),e[31]=r,e[32]=l,e[33]=o):o=e[33];let y;return e[34]!==i||e[35]!==s||e[36]!==o?(y=d.jsx(H,{title:C,description:F,category:T.Organisation,filter:i,data:s,filename:"number_of_nren_employees",children:o}),e[34]=i,e[35]=s,e[36]=o,e[37]=y):y=e[37],y}function U(e){return e.nren}export{re as default};
diff --git a/compendium_v2/static/SubOrganisation-C7B4_RD0.js b/compendium_v2/static/SubOrganisation-C7B4_RD0.js
deleted file mode 100644
index 67428e498c271cde58cfaff75cfa65e44d4ee992..0000000000000000000000000000000000000000
--- a/compendium_v2/static/SubOrganisation-C7B4_RD0.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as Y,r as y,F as C,j as p,t as S,S as j}from"./index.js";import{u as v,h as F,i as E,D as R,F as T,f as O}from"./useData-CxftshCa.js";import{N as P}from"./NrenYearTable-tQrmAmRo.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";function A(){const e=Y.c(27),{filterSelection:t,setFilterSelection:s}=y.useContext(C),{data:r,years:g,nrens:h}=v("/api/sub-organizations",s);let a,d;if(e[0]!==r||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],a=r.filter(u);const D=F(a);d=E(D,$),e[0]=r,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=a,e[4]=d}else a=e[3],d=e[4];const x=d;let n;e[8]!==g?(n=[...g],e[8]=g,e[9]=n):n=e[9];let o;e[10]!==h?(o=h.values(),e[10]=h,e[11]=o):o=e[11];let i;e[12]!==o?(i=[...o],e[12]=o,e[13]=i):i=e[13];let l;e[14]!==n||e[15]!==i?(l={availableYears:n,availableNrens:i},e[14]=n,e[15]=i,e[16]=l):l=e[16];let f;e[17]!==t||e[18]!==s||e[19]!==l?(f=p.jsx(T,{filterOptions:l,filterSelection:t,setFilterSelection:s}),e[17]=t,e[18]=s,e[19]=l,e[20]=f):f=e[20];const N=f;let c;e[21]!==x?(c=p.jsx(O,{children:p.jsx(P,{data:x,columnTitle:"Suborganisation and Role",dottedBorder:!0})}),e[21]=x,e[22]=c):c=e[22];let m;return e[23]!==N||e[24]!==a||e[25]!==c?(m=p.jsx(R,{title:S.suborganisations,description:"NRENs are asked whether they have any sub-organisations, and to give the name and role of these organisations. These organisations can include HPC centres or IDC federations, amongst many others.",category:j.Organisation,filter:N,data:a,filename:"nren_suborganisations",children:c}),e[23]=N,e[24]=a,e[25]=c,e[26]=m):m=e[26],m}function $(e,t){for(const s of t.sort(k)){const r=`${s.name} (${s.role})`;e[r]=r}}function k(e,t){return e.name.localeCompare(t.name)}export{A as default};
diff --git a/compendium_v2/static/SubOrganisation-uqygN7-8.js b/compendium_v2/static/SubOrganisation-uqygN7-8.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f25b085fa771186157f3420208ee600e87b6b6b
--- /dev/null
+++ b/compendium_v2/static/SubOrganisation-uqygN7-8.js
@@ -0,0 +1 @@
+import{c as Y,r as y,F as C,j as p,t as S,S as j}from"./index-DunMf8wQ.js";import{u as v,h as F,i as E,D as R,F as T,f as O}from"./useData-DvdT9bkc.js";import{N as P}from"./NrenYearTable-D3mNeVd3.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";function A(){const e=Y.c(27),{filterSelection:t,setFilterSelection:s}=y.useContext(C),{data:r,years:g,nrens:h}=v("/api/sub-organizations",s);let a,d;if(e[0]!==r||e[1]!==t.selectedNrens||e[2]!==t.selectedYears){let u;e[5]!==t.selectedNrens||e[6]!==t.selectedYears?(u=b=>t.selectedYears.includes(b.year)&&t.selectedNrens.includes(b.nren),e[5]=t.selectedNrens,e[6]=t.selectedYears,e[7]=u):u=e[7],a=r.filter(u);const D=F(a);d=E(D,$),e[0]=r,e[1]=t.selectedNrens,e[2]=t.selectedYears,e[3]=a,e[4]=d}else a=e[3],d=e[4];const x=d;let n;e[8]!==g?(n=[...g],e[8]=g,e[9]=n):n=e[9];let o;e[10]!==h?(o=h.values(),e[10]=h,e[11]=o):o=e[11];let i;e[12]!==o?(i=[...o],e[12]=o,e[13]=i):i=e[13];let l;e[14]!==n||e[15]!==i?(l={availableYears:n,availableNrens:i},e[14]=n,e[15]=i,e[16]=l):l=e[16];let f;e[17]!==t||e[18]!==s||e[19]!==l?(f=p.jsx(T,{filterOptions:l,filterSelection:t,setFilterSelection:s}),e[17]=t,e[18]=s,e[19]=l,e[20]=f):f=e[20];const N=f;let c;e[21]!==x?(c=p.jsx(O,{children:p.jsx(P,{data:x,columnTitle:"Suborganisation and Role",dottedBorder:!0})}),e[21]=x,e[22]=c):c=e[22];let m;return e[23]!==N||e[24]!==a||e[25]!==c?(m=p.jsx(R,{title:S.suborganisations,description:"NRENs are asked whether they have any sub-organisations, and to give the name and role of these organisations. These organisations can include HPC centres or IDC federations, amongst many others.",category:j.Organisation,filter:N,data:a,filename:"nren_suborganisations",children:c}),e[23]=N,e[24]=a,e[25]=c,e[26]=m):m=e[26],m}function $(e,t){for(const s of t.sort(k)){const r=`${s.name} (${s.role})`;e[r]=r}}function k(e,t){return e.name.localeCompare(t.name)}export{A as default};
diff --git a/compendium_v2/static/SurveyContainerComponent-DxT_-mC9.js b/compendium_v2/static/SurveyContainerComponent-TmXjyfKm.js
similarity index 99%
rename from compendium_v2/static/SurveyContainerComponent-DxT_-mC9.js
rename to compendium_v2/static/SurveyContainerComponent-TmXjyfKm.js
index 9fe4326d5ef804e557a2e433d66050b483d56bd6..658345efe3c2315faeb4ae071aa6bdd9498ebdbd 100644
--- a/compendium_v2/static/SurveyContainerComponent-DxT_-mC9.js
+++ b/compendium_v2/static/SurveyContainerComponent-TmXjyfKm.js
@@ -1,4 +1,4 @@
-import{a3 as uo,a4 as lo,c as Re,r as F,j as L,C as co,E as ot,R as fe,a1 as Bn,a5 as po,a6 as ho,Q as fo}from"./index.js";import{D as mo,k as A}from"./index-BGZcCZJE.js";import{r as vo,a as ue}from"./survey.core-D1mOb2z9.js";import{V as we,v as yo,o as go}from"./validation-COFmylEH.js";import{S as Co}from"./SurveySidebar-CG0gwQ6b.js";import"./SideBar-CkoMfgfL.js";var be={exports:{}};/*!
+import{a3 as uo,a4 as lo,c as Re,r as F,j as L,C as co,E as ot,R as fe,a1 as Bn,a5 as po,a6 as ho,Q as fo}from"./index-DunMf8wQ.js";import{D as mo,k as A}from"./index-ClpOPiqG.js";import{r as vo,a as ue}from"./survey.core-D1mOb2z9.js";import{V as we,v as yo,o as go}from"./validation-COFmylEH.js";import{S as Co}from"./SurveySidebar-B89Xtwv2.js";import"./SideBar-DC9SKCkF.js";var be={exports:{}};/*!
  * surveyjs - Survey JavaScript library v1.12.23
  * Copyright (c) 2015-2025 Devsoft Baltic OÜ  - http://surveyjs.io/
  * License: MIT (http://www.opensource.org/licenses/mit-license.php)
diff --git a/compendium_v2/static/SurveyManagementComponent-Br-7fyx2.js b/compendium_v2/static/SurveyManagementComponent-Br-7fyx2.js
new file mode 100644
index 0000000000000000000000000000000000000000..0bbd0c9d61488e85ac0cad63af0abe4e7e2d49e1
--- /dev/null
+++ b/compendium_v2/static/SurveyManagementComponent-Br-7fyx2.js
@@ -0,0 +1,3 @@
+import{r as P,h as K,j as t,i as X,_ as Q,c as G,y,a7 as Y,L as W,E as D,R as Z}from"./index-DunMf8wQ.js";import{A as z,l as ee}from"./lodash-DG7dNfcw.js";import{T as te}from"./Table-BUrPWwZB.js";import{k as m,D as se}from"./index-ClpOPiqG.js";import{v as ne,o as ae,S as o}from"./validation-COFmylEH.js";import{a as A}from"./survey-3meXCY6T.js";import{S as re}from"./SurveySidebar-B89Xtwv2.js";import"./hook-CgOBj93G.js";import"./SideBar-DC9SKCkF.js";const H=P.forwardRef(({bsPrefix:e,variant:n,animation:l="border",size:a,as:i="div",className:c,...d},p)=>{e=K(e,"spinner");const f=`${e}-${l}`;return t.jsx(i,{ref:p,...d,className:X(c,f,a&&`${f}-${a}`,n&&`text-${n}`)})});H.displayName="Spinner";function ie(e){return Q({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm106.5 150.5L228.8 332.8h-.1c-1.7 1.7-6.3 5.5-11.6 5.5-3.8 0-8.1-2.1-11.7-5.7l-56-56c-1.6-1.6-1.6-4.1 0-5.7l17.8-17.8c.8-.8 1.8-1.2 2.8-1.2 1 0 2 .4 2.8 1.2l44.4 44.4 122-122.9c.8-.8 1.8-1.2 2.8-1.2 1.1 0 2.1.4 2.8 1.2l17.5 18.1c1.8 1.7 1.8 4.2.2 5.8z"},child:[]}]})(e)}function oe(e){return Q({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm52.7 283.3L256 278.6l-52.7 52.7c-6.2 6.2-16.4 6.2-22.6 0-3.1-3.1-4.7-7.2-4.7-11.3 0-4.1 1.6-8.2 4.7-11.3l52.7-52.7-52.7-52.7c-3.1-3.1-4.7-7.2-4.7-11.3 0-4.1 1.6-8.2 4.7-11.3 6.2-6.2 16.4-6.2 22.6 0l52.7 52.7 52.7-52.7c6.2-6.2 16.4-6.2 22.6 0 6.2 6.2 6.2 16.4 0 22.6L278.6 256l52.7 52.7c6.2 6.2 6.2 16.4 0 22.6-6.2 6.3-16.4 6.3-22.6 0z"},child:[]}]})(e)}function q(e){const n=G.c(4),{status:l}=e;let a;n[0]===Symbol.for("react.memo_cache_sentinel")?(a=t.jsx(y,{variant:"success",size:"sm",children:t.jsx("strong",{children:"Completed"})}),n[0]=a):a=n[0];let i;n[1]===Symbol.for("react.memo_cache_sentinel")?(i=t.jsx(y,{variant:"warning",size:"sm",children:t.jsx("strong",{children:"Started"})}),n[1]=i):i=n[1];let c;n[2]===Symbol.for("react.memo_cache_sentinel")?(c=t.jsx(y,{variant:"danger",size:"sm",children:t.jsx("strong",{children:"Did not respond"})}),n[2]=c):c=n[2];let d;return n[3]===Symbol.for("react.memo_cache_sentinel")?(d={completed:a,started:i,"did not respond":c,"not started":t.jsx(y,{variant:"info",size:"sm",children:t.jsx("strong",{children:"Not started"})}),true:t.jsx(ie,{size:24,color:"green"}),false:t.jsx(oe,{size:24,color:"red"})},n[3]=d):d=n[3],d[l]||l}async function U(e,n){const{Model:l,FunctionFactory:a,Serializer:i}=await Y(async()=>{const{Model:v,FunctionFactory:j,Serializer:B}=await import("./survey.core-D1mOb2z9.js").then(O=>O.s);return{Model:v,FunctionFactory:j,Serializer:B}},[]);function c(){const v=i.getAllPropertiesByName("customDescription"),j=i.getAllPropertiesByName("hideCheckboxLabels");v.length||i.addProperty("itemvalue","customDescription:text"),j.length||i.addProperty("question","hideCheckboxLabels:boolean")}if(a.Instance.hasFunction("validateQuestion")||a.Instance.register("validateQuestion",ne),a.Instance.hasFunction("validateWebsiteUrl")||a.Instance.register("validateWebsiteUrl",ae),!e||!n)return!0;const d=`/api/response/load/${e}/${n}`,p=await fetch(d),f=await p.json();if(!p.ok)throw"message"in f?new Error(f.message):new Error(`Request failed with status ${p.status}`);c();const h=new l(f.model);h.setVariable("surveyyear",e),h.setVariable("previousyear",parseInt(e)-1),h.showNavigationButtons=!1,h.requiredText="",h.data=f.data,h.clearIncorrectValues(!0);const E=h.validate.bind(h,!0,!0)();return(await fetch(`/api/response/validate/${e}/${n}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({valid:E})})).ok?E:!0}function le(e,n,l){fetch("/api/survey/"+e+"/"+n+"/notes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({notes:l||""})}).then(async a=>{const i=await a.json();a.ok?m.success("Notes saved"):m.error("Failed saving notes: "+i.message||a.statusText)}).catch(a=>{m.error("Failed saving notes: "+a)})}function _({text:e,helpText:n,onClick:l,enabled:a}){const[i,c]=P.useState(!1),d=async()=>{if(!i){c(!0);try{await l()}finally{c(!1)}}};return t.jsxs(y,{onClick:d,disabled:!a,style:{pointerEvents:"auto",marginLeft:".5rem"},title:n,children:[i&&t.jsx(H,{as:"span",animation:"border",size:"sm",role:"status","aria-hidden":"true"}),e]})}function ge(){const e=G.c(21);let n;e[0]===Symbol.for("react.memo_cache_sentinel")?(n=[],e[0]=n):n=e[0];const[l,a]=P.useState(n),i=P.useRef(!1);let c,d;e[1]===Symbol.for("react.memo_cache_sentinel")?(c=()=>{A().then(x=>{a(x)})},d=[],e[1]=c,e[2]=d):(c=e[1],d=e[2]),P.useEffect(c,d);let p;e[3]===Symbol.for("react.memo_cache_sentinel")?(p=async function(s,u,r,b){const N=b===void 0?!1:b;try{N&&(s=s+"?dry_run=1");const w=await fetch(s,{method:"POST"}),F=await w.json();w.ok?(F.message&&console.log(F.message),N||m(r),A().then(J=>{a(J)})):m(u+F.message)}catch(w){m(u+w.message)}},e[3]=p):p=e[3];const f=p;let h;e[4]===Symbol.for("react.memo_cache_sentinel")?(h=async function(){await f("/api/survey/new","Failed creating new survey: ","Created new survey")},e[4]=h):h=e[4];const E=h;let C;e[5]===Symbol.for("react.memo_cache_sentinel")?(C=async function(s,u,r){const b=r===void 0?!1:r;if(i.current){m("Wait for status update to be finished...");return}i.current=!0,await f("/api/survey/"+u+"/"+s,"Error while updating "+s+" survey status to "+u+": ",s+" survey status updated to "+u,b),i.current=!1},e[5]=C):C=e[5];const v=C;let j;e[6]===Symbol.for("react.memo_cache_sentinel")?(j=async function(s,u){await f("/api/response/unlock/"+s+"/"+u,"Error while unlocking "+u+" "+s+" survey response: ",u+" "+s+" survey response unlocked")},e[6]=j):j=e[6];const B=j,O=l.length>0&&l.every(ue),M=window.location.origin+"/data?preview";let R;e[7]===Symbol.for("react.memo_cache_sentinel")?(R=t.jsx(re,{}),e[7]=R):R=e[7];let T;e[8]===Symbol.for("react.memo_cache_sentinel")?(T={maxWidth:"100rem"},e[8]=T):T=e[8];let I;e[9]===Symbol.for("react.memo_cache_sentinel")?(I=t.jsx(se,{}),e[9]=I):I=e[9];const V=!O;let L;e[10]===Symbol.for("react.memo_cache_sentinel")?(L={pointerEvents:"auto",width:"10rem",margin:"1rem"},e[10]=L):L=e[10];let g;e[11]!==V?(g=t.jsx(y,{onClick:E,disabled:V,style:L,title:"Create a new survey for the next year. Only possible if all current surveys are published.",children:"start new survey"}),e[11]=V,e[12]=g):g=e[12];let S;if(e[13]!==l){let x;e[15]===Symbol.for("react.memo_cache_sentinel")?(x=(s,u)=>t.jsxs(z.Item,{eventKey:u.toString(),children:[t.jsxs(z.Header,{children:[s.year," - ",s.status]}),t.jsxs(z.Body,{children:[t.jsxs("div",{style:{marginLeft:".5rem",marginBottom:"1rem"},children:[t.jsx(W,{to:`/survey/admin/edit/${s.year}`,target:"_blank",children:t.jsx(y,{style:{marginLeft:".5rem"},title:"Open the survey for inspection with all questions visible and any visibleIf logic added to the title.",children:"Inspect Survey"})}),t.jsx(W,{to:`/survey/admin/try/${s.year}`,target:"_blank",children:t.jsx(y,{style:{marginLeft:".5rem"},title:"Open the survey exactly as the nrens will see it, but without any nren data.",children:"Try Survey"})}),s.status==o.closed&&t.jsx(_,{text:"Mark as open",helpText:"Allow the NRENs to respond to this survey. Only 1 survey may be open at a time, and (pre)-published surveys cannot be opened anymore.",enabled:s.status==o.closed,onClick:()=>v(s.year,"open")}),s.status==o.open&&t.jsx(_,{text:"Mark as closed",helpText:"Do not allow the NRENs to respond to this survey anymore. Only surveys with status open can be closed.",enabled:s.status==o.open,onClick:()=>v(s.year,"close")}),(s.status==o.preview||s.status==o.published)&&t.jsx(_,{text:"Validate surveys",helpText:"Validate all survey responses. This will check if all required questions are answered and if the answers are in the correct format.",enabled:s.status==o.preview||s.status==o.published,onClick:async()=>{const r=[...s.responses].sort(he);(await Promise.all(r.map(w=>U(s.year,w.nren.name)))).every(de)?m.success("All surveys are valid"):m.error(`Some surveys are not valid.
+Please check the responses`),A().then(w=>{a(w)})}}),(s.status==o.closed||s.status==o.preview)&&t.jsx(_,{text:"Preview results",helpText:"Publish all completed survey responses to the compendium website for preview by admins. This is only possible if the survey is closed or previewed already.",enabled:s.status==o.closed||s.status==o.preview,onClick:()=>v(s.year,"preview")}),(s.status==o.preview||s.status==o.published)&&t.jsxs(t.Fragment,{children:[t.jsx(_,{text:"Publish results (dry run)",helpText:"Performs a dry-run of the publish operation, without actually publishing the results. Changes are logged in the browser console (F12).",enabled:s.status==o.preview||s.status==o.published,onClick:()=>v(s.year,"publish",!0)}),t.jsx(_,{text:"Publish results",helpText:"Publish or re-publish all completed survey responses to the compendium website. This is only possible if the survey is in preview or published already.",enabled:s.status==o.preview||s.status==o.published,onClick:()=>v(s.year,"publish")}),s.status==o.preview&&t.jsxs("span",{children:["  Preview link: ",t.jsx("a",{href:M,children:M})]})]})]}),t.jsxs(te,{children:[t.jsxs("colgroup",{children:[t.jsx("col",{style:{width:"10%"}}),t.jsx("col",{style:{width:"10%"}}),t.jsx("col",{style:{width:"10%"}}),t.jsx("col",{style:{width:"20%"}}),t.jsx("col",{style:{width:"30%"}}),t.jsx("col",{style:{width:"20%"}})]}),t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"NREN"}),t.jsx("th",{children:"Response Status"}),t.jsx("th",{children:"Response Valid"}),t.jsx("th",{children:"Lock"}),t.jsx("th",{children:"Management Notes"}),t.jsx("th",{children:"Actions"})]})}),t.jsx("tbody",{children:s.responses.map(r=>t.jsxs("tr",{children:[t.jsx("td",{children:r.nren.name}),t.jsx("td",{children:t.jsx(q,{status:r.status})}),t.jsx("td",{children:t.jsx(q,{status:r.valid?"true":"false"})}),t.jsx("td",{style:{textWrap:"wrap",wordWrap:"break-word",maxWidth:"10rem"},children:r.lock_description}),t.jsx("td",{children:"notes"in r&&t.jsx("textarea",{onInput:ee.debounce(b=>le(s.year,r.nren.id,b.target.value),1e3),style:{minWidth:"100%",minHeight:"5rem"},placeholder:"Notes for this survey",defaultValue:r.notes||""})}),t.jsxs("td",{children:[t.jsx(W,{to:`/survey/response/${s.year}/${r.nren.name}`,target:"_blank",children:t.jsx(y,{style:{pointerEvents:"auto",margin:".5rem"},title:"Open the responses of the NREN.",children:"open"})}),t.jsx(y,{onClick:()=>B(s.year,r.nren.name),disabled:r.lock_description=="",style:{pointerEvents:"auto"},title:"Remove the lock from the survey so that another person can open the survey for editing. WARNING: The person that currently has the lock will not be able to save their changes anymore once someone else starts editing!",children:"remove lock"}),r.status=="completed"&&t.jsx(y,{onClick:()=>{U(s.year,r.nren.name).then(b=>{b?m.success("Survey is valid"):m.error(`${r.nren.name} ${s.year} survey is not valid.
+Please check the response`),A().then(N=>{a(N)})}).catch(ce)},style:{pointerEvents:"auto"},children:"Validate Survey"})]})]},r.nren.id))})]})]})]},s.year),e[15]=x):x=e[15],S=l.map(x),e[13]=l,e[14]=S}else S=e[14];let k;e[16]!==S?(k=t.jsx(z,{defaultActiveKey:"0",children:S}),e[16]=S,e[17]=k):k=e[17];let $;return e[18]!==g||e[19]!==k?($=t.jsxs(t.Fragment,{children:[R,t.jsx(D,{className:"py-5 grey-container",children:t.jsx(D,{style:T,children:t.jsxs(Z,{children:[I,g,k]})})})]}),e[18]=g,e[19]=k,e[20]=$):$=e[20],$}function ce(e){m.error("Failed validating survey: "+e)}function de(e){return e}function he(e,n){return e.nren.name.localeCompare(n.nren.name)}function ue(e){return e.status==o.published}export{ge as default};
diff --git a/compendium_v2/static/SurveyManagementComponent-DygIuffI.js b/compendium_v2/static/SurveyManagementComponent-DygIuffI.js
deleted file mode 100644
index 2b87753c0ecb17d1c4fd43ed089b275b44b98706..0000000000000000000000000000000000000000
--- a/compendium_v2/static/SurveyManagementComponent-DygIuffI.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import{r as P,h as K,j as t,i as X,_ as Q,c as G,y,a7 as Y,L as W,E as D,R as Z}from"./index.js";import{A as z,l as ee}from"./lodash-0qAddrJ1.js";import{T as te}from"./Table-ClWM2_rS.js";import{k as m,D as se}from"./index-BGZcCZJE.js";import{v as ne,o as ae,S as o}from"./validation-COFmylEH.js";import{a as A}from"./survey-3meXCY6T.js";import{S as re}from"./SurveySidebar-CG0gwQ6b.js";import"./hook-BbhLqP_c.js";import"./SideBar-CkoMfgfL.js";const H=P.forwardRef(({bsPrefix:e,variant:n,animation:l="border",size:a,as:i="div",className:c,...d},p)=>{e=K(e,"spinner");const f=`${e}-${l}`;return t.jsx(i,{ref:p,...d,className:X(c,f,a&&`${f}-${a}`,n&&`text-${n}`)})});H.displayName="Spinner";function ie(e){return Q({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm106.5 150.5L228.8 332.8h-.1c-1.7 1.7-6.3 5.5-11.6 5.5-3.8 0-8.1-2.1-11.7-5.7l-56-56c-1.6-1.6-1.6-4.1 0-5.7l17.8-17.8c.8-.8 1.8-1.2 2.8-1.2 1 0 2 .4 2.8 1.2l44.4 44.4 122-122.9c.8-.8 1.8-1.2 2.8-1.2 1.1 0 2.1.4 2.8 1.2l17.5 18.1c1.8 1.7 1.8 4.2.2 5.8z"},child:[]}]})(e)}function oe(e){return Q({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 48C141.1 48 48 141.1 48 256s93.1 208 208 208 208-93.1 208-208S370.9 48 256 48zm52.7 283.3L256 278.6l-52.7 52.7c-6.2 6.2-16.4 6.2-22.6 0-3.1-3.1-4.7-7.2-4.7-11.3 0-4.1 1.6-8.2 4.7-11.3l52.7-52.7-52.7-52.7c-3.1-3.1-4.7-7.2-4.7-11.3 0-4.1 1.6-8.2 4.7-11.3 6.2-6.2 16.4-6.2 22.6 0l52.7 52.7 52.7-52.7c6.2-6.2 16.4-6.2 22.6 0 6.2 6.2 6.2 16.4 0 22.6L278.6 256l52.7 52.7c6.2 6.2 6.2 16.4 0 22.6-6.2 6.3-16.4 6.3-22.6 0z"},child:[]}]})(e)}function q(e){const n=G.c(4),{status:l}=e;let a;n[0]===Symbol.for("react.memo_cache_sentinel")?(a=t.jsx(y,{variant:"success",size:"sm",children:t.jsx("strong",{children:"Completed"})}),n[0]=a):a=n[0];let i;n[1]===Symbol.for("react.memo_cache_sentinel")?(i=t.jsx(y,{variant:"warning",size:"sm",children:t.jsx("strong",{children:"Started"})}),n[1]=i):i=n[1];let c;n[2]===Symbol.for("react.memo_cache_sentinel")?(c=t.jsx(y,{variant:"danger",size:"sm",children:t.jsx("strong",{children:"Did not respond"})}),n[2]=c):c=n[2];let d;return n[3]===Symbol.for("react.memo_cache_sentinel")?(d={completed:a,started:i,"did not respond":c,"not started":t.jsx(y,{variant:"info",size:"sm",children:t.jsx("strong",{children:"Not started"})}),true:t.jsx(ie,{size:24,color:"green"}),false:t.jsx(oe,{size:24,color:"red"})},n[3]=d):d=n[3],d[l]||l}async function U(e,n){const{Model:l,FunctionFactory:a,Serializer:i}=await Y(async()=>{const{Model:v,FunctionFactory:j,Serializer:B}=await import("./survey.core-D1mOb2z9.js").then(O=>O.s);return{Model:v,FunctionFactory:j,Serializer:B}},[]);function c(){const v=i.getAllPropertiesByName("customDescription"),j=i.getAllPropertiesByName("hideCheckboxLabels");v.length||i.addProperty("itemvalue","customDescription:text"),j.length||i.addProperty("question","hideCheckboxLabels:boolean")}if(a.Instance.hasFunction("validateQuestion")||a.Instance.register("validateQuestion",ne),a.Instance.hasFunction("validateWebsiteUrl")||a.Instance.register("validateWebsiteUrl",ae),!e||!n)return!0;const d=`/api/response/load/${e}/${n}`,p=await fetch(d),f=await p.json();if(!p.ok)throw"message"in f?new Error(f.message):new Error(`Request failed with status ${p.status}`);c();const h=new l(f.model);h.setVariable("surveyyear",e),h.setVariable("previousyear",parseInt(e)-1),h.showNavigationButtons=!1,h.requiredText="",h.data=f.data,h.clearIncorrectValues(!0);const E=h.validate.bind(h,!0,!0)();return(await fetch(`/api/response/validate/${e}/${n}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({valid:E})})).ok?E:!0}function le(e,n,l){fetch("/api/survey/"+e+"/"+n+"/notes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({notes:l||""})}).then(async a=>{const i=await a.json();a.ok?m.success("Notes saved"):m.error("Failed saving notes: "+i.message||a.statusText)}).catch(a=>{m.error("Failed saving notes: "+a)})}function _({text:e,helpText:n,onClick:l,enabled:a}){const[i,c]=P.useState(!1),d=async()=>{if(!i){c(!0);try{await l()}finally{c(!1)}}};return t.jsxs(y,{onClick:d,disabled:!a,style:{pointerEvents:"auto",marginLeft:".5rem"},title:n,children:[i&&t.jsx(H,{as:"span",animation:"border",size:"sm",role:"status","aria-hidden":"true"}),e]})}function ge(){const e=G.c(21);let n;e[0]===Symbol.for("react.memo_cache_sentinel")?(n=[],e[0]=n):n=e[0];const[l,a]=P.useState(n),i=P.useRef(!1);let c,d;e[1]===Symbol.for("react.memo_cache_sentinel")?(c=()=>{A().then(x=>{a(x)})},d=[],e[1]=c,e[2]=d):(c=e[1],d=e[2]),P.useEffect(c,d);let p;e[3]===Symbol.for("react.memo_cache_sentinel")?(p=async function(s,u,r,b){const N=b===void 0?!1:b;try{N&&(s=s+"?dry_run=1");const w=await fetch(s,{method:"POST"}),F=await w.json();w.ok?(F.message&&console.log(F.message),N||m(r),A().then(J=>{a(J)})):m(u+F.message)}catch(w){m(u+w.message)}},e[3]=p):p=e[3];const f=p;let h;e[4]===Symbol.for("react.memo_cache_sentinel")?(h=async function(){await f("/api/survey/new","Failed creating new survey: ","Created new survey")},e[4]=h):h=e[4];const E=h;let C;e[5]===Symbol.for("react.memo_cache_sentinel")?(C=async function(s,u,r){const b=r===void 0?!1:r;if(i.current){m("Wait for status update to be finished...");return}i.current=!0,await f("/api/survey/"+u+"/"+s,"Error while updating "+s+" survey status to "+u+": ",s+" survey status updated to "+u,b),i.current=!1},e[5]=C):C=e[5];const v=C;let j;e[6]===Symbol.for("react.memo_cache_sentinel")?(j=async function(s,u){await f("/api/response/unlock/"+s+"/"+u,"Error while unlocking "+u+" "+s+" survey response: ",u+" "+s+" survey response unlocked")},e[6]=j):j=e[6];const B=j,O=l.length>0&&l.every(ue),M=window.location.origin+"/data?preview";let R;e[7]===Symbol.for("react.memo_cache_sentinel")?(R=t.jsx(re,{}),e[7]=R):R=e[7];let T;e[8]===Symbol.for("react.memo_cache_sentinel")?(T={maxWidth:"100rem"},e[8]=T):T=e[8];let I;e[9]===Symbol.for("react.memo_cache_sentinel")?(I=t.jsx(se,{}),e[9]=I):I=e[9];const V=!O;let L;e[10]===Symbol.for("react.memo_cache_sentinel")?(L={pointerEvents:"auto",width:"10rem",margin:"1rem"},e[10]=L):L=e[10];let g;e[11]!==V?(g=t.jsx(y,{onClick:E,disabled:V,style:L,title:"Create a new survey for the next year. Only possible if all current surveys are published.",children:"start new survey"}),e[11]=V,e[12]=g):g=e[12];let S;if(e[13]!==l){let x;e[15]===Symbol.for("react.memo_cache_sentinel")?(x=(s,u)=>t.jsxs(z.Item,{eventKey:u.toString(),children:[t.jsxs(z.Header,{children:[s.year," - ",s.status]}),t.jsxs(z.Body,{children:[t.jsxs("div",{style:{marginLeft:".5rem",marginBottom:"1rem"},children:[t.jsx(W,{to:`/survey/admin/edit/${s.year}`,target:"_blank",children:t.jsx(y,{style:{marginLeft:".5rem"},title:"Open the survey for inspection with all questions visible and any visibleIf logic added to the title.",children:"Inspect Survey"})}),t.jsx(W,{to:`/survey/admin/try/${s.year}`,target:"_blank",children:t.jsx(y,{style:{marginLeft:".5rem"},title:"Open the survey exactly as the nrens will see it, but without any nren data.",children:"Try Survey"})}),s.status==o.closed&&t.jsx(_,{text:"Mark as open",helpText:"Allow the NRENs to respond to this survey. Only 1 survey may be open at a time, and (pre)-published surveys cannot be opened anymore.",enabled:s.status==o.closed,onClick:()=>v(s.year,"open")}),s.status==o.open&&t.jsx(_,{text:"Mark as closed",helpText:"Do not allow the NRENs to respond to this survey anymore. Only surveys with status open can be closed.",enabled:s.status==o.open,onClick:()=>v(s.year,"close")}),(s.status==o.preview||s.status==o.published)&&t.jsx(_,{text:"Validate surveys",helpText:"Validate all survey responses. This will check if all required questions are answered and if the answers are in the correct format.",enabled:s.status==o.preview||s.status==o.published,onClick:async()=>{const r=[...s.responses].sort(he);(await Promise.all(r.map(w=>U(s.year,w.nren.name)))).every(de)?m.success("All surveys are valid"):m.error(`Some surveys are not valid.
-Please check the responses`),A().then(w=>{a(w)})}}),(s.status==o.closed||s.status==o.preview)&&t.jsx(_,{text:"Preview results",helpText:"Publish all completed survey responses to the compendium website for preview by admins. This is only possible if the survey is closed or previewed already.",enabled:s.status==o.closed||s.status==o.preview,onClick:()=>v(s.year,"preview")}),(s.status==o.preview||s.status==o.published)&&t.jsxs(t.Fragment,{children:[t.jsx(_,{text:"Publish results (dry run)",helpText:"Performs a dry-run of the publish operation, without actually publishing the results. Changes are logged in the browser console (F12).",enabled:s.status==o.preview||s.status==o.published,onClick:()=>v(s.year,"publish",!0)}),t.jsx(_,{text:"Publish results",helpText:"Publish or re-publish all completed survey responses to the compendium website. This is only possible if the survey is in preview or published already.",enabled:s.status==o.preview||s.status==o.published,onClick:()=>v(s.year,"publish")}),s.status==o.preview&&t.jsxs("span",{children:["  Preview link: ",t.jsx("a",{href:M,children:M})]})]})]}),t.jsxs(te,{children:[t.jsxs("colgroup",{children:[t.jsx("col",{style:{width:"10%"}}),t.jsx("col",{style:{width:"10%"}}),t.jsx("col",{style:{width:"10%"}}),t.jsx("col",{style:{width:"20%"}}),t.jsx("col",{style:{width:"30%"}}),t.jsx("col",{style:{width:"20%"}})]}),t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{children:"NREN"}),t.jsx("th",{children:"Response Status"}),t.jsx("th",{children:"Response Valid"}),t.jsx("th",{children:"Lock"}),t.jsx("th",{children:"Management Notes"}),t.jsx("th",{children:"Actions"})]})}),t.jsx("tbody",{children:s.responses.map(r=>t.jsxs("tr",{children:[t.jsx("td",{children:r.nren.name}),t.jsx("td",{children:t.jsx(q,{status:r.status})}),t.jsx("td",{children:t.jsx(q,{status:r.valid?"true":"false"})}),t.jsx("td",{style:{textWrap:"wrap",wordWrap:"break-word",maxWidth:"10rem"},children:r.lock_description}),t.jsx("td",{children:"notes"in r&&t.jsx("textarea",{onInput:ee.debounce(b=>le(s.year,r.nren.id,b.target.value),1e3),style:{minWidth:"100%",minHeight:"5rem"},placeholder:"Notes for this survey",defaultValue:r.notes||""})}),t.jsxs("td",{children:[t.jsx(W,{to:`/survey/response/${s.year}/${r.nren.name}`,target:"_blank",children:t.jsx(y,{style:{pointerEvents:"auto",margin:".5rem"},title:"Open the responses of the NREN.",children:"open"})}),t.jsx(y,{onClick:()=>B(s.year,r.nren.name),disabled:r.lock_description=="",style:{pointerEvents:"auto"},title:"Remove the lock from the survey so that another person can open the survey for editing. WARNING: The person that currently has the lock will not be able to save their changes anymore once someone else starts editing!",children:"remove lock"}),r.status=="completed"&&t.jsx(y,{onClick:()=>{U(s.year,r.nren.name).then(b=>{b?m.success("Survey is valid"):m.error(`${r.nren.name} ${s.year} survey is not valid.
-Please check the response`),A().then(N=>{a(N)})}).catch(ce)},style:{pointerEvents:"auto"},children:"Validate Survey"})]})]},r.nren.id))})]})]})]},s.year),e[15]=x):x=e[15],S=l.map(x),e[13]=l,e[14]=S}else S=e[14];let k;e[16]!==S?(k=t.jsx(z,{defaultActiveKey:"0",children:S}),e[16]=S,e[17]=k):k=e[17];let $;return e[18]!==g||e[19]!==k?($=t.jsxs(t.Fragment,{children:[R,t.jsx(D,{className:"py-5 grey-container",children:t.jsx(D,{style:T,children:t.jsxs(Z,{children:[I,g,k]})})})]}),e[18]=g,e[19]=k,e[20]=$):$=e[20],$}function ce(e){m.error("Failed validating survey: "+e)}function de(e){return e}function he(e,n){return e.nren.name.localeCompare(n.nren.name)}function ue(e){return e.status==o.published}export{ge as default};
diff --git a/compendium_v2/static/SurveySidebar-B89Xtwv2.js b/compendium_v2/static/SurveySidebar-B89Xtwv2.js
new file mode 100644
index 0000000000000000000000000000000000000000..e43da739d5b37c49b968bb9021824c8237f5401e
--- /dev/null
+++ b/compendium_v2/static/SurveySidebar-B89Xtwv2.js
@@ -0,0 +1 @@
+import{c as a,j as s,a2 as m}from"./index-DunMf8wQ.js";import{S as o}from"./SideBar-DC9SKCkF.js";const h=()=>{const e=a.c(4);let r;e[0]===Symbol.for("react.memo_cache_sentinel")?(r=s.jsx("h5",{className:"section-title",children:"Management Links"}),e[0]=r):r=e[0];let t;e[1]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(m,{to:"/survey",children:s.jsx("span",{children:"Survey Home"})}),e[1]=t):t=e[1];let n;e[2]===Symbol.for("react.memo_cache_sentinel")?(n=s.jsx(m,{to:"/survey/admin/users",children:s.jsx("span",{children:"Compendium User Management"})}),e[2]=n):n=e[2];let i;return e[3]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(o,{survey:!0,children:[r,t,n,s.jsx(m,{to:"/survey/admin/surveys",children:s.jsx("span",{children:"Compendium Survey Management"})})]}),e[3]=i):i=e[3],i};export{h as S};
diff --git a/compendium_v2/static/SurveySidebar-CG0gwQ6b.js b/compendium_v2/static/SurveySidebar-CG0gwQ6b.js
deleted file mode 100644
index 093c785883be443ebc7a007cc50290f72f91d2ed..0000000000000000000000000000000000000000
--- a/compendium_v2/static/SurveySidebar-CG0gwQ6b.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as a,j as s,a2 as m}from"./index.js";import{S as o}from"./SideBar-CkoMfgfL.js";const h=()=>{const e=a.c(4);let r;e[0]===Symbol.for("react.memo_cache_sentinel")?(r=s.jsx("h5",{className:"section-title",children:"Management Links"}),e[0]=r):r=e[0];let t;e[1]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(m,{to:"/survey",children:s.jsx("span",{children:"Survey Home"})}),e[1]=t):t=e[1];let n;e[2]===Symbol.for("react.memo_cache_sentinel")?(n=s.jsx(m,{to:"/survey/admin/users",children:s.jsx("span",{children:"Compendium User Management"})}),e[2]=n):n=e[2];let i;return e[3]===Symbol.for("react.memo_cache_sentinel")?(i=s.jsxs(o,{survey:!0,children:[r,t,n,s.jsx(m,{to:"/survey/admin/surveys",children:s.jsx("span",{children:"Compendium Survey Management"})})]}),e[3]=i):i=e[3],i};export{h as S};
diff --git a/compendium_v2/static/Table-BUrPWwZB.js b/compendium_v2/static/Table-BUrPWwZB.js
new file mode 100644
index 0000000000000000000000000000000000000000..c48b660dd04c42526c5cf7dd61089d7db26d484f
--- /dev/null
+++ b/compendium_v2/static/Table-BUrPWwZB.js
@@ -0,0 +1 @@
+import{r as m,h as j,i as u,j as l}from"./index-DunMf8wQ.js";const N=m.forwardRef(({bsPrefix:c,className:f,striped:e,bordered:i,borderless:n,hover:d,size:a,variant:o,responsive:r,...x},p)=>{const s=j(c,"table"),b=u(f,s,o&&`${s}-${o}`,a&&`${s}-${a}`,e&&`${s}-${typeof e=="string"?`striped-${e}`:"striped"}`,i&&`${s}-bordered`,n&&`${s}-borderless`,d&&`${s}-hover`),$=l.jsx("table",{...x,className:b,ref:p});if(r){let t=`${s}-responsive`;return typeof r=="string"&&(t=`${t}-${r}`),l.jsx("div",{className:t,children:$})}return $});export{N as T};
diff --git a/compendium_v2/static/Table-ClWM2_rS.js b/compendium_v2/static/Table-ClWM2_rS.js
deleted file mode 100644
index 12baa2f1603cba2c9d67f3b2688bf86c46897b97..0000000000000000000000000000000000000000
--- a/compendium_v2/static/Table-ClWM2_rS.js
+++ /dev/null
@@ -1 +0,0 @@
-import{r as m,h as j,i as u,j as l}from"./index.js";const N=m.forwardRef(({bsPrefix:c,className:f,striped:e,bordered:i,borderless:n,hover:d,size:a,variant:o,responsive:r,...x},p)=>{const s=j(c,"table"),b=u(f,s,o&&`${s}-${o}`,a&&`${s}-${a}`,e&&`${s}-${typeof e=="string"?`striped-${e}`:"striped"}`,i&&`${s}-bordered`,n&&`${s}-borderless`,d&&`${s}-hover`),$=l.jsx("table",{...x,className:b,ref:p});if(r){let t=`${s}-responsive`;return typeof r=="string"&&(t=`${t}-${r}`),l.jsx("div",{className:t,children:$})}return $});export{N as T};
diff --git a/compendium_v2/static/TrafficRatio-BELkAOlA.js b/compendium_v2/static/TrafficRatio-BELkAOlA.js
deleted file mode 100644
index 8aa08cf4123fb60bc0ba273c4421018295abc5e0..0000000000000000000000000000000000000000
--- a/compendium_v2/static/TrafficRatio-BELkAOlA.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as C,r as L,F as E,j as x,S as F,t as Y}from"./index.js";import{B as $}from"./index-CjWPDfDC.js";import{C as g,a as v,L as A,B,p as O,c as M,d as P,u as T,N as W,D as q,F as z}from"./useData-CxftshCa.js";import{h as G,W as H}from"./HTMLLegendPlugin-C-L3dIU1.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";g.register(v,A,B,O,M,P);const J={maintainAspectRatio:!1,animation:{duration:0},plugins:{htmlLegend:{containerIDs:["legendtop","legendbottom"]},legend:{display:!1},tooltip:{callbacks:{label:function(e){let t=e.dataset.label||"";return e.parsed.x!==null&&(t+=`: ${e.parsed.x}%`),t}}}},scales:{x:{position:"top",stacked:!0,ticks:{callback:(e,t)=>`${t*10}%`}},x2:{ticks:{callback:e=>typeof e=="number"?`${e}%`:e},grid:{drawOnChartArea:!1},afterDataLimits:function(e){const t=Object.keys(g.instances);let a=-999999,i=999999;for(const s of t)g.instances[s]&&e.chart.scales.x2&&(i=Math.min(g.instances[s].scales.x.min,i),a=Math.max(g.instances[s].scales.x.max,a));e.chart.scales.x2.options.min=i,e.chart.scales.x2.options.max=a,e.chart.scales.x2.min=i,e.chart.scales.x2.max=a}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"};function ie(){const e=C.c(37),{filterSelection:t,setFilterSelection:a}=L.useContext(E),{data:i,years:s,nrens:n}=T("/api/traffic-ratio",a);let l,r,y,c;if(e[0]!==t||e[1]!==n||e[2]!==a||e[3]!==i||e[4]!==s){let b;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(b=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=b):b=e[11],r=i.filter(b),c=W(r,t.selectedYears[0]);let d;e[12]!==s?(d=[...s],e[12]=s,e[13]=d):d=e[13];let p;e[14]!==n?(p=n.values(),e[14]=n,e[15]=p):p=e[15];let u;e[16]!==p?(u=[...p],e[16]=p,e[17]=u):u=e[17];let h;e[18]!==d||e[19]!==u?(h={availableYears:d,availableNrens:u},e[18]=d,e[19]=u,e[20]=h):h=e[20];let _;e[21]!==t||e[22]!==a||e[23]!==h?(_=x.jsx(z,{max1year:!0,filterOptions:h,filterSelection:t,setFilterSelection:a}),e[21]=t,e[22]=a,e[23]=h,e[24]=_):_=e[24],l=_,y=Array.from(new Set(r.map(Q))).map(S=>n.get(S)).filter(K),e[0]=t,e[1]=n,e[2]=a,e[3]=i,e[4]=s,e[5]=l,e[6]=r,e[7]=y,e[8]=c}else l=e[5],r=e[6],y=e[7],c=e[8];const j=y.length,R=Math.max(j*1.5,20),w=Y["traffic-ratio"],D=`${R}rem`;let o;e[25]!==D?(o={height:D},e[25]=D,e[26]=o):o=e[26];let k;e[27]===Symbol.for("react.memo_cache_sentinel")?(k=[G],e[27]=k):k=e[27];let f;e[28]!==c?(f=x.jsx($,{data:c,options:J,plugins:k}),e[28]=c,e[29]=f):f=e[29];let m;e[30]!==o||e[31]!==f?(m=x.jsx(H,{children:x.jsx("div",{className:"chart-container",style:o,children:f})}),e[30]=o,e[31]=f,e[32]=m):m=e[32];let N;return e[33]!==l||e[34]!==r||e[35]!==m?(N=x.jsx(q,{title:w,description:"The graph shows the ratio of commodity versus research and education traffic in NREN networks",category:F.Network,filter:l,data:r,filename:"types_of_traffic_in_nren_networks",children:m}),e[33]=l,e[34]=r,e[35]=m,e[36]=N):N=e[36],N}function K(e){return!!e}function Q(e){return e.nren}export{ie as default};
diff --git a/compendium_v2/static/TrafficRatio-CsniApRI.js b/compendium_v2/static/TrafficRatio-CsniApRI.js
new file mode 100644
index 0000000000000000000000000000000000000000..c6c0eebaec8961751772945499817491833d4a47
--- /dev/null
+++ b/compendium_v2/static/TrafficRatio-CsniApRI.js
@@ -0,0 +1 @@
+import{c as C,r as L,F as E,j as x,S as F,t as Y}from"./index-DunMf8wQ.js";import{B as $}from"./index-C2DQFzVc.js";import{C as g,a as v,L as A,B,p as O,c as M,d as P,u as T,N as W,D as q,F as z}from"./useData-DvdT9bkc.js";import{h as G,W as H}from"./HTMLLegendPlugin-DF0OaxMQ.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";g.register(v,A,B,O,M,P);const J={maintainAspectRatio:!1,animation:{duration:0},plugins:{htmlLegend:{containerIDs:["legendtop","legendbottom"]},legend:{display:!1},tooltip:{callbacks:{label:function(e){let t=e.dataset.label||"";return e.parsed.x!==null&&(t+=`: ${e.parsed.x}%`),t}}}},scales:{x:{position:"top",stacked:!0,ticks:{callback:(e,t)=>`${t*10}%`}},x2:{ticks:{callback:e=>typeof e=="number"?`${e}%`:e},grid:{drawOnChartArea:!1},afterDataLimits:function(e){const t=Object.keys(g.instances);let a=-999999,i=999999;for(const s of t)g.instances[s]&&e.chart.scales.x2&&(i=Math.min(g.instances[s].scales.x.min,i),a=Math.max(g.instances[s].scales.x.max,a));e.chart.scales.x2.options.min=i,e.chart.scales.x2.options.max=a,e.chart.scales.x2.min=i,e.chart.scales.x2.max=a}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"};function ie(){const e=C.c(37),{filterSelection:t,setFilterSelection:a}=L.useContext(E),{data:i,years:s,nrens:n}=T("/api/traffic-ratio",a);let l,r,y,c;if(e[0]!==t||e[1]!==n||e[2]!==a||e[3]!==i||e[4]!==s){let b;e[9]!==t.selectedNrens||e[10]!==t.selectedYears?(b=S=>t.selectedYears.includes(S.year)&&t.selectedNrens.includes(S.nren),e[9]=t.selectedNrens,e[10]=t.selectedYears,e[11]=b):b=e[11],r=i.filter(b),c=W(r,t.selectedYears[0]);let d;e[12]!==s?(d=[...s],e[12]=s,e[13]=d):d=e[13];let p;e[14]!==n?(p=n.values(),e[14]=n,e[15]=p):p=e[15];let u;e[16]!==p?(u=[...p],e[16]=p,e[17]=u):u=e[17];let h;e[18]!==d||e[19]!==u?(h={availableYears:d,availableNrens:u},e[18]=d,e[19]=u,e[20]=h):h=e[20];let _;e[21]!==t||e[22]!==a||e[23]!==h?(_=x.jsx(z,{max1year:!0,filterOptions:h,filterSelection:t,setFilterSelection:a}),e[21]=t,e[22]=a,e[23]=h,e[24]=_):_=e[24],l=_,y=Array.from(new Set(r.map(Q))).map(S=>n.get(S)).filter(K),e[0]=t,e[1]=n,e[2]=a,e[3]=i,e[4]=s,e[5]=l,e[6]=r,e[7]=y,e[8]=c}else l=e[5],r=e[6],y=e[7],c=e[8];const j=y.length,R=Math.max(j*1.5,20),w=Y["traffic-ratio"],D=`${R}rem`;let o;e[25]!==D?(o={height:D},e[25]=D,e[26]=o):o=e[26];let k;e[27]===Symbol.for("react.memo_cache_sentinel")?(k=[G],e[27]=k):k=e[27];let f;e[28]!==c?(f=x.jsx($,{data:c,options:J,plugins:k}),e[28]=c,e[29]=f):f=e[29];let m;e[30]!==o||e[31]!==f?(m=x.jsx(H,{children:x.jsx("div",{className:"chart-container",style:o,children:f})}),e[30]=o,e[31]=f,e[32]=m):m=e[32];let N;return e[33]!==l||e[34]!==r||e[35]!==m?(N=x.jsx(q,{title:w,description:"The graph shows the ratio of commodity versus research and education traffic in NREN networks",category:F.Network,filter:l,data:r,filename:"types_of_traffic_in_nren_networks",children:m}),e[33]=l,e[34]=r,e[35]=m,e[36]=N):N=e[36],N}function K(e){return!!e}function Q(e){return e.nren}export{ie as default};
diff --git a/compendium_v2/static/TrafficUrl-0revWiHR.js b/compendium_v2/static/TrafficUrl-0revWiHR.js
new file mode 100644
index 0000000000000000000000000000000000000000..f7769664c9cc285b14830cb4a1e3b9e6b566304c
--- /dev/null
+++ b/compendium_v2/static/TrafficUrl-0revWiHR.js
@@ -0,0 +1 @@
+import{c as j,r as k,F as S,j as p,t as _,S as g}from"./index-DunMf8wQ.js";import{u as v,q as y,k as L,i as R,D as T,F,f as U,s as w}from"./useData-DvdT9bkc.js";import{N as C}from"./NrenYearTable-D3mNeVd3.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";function G(){const e=j.c(21),{filterSelection:t,setFilterSelection:s}=k.useContext(S),{data:r,nrens:n}=v("/api/traffic-stats",s);let a,c;if(e[0]!==r||e[1]!==t.selectedNrens){const D=r?y(r):[];let m;e[4]!==t.selectedNrens?(m=h=>t.selectedNrens.includes(h.nren),e[4]=t.selectedNrens,e[5]=m):m=e[5],a=D.filter(m);const b=L(a);c=R(b,E),e[0]=r,e[1]=t.selectedNrens,e[2]=a,e[3]=c}else a=e[2],c=e[3];const x=c;let f;e[6]===Symbol.for("react.memo_cache_sentinel")?(f=[],e[6]=f):f=e[6];let i;e[7]!==n?(i=n.values(),e[7]=n,e[8]=i):i=e[8];let l;e[9]!==i?(l={availableYears:f,availableNrens:[...i]},e[9]=i,e[10]=l):l=e[10];let u;e[11]!==t||e[12]!==s||e[13]!==l?(u=p.jsx(F,{filterOptions:l,filterSelection:t,setFilterSelection:s,coloredYears:!0}),e[11]=t,e[12]=s,e[13]=l,e[14]=u):u=e[14];const N=u;let o;e[15]!==x?(o=p.jsx(U,{children:p.jsx(C,{data:x,columnTitle:"Traffic Statistics URL",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=x,e[16]=o):o=e[16];let d;return e[17]!==N||e[18]!==a||e[19]!==o?(d=p.jsx(T,{title:_["traffic-stats"],description:"This table shows the URL links to NREN websites showing traffic statistics, if available.",category:g.Network,filter:N,data:a,filename:"traffic_stats_nrens_per_year",children:o}),e[17]=N,e[18]=a,e[19]=o,e[20]=d):d=e[20],d}function E(e,t){const s=w(t);if(s!=null)for(const[r,n]of Object.entries(s))e[r]=n}export{G as default};
diff --git a/compendium_v2/static/TrafficUrl-BLm4mZku.js b/compendium_v2/static/TrafficUrl-BLm4mZku.js
deleted file mode 100644
index 7739b5ac2ffea1b8c952bde60b352abc351b13a2..0000000000000000000000000000000000000000
--- a/compendium_v2/static/TrafficUrl-BLm4mZku.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as j,r as k,F as S,j as p,t as _,S as g}from"./index.js";import{u as v,q as y,k as L,i as R,D as T,F,f as U,s as w}from"./useData-CxftshCa.js";import{N as C}from"./NrenYearTable-tQrmAmRo.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";function G(){const e=j.c(21),{filterSelection:t,setFilterSelection:s}=k.useContext(S),{data:r,nrens:n}=v("/api/traffic-stats",s);let a,c;if(e[0]!==r||e[1]!==t.selectedNrens){const D=r?y(r):[];let m;e[4]!==t.selectedNrens?(m=h=>t.selectedNrens.includes(h.nren),e[4]=t.selectedNrens,e[5]=m):m=e[5],a=D.filter(m);const b=L(a);c=R(b,E),e[0]=r,e[1]=t.selectedNrens,e[2]=a,e[3]=c}else a=e[2],c=e[3];const x=c;let f;e[6]===Symbol.for("react.memo_cache_sentinel")?(f=[],e[6]=f):f=e[6];let i;e[7]!==n?(i=n.values(),e[7]=n,e[8]=i):i=e[8];let l;e[9]!==i?(l={availableYears:f,availableNrens:[...i]},e[9]=i,e[10]=l):l=e[10];let u;e[11]!==t||e[12]!==s||e[13]!==l?(u=p.jsx(F,{filterOptions:l,filterSelection:t,setFilterSelection:s,coloredYears:!0}),e[11]=t,e[12]=s,e[13]=l,e[14]=u):u=e[14];const N=u;let o;e[15]!==x?(o=p.jsx(U,{children:p.jsx(C,{data:x,columnTitle:"Traffic Statistics URL",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=x,e[16]=o):o=e[16];let d;return e[17]!==N||e[18]!==a||e[19]!==o?(d=p.jsx(T,{title:_["traffic-stats"],description:"This table shows the URL links to NREN websites showing traffic statistics, if available.",category:g.Network,filter:N,data:a,filename:"traffic_stats_nrens_per_year",children:o}),e[17]=N,e[18]=a,e[19]=o,e[20]=d):d=e[20],d}function E(e,t){const s=w(t);if(s!=null)for(const[r,n]of Object.entries(s))e[r]=n}export{G as default};
diff --git a/compendium_v2/static/TrafficVolume-1MvPPErr.js b/compendium_v2/static/TrafficVolume-1MvPPErr.js
deleted file mode 100644
index 26d42450ffc9791f1beb5ffa535889579c8c67d9..0000000000000000000000000000000000000000
--- a/compendium_v2/static/TrafficVolume-1MvPPErr.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as A,r as G,F as U,j as t,t as Y,S as $,C as P,R as W}from"./index.js";import{L as k}from"./index-CjWPDfDC.js";import{C as q,a as H,L as I,P as J,b as K,p as M,c as Q,d as X,u as Z,e as v,D as ee,F as te,f as se}from"./useData-CxftshCa.js";import{g as le}from"./charthelpers-B0zLHD4s.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";q.register(H,I,J,K,M,Q,X);function de(){const e=A.c(47),{filterSelection:l,setFilterSelection:_}=G.useContext(U),{data:V,nrens:B}=Z("/api/traffic-volume",_);let o,a,s,g,i;if(e[0]!==V||e[1]!==l.selectedNrens){let r;e[7]!==l.selectedNrens?(r=O=>l.selectedNrens.includes(O.nren),e[7]=l.selectedNrens,e[8]=r):r=e[8],s=V.filter(r),o=v(s,"from_customers"),i=v(s,"to_customers"),a=v(s,"from_external"),g=v(s,"to_external"),e[0]=V,e[1]=l.selectedNrens,e[2]=o,e[3]=a,e[4]=s,e[5]=g,e[6]=i}else o=e[2],a=e[3],s=e[4],g=e[5],i=e[6];const F=g;let N;e[9]===Symbol.for("react.memo_cache_sentinel")?(N=le({title:"Traffic Volume in PB",tooltipUnit:"PB",valueTransform(r){return r?r/1e3:0}}),e[9]=N):N=e[9];const b=N;let j;e[10]===Symbol.for("react.memo_cache_sentinel")?(j=[],e[10]=j):j=e[10];let n;e[11]!==B?(n=B.values(),e[11]=B,e[12]=n):n=e[12];let c;e[13]!==n?(c={availableYears:j,availableNrens:[...n]},e[13]=n,e[14]=c):c=e[14];let S;e[15]!==l||e[16]!==_||e[17]!==c?(S=t.jsx(te,{filterOptions:c,filterSelection:l,setFilterSelection:_}),e[15]=l,e[16]=_,e[17]=c,e[18]=S):S=e[18];const z=S;let y;e[19]===Symbol.for("react.memo_cache_sentinel")?(y=t.jsx("span",{children:"The four graphs below show the estimates of total annual traffic in PB (1000 TB) to & from NREN customers, and to & from external networks. NREN customers are taken to mean sources that are part of the NREN's connectivity remit, while external networks are understood as outside sources including GÉANT, the general/commercial internet, internet exchanges, peerings, other NRENs, etc."}),e[19]=y):y=e[19];let T;e[20]===Symbol.for("react.memo_cache_sentinel")?(T={marginBottom:"30px"},e[20]=T):T=e[20];let E;e[21]===Symbol.for("react.memo_cache_sentinel")?(E=t.jsx("span",{style:{fontSize:"20px",color:"rgb(85, 96, 156)",fontWeight:"bold"},children:"Traffic from NREN customer"}),e[21]=E):E=e[21];let f;e[22]!==o?(f=t.jsxs(P,{children:[E,t.jsx(k,{data:o,options:b})]}),e[22]=o,e[23]=f):f=e[23];let C;e[24]===Symbol.for("react.memo_cache_sentinel")?(C=t.jsx("span",{style:{fontSize:"20px",color:"rgb(221, 100, 57)",fontWeight:"bold"},children:"Traffic to NREN customer"}),e[24]=C):C=e[24];let m;e[25]!==i?(m=t.jsxs(P,{children:[C,t.jsx(k,{data:i,options:b})]}),e[25]=i,e[26]=m):m=e[26];let d;e[27]!==m||e[28]!==f?(d=t.jsxs(W,{style:T,children:[f,m]}),e[27]=m,e[28]=f,e[29]=d):d=e[29];let R;e[30]===Symbol.for("react.memo_cache_sentinel")?(R={marginTop:"30px"},e[30]=R):R=e[30];let w;e[31]===Symbol.for("react.memo_cache_sentinel")?(w=t.jsx("span",{style:{fontSize:"20px",color:"rgb(63, 143, 77)",fontWeight:"bold"},children:"Traffic from external network"}),e[31]=w):w=e[31];let h;e[32]!==a?(h=t.jsxs(P,{children:[w,t.jsx(k,{data:a,options:b})]}),e[32]=a,e[33]=h):h=e[33];let D;e[34]===Symbol.for("react.memo_cache_sentinel")?(D=t.jsx("span",{style:{fontSize:"20px",color:"rgb(173, 48, 51)",fontWeight:"bold"},children:"Traffic to external network"}),e[34]=D):D=e[34];let x;e[35]!==F?(x=t.jsxs(P,{children:[D,t.jsx(k,{data:F,options:b})]}),e[35]=F,e[36]=x):x=e[36];let p;e[37]!==h||e[38]!==x?(p=t.jsxs(W,{style:R,children:[h,x]}),e[37]=h,e[38]=x,e[39]=p):p=e[39];let u;e[40]!==d||e[41]!==p?(u=t.jsxs(se,{children:[d,p]}),e[40]=d,e[41]=p,e[42]=u):u=e[42];let L;return e[43]!==z||e[44]!==s||e[45]!==u?(L=t.jsx(ee,{title:Y["traffic-volume"],description:y,category:$.Network,filter:z,data:s,filename:"NREN_traffic_estimates_data",children:u}),e[43]=z,e[44]=s,e[45]=u,e[46]=L):L=e[46],L}export{de as default};
diff --git a/compendium_v2/static/TrafficVolume-BMOIGkfu.js b/compendium_v2/static/TrafficVolume-BMOIGkfu.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec13a87f6de6e5b91b7fac2b04e6fd792a8727a3
--- /dev/null
+++ b/compendium_v2/static/TrafficVolume-BMOIGkfu.js
@@ -0,0 +1 @@
+import{c as A,r as G,F as U,j as t,t as Y,S as $,C as P,R as W}from"./index-DunMf8wQ.js";import{L as k}from"./index-C2DQFzVc.js";import{C as q,a as H,L as I,P as J,b as K,p as M,c as Q,d as X,u as Z,e as v,D as ee,F as te,f as se}from"./useData-DvdT9bkc.js";import{g as le}from"./charthelpers-vHYh9qxV.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";q.register(H,I,J,K,M,Q,X);function de(){const e=A.c(47),{filterSelection:l,setFilterSelection:_}=G.useContext(U),{data:V,nrens:B}=Z("/api/traffic-volume",_);let o,a,s,g,i;if(e[0]!==V||e[1]!==l.selectedNrens){let r;e[7]!==l.selectedNrens?(r=O=>l.selectedNrens.includes(O.nren),e[7]=l.selectedNrens,e[8]=r):r=e[8],s=V.filter(r),o=v(s,"from_customers"),i=v(s,"to_customers"),a=v(s,"from_external"),g=v(s,"to_external"),e[0]=V,e[1]=l.selectedNrens,e[2]=o,e[3]=a,e[4]=s,e[5]=g,e[6]=i}else o=e[2],a=e[3],s=e[4],g=e[5],i=e[6];const F=g;let N;e[9]===Symbol.for("react.memo_cache_sentinel")?(N=le({title:"Traffic Volume in PB",tooltipUnit:"PB",valueTransform(r){return r?r/1e3:0}}),e[9]=N):N=e[9];const b=N;let j;e[10]===Symbol.for("react.memo_cache_sentinel")?(j=[],e[10]=j):j=e[10];let n;e[11]!==B?(n=B.values(),e[11]=B,e[12]=n):n=e[12];let c;e[13]!==n?(c={availableYears:j,availableNrens:[...n]},e[13]=n,e[14]=c):c=e[14];let S;e[15]!==l||e[16]!==_||e[17]!==c?(S=t.jsx(te,{filterOptions:c,filterSelection:l,setFilterSelection:_}),e[15]=l,e[16]=_,e[17]=c,e[18]=S):S=e[18];const z=S;let y;e[19]===Symbol.for("react.memo_cache_sentinel")?(y=t.jsx("span",{children:"The four graphs below show the estimates of total annual traffic in PB (1000 TB) to & from NREN customers, and to & from external networks. NREN customers are taken to mean sources that are part of the NREN's connectivity remit, while external networks are understood as outside sources including GÉANT, the general/commercial internet, internet exchanges, peerings, other NRENs, etc."}),e[19]=y):y=e[19];let T;e[20]===Symbol.for("react.memo_cache_sentinel")?(T={marginBottom:"30px"},e[20]=T):T=e[20];let E;e[21]===Symbol.for("react.memo_cache_sentinel")?(E=t.jsx("span",{style:{fontSize:"20px",color:"rgb(85, 96, 156)",fontWeight:"bold"},children:"Traffic from NREN customer"}),e[21]=E):E=e[21];let f;e[22]!==o?(f=t.jsxs(P,{children:[E,t.jsx(k,{data:o,options:b})]}),e[22]=o,e[23]=f):f=e[23];let C;e[24]===Symbol.for("react.memo_cache_sentinel")?(C=t.jsx("span",{style:{fontSize:"20px",color:"rgb(221, 100, 57)",fontWeight:"bold"},children:"Traffic to NREN customer"}),e[24]=C):C=e[24];let m;e[25]!==i?(m=t.jsxs(P,{children:[C,t.jsx(k,{data:i,options:b})]}),e[25]=i,e[26]=m):m=e[26];let d;e[27]!==m||e[28]!==f?(d=t.jsxs(W,{style:T,children:[f,m]}),e[27]=m,e[28]=f,e[29]=d):d=e[29];let R;e[30]===Symbol.for("react.memo_cache_sentinel")?(R={marginTop:"30px"},e[30]=R):R=e[30];let w;e[31]===Symbol.for("react.memo_cache_sentinel")?(w=t.jsx("span",{style:{fontSize:"20px",color:"rgb(63, 143, 77)",fontWeight:"bold"},children:"Traffic from external network"}),e[31]=w):w=e[31];let h;e[32]!==a?(h=t.jsxs(P,{children:[w,t.jsx(k,{data:a,options:b})]}),e[32]=a,e[33]=h):h=e[33];let D;e[34]===Symbol.for("react.memo_cache_sentinel")?(D=t.jsx("span",{style:{fontSize:"20px",color:"rgb(173, 48, 51)",fontWeight:"bold"},children:"Traffic to external network"}),e[34]=D):D=e[34];let x;e[35]!==F?(x=t.jsxs(P,{children:[D,t.jsx(k,{data:F,options:b})]}),e[35]=F,e[36]=x):x=e[36];let p;e[37]!==h||e[38]!==x?(p=t.jsxs(W,{style:R,children:[h,x]}),e[37]=h,e[38]=x,e[39]=p):p=e[39];let u;e[40]!==d||e[41]!==p?(u=t.jsxs(se,{children:[d,p]}),e[40]=d,e[41]=p,e[42]=u):u=e[42];let L;return e[43]!==z||e[44]!==s||e[45]!==u?(L=t.jsx(ee,{title:Y["traffic-volume"],description:y,category:$.Network,filter:z,data:s,filename:"NREN_traffic_estimates_data",children:u}),e[43]=z,e[44]=s,e[45]=u,e[46]=L):L=e[46],L}export{de as default};
diff --git a/compendium_v2/static/UserManagementComponent-CAc00ajf.js b/compendium_v2/static/UserManagementComponent-CAc00ajf.js
new file mode 100644
index 0000000000000000000000000000000000000000..697b2074b86bd675e040bf613713629b34f911c8
--- /dev/null
+++ b/compendium_v2/static/UserManagementComponent-CAc00ajf.js
@@ -0,0 +1 @@
+import{r as x,h as Ee,j as t,i as Te,ai as Re,c as Ae,aj as Ge,a1 as Oe,W as Se,y as Ue,E as Ve,R as Be}from"./index-DunMf8wQ.js";import{k as de,D as Me}from"./index-ClpOPiqG.js";import{S as We}from"./SurveySidebar-B89Xtwv2.js";import{c as qe,a as Le}from"./index-DSQNfbUQ.js";import{A as ae,l as He}from"./lodash-DG7dNfcw.js";import{T as Je}from"./Table-BUrPWwZB.js";import"./SideBar-DC9SKCkF.js";import"./hook-CgOBj93G.js";const me=x.forwardRef(({className:e,bsPrefix:s,as:r="span",...c},l)=>(s=Ee(s,"input-group-text"),t.jsx(r,{ref:l,className:Te(e,s),...c})));me.displayName="InputGroupText";const Ke=e=>t.jsx(me,{children:t.jsx(Re,{type:"checkbox",...e})}),Ye=e=>t.jsx(me,{children:t.jsx(Re,{type:"radio",...e})}),$e=x.forwardRef(({bsPrefix:e,size:s,hasValidation:r,className:c,as:l="div",...a},h)=>{e=Ee(e,"input-group");const d=x.useMemo(()=>({}),[]);return t.jsx(qe.Provider,{value:d,children:t.jsx(l,{ref:h,...a,className:Te(c,e,s&&`${e}-${s}`,r&&"has-validation")})})});$e.displayName="InputGroup";const ke=Object.assign($e,{Text:me,Radio:Ye,Checkbox:Ke});function Qe(e){const s=Ae.c(10),{getConfig:r,setConfig:c}=x.useContext(Ge);let l;s[0]!==r||s[1]!==e?(l=r(e),s[0]=r,s[1]=e,s[2]=l):l=s[2];const a=l;let h;s[3]!==e||s[4]!==c?(h=(M,N)=>c(e,M,N),s[3]=e,s[4]=c,s[5]=h):h=s[5];let d;return s[6]!==a||s[7]!==e||s[8]!==h?(d={[e]:a,setConfig:h},s[6]=a,s[7]=e,s[8]=h,s[9]=d):d=s[9],d}async function Xe(){try{return await(await fetch("/api/user/list")).json()}catch{return[]}}async function Ze(){try{return await(await fetch("/api/nren/list")).json()}catch{return[]}}async function ze(e,s){const r={id:e,...s},c={method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)},l=await fetch(`/api/user/${e}`,c),a=await l.json();if(!l.ok)throw new Error(a.message);return de.success(a.message),a.user}async function Pe(e){if(!window.confirm(`Are you sure you want to delete ${e.name} (${e.email})?`))return!1;const r={method:"DELETE",headers:{"Content-Type":"application/json"}},c=await fetch(`/api/user/${e.id}`,r),l=await c.json();if(!c.ok)throw new Error(l.message);return de.success(l.message),!0}const L=(e,s)=>e.role!=="admin"&&s.role==="admin"?1:e.role==="admin"&&s.role!=="admin"?-1:e.role==="user"&&s.role!=="user"?1:s.role==="user"&&e.role!=="user"?-1:!e.permissions.active&&s.permissions.active?1:e.permissions.active&&!s.permissions.active?-1:e.name.localeCompare(s.name);function ut(){const e=Ae.c(88);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=[],e[0]=s):s=e[0];const[r,c]=x.useState(s);let l;e[1]===Symbol.for("react.memo_cache_sentinel")?(l=[],e[1]=l):l=e[1];const[a,h]=x.useState(l),{user:d,setUser:M}=x.useContext(Oe);let N;e[2]===Symbol.for("react.memo_cache_sentinel")?(N={column:"ID",asc:!0},e[2]=N):N=e[2];const[f,Ne]=x.useState(N),[I,Ie]=x.useState(""),{setConfig:H,user_management:U}=Qe("user_management");let J;e[3]!==H||e[4]!==U?(J=(o,u)=>{const m=U??{},p=m==null?void 0:m.shownColumns;if(!p){H({...m,shownColumns:{[o]:u}});return}H({...m,shownColumns:{...p,[o]:u}})},e[3]=H,e[4]=U,e[5]=J):J=e[5];const ue=J;let K;e[6]!==U?(K=o=>{const u=U;if(!u)return!0;const m=u.shownColumns;return m?m[o]??!0:!0},e[6]=U,e[7]=K):K=e[7];const i=K;let Y,Q;e[8]===Symbol.for("react.memo_cache_sentinel")?(Y=()=>{Xe().then(o=>{c(o)}),Ze().then(o=>{h(o.sort(nt))})},Q=[],e[8]=Y,e[9]=Q):(Y=e[8],Q=e[9]),x.useEffect(Y,Q);let X;e[10]!==d.id||e[11]!==M||e[12]!==r?(X=(o,u)=>{const m=r.findIndex(v=>v.id===u.id),p=[...r],{name:q}=o.target,_={};q==="active"?_[q]=o.target.checked:_[q]=o.target.value,ze(u.id,_).then(v=>{v.id===d.id?M(v):(p[m]=v,c(p))}).catch(st)},e[10]=d.id,e[11]=M,e[12]=r,e[13]=X):X=e[13];const W=X;let Z;e[14]!==a?(Z=o=>{var u;return(u=a.find(m=>m.id==o||m.name==o))==null?void 0:u.id},e[14]=a,e[15]=Z):Z=e[15];const fe=Z,De=tt,z=et;let k,E,T,j,y,g,R,A,C,w,b,$,D;if(e[16]!==I||e[17]!==fe||e[18]!==i||e[19]!==W||e[20]!==d||e[21]!==a||e[22]!==ue||e[23]!==f.asc||e[24]!==f.column||e[25]!==r){const o=["ID","Active","Role","Email","Full Name","OIDC Sub","NREN","Actions"],u={[o[1]]:De,[o[2]]:z("role"),[o[3]]:z("email"),[o[4]]:z("name"),[o[6]]:z("nrens")},m=n=>{n===f.column?Ne({column:n,asc:!f.asc}):Ne({column:n,asc:!0})},p={};Array.from(Object.keys(u)).includes(f.column)?p[f.column]={"aria-sort":f.asc?"ascending":"descending"}:p[o[0]]={"aria-sort":f.asc?"ascending":"descending"};const q=u[f.column]??L,v=(I?r.filter(n=>n.email.includes(I)||n.name.includes(I)):r).filter(n=>n.id!==d.id).sort(q);f.asc||v.reverse(),e[39]===Symbol.for("react.memo_cache_sentinel")?(w=t.jsx(We,{}),b=t.jsx(Me,{}),e[39]=w,e[40]=b):(w=e[39],b=e[40]),E=Ve,A="py-5 grey-container";let ee;e[41]===Symbol.for("react.memo_cache_sentinel")?(ee=t.jsx("div",{className:"text-center w-100 mb-3",children:t.jsx("h3",{children:"User Management Page"})}),e[41]=ee):ee=e[41];let te;e[42]===Symbol.for("react.memo_cache_sentinel")?(te={width:"30rem"},e[42]=te):te=e[42];let se;e[43]===Symbol.for("react.memo_cache_sentinel")?(se=t.jsxs(ae.Header,{children:[t.jsx("span",{className:"me-2",children:"Column Visibility"}),t.jsx("small",{className:"text-muted",children:"Choose which columns to display"})]}),e[43]=se):se=e[43];let ne;e[44]===Symbol.for("react.memo_cache_sentinel")?(ne=t.jsx("small",{className:"text-muted mb-2 d-block",children:"Select which columns you want to display in the table below. Unchecked columns will be hidden."}),e[44]=ne):ne=e[44];let oe;e[45]===Symbol.for("react.memo_cache_sentinel")?(oe={gridTemplateColumns:"repeat(auto-fill, minmax(150px, 1fr))",gap:"10px"},e[45]=oe):oe=e[45];const he=t.jsx("div",{className:"d-grid",style:oe,children:o.map(n=>t.jsx(Se.Check,{type:"checkbox",id:`column-${n}`,label:n,checked:i(n),onChange:S=>ue(n,S.target.checked)},n))});let B;e[46]!==he?(B=t.jsx(ae,{className:"mb-3",style:te,children:t.jsxs(ae.Item,{eventKey:"0",children:[se,t.jsx(ae.Body,{children:t.jsxs(Se.Control,{as:"div",className:"p-3",children:[ne,he]})})]})}),e[46]=he,e[47]=B):B=e[47];let re,le;e[48]===Symbol.for("react.memo_cache_sentinel")?(re={width:"30rem"},le=t.jsx(ke.Text,{id:"search-text",children:"Search"}),e[48]=re,e[49]=le):(re=e[48],le=e[49]);let ie;e[50]===Symbol.for("react.memo_cache_sentinel")?(ie=t.jsx(Se.Control,{placeholder:"Search by email/name","aria-label":"Search",onInput:He.debounce(n=>Ie(n.target.value),200)}),e[50]=ie):ie=e[50];let ce;e[51]===Symbol.for("react.memo_cache_sentinel")?(ce=t.jsxs(ke,{className:"mb-3",style:re,children:[le,ie,t.jsx(Ue,{variant:"outline-secondary",onClick:()=>{Ie("")},children:"Clear"})]}),e[51]=ce):ce=e[51],e[52]!==B?(C=t.jsxs(Be,{className:"d-flex justify-content-center align-items-center flex-column",children:[ee,B,ce]}),e[52]=B,e[53]=C):C=e[53],R="d-flex justify-content-center",e[54]===Symbol.for("react.memo_cache_sentinel")?(g={maxWidth:"100rem"},e[54]=g):g=e[54],k=Je,D="user-management-table",T=!0;const pe=i(o[0])&&t.jsx("col",{span:1,style:{width:"8rem"}}),xe=i(o[1])&&t.jsx("col",{span:1,style:{width:"3rem"}}),je=i(o[2])&&t.jsx("col",{span:1,style:{width:"4.5rem"}}),ye=i(o[3])&&t.jsx("col",{span:1,style:{width:"7rem"}}),ge=i(o[4])&&t.jsx("col",{span:1,style:{width:"5rem"}}),Ce=i(o[5])&&t.jsx("col",{span:1,style:{width:"5rem"}}),we=i(o[6])&&t.jsx("col",{span:1,style:{width:"6rem"}}),be=i(o[7])&&t.jsx("col",{span:1,style:{width:"3rem"}});e[55]!==pe||e[56]!==xe||e[57]!==je||e[58]!==ye||e[59]!==ge||e[60]!==Ce||e[61]!==we||e[62]!==be?(j=t.jsxs("colgroup",{children:[pe,xe,je,ye,ge,Ce,we,be]}),e[55]=pe,e[56]=xe,e[57]=je,e[58]=ye,e[59]=ge,e[60]=Ce,e[61]=we,e[62]=be,e[63]=j):j=e[63];const ve=t.jsx("tr",{children:o.map(n=>i(n)&&t.jsx("th",{...p[n],onClick:()=>m(n),className:"sortable fixed-column",style:{border:"1px solid #ddd"},children:n},n))});e[64]!==ve?(y=t.jsx("thead",{children:ve}),e[64]=ve,e[65]=y):y=e[65],$=t.jsx("tbody",{children:(I?[]:[d]).concat(v).map(n=>t.jsxs("tr",{style:{fontWeight:n.id==d.id?"bold":"normal"},children:[i(o[0])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.id}),i(o[1])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.id==d.id?t.jsx(Le,{}):t.jsx("input",{type:"checkbox",name:"active",checked:n.permissions.active,onChange:S=>W(S,n)})}),i(o[2])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.id==d.id?n.role.charAt(0).toUpperCase()+n.role.slice(1):t.jsxs("select",{name:"role",defaultValue:n.role,onChange:S=>W(S,n),style:{width:"100%"},children:[t.jsx("option",{value:"admin",children:"Admin"}),t.jsx("option",{value:"user",children:"User"}),t.jsx("option",{value:"observer",children:"Observer"})]})}),i(o[3])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.email}),i(o[4])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.name}),i(o[5])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.oidc_sub}),i(o[6])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:t.jsxs("select",{name:"nren",multiple:!1,value:n.nrens.length>0?fe(n.nrens[0]):"",onChange:S=>W(S,n),children:[t.jsx("option",{value:"",children:"Select NREN"}),a.map(_e)]})}),i(o[7])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.id!==d.id&&t.jsx(Ue,{variant:"danger",onClick:async()=>{if(n.id===d.id){de.error("You cannot delete yourself");return}await Pe(n)&&c(r.filter(Fe=>Fe.id!==n.id))},children:"Delete"})})]},n.id))}),e[16]=I,e[17]=fe,e[18]=i,e[19]=W,e[20]=d,e[21]=a,e[22]=ue,e[23]=f.asc,e[24]=f.column,e[25]=r,e[26]=k,e[27]=E,e[28]=T,e[29]=j,e[30]=y,e[31]=g,e[32]=R,e[33]=A,e[34]=C,e[35]=w,e[36]=b,e[37]=$,e[38]=D}else k=e[26],E=e[27],T=e[28],j=e[29],y=e[30],g=e[31],R=e[32],A=e[33],C=e[34],w=e[35],b=e[36],$=e[37],D=e[38];let F;e[66]!==k||e[67]!==T||e[68]!==j||e[69]!==y||e[70]!==$||e[71]!==D?(F=t.jsxs(k,{className:D,bordered:T,children:[j,y,$]}),e[66]=k,e[67]=T,e[68]=j,e[69]=y,e[70]=$,e[71]=D,e[72]=F):F=e[72];let G;e[73]!==g||e[74]!==F?(G=t.jsx("div",{style:g,children:F}),e[73]=g,e[74]=F,e[75]=G):G=e[75];let O;e[76]!==R||e[77]!==G?(O=t.jsx("div",{className:R,children:G}),e[76]=R,e[77]=G,e[78]=O):O=e[78];let V;e[79]!==E||e[80]!==A||e[81]!==C||e[82]!==O?(V=t.jsxs(E,{className:A,children:[C,O]}),e[79]=E,e[80]=A,e[81]=C,e[82]=O,e[83]=V):V=e[83];let P;return e[84]!==w||e[85]!==b||e[86]!==V?(P=t.jsxs(t.Fragment,{children:[w,b,V]}),e[84]=w,e[85]=b,e[86]=V,e[87]=P):P=e[87],P}function _e(e){return t.jsx("option",{value:e.id,children:e.name},e.id)}function et(e){return(s,r)=>{const c=s[e],l=r[e];if(e==="nrens")return s.nrens.length===0&&r.nrens.length===0?L(s,r):s.nrens.length===0?-1:r.nrens.length===0?1:s.nrens[0].localeCompare(r.nrens[0]);if(typeof c!="string"||typeof l!="string")return L(s,r);const a=c.localeCompare(l);return a===0?L(s,r):a}}function tt(e,s){return e.permissions.active&&!s.permissions.active?1:!e.permissions.active&&s.permissions.active?-1:L(e,s)}function st(e){de.error(e.message)}function nt(e,s){return e.name.localeCompare(s.name)}export{ut as default};
diff --git a/compendium_v2/static/UserManagementComponent-DK-BhUBG.js b/compendium_v2/static/UserManagementComponent-DK-BhUBG.js
deleted file mode 100644
index 7dfbdb071cbd20d5f9bdea0435c8b1ae27b0daa8..0000000000000000000000000000000000000000
--- a/compendium_v2/static/UserManagementComponent-DK-BhUBG.js
+++ /dev/null
@@ -1 +0,0 @@
-import{r as x,h as Ee,j as t,i as Te,ai as Re,c as Ae,aj as Ge,a1 as Oe,W as Se,y as Ue,E as Ve,R as Be}from"./index.js";import{k as de,D as Me}from"./index-BGZcCZJE.js";import{S as We}from"./SurveySidebar-CG0gwQ6b.js";import{c as qe,a as Le}from"./index-ZGgT6a2u.js";import{A as ae,l as He}from"./lodash-0qAddrJ1.js";import{T as Je}from"./Table-ClWM2_rS.js";import"./SideBar-CkoMfgfL.js";import"./hook-BbhLqP_c.js";const me=x.forwardRef(({className:e,bsPrefix:s,as:r="span",...c},l)=>(s=Ee(s,"input-group-text"),t.jsx(r,{ref:l,className:Te(e,s),...c})));me.displayName="InputGroupText";const Ke=e=>t.jsx(me,{children:t.jsx(Re,{type:"checkbox",...e})}),Ye=e=>t.jsx(me,{children:t.jsx(Re,{type:"radio",...e})}),$e=x.forwardRef(({bsPrefix:e,size:s,hasValidation:r,className:c,as:l="div",...a},h)=>{e=Ee(e,"input-group");const d=x.useMemo(()=>({}),[]);return t.jsx(qe.Provider,{value:d,children:t.jsx(l,{ref:h,...a,className:Te(c,e,s&&`${e}-${s}`,r&&"has-validation")})})});$e.displayName="InputGroup";const ke=Object.assign($e,{Text:me,Radio:Ye,Checkbox:Ke});function Qe(e){const s=Ae.c(10),{getConfig:r,setConfig:c}=x.useContext(Ge);let l;s[0]!==r||s[1]!==e?(l=r(e),s[0]=r,s[1]=e,s[2]=l):l=s[2];const a=l;let h;s[3]!==e||s[4]!==c?(h=(M,N)=>c(e,M,N),s[3]=e,s[4]=c,s[5]=h):h=s[5];let d;return s[6]!==a||s[7]!==e||s[8]!==h?(d={[e]:a,setConfig:h},s[6]=a,s[7]=e,s[8]=h,s[9]=d):d=s[9],d}async function Xe(){try{return await(await fetch("/api/user/list")).json()}catch{return[]}}async function Ze(){try{return await(await fetch("/api/nren/list")).json()}catch{return[]}}async function ze(e,s){const r={id:e,...s},c={method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(r)},l=await fetch(`/api/user/${e}`,c),a=await l.json();if(!l.ok)throw new Error(a.message);return de.success(a.message),a.user}async function Pe(e){if(!window.confirm(`Are you sure you want to delete ${e.name} (${e.email})?`))return!1;const r={method:"DELETE",headers:{"Content-Type":"application/json"}},c=await fetch(`/api/user/${e.id}`,r),l=await c.json();if(!c.ok)throw new Error(l.message);return de.success(l.message),!0}const L=(e,s)=>e.role!=="admin"&&s.role==="admin"?1:e.role==="admin"&&s.role!=="admin"?-1:e.role==="user"&&s.role!=="user"?1:s.role==="user"&&e.role!=="user"?-1:!e.permissions.active&&s.permissions.active?1:e.permissions.active&&!s.permissions.active?-1:e.name.localeCompare(s.name);function ut(){const e=Ae.c(88);let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s=[],e[0]=s):s=e[0];const[r,c]=x.useState(s);let l;e[1]===Symbol.for("react.memo_cache_sentinel")?(l=[],e[1]=l):l=e[1];const[a,h]=x.useState(l),{user:d,setUser:M}=x.useContext(Oe);let N;e[2]===Symbol.for("react.memo_cache_sentinel")?(N={column:"ID",asc:!0},e[2]=N):N=e[2];const[f,Ne]=x.useState(N),[I,Ie]=x.useState(""),{setConfig:H,user_management:U}=Qe("user_management");let J;e[3]!==H||e[4]!==U?(J=(o,u)=>{const m=U??{},p=m==null?void 0:m.shownColumns;if(!p){H({...m,shownColumns:{[o]:u}});return}H({...m,shownColumns:{...p,[o]:u}})},e[3]=H,e[4]=U,e[5]=J):J=e[5];const ue=J;let K;e[6]!==U?(K=o=>{const u=U;if(!u)return!0;const m=u.shownColumns;return m?m[o]??!0:!0},e[6]=U,e[7]=K):K=e[7];const i=K;let Y,Q;e[8]===Symbol.for("react.memo_cache_sentinel")?(Y=()=>{Xe().then(o=>{c(o)}),Ze().then(o=>{h(o.sort(nt))})},Q=[],e[8]=Y,e[9]=Q):(Y=e[8],Q=e[9]),x.useEffect(Y,Q);let X;e[10]!==d.id||e[11]!==M||e[12]!==r?(X=(o,u)=>{const m=r.findIndex(v=>v.id===u.id),p=[...r],{name:q}=o.target,_={};q==="active"?_[q]=o.target.checked:_[q]=o.target.value,ze(u.id,_).then(v=>{v.id===d.id?M(v):(p[m]=v,c(p))}).catch(st)},e[10]=d.id,e[11]=M,e[12]=r,e[13]=X):X=e[13];const W=X;let Z;e[14]!==a?(Z=o=>{var u;return(u=a.find(m=>m.id==o||m.name==o))==null?void 0:u.id},e[14]=a,e[15]=Z):Z=e[15];const fe=Z,De=tt,z=et;let k,E,T,j,y,g,R,A,C,w,b,$,D;if(e[16]!==I||e[17]!==fe||e[18]!==i||e[19]!==W||e[20]!==d||e[21]!==a||e[22]!==ue||e[23]!==f.asc||e[24]!==f.column||e[25]!==r){const o=["ID","Active","Role","Email","Full Name","OIDC Sub","NREN","Actions"],u={[o[1]]:De,[o[2]]:z("role"),[o[3]]:z("email"),[o[4]]:z("name"),[o[6]]:z("nrens")},m=n=>{n===f.column?Ne({column:n,asc:!f.asc}):Ne({column:n,asc:!0})},p={};Array.from(Object.keys(u)).includes(f.column)?p[f.column]={"aria-sort":f.asc?"ascending":"descending"}:p[o[0]]={"aria-sort":f.asc?"ascending":"descending"};const q=u[f.column]??L,v=(I?r.filter(n=>n.email.includes(I)||n.name.includes(I)):r).filter(n=>n.id!==d.id).sort(q);f.asc||v.reverse(),e[39]===Symbol.for("react.memo_cache_sentinel")?(w=t.jsx(We,{}),b=t.jsx(Me,{}),e[39]=w,e[40]=b):(w=e[39],b=e[40]),E=Ve,A="py-5 grey-container";let ee;e[41]===Symbol.for("react.memo_cache_sentinel")?(ee=t.jsx("div",{className:"text-center w-100 mb-3",children:t.jsx("h3",{children:"User Management Page"})}),e[41]=ee):ee=e[41];let te;e[42]===Symbol.for("react.memo_cache_sentinel")?(te={width:"30rem"},e[42]=te):te=e[42];let se;e[43]===Symbol.for("react.memo_cache_sentinel")?(se=t.jsxs(ae.Header,{children:[t.jsx("span",{className:"me-2",children:"Column Visibility"}),t.jsx("small",{className:"text-muted",children:"Choose which columns to display"})]}),e[43]=se):se=e[43];let ne;e[44]===Symbol.for("react.memo_cache_sentinel")?(ne=t.jsx("small",{className:"text-muted mb-2 d-block",children:"Select which columns you want to display in the table below. Unchecked columns will be hidden."}),e[44]=ne):ne=e[44];let oe;e[45]===Symbol.for("react.memo_cache_sentinel")?(oe={gridTemplateColumns:"repeat(auto-fill, minmax(150px, 1fr))",gap:"10px"},e[45]=oe):oe=e[45];const he=t.jsx("div",{className:"d-grid",style:oe,children:o.map(n=>t.jsx(Se.Check,{type:"checkbox",id:`column-${n}`,label:n,checked:i(n),onChange:S=>ue(n,S.target.checked)},n))});let B;e[46]!==he?(B=t.jsx(ae,{className:"mb-3",style:te,children:t.jsxs(ae.Item,{eventKey:"0",children:[se,t.jsx(ae.Body,{children:t.jsxs(Se.Control,{as:"div",className:"p-3",children:[ne,he]})})]})}),e[46]=he,e[47]=B):B=e[47];let re,le;e[48]===Symbol.for("react.memo_cache_sentinel")?(re={width:"30rem"},le=t.jsx(ke.Text,{id:"search-text",children:"Search"}),e[48]=re,e[49]=le):(re=e[48],le=e[49]);let ie;e[50]===Symbol.for("react.memo_cache_sentinel")?(ie=t.jsx(Se.Control,{placeholder:"Search by email/name","aria-label":"Search",onInput:He.debounce(n=>Ie(n.target.value),200)}),e[50]=ie):ie=e[50];let ce;e[51]===Symbol.for("react.memo_cache_sentinel")?(ce=t.jsxs(ke,{className:"mb-3",style:re,children:[le,ie,t.jsx(Ue,{variant:"outline-secondary",onClick:()=>{Ie("")},children:"Clear"})]}),e[51]=ce):ce=e[51],e[52]!==B?(C=t.jsxs(Be,{className:"d-flex justify-content-center align-items-center flex-column",children:[ee,B,ce]}),e[52]=B,e[53]=C):C=e[53],R="d-flex justify-content-center",e[54]===Symbol.for("react.memo_cache_sentinel")?(g={maxWidth:"100rem"},e[54]=g):g=e[54],k=Je,D="user-management-table",T=!0;const pe=i(o[0])&&t.jsx("col",{span:1,style:{width:"8rem"}}),xe=i(o[1])&&t.jsx("col",{span:1,style:{width:"3rem"}}),je=i(o[2])&&t.jsx("col",{span:1,style:{width:"4.5rem"}}),ye=i(o[3])&&t.jsx("col",{span:1,style:{width:"7rem"}}),ge=i(o[4])&&t.jsx("col",{span:1,style:{width:"5rem"}}),Ce=i(o[5])&&t.jsx("col",{span:1,style:{width:"5rem"}}),we=i(o[6])&&t.jsx("col",{span:1,style:{width:"6rem"}}),be=i(o[7])&&t.jsx("col",{span:1,style:{width:"3rem"}});e[55]!==pe||e[56]!==xe||e[57]!==je||e[58]!==ye||e[59]!==ge||e[60]!==Ce||e[61]!==we||e[62]!==be?(j=t.jsxs("colgroup",{children:[pe,xe,je,ye,ge,Ce,we,be]}),e[55]=pe,e[56]=xe,e[57]=je,e[58]=ye,e[59]=ge,e[60]=Ce,e[61]=we,e[62]=be,e[63]=j):j=e[63];const ve=t.jsx("tr",{children:o.map(n=>i(n)&&t.jsx("th",{...p[n],onClick:()=>m(n),className:"sortable fixed-column",style:{border:"1px solid #ddd"},children:n},n))});e[64]!==ve?(y=t.jsx("thead",{children:ve}),e[64]=ve,e[65]=y):y=e[65],$=t.jsx("tbody",{children:(I?[]:[d]).concat(v).map(n=>t.jsxs("tr",{style:{fontWeight:n.id==d.id?"bold":"normal"},children:[i(o[0])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.id}),i(o[1])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.id==d.id?t.jsx(Le,{}):t.jsx("input",{type:"checkbox",name:"active",checked:n.permissions.active,onChange:S=>W(S,n)})}),i(o[2])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.id==d.id?n.role.charAt(0).toUpperCase()+n.role.slice(1):t.jsxs("select",{name:"role",defaultValue:n.role,onChange:S=>W(S,n),style:{width:"100%"},children:[t.jsx("option",{value:"admin",children:"Admin"}),t.jsx("option",{value:"user",children:"User"}),t.jsx("option",{value:"observer",children:"Observer"})]})}),i(o[3])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.email}),i(o[4])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.name}),i(o[5])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.oidc_sub}),i(o[6])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:t.jsxs("select",{name:"nren",multiple:!1,value:n.nrens.length>0?fe(n.nrens[0]):"",onChange:S=>W(S,n),children:[t.jsx("option",{value:"",children:"Select NREN"}),a.map(_e)]})}),i(o[7])&&t.jsx("td",{style:{border:"1px dotted #ddd"},children:n.id!==d.id&&t.jsx(Ue,{variant:"danger",onClick:async()=>{if(n.id===d.id){de.error("You cannot delete yourself");return}await Pe(n)&&c(r.filter(Fe=>Fe.id!==n.id))},children:"Delete"})})]},n.id))}),e[16]=I,e[17]=fe,e[18]=i,e[19]=W,e[20]=d,e[21]=a,e[22]=ue,e[23]=f.asc,e[24]=f.column,e[25]=r,e[26]=k,e[27]=E,e[28]=T,e[29]=j,e[30]=y,e[31]=g,e[32]=R,e[33]=A,e[34]=C,e[35]=w,e[36]=b,e[37]=$,e[38]=D}else k=e[26],E=e[27],T=e[28],j=e[29],y=e[30],g=e[31],R=e[32],A=e[33],C=e[34],w=e[35],b=e[36],$=e[37],D=e[38];let F;e[66]!==k||e[67]!==T||e[68]!==j||e[69]!==y||e[70]!==$||e[71]!==D?(F=t.jsxs(k,{className:D,bordered:T,children:[j,y,$]}),e[66]=k,e[67]=T,e[68]=j,e[69]=y,e[70]=$,e[71]=D,e[72]=F):F=e[72];let G;e[73]!==g||e[74]!==F?(G=t.jsx("div",{style:g,children:F}),e[73]=g,e[74]=F,e[75]=G):G=e[75];let O;e[76]!==R||e[77]!==G?(O=t.jsx("div",{className:R,children:G}),e[76]=R,e[77]=G,e[78]=O):O=e[78];let V;e[79]!==E||e[80]!==A||e[81]!==C||e[82]!==O?(V=t.jsxs(E,{className:A,children:[C,O]}),e[79]=E,e[80]=A,e[81]=C,e[82]=O,e[83]=V):V=e[83];let P;return e[84]!==w||e[85]!==b||e[86]!==V?(P=t.jsxs(t.Fragment,{children:[w,b,V]}),e[84]=w,e[85]=b,e[86]=V,e[87]=P):P=e[87],P}function _e(e){return t.jsx("option",{value:e.id,children:e.name},e.id)}function et(e){return(s,r)=>{const c=s[e],l=r[e];if(e==="nrens")return s.nrens.length===0&&r.nrens.length===0?L(s,r):s.nrens.length===0?-1:r.nrens.length===0?1:s.nrens[0].localeCompare(r.nrens[0]);if(typeof c!="string"||typeof l!="string")return L(s,r);const a=c.localeCompare(l);return a===0?L(s,r):a}}function tt(e,s){return e.permissions.active&&!s.permissions.active?1:!e.permissions.active&&s.permissions.active?-1:L(e,s)}function st(e){de.error(e.message)}function nt(e,s){return e.name.localeCompare(s.name)}export{ut as default};
diff --git a/compendium_v2/static/WeatherMap-CEsWOhkH.js b/compendium_v2/static/WeatherMap-CEsWOhkH.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f8e44c2de66c2c8892625c3e7b971f944ddd185
--- /dev/null
+++ b/compendium_v2/static/WeatherMap-CEsWOhkH.js
@@ -0,0 +1 @@
+import{c as b,r as k,F as w,j as m,t as g,S as j}from"./index-DunMf8wQ.js";import{u as S,q as v,k as y,i as F,D as L,F as R,f as C}from"./useData-DvdT9bkc.js";import{N as E}from"./NrenYearTable-D3mNeVd3.js";import"./SideBar-DC9SKCkF.js";import"./xlsx-BHRztzV8.js";import"./index-DSQNfbUQ.js";import"./hook-CgOBj93G.js";import"./Table-BUrPWwZB.js";function O(){const e=b.c(21),{filterSelection:t,setFilterSelection:o}=k.useContext(w),{data:i,nrens:d}=S("/api/weather-map",o);let a,n;if(e[0]!==i||e[1]!==t.selectedNrens){const x=i?v(i):[];let u;e[4]!==t.selectedNrens?(u=_=>t.selectedNrens.includes(_.nren),e[4]=t.selectedNrens,e[5]=u):u=e[5],a=x.filter(u);const D=y(a);n=F(D,T),e[0]=i,e[1]=t.selectedNrens,e[2]=a,e[3]=n}else a=e[2],n=e[3];const h=n;let c;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=[],e[6]=c):c=e[6];let s;e[7]!==d?(s=d.values(),e[7]=d,e[8]=s):s=e[8];let r;e[9]!==s?(r={availableYears:c,availableNrens:[...s]},e[9]=s,e[10]=r):r=e[10];let f;e[11]!==t||e[12]!==o||e[13]!==r?(f=m.jsx(R,{filterOptions:r,filterSelection:t,setFilterSelection:o,coloredYears:!0}),e[11]=t,e[12]=o,e[13]=r,e[14]=f):f=e[14];const N=f;let l;e[15]!==h?(l=m.jsx(C,{children:m.jsx(E,{data:h,columnTitle:"Network Weather Map",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=h,e[16]=l):l=e[16];let p;return e[17]!==N||e[18]!==a||e[19]!==l?(p=m.jsx(L,{title:g["weather-map"],description:"This table shows the URL links to NREN websites showing weather map, if available.",category:j.Network,filter:N,data:a,filename:"weather_map_nrens_per_year",children:l}),e[17]=N,e[18]=a,e[19]=l,e[20]=p):p=e[20],p}function T(e,t){!!t.url&&(e[t.url]=t.url)}export{O as default};
diff --git a/compendium_v2/static/WeatherMap-CZPcsrK6.js b/compendium_v2/static/WeatherMap-CZPcsrK6.js
deleted file mode 100644
index c097d83903dc74b5e09735653e749f456dbf391f..0000000000000000000000000000000000000000
--- a/compendium_v2/static/WeatherMap-CZPcsrK6.js
+++ /dev/null
@@ -1 +0,0 @@
-import{c as b,r as k,F as w,j as m,t as g,S as j}from"./index.js";import{u as S,q as v,k as y,i as F,D as L,F as R,f as C}from"./useData-CxftshCa.js";import{N as E}from"./NrenYearTable-tQrmAmRo.js";import"./SideBar-CkoMfgfL.js";import"./xlsx-BHRztzV8.js";import"./index-ZGgT6a2u.js";import"./hook-BbhLqP_c.js";import"./Table-ClWM2_rS.js";function O(){const e=b.c(21),{filterSelection:t,setFilterSelection:o}=k.useContext(w),{data:i,nrens:d}=S("/api/weather-map",o);let a,n;if(e[0]!==i||e[1]!==t.selectedNrens){const x=i?v(i):[];let u;e[4]!==t.selectedNrens?(u=_=>t.selectedNrens.includes(_.nren),e[4]=t.selectedNrens,e[5]=u):u=e[5],a=x.filter(u);const D=y(a);n=F(D,T),e[0]=i,e[1]=t.selectedNrens,e[2]=a,e[3]=n}else a=e[2],n=e[3];const h=n;let c;e[6]===Symbol.for("react.memo_cache_sentinel")?(c=[],e[6]=c):c=e[6];let s;e[7]!==d?(s=d.values(),e[7]=d,e[8]=s):s=e[8];let r;e[9]!==s?(r={availableYears:c,availableNrens:[...s]},e[9]=s,e[10]=r):r=e[10];let f;e[11]!==t||e[12]!==o||e[13]!==r?(f=m.jsx(R,{filterOptions:r,filterSelection:t,setFilterSelection:o,coloredYears:!0}),e[11]=t,e[12]=o,e[13]=r,e[14]=f):f=e[14];const N=f;let l;e[15]!==h?(l=m.jsx(C,{children:m.jsx(E,{data:h,columnTitle:"Network Weather Map",dottedBorder:!0,noDots:!0,keysAreURLs:!0,removeDecoration:!0})}),e[15]=h,e[16]=l):l=e[16];let p;return e[17]!==N||e[18]!==a||e[19]!==l?(p=m.jsx(L,{title:g["weather-map"],description:"This table shows the URL links to NREN websites showing weather map, if available.",category:j.Network,filter:N,data:a,filename:"weather_map_nrens_per_year",children:l}),e[17]=N,e[18]=a,e[19]=l,e[20]=p):p=e[20],p}function T(e,t){!!t.url&&(e[t.url]=t.url)}export{O as default};
diff --git a/compendium_v2/static/charthelpers-B0zLHD4s.js b/compendium_v2/static/charthelpers-vHYh9qxV.js
similarity index 96%
rename from compendium_v2/static/charthelpers-B0zLHD4s.js
rename to compendium_v2/static/charthelpers-vHYh9qxV.js
index 1a2d1102b837e6252f3bc5f7387471af561e9039..2831e45c84239e6d848061231b9735d30bb5bd59 100644
--- a/compendium_v2/static/charthelpers-B0zLHD4s.js
+++ b/compendium_v2/static/charthelpers-vHYh9qxV.js
@@ -1 +1 @@
-import{C as l}from"./useData-CxftshCa.js";const x=({title:i,unit:c,tooltipPrefix:r,tooltipUnit:o,tickLimit:n,valueTransform:t})=>({responsive:!0,elements:{point:{pointStyle:"circle",pointRadius:4,pointBorderWidth:2,pointBackgroundColor:"white"}},animation:{duration:0},plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(a){let s=r??(a.dataset.label||"");const e=t?t(a.parsed.y):a.parsed.y;return a.parsed.y!==null&&(s+=`: ${e} ${o||""}`),s}}}},scales:{y:{title:{display:!!i,text:i||""},ticks:{autoSkip:!0,maxTicksLimit:n,callback:a=>`${typeof a=="string"?a:t?t(a):a} ${c||""}`}}}}),y=({title:i,unit:c,tooltipPrefix:r,tooltipUnit:o,valueTransform:n})=>({maintainAspectRatio:!1,layout:{padding:{right:60}},animation:{duration:0},plugins:{legend:{display:!1},chartDataLabels:{font:{family:'"Open Sans", sans-serif'}},tooltip:{callbacks:{label:function(t){let a=r??(t.dataset.label||"");const s=n?n(t.parsed.x):t.parsed.x;return t.parsed.y!==null&&(a+=`: ${s} ${o||""}`),a}}}},scales:{x:{title:{display:!!i,text:i||""},position:"top",ticks:{callback:t=>t&&`${n?n(t):t} ${c||""}`}},x2:{title:{display:!!i,text:i||""},ticks:{callback:t=>t&&`${n?n(t):t} ${c||""}`},grid:{drawOnChartArea:!1},afterDataLimits:function(t){const a=Object.keys(l.instances);let s=-999999,e=999999;for(const d of a)l.instances[d]&&t.chart.scales.x2&&(e=Math.min(l.instances[d].scales.x.min,e),s=Math.max(l.instances[d].scales.x.max,s));t.chart.scales.x2.options.min=e,t.chart.scales.x2.options.max=s,t.chart.scales.x2.min=e,t.chart.scales.x2.max=s}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"});export{y as a,x as g};
+import{C as l}from"./useData-DvdT9bkc.js";const x=({title:i,unit:c,tooltipPrefix:r,tooltipUnit:o,tickLimit:n,valueTransform:t})=>({responsive:!0,elements:{point:{pointStyle:"circle",pointRadius:4,pointBorderWidth:2,pointBackgroundColor:"white"}},animation:{duration:0},plugins:{legend:{display:!1},tooltip:{callbacks:{label:function(a){let s=r??(a.dataset.label||"");const e=t?t(a.parsed.y):a.parsed.y;return a.parsed.y!==null&&(s+=`: ${e} ${o||""}`),s}}}},scales:{y:{title:{display:!!i,text:i||""},ticks:{autoSkip:!0,maxTicksLimit:n,callback:a=>`${typeof a=="string"?a:t?t(a):a} ${c||""}`}}}}),y=({title:i,unit:c,tooltipPrefix:r,tooltipUnit:o,valueTransform:n})=>({maintainAspectRatio:!1,layout:{padding:{right:60}},animation:{duration:0},plugins:{legend:{display:!1},chartDataLabels:{font:{family:'"Open Sans", sans-serif'}},tooltip:{callbacks:{label:function(t){let a=r??(t.dataset.label||"");const s=n?n(t.parsed.x):t.parsed.x;return t.parsed.y!==null&&(a+=`: ${s} ${o||""}`),a}}}},scales:{x:{title:{display:!!i,text:i||""},position:"top",ticks:{callback:t=>t&&`${n?n(t):t} ${c||""}`}},x2:{title:{display:!!i,text:i||""},ticks:{callback:t=>t&&`${n?n(t):t} ${c||""}`},grid:{drawOnChartArea:!1},afterDataLimits:function(t){const a=Object.keys(l.instances);let s=-999999,e=999999;for(const d of a)l.instances[d]&&t.chart.scales.x2&&(e=Math.min(l.instances[d].scales.x.min,e),s=Math.max(l.instances[d].scales.x.max,s));t.chart.scales.x2.options.min=e,t.chart.scales.x2.options.max=s,t.chart.scales.x2.min=e,t.chart.scales.x2.max=s}},y:{stacked:!0,ticks:{autoSkip:!1}}},indexAxis:"y"});export{y as a,x as g};
diff --git a/compendium_v2/static/chartjs-plugin-datalabels.esm-CjG-nxnq.js b/compendium_v2/static/chartjs-plugin-datalabels.esm-Bb0FwIXw.js
similarity index 99%
rename from compendium_v2/static/chartjs-plugin-datalabels.esm-CjG-nxnq.js
rename to compendium_v2/static/chartjs-plugin-datalabels.esm-Bb0FwIXw.js
index 0a3166f40f22475d3295a0eb01a69b485f594de0..79aceae4039d2ffe9baed6af7832b1f6504c6d11 100644
--- a/compendium_v2/static/chartjs-plugin-datalabels.esm-CjG-nxnq.js
+++ b/compendium_v2/static/chartjs-plugin-datalabels.esm-Bb0FwIXw.js
@@ -1,4 +1,4 @@
-import{x as g,y as J,z as f,A as K,E as q,G as V,H as W,I as p,J as Y,P as Q,B as Z,K as ee,M as re}from"./useData-CxftshCa.js";/*!
+import{x as g,y as J,z as f,A as K,E as q,G as V,H as W,I as p,J as Y,P as Q,B as Z,K as ee,M as re}from"./useData-DvdT9bkc.js";/*!
  * chartjs-plugin-datalabels v2.2.0
  * https://chartjs-plugin-datalabels.netlify.app
  * (c) 2017-2022 chartjs-plugin-datalabels contributors
diff --git a/compendium_v2/static/hook-BbhLqP_c.js b/compendium_v2/static/hook-BbhLqP_c.js
deleted file mode 100644
index 987ff6e11c94af7a9ed571bc245ea53300e51db4..0000000000000000000000000000000000000000
--- a/compendium_v2/static/hook-BbhLqP_c.js
+++ /dev/null
@@ -1 +0,0 @@
-import{$ as d,r as p}from"./index.js";function m(){return m=Object.assign?Object.assign.bind():function(r){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var e in n)({}).hasOwnProperty.call(n,e)&&(r[e]=n[e])}return r},m.apply(null,arguments)}function b(r){return"default"+r.charAt(0).toUpperCase()+r.substr(1)}function y(r){var t=P(r,"string");return typeof t=="symbol"?t:String(t)}function P(r,t){if(typeof r!="object"||r===null)return r;var n=r[Symbol.toPrimitive];if(n!==void 0){var e=n.call(r,t);if(typeof e!="object")return e;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(r)}function g(r,t,n){var e=p.useRef(r!==void 0),o=p.useState(t),a=o[0],f=o[1],i=r!==void 0,l=e.current;return e.current=i,!i&&l&&a!==t&&f(t),[i?r:a,p.useCallback(function(c){for(var u=arguments.length,v=new Array(u>1?u-1:0),s=1;s<u;s++)v[s-1]=arguments[s];n&&n.apply(void 0,[c].concat(v)),f(c)},[n])]}function j(r,t){return Object.keys(t).reduce(function(n,e){var o,a=n,f=a[b(e)],i=a[e],l=d(a,[b(e),e].map(y)),c=t[e],u=g(i,f,r[c]),v=u[0],s=u[1];return m({},l,(o={},o[e]=v,o[c]=s,o))},r)}export{j as u};
diff --git a/compendium_v2/static/hook-CgOBj93G.js b/compendium_v2/static/hook-CgOBj93G.js
new file mode 100644
index 0000000000000000000000000000000000000000..107af335dfa8b69eb6de5af6031a08b6c214f6c9
--- /dev/null
+++ b/compendium_v2/static/hook-CgOBj93G.js
@@ -0,0 +1 @@
+import{$ as d,r as p}from"./index-DunMf8wQ.js";function m(){return m=Object.assign?Object.assign.bind():function(r){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var e in n)({}).hasOwnProperty.call(n,e)&&(r[e]=n[e])}return r},m.apply(null,arguments)}function b(r){return"default"+r.charAt(0).toUpperCase()+r.substr(1)}function y(r){var t=P(r,"string");return typeof t=="symbol"?t:String(t)}function P(r,t){if(typeof r!="object"||r===null)return r;var n=r[Symbol.toPrimitive];if(n!==void 0){var e=n.call(r,t);if(typeof e!="object")return e;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(r)}function g(r,t,n){var e=p.useRef(r!==void 0),o=p.useState(t),a=o[0],f=o[1],i=r!==void 0,l=e.current;return e.current=i,!i&&l&&a!==t&&f(t),[i?r:a,p.useCallback(function(c){for(var u=arguments.length,v=new Array(u>1?u-1:0),s=1;s<u;s++)v[s-1]=arguments[s];n&&n.apply(void 0,[c].concat(v)),f(c)},[n])]}function j(r,t){return Object.keys(t).reduce(function(n,e){var o,a=n,f=a[b(e)],i=a[e],l=d(a,[b(e),e].map(y)),c=t[e],u=g(i,f,r[c]),v=u[0],s=u[1];return m({},l,(o={},o[e]=v,o[c]=s,o))},r)}export{j as u};
diff --git a/compendium_v2/static/index-C2DQFzVc.js b/compendium_v2/static/index-C2DQFzVc.js
new file mode 100644
index 0000000000000000000000000000000000000000..a5606222c981047525dac4f9eda5554d9b8bf0ad
--- /dev/null
+++ b/compendium_v2/static/index-C2DQFzVc.js
@@ -0,0 +1 @@
+import{r as a,f as h}from"./index-DunMf8wQ.js";import{C as b,t as L,v}from"./useData-DvdT9bkc.js";const C="label";function m(t,e){typeof t=="function"?t(e):t&&(t.current=e)}function B(t,e){const n=t.options;n&&e&&Object.assign(n,e)}function y(t,e){t.labels=e}function E(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:C;const o=[];t.datasets=e.map(s=>{const u=t.datasets.find(i=>i[n]===s[n]);return!u||!s.data||o.includes(u)?{...s}:(o.push(u),Object.assign(u,s),u)})}function T(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:C;const n={labels:[],datasets:[]};return y(n,t.labels),E(n,t.datasets,e),n}function j(t,e){const{height:n=150,width:o=300,redraw:s=!1,datasetIdKey:u,type:i,data:c,options:f,plugins:w=[],fallbackContent:I,updateMode:g,...K}=t,l=a.useRef(null),r=a.useRef(null),d=()=>{l.current&&(r.current=new b(l.current,{type:i,data:T(c,u),options:f&&{...f},plugins:w}),m(e,r.current))},p=()=>{m(e,null),r.current&&(r.current.destroy(),r.current=null)};return a.useEffect(()=>{!s&&r.current&&f&&B(r.current,f)},[s,f]),a.useEffect(()=>{!s&&r.current&&y(r.current.config.data,c.labels)},[s,c.labels]),a.useEffect(()=>{!s&&r.current&&c.datasets&&E(r.current.config.data,c.datasets,u)},[s,c.datasets]),a.useEffect(()=>{r.current&&(s?(p(),setTimeout(d)):r.current.update(g))},[s,f,c.labels,c.datasets,g]),a.useEffect(()=>{r.current&&(p(),setTimeout(d))},[i]),a.useEffect(()=>(d(),()=>p()),[]),h.createElement("canvas",{ref:l,role:"img",height:n,width:o,...K},I)}const D=a.forwardRef(j);function R(t,e){return b.register(e),a.forwardRef((n,o)=>h.createElement(D,{...n,ref:o,type:t}))}const M=R("line",L),P=R("bar",v);export{P as B,M as L};
diff --git a/compendium_v2/static/index-CjWPDfDC.js b/compendium_v2/static/index-CjWPDfDC.js
deleted file mode 100644
index 57bc4695ad91126accc6569b62b0076b782d5057..0000000000000000000000000000000000000000
--- a/compendium_v2/static/index-CjWPDfDC.js
+++ /dev/null
@@ -1 +0,0 @@
-import{r as a,f as h}from"./index.js";import{C as b,t as L,v}from"./useData-CxftshCa.js";const C="label";function m(t,e){typeof t=="function"?t(e):t&&(t.current=e)}function B(t,e){const n=t.options;n&&e&&Object.assign(n,e)}function y(t,e){t.labels=e}function E(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:C;const o=[];t.datasets=e.map(s=>{const u=t.datasets.find(i=>i[n]===s[n]);return!u||!s.data||o.includes(u)?{...s}:(o.push(u),Object.assign(u,s),u)})}function T(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:C;const n={labels:[],datasets:[]};return y(n,t.labels),E(n,t.datasets,e),n}function j(t,e){const{height:n=150,width:o=300,redraw:s=!1,datasetIdKey:u,type:i,data:c,options:f,plugins:w=[],fallbackContent:I,updateMode:g,...K}=t,l=a.useRef(null),r=a.useRef(null),d=()=>{l.current&&(r.current=new b(l.current,{type:i,data:T(c,u),options:f&&{...f},plugins:w}),m(e,r.current))},p=()=>{m(e,null),r.current&&(r.current.destroy(),r.current=null)};return a.useEffect(()=>{!s&&r.current&&f&&B(r.current,f)},[s,f]),a.useEffect(()=>{!s&&r.current&&y(r.current.config.data,c.labels)},[s,c.labels]),a.useEffect(()=>{!s&&r.current&&c.datasets&&E(r.current.config.data,c.datasets,u)},[s,c.datasets]),a.useEffect(()=>{r.current&&(s?(p(),setTimeout(d)):r.current.update(g))},[s,f,c.labels,c.datasets,g]),a.useEffect(()=>{r.current&&(p(),setTimeout(d))},[i]),a.useEffect(()=>(d(),()=>p()),[]),h.createElement("canvas",{ref:l,role:"img",height:n,width:o,...K},I)}const D=a.forwardRef(j);function R(t,e){return b.register(e),a.forwardRef((n,o)=>h.createElement(D,{...n,ref:o,type:t}))}const M=R("line",L),P=R("bar",v);export{P as B,M as L};
diff --git a/compendium_v2/static/index-BGZcCZJE.js b/compendium_v2/static/index-ClpOPiqG.js
similarity index 50%
rename from compendium_v2/static/index-BGZcCZJE.js
rename to compendium_v2/static/index-ClpOPiqG.js
index 4bf28a531c584c876d849e36e2c122bcacdd4bf6..c157b920903b2ded7ebf52ede9256f28c8809505 100644
--- a/compendium_v2/static/index-BGZcCZJE.js
+++ b/compendium_v2/static/index-ClpOPiqG.js
@@ -1,4 +1,4 @@
-import{r as c}from"./index.js";let T={data:""},F=e=>typeof window=="object"?((e?e.querySelector("#_goober"):window._goober)||Object.assign((e||document.head).appendChild(document.createElement("style")),{innerHTML:" ",id:"_goober"})).firstChild:e||T,_=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,H=/\/\*[^]*?\*\/|  +/g,A=/\n+/g,b=(e,t)=>{let a="",o="",i="";for(let r in e){let n=e[r];r[0]=="@"?r[1]=="i"?a=r+" "+n+";":o+=r[1]=="f"?b(n,r):r+"{"+b(n,r[1]=="k"?"":t)+"}":typeof n=="object"?o+=b(n,t?t.replace(/([^,])+/g,s=>r.replace(/([^,]*:\S+\([^)]*\))|([^,])+/g,l=>/&/.test(l)?l.replace(/&/g,s):s?s+" "+l:l)):r):n!=null&&(r=/^--/.test(r)?r:r.replace(/[A-Z]/g,"-$&").toLowerCase(),i+=b.p?b.p(r,n):r+":"+n+";")}return a+(t&&i?t+"{"+i+"}":i)+o},y={},P=e=>{if(typeof e=="object"){let t="";for(let a in e)t+=a+P(e[a]);return t}return e},L=(e,t,a,o,i)=>{let r=P(e),n=y[r]||(y[r]=(l=>{let d=0,u=11;for(;d<l.length;)u=101*u+l.charCodeAt(d++)>>>0;return"go"+u})(r));if(!y[n]){let l=r!==e?e:(d=>{let u,m,f=[{}];for(;u=_.exec(d.replace(H,""));)u[4]?f.shift():u[3]?(m=u[3].replace(A," ").trim(),f.unshift(f[0][m]=f[0][m]||{})):f[0][u[1]]=u[2].replace(A," ").trim();return f[0]})(e);y[n]=b(i?{["@keyframes "+n]:l}:l,a?"":"."+n)}let s=a&&y.g?y.g:null;return a&&(y.g=y[n]),((l,d,u,m)=>{m?d.data=d.data.replace(m,l):d.data.indexOf(l)===-1&&(d.data=u?l+d.data:d.data+l)})(y[n],t,o,s),n},U=(e,t,a)=>e.reduce((o,i,r)=>{let n=t[r];if(n&&n.call){let s=n(a),l=s&&s.props&&s.props.className||/^go/.test(s)&&s;n=l?"."+l:s&&typeof s=="object"?s.props?"":b(s,""):s===!1?"":s}return o+i+(n??"")},"");function j(e){let t=this||{},a=e.call?e(t.p):e;return L(a.unshift?a.raw?U(a,[].slice.call(arguments,1),t.p):a.reduce((o,i)=>Object.assign(o,i&&i.call?i(t.p):i),{}):a,F(t.target),t.g,t.o,t.k)}let I,N,z;j.bind({g:1});let h=j.bind({k:1});function q(e,t,a,o){b.p=t,I=e,N=a,z=o}function x(e,t){let a=this||{};return function(){let o=arguments;function i(r,n){let s=Object.assign({},r),l=s.className||i.className;a.p=Object.assign({theme:N&&N()},s),a.o=/ *go\d+/.test(l),s.className=j.apply(a,o)+(l?" "+l:"");let d=e;return e[0]&&(d=s.as||e,delete s.as),z&&d[0]&&z(s),I(d,s)}return i}}var R=e=>typeof e=="function",O=(e,t)=>R(e)?e(t):e,Y=(()=>{let e=0;return()=>(++e).toString()})(),M=(()=>{let e;return()=>{if(e===void 0&&typeof window<"u"){let t=matchMedia("(prefers-reduced-motion: reduce)");e=!t||t.matches}return e}})(),Z=20,S=(e,t)=>{switch(t.type){case 0:return{...e,toasts:[t.toast,...e.toasts].slice(0,Z)};case 1:return{...e,toasts:e.toasts.map(r=>r.id===t.toast.id?{...r,...t.toast}:r)};case 2:let{toast:a}=t;return S(e,{type:e.toasts.find(r=>r.id===a.id)?1:0,toast:a});case 3:let{toastId:o}=t;return{...e,toasts:e.toasts.map(r=>r.id===o||o===void 0?{...r,dismissed:!0,visible:!1}:r)};case 4:return t.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(r=>r.id!==t.toastId)};case 5:return{...e,pausedAt:t.time};case 6:let i=t.time-(e.pausedAt||0);return{...e,pausedAt:void 0,toasts:e.toasts.map(r=>({...r,pauseDuration:r.pauseDuration+i}))}}},k=[],D={toasts:[],pausedAt:void 0},v=e=>{D=S(D,e),k.forEach(t=>{t(D)})},B={blank:4e3,error:4e3,success:2e3,loading:1/0,custom:4e3},G=(e={})=>{let[t,a]=c.useState(D);c.useEffect(()=>(k.push(a),()=>{let i=k.indexOf(a);i>-1&&k.splice(i,1)}),[t]);let o=t.toasts.map(i=>{var r,n,s;return{...e,...e[i.type],...i,removeDelay:i.removeDelay||((r=e[i.type])==null?void 0:r.removeDelay)||(e==null?void 0:e.removeDelay),duration:i.duration||((n=e[i.type])==null?void 0:n.duration)||(e==null?void 0:e.duration)||B[i.type],style:{...e.style,...(s=e[i.type])==null?void 0:s.style,...i.style}}});return{...t,toasts:o}},J=(e,t="blank",a)=>({createdAt:Date.now(),visible:!0,dismissed:!1,type:t,ariaProps:{role:"status","aria-live":"polite"},message:e,pauseDuration:0,...a,id:(a==null?void 0:a.id)||Y()}),E=e=>(t,a)=>{let o=J(t,e,a);return v({type:2,toast:o}),o.id},p=(e,t)=>E("blank")(e,t);p.error=E("error");p.success=E("success");p.loading=E("loading");p.custom=E("custom");p.dismiss=e=>{v({type:3,toastId:e})};p.remove=e=>v({type:4,toastId:e});p.promise=(e,t,a)=>{let o=p.loading(t.loading,{...a,...a==null?void 0:a.loading});return typeof e=="function"&&(e=e()),e.then(i=>{let r=t.success?O(t.success,i):void 0;return r?p.success(r,{id:o,...a,...a==null?void 0:a.success}):p.dismiss(o),i}).catch(i=>{let r=t.error?O(t.error,i):void 0;r?p.error(r,{id:o,...a,...a==null?void 0:a.error}):p.dismiss(o)}),e};var K=(e,t)=>{v({type:1,toast:{id:e,height:t}})},Q=()=>{v({type:5,time:Date.now()})},w=new Map,V=1e3,W=(e,t=V)=>{if(w.has(e))return;let a=setTimeout(()=>{w.delete(e),v({type:4,toastId:e})},t);w.set(e,a)},X=e=>{let{toasts:t,pausedAt:a}=G(e);c.useEffect(()=>{if(a)return;let r=Date.now(),n=t.map(s=>{if(s.duration===1/0)return;let l=(s.duration||0)+s.pauseDuration-(r-s.createdAt);if(l<0){s.visible&&p.dismiss(s.id);return}return setTimeout(()=>p.dismiss(s.id),l)});return()=>{n.forEach(s=>s&&clearTimeout(s))}},[t,a]);let o=c.useCallback(()=>{a&&v({type:6,time:Date.now()})},[a]),i=c.useCallback((r,n)=>{let{reverseOrder:s=!1,gutter:l=8,defaultPosition:d}=n||{},u=t.filter(g=>(g.position||d)===(r.position||d)&&g.height),m=u.findIndex(g=>g.id===r.id),f=u.filter((g,C)=>C<m&&g.visible).length;return u.filter(g=>g.visible).slice(...s?[f+1]:[0,f]).reduce((g,C)=>g+(C.height||0)+l,0)},[t]);return c.useEffect(()=>{t.forEach(r=>{if(r.dismissed)W(r.id,r.removeDelay);else{let n=w.get(r.id);n&&(clearTimeout(n),w.delete(r.id))}})},[t]),{toasts:t,handlers:{updateHeight:K,startPause:Q,endPause:o,calculateOffset:i}}},ee=h`
+import{r as c}from"./index-DunMf8wQ.js";let T={data:""},F=e=>typeof window=="object"?((e?e.querySelector("#_goober"):window._goober)||Object.assign((e||document.head).appendChild(document.createElement("style")),{innerHTML:" ",id:"_goober"})).firstChild:e||T,_=/(?:([\u0080-\uFFFF\w-%@]+) *:? *([^{;]+?);|([^;}{]*?) *{)|(}\s*)/g,H=/\/\*[^]*?\*\/|  +/g,A=/\n+/g,b=(e,t)=>{let a="",o="",i="";for(let r in e){let n=e[r];r[0]=="@"?r[1]=="i"?a=r+" "+n+";":o+=r[1]=="f"?b(n,r):r+"{"+b(n,r[1]=="k"?"":t)+"}":typeof n=="object"?o+=b(n,t?t.replace(/([^,])+/g,s=>r.replace(/([^,]*:\S+\([^)]*\))|([^,])+/g,l=>/&/.test(l)?l.replace(/&/g,s):s?s+" "+l:l)):r):n!=null&&(r=/^--/.test(r)?r:r.replace(/[A-Z]/g,"-$&").toLowerCase(),i+=b.p?b.p(r,n):r+":"+n+";")}return a+(t&&i?t+"{"+i+"}":i)+o},y={},P=e=>{if(typeof e=="object"){let t="";for(let a in e)t+=a+P(e[a]);return t}return e},L=(e,t,a,o,i)=>{let r=P(e),n=y[r]||(y[r]=(l=>{let d=0,u=11;for(;d<l.length;)u=101*u+l.charCodeAt(d++)>>>0;return"go"+u})(r));if(!y[n]){let l=r!==e?e:(d=>{let u,m,f=[{}];for(;u=_.exec(d.replace(H,""));)u[4]?f.shift():u[3]?(m=u[3].replace(A," ").trim(),f.unshift(f[0][m]=f[0][m]||{})):f[0][u[1]]=u[2].replace(A," ").trim();return f[0]})(e);y[n]=b(i?{["@keyframes "+n]:l}:l,a?"":"."+n)}let s=a&&y.g?y.g:null;return a&&(y.g=y[n]),((l,d,u,m)=>{m?d.data=d.data.replace(m,l):d.data.indexOf(l)===-1&&(d.data=u?l+d.data:d.data+l)})(y[n],t,o,s),n},U=(e,t,a)=>e.reduce((o,i,r)=>{let n=t[r];if(n&&n.call){let s=n(a),l=s&&s.props&&s.props.className||/^go/.test(s)&&s;n=l?"."+l:s&&typeof s=="object"?s.props?"":b(s,""):s===!1?"":s}return o+i+(n??"")},"");function j(e){let t=this||{},a=e.call?e(t.p):e;return L(a.unshift?a.raw?U(a,[].slice.call(arguments,1),t.p):a.reduce((o,i)=>Object.assign(o,i&&i.call?i(t.p):i),{}):a,F(t.target),t.g,t.o,t.k)}let I,N,z;j.bind({g:1});let h=j.bind({k:1});function q(e,t,a,o){b.p=t,I=e,N=a,z=o}function x(e,t){let a=this||{};return function(){let o=arguments;function i(r,n){let s=Object.assign({},r),l=s.className||i.className;a.p=Object.assign({theme:N&&N()},s),a.o=/ *go\d+/.test(l),s.className=j.apply(a,o)+(l?" "+l:"");let d=e;return e[0]&&(d=s.as||e,delete s.as),z&&d[0]&&z(s),I(d,s)}return i}}var R=e=>typeof e=="function",O=(e,t)=>R(e)?e(t):e,Y=(()=>{let e=0;return()=>(++e).toString()})(),M=(()=>{let e;return()=>{if(e===void 0&&typeof window<"u"){let t=matchMedia("(prefers-reduced-motion: reduce)");e=!t||t.matches}return e}})(),Z=20,S=(e,t)=>{switch(t.type){case 0:return{...e,toasts:[t.toast,...e.toasts].slice(0,Z)};case 1:return{...e,toasts:e.toasts.map(r=>r.id===t.toast.id?{...r,...t.toast}:r)};case 2:let{toast:a}=t;return S(e,{type:e.toasts.find(r=>r.id===a.id)?1:0,toast:a});case 3:let{toastId:o}=t;return{...e,toasts:e.toasts.map(r=>r.id===o||o===void 0?{...r,dismissed:!0,visible:!1}:r)};case 4:return t.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(r=>r.id!==t.toastId)};case 5:return{...e,pausedAt:t.time};case 6:let i=t.time-(e.pausedAt||0);return{...e,pausedAt:void 0,toasts:e.toasts.map(r=>({...r,pauseDuration:r.pauseDuration+i}))}}},k=[],D={toasts:[],pausedAt:void 0},v=e=>{D=S(D,e),k.forEach(t=>{t(D)})},B={blank:4e3,error:4e3,success:2e3,loading:1/0,custom:4e3},G=(e={})=>{let[t,a]=c.useState(D);c.useEffect(()=>(k.push(a),()=>{let i=k.indexOf(a);i>-1&&k.splice(i,1)}),[t]);let o=t.toasts.map(i=>{var r,n,s;return{...e,...e[i.type],...i,removeDelay:i.removeDelay||((r=e[i.type])==null?void 0:r.removeDelay)||(e==null?void 0:e.removeDelay),duration:i.duration||((n=e[i.type])==null?void 0:n.duration)||(e==null?void 0:e.duration)||B[i.type],style:{...e.style,...(s=e[i.type])==null?void 0:s.style,...i.style}}});return{...t,toasts:o}},J=(e,t="blank",a)=>({createdAt:Date.now(),visible:!0,dismissed:!1,type:t,ariaProps:{role:"status","aria-live":"polite"},message:e,pauseDuration:0,...a,id:(a==null?void 0:a.id)||Y()}),E=e=>(t,a)=>{let o=J(t,e,a);return v({type:2,toast:o}),o.id},p=(e,t)=>E("blank")(e,t);p.error=E("error");p.success=E("success");p.loading=E("loading");p.custom=E("custom");p.dismiss=e=>{v({type:3,toastId:e})};p.remove=e=>v({type:4,toastId:e});p.promise=(e,t,a)=>{let o=p.loading(t.loading,{...a,...a==null?void 0:a.loading});return typeof e=="function"&&(e=e()),e.then(i=>{let r=t.success?O(t.success,i):void 0;return r?p.success(r,{id:o,...a,...a==null?void 0:a.success}):p.dismiss(o),i}).catch(i=>{let r=t.error?O(t.error,i):void 0;r?p.error(r,{id:o,...a,...a==null?void 0:a.error}):p.dismiss(o)}),e};var K=(e,t)=>{v({type:1,toast:{id:e,height:t}})},Q=()=>{v({type:5,time:Date.now()})},w=new Map,V=1e3,W=(e,t=V)=>{if(w.has(e))return;let a=setTimeout(()=>{w.delete(e),v({type:4,toastId:e})},t);w.set(e,a)},X=e=>{let{toasts:t,pausedAt:a}=G(e);c.useEffect(()=>{if(a)return;let r=Date.now(),n=t.map(s=>{if(s.duration===1/0)return;let l=(s.duration||0)+s.pauseDuration-(r-s.createdAt);if(l<0){s.visible&&p.dismiss(s.id);return}return setTimeout(()=>p.dismiss(s.id),l)});return()=>{n.forEach(s=>s&&clearTimeout(s))}},[t,a]);let o=c.useCallback(()=>{a&&v({type:6,time:Date.now()})},[a]),i=c.useCallback((r,n)=>{let{reverseOrder:s=!1,gutter:l=8,defaultPosition:d}=n||{},u=t.filter(g=>(g.position||d)===(r.position||d)&&g.height),m=u.findIndex(g=>g.id===r.id),f=u.filter((g,C)=>C<m&&g.visible).length;return u.filter(g=>g.visible).slice(...s?[f+1]:[0,f]).reduce((g,C)=>g+(C.height||0)+l,0)},[t]);return c.useEffect(()=>{t.forEach(r=>{if(r.dismissed)W(r.id,r.removeDelay);else{let n=w.get(r.id);n&&(clearTimeout(n),w.delete(r.id))}})},[t]),{toasts:t,handlers:{updateHeight:K,startPause:Q,endPause:o,calculateOffset:i}}},ee=h`
 from {
   transform: scale(0) rotate(45deg);
 	opacity: 0;
diff --git a/compendium_v2/static/index.css b/compendium_v2/static/index-Cv7xX6AU.css
similarity index 100%
rename from compendium_v2/static/index.css
rename to compendium_v2/static/index-Cv7xX6AU.css
diff --git a/compendium_v2/static/index-DSQNfbUQ.js b/compendium_v2/static/index-DSQNfbUQ.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e9f2a04b476450467bf862ac06e3443baa7a34e
--- /dev/null
+++ b/compendium_v2/static/index-DSQNfbUQ.js
@@ -0,0 +1 @@
+import{r as a,_ as c}from"./index-DunMf8wQ.js";const o=a.createContext(null);o.displayName="InputGroupContext";function n(t){return c({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"},child:[]}]})(t)}function e(t){return c({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"},child:[]}]})(t)}export{e as F,n as a,o as c};
diff --git a/compendium_v2/static/index.js b/compendium_v2/static/index-DunMf8wQ.js
similarity index 98%
rename from compendium_v2/static/index.js
rename to compendium_v2/static/index-DunMf8wQ.js
index a3d2323ad38a04bb9c911d9da19ed8c9aeb2d4a2..4b0a22907666f2861286ae68e9eebb00255a4b9c 100644
--- a/compendium_v2/static/index.js
+++ b/compendium_v2/static/index-DunMf8wQ.js
@@ -1,4 +1,4 @@
-const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["Budget-DX8h4kEm.js","index-CjWPDfDC.js","useData-CxftshCa.js","SideBar-CkoMfgfL.js","xlsx-BHRztzV8.js","index-ZGgT6a2u.js","hook-BbhLqP_c.js","charthelpers-B0zLHD4s.js","ChargingStructure-BiXVfonj.js","PillTable-Cnj0nnFy.js","ColorPill-CXvWIfWz.js","Table-ClWM2_rS.js","ECProjects-Ixano_sS.js","NrenYearTable-tQrmAmRo.js","FundingSource-DoZCzgMa.js","chartjs-plugin-datalabels.esm-CjG-nxnq.js","ParentOrganisation-OrE_JaGF.js","StaffGraph-D3mBN476.js","HTMLLegendPlugin-C-L3dIU1.js","StaffGraphAbsolute-I7Y3C-nj.js","SubOrganisation-C7B4_RD0.js","Audits-DfjcC9VL.js","BusinessContinuity-CswNIFcO.js","CentralProcurement-_z44vsb4.js","CorporateStrategy-BrErbevP.js","CrisisExercises-mu7CJTN3.js","CrisisManagement-BxTFYm8e.js","EOSCListings-DWYL3kBM.js","Policy-C19_KfRY.js","SecurityControls-CkjbRt2j.js","ServiceLevelTargets-BQyQ1ynP.js","ServiceManagementFramework-DDW7v-XJ.js","ServicesOffered-BnmNlrgs.js","ScrollableMatrix-Dxr22l4i.js","ConnectedInstitutionsURLs-BSBw8xZy.js","ConnectedUser-DXYx3bSL.js","RemoteCampuses-Bu_1Ucwy.js","AlienWave-DO1S2459.js","AlienWaveInternal-BhuqQCyf.js","Automation-DzfRRQiO.js","CapacityCoreIP-P2rbPvQY.js","CapacityLargestLink-CGhxu47M.js","CertificateProvider-CpWnMPbq.js","DarkFibreLease-Nz1_rVx9.js","DarkFibreInstalled-Uox2eGX8.js","ExternalConnections-BVnV4NEl.js","FibreLight-UtHnGi0p.js","IRUDuration-CI7E3kyS.js","MonitoringTools-C61NJKaR.js","NetworkFunctionVirtualisation-DLW-vjXN.js","NetworkMapUrls-B3Qc49It.js","NonRAndEPeer-Cg_pAdU8.js","OPsAutomation-BoFZP12U.js","PassiveMonitoring-Cv8zkVr2.js","PertTeam-Cf_GEMUq.js","SiemVendors-pjqFJlX2.js","TrafficRatio-BELkAOlA.js","TrafficUrl-BLm4mZku.js","TrafficVolume-1MvPPErr.js","WeatherMap-CZPcsrK6.js","Services-kzZ5IOvA.js","Landing-35TvxyJ6.js","SurveySidebar-CG0gwQ6b.js","survey-3meXCY6T.js","SurveyContainerComponent-DxT_-mC9.js","index-BGZcCZJE.js","survey.core-D1mOb2z9.js","validation-COFmylEH.js","DZ9kPoxi.css","SurveyManagementComponent-DygIuffI.js","lodash-0qAddrJ1.js","UserManagementComponent-DK-BhUBG.js"])))=>i.map(i=>d[i]);
+const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["Budget-DaieNipA.js","index-C2DQFzVc.js","useData-DvdT9bkc.js","SideBar-DC9SKCkF.js","xlsx-BHRztzV8.js","index-DSQNfbUQ.js","hook-CgOBj93G.js","charthelpers-vHYh9qxV.js","ChargingStructure-DXabP1VZ.js","PillTable-DEX_WeNY.js","ColorPill-CXsYrUiQ.js","Table-BUrPWwZB.js","ECProjects-BytaiuC6.js","NrenYearTable-D3mNeVd3.js","FundingSource-CnnYyCrH.js","chartjs-plugin-datalabels.esm-Bb0FwIXw.js","ParentOrganisation-BBwyogJP.js","StaffGraph-nuZcRAf1.js","HTMLLegendPlugin-DF0OaxMQ.js","StaffGraphAbsolute-B_KY3Vzc.js","SubOrganisation-uqygN7-8.js","Audits-CufRH5if.js","BusinessContinuity-BNzcQNhU.js","CentralProcurement-C6FG3PH8.js","CorporateStrategy-we6KtBv4.js","CrisisExercises-miIhkp8m.js","CrisisManagement-PDrUgEjD.js","EOSCListings-H_13YHeq.js","Policy-B0McUfA8.js","SecurityControls-DPvKKslf.js","ServiceLevelTargets-BTUmV26j.js","ServiceManagementFramework-DWirH02M.js","ServicesOffered-C6oTnjq_.js","ScrollableMatrix-D6caiSg1.js","ConnectedInstitutionsURLs-DCBf9aew.js","ConnectedUser-queHyxHS.js","RemoteCampuses-Bh0h6tbY.js","AlienWave-6fWajwYt.js","AlienWaveInternal-Dbz1_Gp9.js","Automation-Dxks_3hH.js","CapacityCoreIP-DiIZVI-s.js","CapacityLargestLink-xwsd4prK.js","CertificateProvider-D9Qr_R-E.js","DarkFibreLease-DVVVHWmb.js","DarkFibreInstalled-DQjFL8rw.js","ExternalConnections-Bw3LdeFf.js","FibreLight-Di0VQOdw.js","IRUDuration-CwtYlEdU.js","MonitoringTools-BGVkCHJR.js","NetworkFunctionVirtualisation-Dkgolz87.js","NetworkMapUrls-U7kWZFCY.js","NonRAndEPeer-Bicp8r4m.js","OPsAutomation-D9uxrxhD.js","PassiveMonitoring-CE6Z1wsB.js","PertTeam-LT8kFC71.js","SiemVendors-W4GM3C-U.js","TrafficRatio-CsniApRI.js","TrafficUrl-0revWiHR.js","TrafficVolume-BMOIGkfu.js","WeatherMap-CEsWOhkH.js","Services-wGbaoPrz.js","Landing-wYnIDduc.js","SurveySidebar-B89Xtwv2.js","survey-3meXCY6T.js","SurveyContainerComponent-TmXjyfKm.js","index-ClpOPiqG.js","survey.core-D1mOb2z9.js","validation-COFmylEH.js","DZ9kPoxi.css","SurveyManagementComponent-Br-7fyx2.js","lodash-DG7dNfcw.js","UserManagementComponent-CAc00ajf.js"])))=>i.map(i=>d[i]);
 var Kg=Object.defineProperty;var $g=(l,n,c)=>n in l?Kg(l,n,{enumerable:!0,configurable:!0,writable:!0,value:c}):l[n]=c;var wm=(l,n,c)=>$g(l,typeof n!="symbol"?n+"":n,c);(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))s(u);new MutationObserver(u=>{for(const f of u)if(f.type==="childList")for(const d of f.addedNodes)d.tagName==="LINK"&&d.rel==="modulepreload"&&s(d)}).observe(document,{childList:!0,subtree:!0});function c(u){const f={};return u.integrity&&(f.integrity=u.integrity),u.referrerPolicy&&(f.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?f.credentials="include":u.crossOrigin==="anonymous"?f.credentials="omit":f.credentials="same-origin",f}function s(u){if(u.ep)return;u.ep=!0;const f=c(u);fetch(u.href,f)}})();var U2=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function fr(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}var to={exports:{}},er={};/**
  * @license React
  * react-jsx-runtime.production.js
@@ -80,4 +80,4 @@ Please change the parent <Route path="${q}"> to <Route path="${q==="/"?"*":`${q}
 	Copyright (c) 2018 Jed Watson.
 	Licensed under the MIT License (MIT), see
 	http://jedwatson.github.io/classnames
-*/var dy;function AE(){return dy||(dy=1,function(l){(function(){var n={}.hasOwnProperty;function c(){for(var f="",d=0;d<arguments.length;d++){var y=arguments[d];y&&(f=u(f,s(y)))}return f}function s(f){if(typeof f=="string"||typeof f=="number")return f;if(typeof f!="object")return"";if(Array.isArray(f))return c.apply(null,f);if(f.toString!==Object.prototype.toString&&!f.toString.toString().includes("[native code]"))return f.toString();var d="";for(var y in f)n.call(f,y)&&f[y]&&(d=u(d,y));return d}function u(f,d){return d?f?f+" "+d:f+d:f}l.exports?(c.default=c,l.exports=c):window.classNames=c})()}(po)),po.exports}var ME=AE();const Ae=fr(ME);function zE(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.includes(s))continue;c[s]=l[s]}return c}function Ao(l,n){return Ao=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(c,s){return c.__proto__=s,c},Ao(l,n)}function LE(l,n){l.prototype=Object.create(n.prototype),l.prototype.constructor=l,Ao(l,n)}const UE=["xxl","xl","lg","md","sm","xs"],HE="xs",Zu=g.createContext({prefixes:{},breakpoints:UE,minBreakpoint:HE});function Qe(l,n){const{prefixes:c}=g.useContext(Zu);return l||c[n]||n}function tp(){const{breakpoints:l}=g.useContext(Zu);return l}function np(){const{minBreakpoint:l}=g.useContext(Zu);return l}function BE(){const{dir:l}=g.useContext(Zu);return l==="rtl"}function Ku(l){return l&&l.ownerDocument||document}function qE(l){var n=Ku(l);return n&&n.defaultView||window}function VE(l,n){return qE(l).getComputedStyle(l,n)}var YE=/([A-Z])/g;function GE(l){return l.replace(YE,"-$1").toLowerCase()}var kE=/^ms-/;function Ou(l){return GE(l).replace(kE,"-ms-")}var XE=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;function QE(l){return!!(l&&XE.test(l))}function gl(l,n){var c="",s="";if(typeof n=="string")return l.style.getPropertyValue(Ou(n))||VE(l).getPropertyValue(Ou(n));Object.keys(n).forEach(function(u){var f=n[u];!f&&f!==0?l.style.removeProperty(Ou(u)):QE(u)?s+=u+"("+f+") ":c+=Ou(u)+": "+f+";"}),s&&(c+="transform: "+s+";"),l.style.cssText+=";"+c}var vo={exports:{}},go,hy;function ZE(){if(hy)return go;hy=1;var l="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";return go=l,go}var Eo,my;function KE(){if(my)return Eo;my=1;var l=ZE();function n(){}function c(){}return c.resetWarningCache=n,Eo=function(){function s(d,y,v,p,b,R){if(R!==l){var S=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw S.name="Invariant Violation",S}}s.isRequired=s;function u(){return s}var f={array:s,bigint:s,bool:s,func:s,number:s,object:s,string:s,symbol:s,any:s,arrayOf:u,element:s,elementType:s,instanceOf:u,node:s,objectOf:u,oneOf:u,oneOfType:u,shape:u,exact:u,checkPropTypes:c,resetWarningCache:n};return f.PropTypes=f,f},Eo}var yy;function $E(){return yy||(yy=1,vo.exports=KE()()),vo.exports}var FE=$E();const fa=fr(FE),py={disabled:!1},ap=Yt.createContext(null);var JE=function(n){return n.scrollTop},cr="unmounted",hl="exited",Ba="entering",yl="entered",Mo="exiting",ha=function(l){LE(n,l);function n(s,u){var f;f=l.call(this,s,u)||this;var d=u,y=d&&!d.isMounting?s.enter:s.appear,v;return f.appearStatus=null,s.in?y?(v=hl,f.appearStatus=Ba):v=yl:s.unmountOnExit||s.mountOnEnter?v=cr:v=hl,f.state={status:v},f.nextCallback=null,f}n.getDerivedStateFromProps=function(u,f){var d=u.in;return d&&f.status===cr?{status:hl}:null};var c=n.prototype;return c.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},c.componentDidUpdate=function(u){var f=null;if(u!==this.props){var d=this.state.status;this.props.in?d!==Ba&&d!==yl&&(f=Ba):(d===Ba||d===yl)&&(f=Mo)}this.updateStatus(!1,f)},c.componentWillUnmount=function(){this.cancelNextCallback()},c.getTimeouts=function(){var u=this.props.timeout,f,d,y;return f=d=y=u,u!=null&&typeof u!="number"&&(f=u.exit,d=u.enter,y=u.appear!==void 0?u.appear:d),{exit:f,enter:d,appear:y}},c.updateStatus=function(u,f){if(u===void 0&&(u=!1),f!==null)if(this.cancelNextCallback(),f===Ba){if(this.props.unmountOnExit||this.props.mountOnEnter){var d=this.props.nodeRef?this.props.nodeRef.current:ii.findDOMNode(this);d&&JE(d)}this.performEnter(u)}else this.performExit();else this.props.unmountOnExit&&this.state.status===hl&&this.setState({status:cr})},c.performEnter=function(u){var f=this,d=this.props.enter,y=this.context?this.context.isMounting:u,v=this.props.nodeRef?[y]:[ii.findDOMNode(this),y],p=v[0],b=v[1],R=this.getTimeouts(),S=y?R.appear:R.enter;if(!u&&!d||py.disabled){this.safeSetState({status:yl},function(){f.props.onEntered(p)});return}this.props.onEnter(p,b),this.safeSetState({status:Ba},function(){f.props.onEntering(p,b),f.onTransitionEnd(S,function(){f.safeSetState({status:yl},function(){f.props.onEntered(p,b)})})})},c.performExit=function(){var u=this,f=this.props.exit,d=this.getTimeouts(),y=this.props.nodeRef?void 0:ii.findDOMNode(this);if(!f||py.disabled){this.safeSetState({status:hl},function(){u.props.onExited(y)});return}this.props.onExit(y),this.safeSetState({status:Mo},function(){u.props.onExiting(y),u.onTransitionEnd(d.exit,function(){u.safeSetState({status:hl},function(){u.props.onExited(y)})})})},c.cancelNextCallback=function(){this.nextCallback!==null&&(this.nextCallback.cancel(),this.nextCallback=null)},c.safeSetState=function(u,f){f=this.setNextCallback(f),this.setState(u,f)},c.setNextCallback=function(u){var f=this,d=!0;return this.nextCallback=function(y){d&&(d=!1,f.nextCallback=null,u(y))},this.nextCallback.cancel=function(){d=!1},this.nextCallback},c.onTransitionEnd=function(u,f){this.setNextCallback(f);var d=this.props.nodeRef?this.props.nodeRef.current:ii.findDOMNode(this),y=u==null&&!this.props.addEndListener;if(!d||y){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var v=this.props.nodeRef?[this.nextCallback]:[d,this.nextCallback],p=v[0],b=v[1];this.props.addEndListener(p,b)}u!=null&&setTimeout(this.nextCallback,u)},c.render=function(){var u=this.state.status;if(u===cr)return null;var f=this.props,d=f.children;f.in,f.mountOnEnter,f.unmountOnExit,f.appear,f.enter,f.exit,f.timeout,f.addEndListener,f.onEnter,f.onEntering,f.onEntered,f.onExit,f.onExiting,f.onExited,f.nodeRef;var y=zE(f,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]);return Yt.createElement(ap.Provider,{value:null},typeof d=="function"?d(u,y):Yt.cloneElement(Yt.Children.only(d),y))},n}(Yt.Component);ha.contextType=ap;ha.propTypes={};function ei(){}ha.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:ei,onEntering:ei,onEntered:ei,onExit:ei,onExiting:ei,onExited:ei};ha.UNMOUNTED=cr;ha.EXITED=hl;ha.ENTERING=Ba;ha.ENTERED=yl;ha.EXITING=Mo;function PE(l){return l.code==="Escape"||l.keyCode===27}function WE(){const l=g.version.split(".");return{major:+l[0],minor:+l[1],patch:+l[2]}}function $u(l){if(!l||typeof l=="function")return null;const{major:n}=WE();return n>=19?l.props.ref:l.ref}const ri=!!(typeof window<"u"&&window.document&&window.document.createElement);var zo=!1,Lo=!1;try{var bo={get passive(){return zo=!0},get once(){return Lo=zo=!0}};ri&&(window.addEventListener("test",bo,bo),window.removeEventListener("test",bo,!0))}catch{}function lp(l,n,c,s){if(s&&typeof s!="boolean"&&!Lo){var u=s.once,f=s.capture,d=c;!Lo&&u&&(d=c.__once||function y(v){this.removeEventListener(n,y,f),c.call(this,v)},c.__once=d),l.addEventListener(n,d,zo?s:f)}l.addEventListener(n,c,s)}function Uo(l,n,c,s){var u=s&&typeof s!="boolean"?s.capture:s;l.removeEventListener(n,c,u),c.__once&&l.removeEventListener(n,c.__once,u)}function Bu(l,n,c,s){return lp(l,n,c,s),function(){Uo(l,n,c,s)}}function IE(l,n,c,s){if(s===void 0&&(s=!0),l){var u=document.createEvent("HTMLEvents");u.initEvent(n,c,s),l.dispatchEvent(u)}}function eb(l){var n=gl(l,"transitionDuration")||"",c=n.indexOf("ms")===-1?1e3:1;return parseFloat(n)*c}function tb(l,n,c){c===void 0&&(c=5);var s=!1,u=setTimeout(function(){s||IE(l,"transitionend",!0)},n+c),f=Bu(l,"transitionend",function(){s=!0},{once:!0});return function(){clearTimeout(u),f()}}function ip(l,n,c,s){c==null&&(c=eb(l)||0);var u=tb(l,c,s),f=Bu(l,"transitionend",n);return function(){u(),f()}}function vy(l,n){const c=gl(l,n)||"",s=c.indexOf("ms")===-1?1e3:1;return parseFloat(c)*s}function nb(l,n){const c=vy(l,"transitionDuration"),s=vy(l,"transitionDelay"),u=ip(l,f=>{f.target===l&&(u(),n(f))},c+s)}function ab(l){l.offsetHeight}const gy=l=>!l||typeof l=="function"?l:n=>{l.current=n};function lb(l,n){const c=gy(l),s=gy(n);return u=>{c&&c(u),s&&s(u)}}function rp(l,n){return g.useMemo(()=>lb(l,n),[l,n])}function ib(l){return l&&"setState"in l?ii.findDOMNode(l):l??null}const rb=Yt.forwardRef(({onEnter:l,onEntering:n,onEntered:c,onExit:s,onExiting:u,onExited:f,addEndListener:d,children:y,childRef:v,...p},b)=>{const R=g.useRef(null),S=rp(R,v),_=N=>{S(ib(N))},O=N=>W=>{N&&R.current&&N(R.current,W)},H=g.useCallback(O(l),[l]),U=g.useCallback(O(n),[n]),M=g.useCallback(O(c),[c]),q=g.useCallback(O(s),[s]),Y=g.useCallback(O(u),[u]),J=g.useCallback(O(f),[f]),k=g.useCallback(O(d),[d]);return h.jsx(ha,{ref:b,...p,onEnter:H,onEntered:M,onEntering:U,onExit:q,onExited:J,onExiting:Y,addEndListener:k,nodeRef:R,children:typeof y=="function"?(N,W)=>y(N,{...W,ref:_}):Yt.cloneElement(y,{ref:_})})});function ub(l){const n=g.useRef(l);return g.useEffect(()=>{n.current=l},[l]),n}function Ho(l){const n=ub(l);return g.useCallback(function(...c){return n.current&&n.current(...c)},[n])}const Po=l=>g.forwardRef((n,c)=>h.jsx("div",{...n,ref:c,className:Ae(n.className,l)}));function cb(l){const n=g.useRef(l);return g.useEffect(()=>{n.current=l},[l]),n}function pl(l){const n=cb(l);return g.useCallback(function(...c){return n.current&&n.current(...c)},[n])}function sb(){const l=g.useRef(!0),n=g.useRef(()=>l.current);return g.useEffect(()=>(l.current=!0,()=>{l.current=!1}),[]),n.current}function ob(l){const n=g.useRef(null);return g.useEffect(()=>{n.current=l}),n.current}const fb=typeof global<"u"&&global.navigator&&global.navigator.product==="ReactNative",db=typeof document<"u",Ey=db||fb?g.useLayoutEffect:g.useEffect,hb=["as","disabled"];function mb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function yb(l){return!l||l.trim()==="#"}function up({tagName:l,disabled:n,href:c,target:s,rel:u,role:f,onClick:d,tabIndex:y=0,type:v}){l||(c!=null||s!=null||u!=null?l="a":l="button");const p={tagName:l};if(l==="button")return[{type:v||"button",disabled:n},p];const b=S=>{if((n||l==="a"&&yb(c))&&S.preventDefault(),n){S.stopPropagation();return}d==null||d(S)},R=S=>{S.key===" "&&(S.preventDefault(),b(S))};return l==="a"&&(c||(c="#"),n&&(c=void 0)),[{role:f??"button",disabled:void 0,tabIndex:n?void 0:y,href:c,target:l==="a"?s:void 0,"aria-disabled":n||void 0,rel:l==="a"?u:void 0,onClick:b,onKeyDown:R},p]}const pb=g.forwardRef((l,n)=>{let{as:c,disabled:s}=l,u=mb(l,hb);const[f,{tagName:d}]=up(Object.assign({tagName:c,disabled:s},u));return h.jsx(d,Object.assign({},u,f,{ref:n}))});pb.displayName="Button";const vb={[Ba]:"show",[yl]:"show"},Wo=g.forwardRef(({className:l,children:n,transitionClasses:c={},onEnter:s,...u},f)=>{const d={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,appear:!1,...u},y=g.useCallback((v,p)=>{ab(v),s==null||s(v,p)},[s]);return h.jsx(rb,{ref:f,addEndListener:nb,...d,onEnter:y,childRef:$u(n),children:(v,p)=>g.cloneElement(n,{...p,className:Ae("fade",l,n.props.className,vb[v],c[v])})})});Wo.displayName="Fade";const gb={"aria-label":fa.string,onClick:fa.func,variant:fa.oneOf(["white"])},Io=g.forwardRef(({className:l,variant:n,"aria-label":c="Close",...s},u)=>h.jsx("button",{ref:u,type:"button",className:Ae("btn-close",n&&`btn-close-${n}`,l),"aria-label":c,...s}));Io.displayName="CloseButton";Io.propTypes=gb;const Bo=g.forwardRef(({as:l,bsPrefix:n,variant:c="primary",size:s,active:u=!1,disabled:f=!1,className:d,...y},v)=>{const p=Qe(n,"btn"),[b,{tagName:R}]=up({tagName:l,disabled:f,...y}),S=R;return h.jsx(S,{...b,...y,ref:v,disabled:f,className:Ae(d,p,u&&"active",c&&`${p}-${c}`,s&&`${p}-${s}`,y.href&&f&&"disabled")})});Bo.displayName="Button";const ef=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-body"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));ef.displayName="CardBody";const cp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-footer"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));cp.displayName="CardFooter";const sp=g.createContext(null);sp.displayName="CardHeaderContext";const op=g.forwardRef(({bsPrefix:l,className:n,as:c="div",...s},u)=>{const f=Qe(l,"card-header"),d=g.useMemo(()=>({cardHeaderBsPrefix:f}),[f]);return h.jsx(sp.Provider,{value:d,children:h.jsx(c,{ref:u,...s,className:Ae(n,f)})})});op.displayName="CardHeader";const fp=g.forwardRef(({bsPrefix:l,className:n,variant:c,as:s="img",...u},f)=>{const d=Qe(l,"card-img");return h.jsx(s,{ref:f,className:Ae(c?`${d}-${c}`:d,n),...u})});fp.displayName="CardImg";const dp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-img-overlay"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));dp.displayName="CardImgOverlay";const hp=g.forwardRef(({className:l,bsPrefix:n,as:c="a",...s},u)=>(n=Qe(n,"card-link"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));hp.displayName="CardLink";const Eb=Po("h6"),mp=g.forwardRef(({className:l,bsPrefix:n,as:c=Eb,...s},u)=>(n=Qe(n,"card-subtitle"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));mp.displayName="CardSubtitle";const yp=g.forwardRef(({className:l,bsPrefix:n,as:c="p",...s},u)=>(n=Qe(n,"card-text"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));yp.displayName="CardText";const bb=Po("h5"),pp=g.forwardRef(({className:l,bsPrefix:n,as:c=bb,...s},u)=>(n=Qe(n,"card-title"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));pp.displayName="CardTitle";const vp=g.forwardRef(({bsPrefix:l,className:n,bg:c,text:s,border:u,body:f=!1,children:d,as:y="div",...v},p)=>{const b=Qe(l,"card");return h.jsx(y,{ref:p,...v,className:Ae(n,b,c&&`bg-${c}`,s&&`text-${s}`,u&&`border-${u}`),children:f?h.jsx(ef,{children:d}):d})});vp.displayName="Card";const Yn=Object.assign(vp,{Img:fp,Title:pp,Subtitle:mp,Body:ef,Link:hp,Text:yp,Header:op,Footer:cp,ImgOverlay:dp});function Sb(l){const n=g.useRef(l);return n.current=l,n}function xb(l){const n=Sb(l);g.useEffect(()=>()=>n.current(),[])}function _b(l,n){return g.Children.toArray(l).some(c=>g.isValidElement(c)&&c.type===n)}function Rb({as:l,bsPrefix:n,className:c,...s}){n=Qe(n,"col");const u=tp(),f=np(),d=[],y=[];return u.forEach(v=>{const p=s[v];delete s[v];let b,R,S;typeof p=="object"&&p!=null?{span:b,offset:R,order:S}=p:b=p;const _=v!==f?`-${v}`:"";b&&d.push(b===!0?`${n}${_}`:`${n}${_}-${b}`),S!=null&&y.push(`order${_}-${S}`),R!=null&&y.push(`offset${_}-${R}`)}),[{...s,className:Ae(c,...d,...y)},{as:l,bsPrefix:n,spans:d}]}const ln=g.forwardRef((l,n)=>{const[{className:c,...s},{as:u="div",bsPrefix:f,spans:d}]=Rb(l);return h.jsx(u,{...s,ref:n,className:Ae(c,!d.length&&f)})});ln.displayName="Col";const Ya=g.forwardRef(({bsPrefix:l,fluid:n=!1,as:c="div",className:s,...u},f)=>{const d=Qe(l,"container"),y=typeof n=="string"?`-${n}`:"-fluid";return h.jsx(c,{ref:f,...u,className:Ae(s,n?`${d}${y}`:d)})});Ya.displayName="Container";var Tb=Function.prototype.bind.call(Function.prototype.call,[].slice);function ti(l,n){return Tb(l.querySelectorAll(n))}function by(l,n){if(l.contains)return l.contains(n);if(l.compareDocumentPosition)return l===n||!!(l.compareDocumentPosition(n)&16)}var So,Sy;function Nb(){if(Sy)return So;Sy=1;var l=function(){};return So=l,So}var Cb=Nb();const q2=fr(Cb),jb="data-rr-ui-";function Ob(l){return`${jb}${l}`}const gp=g.createContext(ri?window:void 0);gp.Provider;function tf(){return g.useContext(gp)}const Db={type:fa.string,tooltip:fa.bool,as:fa.elementType},Fu=g.forwardRef(({as:l="div",className:n,type:c="valid",tooltip:s=!1,...u},f)=>h.jsx(l,{...u,ref:f,className:Ae(n,`${c}-${s?"tooltip":"feedback"}`)}));Fu.displayName="Feedback";Fu.propTypes=Db;const da=g.createContext({}),nf=g.forwardRef(({id:l,bsPrefix:n,className:c,type:s="checkbox",isValid:u=!1,isInvalid:f=!1,as:d="input",...y},v)=>{const{controlId:p}=g.useContext(da);return n=Qe(n,"form-check-input"),h.jsx(d,{...y,ref:v,type:s,id:l||p,className:Ae(c,n,u&&"is-valid",f&&"is-invalid")})});nf.displayName="FormCheckInput";const qu=g.forwardRef(({bsPrefix:l,className:n,htmlFor:c,...s},u)=>{const{controlId:f}=g.useContext(da);return l=Qe(l,"form-check-label"),h.jsx("label",{...s,ref:u,htmlFor:c||f,className:Ae(n,l)})});qu.displayName="FormCheckLabel";const Ep=g.forwardRef(({id:l,bsPrefix:n,bsSwitchPrefix:c,inline:s=!1,reverse:u=!1,disabled:f=!1,isValid:d=!1,isInvalid:y=!1,feedbackTooltip:v=!1,feedback:p,feedbackType:b,className:R,style:S,title:_="",type:O="checkbox",label:H,children:U,as:M="input",...q},Y)=>{n=Qe(n,"form-check"),c=Qe(c,"form-switch");const{controlId:J}=g.useContext(da),k=g.useMemo(()=>({controlId:l||J}),[J,l]),N=!U&&H!=null&&H!==!1||_b(U,qu),W=h.jsx(nf,{...q,type:O==="switch"?"checkbox":O,ref:Y,isValid:d,isInvalid:y,disabled:f,as:M});return h.jsx(da.Provider,{value:k,children:h.jsx("div",{style:S,className:Ae(R,N&&n,s&&`${n}-inline`,u&&`${n}-reverse`,O==="switch"&&c),children:U||h.jsxs(h.Fragment,{children:[W,N&&h.jsx(qu,{title:_,children:H}),p&&h.jsx(Fu,{type:b,tooltip:v,children:p})]})})})});Ep.displayName="FormCheck";const Vu=Object.assign(Ep,{Input:nf,Label:qu}),bp=g.forwardRef(({bsPrefix:l,type:n,size:c,htmlSize:s,id:u,className:f,isValid:d=!1,isInvalid:y=!1,plaintext:v,readOnly:p,as:b="input",...R},S)=>{const{controlId:_}=g.useContext(da);return l=Qe(l,"form-control"),h.jsx(b,{...R,type:n,size:s,ref:S,readOnly:p,id:u||_,className:Ae(f,v?`${l}-plaintext`:l,c&&`${l}-${c}`,n==="color"&&`${l}-color`,d&&"is-valid",y&&"is-invalid")})});bp.displayName="FormControl";const wb=Object.assign(bp,{Feedback:Fu}),Sp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"form-floating"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Sp.displayName="FormFloating";const af=g.forwardRef(({controlId:l,as:n="div",...c},s)=>{const u=g.useMemo(()=>({controlId:l}),[l]);return h.jsx(da.Provider,{value:u,children:h.jsx(n,{...c,ref:s})})});af.displayName="FormGroup";const xp=g.forwardRef(({as:l="label",bsPrefix:n,column:c=!1,visuallyHidden:s=!1,className:u,htmlFor:f,...d},y)=>{const{controlId:v}=g.useContext(da);n=Qe(n,"form-label");let p="col-form-label";typeof c=="string"&&(p=`${p} ${p}-${c}`);const b=Ae(u,n,s&&"visually-hidden",c&&p);return f=f||v,c?h.jsx(ln,{ref:y,as:"label",className:b,htmlFor:f,...d}):h.jsx(l,{ref:y,className:b,htmlFor:f,...d})});xp.displayName="FormLabel";const _p=g.forwardRef(({bsPrefix:l,className:n,id:c,...s},u)=>{const{controlId:f}=g.useContext(da);return l=Qe(l,"form-range"),h.jsx("input",{...s,type:"range",ref:u,className:Ae(n,l),id:c||f})});_p.displayName="FormRange";const Rp=g.forwardRef(({bsPrefix:l,size:n,htmlSize:c,className:s,isValid:u=!1,isInvalid:f=!1,id:d,...y},v)=>{const{controlId:p}=g.useContext(da);return l=Qe(l,"form-select"),h.jsx("select",{...y,size:c,ref:v,className:Ae(s,l,n&&`${l}-${n}`,u&&"is-valid",f&&"is-invalid"),id:d||p})});Rp.displayName="FormSelect";const Tp=g.forwardRef(({bsPrefix:l,className:n,as:c="small",muted:s,...u},f)=>(l=Qe(l,"form-text"),h.jsx(c,{...u,ref:f,className:Ae(n,l,s&&"text-muted")})));Tp.displayName="FormText";const Np=g.forwardRef((l,n)=>h.jsx(Vu,{...l,ref:n,type:"switch"}));Np.displayName="Switch";const Ab=Object.assign(Np,{Input:Vu.Input,Label:Vu.Label}),Cp=g.forwardRef(({bsPrefix:l,className:n,children:c,controlId:s,label:u,...f},d)=>(l=Qe(l,"form-floating"),h.jsxs(af,{ref:d,className:Ae(n,l),controlId:s,...f,children:[c,h.jsx("label",{htmlFor:s,children:u})]})));Cp.displayName="FloatingLabel";const Mb={_ref:fa.any,validated:fa.bool,as:fa.elementType},lf=g.forwardRef(({className:l,validated:n,as:c="form",...s},u)=>h.jsx(c,{...s,ref:u,className:Ae(l,n&&"was-validated")}));lf.displayName="Form";lf.propTypes=Mb;const Du=Object.assign(lf,{Group:af,Control:wb,Floating:Sp,Check:Vu,Switch:Ab,Label:xp,Text:Tp,Range:_p,Select:Rp,FloatingLabel:Cp}),xy=l=>!l||typeof l=="function"?l:n=>{l.current=n};function zb(l,n){const c=xy(l),s=xy(n);return u=>{c&&c(u),s&&s(u)}}function rf(l,n){return g.useMemo(()=>zb(l,n),[l,n])}var wu;function _y(l){if((!wu&&wu!==0||l)&&ri){var n=document.createElement("div");n.style.position="absolute",n.style.top="-9999px",n.style.width="50px",n.style.height="50px",n.style.overflow="scroll",document.body.appendChild(n),wu=n.offsetWidth-n.clientWidth,document.body.removeChild(n)}return wu}function Lb(){return g.useState(null)}function xo(l){l===void 0&&(l=Ku());try{var n=l.activeElement;return!n||!n.nodeName?null:n}catch{return l.body}}function Ub(l){const n=g.useRef(l);return n.current=l,n}function Hb(l){const n=Ub(l);g.useEffect(()=>()=>n.current(),[])}function Bb(l=document){const n=l.defaultView;return Math.abs(n.innerWidth-l.documentElement.clientWidth)}const Ry=Ob("modal-open");class uf{constructor({ownerDocument:n,handleContainerOverflow:c=!0,isRTL:s=!1}={}){this.handleContainerOverflow=c,this.isRTL=s,this.modals=[],this.ownerDocument=n}getScrollbarWidth(){return Bb(this.ownerDocument)}getElement(){return(this.ownerDocument||document).body}setModalAttributes(n){}removeModalAttributes(n){}setContainerStyle(n){const c={overflow:"hidden"},s=this.isRTL?"paddingLeft":"paddingRight",u=this.getElement();n.style={overflow:u.style.overflow,[s]:u.style[s]},n.scrollBarWidth&&(c[s]=`${parseInt(gl(u,s)||"0",10)+n.scrollBarWidth}px`),u.setAttribute(Ry,""),gl(u,c)}reset(){[...this.modals].forEach(n=>this.remove(n))}removeContainerStyle(n){const c=this.getElement();c.removeAttribute(Ry),Object.assign(c.style,n.style)}add(n){let c=this.modals.indexOf(n);return c!==-1||(c=this.modals.length,this.modals.push(n),this.setModalAttributes(n),c!==0)||(this.state={scrollBarWidth:this.getScrollbarWidth(),style:{}},this.handleContainerOverflow&&this.setContainerStyle(this.state)),c}remove(n){const c=this.modals.indexOf(n);c!==-1&&(this.modals.splice(c,1),!this.modals.length&&this.handleContainerOverflow&&this.removeContainerStyle(this.state),this.removeModalAttributes(n))}isTopModal(n){return!!this.modals.length&&this.modals[this.modals.length-1]===n}}const _o=(l,n)=>ri?l==null?(n||Ku()).body:(typeof l=="function"&&(l=l()),l&&"current"in l&&(l=l.current),l&&("nodeType"in l||l.getBoundingClientRect)?l:null):null;function qb(l,n){const c=tf(),[s,u]=g.useState(()=>_o(l,c==null?void 0:c.document));if(!s){const f=_o(l);f&&u(f)}return g.useEffect(()=>{},[n,s]),g.useEffect(()=>{const f=_o(l);f!==s&&u(f)},[l,s]),s}function Vb({children:l,in:n,onExited:c,mountOnEnter:s,unmountOnExit:u}){const f=g.useRef(null),d=g.useRef(n),y=pl(c);g.useEffect(()=>{n?d.current=!0:y(f.current)},[n,y]);const v=rf(f,$u(l)),p=g.cloneElement(l,{ref:v});return n?p:u||!d.current&&s?null:p}const Yb=["onEnter","onEntering","onEntered","onExit","onExiting","onExited","addEndListener","children"];function Gb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function kb(l){let{onEnter:n,onEntering:c,onEntered:s,onExit:u,onExiting:f,onExited:d,addEndListener:y,children:v}=l,p=Gb(l,Yb);const b=g.useRef(null),R=rf(b,$u(v)),S=J=>k=>{J&&b.current&&J(b.current,k)},_=g.useCallback(S(n),[n]),O=g.useCallback(S(c),[c]),H=g.useCallback(S(s),[s]),U=g.useCallback(S(u),[u]),M=g.useCallback(S(f),[f]),q=g.useCallback(S(d),[d]),Y=g.useCallback(S(y),[y]);return Object.assign({},p,{nodeRef:b},n&&{onEnter:_},c&&{onEntering:O},s&&{onEntered:H},u&&{onExit:U},f&&{onExiting:M},d&&{onExited:q},y&&{addEndListener:Y},{children:typeof v=="function"?(J,k)=>v(J,Object.assign({},k,{ref:R})):g.cloneElement(v,{ref:R})})}const Xb=["component"];function Qb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}const Zb=g.forwardRef((l,n)=>{let{component:c}=l,s=Qb(l,Xb);const u=kb(s);return h.jsx(c,Object.assign({ref:n},u))});function Kb({in:l,onTransition:n}){const c=g.useRef(null),s=g.useRef(!0),u=pl(n);return Ey(()=>{if(!c.current)return;let f=!1;return u({in:l,element:c.current,initial:s.current,isStale:()=>f}),()=>{f=!0}},[l,u]),Ey(()=>(s.current=!1,()=>{s.current=!0}),[]),c}function $b({children:l,in:n,onExited:c,onEntered:s,transition:u}){const[f,d]=g.useState(!n);n&&f&&d(!1);const y=Kb({in:!!n,onTransition:p=>{const b=()=>{p.isStale()||(p.in?s==null||s(p.element,p.initial):(d(!0),c==null||c(p.element)))};Promise.resolve(u(p)).then(b,R=>{throw p.in||d(!0),R})}}),v=rf(y,$u(l));return f&&!n?null:g.cloneElement(l,{ref:v})}function Ty(l,n,c){return l?h.jsx(Zb,Object.assign({},c,{component:l})):n?h.jsx($b,Object.assign({},c,{transition:n})):h.jsx(Vb,Object.assign({},c))}const Fb=["show","role","className","style","children","backdrop","keyboard","onBackdropClick","onEscapeKeyDown","transition","runTransition","backdropTransition","runBackdropTransition","autoFocus","enforceFocus","restoreFocus","restoreFocusOptions","renderDialog","renderBackdrop","manager","container","onShow","onHide","onExit","onExited","onExiting","onEnter","onEntering","onEntered"];function Jb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}let Ro;function Pb(l){return Ro||(Ro=new uf({ownerDocument:l==null?void 0:l.document})),Ro}function Wb(l){const n=tf(),c=l||Pb(n),s=g.useRef({dialog:null,backdrop:null});return Object.assign(s.current,{add:()=>c.add(s.current),remove:()=>c.remove(s.current),isTopModal:()=>c.isTopModal(s.current),setDialogRef:g.useCallback(u=>{s.current.dialog=u},[]),setBackdropRef:g.useCallback(u=>{s.current.backdrop=u},[])})}const jp=g.forwardRef((l,n)=>{let{show:c=!1,role:s="dialog",className:u,style:f,children:d,backdrop:y=!0,keyboard:v=!0,onBackdropClick:p,onEscapeKeyDown:b,transition:R,runTransition:S,backdropTransition:_,runBackdropTransition:O,autoFocus:H=!0,enforceFocus:U=!0,restoreFocus:M=!0,restoreFocusOptions:q,renderDialog:Y,renderBackdrop:J=De=>h.jsx("div",Object.assign({},De)),manager:k,container:N,onShow:W,onHide:ie=()=>{},onExit:X,onExited:I,onExiting:de,onEnter:Ne,onEntering:Ye,onEntered:Be}=l,ze=Jb(l,Fb);const K=tf(),ce=qb(N),ne=Wb(k),Re=sb(),T=ob(c),[Q,le]=g.useState(!c),te=g.useRef(null);g.useImperativeHandle(n,()=>ne,[ne]),ri&&!T&&c&&(te.current=xo(K==null?void 0:K.document)),c&&Q&&le(!1);const P=pl(()=>{if(ne.add(),Ee.current=Bu(document,"keydown",Ce),Le.current=Bu(document,"focus",()=>setTimeout(ye),!0),W&&W(),H){var De,Rt;const St=xo((De=(Rt=ne.dialog)==null?void 0:Rt.ownerDocument)!=null?De:K==null?void 0:K.document);ne.dialog&&St&&!by(ne.dialog,St)&&(te.current=St,ne.dialog.focus())}}),ge=pl(()=>{if(ne.remove(),Ee.current==null||Ee.current(),Le.current==null||Le.current(),M){var De;(De=te.current)==null||De.focus==null||De.focus(q),te.current=null}});g.useEffect(()=>{!c||!ce||P()},[c,ce,P]),g.useEffect(()=>{Q&&ge()},[Q,ge]),Hb(()=>{ge()});const ye=pl(()=>{if(!U||!Re()||!ne.isTopModal())return;const De=xo(K==null?void 0:K.document);ne.dialog&&De&&!by(ne.dialog,De)&&ne.dialog.focus()}),Je=pl(De=>{De.target===De.currentTarget&&(p==null||p(De),y===!0&&ie())}),Ce=pl(De=>{v&&PE(De)&&ne.isTopModal()&&(b==null||b(De),De.defaultPrevented||ie())}),Le=g.useRef(),Ee=g.useRef(),Ze=(...De)=>{le(!0),I==null||I(...De)};if(!ce)return null;const vt=Object.assign({role:s,ref:ne.setDialogRef,"aria-modal":s==="dialog"?!0:void 0},ze,{style:f,className:u,tabIndex:-1});let it=Y?Y(vt):h.jsx("div",Object.assign({},vt,{children:g.cloneElement(d,{role:"document"})}));it=Ty(R,S,{unmountOnExit:!0,mountOnEnter:!0,appear:!0,in:!!c,onExit:X,onExiting:de,onExited:Ze,onEnter:Ne,onEntering:Ye,onEntered:Be,children:it});let lt=null;return y&&(lt=J({ref:ne.setBackdropRef,onClick:Je}),lt=Ty(_,O,{in:!!c,appear:!0,mountOnEnter:!0,unmountOnExit:!0,children:lt})),h.jsx(h.Fragment,{children:ii.createPortal(h.jsxs(h.Fragment,{children:[lt,it]}),ce)})});jp.displayName="Modal";const Ib=Object.assign(jp,{Manager:uf});function eS(l,n){return l.classList?l.classList.contains(n):(" "+(l.className.baseVal||l.className)+" ").indexOf(" "+n+" ")!==-1}function tS(l,n){l.classList?l.classList.add(n):eS(l,n)||(typeof l.className=="string"?l.className=l.className+" "+n:l.setAttribute("class",(l.className&&l.className.baseVal||"")+" "+n))}function Ny(l,n){return l.replace(new RegExp("(^|\\s)"+n+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}function nS(l,n){l.classList?l.classList.remove(n):typeof l.className=="string"?l.className=Ny(l.className,n):l.setAttribute("class",Ny(l.className&&l.className.baseVal||"",n))}const ni={FIXED_CONTENT:".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",STICKY_CONTENT:".sticky-top",NAVBAR_TOGGLER:".navbar-toggler"};class aS extends uf{adjustAndStore(n,c,s){const u=c.style[n];c.dataset[n]=u,gl(c,{[n]:`${parseFloat(gl(c,n))+s}px`})}restore(n,c){const s=c.dataset[n];s!==void 0&&(delete c.dataset[n],gl(c,{[n]:s}))}setContainerStyle(n){super.setContainerStyle(n);const c=this.getElement();if(tS(c,"modal-open"),!n.scrollBarWidth)return;const s=this.isRTL?"paddingLeft":"paddingRight",u=this.isRTL?"marginLeft":"marginRight";ti(c,ni.FIXED_CONTENT).forEach(f=>this.adjustAndStore(s,f,n.scrollBarWidth)),ti(c,ni.STICKY_CONTENT).forEach(f=>this.adjustAndStore(u,f,-n.scrollBarWidth)),ti(c,ni.NAVBAR_TOGGLER).forEach(f=>this.adjustAndStore(u,f,n.scrollBarWidth))}removeContainerStyle(n){super.removeContainerStyle(n);const c=this.getElement();nS(c,"modal-open");const s=this.isRTL?"paddingLeft":"paddingRight",u=this.isRTL?"marginLeft":"marginRight";ti(c,ni.FIXED_CONTENT).forEach(f=>this.restore(s,f)),ti(c,ni.STICKY_CONTENT).forEach(f=>this.restore(u,f)),ti(c,ni.NAVBAR_TOGGLER).forEach(f=>this.restore(u,f))}}let To;function lS(l){return To||(To=new aS(l)),To}const Op=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"modal-body"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Op.displayName="ModalBody";const Dp=g.createContext({onHide(){}}),cf=g.forwardRef(({bsPrefix:l,className:n,contentClassName:c,centered:s,size:u,fullscreen:f,children:d,scrollable:y,...v},p)=>{l=Qe(l,"modal");const b=`${l}-dialog`,R=typeof f=="string"?`${l}-fullscreen-${f}`:`${l}-fullscreen`;return h.jsx("div",{...v,ref:p,className:Ae(b,n,u&&`${l}-${u}`,s&&`${b}-centered`,y&&`${b}-scrollable`,f&&R),children:h.jsx("div",{className:Ae(`${l}-content`,c),children:d})})});cf.displayName="ModalDialog";const wp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"modal-footer"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));wp.displayName="ModalFooter";const iS=g.forwardRef(({closeLabel:l="Close",closeVariant:n,closeButton:c=!1,onHide:s,children:u,...f},d)=>{const y=g.useContext(Dp),v=Ho(()=>{y==null||y.onHide(),s==null||s()});return h.jsxs("div",{ref:d,...f,children:[u,c&&h.jsx(Io,{"aria-label":l,variant:n,onClick:v})]})}),Ap=g.forwardRef(({bsPrefix:l,className:n,closeLabel:c="Close",closeButton:s=!1,...u},f)=>(l=Qe(l,"modal-header"),h.jsx(iS,{ref:f,...u,className:Ae(n,l),closeLabel:c,closeButton:s})));Ap.displayName="ModalHeader";const rS=Po("h4"),Mp=g.forwardRef(({className:l,bsPrefix:n,as:c=rS,...s},u)=>(n=Qe(n,"modal-title"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Mp.displayName="ModalTitle";function uS(l){return h.jsx(Wo,{...l,timeout:null})}function cS(l){return h.jsx(Wo,{...l,timeout:null})}const zp=g.forwardRef(({bsPrefix:l,className:n,style:c,dialogClassName:s,contentClassName:u,children:f,dialogAs:d=cf,"data-bs-theme":y,"aria-labelledby":v,"aria-describedby":p,"aria-label":b,show:R=!1,animation:S=!0,backdrop:_=!0,keyboard:O=!0,onEscapeKeyDown:H,onShow:U,onHide:M,container:q,autoFocus:Y=!0,enforceFocus:J=!0,restoreFocus:k=!0,restoreFocusOptions:N,onEntered:W,onExit:ie,onExiting:X,onEnter:I,onEntering:de,onExited:Ne,backdropClassName:Ye,manager:Be,...ze},K)=>{const[ce,ne]=g.useState({}),[Re,T]=g.useState(!1),Q=g.useRef(!1),le=g.useRef(!1),te=g.useRef(null),[P,ge]=Lb(),ye=rp(K,ge),Je=Ho(M),Ce=BE();l=Qe(l,"modal");const Le=g.useMemo(()=>({onHide:Je}),[Je]);function Ee(){return Be||lS({isRTL:Ce})}function Ze(_e){if(!ri)return;const Ie=Ee().getScrollbarWidth()>0,Gt=_e.scrollHeight>Ku(_e).documentElement.clientHeight;ne({paddingRight:Ie&&!Gt?_y():void 0,paddingLeft:!Ie&&Gt?_y():void 0})}const vt=Ho(()=>{P&&Ze(P.dialog)});xb(()=>{Uo(window,"resize",vt),te.current==null||te.current()});const it=()=>{Q.current=!0},lt=_e=>{Q.current&&P&&_e.target===P.dialog&&(le.current=!0),Q.current=!1},De=()=>{T(!0),te.current=ip(P.dialog,()=>{T(!1)})},Rt=_e=>{_e.target===_e.currentTarget&&De()},St=_e=>{if(_==="static"){Rt(_e);return}if(le.current||_e.target!==_e.currentTarget){le.current=!1;return}M==null||M()},Pt=_e=>{O?H==null||H(_e):(_e.preventDefault(),_==="static"&&De())},Zt=(_e,Ie)=>{_e&&Ze(_e),I==null||I(_e,Ie)},un=_e=>{te.current==null||te.current(),ie==null||ie(_e)},cn=(_e,Ie)=>{de==null||de(_e,Ie),lp(window,"resize",vt)},Ut=_e=>{_e&&(_e.style.display=""),Ne==null||Ne(_e),Uo(window,"resize",vt)},Ht=g.useCallback(_e=>h.jsx("div",{..._e,className:Ae(`${l}-backdrop`,Ye,!S&&"show")}),[S,Ye,l]),mt={...c,...ce};mt.display="block";const Kt=_e=>h.jsx("div",{role:"dialog",..._e,style:mt,className:Ae(n,l,Re&&`${l}-static`,!S&&"show"),onClick:_?St:void 0,onMouseUp:lt,"data-bs-theme":y,"aria-label":b,"aria-labelledby":v,"aria-describedby":p,children:h.jsx(d,{...ze,onMouseDown:it,className:s,contentClassName:u,children:f})});return h.jsx(Dp.Provider,{value:Le,children:h.jsx(Ib,{show:R,ref:ye,backdrop:_,container:q,keyboard:!0,autoFocus:Y,enforceFocus:J,restoreFocus:k,restoreFocusOptions:N,onEscapeKeyDown:Pt,onShow:U,onHide:M,onEnter:Zt,onEntering:cn,onEntered:W,onExit:un,onExiting:X,onExited:Ut,manager:Ee(),transition:S?uS:void 0,backdropTransition:S?cS:void 0,renderBackdrop:Ht,renderDialog:Kt})})});zp.displayName="Modal";const ir=Object.assign(zp,{Body:Op,Header:Ap,Title:Mp,Footer:wp,Dialog:cf,TRANSITION_DURATION:300,BACKDROP_TRANSITION_DURATION:150}),Rn=g.forwardRef(({bsPrefix:l,className:n,as:c="div",...s},u)=>{const f=Qe(l,"row"),d=tp(),y=np(),v=`${f}-cols`,p=[];return d.forEach(b=>{const R=s[b];delete s[b];let S;R!=null&&typeof R=="object"?{cols:S}=R:S=R;const _=b!==y?`-${b}`:"";S!=null&&p.push(`${v}${_}-${S}`)}),h.jsx(c,{ref:u,...s,className:Ae(n,f,...p)})});Rn.displayName="Row";const sS="/static/DY3vaYXT.svg";function oS(){const l=Ke.c(6),{user:n}=g.useContext(Fo),{pathname:c}=Xn();let s;l[0]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx(ln,{xs:10,children:h.jsx("div",{className:"nav-wrapper",children:h.jsxs("nav",{className:"header-nav",children:[h.jsx("a",{href:"https://geant.org/",children:h.jsx("img",{src:sS,alt:"GÉANT Logo"})}),h.jsxs("ul",{children:[h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://network.geant.org/",children:"NETWORK"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://geant.org/services/",children:"SERVICES"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://community.geant.org/",children:"COMMUNITY"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://tnc23.geant.org/",children:"TNC"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://geant.org/projects/",children:"PROJECTS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://connect.geant.org/",children:"CONNECT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://impact.geant.org/",children:"IMPACT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://careers.geant.org/",children:"CAREERS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://about.geant.org/",children:"ABOUT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://connect.geant.org/community-news",children:"NEWS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://resources.geant.org/",children:"RESOURCES"})}),h.jsx("li",{children:h.jsx(Tn,{className:"nav-link-entry",to:"/",children:"COMPENDIUM"})})]})]})})}),l[0]=s):s=l[0];let u;l[1]!==c||l[2]!==n.permissions.admin?(u=n.permissions.admin&&!c.includes("survey")&&h.jsx("div",{className:"nav-link",style:{float:"right"},children:h.jsx(Tn,{className:"nav-link-entry",to:"/survey",children:h.jsx("span",{children:"Go to Survey"})})}),l[1]=c,l[2]=n.permissions.admin,l[3]=u):u=l[3];let f;return l[4]!==u?(f=h.jsx("div",{className:"external-page-nav-bar",children:h.jsx(Ya,{children:h.jsxs(Rn,{children:[s,h.jsx(ln,{xs:2,children:u})]})})}),l[4]=u,l[5]=f):f=l[5],f}const fS="/static/A3T3A-a_.svg",dS="/static/DOOiIGTs.png";function hS(){const l=Ke.c(9);let n;l[0]===Symbol.for("react.memo_cache_sentinel")?(n=h.jsx("a",{href:"https://geant.org",children:h.jsx("img",{src:fS,className:"m-3",style:{maxWidth:"100px"},alt:"GÉANT Logo"})}),l[0]=n):n=l[0];let c;l[1]===Symbol.for("react.memo_cache_sentinel")?(c=h.jsxs(ln,{children:[n,h.jsx("img",{src:dS,className:"m-3",style:{maxWidth:"200px"},alt:"European Union Flag"})]}),l[1]=c):c=l[1];let s,u;l[2]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/Disclaimer/",children:"Disclaimer"}),u=h.jsx("wbr",{}),l[2]=s,l[3]=u):(s=l[2],u=l[3]);let f,d;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/geant-anti-slavery-policy/",children:"GEANT Anti‑Slavery Policy"}),d=h.jsx("wbr",{}),l[4]=f,l[5]=d):(f=l[4],d=l[5]);let y,v;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/Privacy-Notice/",children:"Privacy Policy"}),v=h.jsx("wbr",{}),l[6]=y,l[7]=v):(y=l[6],v=l[7]);let p;return l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx("footer",{className:"page-footer pt-3",children:h.jsx(Ya,{children:h.jsxs(Rn,{children:[c,h.jsx(ln,{className:"mt-4 text-end",children:h.jsxs("span",{children:[s,u,"|",f,d,"|",y,v,"|",h.jsx("a",{className:"mx-3 footer-link",style:{cursor:"pointer"},onClick:mS,children:"Analytics Consent"})]})})]})})}),l[8]=p):p=l[8],p}function mS(){localStorage.removeItem("matomo_consent"),window.location.reload()}const Lp="/static/C4lsyu6A.svg",Up="/static/DhA-EmEc.svg";function Hp(){const l=Ke.c(16),n=g.useContext(ep);let c;l[0]!==n?(c=O=>n==null?void 0:n.trackPageView(O),l[0]=n,l[1]=c):c=l[1];const s=c;let u;l[2]!==n?(u=O=>n==null?void 0:n.trackEvent(O),l[2]=n,l[3]=u):u=l[3];const f=u;let d;l[4]!==n?(d=()=>n==null?void 0:n.trackEvents(),l[4]=n,l[5]=d):d=l[5];const y=d;let v;l[6]!==n?(v=O=>n==null?void 0:n.trackLink(O),l[6]=n,l[7]=v):v=l[7];const p=v,b=yS;let R;l[8]!==n?(R=(O,...H)=>{const U=H;n==null||n.pushInstruction(O,...U)},l[8]=n,l[9]=R):R=l[9];const S=R;let _;return l[10]!==S||l[11]!==f||l[12]!==y||l[13]!==p||l[14]!==s?(_={trackEvent:f,trackEvents:y,trackPageView:s,trackLink:p,enableLinkTracking:b,pushInstruction:S},l[10]=S,l[11]=f,l[12]=y,l[13]=p,l[14]=s,l[15]=_):_=l[15],_}function yS(){}function Bp(){const l=Ke.c(13),{trackPageView:n}=Hp();let c,s;l[0]!==n?(c=()=>{n({documentTitle:"GEANT Compendium Landing Page"})},s=[n],l[0]=n,l[1]=c,l[2]=s):(c=l[1],s=l[2]),g.useEffect(c,s);let u;l[3]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx("h1",{className:"geant-header",children:"THE GÉANT COMPENDIUM OF NRENS"}),l[3]=u):u=l[3];let f;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(Rn,{children:h.jsxs("div",{className:"center-text",children:[u,h.jsxs("div",{className:"wordwrap pt-4",children:[h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"Each year GÉANT invites European National Research and Eduction Networks to fill in a questionnaire asking about their network, their organisation, standards and policies, connected users, and the services they offer their users. This Compendium of responses is an authoritative reference source for anyone with an interest in the development of research and education networking in Europe and beyond. No two NRENs are identical, with great diversity in their structures, funding, size, and focus."}),h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"The GÉANT Compendium of NRENs Report is published annually, using both data from the Compendium from other sources, including surveys and studies carried out within different teams within GÉANT and the NREN community. The Report gives a broad overview of the European NREN landscape, identifying developments and trends."}),h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"Compendium Data, the responses from the NRENs, are made available to be viewed and downloaded. Graphs, charts, and tables can be customised to show as many or few NRENs as required, across different years. These can be downloaded as images or in PDF form."})]})]})}),l[4]=f):f=l[4];let d;l[5]===Symbol.for("react.memo_cache_sentinel")?(d={backgroundColor:"white"},l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y={width:"18rem"},l[6]=y):y=l[6];let v;l[7]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx(Yn.Img,{src:Lp}),l[7]=v):v=l[7];let p;l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx(Yn.Title,{children:"Compendium Data"}),l[8]=p):p=l[8];let b;l[9]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx(ln,{align:"center",children:h.jsx(Yn,{border:"light",style:y,children:h.jsxs(Tn,{to:"/data",className:"link-text",children:[v,h.jsxs(Yn.Body,{children:[p,h.jsx(Yn.Text,{children:h.jsx("span",{children:"Statistical representation of the annual Compendium Survey data is available here"})})]})]})})}),l[9]=b):b=l[9];let R;l[10]===Symbol.for("react.memo_cache_sentinel")?(R={width:"18rem"},l[10]=R):R=l[10];let S;l[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx(Yn.Img,{src:Up}),l[11]=S):S=l[11];let _;return l[12]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsxs(Ya,{className:"py-5 grey-container",children:[f,h.jsx(Rn,{children:h.jsx(ln,{children:h.jsx(Ya,{style:d,className:"rounded-border",children:h.jsxs(Rn,{className:"justify-content-md-center",children:[b,h.jsx(ln,{align:"center",children:h.jsx(Yn,{border:"light",style:R,children:h.jsxs("a",{href:"https://resources.geant.org/geant-compendia/",className:"link-text",target:"_blank",rel:"noreferrer",children:[S,h.jsxs(Yn.Body,{children:[h.jsx(Yn.Title,{children:"Compendium Reports"}),h.jsx(Yn.Text,{children:"A GÉANT Compendium Report is published annually, drawing on data from the Compendium Survey filled in by NRENs, complemented by information from other surveys"})]})]})})})]})})})})]}),l[12]=_):_=l[12],_}var qp={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},Cy=Yt.createContext&&Yt.createContext(qp),pS=["attr","size","title"];function vS(l,n){if(l==null)return{};var c=gS(l,n),s,u;if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(l);for(u=0;u<f.length;u++)s=f[u],!(n.indexOf(s)>=0)&&Object.prototype.propertyIsEnumerable.call(l,s)&&(c[s]=l[s])}return c}function gS(l,n){if(l==null)return{};var c={};for(var s in l)if(Object.prototype.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function Yu(){return Yu=Object.assign?Object.assign.bind():function(l){for(var n=1;n<arguments.length;n++){var c=arguments[n];for(var s in c)Object.prototype.hasOwnProperty.call(c,s)&&(l[s]=c[s])}return l},Yu.apply(this,arguments)}function jy(l,n){var c=Object.keys(l);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(l);n&&(s=s.filter(function(u){return Object.getOwnPropertyDescriptor(l,u).enumerable})),c.push.apply(c,s)}return c}function Gu(l){for(var n=1;n<arguments.length;n++){var c=arguments[n]!=null?arguments[n]:{};n%2?jy(Object(c),!0).forEach(function(s){ES(l,s,c[s])}):Object.getOwnPropertyDescriptors?Object.defineProperties(l,Object.getOwnPropertyDescriptors(c)):jy(Object(c)).forEach(function(s){Object.defineProperty(l,s,Object.getOwnPropertyDescriptor(c,s))})}return l}function ES(l,n,c){return n=bS(n),n in l?Object.defineProperty(l,n,{value:c,enumerable:!0,configurable:!0,writable:!0}):l[n]=c,l}function bS(l){var n=SS(l,"string");return typeof n=="symbol"?n:n+""}function SS(l,n){if(typeof l!="object"||!l)return l;var c=l[Symbol.toPrimitive];if(c!==void 0){var s=c.call(l,n||"default");if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(n==="string"?String:Number)(l)}function Vp(l){return l&&l.map((n,c)=>Yt.createElement(n.tag,Gu({key:c},n.attr),Vp(n.child)))}function Yp(l){return n=>Yt.createElement(xS,Yu({attr:Gu({},l.attr)},n),Vp(l.child))}function xS(l){var n=c=>{var{attr:s,size:u,title:f}=l,d=vS(l,pS),y=u||c.size||"1em",v;return c.className&&(v=c.className),l.className&&(v=(v?v+" ":"")+l.className),Yt.createElement("svg",Yu({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},c.attr,s,d,{className:v,style:Gu(Gu({color:l.color||c.color},c.style),l.style),height:y,width:y,xmlns:"http://www.w3.org/2000/svg"}),f&&Yt.createElement("title",null,f),l.children)};return Cy!==void 0?Yt.createElement(Cy.Consumer,null,c=>n(c)):n(qp)}function _S(l){return Yp({tag:"svg",attr:{viewBox:"0 0 1024 1024",fill:"currentColor",fillRule:"evenodd"},child:[{tag:"path",attr:{d:"M799.855 166.312c.023.007.043.018.084.059l57.69 57.69c.041.041.052.06.059.084a.118.118 0 0 1 0 .069c-.007.023-.018.042-.059.083L569.926 512l287.703 287.703c.041.04.052.06.059.083a.118.118 0 0 1 0 .07c-.007.022-.018.042-.059.083l-57.69 57.69c-.041.041-.06.052-.084.059a.118.118 0 0 1-.069 0c-.023-.007-.042-.018-.083-.059L512 569.926 224.297 857.629c-.04.041-.06.052-.083.059a.118.118 0 0 1-.07 0c-.022-.007-.042-.018-.083-.059l-57.69-57.69c-.041-.041-.052-.06-.059-.084a.118.118 0 0 1 0-.069c.007-.023.018-.042.059-.083L454.073 512 166.371 224.297c-.041-.04-.052-.06-.059-.083a.118.118 0 0 1 0-.07c.007-.022.018-.042.059-.083l57.69-57.69c.041-.041.06-.052.084-.059a.118.118 0 0 1 .069 0c.023.007.042.018.083.059L512 454.073l287.703-287.702c.04-.041.06-.052.083-.059a.118.118 0 0 1 .07 0Z"},child:[]}]})(l)}function RS(l){return Yp({tag:"svg",attr:{viewBox:"0 0 1024 1024"},child:[{tag:"path",attr:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8Z"},child:[]},{tag:"path",attr:{d:"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8Z"},child:[]}]})(l)}const rr=l=>{const n=Ke.c(23),{title:c,children:s,startCollapsed:u,theme:f}=l,d=f===void 0?"":f,[y,v]=g.useState(!!u);let p;n[0]===Symbol.for("react.memo_cache_sentinel")?(p={color:"white",paddingBottom:"3px",marginTop:"3px",marginLeft:"3px",scale:"1.3"},n[0]=p):p=n[0];let b=p;if(d){let k;n[1]===Symbol.for("react.memo_cache_sentinel")?(k={...b,color:"black",fontWeight:"bold"},n[1]=k):k=n[1],b=k}const R=`collapsible-box${d} p-0`;let S;n[2]!==c?(S=h.jsx(ln,{children:h.jsx("h1",{className:"bold-caps-16pt dark-teal pt-3 ps-3",children:c})}),n[2]=c,n[3]=S):S=n[3];const _=`toggle-btn${d} p-${d?3:2}`;let O;n[4]!==y?(O=()=>v(!y),n[4]=y,n[5]=O):O=n[5];let H;n[6]!==y||n[7]!==b?(H=y?h.jsx(RS,{style:b}):h.jsx(_S,{style:b}),n[6]=y,n[7]=b,n[8]=H):H=n[8];let U;n[9]!==_||n[10]!==O||n[11]!==H?(U=h.jsx(ln,{className:"flex-grow-0 flex-shrink-1",children:h.jsx("div",{className:_,onClick:O,children:H})}),n[9]=_,n[10]=O,n[11]=H,n[12]=U):U=n[12];let M;n[13]!==S||n[14]!==U?(M=h.jsxs(Rn,{children:[S,U]}),n[13]=S,n[14]=U,n[15]=M):M=n[15];const q=`collapsible-content${y?" collapsed":""}`;let Y;n[16]!==s||n[17]!==q?(Y=h.jsx("div",{className:q,children:s}),n[16]=s,n[17]=q,n[18]=Y):Y=n[18];let J;return n[19]!==Y||n[20]!==R||n[21]!==M?(J=h.jsxs("div",{className:R,children:[M,Y]}),n[19]=Y,n[20]=R,n[21]=M,n[22]=J):J=n[22],J};function TS(l){const n=Ke.c(8),{section:c}=l;let s;n[0]===Symbol.for("react.memo_cache_sentinel")?(s={display:"flex",alignSelf:"right",lineHeight:"1.5rem",marginTop:"0.5rem"},n[0]=s):s=n[0];let u,f;n[1]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx("br",{}),f={float:"right"},n[1]=u,n[2]=f):(u=n[1],f=n[2]);let d;n[3]!==c?(d=h.jsx("div",{style:s,children:h.jsxs("span",{children:["Compendium ",u,h.jsx("span",{style:f,children:c})]})}),n[3]=c,n[4]=d):d=n[4];let y;n[5]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("img",{src:Up,style:{maxWidth:"4rem"},alt:"Compendium Data logo"}),n[5]=y):y=n[5];let v;return n[6]!==d?(v=h.jsxs("div",{className:"bold-caps-17pt section-container",children:[d,y]}),n[6]=d,n[7]=v):v=n[7],v}function NS(l){const n=Ke.c(14),{type:c}=l;let s="";c=="data"?s=" compendium-data-header":c=="reports"&&(s=" compendium-reports-header");let u;n[0]===Symbol.for("react.memo_cache_sentinel")?(u={marginTop:"0.5rem"},n[0]=u):u=n[0];const f=c==="data"?"/data":"/";let d;n[1]===Symbol.for("react.memo_cache_sentinel")?(d={textDecoration:"none",color:"white"},n[1]=d):d=n[1];const y=c==="data"?"Data":"Reports";let v;n[2]!==y?(v=h.jsxs("span",{children:["Compendium ",y]}),n[2]=y,n[3]=v):v=n[3];let p;n[4]!==f||n[5]!==v?(p=h.jsx(ln,{sm:8,children:h.jsx("h1",{className:"bold-caps-30pt",style:u,children:h.jsx(Tn,{to:f,style:d,children:v})})}),n[4]=f,n[5]=v,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b={color:"inherit"},n[7]=b):b=n[7];let R;n[8]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx(ln,{sm:4,children:h.jsx("a",{style:b,href:"https://resources.geant.org/geant-compendia/",target:"_blank",rel:"noreferrer",children:h.jsx(TS,{section:"Reports"})})}),n[8]=R):R=n[8];let S;n[9]!==p?(S=h.jsx(Ya,{children:h.jsxs(Rn,{children:[p,R]})}),n[9]=p,n[10]=S):S=n[10];let _;return n[11]!==s||n[12]!==S?(_=h.jsx("div",{className:s,children:S}),n[11]=s,n[12]=S,n[13]=_):_=n[13],_}function CS(l){const n=Ke.c(8),{children:c,type:s}=l;let u="";s=="data"?u=" compendium-data-banner":s=="reports"&&(u=" compendium-reports-banner");let f,d;n[0]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx("img",{src:Lp,style:{maxWidth:"7rem",marginBottom:"1rem"},alt:"Compendium Data logo"}),d={display:"flex",alignSelf:"right"},n[0]=f,n[1]=d):(f=n[0],d=n[1]);let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y={paddingTop:"1rem"},n[2]=y):y=n[2];let v;n[3]!==c?(v=h.jsx(Ya,{children:h.jsx(Rn,{children:h.jsx(Rn,{children:h.jsxs("div",{className:"section-container",children:[f,h.jsx("div",{style:d,children:h.jsx("div",{className:"center-text",style:y,children:c})})]})})})}),n[3]=c,n[4]=v):v=n[4];let p;return n[5]!==u||n[6]!==v?(p=h.jsx("div",{className:u,children:v}),n[5]=u,n[6]=v,n[7]=p):p=n[7],p}var li=(l=>(l.Organisation="ORGANISATION",l.Policy="STANDARDS AND POLICIES",l.ConnectedUsers="CONNECTED USERS",l.Network="NETWORK",l.Services="SERVICES",l))(li||{}),jS=(l=>(l.CSV="CSV",l.EXCEL="EXCEL",l))(jS||{}),OS=(l=>(l.PNG="png",l.JPEG="jpeg",l.SVG="svg",l))(OS||{});const V2={universities:"Universities & Other (ISCED 6-8)",further_education:"Further education (ISCED 4-5)",secondary_schools:"Secondary schools (ISCED 2-3)",primary_schools:"Primary schools (ISCED 1)",institutes:"Research Institutes",cultural:"Libraries, Museums, Archives, Cultural institutions",hospitals:"Non-university public Hospitals",government:"Government departments (national, regional, local)",iros:"International (virtual) research organisations",for_profit_orgs:"For-profit organisations"},Y2={commercial_r_and_e:"Commercial R&E traffic only",commercial_general:"Commercial general",commercial_collaboration:"Commercial for collaboration only (project/time limited)",commercial_service_provider:"Commercial Service Provider",university_spin_off:"University Spin Off/Incubator"},G2={collaboration:"Connection to your network for collaboration with R&E users",service_supplier:"Connection to your network for supplying services for R&E",direct_peering:"Direct peering (e.g. direct peering or cloud peering)"};function DS(){const l=Ke.c(7),{preview:n,setPreview:c}=g.useContext(Iy),{user:s}=g.useContext(Fo),[u]=lE();let f;l[0]!==u?(f=u.get("preview"),l[0]=u,l[1]=f):f=l[1];const d=f;let y,v;return l[2]!==d||l[3]!==c||l[4]!==s?(y=()=>{d!==null&&(s.permissions.admin||s.role=="observer")&&c(!0)},v=[d,c,s],l[2]=d,l[3]=c,l[4]=s,l[5]=y,l[6]=v):(y=l[5],v=l[6]),g.useEffect(y,v),n}function yr(l){const n=Ke.c(9),{to:c,children:s}=l,u=window.location.pathname===c,f=g.useRef(null);let d,y;n[0]!==u?(d=()=>{u&&f.current&&f.current.scrollIntoView({behavior:"smooth",block:"center"})},y=[u],n[0]=u,n[1]=d,n[2]=y):(d=n[1],y=n[2]),g.useEffect(d,y);let v;n[3]!==s||n[4]!==u?(v=u?h.jsx("b",{children:s}):s,n[3]=s,n[4]=u,n[5]=v):v=n[5];let p;return n[6]!==v||n[7]!==c?(p=h.jsx(Rn,{children:h.jsx(Tn,{to:c,className:"link-text-underline",ref:f,children:v})}),n[6]=v,n[7]=c,n[8]=p):p=n[8],p}const se={budget:"Budget of NRENs per Year",funding:"Income Source of NRENs",charging:"Charging Mechanism of NRENs","employee-count":"Number of NREN Employees",roles:"Roles of NREN employees (Technical v. Non-Technical)",employment:"Types of Employment within NRENs",suborganisations:"NREN Sub-Organisations",parentorganisation:"NREN Parent Organisations","ec-projects":"NREN Involvement in European Commission Projects",policy:"NREN Policies",audits:"External and Internal Audits of Information Security Management Systems","business-continuity":"NREN Business Continuity Planning","central-procurement":"Value of Software Procured for Customers by NRENs","crisis-management":"Crisis Management Procedures","crisis-exercise":"Crisis Exercises - NREN Operation and Participation",eosc_listings:"NREN Services Listed on the EOSC Portal","security-control":"Security Controls Used by NRENs","services-offered":"Services Offered by NRENs by Types of Users","corporate-strategy":"NREN Corporate Strategies","service-level-targets":"NRENs Offering Service Level Targets","service-management-framework":"NRENs Operating a Formal Service Management Framework","institutions-urls":"Webpages Listing Institutions and Organisations Connected to NREN Networks","connected-proportion":"Proportion of Different Categories of Institutions Served by NRENs","connectivity-level":"Level of IP Connectivity by Institution Type","connection-carrier":"Methods of Carrying IP Traffic to Users","connectivity-load":"Connectivity Load","connectivity-growth":"Connectivity Growth","remote-campuses":"NREN Connectivity to Remote Campuses in Other Countries","commercial-charging-level":"Commercial Charging Level","commercial-connectivity":"Commercial Connectivity","traffic-volume":"NREN Traffic - NREN Customers & External Networks","iru-duration":"Average Duration of IRU leases of Fibre by NRENs","fibre-light":"Approaches to lighting NREN fibre networks","dark-fibre-lease":"Kilometres of Leased Dark Fibre (National)","dark-fibre-lease-international":"Kilometres of Leased Dark Fibre (International)","dark-fibre-installed":"Kilometres of Installed Dark Fibre","network-map":"NREN Network Maps","monitoring-tools":"Tools for Monitoring or Troubleshooting the Network - Offered to Client Institutions","pert-team":"NRENs with Performance Enhancement Response Teams","passive-monitoring":"Methods for Passively Monitoring International Traffic","traffic-stats":"Traffic Statistics","weather-map":"NREN Online Network Weather Maps","certificate-provider":"Certification Services used by NRENs","siem-vendors":"Vendors of SIEM/SOC systems used by NRENs","alien-wave":"NREN Use of 3rd Party Alienwave/Lightpath Services","alien-wave-internal":"Internal NREN Use of Alien Waves","capacity-largest-link":"Capacity of the Largest Link in an NREN Network","external-connections":"NREN External IP Connections","capacity-core-ip":"NREN Core IP Capacity","non-rne-peers":"Number of Non-R&E Networks NRENs Peer With","traffic-ratio":"Types of traffic in NREN networks (Commodity v. Research & Education)","ops-automation":"NREN Automation of Operational Processes","network-automation":"Network Tasks for which NRENs Use Automation",nfv:"Kinds of Network Function Virtualisation used by NRENs","network-services":"NREN Network services matrix","isp-support-services":"NREN ISP support services matrix","security-services":"NREN Security services matrix","identity-services":"NREN Identity services matrix","collaboration-services":"NREN Collaboration services matrix","multimedia-services":"NREN Multimedia services matrix","storage-and-hosting-services":"NREN Storage and hosting services matrix","professional-services":"NREN Professional services matrix"};function wS(l){const n=Ke.c(52),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Organisation"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Budget, Income and Billing"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se.budget}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/budget",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se.funding}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/funding",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se.charging}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/charging",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O,H;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("hr",{className:"fake-divider"}),H=h.jsx("h6",{className:"section-title",children:"Staff and Projects"}),n[15]=O,n[16]=H):(O=n[15],H=n[16]);let U;n[17]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["employee-count"]}),n[17]=U):U=n[17];let M;n[18]!==u||n[19]!==f?(M=h.jsx(u,{to:"/employee-count",className:f,children:U}),n[18]=u,n[19]=f,n[20]=M):M=n[20];let q;n[21]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se.employment}),n[21]=q):q=n[21];let Y;n[22]!==u||n[23]!==f?(Y=h.jsx(u,{to:"/employment",className:f,children:q}),n[22]=u,n[23]=f,n[24]=Y):Y=n[24];let J;n[25]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("span",{children:se.roles}),n[25]=J):J=n[25];let k;n[26]!==u||n[27]!==f?(k=h.jsx(u,{to:"/roles",className:f,children:J}),n[26]=u,n[27]=f,n[28]=k):k=n[28];let N;n[29]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:se.parentorganisation}),n[29]=N):N=n[29];let W;n[30]!==u||n[31]!==f?(W=h.jsx(u,{to:"/parentorganisation",className:f,children:N}),n[30]=u,n[31]=f,n[32]=W):W=n[32];let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se.suborganisations}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/suborganisations",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["ec-projects"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/ec-projects",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;return n[41]!==M||n[42]!==Y||n[43]!==k||n[44]!==W||n[45]!==d||n[46]!==X||n[47]!==de||n[48]!==p||n[49]!==R||n[50]!==_?(Ne=h.jsxs(h.Fragment,{children:[d,y,p,R,_,O,H,M,Y,k,W,X,de]}),n[41]=M,n[42]=Y,n[43]=k,n[44]=W,n[45]=d,n[46]=X,n[47]=de,n[48]=p,n[49]=R,n[50]=_,n[51]=Ne):Ne=n[51],Ne}function AS(l){const n=Ke.c(61),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Standards And Policies"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Policy & Portfolio"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["corporate-strategy"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/corporate-strategy",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se.policy}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/policy",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["central-procurement"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/central-procurement",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["service-management-framework"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/service-management-framework",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["service-level-targets"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/service-level-targets",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["services-offered"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/services-offered",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("h6",{className:"section-title",children:"Standards"}),n[27]=J):J=n[27];let k;n[28]===Symbol.for("react.memo_cache_sentinel")?(k=h.jsx("span",{children:se.audits}),n[28]=k):k=n[28];let N;n[29]!==u||n[30]!==f?(N=h.jsx(u,{to:"/audits",className:f,children:k}),n[29]=u,n[30]=f,n[31]=N):N=n[31];let W;n[32]===Symbol.for("react.memo_cache_sentinel")?(W=h.jsx("span",{children:se["business-continuity"]}),n[32]=W):W=n[32];let ie;n[33]!==u||n[34]!==f?(ie=h.jsx(u,{to:"/business-continuity",className:f,children:W}),n[33]=u,n[34]=f,n[35]=ie):ie=n[35];let X;n[36]===Symbol.for("react.memo_cache_sentinel")?(X=h.jsx("span",{children:se["crisis-management"]}),n[36]=X):X=n[36];let I;n[37]!==u||n[38]!==f?(I=h.jsx(u,{to:"/crisis-management",className:f,children:X}),n[37]=u,n[38]=f,n[39]=I):I=n[39];let de;n[40]===Symbol.for("react.memo_cache_sentinel")?(de=h.jsx("span",{children:se["crisis-exercise"]}),n[40]=de):de=n[40];let Ne;n[41]!==u||n[42]!==f?(Ne=h.jsx(u,{to:"/crisis-exercise",className:f,children:de}),n[41]=u,n[42]=f,n[43]=Ne):Ne=n[43];let Ye;n[44]===Symbol.for("react.memo_cache_sentinel")?(Ye=h.jsx("span",{children:se["security-control"]}),n[44]=Ye):Ye=n[44];let Be;n[45]!==u||n[46]!==f?(Be=h.jsx(u,{to:"/security-control",className:f,children:Ye}),n[45]=u,n[46]=f,n[47]=Be):Be=n[47];let ze;return n[48]!==H||n[49]!==M||n[50]!==Y||n[51]!==N||n[52]!==d||n[53]!==ie||n[54]!==I||n[55]!==Ne||n[56]!==Be||n[57]!==p||n[58]!==R||n[59]!==_?(ze=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,J,N,ie,I,Ne,Be]}),n[48]=H,n[49]=M,n[50]=Y,n[51]=N,n[52]=d,n[53]=ie,n[54]=I,n[55]=Ne,n[56]=Be,n[57]=p,n[58]=R,n[59]=_,n[60]=ze):ze=n[60],ze}function MS(l){const n=Ke.c(52),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Connected Users"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Connected Users"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["institutions-urls"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/institutions-urls",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se["connected-proportion"]}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/connected-proportion",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["connectivity-level"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/connectivity-level",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["connection-carrier"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/connection-carrier",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["connectivity-load"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/connectivity-load",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["connectivity-growth"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/connectivity-growth",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("span",{children:se["remote-campuses"]}),n[27]=J):J=n[27];let k;n[28]!==u||n[29]!==f?(k=h.jsx(u,{to:"/remote-campuses",className:f,children:J}),n[28]=u,n[29]=f,n[30]=k):k=n[30];let N,W;n[31]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("hr",{className:"fake-divider"}),W=h.jsx("h6",{className:"section-title",children:"Connected Users - Commercial"}),n[31]=N,n[32]=W):(N=n[31],W=n[32]);let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se["commercial-charging-level"]}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/commercial-charging-level",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["commercial-connectivity"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/commercial-connectivity",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;return n[41]!==H||n[42]!==M||n[43]!==Y||n[44]!==k||n[45]!==d||n[46]!==X||n[47]!==de||n[48]!==p||n[49]!==R||n[50]!==_?(Ne=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,k,N,W,X,de]}),n[41]=H,n[42]=M,n[43]=Y,n[44]=k,n[45]=d,n[46]=X,n[47]=de,n[48]=p,n[49]=R,n[50]=_,n[51]=Ne):Ne=n[51],Ne}function zS(l){const n=Ke.c(133),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Network"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Connectivity"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["dark-fibre-lease"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/dark-fibre-lease",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se["dark-fibre-lease-international"]}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/dark-fibre-lease-international",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["iru-duration"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/iru-duration",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["dark-fibre-installed"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/dark-fibre-installed",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["fibre-light"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/fibre-light",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["network-map"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/network-map",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J,k;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("hr",{className:"fake-divider"}),k=h.jsx("h6",{className:"section-title",children:"Performance Monitoring & Management"}),n[27]=J,n[28]=k):(J=n[27],k=n[28]);let N;n[29]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:se["monitoring-tools"]}),n[29]=N):N=n[29];let W;n[30]!==u||n[31]!==f?(W=h.jsx(u,{to:"/monitoring-tools",className:f,children:N}),n[30]=u,n[31]=f,n[32]=W):W=n[32];let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se["passive-monitoring"]}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/passive-monitoring",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["traffic-stats"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/traffic-stats",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;n[41]===Symbol.for("react.memo_cache_sentinel")?(Ne=h.jsx("span",{children:se["siem-vendors"]}),n[41]=Ne):Ne=n[41];let Ye;n[42]!==u||n[43]!==f?(Ye=h.jsx(u,{to:"/siem-vendors",className:f,children:Ne}),n[42]=u,n[43]=f,n[44]=Ye):Ye=n[44];let Be;n[45]===Symbol.for("react.memo_cache_sentinel")?(Be=h.jsx("span",{children:se["certificate-provider"]}),n[45]=Be):Be=n[45];let ze;n[46]!==u||n[47]!==f?(ze=h.jsx(u,{to:"/certificate-providers",className:f,children:Be}),n[46]=u,n[47]=f,n[48]=ze):ze=n[48];let K;n[49]===Symbol.for("react.memo_cache_sentinel")?(K=h.jsx("span",{children:se["weather-map"]}),n[49]=K):K=n[49];let ce;n[50]!==u||n[51]!==f?(ce=h.jsx(u,{to:"/weather-map",className:f,children:K}),n[50]=u,n[51]=f,n[52]=ce):ce=n[52];let ne;n[53]===Symbol.for("react.memo_cache_sentinel")?(ne=h.jsx("span",{children:se["pert-team"]}),n[53]=ne):ne=n[53];let Re;n[54]!==u||n[55]!==f?(Re=h.jsx(u,{to:"/pert-team",className:f,children:ne}),n[54]=u,n[55]=f,n[56]=Re):Re=n[56];let T,Q;n[57]===Symbol.for("react.memo_cache_sentinel")?(T=h.jsx("hr",{className:"fake-divider"}),Q=h.jsx("h6",{className:"section-title",children:"Alienwave"}),n[57]=T,n[58]=Q):(T=n[57],Q=n[58]);let le;n[59]===Symbol.for("react.memo_cache_sentinel")?(le=h.jsx("span",{children:se["alien-wave"]}),n[59]=le):le=n[59];let te;n[60]!==u||n[61]!==f?(te=h.jsx(u,{to:"/alien-wave",className:f,children:le}),n[60]=u,n[61]=f,n[62]=te):te=n[62];let P;n[63]===Symbol.for("react.memo_cache_sentinel")?(P=h.jsx("span",{children:se["alien-wave-internal"]}),n[63]=P):P=n[63];let ge;n[64]!==u||n[65]!==f?(ge=h.jsx(u,{to:"/alien-wave-internal",className:f,children:P}),n[64]=u,n[65]=f,n[66]=ge):ge=n[66];let ye,Je;n[67]===Symbol.for("react.memo_cache_sentinel")?(ye=h.jsx("hr",{className:"fake-divider"}),Je=h.jsx("h6",{className:"section-title",children:"Capacity"}),n[67]=ye,n[68]=Je):(ye=n[67],Je=n[68]);let Ce;n[69]===Symbol.for("react.memo_cache_sentinel")?(Ce=h.jsx("span",{children:se["capacity-largest-link"]}),n[69]=Ce):Ce=n[69];let Le;n[70]!==u||n[71]!==f?(Le=h.jsx(u,{to:"/capacity-largest-link",className:f,children:Ce}),n[70]=u,n[71]=f,n[72]=Le):Le=n[72];let Ee;n[73]===Symbol.for("react.memo_cache_sentinel")?(Ee=h.jsx("span",{children:se["capacity-core-ip"]}),n[73]=Ee):Ee=n[73];let Ze;n[74]!==u||n[75]!==f?(Ze=h.jsx(u,{to:"/capacity-core-ip",className:f,children:Ee}),n[74]=u,n[75]=f,n[76]=Ze):Ze=n[76];let vt;n[77]===Symbol.for("react.memo_cache_sentinel")?(vt=h.jsx("span",{children:se["external-connections"]}),n[77]=vt):vt=n[77];let it;n[78]!==u||n[79]!==f?(it=h.jsx(u,{to:"/external-connections",className:f,children:vt}),n[78]=u,n[79]=f,n[80]=it):it=n[80];let lt;n[81]===Symbol.for("react.memo_cache_sentinel")?(lt=h.jsx("span",{children:se["non-rne-peers"]}),n[81]=lt):lt=n[81];let De;n[82]!==u||n[83]!==f?(De=h.jsx(u,{to:"/non-rne-peers",className:f,children:lt}),n[82]=u,n[83]=f,n[84]=De):De=n[84];let Rt;n[85]===Symbol.for("react.memo_cache_sentinel")?(Rt=h.jsx("span",{children:se["traffic-volume"]}),n[85]=Rt):Rt=n[85];let St;n[86]!==u||n[87]!==f?(St=h.jsx(u,{to:"/traffic-volume",className:f,children:Rt}),n[86]=u,n[87]=f,n[88]=St):St=n[88];let Pt;n[89]===Symbol.for("react.memo_cache_sentinel")?(Pt=h.jsx("span",{children:se["traffic-ratio"]}),n[89]=Pt):Pt=n[89];let Zt;n[90]!==u||n[91]!==f?(Zt=h.jsx(u,{to:"/traffic-ratio",className:f,children:Pt}),n[90]=u,n[91]=f,n[92]=Zt):Zt=n[92];let un,cn;n[93]===Symbol.for("react.memo_cache_sentinel")?(un=h.jsx("hr",{className:"fake-divider"}),cn=h.jsx("h6",{className:"section-title",children:"Software-Defined Networking (SDN) & Network Function Virtualisation(NFV)"}),n[93]=un,n[94]=cn):(un=n[93],cn=n[94]);let Ut;n[95]===Symbol.for("react.memo_cache_sentinel")?(Ut=h.jsx("span",{children:se["ops-automation"]}),n[95]=Ut):Ut=n[95];let Ht;n[96]!==u||n[97]!==f?(Ht=h.jsx(u,{to:"/ops-automation",className:f,children:Ut}),n[96]=u,n[97]=f,n[98]=Ht):Ht=n[98];let mt;n[99]===Symbol.for("react.memo_cache_sentinel")?(mt=h.jsx("span",{children:se.nfv}),n[99]=mt):mt=n[99];let Kt;n[100]!==u||n[101]!==f?(Kt=h.jsx(u,{to:"/nfv",className:f,children:mt}),n[100]=u,n[101]=f,n[102]=Kt):Kt=n[102];let _e;n[103]===Symbol.for("react.memo_cache_sentinel")?(_e=h.jsx("span",{children:se["network-automation"]}),n[103]=_e):_e=n[103];let Ie;n[104]!==u||n[105]!==f?(Ie=h.jsx(u,{to:"/network-automation",className:f,children:_e}),n[104]=u,n[105]=f,n[106]=Ie):Ie=n[106];let Gt;return n[107]!==H||n[108]!==M||n[109]!==Y||n[110]!==W||n[111]!==d||n[112]!==X||n[113]!==de||n[114]!==Ye||n[115]!==ze||n[116]!==ce||n[117]!==Re||n[118]!==te||n[119]!==ge||n[120]!==Le||n[121]!==Ze||n[122]!==it||n[123]!==De||n[124]!==St||n[125]!==p||n[126]!==Zt||n[127]!==Ht||n[128]!==Kt||n[129]!==Ie||n[130]!==R||n[131]!==_?(Gt=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,J,k,W,X,de,Ye,ze,ce,Re,T,Q,te,ge,ye,Je,Le,Ze,it,De,St,Zt,un,cn,Ht,Kt,Ie]}),n[107]=H,n[108]=M,n[109]=Y,n[110]=W,n[111]=d,n[112]=X,n[113]=de,n[114]=Ye,n[115]=ze,n[116]=ce,n[117]=Re,n[118]=te,n[119]=ge,n[120]=Le,n[121]=Ze,n[122]=it,n[123]=De,n[124]=St,n[125]=p,n[126]=Zt,n[127]=Ht,n[128]=Kt,n[129]=Ie,n[130]=R,n[131]=_,n[132]=Gt):Gt=n[132],Gt}function LS(l){const n=Ke.c(44),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Services"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("span",{children:se["network-services"]}),n[2]=y):y=n[2];let v;n[3]!==u||n[4]!==f?(v=h.jsx(u,{to:"/network-services",className:f,children:y}),n[3]=u,n[4]=f,n[5]=v):v=n[5];let p;n[6]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx("span",{children:se["isp-support-services"]}),n[6]=p):p=n[6];let b;n[7]!==u||n[8]!==f?(b=h.jsx(u,{to:"/isp-support-services",className:f,children:p}),n[7]=u,n[8]=f,n[9]=b):b=n[9];let R;n[10]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx("span",{children:se["security-services"]}),n[10]=R):R=n[10];let S;n[11]!==u||n[12]!==f?(S=h.jsx(u,{to:"/security-services",className:f,children:R}),n[11]=u,n[12]=f,n[13]=S):S=n[13];let _;n[14]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsx("span",{children:se["identity-services"]}),n[14]=_):_=n[14];let O;n[15]!==u||n[16]!==f?(O=h.jsx(u,{to:"/identity-services",className:f,children:_}),n[15]=u,n[16]=f,n[17]=O):O=n[17];let H;n[18]===Symbol.for("react.memo_cache_sentinel")?(H=h.jsx("span",{children:se["storage-and-hosting-services"]}),n[18]=H):H=n[18];let U;n[19]!==u||n[20]!==f?(U=h.jsx(u,{to:"/storage-and-hosting-services",className:f,children:H}),n[19]=u,n[20]=f,n[21]=U):U=n[21];let M;n[22]===Symbol.for("react.memo_cache_sentinel")?(M=h.jsx("span",{children:se["multimedia-services"]}),n[22]=M):M=n[22];let q;n[23]!==u||n[24]!==f?(q=h.jsx(u,{to:"/multimedia-services",className:f,children:M}),n[23]=u,n[24]=f,n[25]=q):q=n[25];let Y;n[26]===Symbol.for("react.memo_cache_sentinel")?(Y=h.jsx("span",{children:se["collaboration-services"]}),n[26]=Y):Y=n[26];let J;n[27]!==u||n[28]!==f?(J=h.jsx(u,{to:"/collaboration-services",className:f,children:Y}),n[27]=u,n[28]=f,n[29]=J):J=n[29];let k;n[30]===Symbol.for("react.memo_cache_sentinel")?(k=h.jsx("span",{children:se["professional-services"]}),n[30]=k):k=n[30];let N;n[31]!==u||n[32]!==f?(N=h.jsx(u,{to:"/professional-services",className:f,children:k}),n[31]=u,n[32]=f,n[33]=N):N=n[33];let W;return n[34]!==O||n[35]!==U||n[36]!==q||n[37]!==J||n[38]!==N||n[39]!==d||n[40]!==v||n[41]!==b||n[42]!==S?(W=h.jsxs(h.Fragment,{children:[d,v,b,S,O,U,q,J,N]}),n[34]=O,n[35]=U,n[36]=q,n[37]=J,n[38]=N,n[39]=d,n[40]=v,n[41]=b,n[42]=S,n[43]=W):W=n[43],W}function US(){const l=Ke.c(10);DS();const{trackPageView:n}=Hp();let c,s;l[0]!==n?(c=()=>{n({documentTitle:"Compendium Data"})},s=[n],l[0]=n,l[1]=c,l[2]=s):(c=l[1],s=l[2]),Yt.useEffect(c,s);let u;l[3]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx(NS,{type:"data"}),l[3]=u):u=l[3];let f;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(CS,{type:"data",children:h.jsx("p",{className:"wordwrap",children:"The GÉANT Compendium provides an authoritative reference source for anyone with an interest in the development of research and education networking in Europe and beyond. Published since 2001, the Compendium provides information on key areas such as users, services, traffic, budget and staffing."})}),l[4]=f):f=l[4];let d;l[5]===Symbol.for("react.memo_cache_sentinel")?(d=h.jsx(rr,{title:li.Organisation,children:h.jsx(wS,{})}),l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx(rr,{title:li.Policy,startCollapsed:!0,children:h.jsx(AS,{})}),l[6]=y):y=l[6];let v;l[7]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx(rr,{title:li.ConnectedUsers,startCollapsed:!0,children:h.jsx(MS,{})}),l[7]=v):v=l[7];let p;l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx(rr,{title:li.Network,startCollapsed:!0,children:h.jsx(zS,{})}),l[8]=p):p=l[8];let b;return l[9]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsxs(h.Fragment,{children:[u,f,h.jsx(Ya,{className:"mt-5 mb-5",children:h.jsxs(Rn,{children:[d,y,v,p,h.jsx(rr,{title:li.Services,startCollapsed:!0,children:h.jsx(LS,{})})]})})]}),l[9]=b):b=l[9],b}const HS=()=>{const l=Ke.c(26),{consent:n,setConsent:c}=g.useContext(Jo),[s,u]=g.useState(n===null);let f;l[0]===Symbol.for("react.memo_cache_sentinel")?(f=()=>{u(!1),window.location.reload()},l[0]=f):f=l[0];const d=f,[y,v]=g.useState(!0);let p;l[1]!==c?(p=N=>{const W=new Date;W.setDate(W.getDate()+30),localStorage.setItem("matomo_consent",JSON.stringify({consent:N,expiry:W})),c(N)},l[1]=c,l[2]=p):p=l[2];const b=p;let R;l[3]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx(ir.Header,{closeButton:!0,children:h.jsx(ir.Title,{children:"Privacy on this site"})}),l[3]=R):R=l[3];let S;l[4]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("a",{href:"https://geant.org/Privacy-Notice/",children:"Privacy Policy"}),l[4]=S):S=l[4];let _;l[5]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsxs("p",{children:["On our site we use Matomo to collect and process data about your visit to better understand how it is used. For more information, see our ",S,".",h.jsx("br",{}),"Below, you can choose to accept or decline to have this data collected."]}),l[5]=_):_=l[5];let O;l[6]!==y?(O=()=>v(!y),l[6]=y,l[7]=O):O=l[7];let H;l[8]!==y||l[9]!==O?(H=h.jsx(Du.Check,{type:"checkbox",label:"Analytics",checked:y,onChange:O}),l[8]=y,l[9]=O,l[10]=H):H=l[10];let U;l[11]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx(Du.Text,{className:"text-muted",children:"We collect information about your visit on the compendium site — this helps us understand how the site is used, and how we can improve it."}),l[11]=U):U=l[11];let M;l[12]!==H?(M=h.jsxs(ir.Body,{children:[_,h.jsx(Du,{children:h.jsxs(Du.Group,{className:"mb-3",children:[H,U]})})]}),l[12]=H,l[13]=M):M=l[13];let q;l[14]!==b?(q=h.jsx(Bo,{variant:"secondary",onClick:()=>{b(!1),d()},children:"Decline all"}),l[14]=b,l[15]=q):q=l[15];let Y;l[16]!==y||l[17]!==b?(Y=h.jsx(Bo,{variant:"primary",onClick:()=>{b(y),d()},children:"Save consent for 30 days"}),l[16]=y,l[17]=b,l[18]=Y):Y=l[18];let J;l[19]!==Y||l[20]!==q?(J=h.jsxs(ir.Footer,{children:[q,Y]}),l[19]=Y,l[20]=q,l[21]=J):J=l[21];let k;return l[22]!==s||l[23]!==J||l[24]!==M?(k=h.jsxs(ir,{show:s,centered:!0,children:[R,M,J]}),l[22]=s,l[23]=J,l[24]=M,l[25]=k):k=l[25],k},BS=g.lazy(()=>be(()=>import("./Budget-DX8h4kEm.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]))),qS=g.lazy(()=>be(()=>import("./ChargingStructure-BiXVfonj.js"),__vite__mapDeps([8,2,3,4,5,6,9,10,11]))),VS=g.lazy(()=>be(()=>import("./ECProjects-Ixano_sS.js"),__vite__mapDeps([12,2,3,4,5,6,13,11]))),YS=g.lazy(()=>be(()=>import("./FundingSource-DoZCzgMa.js"),__vite__mapDeps([14,1,2,3,4,5,6,15]))),GS=g.lazy(()=>be(()=>import("./ParentOrganisation-OrE_JaGF.js"),__vite__mapDeps([16,2,3,4,5,6,13,11]))),Oy=g.lazy(()=>be(()=>import("./StaffGraph-D3mBN476.js"),__vite__mapDeps([17,1,2,3,4,5,6,18]))),kS=g.lazy(()=>be(()=>import("./StaffGraphAbsolute-I7Y3C-nj.js"),__vite__mapDeps([19,1,2,3,4,5,6,15,7]))),XS=g.lazy(()=>be(()=>import("./SubOrganisation-C7B4_RD0.js"),__vite__mapDeps([20,2,3,4,5,6,13,11]))),QS=g.lazy(()=>be(()=>import("./Audits-DfjcC9VL.js"),__vite__mapDeps([21,2,3,4,5,6,9,10,11]))),ZS=g.lazy(()=>be(()=>import("./BusinessContinuity-CswNIFcO.js"),__vite__mapDeps([22,2,3,4,5,6,9,10,11]))),KS=g.lazy(()=>be(()=>import("./CentralProcurement-_z44vsb4.js"),__vite__mapDeps([23,2,3,4,5,6,15,1,7]))),$S=g.lazy(()=>be(()=>import("./CorporateStrategy-BrErbevP.js"),__vite__mapDeps([24,2,3,4,5,6,13,11]))),FS=g.lazy(()=>be(()=>import("./CrisisExercises-mu7CJTN3.js"),__vite__mapDeps([25,2,3,4,5,6,9,10,11]))),JS=g.lazy(()=>be(()=>import("./CrisisManagement-BxTFYm8e.js"),__vite__mapDeps([26,2,3,4,5,6,9,10,11]))),PS=g.lazy(()=>be(()=>import("./EOSCListings-DWYL3kBM.js"),__vite__mapDeps([27,2,3,4,5,6,13,11]))),WS=g.lazy(()=>be(()=>import("./Policy-C19_KfRY.js"),__vite__mapDeps([28,2,3,4,5,6,13,11]))),IS=g.lazy(()=>be(()=>import("./SecurityControls-CkjbRt2j.js"),__vite__mapDeps([29,2,3,4,5,6,9,10,11]))),e2=g.lazy(()=>be(()=>import("./ServiceLevelTargets-BQyQ1ynP.js"),__vite__mapDeps([30,2,3,4,5,6,9,10,11]))),t2=g.lazy(()=>be(()=>import("./ServiceManagementFramework-DDW7v-XJ.js"),__vite__mapDeps([31,2,3,4,5,6,9,10,11]))),n2=g.lazy(()=>be(()=>import("./ServicesOffered-BnmNlrgs.js"),__vite__mapDeps([32,2,3,4,5,6,33,11]))),a2=g.lazy(()=>be(()=>import("./ConnectedInstitutionsURLs-BSBw8xZy.js"),__vite__mapDeps([34,2,3,4,5,6,13,11]))),dl=g.lazy(()=>be(()=>import("./ConnectedUser-DXYx3bSL.js"),__vite__mapDeps([35,2,3,4,5,6,33,11]))),l2=g.lazy(()=>be(()=>import("./RemoteCampuses-Bu_1Ucwy.js"),__vite__mapDeps([36,2,3,4,5,6,11]))),i2=g.lazy(()=>be(()=>import("./AlienWave-DO1S2459.js"),__vite__mapDeps([37,2,3,4,5,6,9,10,11]))),r2=g.lazy(()=>be(()=>import("./AlienWaveInternal-BhuqQCyf.js"),__vite__mapDeps([38,2,3,4,5,6,9,10,11]))),u2=g.lazy(()=>be(()=>import("./Automation-DzfRRQiO.js"),__vite__mapDeps([39,2,3,4,5,6,10,11]))),c2=g.lazy(()=>be(()=>import("./CapacityCoreIP-P2rbPvQY.js"),__vite__mapDeps([40,1,2,3,4,5,6,15,7]))),s2=g.lazy(()=>be(()=>import("./CapacityLargestLink-CGhxu47M.js"),__vite__mapDeps([41,1,2,3,4,5,6,15,7]))),o2=g.lazy(()=>be(()=>import("./CertificateProvider-CpWnMPbq.js"),__vite__mapDeps([42,2,3,4,5,6,9,10,11]))),Dy=g.lazy(()=>be(()=>import("./DarkFibreLease-Nz1_rVx9.js"),__vite__mapDeps([43,1,2,3,4,5,6,7]))),f2=g.lazy(()=>be(()=>import("./DarkFibreInstalled-Uox2eGX8.js"),__vite__mapDeps([44,1,2,3,4,5,6,7]))),d2=g.lazy(()=>be(()=>import("./ExternalConnections-BVnV4NEl.js"),__vite__mapDeps([45,2,3,4,5,6,11]))),h2=g.lazy(()=>be(()=>import("./FibreLight-UtHnGi0p.js"),__vite__mapDeps([46,2,3,4,5,6,9,10,11]))),m2=g.lazy(()=>be(()=>import("./IRUDuration-CI7E3kyS.js"),__vite__mapDeps([47,1,2,3,4,5,6,7]))),y2=g.lazy(()=>be(()=>import("./MonitoringTools-C61NJKaR.js"),__vite__mapDeps([48,2,3,4,5,6,9,10,11]))),p2=g.lazy(()=>be(()=>import("./NetworkFunctionVirtualisation-DLW-vjXN.js"),__vite__mapDeps([49,2,3,4,5,6,10,11]))),v2=g.lazy(()=>be(()=>import("./NetworkMapUrls-B3Qc49It.js"),__vite__mapDeps([50,2,3,4,5,6,13,11]))),g2=g.lazy(()=>be(()=>import("./NonRAndEPeer-Cg_pAdU8.js"),__vite__mapDeps([51,1,2,3,4,5,6,15,7]))),E2=g.lazy(()=>be(()=>import("./OPsAutomation-BoFZP12U.js"),__vite__mapDeps([52,2,3,4,5,6,9,10,11]))),b2=g.lazy(()=>be(()=>import("./PassiveMonitoring-Cv8zkVr2.js"),__vite__mapDeps([53,2,3,4,5,6,9,10,11]))),S2=g.lazy(()=>be(()=>import("./PertTeam-Cf_GEMUq.js"),__vite__mapDeps([54,2,3,4,5,6,9,10,11]))),x2=g.lazy(()=>be(()=>import("./SiemVendors-pjqFJlX2.js"),__vite__mapDeps([55,2,3,4,5,6,9,10,11]))),_2=g.lazy(()=>be(()=>import("./TrafficRatio-BELkAOlA.js"),__vite__mapDeps([56,1,2,3,4,5,6,18]))),R2=g.lazy(()=>be(()=>import("./TrafficUrl-BLm4mZku.js"),__vite__mapDeps([57,2,3,4,5,6,13,11]))),T2=g.lazy(()=>be(()=>import("./TrafficVolume-1MvPPErr.js"),__vite__mapDeps([58,1,2,3,4,5,6,7]))),N2=g.lazy(()=>be(()=>import("./WeatherMap-CZPcsrK6.js"),__vite__mapDeps([59,2,3,4,5,6,13,11]))),Ua=g.lazy(()=>be(()=>import("./Services-kzZ5IOvA.js"),__vite__mapDeps([60,2,3,4,5,6,11]))),C2=g.lazy(()=>be(()=>import("./Landing-35TvxyJ6.js"),__vite__mapDeps([61,4,62,3,63,11]))),No=g.lazy(()=>be(()=>import("./SurveyContainerComponent-DxT_-mC9.js"),__vite__mapDeps([64,65,66,67,62,3,68]))),j2=g.lazy(()=>be(()=>import("./SurveyManagementComponent-DygIuffI.js"),__vite__mapDeps([69,70,6,11,65,67,63,62,3]))),O2=g.lazy(()=>be(()=>import("./UserManagementComponent-DK-BhUBG.js"),__vite__mapDeps([71,65,62,3,5,70,6,11]))),D2=()=>{const l=Ke.c(9),{pathname:n}=Xn(),c=n!=="/";let s;l[0]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx(oS,{}),l[0]=s):s=l[0];let u;l[1]!==c?(u=h.jsx("main",{className:"grow",children:c?h.jsx(T0,{}):h.jsx(Bp,{})}),l[1]=c,l[2]=u):u=l[2];let f;l[3]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(HS,{}),l[3]=f):f=l[3];let d;l[4]!==u?(d=h.jsxs(wE,{children:[s,u,f]}),l[4]=u,l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx(hS,{}),l[6]=y):y=l[6];let v;return l[7]!==d?(v=h.jsxs(h.Fragment,{children:[d,y]}),l[7]=d,l[8]=v):v=l[8],v},w2=P0([{path:"",element:h.jsx(D2,{}),children:[{path:"/budget",element:h.jsx(BS,{})},{path:"/funding",element:h.jsx(YS,{})},{path:"/employment",element:h.jsx(Oy,{},"staffgraph")},{path:"/traffic-ratio",element:h.jsx(_2,{})},{path:"/roles",element:h.jsx(Oy,{roles:!0},"staffgraphroles")},{path:"/employee-count",element:h.jsx(kS,{})},{path:"/charging",element:h.jsx(qS,{})},{path:"/suborganisations",element:h.jsx(XS,{})},{path:"/parentorganisation",element:h.jsx(GS,{})},{path:"/ec-projects",element:h.jsx(VS,{})},{path:"/policy",element:h.jsx(WS,{})},{path:"/traffic-volume",element:h.jsx(T2,{})},{path:"/data",element:h.jsx(US,{})},{path:"/institutions-urls",element:h.jsx(a2,{})},{path:"/connected-proportion",element:h.jsx(dl,{page:Qt.ConnectedProportion},Qt.ConnectedProportion)},{path:"/connectivity-level",element:h.jsx(dl,{page:Qt.ConnectivityLevel},Qt.ConnectivityLevel)},{path:"/connectivity-growth",element:h.jsx(dl,{page:Qt.ConnectivityGrowth},Qt.ConnectivityGrowth)},{path:"/connection-carrier",element:h.jsx(dl,{page:Qt.ConnectionCarrier},Qt.ConnectionCarrier)},{path:"/connectivity-load",element:h.jsx(dl,{page:Qt.ConnectivityLoad},Qt.ConnectivityLoad)},{path:"/commercial-charging-level",element:h.jsx(dl,{page:Qt.CommercialChargingLevel},Qt.CommercialChargingLevel)},{path:"/commercial-connectivity",element:h.jsx(dl,{page:Qt.CommercialConnectivity},Qt.CommercialConnectivity)},{path:"/network-services",element:h.jsx(Ua,{category:Lt.network_services},Lt.network_services)},{path:"/isp-support-services",element:h.jsx(Ua,{category:Lt.isp_support},Lt.isp_support)},{path:"/security-services",element:h.jsx(Ua,{category:Lt.security},Lt.security)},{path:"/identity-services",element:h.jsx(Ua,{category:Lt.identity},Lt.identity)},{path:"/collaboration-services",element:h.jsx(Ua,{category:Lt.collaboration},Lt.collaboration)},{path:"/multimedia-services",element:h.jsx(Ua,{category:Lt.multimedia},Lt.multimedia)},{path:"/storage-and-hosting-services",element:h.jsx(Ua,{category:Lt.storage_and_hosting},Lt.storage_and_hosting)},{path:"/professional-services",element:h.jsx(Ua,{category:Lt.professional_services},Lt.professional_services)},{path:"/dark-fibre-lease",element:h.jsx(Dy,{national:!0},"darkfibrenational")},{path:"/dark-fibre-lease-international",element:h.jsx(Dy,{},"darkfibreinternational")},{path:"/dark-fibre-installed",element:h.jsx(f2,{})},{path:"/remote-campuses",element:h.jsx(l2,{})},{path:"/eosc-listings",element:h.jsx(PS,{})},{path:"/fibre-light",element:h.jsx(h2,{})},{path:"/monitoring-tools",element:h.jsx(y2,{})},{path:"/pert-team",element:h.jsx(S2,{})},{path:"/passive-monitoring",element:h.jsx(b2,{})},{path:"/alien-wave",element:h.jsx(i2,{})},{path:"/alien-wave-internal",element:h.jsx(r2,{})},{path:"/external-connections",element:h.jsx(d2,{})},{path:"/ops-automation",element:h.jsx(E2,{})},{path:"/network-automation",element:h.jsx(u2,{})},{path:"/traffic-stats",element:h.jsx(R2,{})},{path:"/weather-map",element:h.jsx(N2,{})},{path:"/network-map",element:h.jsx(v2,{})},{path:"/nfv",element:h.jsx(p2,{})},{path:"/certificate-providers",element:h.jsx(o2,{})},{path:"/siem-vendors",element:h.jsx(x2,{})},{path:"/capacity-largest-link",element:h.jsx(s2,{})},{path:"/capacity-core-ip",element:h.jsx(c2,{})},{path:"/non-rne-peers",element:h.jsx(g2,{})},{path:"/iru-duration",element:h.jsx(m2,{})},{path:"/audits",element:h.jsx(QS,{})},{path:"/business-continuity",element:h.jsx(ZS,{})},{path:"/crisis-management",element:h.jsx(JS,{})},{path:"/crisis-exercise",element:h.jsx(FS,{})},{path:"/central-procurement",element:h.jsx(KS,{})},{path:"/security-control",element:h.jsx(IS,{})},{path:"/services-offered",element:h.jsx(n2,{})},{path:"/service-management-framework",element:h.jsx(t2,{})},{path:"/service-level-targets",element:h.jsx(e2,{})},{path:"/corporate-strategy",element:h.jsx($S,{})},{path:"/survey/admin/surveys",element:h.jsx(j2,{})},{path:"/survey/admin/users",element:h.jsx(O2,{})},{path:"/survey/admin/inspect/:year",element:h.jsx(No,{loadFrom:"/api/response/inspect/"})},{path:"/survey/admin/try/:year",element:h.jsx(No,{loadFrom:"/api/response/try/"})},{path:"/survey/response/:year/:nren",element:h.jsx(No,{loadFrom:"/api/response/load/"})},{path:"/survey/*",element:h.jsx(C2,{})},{path:"/*",element:h.jsx(Bp,{})}]}]);function A2(){const l=Ke.c(1);let n;return l[0]===Symbol.for("react.memo_cache_sentinel")?(n=h.jsx("div",{className:"app",children:h.jsx(oE,{router:w2})}),l[0]=n):n=l[0],n}const M2=document.getElementById("root"),z2=a1.createRoot(M2);z2.render(h.jsx(Yt.StrictMode,{children:h.jsx(A2,{})}));export{zE as $,Ho as A,pb as B,ln as C,Xy as D,Ya as E,yE as F,MS as G,LS as H,jS as I,vE as J,OS as K,Tn as L,Iy as M,zS as N,wS as O,AS as P,Hp as Q,Rn as R,li as S,NS as T,V2 as U,SE as V,Du as W,DS as X,_S as Y,RS as Z,Yp as _,Qt as a,Lt as a0,Fo as a1,yr as a2,ku as a3,wy as a4,B2 as a5,H2 as a6,be as a7,rb as a8,nb as a9,$u as aa,gl as ab,hl as ac,Mo as ad,Ba as ae,yl as af,ab as ag,U2 as ah,nf as ai,OE as aj,Y2 as b,Ke as c,G2 as d,rr as e,Yt as f,up as g,Qe as h,Ae as i,h as j,sb as k,by as l,Bu as m,Ob as n,Ku as o,tf as p,ob as q,g as r,ti as s,se as t,pl as u,lp as v,q2 as w,rp as x,Bo as y,BE as z};
+*/var dy;function AE(){return dy||(dy=1,function(l){(function(){var n={}.hasOwnProperty;function c(){for(var f="",d=0;d<arguments.length;d++){var y=arguments[d];y&&(f=u(f,s(y)))}return f}function s(f){if(typeof f=="string"||typeof f=="number")return f;if(typeof f!="object")return"";if(Array.isArray(f))return c.apply(null,f);if(f.toString!==Object.prototype.toString&&!f.toString.toString().includes("[native code]"))return f.toString();var d="";for(var y in f)n.call(f,y)&&f[y]&&(d=u(d,y));return d}function u(f,d){return d?f?f+" "+d:f+d:f}l.exports?(c.default=c,l.exports=c):window.classNames=c})()}(po)),po.exports}var ME=AE();const Ae=fr(ME);function zE(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.includes(s))continue;c[s]=l[s]}return c}function Ao(l,n){return Ao=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(c,s){return c.__proto__=s,c},Ao(l,n)}function LE(l,n){l.prototype=Object.create(n.prototype),l.prototype.constructor=l,Ao(l,n)}const UE=["xxl","xl","lg","md","sm","xs"],HE="xs",Zu=g.createContext({prefixes:{},breakpoints:UE,minBreakpoint:HE});function Qe(l,n){const{prefixes:c}=g.useContext(Zu);return l||c[n]||n}function tp(){const{breakpoints:l}=g.useContext(Zu);return l}function np(){const{minBreakpoint:l}=g.useContext(Zu);return l}function BE(){const{dir:l}=g.useContext(Zu);return l==="rtl"}function Ku(l){return l&&l.ownerDocument||document}function qE(l){var n=Ku(l);return n&&n.defaultView||window}function VE(l,n){return qE(l).getComputedStyle(l,n)}var YE=/([A-Z])/g;function GE(l){return l.replace(YE,"-$1").toLowerCase()}var kE=/^ms-/;function Ou(l){return GE(l).replace(kE,"-ms-")}var XE=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i;function QE(l){return!!(l&&XE.test(l))}function gl(l,n){var c="",s="";if(typeof n=="string")return l.style.getPropertyValue(Ou(n))||VE(l).getPropertyValue(Ou(n));Object.keys(n).forEach(function(u){var f=n[u];!f&&f!==0?l.style.removeProperty(Ou(u)):QE(u)?s+=u+"("+f+") ":c+=Ou(u)+": "+f+";"}),s&&(c+="transform: "+s+";"),l.style.cssText+=";"+c}var vo={exports:{}},go,hy;function ZE(){if(hy)return go;hy=1;var l="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";return go=l,go}var Eo,my;function KE(){if(my)return Eo;my=1;var l=ZE();function n(){}function c(){}return c.resetWarningCache=n,Eo=function(){function s(d,y,v,p,b,R){if(R!==l){var S=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw S.name="Invariant Violation",S}}s.isRequired=s;function u(){return s}var f={array:s,bigint:s,bool:s,func:s,number:s,object:s,string:s,symbol:s,any:s,arrayOf:u,element:s,elementType:s,instanceOf:u,node:s,objectOf:u,oneOf:u,oneOfType:u,shape:u,exact:u,checkPropTypes:c,resetWarningCache:n};return f.PropTypes=f,f},Eo}var yy;function $E(){return yy||(yy=1,vo.exports=KE()()),vo.exports}var FE=$E();const fa=fr(FE),py={disabled:!1},ap=Yt.createContext(null);var JE=function(n){return n.scrollTop},cr="unmounted",hl="exited",Ba="entering",yl="entered",Mo="exiting",ha=function(l){LE(n,l);function n(s,u){var f;f=l.call(this,s,u)||this;var d=u,y=d&&!d.isMounting?s.enter:s.appear,v;return f.appearStatus=null,s.in?y?(v=hl,f.appearStatus=Ba):v=yl:s.unmountOnExit||s.mountOnEnter?v=cr:v=hl,f.state={status:v},f.nextCallback=null,f}n.getDerivedStateFromProps=function(u,f){var d=u.in;return d&&f.status===cr?{status:hl}:null};var c=n.prototype;return c.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},c.componentDidUpdate=function(u){var f=null;if(u!==this.props){var d=this.state.status;this.props.in?d!==Ba&&d!==yl&&(f=Ba):(d===Ba||d===yl)&&(f=Mo)}this.updateStatus(!1,f)},c.componentWillUnmount=function(){this.cancelNextCallback()},c.getTimeouts=function(){var u=this.props.timeout,f,d,y;return f=d=y=u,u!=null&&typeof u!="number"&&(f=u.exit,d=u.enter,y=u.appear!==void 0?u.appear:d),{exit:f,enter:d,appear:y}},c.updateStatus=function(u,f){if(u===void 0&&(u=!1),f!==null)if(this.cancelNextCallback(),f===Ba){if(this.props.unmountOnExit||this.props.mountOnEnter){var d=this.props.nodeRef?this.props.nodeRef.current:ii.findDOMNode(this);d&&JE(d)}this.performEnter(u)}else this.performExit();else this.props.unmountOnExit&&this.state.status===hl&&this.setState({status:cr})},c.performEnter=function(u){var f=this,d=this.props.enter,y=this.context?this.context.isMounting:u,v=this.props.nodeRef?[y]:[ii.findDOMNode(this),y],p=v[0],b=v[1],R=this.getTimeouts(),S=y?R.appear:R.enter;if(!u&&!d||py.disabled){this.safeSetState({status:yl},function(){f.props.onEntered(p)});return}this.props.onEnter(p,b),this.safeSetState({status:Ba},function(){f.props.onEntering(p,b),f.onTransitionEnd(S,function(){f.safeSetState({status:yl},function(){f.props.onEntered(p,b)})})})},c.performExit=function(){var u=this,f=this.props.exit,d=this.getTimeouts(),y=this.props.nodeRef?void 0:ii.findDOMNode(this);if(!f||py.disabled){this.safeSetState({status:hl},function(){u.props.onExited(y)});return}this.props.onExit(y),this.safeSetState({status:Mo},function(){u.props.onExiting(y),u.onTransitionEnd(d.exit,function(){u.safeSetState({status:hl},function(){u.props.onExited(y)})})})},c.cancelNextCallback=function(){this.nextCallback!==null&&(this.nextCallback.cancel(),this.nextCallback=null)},c.safeSetState=function(u,f){f=this.setNextCallback(f),this.setState(u,f)},c.setNextCallback=function(u){var f=this,d=!0;return this.nextCallback=function(y){d&&(d=!1,f.nextCallback=null,u(y))},this.nextCallback.cancel=function(){d=!1},this.nextCallback},c.onTransitionEnd=function(u,f){this.setNextCallback(f);var d=this.props.nodeRef?this.props.nodeRef.current:ii.findDOMNode(this),y=u==null&&!this.props.addEndListener;if(!d||y){setTimeout(this.nextCallback,0);return}if(this.props.addEndListener){var v=this.props.nodeRef?[this.nextCallback]:[d,this.nextCallback],p=v[0],b=v[1];this.props.addEndListener(p,b)}u!=null&&setTimeout(this.nextCallback,u)},c.render=function(){var u=this.state.status;if(u===cr)return null;var f=this.props,d=f.children;f.in,f.mountOnEnter,f.unmountOnExit,f.appear,f.enter,f.exit,f.timeout,f.addEndListener,f.onEnter,f.onEntering,f.onEntered,f.onExit,f.onExiting,f.onExited,f.nodeRef;var y=zE(f,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]);return Yt.createElement(ap.Provider,{value:null},typeof d=="function"?d(u,y):Yt.cloneElement(Yt.Children.only(d),y))},n}(Yt.Component);ha.contextType=ap;ha.propTypes={};function ei(){}ha.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:ei,onEntering:ei,onEntered:ei,onExit:ei,onExiting:ei,onExited:ei};ha.UNMOUNTED=cr;ha.EXITED=hl;ha.ENTERING=Ba;ha.ENTERED=yl;ha.EXITING=Mo;function PE(l){return l.code==="Escape"||l.keyCode===27}function WE(){const l=g.version.split(".");return{major:+l[0],minor:+l[1],patch:+l[2]}}function $u(l){if(!l||typeof l=="function")return null;const{major:n}=WE();return n>=19?l.props.ref:l.ref}const ri=!!(typeof window<"u"&&window.document&&window.document.createElement);var zo=!1,Lo=!1;try{var bo={get passive(){return zo=!0},get once(){return Lo=zo=!0}};ri&&(window.addEventListener("test",bo,bo),window.removeEventListener("test",bo,!0))}catch{}function lp(l,n,c,s){if(s&&typeof s!="boolean"&&!Lo){var u=s.once,f=s.capture,d=c;!Lo&&u&&(d=c.__once||function y(v){this.removeEventListener(n,y,f),c.call(this,v)},c.__once=d),l.addEventListener(n,d,zo?s:f)}l.addEventListener(n,c,s)}function Uo(l,n,c,s){var u=s&&typeof s!="boolean"?s.capture:s;l.removeEventListener(n,c,u),c.__once&&l.removeEventListener(n,c.__once,u)}function Bu(l,n,c,s){return lp(l,n,c,s),function(){Uo(l,n,c,s)}}function IE(l,n,c,s){if(s===void 0&&(s=!0),l){var u=document.createEvent("HTMLEvents");u.initEvent(n,c,s),l.dispatchEvent(u)}}function eb(l){var n=gl(l,"transitionDuration")||"",c=n.indexOf("ms")===-1?1e3:1;return parseFloat(n)*c}function tb(l,n,c){c===void 0&&(c=5);var s=!1,u=setTimeout(function(){s||IE(l,"transitionend",!0)},n+c),f=Bu(l,"transitionend",function(){s=!0},{once:!0});return function(){clearTimeout(u),f()}}function ip(l,n,c,s){c==null&&(c=eb(l)||0);var u=tb(l,c,s),f=Bu(l,"transitionend",n);return function(){u(),f()}}function vy(l,n){const c=gl(l,n)||"",s=c.indexOf("ms")===-1?1e3:1;return parseFloat(c)*s}function nb(l,n){const c=vy(l,"transitionDuration"),s=vy(l,"transitionDelay"),u=ip(l,f=>{f.target===l&&(u(),n(f))},c+s)}function ab(l){l.offsetHeight}const gy=l=>!l||typeof l=="function"?l:n=>{l.current=n};function lb(l,n){const c=gy(l),s=gy(n);return u=>{c&&c(u),s&&s(u)}}function rp(l,n){return g.useMemo(()=>lb(l,n),[l,n])}function ib(l){return l&&"setState"in l?ii.findDOMNode(l):l??null}const rb=Yt.forwardRef(({onEnter:l,onEntering:n,onEntered:c,onExit:s,onExiting:u,onExited:f,addEndListener:d,children:y,childRef:v,...p},b)=>{const R=g.useRef(null),S=rp(R,v),_=N=>{S(ib(N))},O=N=>W=>{N&&R.current&&N(R.current,W)},H=g.useCallback(O(l),[l]),U=g.useCallback(O(n),[n]),M=g.useCallback(O(c),[c]),q=g.useCallback(O(s),[s]),Y=g.useCallback(O(u),[u]),J=g.useCallback(O(f),[f]),k=g.useCallback(O(d),[d]);return h.jsx(ha,{ref:b,...p,onEnter:H,onEntered:M,onEntering:U,onExit:q,onExited:J,onExiting:Y,addEndListener:k,nodeRef:R,children:typeof y=="function"?(N,W)=>y(N,{...W,ref:_}):Yt.cloneElement(y,{ref:_})})});function ub(l){const n=g.useRef(l);return g.useEffect(()=>{n.current=l},[l]),n}function Ho(l){const n=ub(l);return g.useCallback(function(...c){return n.current&&n.current(...c)},[n])}const Po=l=>g.forwardRef((n,c)=>h.jsx("div",{...n,ref:c,className:Ae(n.className,l)}));function cb(l){const n=g.useRef(l);return g.useEffect(()=>{n.current=l},[l]),n}function pl(l){const n=cb(l);return g.useCallback(function(...c){return n.current&&n.current(...c)},[n])}function sb(){const l=g.useRef(!0),n=g.useRef(()=>l.current);return g.useEffect(()=>(l.current=!0,()=>{l.current=!1}),[]),n.current}function ob(l){const n=g.useRef(null);return g.useEffect(()=>{n.current=l}),n.current}const fb=typeof global<"u"&&global.navigator&&global.navigator.product==="ReactNative",db=typeof document<"u",Ey=db||fb?g.useLayoutEffect:g.useEffect,hb=["as","disabled"];function mb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function yb(l){return!l||l.trim()==="#"}function up({tagName:l,disabled:n,href:c,target:s,rel:u,role:f,onClick:d,tabIndex:y=0,type:v}){l||(c!=null||s!=null||u!=null?l="a":l="button");const p={tagName:l};if(l==="button")return[{type:v||"button",disabled:n},p];const b=S=>{if((n||l==="a"&&yb(c))&&S.preventDefault(),n){S.stopPropagation();return}d==null||d(S)},R=S=>{S.key===" "&&(S.preventDefault(),b(S))};return l==="a"&&(c||(c="#"),n&&(c=void 0)),[{role:f??"button",disabled:void 0,tabIndex:n?void 0:y,href:c,target:l==="a"?s:void 0,"aria-disabled":n||void 0,rel:l==="a"?u:void 0,onClick:b,onKeyDown:R},p]}const pb=g.forwardRef((l,n)=>{let{as:c,disabled:s}=l,u=mb(l,hb);const[f,{tagName:d}]=up(Object.assign({tagName:c,disabled:s},u));return h.jsx(d,Object.assign({},u,f,{ref:n}))});pb.displayName="Button";const vb={[Ba]:"show",[yl]:"show"},Wo=g.forwardRef(({className:l,children:n,transitionClasses:c={},onEnter:s,...u},f)=>{const d={in:!1,timeout:300,mountOnEnter:!1,unmountOnExit:!1,appear:!1,...u},y=g.useCallback((v,p)=>{ab(v),s==null||s(v,p)},[s]);return h.jsx(rb,{ref:f,addEndListener:nb,...d,onEnter:y,childRef:$u(n),children:(v,p)=>g.cloneElement(n,{...p,className:Ae("fade",l,n.props.className,vb[v],c[v])})})});Wo.displayName="Fade";const gb={"aria-label":fa.string,onClick:fa.func,variant:fa.oneOf(["white"])},Io=g.forwardRef(({className:l,variant:n,"aria-label":c="Close",...s},u)=>h.jsx("button",{ref:u,type:"button",className:Ae("btn-close",n&&`btn-close-${n}`,l),"aria-label":c,...s}));Io.displayName="CloseButton";Io.propTypes=gb;const Bo=g.forwardRef(({as:l,bsPrefix:n,variant:c="primary",size:s,active:u=!1,disabled:f=!1,className:d,...y},v)=>{const p=Qe(n,"btn"),[b,{tagName:R}]=up({tagName:l,disabled:f,...y}),S=R;return h.jsx(S,{...b,...y,ref:v,disabled:f,className:Ae(d,p,u&&"active",c&&`${p}-${c}`,s&&`${p}-${s}`,y.href&&f&&"disabled")})});Bo.displayName="Button";const ef=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-body"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));ef.displayName="CardBody";const cp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-footer"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));cp.displayName="CardFooter";const sp=g.createContext(null);sp.displayName="CardHeaderContext";const op=g.forwardRef(({bsPrefix:l,className:n,as:c="div",...s},u)=>{const f=Qe(l,"card-header"),d=g.useMemo(()=>({cardHeaderBsPrefix:f}),[f]);return h.jsx(sp.Provider,{value:d,children:h.jsx(c,{ref:u,...s,className:Ae(n,f)})})});op.displayName="CardHeader";const fp=g.forwardRef(({bsPrefix:l,className:n,variant:c,as:s="img",...u},f)=>{const d=Qe(l,"card-img");return h.jsx(s,{ref:f,className:Ae(c?`${d}-${c}`:d,n),...u})});fp.displayName="CardImg";const dp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"card-img-overlay"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));dp.displayName="CardImgOverlay";const hp=g.forwardRef(({className:l,bsPrefix:n,as:c="a",...s},u)=>(n=Qe(n,"card-link"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));hp.displayName="CardLink";const Eb=Po("h6"),mp=g.forwardRef(({className:l,bsPrefix:n,as:c=Eb,...s},u)=>(n=Qe(n,"card-subtitle"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));mp.displayName="CardSubtitle";const yp=g.forwardRef(({className:l,bsPrefix:n,as:c="p",...s},u)=>(n=Qe(n,"card-text"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));yp.displayName="CardText";const bb=Po("h5"),pp=g.forwardRef(({className:l,bsPrefix:n,as:c=bb,...s},u)=>(n=Qe(n,"card-title"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));pp.displayName="CardTitle";const vp=g.forwardRef(({bsPrefix:l,className:n,bg:c,text:s,border:u,body:f=!1,children:d,as:y="div",...v},p)=>{const b=Qe(l,"card");return h.jsx(y,{ref:p,...v,className:Ae(n,b,c&&`bg-${c}`,s&&`text-${s}`,u&&`border-${u}`),children:f?h.jsx(ef,{children:d}):d})});vp.displayName="Card";const Yn=Object.assign(vp,{Img:fp,Title:pp,Subtitle:mp,Body:ef,Link:hp,Text:yp,Header:op,Footer:cp,ImgOverlay:dp});function Sb(l){const n=g.useRef(l);return n.current=l,n}function xb(l){const n=Sb(l);g.useEffect(()=>()=>n.current(),[])}function _b(l,n){return g.Children.toArray(l).some(c=>g.isValidElement(c)&&c.type===n)}function Rb({as:l,bsPrefix:n,className:c,...s}){n=Qe(n,"col");const u=tp(),f=np(),d=[],y=[];return u.forEach(v=>{const p=s[v];delete s[v];let b,R,S;typeof p=="object"&&p!=null?{span:b,offset:R,order:S}=p:b=p;const _=v!==f?`-${v}`:"";b&&d.push(b===!0?`${n}${_}`:`${n}${_}-${b}`),S!=null&&y.push(`order${_}-${S}`),R!=null&&y.push(`offset${_}-${R}`)}),[{...s,className:Ae(c,...d,...y)},{as:l,bsPrefix:n,spans:d}]}const ln=g.forwardRef((l,n)=>{const[{className:c,...s},{as:u="div",bsPrefix:f,spans:d}]=Rb(l);return h.jsx(u,{...s,ref:n,className:Ae(c,!d.length&&f)})});ln.displayName="Col";const Ya=g.forwardRef(({bsPrefix:l,fluid:n=!1,as:c="div",className:s,...u},f)=>{const d=Qe(l,"container"),y=typeof n=="string"?`-${n}`:"-fluid";return h.jsx(c,{ref:f,...u,className:Ae(s,n?`${d}${y}`:d)})});Ya.displayName="Container";var Tb=Function.prototype.bind.call(Function.prototype.call,[].slice);function ti(l,n){return Tb(l.querySelectorAll(n))}function by(l,n){if(l.contains)return l.contains(n);if(l.compareDocumentPosition)return l===n||!!(l.compareDocumentPosition(n)&16)}var So,Sy;function Nb(){if(Sy)return So;Sy=1;var l=function(){};return So=l,So}var Cb=Nb();const q2=fr(Cb),jb="data-rr-ui-";function Ob(l){return`${jb}${l}`}const gp=g.createContext(ri?window:void 0);gp.Provider;function tf(){return g.useContext(gp)}const Db={type:fa.string,tooltip:fa.bool,as:fa.elementType},Fu=g.forwardRef(({as:l="div",className:n,type:c="valid",tooltip:s=!1,...u},f)=>h.jsx(l,{...u,ref:f,className:Ae(n,`${c}-${s?"tooltip":"feedback"}`)}));Fu.displayName="Feedback";Fu.propTypes=Db;const da=g.createContext({}),nf=g.forwardRef(({id:l,bsPrefix:n,className:c,type:s="checkbox",isValid:u=!1,isInvalid:f=!1,as:d="input",...y},v)=>{const{controlId:p}=g.useContext(da);return n=Qe(n,"form-check-input"),h.jsx(d,{...y,ref:v,type:s,id:l||p,className:Ae(c,n,u&&"is-valid",f&&"is-invalid")})});nf.displayName="FormCheckInput";const qu=g.forwardRef(({bsPrefix:l,className:n,htmlFor:c,...s},u)=>{const{controlId:f}=g.useContext(da);return l=Qe(l,"form-check-label"),h.jsx("label",{...s,ref:u,htmlFor:c||f,className:Ae(n,l)})});qu.displayName="FormCheckLabel";const Ep=g.forwardRef(({id:l,bsPrefix:n,bsSwitchPrefix:c,inline:s=!1,reverse:u=!1,disabled:f=!1,isValid:d=!1,isInvalid:y=!1,feedbackTooltip:v=!1,feedback:p,feedbackType:b,className:R,style:S,title:_="",type:O="checkbox",label:H,children:U,as:M="input",...q},Y)=>{n=Qe(n,"form-check"),c=Qe(c,"form-switch");const{controlId:J}=g.useContext(da),k=g.useMemo(()=>({controlId:l||J}),[J,l]),N=!U&&H!=null&&H!==!1||_b(U,qu),W=h.jsx(nf,{...q,type:O==="switch"?"checkbox":O,ref:Y,isValid:d,isInvalid:y,disabled:f,as:M});return h.jsx(da.Provider,{value:k,children:h.jsx("div",{style:S,className:Ae(R,N&&n,s&&`${n}-inline`,u&&`${n}-reverse`,O==="switch"&&c),children:U||h.jsxs(h.Fragment,{children:[W,N&&h.jsx(qu,{title:_,children:H}),p&&h.jsx(Fu,{type:b,tooltip:v,children:p})]})})})});Ep.displayName="FormCheck";const Vu=Object.assign(Ep,{Input:nf,Label:qu}),bp=g.forwardRef(({bsPrefix:l,type:n,size:c,htmlSize:s,id:u,className:f,isValid:d=!1,isInvalid:y=!1,plaintext:v,readOnly:p,as:b="input",...R},S)=>{const{controlId:_}=g.useContext(da);return l=Qe(l,"form-control"),h.jsx(b,{...R,type:n,size:s,ref:S,readOnly:p,id:u||_,className:Ae(f,v?`${l}-plaintext`:l,c&&`${l}-${c}`,n==="color"&&`${l}-color`,d&&"is-valid",y&&"is-invalid")})});bp.displayName="FormControl";const wb=Object.assign(bp,{Feedback:Fu}),Sp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"form-floating"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Sp.displayName="FormFloating";const af=g.forwardRef(({controlId:l,as:n="div",...c},s)=>{const u=g.useMemo(()=>({controlId:l}),[l]);return h.jsx(da.Provider,{value:u,children:h.jsx(n,{...c,ref:s})})});af.displayName="FormGroup";const xp=g.forwardRef(({as:l="label",bsPrefix:n,column:c=!1,visuallyHidden:s=!1,className:u,htmlFor:f,...d},y)=>{const{controlId:v}=g.useContext(da);n=Qe(n,"form-label");let p="col-form-label";typeof c=="string"&&(p=`${p} ${p}-${c}`);const b=Ae(u,n,s&&"visually-hidden",c&&p);return f=f||v,c?h.jsx(ln,{ref:y,as:"label",className:b,htmlFor:f,...d}):h.jsx(l,{ref:y,className:b,htmlFor:f,...d})});xp.displayName="FormLabel";const _p=g.forwardRef(({bsPrefix:l,className:n,id:c,...s},u)=>{const{controlId:f}=g.useContext(da);return l=Qe(l,"form-range"),h.jsx("input",{...s,type:"range",ref:u,className:Ae(n,l),id:c||f})});_p.displayName="FormRange";const Rp=g.forwardRef(({bsPrefix:l,size:n,htmlSize:c,className:s,isValid:u=!1,isInvalid:f=!1,id:d,...y},v)=>{const{controlId:p}=g.useContext(da);return l=Qe(l,"form-select"),h.jsx("select",{...y,size:c,ref:v,className:Ae(s,l,n&&`${l}-${n}`,u&&"is-valid",f&&"is-invalid"),id:d||p})});Rp.displayName="FormSelect";const Tp=g.forwardRef(({bsPrefix:l,className:n,as:c="small",muted:s,...u},f)=>(l=Qe(l,"form-text"),h.jsx(c,{...u,ref:f,className:Ae(n,l,s&&"text-muted")})));Tp.displayName="FormText";const Np=g.forwardRef((l,n)=>h.jsx(Vu,{...l,ref:n,type:"switch"}));Np.displayName="Switch";const Ab=Object.assign(Np,{Input:Vu.Input,Label:Vu.Label}),Cp=g.forwardRef(({bsPrefix:l,className:n,children:c,controlId:s,label:u,...f},d)=>(l=Qe(l,"form-floating"),h.jsxs(af,{ref:d,className:Ae(n,l),controlId:s,...f,children:[c,h.jsx("label",{htmlFor:s,children:u})]})));Cp.displayName="FloatingLabel";const Mb={_ref:fa.any,validated:fa.bool,as:fa.elementType},lf=g.forwardRef(({className:l,validated:n,as:c="form",...s},u)=>h.jsx(c,{...s,ref:u,className:Ae(l,n&&"was-validated")}));lf.displayName="Form";lf.propTypes=Mb;const Du=Object.assign(lf,{Group:af,Control:wb,Floating:Sp,Check:Vu,Switch:Ab,Label:xp,Text:Tp,Range:_p,Select:Rp,FloatingLabel:Cp}),xy=l=>!l||typeof l=="function"?l:n=>{l.current=n};function zb(l,n){const c=xy(l),s=xy(n);return u=>{c&&c(u),s&&s(u)}}function rf(l,n){return g.useMemo(()=>zb(l,n),[l,n])}var wu;function _y(l){if((!wu&&wu!==0||l)&&ri){var n=document.createElement("div");n.style.position="absolute",n.style.top="-9999px",n.style.width="50px",n.style.height="50px",n.style.overflow="scroll",document.body.appendChild(n),wu=n.offsetWidth-n.clientWidth,document.body.removeChild(n)}return wu}function Lb(){return g.useState(null)}function xo(l){l===void 0&&(l=Ku());try{var n=l.activeElement;return!n||!n.nodeName?null:n}catch{return l.body}}function Ub(l){const n=g.useRef(l);return n.current=l,n}function Hb(l){const n=Ub(l);g.useEffect(()=>()=>n.current(),[])}function Bb(l=document){const n=l.defaultView;return Math.abs(n.innerWidth-l.documentElement.clientWidth)}const Ry=Ob("modal-open");class uf{constructor({ownerDocument:n,handleContainerOverflow:c=!0,isRTL:s=!1}={}){this.handleContainerOverflow=c,this.isRTL=s,this.modals=[],this.ownerDocument=n}getScrollbarWidth(){return Bb(this.ownerDocument)}getElement(){return(this.ownerDocument||document).body}setModalAttributes(n){}removeModalAttributes(n){}setContainerStyle(n){const c={overflow:"hidden"},s=this.isRTL?"paddingLeft":"paddingRight",u=this.getElement();n.style={overflow:u.style.overflow,[s]:u.style[s]},n.scrollBarWidth&&(c[s]=`${parseInt(gl(u,s)||"0",10)+n.scrollBarWidth}px`),u.setAttribute(Ry,""),gl(u,c)}reset(){[...this.modals].forEach(n=>this.remove(n))}removeContainerStyle(n){const c=this.getElement();c.removeAttribute(Ry),Object.assign(c.style,n.style)}add(n){let c=this.modals.indexOf(n);return c!==-1||(c=this.modals.length,this.modals.push(n),this.setModalAttributes(n),c!==0)||(this.state={scrollBarWidth:this.getScrollbarWidth(),style:{}},this.handleContainerOverflow&&this.setContainerStyle(this.state)),c}remove(n){const c=this.modals.indexOf(n);c!==-1&&(this.modals.splice(c,1),!this.modals.length&&this.handleContainerOverflow&&this.removeContainerStyle(this.state),this.removeModalAttributes(n))}isTopModal(n){return!!this.modals.length&&this.modals[this.modals.length-1]===n}}const _o=(l,n)=>ri?l==null?(n||Ku()).body:(typeof l=="function"&&(l=l()),l&&"current"in l&&(l=l.current),l&&("nodeType"in l||l.getBoundingClientRect)?l:null):null;function qb(l,n){const c=tf(),[s,u]=g.useState(()=>_o(l,c==null?void 0:c.document));if(!s){const f=_o(l);f&&u(f)}return g.useEffect(()=>{},[n,s]),g.useEffect(()=>{const f=_o(l);f!==s&&u(f)},[l,s]),s}function Vb({children:l,in:n,onExited:c,mountOnEnter:s,unmountOnExit:u}){const f=g.useRef(null),d=g.useRef(n),y=pl(c);g.useEffect(()=>{n?d.current=!0:y(f.current)},[n,y]);const v=rf(f,$u(l)),p=g.cloneElement(l,{ref:v});return n?p:u||!d.current&&s?null:p}const Yb=["onEnter","onEntering","onEntered","onExit","onExiting","onExited","addEndListener","children"];function Gb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function kb(l){let{onEnter:n,onEntering:c,onEntered:s,onExit:u,onExiting:f,onExited:d,addEndListener:y,children:v}=l,p=Gb(l,Yb);const b=g.useRef(null),R=rf(b,$u(v)),S=J=>k=>{J&&b.current&&J(b.current,k)},_=g.useCallback(S(n),[n]),O=g.useCallback(S(c),[c]),H=g.useCallback(S(s),[s]),U=g.useCallback(S(u),[u]),M=g.useCallback(S(f),[f]),q=g.useCallback(S(d),[d]),Y=g.useCallback(S(y),[y]);return Object.assign({},p,{nodeRef:b},n&&{onEnter:_},c&&{onEntering:O},s&&{onEntered:H},u&&{onExit:U},f&&{onExiting:M},d&&{onExited:q},y&&{addEndListener:Y},{children:typeof v=="function"?(J,k)=>v(J,Object.assign({},k,{ref:R})):g.cloneElement(v,{ref:R})})}const Xb=["component"];function Qb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}const Zb=g.forwardRef((l,n)=>{let{component:c}=l,s=Qb(l,Xb);const u=kb(s);return h.jsx(c,Object.assign({ref:n},u))});function Kb({in:l,onTransition:n}){const c=g.useRef(null),s=g.useRef(!0),u=pl(n);return Ey(()=>{if(!c.current)return;let f=!1;return u({in:l,element:c.current,initial:s.current,isStale:()=>f}),()=>{f=!0}},[l,u]),Ey(()=>(s.current=!1,()=>{s.current=!0}),[]),c}function $b({children:l,in:n,onExited:c,onEntered:s,transition:u}){const[f,d]=g.useState(!n);n&&f&&d(!1);const y=Kb({in:!!n,onTransition:p=>{const b=()=>{p.isStale()||(p.in?s==null||s(p.element,p.initial):(d(!0),c==null||c(p.element)))};Promise.resolve(u(p)).then(b,R=>{throw p.in||d(!0),R})}}),v=rf(y,$u(l));return f&&!n?null:g.cloneElement(l,{ref:v})}function Ty(l,n,c){return l?h.jsx(Zb,Object.assign({},c,{component:l})):n?h.jsx($b,Object.assign({},c,{transition:n})):h.jsx(Vb,Object.assign({},c))}const Fb=["show","role","className","style","children","backdrop","keyboard","onBackdropClick","onEscapeKeyDown","transition","runTransition","backdropTransition","runBackdropTransition","autoFocus","enforceFocus","restoreFocus","restoreFocusOptions","renderDialog","renderBackdrop","manager","container","onShow","onHide","onExit","onExited","onExiting","onEnter","onEntering","onEntered"];function Jb(l,n){if(l==null)return{};var c={};for(var s in l)if({}.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}let Ro;function Pb(l){return Ro||(Ro=new uf({ownerDocument:l==null?void 0:l.document})),Ro}function Wb(l){const n=tf(),c=l||Pb(n),s=g.useRef({dialog:null,backdrop:null});return Object.assign(s.current,{add:()=>c.add(s.current),remove:()=>c.remove(s.current),isTopModal:()=>c.isTopModal(s.current),setDialogRef:g.useCallback(u=>{s.current.dialog=u},[]),setBackdropRef:g.useCallback(u=>{s.current.backdrop=u},[])})}const jp=g.forwardRef((l,n)=>{let{show:c=!1,role:s="dialog",className:u,style:f,children:d,backdrop:y=!0,keyboard:v=!0,onBackdropClick:p,onEscapeKeyDown:b,transition:R,runTransition:S,backdropTransition:_,runBackdropTransition:O,autoFocus:H=!0,enforceFocus:U=!0,restoreFocus:M=!0,restoreFocusOptions:q,renderDialog:Y,renderBackdrop:J=De=>h.jsx("div",Object.assign({},De)),manager:k,container:N,onShow:W,onHide:ie=()=>{},onExit:X,onExited:I,onExiting:de,onEnter:Ne,onEntering:Ye,onEntered:Be}=l,ze=Jb(l,Fb);const K=tf(),ce=qb(N),ne=Wb(k),Re=sb(),T=ob(c),[Q,le]=g.useState(!c),te=g.useRef(null);g.useImperativeHandle(n,()=>ne,[ne]),ri&&!T&&c&&(te.current=xo(K==null?void 0:K.document)),c&&Q&&le(!1);const P=pl(()=>{if(ne.add(),Ee.current=Bu(document,"keydown",Ce),Le.current=Bu(document,"focus",()=>setTimeout(ye),!0),W&&W(),H){var De,Rt;const St=xo((De=(Rt=ne.dialog)==null?void 0:Rt.ownerDocument)!=null?De:K==null?void 0:K.document);ne.dialog&&St&&!by(ne.dialog,St)&&(te.current=St,ne.dialog.focus())}}),ge=pl(()=>{if(ne.remove(),Ee.current==null||Ee.current(),Le.current==null||Le.current(),M){var De;(De=te.current)==null||De.focus==null||De.focus(q),te.current=null}});g.useEffect(()=>{!c||!ce||P()},[c,ce,P]),g.useEffect(()=>{Q&&ge()},[Q,ge]),Hb(()=>{ge()});const ye=pl(()=>{if(!U||!Re()||!ne.isTopModal())return;const De=xo(K==null?void 0:K.document);ne.dialog&&De&&!by(ne.dialog,De)&&ne.dialog.focus()}),Je=pl(De=>{De.target===De.currentTarget&&(p==null||p(De),y===!0&&ie())}),Ce=pl(De=>{v&&PE(De)&&ne.isTopModal()&&(b==null||b(De),De.defaultPrevented||ie())}),Le=g.useRef(),Ee=g.useRef(),Ze=(...De)=>{le(!0),I==null||I(...De)};if(!ce)return null;const vt=Object.assign({role:s,ref:ne.setDialogRef,"aria-modal":s==="dialog"?!0:void 0},ze,{style:f,className:u,tabIndex:-1});let it=Y?Y(vt):h.jsx("div",Object.assign({},vt,{children:g.cloneElement(d,{role:"document"})}));it=Ty(R,S,{unmountOnExit:!0,mountOnEnter:!0,appear:!0,in:!!c,onExit:X,onExiting:de,onExited:Ze,onEnter:Ne,onEntering:Ye,onEntered:Be,children:it});let lt=null;return y&&(lt=J({ref:ne.setBackdropRef,onClick:Je}),lt=Ty(_,O,{in:!!c,appear:!0,mountOnEnter:!0,unmountOnExit:!0,children:lt})),h.jsx(h.Fragment,{children:ii.createPortal(h.jsxs(h.Fragment,{children:[lt,it]}),ce)})});jp.displayName="Modal";const Ib=Object.assign(jp,{Manager:uf});function eS(l,n){return l.classList?l.classList.contains(n):(" "+(l.className.baseVal||l.className)+" ").indexOf(" "+n+" ")!==-1}function tS(l,n){l.classList?l.classList.add(n):eS(l,n)||(typeof l.className=="string"?l.className=l.className+" "+n:l.setAttribute("class",(l.className&&l.className.baseVal||"")+" "+n))}function Ny(l,n){return l.replace(new RegExp("(^|\\s)"+n+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}function nS(l,n){l.classList?l.classList.remove(n):typeof l.className=="string"?l.className=Ny(l.className,n):l.setAttribute("class",Ny(l.className&&l.className.baseVal||"",n))}const ni={FIXED_CONTENT:".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",STICKY_CONTENT:".sticky-top",NAVBAR_TOGGLER:".navbar-toggler"};class aS extends uf{adjustAndStore(n,c,s){const u=c.style[n];c.dataset[n]=u,gl(c,{[n]:`${parseFloat(gl(c,n))+s}px`})}restore(n,c){const s=c.dataset[n];s!==void 0&&(delete c.dataset[n],gl(c,{[n]:s}))}setContainerStyle(n){super.setContainerStyle(n);const c=this.getElement();if(tS(c,"modal-open"),!n.scrollBarWidth)return;const s=this.isRTL?"paddingLeft":"paddingRight",u=this.isRTL?"marginLeft":"marginRight";ti(c,ni.FIXED_CONTENT).forEach(f=>this.adjustAndStore(s,f,n.scrollBarWidth)),ti(c,ni.STICKY_CONTENT).forEach(f=>this.adjustAndStore(u,f,-n.scrollBarWidth)),ti(c,ni.NAVBAR_TOGGLER).forEach(f=>this.adjustAndStore(u,f,n.scrollBarWidth))}removeContainerStyle(n){super.removeContainerStyle(n);const c=this.getElement();nS(c,"modal-open");const s=this.isRTL?"paddingLeft":"paddingRight",u=this.isRTL?"marginLeft":"marginRight";ti(c,ni.FIXED_CONTENT).forEach(f=>this.restore(s,f)),ti(c,ni.STICKY_CONTENT).forEach(f=>this.restore(u,f)),ti(c,ni.NAVBAR_TOGGLER).forEach(f=>this.restore(u,f))}}let To;function lS(l){return To||(To=new aS(l)),To}const Op=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"modal-body"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Op.displayName="ModalBody";const Dp=g.createContext({onHide(){}}),cf=g.forwardRef(({bsPrefix:l,className:n,contentClassName:c,centered:s,size:u,fullscreen:f,children:d,scrollable:y,...v},p)=>{l=Qe(l,"modal");const b=`${l}-dialog`,R=typeof f=="string"?`${l}-fullscreen-${f}`:`${l}-fullscreen`;return h.jsx("div",{...v,ref:p,className:Ae(b,n,u&&`${l}-${u}`,s&&`${b}-centered`,y&&`${b}-scrollable`,f&&R),children:h.jsx("div",{className:Ae(`${l}-content`,c),children:d})})});cf.displayName="ModalDialog";const wp=g.forwardRef(({className:l,bsPrefix:n,as:c="div",...s},u)=>(n=Qe(n,"modal-footer"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));wp.displayName="ModalFooter";const iS=g.forwardRef(({closeLabel:l="Close",closeVariant:n,closeButton:c=!1,onHide:s,children:u,...f},d)=>{const y=g.useContext(Dp),v=Ho(()=>{y==null||y.onHide(),s==null||s()});return h.jsxs("div",{ref:d,...f,children:[u,c&&h.jsx(Io,{"aria-label":l,variant:n,onClick:v})]})}),Ap=g.forwardRef(({bsPrefix:l,className:n,closeLabel:c="Close",closeButton:s=!1,...u},f)=>(l=Qe(l,"modal-header"),h.jsx(iS,{ref:f,...u,className:Ae(n,l),closeLabel:c,closeButton:s})));Ap.displayName="ModalHeader";const rS=Po("h4"),Mp=g.forwardRef(({className:l,bsPrefix:n,as:c=rS,...s},u)=>(n=Qe(n,"modal-title"),h.jsx(c,{ref:u,className:Ae(l,n),...s})));Mp.displayName="ModalTitle";function uS(l){return h.jsx(Wo,{...l,timeout:null})}function cS(l){return h.jsx(Wo,{...l,timeout:null})}const zp=g.forwardRef(({bsPrefix:l,className:n,style:c,dialogClassName:s,contentClassName:u,children:f,dialogAs:d=cf,"data-bs-theme":y,"aria-labelledby":v,"aria-describedby":p,"aria-label":b,show:R=!1,animation:S=!0,backdrop:_=!0,keyboard:O=!0,onEscapeKeyDown:H,onShow:U,onHide:M,container:q,autoFocus:Y=!0,enforceFocus:J=!0,restoreFocus:k=!0,restoreFocusOptions:N,onEntered:W,onExit:ie,onExiting:X,onEnter:I,onEntering:de,onExited:Ne,backdropClassName:Ye,manager:Be,...ze},K)=>{const[ce,ne]=g.useState({}),[Re,T]=g.useState(!1),Q=g.useRef(!1),le=g.useRef(!1),te=g.useRef(null),[P,ge]=Lb(),ye=rp(K,ge),Je=Ho(M),Ce=BE();l=Qe(l,"modal");const Le=g.useMemo(()=>({onHide:Je}),[Je]);function Ee(){return Be||lS({isRTL:Ce})}function Ze(_e){if(!ri)return;const Ie=Ee().getScrollbarWidth()>0,Gt=_e.scrollHeight>Ku(_e).documentElement.clientHeight;ne({paddingRight:Ie&&!Gt?_y():void 0,paddingLeft:!Ie&&Gt?_y():void 0})}const vt=Ho(()=>{P&&Ze(P.dialog)});xb(()=>{Uo(window,"resize",vt),te.current==null||te.current()});const it=()=>{Q.current=!0},lt=_e=>{Q.current&&P&&_e.target===P.dialog&&(le.current=!0),Q.current=!1},De=()=>{T(!0),te.current=ip(P.dialog,()=>{T(!1)})},Rt=_e=>{_e.target===_e.currentTarget&&De()},St=_e=>{if(_==="static"){Rt(_e);return}if(le.current||_e.target!==_e.currentTarget){le.current=!1;return}M==null||M()},Pt=_e=>{O?H==null||H(_e):(_e.preventDefault(),_==="static"&&De())},Zt=(_e,Ie)=>{_e&&Ze(_e),I==null||I(_e,Ie)},un=_e=>{te.current==null||te.current(),ie==null||ie(_e)},cn=(_e,Ie)=>{de==null||de(_e,Ie),lp(window,"resize",vt)},Ut=_e=>{_e&&(_e.style.display=""),Ne==null||Ne(_e),Uo(window,"resize",vt)},Ht=g.useCallback(_e=>h.jsx("div",{..._e,className:Ae(`${l}-backdrop`,Ye,!S&&"show")}),[S,Ye,l]),mt={...c,...ce};mt.display="block";const Kt=_e=>h.jsx("div",{role:"dialog",..._e,style:mt,className:Ae(n,l,Re&&`${l}-static`,!S&&"show"),onClick:_?St:void 0,onMouseUp:lt,"data-bs-theme":y,"aria-label":b,"aria-labelledby":v,"aria-describedby":p,children:h.jsx(d,{...ze,onMouseDown:it,className:s,contentClassName:u,children:f})});return h.jsx(Dp.Provider,{value:Le,children:h.jsx(Ib,{show:R,ref:ye,backdrop:_,container:q,keyboard:!0,autoFocus:Y,enforceFocus:J,restoreFocus:k,restoreFocusOptions:N,onEscapeKeyDown:Pt,onShow:U,onHide:M,onEnter:Zt,onEntering:cn,onEntered:W,onExit:un,onExiting:X,onExited:Ut,manager:Ee(),transition:S?uS:void 0,backdropTransition:S?cS:void 0,renderBackdrop:Ht,renderDialog:Kt})})});zp.displayName="Modal";const ir=Object.assign(zp,{Body:Op,Header:Ap,Title:Mp,Footer:wp,Dialog:cf,TRANSITION_DURATION:300,BACKDROP_TRANSITION_DURATION:150}),Rn=g.forwardRef(({bsPrefix:l,className:n,as:c="div",...s},u)=>{const f=Qe(l,"row"),d=tp(),y=np(),v=`${f}-cols`,p=[];return d.forEach(b=>{const R=s[b];delete s[b];let S;R!=null&&typeof R=="object"?{cols:S}=R:S=R;const _=b!==y?`-${b}`:"";S!=null&&p.push(`${v}${_}-${S}`)}),h.jsx(c,{ref:u,...s,className:Ae(n,f,...p)})});Rn.displayName="Row";const sS="/static/DY3vaYXT.svg";function oS(){const l=Ke.c(6),{user:n}=g.useContext(Fo),{pathname:c}=Xn();let s;l[0]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx(ln,{xs:10,children:h.jsx("div",{className:"nav-wrapper",children:h.jsxs("nav",{className:"header-nav",children:[h.jsx("a",{href:"https://geant.org/",children:h.jsx("img",{src:sS,alt:"GÉANT Logo"})}),h.jsxs("ul",{children:[h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://network.geant.org/",children:"NETWORK"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://geant.org/services/",children:"SERVICES"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://community.geant.org/",children:"COMMUNITY"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://tnc23.geant.org/",children:"TNC"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://geant.org/projects/",children:"PROJECTS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://connect.geant.org/",children:"CONNECT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://impact.geant.org/",children:"IMPACT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://careers.geant.org/",children:"CAREERS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://about.geant.org/",children:"ABOUT"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://connect.geant.org/community-news",children:"NEWS"})}),h.jsx("li",{children:h.jsx("a",{className:"nav-link-entry",href:"https://resources.geant.org/",children:"RESOURCES"})}),h.jsx("li",{children:h.jsx(Tn,{className:"nav-link-entry",to:"/",children:"COMPENDIUM"})})]})]})})}),l[0]=s):s=l[0];let u;l[1]!==c||l[2]!==n.permissions.admin?(u=n.permissions.admin&&!c.includes("survey")&&h.jsx("div",{className:"nav-link",style:{float:"right"},children:h.jsx(Tn,{className:"nav-link-entry",to:"/survey",children:h.jsx("span",{children:"Go to Survey"})})}),l[1]=c,l[2]=n.permissions.admin,l[3]=u):u=l[3];let f;return l[4]!==u?(f=h.jsx("div",{className:"external-page-nav-bar",children:h.jsx(Ya,{children:h.jsxs(Rn,{children:[s,h.jsx(ln,{xs:2,children:u})]})})}),l[4]=u,l[5]=f):f=l[5],f}const fS="/static/A3T3A-a_.svg",dS="/static/DOOiIGTs.png";function hS(){const l=Ke.c(9);let n;l[0]===Symbol.for("react.memo_cache_sentinel")?(n=h.jsx("a",{href:"https://geant.org",children:h.jsx("img",{src:fS,className:"m-3",style:{maxWidth:"100px"},alt:"GÉANT Logo"})}),l[0]=n):n=l[0];let c;l[1]===Symbol.for("react.memo_cache_sentinel")?(c=h.jsxs(ln,{children:[n,h.jsx("img",{src:dS,className:"m-3",style:{maxWidth:"200px"},alt:"European Union Flag"})]}),l[1]=c):c=l[1];let s,u;l[2]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/Disclaimer/",children:"Disclaimer"}),u=h.jsx("wbr",{}),l[2]=s,l[3]=u):(s=l[2],u=l[3]);let f,d;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/geant-anti-slavery-policy/",children:"GEANT Anti‑Slavery Policy"}),d=h.jsx("wbr",{}),l[4]=f,l[5]=d):(f=l[4],d=l[5]);let y,v;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("a",{className:"mx-3 footer-link",href:"https://geant.org/Privacy-Notice/",children:"Privacy Policy"}),v=h.jsx("wbr",{}),l[6]=y,l[7]=v):(y=l[6],v=l[7]);let p;return l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx("footer",{className:"page-footer pt-3",children:h.jsx(Ya,{children:h.jsxs(Rn,{children:[c,h.jsx(ln,{className:"mt-4 text-end",children:h.jsxs("span",{children:[s,u,"|",f,d,"|",y,v,"|",h.jsx("a",{className:"mx-3 footer-link",style:{cursor:"pointer"},onClick:mS,children:"Analytics Consent"})]})})]})})}),l[8]=p):p=l[8],p}function mS(){localStorage.removeItem("matomo_consent"),window.location.reload()}const Lp="/static/C4lsyu6A.svg",Up="/static/DhA-EmEc.svg";function Hp(){const l=Ke.c(16),n=g.useContext(ep);let c;l[0]!==n?(c=O=>n==null?void 0:n.trackPageView(O),l[0]=n,l[1]=c):c=l[1];const s=c;let u;l[2]!==n?(u=O=>n==null?void 0:n.trackEvent(O),l[2]=n,l[3]=u):u=l[3];const f=u;let d;l[4]!==n?(d=()=>n==null?void 0:n.trackEvents(),l[4]=n,l[5]=d):d=l[5];const y=d;let v;l[6]!==n?(v=O=>n==null?void 0:n.trackLink(O),l[6]=n,l[7]=v):v=l[7];const p=v,b=yS;let R;l[8]!==n?(R=(O,...H)=>{const U=H;n==null||n.pushInstruction(O,...U)},l[8]=n,l[9]=R):R=l[9];const S=R;let _;return l[10]!==S||l[11]!==f||l[12]!==y||l[13]!==p||l[14]!==s?(_={trackEvent:f,trackEvents:y,trackPageView:s,trackLink:p,enableLinkTracking:b,pushInstruction:S},l[10]=S,l[11]=f,l[12]=y,l[13]=p,l[14]=s,l[15]=_):_=l[15],_}function yS(){}function Bp(){const l=Ke.c(13),{trackPageView:n}=Hp();let c,s;l[0]!==n?(c=()=>{n({documentTitle:"GEANT Compendium Landing Page"})},s=[n],l[0]=n,l[1]=c,l[2]=s):(c=l[1],s=l[2]),g.useEffect(c,s);let u;l[3]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx("h1",{className:"geant-header",children:"THE GÉANT COMPENDIUM OF NRENS"}),l[3]=u):u=l[3];let f;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(Rn,{children:h.jsxs("div",{className:"center-text",children:[u,h.jsxs("div",{className:"wordwrap pt-4",children:[h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"Each year GÉANT invites European National Research and Eduction Networks to fill in a questionnaire asking about their network, their organisation, standards and policies, connected users, and the services they offer their users. This Compendium of responses is an authoritative reference source for anyone with an interest in the development of research and education networking in Europe and beyond. No two NRENs are identical, with great diversity in their structures, funding, size, and focus."}),h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"The GÉANT Compendium of NRENs Report is published annually, using both data from the Compendium from other sources, including surveys and studies carried out within different teams within GÉANT and the NREN community. The Report gives a broad overview of the European NREN landscape, identifying developments and trends."}),h.jsx("p",{style:{textAlign:"left",fontSize:"20px"},children:"Compendium Data, the responses from the NRENs, are made available to be viewed and downloaded. Graphs, charts, and tables can be customised to show as many or few NRENs as required, across different years. These can be downloaded as images or in PDF form."})]})]})}),l[4]=f):f=l[4];let d;l[5]===Symbol.for("react.memo_cache_sentinel")?(d={backgroundColor:"white"},l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y={width:"18rem"},l[6]=y):y=l[6];let v;l[7]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx(Yn.Img,{src:Lp}),l[7]=v):v=l[7];let p;l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx(Yn.Title,{children:"Compendium Data"}),l[8]=p):p=l[8];let b;l[9]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx(ln,{align:"center",children:h.jsx(Yn,{border:"light",style:y,children:h.jsxs(Tn,{to:"/data",className:"link-text",children:[v,h.jsxs(Yn.Body,{children:[p,h.jsx(Yn.Text,{children:h.jsx("span",{children:"Statistical representation of the annual Compendium Survey data is available here"})})]})]})})}),l[9]=b):b=l[9];let R;l[10]===Symbol.for("react.memo_cache_sentinel")?(R={width:"18rem"},l[10]=R):R=l[10];let S;l[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx(Yn.Img,{src:Up}),l[11]=S):S=l[11];let _;return l[12]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsxs(Ya,{className:"py-5 grey-container",children:[f,h.jsx(Rn,{children:h.jsx(ln,{children:h.jsx(Ya,{style:d,className:"rounded-border",children:h.jsxs(Rn,{className:"justify-content-md-center",children:[b,h.jsx(ln,{align:"center",children:h.jsx(Yn,{border:"light",style:R,children:h.jsxs("a",{href:"https://resources.geant.org/geant-compendia/",className:"link-text",target:"_blank",rel:"noreferrer",children:[S,h.jsxs(Yn.Body,{children:[h.jsx(Yn.Title,{children:"Compendium Reports"}),h.jsx(Yn.Text,{children:"A GÉANT Compendium Report is published annually, drawing on data from the Compendium Survey filled in by NRENs, complemented by information from other surveys"})]})]})})})]})})})})]}),l[12]=_):_=l[12],_}var qp={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},Cy=Yt.createContext&&Yt.createContext(qp),pS=["attr","size","title"];function vS(l,n){if(l==null)return{};var c=gS(l,n),s,u;if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(l);for(u=0;u<f.length;u++)s=f[u],!(n.indexOf(s)>=0)&&Object.prototype.propertyIsEnumerable.call(l,s)&&(c[s]=l[s])}return c}function gS(l,n){if(l==null)return{};var c={};for(var s in l)if(Object.prototype.hasOwnProperty.call(l,s)){if(n.indexOf(s)>=0)continue;c[s]=l[s]}return c}function Yu(){return Yu=Object.assign?Object.assign.bind():function(l){for(var n=1;n<arguments.length;n++){var c=arguments[n];for(var s in c)Object.prototype.hasOwnProperty.call(c,s)&&(l[s]=c[s])}return l},Yu.apply(this,arguments)}function jy(l,n){var c=Object.keys(l);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(l);n&&(s=s.filter(function(u){return Object.getOwnPropertyDescriptor(l,u).enumerable})),c.push.apply(c,s)}return c}function Gu(l){for(var n=1;n<arguments.length;n++){var c=arguments[n]!=null?arguments[n]:{};n%2?jy(Object(c),!0).forEach(function(s){ES(l,s,c[s])}):Object.getOwnPropertyDescriptors?Object.defineProperties(l,Object.getOwnPropertyDescriptors(c)):jy(Object(c)).forEach(function(s){Object.defineProperty(l,s,Object.getOwnPropertyDescriptor(c,s))})}return l}function ES(l,n,c){return n=bS(n),n in l?Object.defineProperty(l,n,{value:c,enumerable:!0,configurable:!0,writable:!0}):l[n]=c,l}function bS(l){var n=SS(l,"string");return typeof n=="symbol"?n:n+""}function SS(l,n){if(typeof l!="object"||!l)return l;var c=l[Symbol.toPrimitive];if(c!==void 0){var s=c.call(l,n||"default");if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(n==="string"?String:Number)(l)}function Vp(l){return l&&l.map((n,c)=>Yt.createElement(n.tag,Gu({key:c},n.attr),Vp(n.child)))}function Yp(l){return n=>Yt.createElement(xS,Yu({attr:Gu({},l.attr)},n),Vp(l.child))}function xS(l){var n=c=>{var{attr:s,size:u,title:f}=l,d=vS(l,pS),y=u||c.size||"1em",v;return c.className&&(v=c.className),l.className&&(v=(v?v+" ":"")+l.className),Yt.createElement("svg",Yu({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},c.attr,s,d,{className:v,style:Gu(Gu({color:l.color||c.color},c.style),l.style),height:y,width:y,xmlns:"http://www.w3.org/2000/svg"}),f&&Yt.createElement("title",null,f),l.children)};return Cy!==void 0?Yt.createElement(Cy.Consumer,null,c=>n(c)):n(qp)}function _S(l){return Yp({tag:"svg",attr:{viewBox:"0 0 1024 1024",fill:"currentColor",fillRule:"evenodd"},child:[{tag:"path",attr:{d:"M799.855 166.312c.023.007.043.018.084.059l57.69 57.69c.041.041.052.06.059.084a.118.118 0 0 1 0 .069c-.007.023-.018.042-.059.083L569.926 512l287.703 287.703c.041.04.052.06.059.083a.118.118 0 0 1 0 .07c-.007.022-.018.042-.059.083l-57.69 57.69c-.041.041-.06.052-.084.059a.118.118 0 0 1-.069 0c-.023-.007-.042-.018-.083-.059L512 569.926 224.297 857.629c-.04.041-.06.052-.083.059a.118.118 0 0 1-.07 0c-.022-.007-.042-.018-.083-.059l-57.69-57.69c-.041-.041-.052-.06-.059-.084a.118.118 0 0 1 0-.069c.007-.023.018-.042.059-.083L454.073 512 166.371 224.297c-.041-.04-.052-.06-.059-.083a.118.118 0 0 1 0-.07c.007-.022.018-.042.059-.083l57.69-57.69c.041-.041.06-.052.084-.059a.118.118 0 0 1 .069 0c.023.007.042.018.083.059L512 454.073l287.703-287.702c.04-.041.06-.052.083-.059a.118.118 0 0 1 .07 0Z"},child:[]}]})(l)}function RS(l){return Yp({tag:"svg",attr:{viewBox:"0 0 1024 1024"},child:[{tag:"path",attr:{d:"M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8Z"},child:[]},{tag:"path",attr:{d:"M192 474h672q8 0 8 8v60q0 8-8 8H160q-8 0-8-8v-60q0-8 8-8Z"},child:[]}]})(l)}const rr=l=>{const n=Ke.c(23),{title:c,children:s,startCollapsed:u,theme:f}=l,d=f===void 0?"":f,[y,v]=g.useState(!!u);let p;n[0]===Symbol.for("react.memo_cache_sentinel")?(p={color:"white",paddingBottom:"3px",marginTop:"3px",marginLeft:"3px",scale:"1.3"},n[0]=p):p=n[0];let b=p;if(d){let k;n[1]===Symbol.for("react.memo_cache_sentinel")?(k={...b,color:"black",fontWeight:"bold"},n[1]=k):k=n[1],b=k}const R=`collapsible-box${d} p-0`;let S;n[2]!==c?(S=h.jsx(ln,{children:h.jsx("h1",{className:"bold-caps-16pt dark-teal pt-3 ps-3",children:c})}),n[2]=c,n[3]=S):S=n[3];const _=`toggle-btn${d} p-${d?3:2}`;let O;n[4]!==y?(O=()=>v(!y),n[4]=y,n[5]=O):O=n[5];let H;n[6]!==y||n[7]!==b?(H=y?h.jsx(RS,{style:b}):h.jsx(_S,{style:b}),n[6]=y,n[7]=b,n[8]=H):H=n[8];let U;n[9]!==_||n[10]!==O||n[11]!==H?(U=h.jsx(ln,{className:"flex-grow-0 flex-shrink-1",children:h.jsx("div",{className:_,onClick:O,children:H})}),n[9]=_,n[10]=O,n[11]=H,n[12]=U):U=n[12];let M;n[13]!==S||n[14]!==U?(M=h.jsxs(Rn,{children:[S,U]}),n[13]=S,n[14]=U,n[15]=M):M=n[15];const q=`collapsible-content${y?" collapsed":""}`;let Y;n[16]!==s||n[17]!==q?(Y=h.jsx("div",{className:q,children:s}),n[16]=s,n[17]=q,n[18]=Y):Y=n[18];let J;return n[19]!==Y||n[20]!==R||n[21]!==M?(J=h.jsxs("div",{className:R,children:[M,Y]}),n[19]=Y,n[20]=R,n[21]=M,n[22]=J):J=n[22],J};function TS(l){const n=Ke.c(8),{section:c}=l;let s;n[0]===Symbol.for("react.memo_cache_sentinel")?(s={display:"flex",alignSelf:"right",lineHeight:"1.5rem",marginTop:"0.5rem"},n[0]=s):s=n[0];let u,f;n[1]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx("br",{}),f={float:"right"},n[1]=u,n[2]=f):(u=n[1],f=n[2]);let d;n[3]!==c?(d=h.jsx("div",{style:s,children:h.jsxs("span",{children:["Compendium ",u,h.jsx("span",{style:f,children:c})]})}),n[3]=c,n[4]=d):d=n[4];let y;n[5]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("img",{src:Up,style:{maxWidth:"4rem"},alt:"Compendium Data logo"}),n[5]=y):y=n[5];let v;return n[6]!==d?(v=h.jsxs("div",{className:"bold-caps-17pt section-container",children:[d,y]}),n[6]=d,n[7]=v):v=n[7],v}function NS(l){const n=Ke.c(14),{type:c}=l;let s="";c=="data"?s=" compendium-data-header":c=="reports"&&(s=" compendium-reports-header");let u;n[0]===Symbol.for("react.memo_cache_sentinel")?(u={marginTop:"0.5rem"},n[0]=u):u=n[0];const f=c==="data"?"/data":"/";let d;n[1]===Symbol.for("react.memo_cache_sentinel")?(d={textDecoration:"none",color:"white"},n[1]=d):d=n[1];const y=c==="data"?"Data":"Reports";let v;n[2]!==y?(v=h.jsxs("span",{children:["Compendium ",y]}),n[2]=y,n[3]=v):v=n[3];let p;n[4]!==f||n[5]!==v?(p=h.jsx(ln,{sm:8,children:h.jsx("h1",{className:"bold-caps-30pt",style:u,children:h.jsx(Tn,{to:f,style:d,children:v})})}),n[4]=f,n[5]=v,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b={color:"inherit"},n[7]=b):b=n[7];let R;n[8]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx(ln,{sm:4,children:h.jsx("a",{style:b,href:"https://resources.geant.org/geant-compendia/",target:"_blank",rel:"noreferrer",children:h.jsx(TS,{section:"Reports"})})}),n[8]=R):R=n[8];let S;n[9]!==p?(S=h.jsx(Ya,{children:h.jsxs(Rn,{children:[p,R]})}),n[9]=p,n[10]=S):S=n[10];let _;return n[11]!==s||n[12]!==S?(_=h.jsx("div",{className:s,children:S}),n[11]=s,n[12]=S,n[13]=_):_=n[13],_}function CS(l){const n=Ke.c(8),{children:c,type:s}=l;let u="";s=="data"?u=" compendium-data-banner":s=="reports"&&(u=" compendium-reports-banner");let f,d;n[0]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx("img",{src:Lp,style:{maxWidth:"7rem",marginBottom:"1rem"},alt:"Compendium Data logo"}),d={display:"flex",alignSelf:"right"},n[0]=f,n[1]=d):(f=n[0],d=n[1]);let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y={paddingTop:"1rem"},n[2]=y):y=n[2];let v;n[3]!==c?(v=h.jsx(Ya,{children:h.jsx(Rn,{children:h.jsx(Rn,{children:h.jsxs("div",{className:"section-container",children:[f,h.jsx("div",{style:d,children:h.jsx("div",{className:"center-text",style:y,children:c})})]})})})}),n[3]=c,n[4]=v):v=n[4];let p;return n[5]!==u||n[6]!==v?(p=h.jsx("div",{className:u,children:v}),n[5]=u,n[6]=v,n[7]=p):p=n[7],p}var li=(l=>(l.Organisation="ORGANISATION",l.Policy="STANDARDS AND POLICIES",l.ConnectedUsers="CONNECTED USERS",l.Network="NETWORK",l.Services="SERVICES",l))(li||{}),jS=(l=>(l.CSV="CSV",l.EXCEL="EXCEL",l))(jS||{}),OS=(l=>(l.PNG="png",l.JPEG="jpeg",l.SVG="svg",l))(OS||{});const V2={universities:"Universities & Other (ISCED 6-8)",further_education:"Further education (ISCED 4-5)",secondary_schools:"Secondary schools (ISCED 2-3)",primary_schools:"Primary schools (ISCED 1)",institutes:"Research Institutes",cultural:"Libraries, Museums, Archives, Cultural institutions",hospitals:"Non-university public Hospitals",government:"Government departments (national, regional, local)",iros:"International (virtual) research organisations",for_profit_orgs:"For-profit organisations"},Y2={commercial_r_and_e:"Commercial R&E traffic only",commercial_general:"Commercial general",commercial_collaboration:"Commercial for collaboration only (project/time limited)",commercial_service_provider:"Commercial Service Provider",university_spin_off:"University Spin Off/Incubator"},G2={collaboration:"Connection to your network for collaboration with R&E users",service_supplier:"Connection to your network for supplying services for R&E",direct_peering:"Direct peering (e.g. direct peering or cloud peering)"};function DS(){const l=Ke.c(7),{preview:n,setPreview:c}=g.useContext(Iy),{user:s}=g.useContext(Fo),[u]=lE();let f;l[0]!==u?(f=u.get("preview"),l[0]=u,l[1]=f):f=l[1];const d=f;let y,v;return l[2]!==d||l[3]!==c||l[4]!==s?(y=()=>{d!==null&&(s.permissions.admin||s.role=="observer")&&c(!0)},v=[d,c,s],l[2]=d,l[3]=c,l[4]=s,l[5]=y,l[6]=v):(y=l[5],v=l[6]),g.useEffect(y,v),n}function yr(l){const n=Ke.c(9),{to:c,children:s}=l,u=window.location.pathname===c,f=g.useRef(null);let d,y;n[0]!==u?(d=()=>{u&&f.current&&f.current.scrollIntoView({behavior:"smooth",block:"center"})},y=[u],n[0]=u,n[1]=d,n[2]=y):(d=n[1],y=n[2]),g.useEffect(d,y);let v;n[3]!==s||n[4]!==u?(v=u?h.jsx("b",{children:s}):s,n[3]=s,n[4]=u,n[5]=v):v=n[5];let p;return n[6]!==v||n[7]!==c?(p=h.jsx(Rn,{children:h.jsx(Tn,{to:c,className:"link-text-underline",ref:f,children:v})}),n[6]=v,n[7]=c,n[8]=p):p=n[8],p}const se={budget:"Budget of NRENs per Year",funding:"Income Source of NRENs",charging:"Charging Mechanism of NRENs","employee-count":"Number of NREN Employees",roles:"Roles of NREN employees (Technical v. Non-Technical)",employment:"Types of Employment within NRENs",suborganisations:"NREN Sub-Organisations",parentorganisation:"NREN Parent Organisations","ec-projects":"NREN Involvement in European Commission Projects",policy:"NREN Policies",audits:"External and Internal Audits of Information Security Management Systems","business-continuity":"NREN Business Continuity Planning","central-procurement":"Value of Software Procured for Customers by NRENs","crisis-management":"Crisis Management Procedures","crisis-exercise":"Crisis Exercises - NREN Operation and Participation",eosc_listings:"NREN Services Listed on the EOSC Portal","security-control":"Security Controls Used by NRENs","services-offered":"Services Offered by NRENs by Types of Users","corporate-strategy":"NREN Corporate Strategies","service-level-targets":"NRENs Offering Service Level Targets","service-management-framework":"NRENs Operating a Formal Service Management Framework","institutions-urls":"Webpages Listing Institutions and Organisations Connected to NREN Networks","connected-proportion":"Proportion of Different Categories of Institutions Served by NRENs","connectivity-level":"Level of IP Connectivity by Institution Type","connection-carrier":"Methods of Carrying IP Traffic to Users","connectivity-load":"Connectivity Load","connectivity-growth":"Connectivity Growth","remote-campuses":"NREN Connectivity to Remote Campuses in Other Countries","commercial-charging-level":"Commercial Charging Level","commercial-connectivity":"Commercial Connectivity","traffic-volume":"NREN Traffic - NREN Customers & External Networks","iru-duration":"Average Duration of IRU leases of Fibre by NRENs","fibre-light":"Approaches to lighting NREN fibre networks","dark-fibre-lease":"Kilometres of Leased Dark Fibre (National)","dark-fibre-lease-international":"Kilometres of Leased Dark Fibre (International)","dark-fibre-installed":"Kilometres of Installed Dark Fibre","network-map":"NREN Network Maps","monitoring-tools":"Tools for Monitoring or Troubleshooting the Network - Offered to Client Institutions","pert-team":"NRENs with Performance Enhancement Response Teams","passive-monitoring":"Methods for Passively Monitoring International Traffic","traffic-stats":"Traffic Statistics","weather-map":"NREN Online Network Weather Maps","certificate-provider":"Certification Services used by NRENs","siem-vendors":"Vendors of SIEM/SOC systems used by NRENs","alien-wave":"NREN Use of 3rd Party Alienwave/Lightpath Services","alien-wave-internal":"Internal NREN Use of Alien Waves","capacity-largest-link":"Capacity of the Largest Link in an NREN Network","external-connections":"NREN External IP Connections","capacity-core-ip":"NREN Core IP Capacity","non-rne-peers":"Number of Non-R&E Networks NRENs Peer With","traffic-ratio":"Types of traffic in NREN networks (Commodity v. Research & Education)","ops-automation":"NREN Automation of Operational Processes","network-automation":"Network Tasks for which NRENs Use Automation",nfv:"Kinds of Network Function Virtualisation used by NRENs","network-services":"NREN Network services matrix","isp-support-services":"NREN ISP support services matrix","security-services":"NREN Security services matrix","identity-services":"NREN Identity services matrix","collaboration-services":"NREN Collaboration services matrix","multimedia-services":"NREN Multimedia services matrix","storage-and-hosting-services":"NREN Storage and hosting services matrix","professional-services":"NREN Professional services matrix"};function wS(l){const n=Ke.c(52),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Organisation"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Budget, Income and Billing"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se.budget}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/budget",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se.funding}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/funding",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se.charging}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/charging",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O,H;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("hr",{className:"fake-divider"}),H=h.jsx("h6",{className:"section-title",children:"Staff and Projects"}),n[15]=O,n[16]=H):(O=n[15],H=n[16]);let U;n[17]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["employee-count"]}),n[17]=U):U=n[17];let M;n[18]!==u||n[19]!==f?(M=h.jsx(u,{to:"/employee-count",className:f,children:U}),n[18]=u,n[19]=f,n[20]=M):M=n[20];let q;n[21]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se.employment}),n[21]=q):q=n[21];let Y;n[22]!==u||n[23]!==f?(Y=h.jsx(u,{to:"/employment",className:f,children:q}),n[22]=u,n[23]=f,n[24]=Y):Y=n[24];let J;n[25]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("span",{children:se.roles}),n[25]=J):J=n[25];let k;n[26]!==u||n[27]!==f?(k=h.jsx(u,{to:"/roles",className:f,children:J}),n[26]=u,n[27]=f,n[28]=k):k=n[28];let N;n[29]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:se.parentorganisation}),n[29]=N):N=n[29];let W;n[30]!==u||n[31]!==f?(W=h.jsx(u,{to:"/parentorganisation",className:f,children:N}),n[30]=u,n[31]=f,n[32]=W):W=n[32];let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se.suborganisations}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/suborganisations",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["ec-projects"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/ec-projects",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;return n[41]!==M||n[42]!==Y||n[43]!==k||n[44]!==W||n[45]!==d||n[46]!==X||n[47]!==de||n[48]!==p||n[49]!==R||n[50]!==_?(Ne=h.jsxs(h.Fragment,{children:[d,y,p,R,_,O,H,M,Y,k,W,X,de]}),n[41]=M,n[42]=Y,n[43]=k,n[44]=W,n[45]=d,n[46]=X,n[47]=de,n[48]=p,n[49]=R,n[50]=_,n[51]=Ne):Ne=n[51],Ne}function AS(l){const n=Ke.c(61),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Standards And Policies"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Policy & Portfolio"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["corporate-strategy"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/corporate-strategy",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se.policy}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/policy",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["central-procurement"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/central-procurement",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["service-management-framework"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/service-management-framework",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["service-level-targets"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/service-level-targets",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["services-offered"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/services-offered",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("h6",{className:"section-title",children:"Standards"}),n[27]=J):J=n[27];let k;n[28]===Symbol.for("react.memo_cache_sentinel")?(k=h.jsx("span",{children:se.audits}),n[28]=k):k=n[28];let N;n[29]!==u||n[30]!==f?(N=h.jsx(u,{to:"/audits",className:f,children:k}),n[29]=u,n[30]=f,n[31]=N):N=n[31];let W;n[32]===Symbol.for("react.memo_cache_sentinel")?(W=h.jsx("span",{children:se["business-continuity"]}),n[32]=W):W=n[32];let ie;n[33]!==u||n[34]!==f?(ie=h.jsx(u,{to:"/business-continuity",className:f,children:W}),n[33]=u,n[34]=f,n[35]=ie):ie=n[35];let X;n[36]===Symbol.for("react.memo_cache_sentinel")?(X=h.jsx("span",{children:se["crisis-management"]}),n[36]=X):X=n[36];let I;n[37]!==u||n[38]!==f?(I=h.jsx(u,{to:"/crisis-management",className:f,children:X}),n[37]=u,n[38]=f,n[39]=I):I=n[39];let de;n[40]===Symbol.for("react.memo_cache_sentinel")?(de=h.jsx("span",{children:se["crisis-exercise"]}),n[40]=de):de=n[40];let Ne;n[41]!==u||n[42]!==f?(Ne=h.jsx(u,{to:"/crisis-exercise",className:f,children:de}),n[41]=u,n[42]=f,n[43]=Ne):Ne=n[43];let Ye;n[44]===Symbol.for("react.memo_cache_sentinel")?(Ye=h.jsx("span",{children:se["security-control"]}),n[44]=Ye):Ye=n[44];let Be;n[45]!==u||n[46]!==f?(Be=h.jsx(u,{to:"/security-control",className:f,children:Ye}),n[45]=u,n[46]=f,n[47]=Be):Be=n[47];let ze;return n[48]!==H||n[49]!==M||n[50]!==Y||n[51]!==N||n[52]!==d||n[53]!==ie||n[54]!==I||n[55]!==Ne||n[56]!==Be||n[57]!==p||n[58]!==R||n[59]!==_?(ze=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,J,N,ie,I,Ne,Be]}),n[48]=H,n[49]=M,n[50]=Y,n[51]=N,n[52]=d,n[53]=ie,n[54]=I,n[55]=Ne,n[56]=Be,n[57]=p,n[58]=R,n[59]=_,n[60]=ze):ze=n[60],ze}function MS(l){const n=Ke.c(52),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Connected Users"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Connected Users"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["institutions-urls"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/institutions-urls",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se["connected-proportion"]}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/connected-proportion",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["connectivity-level"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/connectivity-level",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["connection-carrier"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/connection-carrier",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["connectivity-load"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/connectivity-load",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["connectivity-growth"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/connectivity-growth",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("span",{children:se["remote-campuses"]}),n[27]=J):J=n[27];let k;n[28]!==u||n[29]!==f?(k=h.jsx(u,{to:"/remote-campuses",className:f,children:J}),n[28]=u,n[29]=f,n[30]=k):k=n[30];let N,W;n[31]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("hr",{className:"fake-divider"}),W=h.jsx("h6",{className:"section-title",children:"Connected Users - Commercial"}),n[31]=N,n[32]=W):(N=n[31],W=n[32]);let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se["commercial-charging-level"]}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/commercial-charging-level",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["commercial-connectivity"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/commercial-connectivity",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;return n[41]!==H||n[42]!==M||n[43]!==Y||n[44]!==k||n[45]!==d||n[46]!==X||n[47]!==de||n[48]!==p||n[49]!==R||n[50]!==_?(Ne=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,k,N,W,X,de]}),n[41]=H,n[42]=M,n[43]=Y,n[44]=k,n[45]=d,n[46]=X,n[47]=de,n[48]=p,n[49]=R,n[50]=_,n[51]=Ne):Ne=n[51],Ne}function zS(l){const n=Ke.c(133),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Network"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("h6",{className:"section-title",children:"Connectivity"}),n[2]=y):y=n[2];let v;n[3]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx("span",{children:se["dark-fibre-lease"]}),n[3]=v):v=n[3];let p;n[4]!==u||n[5]!==f?(p=h.jsx(u,{to:"/dark-fibre-lease",className:f,children:v}),n[4]=u,n[5]=f,n[6]=p):p=n[6];let b;n[7]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsx("span",{children:se["dark-fibre-lease-international"]}),n[7]=b):b=n[7];let R;n[8]!==u||n[9]!==f?(R=h.jsx(u,{to:"/dark-fibre-lease-international",className:f,children:b}),n[8]=u,n[9]=f,n[10]=R):R=n[10];let S;n[11]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("span",{children:se["iru-duration"]}),n[11]=S):S=n[11];let _;n[12]!==u||n[13]!==f?(_=h.jsx(u,{to:"/iru-duration",className:f,children:S}),n[12]=u,n[13]=f,n[14]=_):_=n[14];let O;n[15]===Symbol.for("react.memo_cache_sentinel")?(O=h.jsx("span",{children:se["dark-fibre-installed"]}),n[15]=O):O=n[15];let H;n[16]!==u||n[17]!==f?(H=h.jsx(u,{to:"/dark-fibre-installed",className:f,children:O}),n[16]=u,n[17]=f,n[18]=H):H=n[18];let U;n[19]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx("span",{children:se["fibre-light"]}),n[19]=U):U=n[19];let M;n[20]!==u||n[21]!==f?(M=h.jsx(u,{to:"/fibre-light",className:f,children:U}),n[20]=u,n[21]=f,n[22]=M):M=n[22];let q;n[23]===Symbol.for("react.memo_cache_sentinel")?(q=h.jsx("span",{children:se["network-map"]}),n[23]=q):q=n[23];let Y;n[24]!==u||n[25]!==f?(Y=h.jsx(u,{to:"/network-map",className:f,children:q}),n[24]=u,n[25]=f,n[26]=Y):Y=n[26];let J,k;n[27]===Symbol.for("react.memo_cache_sentinel")?(J=h.jsx("hr",{className:"fake-divider"}),k=h.jsx("h6",{className:"section-title",children:"Performance Monitoring & Management"}),n[27]=J,n[28]=k):(J=n[27],k=n[28]);let N;n[29]===Symbol.for("react.memo_cache_sentinel")?(N=h.jsx("span",{children:se["monitoring-tools"]}),n[29]=N):N=n[29];let W;n[30]!==u||n[31]!==f?(W=h.jsx(u,{to:"/monitoring-tools",className:f,children:N}),n[30]=u,n[31]=f,n[32]=W):W=n[32];let ie;n[33]===Symbol.for("react.memo_cache_sentinel")?(ie=h.jsx("span",{children:se["passive-monitoring"]}),n[33]=ie):ie=n[33];let X;n[34]!==u||n[35]!==f?(X=h.jsx(u,{to:"/passive-monitoring",className:f,children:ie}),n[34]=u,n[35]=f,n[36]=X):X=n[36];let I;n[37]===Symbol.for("react.memo_cache_sentinel")?(I=h.jsx("span",{children:se["traffic-stats"]}),n[37]=I):I=n[37];let de;n[38]!==u||n[39]!==f?(de=h.jsx(u,{to:"/traffic-stats",className:f,children:I}),n[38]=u,n[39]=f,n[40]=de):de=n[40];let Ne;n[41]===Symbol.for("react.memo_cache_sentinel")?(Ne=h.jsx("span",{children:se["siem-vendors"]}),n[41]=Ne):Ne=n[41];let Ye;n[42]!==u||n[43]!==f?(Ye=h.jsx(u,{to:"/siem-vendors",className:f,children:Ne}),n[42]=u,n[43]=f,n[44]=Ye):Ye=n[44];let Be;n[45]===Symbol.for("react.memo_cache_sentinel")?(Be=h.jsx("span",{children:se["certificate-provider"]}),n[45]=Be):Be=n[45];let ze;n[46]!==u||n[47]!==f?(ze=h.jsx(u,{to:"/certificate-providers",className:f,children:Be}),n[46]=u,n[47]=f,n[48]=ze):ze=n[48];let K;n[49]===Symbol.for("react.memo_cache_sentinel")?(K=h.jsx("span",{children:se["weather-map"]}),n[49]=K):K=n[49];let ce;n[50]!==u||n[51]!==f?(ce=h.jsx(u,{to:"/weather-map",className:f,children:K}),n[50]=u,n[51]=f,n[52]=ce):ce=n[52];let ne;n[53]===Symbol.for("react.memo_cache_sentinel")?(ne=h.jsx("span",{children:se["pert-team"]}),n[53]=ne):ne=n[53];let Re;n[54]!==u||n[55]!==f?(Re=h.jsx(u,{to:"/pert-team",className:f,children:ne}),n[54]=u,n[55]=f,n[56]=Re):Re=n[56];let T,Q;n[57]===Symbol.for("react.memo_cache_sentinel")?(T=h.jsx("hr",{className:"fake-divider"}),Q=h.jsx("h6",{className:"section-title",children:"Alienwave"}),n[57]=T,n[58]=Q):(T=n[57],Q=n[58]);let le;n[59]===Symbol.for("react.memo_cache_sentinel")?(le=h.jsx("span",{children:se["alien-wave"]}),n[59]=le):le=n[59];let te;n[60]!==u||n[61]!==f?(te=h.jsx(u,{to:"/alien-wave",className:f,children:le}),n[60]=u,n[61]=f,n[62]=te):te=n[62];let P;n[63]===Symbol.for("react.memo_cache_sentinel")?(P=h.jsx("span",{children:se["alien-wave-internal"]}),n[63]=P):P=n[63];let ge;n[64]!==u||n[65]!==f?(ge=h.jsx(u,{to:"/alien-wave-internal",className:f,children:P}),n[64]=u,n[65]=f,n[66]=ge):ge=n[66];let ye,Je;n[67]===Symbol.for("react.memo_cache_sentinel")?(ye=h.jsx("hr",{className:"fake-divider"}),Je=h.jsx("h6",{className:"section-title",children:"Capacity"}),n[67]=ye,n[68]=Je):(ye=n[67],Je=n[68]);let Ce;n[69]===Symbol.for("react.memo_cache_sentinel")?(Ce=h.jsx("span",{children:se["capacity-largest-link"]}),n[69]=Ce):Ce=n[69];let Le;n[70]!==u||n[71]!==f?(Le=h.jsx(u,{to:"/capacity-largest-link",className:f,children:Ce}),n[70]=u,n[71]=f,n[72]=Le):Le=n[72];let Ee;n[73]===Symbol.for("react.memo_cache_sentinel")?(Ee=h.jsx("span",{children:se["capacity-core-ip"]}),n[73]=Ee):Ee=n[73];let Ze;n[74]!==u||n[75]!==f?(Ze=h.jsx(u,{to:"/capacity-core-ip",className:f,children:Ee}),n[74]=u,n[75]=f,n[76]=Ze):Ze=n[76];let vt;n[77]===Symbol.for("react.memo_cache_sentinel")?(vt=h.jsx("span",{children:se["external-connections"]}),n[77]=vt):vt=n[77];let it;n[78]!==u||n[79]!==f?(it=h.jsx(u,{to:"/external-connections",className:f,children:vt}),n[78]=u,n[79]=f,n[80]=it):it=n[80];let lt;n[81]===Symbol.for("react.memo_cache_sentinel")?(lt=h.jsx("span",{children:se["non-rne-peers"]}),n[81]=lt):lt=n[81];let De;n[82]!==u||n[83]!==f?(De=h.jsx(u,{to:"/non-rne-peers",className:f,children:lt}),n[82]=u,n[83]=f,n[84]=De):De=n[84];let Rt;n[85]===Symbol.for("react.memo_cache_sentinel")?(Rt=h.jsx("span",{children:se["traffic-volume"]}),n[85]=Rt):Rt=n[85];let St;n[86]!==u||n[87]!==f?(St=h.jsx(u,{to:"/traffic-volume",className:f,children:Rt}),n[86]=u,n[87]=f,n[88]=St):St=n[88];let Pt;n[89]===Symbol.for("react.memo_cache_sentinel")?(Pt=h.jsx("span",{children:se["traffic-ratio"]}),n[89]=Pt):Pt=n[89];let Zt;n[90]!==u||n[91]!==f?(Zt=h.jsx(u,{to:"/traffic-ratio",className:f,children:Pt}),n[90]=u,n[91]=f,n[92]=Zt):Zt=n[92];let un,cn;n[93]===Symbol.for("react.memo_cache_sentinel")?(un=h.jsx("hr",{className:"fake-divider"}),cn=h.jsx("h6",{className:"section-title",children:"Software-Defined Networking (SDN) & Network Function Virtualisation(NFV)"}),n[93]=un,n[94]=cn):(un=n[93],cn=n[94]);let Ut;n[95]===Symbol.for("react.memo_cache_sentinel")?(Ut=h.jsx("span",{children:se["ops-automation"]}),n[95]=Ut):Ut=n[95];let Ht;n[96]!==u||n[97]!==f?(Ht=h.jsx(u,{to:"/ops-automation",className:f,children:Ut}),n[96]=u,n[97]=f,n[98]=Ht):Ht=n[98];let mt;n[99]===Symbol.for("react.memo_cache_sentinel")?(mt=h.jsx("span",{children:se.nfv}),n[99]=mt):mt=n[99];let Kt;n[100]!==u||n[101]!==f?(Kt=h.jsx(u,{to:"/nfv",className:f,children:mt}),n[100]=u,n[101]=f,n[102]=Kt):Kt=n[102];let _e;n[103]===Symbol.for("react.memo_cache_sentinel")?(_e=h.jsx("span",{children:se["network-automation"]}),n[103]=_e):_e=n[103];let Ie;n[104]!==u||n[105]!==f?(Ie=h.jsx(u,{to:"/network-automation",className:f,children:_e}),n[104]=u,n[105]=f,n[106]=Ie):Ie=n[106];let Gt;return n[107]!==H||n[108]!==M||n[109]!==Y||n[110]!==W||n[111]!==d||n[112]!==X||n[113]!==de||n[114]!==Ye||n[115]!==ze||n[116]!==ce||n[117]!==Re||n[118]!==te||n[119]!==ge||n[120]!==Le||n[121]!==Ze||n[122]!==it||n[123]!==De||n[124]!==St||n[125]!==p||n[126]!==Zt||n[127]!==Ht||n[128]!==Kt||n[129]!==Ie||n[130]!==R||n[131]!==_?(Gt=h.jsxs(h.Fragment,{children:[d,y,p,R,_,H,M,Y,J,k,W,X,de,Ye,ze,ce,Re,T,Q,te,ge,ye,Je,Le,Ze,it,De,St,Zt,un,cn,Ht,Kt,Ie]}),n[107]=H,n[108]=M,n[109]=Y,n[110]=W,n[111]=d,n[112]=X,n[113]=de,n[114]=Ye,n[115]=ze,n[116]=ce,n[117]=Re,n[118]=te,n[119]=ge,n[120]=Le,n[121]=Ze,n[122]=it,n[123]=De,n[124]=St,n[125]=p,n[126]=Zt,n[127]=Ht,n[128]=Kt,n[129]=Ie,n[130]=R,n[131]=_,n[132]=Gt):Gt=n[132],Gt}function LS(l){const n=Ke.c(44),{sidebar:c}=l,s=c===void 0?!1:c,u=s?yr:Tn,f=s?"":"link-text-underline";let d;n[0]!==s?(d=s&&h.jsx("h5",{children:"Services"}),n[0]=s,n[1]=d):d=n[1];let y;n[2]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx("span",{children:se["network-services"]}),n[2]=y):y=n[2];let v;n[3]!==u||n[4]!==f?(v=h.jsx(u,{to:"/network-services",className:f,children:y}),n[3]=u,n[4]=f,n[5]=v):v=n[5];let p;n[6]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx("span",{children:se["isp-support-services"]}),n[6]=p):p=n[6];let b;n[7]!==u||n[8]!==f?(b=h.jsx(u,{to:"/isp-support-services",className:f,children:p}),n[7]=u,n[8]=f,n[9]=b):b=n[9];let R;n[10]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx("span",{children:se["security-services"]}),n[10]=R):R=n[10];let S;n[11]!==u||n[12]!==f?(S=h.jsx(u,{to:"/security-services",className:f,children:R}),n[11]=u,n[12]=f,n[13]=S):S=n[13];let _;n[14]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsx("span",{children:se["identity-services"]}),n[14]=_):_=n[14];let O;n[15]!==u||n[16]!==f?(O=h.jsx(u,{to:"/identity-services",className:f,children:_}),n[15]=u,n[16]=f,n[17]=O):O=n[17];let H;n[18]===Symbol.for("react.memo_cache_sentinel")?(H=h.jsx("span",{children:se["storage-and-hosting-services"]}),n[18]=H):H=n[18];let U;n[19]!==u||n[20]!==f?(U=h.jsx(u,{to:"/storage-and-hosting-services",className:f,children:H}),n[19]=u,n[20]=f,n[21]=U):U=n[21];let M;n[22]===Symbol.for("react.memo_cache_sentinel")?(M=h.jsx("span",{children:se["multimedia-services"]}),n[22]=M):M=n[22];let q;n[23]!==u||n[24]!==f?(q=h.jsx(u,{to:"/multimedia-services",className:f,children:M}),n[23]=u,n[24]=f,n[25]=q):q=n[25];let Y;n[26]===Symbol.for("react.memo_cache_sentinel")?(Y=h.jsx("span",{children:se["collaboration-services"]}),n[26]=Y):Y=n[26];let J;n[27]!==u||n[28]!==f?(J=h.jsx(u,{to:"/collaboration-services",className:f,children:Y}),n[27]=u,n[28]=f,n[29]=J):J=n[29];let k;n[30]===Symbol.for("react.memo_cache_sentinel")?(k=h.jsx("span",{children:se["professional-services"]}),n[30]=k):k=n[30];let N;n[31]!==u||n[32]!==f?(N=h.jsx(u,{to:"/professional-services",className:f,children:k}),n[31]=u,n[32]=f,n[33]=N):N=n[33];let W;return n[34]!==O||n[35]!==U||n[36]!==q||n[37]!==J||n[38]!==N||n[39]!==d||n[40]!==v||n[41]!==b||n[42]!==S?(W=h.jsxs(h.Fragment,{children:[d,v,b,S,O,U,q,J,N]}),n[34]=O,n[35]=U,n[36]=q,n[37]=J,n[38]=N,n[39]=d,n[40]=v,n[41]=b,n[42]=S,n[43]=W):W=n[43],W}function US(){const l=Ke.c(10);DS();const{trackPageView:n}=Hp();let c,s;l[0]!==n?(c=()=>{n({documentTitle:"Compendium Data"})},s=[n],l[0]=n,l[1]=c,l[2]=s):(c=l[1],s=l[2]),Yt.useEffect(c,s);let u;l[3]===Symbol.for("react.memo_cache_sentinel")?(u=h.jsx(NS,{type:"data"}),l[3]=u):u=l[3];let f;l[4]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(CS,{type:"data",children:h.jsx("p",{className:"wordwrap",children:"The GÉANT Compendium provides an authoritative reference source for anyone with an interest in the development of research and education networking in Europe and beyond. Published since 2001, the Compendium provides information on key areas such as users, services, traffic, budget and staffing."})}),l[4]=f):f=l[4];let d;l[5]===Symbol.for("react.memo_cache_sentinel")?(d=h.jsx(rr,{title:li.Organisation,children:h.jsx(wS,{})}),l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx(rr,{title:li.Policy,startCollapsed:!0,children:h.jsx(AS,{})}),l[6]=y):y=l[6];let v;l[7]===Symbol.for("react.memo_cache_sentinel")?(v=h.jsx(rr,{title:li.ConnectedUsers,startCollapsed:!0,children:h.jsx(MS,{})}),l[7]=v):v=l[7];let p;l[8]===Symbol.for("react.memo_cache_sentinel")?(p=h.jsx(rr,{title:li.Network,startCollapsed:!0,children:h.jsx(zS,{})}),l[8]=p):p=l[8];let b;return l[9]===Symbol.for("react.memo_cache_sentinel")?(b=h.jsxs(h.Fragment,{children:[u,f,h.jsx(Ya,{className:"mt-5 mb-5",children:h.jsxs(Rn,{children:[d,y,v,p,h.jsx(rr,{title:li.Services,startCollapsed:!0,children:h.jsx(LS,{})})]})})]}),l[9]=b):b=l[9],b}const HS=()=>{const l=Ke.c(26),{consent:n,setConsent:c}=g.useContext(Jo),[s,u]=g.useState(n===null);let f;l[0]===Symbol.for("react.memo_cache_sentinel")?(f=()=>{u(!1),window.location.reload()},l[0]=f):f=l[0];const d=f,[y,v]=g.useState(!0);let p;l[1]!==c?(p=N=>{const W=new Date;W.setDate(W.getDate()+30),localStorage.setItem("matomo_consent",JSON.stringify({consent:N,expiry:W})),c(N)},l[1]=c,l[2]=p):p=l[2];const b=p;let R;l[3]===Symbol.for("react.memo_cache_sentinel")?(R=h.jsx(ir.Header,{closeButton:!0,children:h.jsx(ir.Title,{children:"Privacy on this site"})}),l[3]=R):R=l[3];let S;l[4]===Symbol.for("react.memo_cache_sentinel")?(S=h.jsx("a",{href:"https://geant.org/Privacy-Notice/",children:"Privacy Policy"}),l[4]=S):S=l[4];let _;l[5]===Symbol.for("react.memo_cache_sentinel")?(_=h.jsxs("p",{children:["On our site we use Matomo to collect and process data about your visit to better understand how it is used. For more information, see our ",S,".",h.jsx("br",{}),"Below, you can choose to accept or decline to have this data collected."]}),l[5]=_):_=l[5];let O;l[6]!==y?(O=()=>v(!y),l[6]=y,l[7]=O):O=l[7];let H;l[8]!==y||l[9]!==O?(H=h.jsx(Du.Check,{type:"checkbox",label:"Analytics",checked:y,onChange:O}),l[8]=y,l[9]=O,l[10]=H):H=l[10];let U;l[11]===Symbol.for("react.memo_cache_sentinel")?(U=h.jsx(Du.Text,{className:"text-muted",children:"We collect information about your visit on the compendium site — this helps us understand how the site is used, and how we can improve it."}),l[11]=U):U=l[11];let M;l[12]!==H?(M=h.jsxs(ir.Body,{children:[_,h.jsx(Du,{children:h.jsxs(Du.Group,{className:"mb-3",children:[H,U]})})]}),l[12]=H,l[13]=M):M=l[13];let q;l[14]!==b?(q=h.jsx(Bo,{variant:"secondary",onClick:()=>{b(!1),d()},children:"Decline all"}),l[14]=b,l[15]=q):q=l[15];let Y;l[16]!==y||l[17]!==b?(Y=h.jsx(Bo,{variant:"primary",onClick:()=>{b(y),d()},children:"Save consent for 30 days"}),l[16]=y,l[17]=b,l[18]=Y):Y=l[18];let J;l[19]!==Y||l[20]!==q?(J=h.jsxs(ir.Footer,{children:[q,Y]}),l[19]=Y,l[20]=q,l[21]=J):J=l[21];let k;return l[22]!==s||l[23]!==J||l[24]!==M?(k=h.jsxs(ir,{show:s,centered:!0,children:[R,M,J]}),l[22]=s,l[23]=J,l[24]=M,l[25]=k):k=l[25],k},BS=g.lazy(()=>be(()=>import("./Budget-DaieNipA.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]))),qS=g.lazy(()=>be(()=>import("./ChargingStructure-DXabP1VZ.js"),__vite__mapDeps([8,2,3,4,5,6,9,10,11]))),VS=g.lazy(()=>be(()=>import("./ECProjects-BytaiuC6.js"),__vite__mapDeps([12,2,3,4,5,6,13,11]))),YS=g.lazy(()=>be(()=>import("./FundingSource-CnnYyCrH.js"),__vite__mapDeps([14,1,2,3,4,5,6,15]))),GS=g.lazy(()=>be(()=>import("./ParentOrganisation-BBwyogJP.js"),__vite__mapDeps([16,2,3,4,5,6,13,11]))),Oy=g.lazy(()=>be(()=>import("./StaffGraph-nuZcRAf1.js"),__vite__mapDeps([17,1,2,3,4,5,6,18]))),kS=g.lazy(()=>be(()=>import("./StaffGraphAbsolute-B_KY3Vzc.js"),__vite__mapDeps([19,1,2,3,4,5,6,15,7]))),XS=g.lazy(()=>be(()=>import("./SubOrganisation-uqygN7-8.js"),__vite__mapDeps([20,2,3,4,5,6,13,11]))),QS=g.lazy(()=>be(()=>import("./Audits-CufRH5if.js"),__vite__mapDeps([21,2,3,4,5,6,9,10,11]))),ZS=g.lazy(()=>be(()=>import("./BusinessContinuity-BNzcQNhU.js"),__vite__mapDeps([22,2,3,4,5,6,9,10,11]))),KS=g.lazy(()=>be(()=>import("./CentralProcurement-C6FG3PH8.js"),__vite__mapDeps([23,2,3,4,5,6,15,1,7]))),$S=g.lazy(()=>be(()=>import("./CorporateStrategy-we6KtBv4.js"),__vite__mapDeps([24,2,3,4,5,6,13,11]))),FS=g.lazy(()=>be(()=>import("./CrisisExercises-miIhkp8m.js"),__vite__mapDeps([25,2,3,4,5,6,9,10,11]))),JS=g.lazy(()=>be(()=>import("./CrisisManagement-PDrUgEjD.js"),__vite__mapDeps([26,2,3,4,5,6,9,10,11]))),PS=g.lazy(()=>be(()=>import("./EOSCListings-H_13YHeq.js"),__vite__mapDeps([27,2,3,4,5,6,13,11]))),WS=g.lazy(()=>be(()=>import("./Policy-B0McUfA8.js"),__vite__mapDeps([28,2,3,4,5,6,13,11]))),IS=g.lazy(()=>be(()=>import("./SecurityControls-DPvKKslf.js"),__vite__mapDeps([29,2,3,4,5,6,9,10,11]))),e2=g.lazy(()=>be(()=>import("./ServiceLevelTargets-BTUmV26j.js"),__vite__mapDeps([30,2,3,4,5,6,9,10,11]))),t2=g.lazy(()=>be(()=>import("./ServiceManagementFramework-DWirH02M.js"),__vite__mapDeps([31,2,3,4,5,6,9,10,11]))),n2=g.lazy(()=>be(()=>import("./ServicesOffered-C6oTnjq_.js"),__vite__mapDeps([32,2,3,4,5,6,33,11]))),a2=g.lazy(()=>be(()=>import("./ConnectedInstitutionsURLs-DCBf9aew.js"),__vite__mapDeps([34,2,3,4,5,6,13,11]))),dl=g.lazy(()=>be(()=>import("./ConnectedUser-queHyxHS.js"),__vite__mapDeps([35,2,3,4,5,6,33,11]))),l2=g.lazy(()=>be(()=>import("./RemoteCampuses-Bh0h6tbY.js"),__vite__mapDeps([36,2,3,4,5,6,11]))),i2=g.lazy(()=>be(()=>import("./AlienWave-6fWajwYt.js"),__vite__mapDeps([37,2,3,4,5,6,9,10,11]))),r2=g.lazy(()=>be(()=>import("./AlienWaveInternal-Dbz1_Gp9.js"),__vite__mapDeps([38,2,3,4,5,6,9,10,11]))),u2=g.lazy(()=>be(()=>import("./Automation-Dxks_3hH.js"),__vite__mapDeps([39,2,3,4,5,6,10,11]))),c2=g.lazy(()=>be(()=>import("./CapacityCoreIP-DiIZVI-s.js"),__vite__mapDeps([40,1,2,3,4,5,6,15,7]))),s2=g.lazy(()=>be(()=>import("./CapacityLargestLink-xwsd4prK.js"),__vite__mapDeps([41,1,2,3,4,5,6,15,7]))),o2=g.lazy(()=>be(()=>import("./CertificateProvider-D9Qr_R-E.js"),__vite__mapDeps([42,2,3,4,5,6,9,10,11]))),Dy=g.lazy(()=>be(()=>import("./DarkFibreLease-DVVVHWmb.js"),__vite__mapDeps([43,1,2,3,4,5,6,7]))),f2=g.lazy(()=>be(()=>import("./DarkFibreInstalled-DQjFL8rw.js"),__vite__mapDeps([44,1,2,3,4,5,6,7]))),d2=g.lazy(()=>be(()=>import("./ExternalConnections-Bw3LdeFf.js"),__vite__mapDeps([45,2,3,4,5,6,11]))),h2=g.lazy(()=>be(()=>import("./FibreLight-Di0VQOdw.js"),__vite__mapDeps([46,2,3,4,5,6,9,10,11]))),m2=g.lazy(()=>be(()=>import("./IRUDuration-CwtYlEdU.js"),__vite__mapDeps([47,1,2,3,4,5,6,7]))),y2=g.lazy(()=>be(()=>import("./MonitoringTools-BGVkCHJR.js"),__vite__mapDeps([48,2,3,4,5,6,9,10,11]))),p2=g.lazy(()=>be(()=>import("./NetworkFunctionVirtualisation-Dkgolz87.js"),__vite__mapDeps([49,2,3,4,5,6,10,11]))),v2=g.lazy(()=>be(()=>import("./NetworkMapUrls-U7kWZFCY.js"),__vite__mapDeps([50,2,3,4,5,6,13,11]))),g2=g.lazy(()=>be(()=>import("./NonRAndEPeer-Bicp8r4m.js"),__vite__mapDeps([51,1,2,3,4,5,6,15,7]))),E2=g.lazy(()=>be(()=>import("./OPsAutomation-D9uxrxhD.js"),__vite__mapDeps([52,2,3,4,5,6,9,10,11]))),b2=g.lazy(()=>be(()=>import("./PassiveMonitoring-CE6Z1wsB.js"),__vite__mapDeps([53,2,3,4,5,6,9,10,11]))),S2=g.lazy(()=>be(()=>import("./PertTeam-LT8kFC71.js"),__vite__mapDeps([54,2,3,4,5,6,9,10,11]))),x2=g.lazy(()=>be(()=>import("./SiemVendors-W4GM3C-U.js"),__vite__mapDeps([55,2,3,4,5,6,9,10,11]))),_2=g.lazy(()=>be(()=>import("./TrafficRatio-CsniApRI.js"),__vite__mapDeps([56,1,2,3,4,5,6,18]))),R2=g.lazy(()=>be(()=>import("./TrafficUrl-0revWiHR.js"),__vite__mapDeps([57,2,3,4,5,6,13,11]))),T2=g.lazy(()=>be(()=>import("./TrafficVolume-BMOIGkfu.js"),__vite__mapDeps([58,1,2,3,4,5,6,7]))),N2=g.lazy(()=>be(()=>import("./WeatherMap-CEsWOhkH.js"),__vite__mapDeps([59,2,3,4,5,6,13,11]))),Ua=g.lazy(()=>be(()=>import("./Services-wGbaoPrz.js"),__vite__mapDeps([60,2,3,4,5,6,11]))),C2=g.lazy(()=>be(()=>import("./Landing-wYnIDduc.js"),__vite__mapDeps([61,4,62,3,63,11]))),No=g.lazy(()=>be(()=>import("./SurveyContainerComponent-TmXjyfKm.js"),__vite__mapDeps([64,65,66,67,62,3,68]))),j2=g.lazy(()=>be(()=>import("./SurveyManagementComponent-Br-7fyx2.js"),__vite__mapDeps([69,70,6,11,65,67,63,62,3]))),O2=g.lazy(()=>be(()=>import("./UserManagementComponent-CAc00ajf.js"),__vite__mapDeps([71,65,62,3,5,70,6,11]))),D2=()=>{const l=Ke.c(9),{pathname:n}=Xn(),c=n!=="/";let s;l[0]===Symbol.for("react.memo_cache_sentinel")?(s=h.jsx(oS,{}),l[0]=s):s=l[0];let u;l[1]!==c?(u=h.jsx("main",{className:"grow",children:c?h.jsx(T0,{}):h.jsx(Bp,{})}),l[1]=c,l[2]=u):u=l[2];let f;l[3]===Symbol.for("react.memo_cache_sentinel")?(f=h.jsx(HS,{}),l[3]=f):f=l[3];let d;l[4]!==u?(d=h.jsxs(wE,{children:[s,u,f]}),l[4]=u,l[5]=d):d=l[5];let y;l[6]===Symbol.for("react.memo_cache_sentinel")?(y=h.jsx(hS,{}),l[6]=y):y=l[6];let v;return l[7]!==d?(v=h.jsxs(h.Fragment,{children:[d,y]}),l[7]=d,l[8]=v):v=l[8],v},w2=P0([{path:"",element:h.jsx(D2,{}),children:[{path:"/budget",element:h.jsx(BS,{})},{path:"/funding",element:h.jsx(YS,{})},{path:"/employment",element:h.jsx(Oy,{},"staffgraph")},{path:"/traffic-ratio",element:h.jsx(_2,{})},{path:"/roles",element:h.jsx(Oy,{roles:!0},"staffgraphroles")},{path:"/employee-count",element:h.jsx(kS,{})},{path:"/charging",element:h.jsx(qS,{})},{path:"/suborganisations",element:h.jsx(XS,{})},{path:"/parentorganisation",element:h.jsx(GS,{})},{path:"/ec-projects",element:h.jsx(VS,{})},{path:"/policy",element:h.jsx(WS,{})},{path:"/traffic-volume",element:h.jsx(T2,{})},{path:"/data",element:h.jsx(US,{})},{path:"/institutions-urls",element:h.jsx(a2,{})},{path:"/connected-proportion",element:h.jsx(dl,{page:Qt.ConnectedProportion},Qt.ConnectedProportion)},{path:"/connectivity-level",element:h.jsx(dl,{page:Qt.ConnectivityLevel},Qt.ConnectivityLevel)},{path:"/connectivity-growth",element:h.jsx(dl,{page:Qt.ConnectivityGrowth},Qt.ConnectivityGrowth)},{path:"/connection-carrier",element:h.jsx(dl,{page:Qt.ConnectionCarrier},Qt.ConnectionCarrier)},{path:"/connectivity-load",element:h.jsx(dl,{page:Qt.ConnectivityLoad},Qt.ConnectivityLoad)},{path:"/commercial-charging-level",element:h.jsx(dl,{page:Qt.CommercialChargingLevel},Qt.CommercialChargingLevel)},{path:"/commercial-connectivity",element:h.jsx(dl,{page:Qt.CommercialConnectivity},Qt.CommercialConnectivity)},{path:"/network-services",element:h.jsx(Ua,{category:Lt.network_services},Lt.network_services)},{path:"/isp-support-services",element:h.jsx(Ua,{category:Lt.isp_support},Lt.isp_support)},{path:"/security-services",element:h.jsx(Ua,{category:Lt.security},Lt.security)},{path:"/identity-services",element:h.jsx(Ua,{category:Lt.identity},Lt.identity)},{path:"/collaboration-services",element:h.jsx(Ua,{category:Lt.collaboration},Lt.collaboration)},{path:"/multimedia-services",element:h.jsx(Ua,{category:Lt.multimedia},Lt.multimedia)},{path:"/storage-and-hosting-services",element:h.jsx(Ua,{category:Lt.storage_and_hosting},Lt.storage_and_hosting)},{path:"/professional-services",element:h.jsx(Ua,{category:Lt.professional_services},Lt.professional_services)},{path:"/dark-fibre-lease",element:h.jsx(Dy,{national:!0},"darkfibrenational")},{path:"/dark-fibre-lease-international",element:h.jsx(Dy,{},"darkfibreinternational")},{path:"/dark-fibre-installed",element:h.jsx(f2,{})},{path:"/remote-campuses",element:h.jsx(l2,{})},{path:"/eosc-listings",element:h.jsx(PS,{})},{path:"/fibre-light",element:h.jsx(h2,{})},{path:"/monitoring-tools",element:h.jsx(y2,{})},{path:"/pert-team",element:h.jsx(S2,{})},{path:"/passive-monitoring",element:h.jsx(b2,{})},{path:"/alien-wave",element:h.jsx(i2,{})},{path:"/alien-wave-internal",element:h.jsx(r2,{})},{path:"/external-connections",element:h.jsx(d2,{})},{path:"/ops-automation",element:h.jsx(E2,{})},{path:"/network-automation",element:h.jsx(u2,{})},{path:"/traffic-stats",element:h.jsx(R2,{})},{path:"/weather-map",element:h.jsx(N2,{})},{path:"/network-map",element:h.jsx(v2,{})},{path:"/nfv",element:h.jsx(p2,{})},{path:"/certificate-providers",element:h.jsx(o2,{})},{path:"/siem-vendors",element:h.jsx(x2,{})},{path:"/capacity-largest-link",element:h.jsx(s2,{})},{path:"/capacity-core-ip",element:h.jsx(c2,{})},{path:"/non-rne-peers",element:h.jsx(g2,{})},{path:"/iru-duration",element:h.jsx(m2,{})},{path:"/audits",element:h.jsx(QS,{})},{path:"/business-continuity",element:h.jsx(ZS,{})},{path:"/crisis-management",element:h.jsx(JS,{})},{path:"/crisis-exercise",element:h.jsx(FS,{})},{path:"/central-procurement",element:h.jsx(KS,{})},{path:"/security-control",element:h.jsx(IS,{})},{path:"/services-offered",element:h.jsx(n2,{})},{path:"/service-management-framework",element:h.jsx(t2,{})},{path:"/service-level-targets",element:h.jsx(e2,{})},{path:"/corporate-strategy",element:h.jsx($S,{})},{path:"/survey/admin/surveys",element:h.jsx(j2,{})},{path:"/survey/admin/users",element:h.jsx(O2,{})},{path:"/survey/admin/inspect/:year",element:h.jsx(No,{loadFrom:"/api/response/inspect/"})},{path:"/survey/admin/try/:year",element:h.jsx(No,{loadFrom:"/api/response/try/"})},{path:"/survey/response/:year/:nren",element:h.jsx(No,{loadFrom:"/api/response/load/"})},{path:"/survey/*",element:h.jsx(C2,{})},{path:"/*",element:h.jsx(Bp,{})}]}]);function A2(){const l=Ke.c(1);let n;return l[0]===Symbol.for("react.memo_cache_sentinel")?(n=h.jsx("div",{className:"app",children:h.jsx(oE,{router:w2})}),l[0]=n):n=l[0],n}const M2=document.getElementById("root"),z2=a1.createRoot(M2);z2.render(h.jsx(Yt.StrictMode,{children:h.jsx(A2,{})}));export{zE as $,Ho as A,pb as B,ln as C,Xy as D,Ya as E,yE as F,MS as G,LS as H,jS as I,vE as J,OS as K,Tn as L,Iy as M,zS as N,wS as O,AS as P,Hp as Q,Rn as R,li as S,NS as T,V2 as U,SE as V,Du as W,DS as X,_S as Y,RS as Z,Yp as _,Qt as a,Lt as a0,Fo as a1,yr as a2,ku as a3,wy as a4,B2 as a5,H2 as a6,be as a7,rb as a8,nb as a9,$u as aa,gl as ab,hl as ac,Mo as ad,Ba as ae,yl as af,ab as ag,U2 as ah,nf as ai,OE as aj,Y2 as b,Ke as c,G2 as d,rr as e,Yt as f,up as g,Qe as h,Ae as i,h as j,sb as k,by as l,Bu as m,Ob as n,Ku as o,tf as p,ob as q,g as r,ti as s,se as t,pl as u,lp as v,q2 as w,rp as x,Bo as y,BE as z};
diff --git a/compendium_v2/static/index-ZGgT6a2u.js b/compendium_v2/static/index-ZGgT6a2u.js
deleted file mode 100644
index 73a7067f1e0c307d0855ce0018b11072220f2910..0000000000000000000000000000000000000000
--- a/compendium_v2/static/index-ZGgT6a2u.js
+++ /dev/null
@@ -1 +0,0 @@
-import{r as a,_ as c}from"./index.js";const o=a.createContext(null);o.displayName="InputGroupContext";function n(t){return c({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"},child:[]}]})(t)}function e(t){return c({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M216 0h80c13.3 0 24 10.7 24 24v168h87.7c17.8 0 26.7 21.5 14.1 34.1L269.7 378.3c-7.5 7.5-19.8 7.5-27.3 0L90.1 226.1c-12.6-12.6-3.7-34.1 14.1-34.1H192V24c0-13.3 10.7-24 24-24zm296 376v112c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V376c0-13.3 10.7-24 24-24h146.7l49 49c20.1 20.1 52.5 20.1 72.6 0l49-49H488c13.3 0 24 10.7 24 24zm-124 88c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20zm64 0c0-11-9-20-20-20s-20 9-20 20 9 20 20 20 20-9 20-20z"},child:[]}]})(t)}export{e as F,n as a,o as c};
diff --git a/compendium_v2/static/index.html b/compendium_v2/static/index.html
index bdaafa0579be4a59dcdd8da1268d3d8f8a6eb685..bc5478fb5b26983f757ebe49fde9bb5a28afdb4e 100644
--- a/compendium_v2/static/index.html
+++ b/compendium_v2/static/index.html
@@ -5,8 +5,8 @@
   <meta name="viewport" content="width=device-width, initial-scale=.5"/>
   <meta name="description" content="The GÉANT Compendium of National Research and Education Networks in Europe is the result of a broad, collective effort to portray the networks of the research and education community in Europe and beyond. The annual NREN Compendium survey invites the world's NRENs to provide detailed information about their network, equipment and users. The results from this survey are highlighted in these studies."/>
   <title>The GÉANT Compendium</title>
-  <script type="module" crossorigin src="/static/index.js"></script>
-  <link rel="stylesheet" crossorigin href="/static/index.css">
+  <script type="module" crossorigin src="/static/index-DunMf8wQ.js"></script>
+  <link rel="stylesheet" crossorigin href="/static/index-Cv7xX6AU.css">
 </head>
 <body>
   <div id="root"></div>
diff --git a/compendium_v2/static/lodash-0qAddrJ1.js b/compendium_v2/static/lodash-DG7dNfcw.js
similarity index 94%
rename from compendium_v2/static/lodash-0qAddrJ1.js
rename to compendium_v2/static/lodash-DG7dNfcw.js
index 661a252f9e250faf64c56a95bea3bbc3f560e7bf..7a8cda7616056667ae534629141f410737333e3f 100644
--- a/compendium_v2/static/lodash-0qAddrJ1.js
+++ b/compendium_v2/static/lodash-DG7dNfcw.js
@@ -1,4 +1,4 @@
-import{f as vo,r as X,j as On,a8 as A_,a9 as y_,aa as m_,i as Et,ab as xo,ac as E_,ad as R_,ae as I_,af as C_,ag as S_,h as $t,ah as cr}from"./index.js";import{u as T_}from"./hook-BbhLqP_c.js";function he(...W){return W.filter(I=>I!=null).reduce((I,o)=>{if(typeof o!="function")throw new Error("Invalid Argument Type, must only provide functions, undefined, or null.");return I===null?o:function(...U){I.apply(this,U),o.apply(this,U)}},null)}const L_={height:["marginTop","marginBottom"],width:["marginLeft","marginRight"]};function O_(W,I){const o=`offset${W[0].toUpperCase()}${W.slice(1)}`,$=I[o],U=L_[W];return $+parseInt(xo(I,U[0]),10)+parseInt(xo(I,U[1]),10)}const W_={[E_]:"collapse",[R_]:"collapsing",[I_]:"collapsing",[C_]:"collapse show"},B_=vo.forwardRef(({onEnter:W,onEntering:I,onEntered:o,onExit:$,onExiting:U,className:k,children:L,dimension:nn="height",in:rn=!1,timeout:ht=300,mountOnEnter:Wn=!1,unmountOnExit:an=!1,appear:_e=!1,getDimensionValue:Kn=O_,...zn},Rt)=>{const N=typeof nn=="function"?nn():nn,et=X.useMemo(()=>he(J=>{J.style[N]="0"},W),[N,W]),de=X.useMemo(()=>he(J=>{const _n=`scroll${N[0].toUpperCase()}${N.slice(1)}`;J.style[N]=`${J[_n]}px`},I),[N,I]),Bn=X.useMemo(()=>he(J=>{J.style[N]=null},o),[N,o]),gt=X.useMemo(()=>he(J=>{J.style[N]=`${Kn(N,J)}px`,S_(J)},$),[$,Kn,N]),Mn=X.useMemo(()=>he(J=>{J.style[N]=null},U),[N,U]);return On.jsx(A_,{ref:Rt,addEndListener:y_,...zn,"aria-expanded":zn.role?rn:null,onEnter:et,onEntering:de,onEntered:Bn,onExit:gt,onExiting:Mn,childRef:m_(L),in:rn,timeout:ht,mountOnEnter:Wn,unmountOnExit:an,appear:_e,children:(J,_n)=>vo.cloneElement(L,{..._n,className:Et(k,L.props.className,W_[J],N==="width"&&"collapse-horizontal")})})});function Ao(W,I){return Array.isArray(W)?W.includes(I):W===I}const pe=X.createContext({});pe.displayName="AccordionContext";const bi=X.forwardRef(({as:W="div",bsPrefix:I,className:o,children:$,eventKey:U,...k},L)=>{const{activeEventKey:nn}=X.useContext(pe);return I=$t(I,"accordion-collapse"),On.jsx(B_,{ref:L,in:Ao(nn,U),...k,className:Et(o,I),children:On.jsx(W,{children:X.Children.only($)})})});bi.displayName="AccordionCollapse";const hr=X.createContext({eventKey:""});hr.displayName="AccordionItemContext";const yo=X.forwardRef(({as:W="div",bsPrefix:I,className:o,onEnter:$,onEntering:U,onEntered:k,onExit:L,onExiting:nn,onExited:rn,...ht},Wn)=>{I=$t(I,"accordion-body");const{eventKey:an}=X.useContext(hr);return On.jsx(bi,{eventKey:an,onEnter:$,onEntering:U,onEntered:k,onExit:L,onExiting:nn,onExited:rn,children:On.jsx(W,{ref:Wn,...ht,className:Et(o,I)})})});yo.displayName="AccordionBody";function M_(W,I){const{activeEventKey:o,onSelect:$,alwaysOpen:U}=X.useContext(pe);return k=>{let L=W===o?null:W;U&&(Array.isArray(o)?o.includes(W)?L=o.filter(nn=>nn!==W):L=[...o,W]:L=[W]),$==null||$(L,k),I==null||I(k)}}const Pi=X.forwardRef(({as:W="button",bsPrefix:I,className:o,onClick:$,...U},k)=>{I=$t(I,"accordion-button");const{eventKey:L}=X.useContext(hr),nn=M_(L,$),{activeEventKey:rn}=X.useContext(pe);return W==="button"&&(U.type="button"),On.jsx(W,{ref:k,onClick:nn,...U,"aria-expanded":Array.isArray(rn)?rn.includes(L):L===rn,className:Et(o,I,!Ao(rn,L)&&"collapsed")})});Pi.displayName="AccordionButton";const mo=X.forwardRef(({as:W="h2","aria-controls":I,bsPrefix:o,className:$,children:U,onClick:k,...L},nn)=>(o=$t(o,"accordion-header"),On.jsx(W,{ref:nn,...L,className:Et($,o),children:On.jsx(Pi,{onClick:k,"aria-controls":I,children:U})})));mo.displayName="AccordionHeader";const Eo=X.forwardRef(({as:W="div",bsPrefix:I,className:o,eventKey:$,...U},k)=>{I=$t(I,"accordion-item");const L=X.useMemo(()=>({eventKey:$}),[$]);return On.jsx(hr.Provider,{value:L,children:On.jsx(W,{ref:k,...U,className:Et(o,I)})})});Eo.displayName="AccordionItem";const Ro=X.forwardRef((W,I)=>{const{as:o="div",activeKey:$,bsPrefix:U,className:k,onSelect:L,flush:nn,alwaysOpen:rn,...ht}=T_(W,{activeKey:"onSelect"}),Wn=$t(U,"accordion"),an=X.useMemo(()=>({activeEventKey:$,onSelect:L,alwaysOpen:rn}),[$,L,rn]);return On.jsx(pe.Provider,{value:an,children:On.jsx(o,{ref:I,...ht,className:Et(k,Wn,nn&&`${Wn}-flush`)})})});Ro.displayName="Accordion";const D_=Object.assign(Ro,{Button:Pi,Collapse:bi,Item:Eo,Header:mo,Body:yo});var ge={exports:{}};/**
+import{f as vo,r as X,j as On,a8 as A_,a9 as y_,aa as m_,i as Et,ab as xo,ac as E_,ad as R_,ae as I_,af as C_,ag as S_,h as $t,ah as cr}from"./index-DunMf8wQ.js";import{u as T_}from"./hook-CgOBj93G.js";function he(...W){return W.filter(I=>I!=null).reduce((I,o)=>{if(typeof o!="function")throw new Error("Invalid Argument Type, must only provide functions, undefined, or null.");return I===null?o:function(...U){I.apply(this,U),o.apply(this,U)}},null)}const L_={height:["marginTop","marginBottom"],width:["marginLeft","marginRight"]};function O_(W,I){const o=`offset${W[0].toUpperCase()}${W.slice(1)}`,$=I[o],U=L_[W];return $+parseInt(xo(I,U[0]),10)+parseInt(xo(I,U[1]),10)}const W_={[E_]:"collapse",[R_]:"collapsing",[I_]:"collapsing",[C_]:"collapse show"},B_=vo.forwardRef(({onEnter:W,onEntering:I,onEntered:o,onExit:$,onExiting:U,className:k,children:L,dimension:nn="height",in:rn=!1,timeout:ht=300,mountOnEnter:Wn=!1,unmountOnExit:an=!1,appear:_e=!1,getDimensionValue:Kn=O_,...zn},Rt)=>{const N=typeof nn=="function"?nn():nn,et=X.useMemo(()=>he(J=>{J.style[N]="0"},W),[N,W]),de=X.useMemo(()=>he(J=>{const _n=`scroll${N[0].toUpperCase()}${N.slice(1)}`;J.style[N]=`${J[_n]}px`},I),[N,I]),Bn=X.useMemo(()=>he(J=>{J.style[N]=null},o),[N,o]),gt=X.useMemo(()=>he(J=>{J.style[N]=`${Kn(N,J)}px`,S_(J)},$),[$,Kn,N]),Mn=X.useMemo(()=>he(J=>{J.style[N]=null},U),[N,U]);return On.jsx(A_,{ref:Rt,addEndListener:y_,...zn,"aria-expanded":zn.role?rn:null,onEnter:et,onEntering:de,onEntered:Bn,onExit:gt,onExiting:Mn,childRef:m_(L),in:rn,timeout:ht,mountOnEnter:Wn,unmountOnExit:an,appear:_e,children:(J,_n)=>vo.cloneElement(L,{..._n,className:Et(k,L.props.className,W_[J],N==="width"&&"collapse-horizontal")})})});function Ao(W,I){return Array.isArray(W)?W.includes(I):W===I}const pe=X.createContext({});pe.displayName="AccordionContext";const bi=X.forwardRef(({as:W="div",bsPrefix:I,className:o,children:$,eventKey:U,...k},L)=>{const{activeEventKey:nn}=X.useContext(pe);return I=$t(I,"accordion-collapse"),On.jsx(B_,{ref:L,in:Ao(nn,U),...k,className:Et(o,I),children:On.jsx(W,{children:X.Children.only($)})})});bi.displayName="AccordionCollapse";const hr=X.createContext({eventKey:""});hr.displayName="AccordionItemContext";const yo=X.forwardRef(({as:W="div",bsPrefix:I,className:o,onEnter:$,onEntering:U,onEntered:k,onExit:L,onExiting:nn,onExited:rn,...ht},Wn)=>{I=$t(I,"accordion-body");const{eventKey:an}=X.useContext(hr);return On.jsx(bi,{eventKey:an,onEnter:$,onEntering:U,onEntered:k,onExit:L,onExiting:nn,onExited:rn,children:On.jsx(W,{ref:Wn,...ht,className:Et(o,I)})})});yo.displayName="AccordionBody";function M_(W,I){const{activeEventKey:o,onSelect:$,alwaysOpen:U}=X.useContext(pe);return k=>{let L=W===o?null:W;U&&(Array.isArray(o)?o.includes(W)?L=o.filter(nn=>nn!==W):L=[...o,W]:L=[W]),$==null||$(L,k),I==null||I(k)}}const Pi=X.forwardRef(({as:W="button",bsPrefix:I,className:o,onClick:$,...U},k)=>{I=$t(I,"accordion-button");const{eventKey:L}=X.useContext(hr),nn=M_(L,$),{activeEventKey:rn}=X.useContext(pe);return W==="button"&&(U.type="button"),On.jsx(W,{ref:k,onClick:nn,...U,"aria-expanded":Array.isArray(rn)?rn.includes(L):L===rn,className:Et(o,I,!Ao(rn,L)&&"collapsed")})});Pi.displayName="AccordionButton";const mo=X.forwardRef(({as:W="h2","aria-controls":I,bsPrefix:o,className:$,children:U,onClick:k,...L},nn)=>(o=$t(o,"accordion-header"),On.jsx(W,{ref:nn,...L,className:Et($,o),children:On.jsx(Pi,{onClick:k,"aria-controls":I,children:U})})));mo.displayName="AccordionHeader";const Eo=X.forwardRef(({as:W="div",bsPrefix:I,className:o,eventKey:$,...U},k)=>{I=$t(I,"accordion-item");const L=X.useMemo(()=>({eventKey:$}),[$]);return On.jsx(hr.Provider,{value:L,children:On.jsx(W,{ref:k,...U,className:Et(o,I)})})});Eo.displayName="AccordionItem";const Ro=X.forwardRef((W,I)=>{const{as:o="div",activeKey:$,bsPrefix:U,className:k,onSelect:L,flush:nn,alwaysOpen:rn,...ht}=T_(W,{activeKey:"onSelect"}),Wn=$t(U,"accordion"),an=X.useMemo(()=>({activeEventKey:$,onSelect:L,alwaysOpen:rn}),[$,L,rn]);return On.jsx(pe.Provider,{value:an,children:On.jsx(o,{ref:I,...ht,className:Et(k,Wn,nn&&`${Wn}-flush`)})})});Ro.displayName="Accordion";const D_=Object.assign(Ro,{Button:Pi,Collapse:bi,Item:Eo,Header:mo,Body:yo});var ge={exports:{}};/**
  * @license
  * Lodash <https://lodash.com/>
  * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
diff --git a/compendium_v2/static/useData-CxftshCa.js b/compendium_v2/static/useData-DvdT9bkc.js
similarity index 85%
rename from compendium_v2/static/useData-CxftshCa.js
rename to compendium_v2/static/useData-DvdT9bkc.js
index 32fbe0f113f98df1483f99dc5905241938f18ef0..893a335f47d830a7b83343f70ad258cfb685c4e7 100644
--- a/compendium_v2/static/useData-CxftshCa.js
+++ b/compendium_v2/static/useData-DvdT9bkc.js
@@ -1,4 +1,4 @@
-var za=Object.defineProperty;var Na=(e,t,n)=>t in e?za(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var R=(e,t,n)=>Na(e,typeof t!="symbol"?t+"":t,n);import{r as A,u as Vt,g as Ba,j as M,h as Kt,i as qt,k as Ha,w as Wa,l as ms,o as Va,m as un,f as ue,n as ar,B as Ya,p as Ua,q as Xa,s as bs,v as Ka,x as lr,y as Ft,z as qa,A as Ga,c as wt,D as Ja,S as G,E as cr,R as se,O as Za,P as Qa,G as tl,N as el,H as nl,I as xe,J as hr,K as ge,M as il,Q as sl,T as ol,L as rl,V as al,C as xs,W as Jn,X as ll}from"./index.js";import{S as sn}from"./SideBar-CkoMfgfL.js";import{u as Zn,w as cl}from"./xlsx-BHRztzV8.js";import{c as ur,F as dr}from"./index-ZGgT6a2u.js";import{u as hl}from"./hook-BbhLqP_c.js";function ul(){return A.useState(null)}function dl(e,t,n,i=!1){const s=Vt(n);A.useEffect(()=>{const o=typeof e=="function"?e():e;return o.addEventListener(t,s,i),()=>o.removeEventListener(t,s,i)},[e])}const fl=["onKeyDown"];function pl(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}function gl(e){return!e||e.trim()==="#"}const fr=A.forwardRef((e,t)=>{let{onKeyDown:n}=e,i=pl(e,fl);const[s]=Ba(Object.assign({tagName:"a"},i)),o=Vt(r=>{s.onKeyDown(r),n==null||n(r)});return gl(i.href)||i.role==="button"?M.jsx("a",Object.assign({ref:t},i,s,{onKeyDown:o})):M.jsx("a",Object.assign({ref:t},i,{onKeyDown:n}))});fr.displayName="Anchor";const Ti=A.forwardRef(({bsPrefix:e,className:t,role:n="toolbar",...i},s)=>{const o=Kt(e,"btn-toolbar");return M.jsx("div",{...i,ref:s,className:qt(t,o),role:n})});Ti.displayName="ButtonToolbar";function ml(e,t,n){const i=A.useRef(e!==void 0),[s,o]=A.useState(t),r=e!==void 0,a=i.current;return i.current=r,!r&&a&&s!==t&&o(t),[r?e:s,A.useCallback((...l)=>{const[c,...h]=l;let u=n==null?void 0:n(c,...h);return o(c),u},[n])]}function bl(){const[,e]=A.useReducer(t=>t+1,0);return e}const Yn=A.createContext(null);var ys=Object.prototype.hasOwnProperty;function vs(e,t,n){for(n of e.keys())if(Be(n,t))return n}function Be(e,t){var n,i,s;if(e===t)return!0;if(e&&t&&(n=e.constructor)===t.constructor){if(n===Date)return e.getTime()===t.getTime();if(n===RegExp)return e.toString()===t.toString();if(n===Array){if((i=e.length)===t.length)for(;i--&&Be(e[i],t[i]););return i===-1}if(n===Set){if(e.size!==t.size)return!1;for(i of e)if(s=i,s&&typeof s=="object"&&(s=vs(t,s),!s)||!t.has(s))return!1;return!0}if(n===Map){if(e.size!==t.size)return!1;for(i of e)if(s=i[0],s&&typeof s=="object"&&(s=vs(t,s),!s)||!Be(i[1],t.get(s)))return!1;return!0}if(n===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(n===DataView){if((i=e.byteLength)===t.byteLength)for(;i--&&e.getInt8(i)===t.getInt8(i););return i===-1}if(ArrayBuffer.isView(e)){if((i=e.byteLength)===t.byteLength)for(;i--&&e[i]===t[i];);return i===-1}if(!n||typeof e=="object"){i=0;for(n in e)if(ys.call(e,n)&&++i&&!ys.call(t,n)||!(n in t)||!Be(e[n],t[n]))return!1;return Object.keys(t).length===i}}return e!==e&&t!==t}function xl(e){const t=Ha();return[e[0],A.useCallback(n=>{if(t())return e[1](n)},[t,e[1]])]}var ut="top",xt="bottom",yt="right",dt="left",Ri="auto",on=[ut,xt,yt,dt],we="start",Ke="end",yl="clippingParents",pr="viewport",Te="popper",vl="reference",_s=on.reduce(function(e,t){return e.concat([t+"-"+we,t+"-"+Ke])},[]),gr=[].concat(on,[Ri]).reduce(function(e,t){return e.concat([t,t+"-"+we,t+"-"+Ke])},[]),_l="beforeRead",wl="read",Sl="afterRead",kl="beforeMain",Ml="main",Cl="afterMain",Pl="beforeWrite",Ol="write",Dl="afterWrite",Al=[_l,wl,Sl,kl,Ml,Cl,Pl,Ol,Dl];function Pt(e){return e.split("-")[0]}function gt(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function de(e){var t=gt(e).Element;return e instanceof t||e instanceof Element}function Ot(e){var t=gt(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Li(e){if(typeof ShadowRoot>"u")return!1;var t=gt(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}var ce=Math.max,Ln=Math.min,Se=Math.round;function yi(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function mr(){return!/^((?!chrome|android).)*safari/i.test(yi())}function ke(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var i=e.getBoundingClientRect(),s=1,o=1;t&&Ot(e)&&(s=e.offsetWidth>0&&Se(i.width)/e.offsetWidth||1,o=e.offsetHeight>0&&Se(i.height)/e.offsetHeight||1);var r=de(e)?gt(e):window,a=r.visualViewport,l=!mr()&&n,c=(i.left+(l&&a?a.offsetLeft:0))/s,h=(i.top+(l&&a?a.offsetTop:0))/o,u=i.width/s,d=i.height/o;return{width:u,height:d,top:h,right:c+u,bottom:h+d,left:c,x:c,y:h}}function Fi(e){var t=ke(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function br(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Li(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Ut(e){return e?(e.nodeName||"").toLowerCase():null}function jt(e){return gt(e).getComputedStyle(e)}function El(e){return["table","td","th"].indexOf(Ut(e))>=0}function Gt(e){return((de(e)?e.ownerDocument:e.document)||window.document).documentElement}function Un(e){return Ut(e)==="html"?e:e.assignedSlot||e.parentNode||(Li(e)?e.host:null)||Gt(e)}function ws(e){return!Ot(e)||jt(e).position==="fixed"?null:e.offsetParent}function Tl(e){var t=/firefox/i.test(yi()),n=/Trident/i.test(yi());if(n&&Ot(e)){var i=jt(e);if(i.position==="fixed")return null}var s=Un(e);for(Li(s)&&(s=s.host);Ot(s)&&["html","body"].indexOf(Ut(s))<0;){var o=jt(s);if(o.transform!=="none"||o.perspective!=="none"||o.contain==="paint"||["transform","perspective"].indexOf(o.willChange)!==-1||t&&o.willChange==="filter"||t&&o.filter&&o.filter!=="none")return s;s=s.parentNode}return null}function rn(e){for(var t=gt(e),n=ws(e);n&&El(n)&&jt(n).position==="static";)n=ws(n);return n&&(Ut(n)==="html"||Ut(n)==="body"&&jt(n).position==="static")?t:n||Tl(e)||t}function Ii(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function He(e,t,n){return ce(e,Ln(t,n))}function Rl(e,t,n){var i=He(e,t,n);return i>n?n:i}function xr(){return{top:0,right:0,bottom:0,left:0}}function yr(e){return Object.assign({},xr(),e)}function vr(e,t){return t.reduce(function(n,i){return n[i]=e,n},{})}var Ll=function(t,n){return t=typeof t=="function"?t(Object.assign({},n.rects,{placement:n.placement})):t,yr(typeof t!="number"?t:vr(t,on))};function Fl(e){var t,n=e.state,i=e.name,s=e.options,o=n.elements.arrow,r=n.modifiersData.popperOffsets,a=Pt(n.placement),l=Ii(a),c=[dt,yt].indexOf(a)>=0,h=c?"height":"width";if(!(!o||!r)){var u=Ll(s.padding,n),d=Fi(o),f=l==="y"?ut:dt,g=l==="y"?xt:yt,m=n.rects.reference[h]+n.rects.reference[l]-r[l]-n.rects.popper[h],p=r[l]-n.rects.reference[l],b=rn(o),x=b?l==="y"?b.clientHeight||0:b.clientWidth||0:0,v=m/2-p/2,_=u[f],y=x-d[h]-u[g],w=x/2-d[h]/2+v,k=He(_,w,y),S=l;n.modifiersData[i]=(t={},t[S]=k,t.centerOffset=k-w,t)}}function Il(e){var t=e.state,n=e.options,i=n.element,s=i===void 0?"[data-popper-arrow]":i;s!=null&&(typeof s=="string"&&(s=t.elements.popper.querySelector(s),!s)||br(t.elements.popper,s)&&(t.elements.arrow=s))}const jl={name:"arrow",enabled:!0,phase:"main",fn:Fl,effect:Il,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Me(e){return e.split("-")[1]}var $l={top:"auto",right:"auto",bottom:"auto",left:"auto"};function zl(e,t){var n=e.x,i=e.y,s=t.devicePixelRatio||1;return{x:Se(n*s)/s||0,y:Se(i*s)/s||0}}function Ss(e){var t,n=e.popper,i=e.popperRect,s=e.placement,o=e.variation,r=e.offsets,a=e.position,l=e.gpuAcceleration,c=e.adaptive,h=e.roundOffsets,u=e.isFixed,d=r.x,f=d===void 0?0:d,g=r.y,m=g===void 0?0:g,p=typeof h=="function"?h({x:f,y:m}):{x:f,y:m};f=p.x,m=p.y;var b=r.hasOwnProperty("x"),x=r.hasOwnProperty("y"),v=dt,_=ut,y=window;if(c){var w=rn(n),k="clientHeight",S="clientWidth";if(w===gt(n)&&(w=Gt(n),jt(w).position!=="static"&&a==="absolute"&&(k="scrollHeight",S="scrollWidth")),w=w,s===ut||(s===dt||s===yt)&&o===Ke){_=xt;var C=u&&w===y&&y.visualViewport?y.visualViewport.height:w[k];m-=C-i.height,m*=l?1:-1}if(s===dt||(s===ut||s===xt)&&o===Ke){v=yt;var D=u&&w===y&&y.visualViewport?y.visualViewport.width:w[S];f-=D-i.width,f*=l?1:-1}}var P=Object.assign({position:a},c&&$l),O=h===!0?zl({x:f,y:m},gt(n)):{x:f,y:m};if(f=O.x,m=O.y,l){var E;return Object.assign({},P,(E={},E[_]=x?"0":"",E[v]=b?"0":"",E.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",E))}return Object.assign({},P,(t={},t[_]=x?m+"px":"",t[v]=b?f+"px":"",t.transform="",t))}function Nl(e){var t=e.state,n=e.options,i=n.gpuAcceleration,s=i===void 0?!0:i,o=n.adaptive,r=o===void 0?!0:o,a=n.roundOffsets,l=a===void 0?!0:a,c={placement:Pt(t.placement),variation:Me(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:s,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Ss(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:r,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ss(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const Bl={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Nl,data:{}};var dn={passive:!0};function Hl(e){var t=e.state,n=e.instance,i=e.options,s=i.scroll,o=s===void 0?!0:s,r=i.resize,a=r===void 0?!0:r,l=gt(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&c.forEach(function(h){h.addEventListener("scroll",n.update,dn)}),a&&l.addEventListener("resize",n.update,dn),function(){o&&c.forEach(function(h){h.removeEventListener("scroll",n.update,dn)}),a&&l.removeEventListener("resize",n.update,dn)}}const Wl={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:Hl,data:{}};var Vl={left:"right",right:"left",bottom:"top",top:"bottom"};function En(e){return e.replace(/left|right|bottom|top/g,function(t){return Vl[t]})}var Yl={start:"end",end:"start"};function ks(e){return e.replace(/start|end/g,function(t){return Yl[t]})}function ji(e){var t=gt(e),n=t.pageXOffset,i=t.pageYOffset;return{scrollLeft:n,scrollTop:i}}function $i(e){return ke(Gt(e)).left+ji(e).scrollLeft}function Ul(e,t){var n=gt(e),i=Gt(e),s=n.visualViewport,o=i.clientWidth,r=i.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=mr();(c||!c&&t==="fixed")&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+$i(e),y:l}}function Xl(e){var t,n=Gt(e),i=ji(e),s=(t=e.ownerDocument)==null?void 0:t.body,o=ce(n.scrollWidth,n.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ce(n.scrollHeight,n.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-i.scrollLeft+$i(e),l=-i.scrollTop;return jt(s||n).direction==="rtl"&&(a+=ce(n.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}function zi(e){var t=jt(e),n=t.overflow,i=t.overflowX,s=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+s+i)}function _r(e){return["html","body","#document"].indexOf(Ut(e))>=0?e.ownerDocument.body:Ot(e)&&zi(e)?e:_r(Un(e))}function We(e,t){var n;t===void 0&&(t=[]);var i=_r(e),s=i===((n=e.ownerDocument)==null?void 0:n.body),o=gt(i),r=s?[o].concat(o.visualViewport||[],zi(i)?i:[]):i,a=t.concat(r);return s?a:a.concat(We(Un(r)))}function vi(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function Kl(e,t){var n=ke(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function Ms(e,t,n){return t===pr?vi(Ul(e,n)):de(t)?Kl(t,n):vi(Xl(Gt(e)))}function ql(e){var t=We(Un(e)),n=["absolute","fixed"].indexOf(jt(e).position)>=0,i=n&&Ot(e)?rn(e):e;return de(i)?t.filter(function(s){return de(s)&&br(s,i)&&Ut(s)!=="body"}):[]}function Gl(e,t,n,i){var s=t==="clippingParents"?ql(e):[].concat(t),o=[].concat(s,[n]),r=o[0],a=o.reduce(function(l,c){var h=Ms(e,c,i);return l.top=ce(h.top,l.top),l.right=Ln(h.right,l.right),l.bottom=Ln(h.bottom,l.bottom),l.left=ce(h.left,l.left),l},Ms(e,r,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function wr(e){var t=e.reference,n=e.element,i=e.placement,s=i?Pt(i):null,o=i?Me(i):null,r=t.x+t.width/2-n.width/2,a=t.y+t.height/2-n.height/2,l;switch(s){case ut:l={x:r,y:t.y-n.height};break;case xt:l={x:r,y:t.y+t.height};break;case yt:l={x:t.x+t.width,y:a};break;case dt:l={x:t.x-n.width,y:a};break;default:l={x:t.x,y:t.y}}var c=s?Ii(s):null;if(c!=null){var h=c==="y"?"height":"width";switch(o){case we:l[c]=l[c]-(t[h]/2-n[h]/2);break;case Ke:l[c]=l[c]+(t[h]/2-n[h]/2);break}}return l}function qe(e,t){t===void 0&&(t={});var n=t,i=n.placement,s=i===void 0?e.placement:i,o=n.strategy,r=o===void 0?e.strategy:o,a=n.boundary,l=a===void 0?yl:a,c=n.rootBoundary,h=c===void 0?pr:c,u=n.elementContext,d=u===void 0?Te:u,f=n.altBoundary,g=f===void 0?!1:f,m=n.padding,p=m===void 0?0:m,b=yr(typeof p!="number"?p:vr(p,on)),x=d===Te?vl:Te,v=e.rects.popper,_=e.elements[g?x:d],y=Gl(de(_)?_:_.contextElement||Gt(e.elements.popper),l,h,r),w=ke(e.elements.reference),k=wr({reference:w,element:v,strategy:"absolute",placement:s}),S=vi(Object.assign({},v,k)),C=d===Te?S:w,D={top:y.top-C.top+b.top,bottom:C.bottom-y.bottom+b.bottom,left:y.left-C.left+b.left,right:C.right-y.right+b.right},P=e.modifiersData.offset;if(d===Te&&P){var O=P[s];Object.keys(D).forEach(function(E){var I=[yt,xt].indexOf(E)>=0?1:-1,T=[ut,xt].indexOf(E)>=0?"y":"x";D[E]+=O[T]*I})}return D}function Jl(e,t){t===void 0&&(t={});var n=t,i=n.placement,s=n.boundary,o=n.rootBoundary,r=n.padding,a=n.flipVariations,l=n.allowedAutoPlacements,c=l===void 0?gr:l,h=Me(i),u=h?a?_s:_s.filter(function(g){return Me(g)===h}):on,d=u.filter(function(g){return c.indexOf(g)>=0});d.length===0&&(d=u);var f=d.reduce(function(g,m){return g[m]=qe(e,{placement:m,boundary:s,rootBoundary:o,padding:r})[Pt(m)],g},{});return Object.keys(f).sort(function(g,m){return f[g]-f[m]})}function Zl(e){if(Pt(e)===Ri)return[];var t=En(e);return[ks(e),t,ks(t)]}function Ql(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var s=n.mainAxis,o=s===void 0?!0:s,r=n.altAxis,a=r===void 0?!0:r,l=n.fallbackPlacements,c=n.padding,h=n.boundary,u=n.rootBoundary,d=n.altBoundary,f=n.flipVariations,g=f===void 0?!0:f,m=n.allowedAutoPlacements,p=t.options.placement,b=Pt(p),x=b===p,v=l||(x||!g?[En(p)]:Zl(p)),_=[p].concat(v).reduce(function(U,X){return U.concat(Pt(X)===Ri?Jl(t,{placement:X,boundary:h,rootBoundary:u,padding:c,flipVariations:g,allowedAutoPlacements:m}):X)},[]),y=t.rects.reference,w=t.rects.popper,k=new Map,S=!0,C=_[0],D=0;D<_.length;D++){var P=_[D],O=Pt(P),E=Me(P)===we,I=[ut,xt].indexOf(O)>=0,T=I?"width":"height",L=qe(t,{placement:P,boundary:h,rootBoundary:u,altBoundary:d,padding:c}),F=I?E?yt:dt:E?xt:ut;y[T]>w[T]&&(F=En(F));var B=En(F),$=[];if(o&&$.push(L[O]<=0),a&&$.push(L[F]<=0,L[B]<=0),$.every(function(U){return U})){C=P,S=!1;break}k.set(P,$)}if(S)for(var N=g?3:1,tt=function(X){var q=_.find(function(At){var H=k.get(At);if(H)return H.slice(0,X).every(function(et){return et})});if(q)return C=q,"break"},Q=N;Q>0;Q--){var nt=tt(Q);if(nt==="break")break}t.placement!==C&&(t.modifiersData[i]._skip=!0,t.placement=C,t.reset=!0)}}const tc={name:"flip",enabled:!0,phase:"main",fn:Ql,requiresIfExists:["offset"],data:{_skip:!1}};function Cs(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Ps(e){return[ut,yt,xt,dt].some(function(t){return e[t]>=0})}function ec(e){var t=e.state,n=e.name,i=t.rects.reference,s=t.rects.popper,o=t.modifiersData.preventOverflow,r=qe(t,{elementContext:"reference"}),a=qe(t,{altBoundary:!0}),l=Cs(r,i),c=Cs(a,s,o),h=Ps(l),u=Ps(c);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":u})}const nc={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:ec};function ic(e,t,n){var i=Pt(e),s=[dt,ut].indexOf(i)>=0?-1:1,o=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[dt,yt].indexOf(i)>=0?{x:a,y:r}:{x:r,y:a}}function sc(e){var t=e.state,n=e.options,i=e.name,s=n.offset,o=s===void 0?[0,0]:s,r=gr.reduce(function(h,u){return h[u]=ic(u,t.rects,o),h},{}),a=r[t.placement],l=a.x,c=a.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=c),t.modifiersData[i]=r}const oc={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:sc};function rc(e){var t=e.state,n=e.name;t.modifiersData[n]=wr({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const ac={name:"popperOffsets",enabled:!0,phase:"read",fn:rc,data:{}};function lc(e){return e==="x"?"y":"x"}function cc(e){var t=e.state,n=e.options,i=e.name,s=n.mainAxis,o=s===void 0?!0:s,r=n.altAxis,a=r===void 0?!1:r,l=n.boundary,c=n.rootBoundary,h=n.altBoundary,u=n.padding,d=n.tether,f=d===void 0?!0:d,g=n.tetherOffset,m=g===void 0?0:g,p=qe(t,{boundary:l,rootBoundary:c,padding:u,altBoundary:h}),b=Pt(t.placement),x=Me(t.placement),v=!x,_=Ii(b),y=lc(_),w=t.modifiersData.popperOffsets,k=t.rects.reference,S=t.rects.popper,C=typeof m=="function"?m(Object.assign({},t.rects,{placement:t.placement})):m,D=typeof C=="number"?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),P=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,O={x:0,y:0};if(w){if(o){var E,I=_==="y"?ut:dt,T=_==="y"?xt:yt,L=_==="y"?"height":"width",F=w[_],B=F+p[I],$=F-p[T],N=f?-S[L]/2:0,tt=x===we?k[L]:S[L],Q=x===we?-S[L]:-k[L],nt=t.elements.arrow,U=f&&nt?Fi(nt):{width:0,height:0},X=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:xr(),q=X[I],At=X[T],H=He(0,k[L],U[L]),et=v?k[L]/2-N-H-q-D.mainAxis:tt-H-q-D.mainAxis,Ee=v?-k[L]/2+N+H+At+D.mainAxis:Q+H+At+D.mainAxis,zt=t.elements.arrow&&rn(t.elements.arrow),Jt=zt?_==="y"?zt.clientTop||0:zt.clientLeft||0:0,Zt=(E=P==null?void 0:P[_])!=null?E:0,lt=F+et-Zt-Jt,Ia=F+Ee-Zt,ls=He(f?Ln(B,lt):B,F,f?ce($,Ia):$);w[_]=ls,O[_]=ls-F}if(a){var cs,ja=_==="x"?ut:dt,$a=_==="x"?xt:yt,Qt=w[y],hn=y==="y"?"height":"width",hs=Qt+p[ja],us=Qt-p[$a],Gn=[ut,dt].indexOf(b)!==-1,ds=(cs=P==null?void 0:P[y])!=null?cs:0,fs=Gn?hs:Qt-k[hn]-S[hn]-ds+D.altAxis,ps=Gn?Qt+k[hn]+S[hn]-ds-D.altAxis:us,gs=f&&Gn?Rl(fs,Qt,ps):He(f?fs:hs,Qt,f?ps:us);w[y]=gs,O[y]=gs-Qt}t.modifiersData[i]=O}}const hc={name:"preventOverflow",enabled:!0,phase:"main",fn:cc,requiresIfExists:["offset"]};function uc(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function dc(e){return e===gt(e)||!Ot(e)?ji(e):uc(e)}function fc(e){var t=e.getBoundingClientRect(),n=Se(t.width)/e.offsetWidth||1,i=Se(t.height)/e.offsetHeight||1;return n!==1||i!==1}function pc(e,t,n){n===void 0&&(n=!1);var i=Ot(t),s=Ot(t)&&fc(t),o=Gt(t),r=ke(e,s,n),a={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(i||!i&&!n)&&((Ut(t)!=="body"||zi(o))&&(a=dc(t)),Ot(t)?(l=ke(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):o&&(l.x=$i(o))),{x:r.left+a.scrollLeft-l.x,y:r.top+a.scrollTop-l.y,width:r.width,height:r.height}}function gc(e){var t=new Map,n=new Set,i=[];e.forEach(function(o){t.set(o.name,o)});function s(o){n.add(o.name);var r=[].concat(o.requires||[],o.requiresIfExists||[]);r.forEach(function(a){if(!n.has(a)){var l=t.get(a);l&&s(l)}}),i.push(o)}return e.forEach(function(o){n.has(o.name)||s(o)}),i}function mc(e){var t=gc(e);return Al.reduce(function(n,i){return n.concat(t.filter(function(s){return s.phase===i}))},[])}function bc(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function xc(e){var t=e.reduce(function(n,i){var s=n[i.name];return n[i.name]=s?Object.assign({},s,i,{options:Object.assign({},s.options,i.options),data:Object.assign({},s.data,i.data)}):i,n},{});return Object.keys(t).map(function(n){return t[n]})}var Os={placement:"bottom",modifiers:[],strategy:"absolute"};function Ds(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some(function(i){return!(i&&typeof i.getBoundingClientRect=="function")})}function yc(e){e===void 0&&(e={});var t=e,n=t.defaultModifiers,i=n===void 0?[]:n,s=t.defaultOptions,o=s===void 0?Os:s;return function(a,l,c){c===void 0&&(c=o);var h={placement:"bottom",orderedModifiers:[],options:Object.assign({},Os,o),modifiersData:{},elements:{reference:a,popper:l},attributes:{},styles:{}},u=[],d=!1,f={state:h,setOptions:function(b){var x=typeof b=="function"?b(h.options):b;m(),h.options=Object.assign({},o,h.options,x),h.scrollParents={reference:de(a)?We(a):a.contextElement?We(a.contextElement):[],popper:We(l)};var v=mc(xc([].concat(i,h.options.modifiers)));return h.orderedModifiers=v.filter(function(_){return _.enabled}),g(),f.update()},forceUpdate:function(){if(!d){var b=h.elements,x=b.reference,v=b.popper;if(Ds(x,v)){h.rects={reference:pc(x,rn(v),h.options.strategy==="fixed"),popper:Fi(v)},h.reset=!1,h.placement=h.options.placement,h.orderedModifiers.forEach(function(D){return h.modifiersData[D.name]=Object.assign({},D.data)});for(var _=0;_<h.orderedModifiers.length;_++){if(h.reset===!0){h.reset=!1,_=-1;continue}var y=h.orderedModifiers[_],w=y.fn,k=y.options,S=k===void 0?{}:k,C=y.name;typeof w=="function"&&(h=w({state:h,options:S,name:C,instance:f})||h)}}}},update:bc(function(){return new Promise(function(p){f.forceUpdate(),p(h)})}),destroy:function(){m(),d=!0}};if(!Ds(a,l))return f;f.setOptions(c).then(function(p){!d&&c.onFirstUpdate&&c.onFirstUpdate(p)});function g(){h.orderedModifiers.forEach(function(p){var b=p.name,x=p.options,v=x===void 0?{}:x,_=p.effect;if(typeof _=="function"){var y=_({state:h,name:b,instance:f,options:v}),w=function(){};u.push(y||w)}})}function m(){u.forEach(function(p){return p()}),u=[]}return f}}const vc=yc({defaultModifiers:[nc,ac,Bl,Wl,oc,tc,hc,jl]}),_c=["enabled","placement","strategy","modifiers"];function wc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}const Sc={name:"applyStyles",enabled:!1,phase:"afterWrite",fn:()=>{}},kc={name:"ariaDescribedBy",enabled:!0,phase:"afterWrite",effect:({state:e})=>()=>{const{reference:t,popper:n}=e.elements;if("removeAttribute"in t){const i=(t.getAttribute("aria-describedby")||"").split(",").filter(s=>s.trim()!==n.id);i.length?t.setAttribute("aria-describedby",i.join(",")):t.removeAttribute("aria-describedby")}},fn:({state:e})=>{var t;const{popper:n,reference:i}=e.elements,s=(t=n.getAttribute("role"))==null?void 0:t.toLowerCase();if(n.id&&s==="tooltip"&&"setAttribute"in i){const o=i.getAttribute("aria-describedby");if(o&&o.split(",").indexOf(n.id)!==-1)return;i.setAttribute("aria-describedby",o?`${o},${n.id}`:n.id)}}},Mc=[];function Cc(e,t,n={}){let{enabled:i=!0,placement:s="bottom",strategy:o="absolute",modifiers:r=Mc}=n,a=wc(n,_c);const l=A.useRef(r),c=A.useRef(),h=A.useCallback(()=>{var p;(p=c.current)==null||p.update()},[]),u=A.useCallback(()=>{var p;(p=c.current)==null||p.forceUpdate()},[]),[d,f]=xl(A.useState({placement:s,update:h,forceUpdate:u,attributes:{},styles:{popper:{},arrow:{}}})),g=A.useMemo(()=>({name:"updateStateModifier",enabled:!0,phase:"write",requires:["computeStyles"],fn:({state:p})=>{const b={},x={};Object.keys(p.elements).forEach(v=>{b[v]=p.styles[v],x[v]=p.attributes[v]}),f({state:p,styles:b,attributes:x,update:h,forceUpdate:u,placement:p.placement})}}),[h,u,f]),m=A.useMemo(()=>(Be(l.current,r)||(l.current=r),l.current),[r]);return A.useEffect(()=>{!c.current||!i||c.current.setOptions({placement:s,strategy:o,modifiers:[...m,g,Sc]})},[o,s,g,i,m]),A.useEffect(()=>{if(!(!i||e==null||t==null))return c.current=vc(e,t,Object.assign({},a,{placement:s,strategy:o,modifiers:[...m,kc,g]})),()=>{c.current!=null&&(c.current.destroy(),c.current=void 0,f(p=>Object.assign({},p,{attributes:{},styles:{popper:{}}})))}},[i,e,t]),d}const As=()=>{};function Pc(e){return e.button===0}function Oc(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}const Qn=e=>e&&("current"in e?e.current:e),Es={click:"mousedown",mouseup:"mousedown",pointerup:"pointerdown"};function Dc(e,t=As,{disabled:n,clickTrigger:i="click"}={}){const s=A.useRef(!1),o=A.useRef(!1),r=A.useCallback(c=>{const h=Qn(e);Wa(!!h,"ClickOutside captured a close event but does not have a ref to compare it to. useClickOutside(), should be passed a ref that resolves to a DOM node"),s.current=!h||Oc(c)||!Pc(c)||!!ms(h,c.target)||o.current,o.current=!1},[e]),a=Vt(c=>{const h=Qn(e);h&&ms(h,c.target)?o.current=!0:o.current=!1}),l=Vt(c=>{s.current||t(c)});A.useEffect(()=>{var c,h;if(n||e==null)return;const u=Va(Qn(e)),d=u.defaultView||window;let f=(c=d.event)!=null?c:(h=d.parent)==null?void 0:h.event,g=null;Es[i]&&(g=un(u,Es[i],a,!0));const m=un(u,i,r,!0),p=un(u,i,x=>{if(x===f){f=void 0;return}l(x)});let b=[];return"ontouchstart"in u.documentElement&&(b=[].slice.call(u.body.children).map(x=>un(x,"mousemove",As))),()=>{g==null||g(),m(),p(),b.forEach(x=>x())}},[e,n,i,r,a,l])}function Ac(e){const t={};return Array.isArray(e)?(e==null||e.forEach(n=>{t[n.name]=n}),t):e||t}function Ec(e={}){return Array.isArray(e)?e:Object.keys(e).map(t=>(e[t].name=t,e[t]))}function Tc({enabled:e,enableEvents:t,placement:n,flip:i,offset:s,fixed:o,containerPadding:r,arrowElement:a,popperConfig:l={}}){var c,h,u,d,f;const g=Ac(l.modifiers);return Object.assign({},l,{placement:n,enabled:e,strategy:o?"fixed":l.strategy,modifiers:Ec(Object.assign({},g,{eventListeners:{enabled:t,options:(c=g.eventListeners)==null?void 0:c.options},preventOverflow:Object.assign({},g.preventOverflow,{options:r?Object.assign({padding:r},(h=g.preventOverflow)==null?void 0:h.options):(u=g.preventOverflow)==null?void 0:u.options}),offset:{options:Object.assign({offset:s},(d=g.offset)==null?void 0:d.options)},arrow:Object.assign({},g.arrow,{enabled:!!a,options:Object.assign({},(f=g.arrow)==null?void 0:f.options,{element:a})}),flip:Object.assign({enabled:!!i},g.flip)}))})}const Rc=["children","usePopper"];function Lc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}const Fc=()=>{};function Sr(e={}){const t=A.useContext(Yn),[n,i]=ul(),s=A.useRef(!1),{flip:o,offset:r,rootCloseEvent:a,fixed:l=!1,placement:c,popperConfig:h={},enableEventListeners:u=!0,usePopper:d=!!t}=e,f=(t==null?void 0:t.show)==null?!!e.show:t.show;f&&!s.current&&(s.current=!0);const g=w=>{t==null||t.toggle(!1,w)},{placement:m,setMenu:p,menuElement:b,toggleElement:x}=t||{},v=Cc(x,b,Tc({placement:c||m||"bottom-start",enabled:d,enableEvents:u??f,offset:r,flip:o,fixed:l,arrowElement:n,popperConfig:h})),_=Object.assign({ref:p||Fc,"aria-labelledby":x==null?void 0:x.id},v.attributes.popper,{style:v.styles.popper}),y={show:f,placement:m,hasShown:s.current,toggle:t==null?void 0:t.toggle,popper:d?v:null,arrowProps:d?Object.assign({ref:i},v.attributes.arrow,{style:v.styles.arrow}):{}};return Dc(b,g,{clickTrigger:a,disabled:!f}),[_,y]}function kr(e){let{children:t,usePopper:n=!0}=e,i=Lc(e,Rc);const[s,o]=Sr(Object.assign({},i,{usePopper:n}));return M.jsx(M.Fragment,{children:t(s,o)})}kr.displayName="DropdownMenu";const Ni={prefix:String(Math.round(Math.random()*1e10)),current:0},Mr=ue.createContext(Ni),Ic=ue.createContext(!1);let jc=!!(typeof window<"u"&&window.document&&window.document.createElement),ti=new WeakMap;function $c(e=!1){let t=A.useContext(Mr),n=A.useRef(null);if(n.current===null&&!e){var i,s;let o=(s=ue.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)===null||s===void 0||(i=s.ReactCurrentOwner)===null||i===void 0?void 0:i.current;if(o){let r=ti.get(o);r==null?ti.set(o,{id:t.current,state:o.memoizedState}):o.memoizedState!==r.state&&(t.current=r.id,ti.delete(o))}n.current=++t.current}return n.current}function zc(e){let t=A.useContext(Mr);t===Ni&&!jc&&console.warn("When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.");let n=$c(!!e),i=`react-aria${t.prefix}`;return e||`${i}-${n}`}function Nc(e){let t=ue.useId(),[n]=A.useState(Yc()),i=n?"react-aria":`react-aria${Ni.prefix}`;return e||`${i}-${t}`}const Bc=typeof ue.useId=="function"?Nc:zc;function Hc(){return!1}function Wc(){return!0}function Vc(e){return()=>{}}function Yc(){return typeof ue.useSyncExternalStore=="function"?ue.useSyncExternalStore(Vc,Hc,Wc):A.useContext(Ic)}const Cr=e=>{var t;return((t=e.getAttribute("role"))==null?void 0:t.toLowerCase())==="menu"},Ts=()=>{};function Pr(){const e=Bc(),{show:t=!1,toggle:n=Ts,setToggle:i,menuElement:s}=A.useContext(Yn)||{},o=A.useCallback(a=>{n(!t,a)},[t,n]),r={id:e,ref:i||Ts,onClick:o,"aria-expanded":!!t};return s&&Cr(s)&&(r["aria-haspopup"]=!0),[r,{show:t,toggle:n}]}function Or({children:e}){const[t,n]=Pr();return M.jsx(M.Fragment,{children:e(t,n)})}Or.displayName="DropdownToggle";const _i=A.createContext(null),Rs=(e,t=null)=>e!=null?String(e):t||null,Dr=A.createContext(null);Dr.displayName="NavContext";const Uc=["eventKey","disabled","onClick","active","as"];function Xc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}function Ar({key:e,href:t,active:n,disabled:i,onClick:s}){const o=A.useContext(_i),r=A.useContext(Dr),{activeKey:a}=r||{},l=Rs(e,t),c=n==null&&e!=null?Rs(a)===l:n;return[{onClick:Vt(u=>{i||(s==null||s(u),o&&!u.isPropagationStopped()&&o(l,u))}),"aria-disabled":i||void 0,"aria-selected":c,[ar("dropdown-item")]:""},{isActive:c}]}const Er=A.forwardRef((e,t)=>{let{eventKey:n,disabled:i,onClick:s,active:o,as:r=Ya}=e,a=Xc(e,Uc);const[l]=Ar({key:n,href:a.href,disabled:i,onClick:s,active:o});return M.jsx(r,Object.assign({},a,{ref:t},l))});Er.displayName="DropdownItem";function Ls(){const e=bl(),t=A.useRef(null),n=A.useCallback(i=>{t.current=i,e()},[e]);return[t,n]}function an({defaultShow:e,show:t,onSelect:n,onToggle:i,itemSelector:s=`* [${ar("dropdown-item")}]`,focusFirstItemOnShow:o,placement:r="bottom-start",children:a}){const l=Ua(),[c,h]=ml(t,e,i),[u,d]=Ls(),f=u.current,[g,m]=Ls(),p=g.current,b=Xa(c),x=A.useRef(null),v=A.useRef(!1),_=A.useContext(_i),y=A.useCallback((P,O,E=O==null?void 0:O.type)=>{h(P,{originalEvent:O,source:E})},[h]),w=Vt((P,O)=>{n==null||n(P,O),y(!1,O,"select"),O.isPropagationStopped()||_==null||_(P,O)}),k=A.useMemo(()=>({toggle:y,placement:r,show:c,menuElement:f,toggleElement:p,setMenu:d,setToggle:m}),[y,r,c,f,p,d,m]);f&&b&&!c&&(v.current=f.contains(f.ownerDocument.activeElement));const S=Vt(()=>{p&&p.focus&&p.focus()}),C=Vt(()=>{const P=x.current;let O=o;if(O==null&&(O=u.current&&Cr(u.current)?"keyboard":!1),O===!1||O==="keyboard"&&!/^key.+$/.test(P))return;const E=bs(u.current,s)[0];E&&E.focus&&E.focus()});A.useEffect(()=>{c?C():v.current&&(v.current=!1,S())},[c,v,S,C]),A.useEffect(()=>{x.current=null});const D=(P,O)=>{if(!u.current)return null;const E=bs(u.current,s);let I=E.indexOf(P)+O;return I=Math.max(0,Math.min(I,E.length)),E[I]};return dl(A.useCallback(()=>l.document,[l]),"keydown",P=>{var O,E;const{key:I}=P,T=P.target,L=(O=u.current)==null?void 0:O.contains(T),F=(E=g.current)==null?void 0:E.contains(T);if(/input|textarea/i.test(T.tagName)&&(I===" "||I!=="Escape"&&L||I==="Escape"&&T.type==="search")||!L&&!F||I==="Tab"&&(!u.current||!c))return;x.current=P.type;const $={originalEvent:P,source:P.type};switch(I){case"ArrowUp":{const N=D(T,-1);N&&N.focus&&N.focus(),P.preventDefault();return}case"ArrowDown":if(P.preventDefault(),!c)h(!0,$);else{const N=D(T,1);N&&N.focus&&N.focus()}return;case"Tab":Ka(T.ownerDocument,"keyup",N=>{var tt;(N.key==="Tab"&&!N.target||!((tt=u.current)!=null&&tt.contains(N.target)))&&h(!1,$)},{once:!0});break;case"Escape":I==="Escape"&&(P.preventDefault(),P.stopPropagation()),h(!1,$);break}}),M.jsx(_i.Provider,{value:w,children:M.jsx(Yn.Provider,{value:k,children:a})})}an.displayName="Dropdown";an.Menu=kr;an.Toggle=Or;an.Item=Er;const Bi=A.createContext({});Bi.displayName="DropdownContext";const Tr=A.forwardRef(({className:e,bsPrefix:t,as:n="hr",role:i="separator",...s},o)=>(t=Kt(t,"dropdown-divider"),M.jsx(n,{ref:o,className:qt(e,t),role:i,...s})));Tr.displayName="DropdownDivider";const Rr=A.forwardRef(({className:e,bsPrefix:t,as:n="div",role:i="heading",...s},o)=>(t=Kt(t,"dropdown-header"),M.jsx(n,{ref:o,className:qt(e,t),role:i,...s})));Rr.displayName="DropdownHeader";const Lr=A.forwardRef(({bsPrefix:e,className:t,eventKey:n,disabled:i=!1,onClick:s,active:o,as:r=fr,...a},l)=>{const c=Kt(e,"dropdown-item"),[h,u]=Ar({key:n,href:a.href,disabled:i,onClick:s,active:o});return M.jsx(r,{...a,...h,ref:l,className:qt(t,c,u.isActive&&"active",i&&"disabled")})});Lr.displayName="DropdownItem";const Fr=A.forwardRef(({className:e,bsPrefix:t,as:n="span",...i},s)=>(t=Kt(t,"dropdown-item-text"),M.jsx(n,{ref:s,className:qt(e,t),...i})));Fr.displayName="DropdownItemText";const Kc=typeof global<"u"&&global.navigator&&global.navigator.product==="ReactNative",qc=typeof document<"u",Gc=qc||Kc?A.useLayoutEffect:A.useEffect,Ir=A.createContext(null);Ir.displayName="NavbarContext";function jr(e,t){return e}function $r(e,t,n){const i=n?"top-end":"top-start",s=n?"top-start":"top-end",o=n?"bottom-end":"bottom-start",r=n?"bottom-start":"bottom-end",a=n?"right-start":"left-start",l=n?"right-end":"left-end",c=n?"left-start":"right-start",h=n?"left-end":"right-end";let u=e?r:o;return t==="up"?u=e?s:i:t==="end"?u=e?h:c:t==="start"?u=e?l:a:t==="down-centered"?u="bottom":t==="up-centered"&&(u="top"),u}const zr=A.forwardRef(({bsPrefix:e,className:t,align:n,rootCloseEvent:i,flip:s=!0,show:o,renderOnMount:r,as:a="div",popperConfig:l,variant:c,...h},u)=>{let d=!1;const f=A.useContext(Ir),g=Kt(e,"dropdown-menu"),{align:m,drop:p,isRTL:b}=A.useContext(Bi);n=n||m;const x=A.useContext(ur),v=[];if(n)if(typeof n=="object"){const P=Object.keys(n);if(P.length){const O=P[0],E=n[O];d=E==="start",v.push(`${g}-${O}-${E}`)}}else n==="end"&&(d=!0);const _=$r(d,p,b),[y,{hasShown:w,popper:k,show:S,toggle:C}]=Sr({flip:s,rootCloseEvent:i,show:o,usePopper:!f&&v.length===0,offset:[0,2],popperConfig:l,placement:_});if(y.ref=lr(jr(u),y.ref),Gc(()=>{S&&(k==null||k.update())},[S]),!w&&!r&&!x)return null;typeof a!="string"&&(y.show=S,y.close=()=>C==null?void 0:C(!1),y.align=n);let D=h.style;return k!=null&&k.placement&&(D={...h.style,...y.style},h["x-placement"]=k.placement),M.jsx(a,{...h,...y,style:D,...(v.length||f)&&{"data-bs-popper":"static"},className:qt(t,g,S&&"show",d&&`${g}-end`,c&&`${g}-${c}`,...v)})});zr.displayName="DropdownMenu";const Nr=A.forwardRef(({bsPrefix:e,split:t,className:n,childBsPrefix:i,as:s=Ft,...o},r)=>{const a=Kt(e,"dropdown-toggle"),l=A.useContext(Yn);i!==void 0&&(o.bsPrefix=i);const[c]=Pr();return c.ref=lr(c.ref,jr(r)),M.jsx(s,{className:qt(n,a,t&&`${a}-split`,(l==null?void 0:l.show)&&"show"),...c,...o})});Nr.displayName="DropdownToggle";const Br=A.forwardRef((e,t)=>{const{bsPrefix:n,drop:i="down",show:s,className:o,align:r="start",onSelect:a,onToggle:l,focusFirstItemOnShow:c,as:h="div",navbar:u,autoClose:d=!0,...f}=hl(e,{show:"onToggle"}),g=A.useContext(ur),m=Kt(n,"dropdown"),p=qa(),b=k=>d===!1?k==="click":d==="inside"?k!=="rootClose":d==="outside"?k!=="select":!0,x=Ga((k,S)=>{var C;!((C=S.originalEvent)==null||(C=C.target)==null)&&C.classList.contains("dropdown-toggle")&&S.source==="mousedown"||(S.originalEvent.currentTarget===document&&(S.source!=="keydown"||S.originalEvent.key==="Escape")&&(S.source="rootClose"),b(S.source)&&(l==null||l(k,S)))}),_=$r(r==="end",i,p),y=A.useMemo(()=>({align:r,drop:i,isRTL:p}),[r,i,p]),w={down:m,"down-centered":`${m}-center`,up:"dropup","up-centered":"dropup-center dropup",end:"dropend",start:"dropstart"};return M.jsx(Bi.Provider,{value:y,children:M.jsx(an,{placement:_,show:s,onSelect:a,onToggle:x,focusFirstItemOnShow:c,itemSelector:`.${m}-item:not(.disabled):not(:disabled)`,children:g?f.children:M.jsx(h,{...f,ref:t,className:qt(o,s&&"show",w[i])})})})});Br.displayName="Dropdown";const ei=Object.assign(Br,{Toggle:Nr,Menu:zr,Item:Lr,ItemText:Fr,Divider:Tr,Header:Rr});/*!
+var za=Object.defineProperty;var Na=(e,t,n)=>t in e?za(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var R=(e,t,n)=>Na(e,typeof t!="symbol"?t+"":t,n);import{r as A,u as Vt,g as Ba,j as M,h as Kt,i as qt,k as Ha,w as Wa,l as ms,o as Va,m as un,f as ue,n as ar,B as Ya,p as Ua,q as Xa,s as bs,v as Ka,x as lr,y as Ft,z as qa,A as Ga,c as wt,D as Ja,S as G,E as cr,R as se,O as Za,P as Qa,G as tl,N as el,H as nl,I as xe,J as hr,K as ge,M as il,Q as sl,T as ol,L as rl,V as al,C as xs,W as Jn,X as ll}from"./index-DunMf8wQ.js";import{S as sn}from"./SideBar-DC9SKCkF.js";import{u as Zn,w as cl}from"./xlsx-BHRztzV8.js";import{c as ur,F as dr}from"./index-DSQNfbUQ.js";import{u as hl}from"./hook-CgOBj93G.js";function ul(){return A.useState(null)}function dl(e,t,n,i=!1){const s=Vt(n);A.useEffect(()=>{const o=typeof e=="function"?e():e;return o.addEventListener(t,s,i),()=>o.removeEventListener(t,s,i)},[e])}const fl=["onKeyDown"];function pl(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}function gl(e){return!e||e.trim()==="#"}const fr=A.forwardRef((e,t)=>{let{onKeyDown:n}=e,i=pl(e,fl);const[s]=Ba(Object.assign({tagName:"a"},i)),o=Vt(r=>{s.onKeyDown(r),n==null||n(r)});return gl(i.href)||i.role==="button"?M.jsx("a",Object.assign({ref:t},i,s,{onKeyDown:o})):M.jsx("a",Object.assign({ref:t},i,{onKeyDown:n}))});fr.displayName="Anchor";const Ti=A.forwardRef(({bsPrefix:e,className:t,role:n="toolbar",...i},s)=>{const o=Kt(e,"btn-toolbar");return M.jsx("div",{...i,ref:s,className:qt(t,o),role:n})});Ti.displayName="ButtonToolbar";function ml(e,t,n){const i=A.useRef(e!==void 0),[s,o]=A.useState(t),r=e!==void 0,a=i.current;return i.current=r,!r&&a&&s!==t&&o(t),[r?e:s,A.useCallback((...l)=>{const[c,...h]=l;let u=n==null?void 0:n(c,...h);return o(c),u},[n])]}function bl(){const[,e]=A.useReducer(t=>t+1,0);return e}const Yn=A.createContext(null);var ys=Object.prototype.hasOwnProperty;function vs(e,t,n){for(n of e.keys())if(Be(n,t))return n}function Be(e,t){var n,i,s;if(e===t)return!0;if(e&&t&&(n=e.constructor)===t.constructor){if(n===Date)return e.getTime()===t.getTime();if(n===RegExp)return e.toString()===t.toString();if(n===Array){if((i=e.length)===t.length)for(;i--&&Be(e[i],t[i]););return i===-1}if(n===Set){if(e.size!==t.size)return!1;for(i of e)if(s=i,s&&typeof s=="object"&&(s=vs(t,s),!s)||!t.has(s))return!1;return!0}if(n===Map){if(e.size!==t.size)return!1;for(i of e)if(s=i[0],s&&typeof s=="object"&&(s=vs(t,s),!s)||!Be(i[1],t.get(s)))return!1;return!0}if(n===ArrayBuffer)e=new Uint8Array(e),t=new Uint8Array(t);else if(n===DataView){if((i=e.byteLength)===t.byteLength)for(;i--&&e.getInt8(i)===t.getInt8(i););return i===-1}if(ArrayBuffer.isView(e)){if((i=e.byteLength)===t.byteLength)for(;i--&&e[i]===t[i];);return i===-1}if(!n||typeof e=="object"){i=0;for(n in e)if(ys.call(e,n)&&++i&&!ys.call(t,n)||!(n in t)||!Be(e[n],t[n]))return!1;return Object.keys(t).length===i}}return e!==e&&t!==t}function xl(e){const t=Ha();return[e[0],A.useCallback(n=>{if(t())return e[1](n)},[t,e[1]])]}var ut="top",xt="bottom",yt="right",dt="left",Ri="auto",on=[ut,xt,yt,dt],we="start",Ke="end",yl="clippingParents",pr="viewport",Te="popper",vl="reference",_s=on.reduce(function(e,t){return e.concat([t+"-"+we,t+"-"+Ke])},[]),gr=[].concat(on,[Ri]).reduce(function(e,t){return e.concat([t,t+"-"+we,t+"-"+Ke])},[]),_l="beforeRead",wl="read",Sl="afterRead",kl="beforeMain",Ml="main",Cl="afterMain",Pl="beforeWrite",Ol="write",Dl="afterWrite",Al=[_l,wl,Sl,kl,Ml,Cl,Pl,Ol,Dl];function Pt(e){return e.split("-")[0]}function gt(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function de(e){var t=gt(e).Element;return e instanceof t||e instanceof Element}function Ot(e){var t=gt(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Li(e){if(typeof ShadowRoot>"u")return!1;var t=gt(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}var ce=Math.max,Ln=Math.min,Se=Math.round;function yi(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function mr(){return!/^((?!chrome|android).)*safari/i.test(yi())}function ke(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var i=e.getBoundingClientRect(),s=1,o=1;t&&Ot(e)&&(s=e.offsetWidth>0&&Se(i.width)/e.offsetWidth||1,o=e.offsetHeight>0&&Se(i.height)/e.offsetHeight||1);var r=de(e)?gt(e):window,a=r.visualViewport,l=!mr()&&n,c=(i.left+(l&&a?a.offsetLeft:0))/s,h=(i.top+(l&&a?a.offsetTop:0))/o,u=i.width/s,d=i.height/o;return{width:u,height:d,top:h,right:c+u,bottom:h+d,left:c,x:c,y:h}}function Fi(e){var t=ke(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function br(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Li(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Ut(e){return e?(e.nodeName||"").toLowerCase():null}function jt(e){return gt(e).getComputedStyle(e)}function El(e){return["table","td","th"].indexOf(Ut(e))>=0}function Gt(e){return((de(e)?e.ownerDocument:e.document)||window.document).documentElement}function Un(e){return Ut(e)==="html"?e:e.assignedSlot||e.parentNode||(Li(e)?e.host:null)||Gt(e)}function ws(e){return!Ot(e)||jt(e).position==="fixed"?null:e.offsetParent}function Tl(e){var t=/firefox/i.test(yi()),n=/Trident/i.test(yi());if(n&&Ot(e)){var i=jt(e);if(i.position==="fixed")return null}var s=Un(e);for(Li(s)&&(s=s.host);Ot(s)&&["html","body"].indexOf(Ut(s))<0;){var o=jt(s);if(o.transform!=="none"||o.perspective!=="none"||o.contain==="paint"||["transform","perspective"].indexOf(o.willChange)!==-1||t&&o.willChange==="filter"||t&&o.filter&&o.filter!=="none")return s;s=s.parentNode}return null}function rn(e){for(var t=gt(e),n=ws(e);n&&El(n)&&jt(n).position==="static";)n=ws(n);return n&&(Ut(n)==="html"||Ut(n)==="body"&&jt(n).position==="static")?t:n||Tl(e)||t}function Ii(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function He(e,t,n){return ce(e,Ln(t,n))}function Rl(e,t,n){var i=He(e,t,n);return i>n?n:i}function xr(){return{top:0,right:0,bottom:0,left:0}}function yr(e){return Object.assign({},xr(),e)}function vr(e,t){return t.reduce(function(n,i){return n[i]=e,n},{})}var Ll=function(t,n){return t=typeof t=="function"?t(Object.assign({},n.rects,{placement:n.placement})):t,yr(typeof t!="number"?t:vr(t,on))};function Fl(e){var t,n=e.state,i=e.name,s=e.options,o=n.elements.arrow,r=n.modifiersData.popperOffsets,a=Pt(n.placement),l=Ii(a),c=[dt,yt].indexOf(a)>=0,h=c?"height":"width";if(!(!o||!r)){var u=Ll(s.padding,n),d=Fi(o),f=l==="y"?ut:dt,g=l==="y"?xt:yt,m=n.rects.reference[h]+n.rects.reference[l]-r[l]-n.rects.popper[h],p=r[l]-n.rects.reference[l],b=rn(o),x=b?l==="y"?b.clientHeight||0:b.clientWidth||0:0,v=m/2-p/2,_=u[f],y=x-d[h]-u[g],w=x/2-d[h]/2+v,k=He(_,w,y),S=l;n.modifiersData[i]=(t={},t[S]=k,t.centerOffset=k-w,t)}}function Il(e){var t=e.state,n=e.options,i=n.element,s=i===void 0?"[data-popper-arrow]":i;s!=null&&(typeof s=="string"&&(s=t.elements.popper.querySelector(s),!s)||br(t.elements.popper,s)&&(t.elements.arrow=s))}const jl={name:"arrow",enabled:!0,phase:"main",fn:Fl,effect:Il,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Me(e){return e.split("-")[1]}var $l={top:"auto",right:"auto",bottom:"auto",left:"auto"};function zl(e,t){var n=e.x,i=e.y,s=t.devicePixelRatio||1;return{x:Se(n*s)/s||0,y:Se(i*s)/s||0}}function Ss(e){var t,n=e.popper,i=e.popperRect,s=e.placement,o=e.variation,r=e.offsets,a=e.position,l=e.gpuAcceleration,c=e.adaptive,h=e.roundOffsets,u=e.isFixed,d=r.x,f=d===void 0?0:d,g=r.y,m=g===void 0?0:g,p=typeof h=="function"?h({x:f,y:m}):{x:f,y:m};f=p.x,m=p.y;var b=r.hasOwnProperty("x"),x=r.hasOwnProperty("y"),v=dt,_=ut,y=window;if(c){var w=rn(n),k="clientHeight",S="clientWidth";if(w===gt(n)&&(w=Gt(n),jt(w).position!=="static"&&a==="absolute"&&(k="scrollHeight",S="scrollWidth")),w=w,s===ut||(s===dt||s===yt)&&o===Ke){_=xt;var C=u&&w===y&&y.visualViewport?y.visualViewport.height:w[k];m-=C-i.height,m*=l?1:-1}if(s===dt||(s===ut||s===xt)&&o===Ke){v=yt;var D=u&&w===y&&y.visualViewport?y.visualViewport.width:w[S];f-=D-i.width,f*=l?1:-1}}var P=Object.assign({position:a},c&&$l),O=h===!0?zl({x:f,y:m},gt(n)):{x:f,y:m};if(f=O.x,m=O.y,l){var E;return Object.assign({},P,(E={},E[_]=x?"0":"",E[v]=b?"0":"",E.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",E))}return Object.assign({},P,(t={},t[_]=x?m+"px":"",t[v]=b?f+"px":"",t.transform="",t))}function Nl(e){var t=e.state,n=e.options,i=n.gpuAcceleration,s=i===void 0?!0:i,o=n.adaptive,r=o===void 0?!0:o,a=n.roundOffsets,l=a===void 0?!0:a,c={placement:Pt(t.placement),variation:Me(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:s,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Ss(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:r,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Ss(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}const Bl={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Nl,data:{}};var dn={passive:!0};function Hl(e){var t=e.state,n=e.instance,i=e.options,s=i.scroll,o=s===void 0?!0:s,r=i.resize,a=r===void 0?!0:r,l=gt(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&c.forEach(function(h){h.addEventListener("scroll",n.update,dn)}),a&&l.addEventListener("resize",n.update,dn),function(){o&&c.forEach(function(h){h.removeEventListener("scroll",n.update,dn)}),a&&l.removeEventListener("resize",n.update,dn)}}const Wl={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:Hl,data:{}};var Vl={left:"right",right:"left",bottom:"top",top:"bottom"};function En(e){return e.replace(/left|right|bottom|top/g,function(t){return Vl[t]})}var Yl={start:"end",end:"start"};function ks(e){return e.replace(/start|end/g,function(t){return Yl[t]})}function ji(e){var t=gt(e),n=t.pageXOffset,i=t.pageYOffset;return{scrollLeft:n,scrollTop:i}}function $i(e){return ke(Gt(e)).left+ji(e).scrollLeft}function Ul(e,t){var n=gt(e),i=Gt(e),s=n.visualViewport,o=i.clientWidth,r=i.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=mr();(c||!c&&t==="fixed")&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+$i(e),y:l}}function Xl(e){var t,n=Gt(e),i=ji(e),s=(t=e.ownerDocument)==null?void 0:t.body,o=ce(n.scrollWidth,n.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ce(n.scrollHeight,n.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-i.scrollLeft+$i(e),l=-i.scrollTop;return jt(s||n).direction==="rtl"&&(a+=ce(n.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}function zi(e){var t=jt(e),n=t.overflow,i=t.overflowX,s=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+s+i)}function _r(e){return["html","body","#document"].indexOf(Ut(e))>=0?e.ownerDocument.body:Ot(e)&&zi(e)?e:_r(Un(e))}function We(e,t){var n;t===void 0&&(t=[]);var i=_r(e),s=i===((n=e.ownerDocument)==null?void 0:n.body),o=gt(i),r=s?[o].concat(o.visualViewport||[],zi(i)?i:[]):i,a=t.concat(r);return s?a:a.concat(We(Un(r)))}function vi(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function Kl(e,t){var n=ke(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function Ms(e,t,n){return t===pr?vi(Ul(e,n)):de(t)?Kl(t,n):vi(Xl(Gt(e)))}function ql(e){var t=We(Un(e)),n=["absolute","fixed"].indexOf(jt(e).position)>=0,i=n&&Ot(e)?rn(e):e;return de(i)?t.filter(function(s){return de(s)&&br(s,i)&&Ut(s)!=="body"}):[]}function Gl(e,t,n,i){var s=t==="clippingParents"?ql(e):[].concat(t),o=[].concat(s,[n]),r=o[0],a=o.reduce(function(l,c){var h=Ms(e,c,i);return l.top=ce(h.top,l.top),l.right=Ln(h.right,l.right),l.bottom=Ln(h.bottom,l.bottom),l.left=ce(h.left,l.left),l},Ms(e,r,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function wr(e){var t=e.reference,n=e.element,i=e.placement,s=i?Pt(i):null,o=i?Me(i):null,r=t.x+t.width/2-n.width/2,a=t.y+t.height/2-n.height/2,l;switch(s){case ut:l={x:r,y:t.y-n.height};break;case xt:l={x:r,y:t.y+t.height};break;case yt:l={x:t.x+t.width,y:a};break;case dt:l={x:t.x-n.width,y:a};break;default:l={x:t.x,y:t.y}}var c=s?Ii(s):null;if(c!=null){var h=c==="y"?"height":"width";switch(o){case we:l[c]=l[c]-(t[h]/2-n[h]/2);break;case Ke:l[c]=l[c]+(t[h]/2-n[h]/2);break}}return l}function qe(e,t){t===void 0&&(t={});var n=t,i=n.placement,s=i===void 0?e.placement:i,o=n.strategy,r=o===void 0?e.strategy:o,a=n.boundary,l=a===void 0?yl:a,c=n.rootBoundary,h=c===void 0?pr:c,u=n.elementContext,d=u===void 0?Te:u,f=n.altBoundary,g=f===void 0?!1:f,m=n.padding,p=m===void 0?0:m,b=yr(typeof p!="number"?p:vr(p,on)),x=d===Te?vl:Te,v=e.rects.popper,_=e.elements[g?x:d],y=Gl(de(_)?_:_.contextElement||Gt(e.elements.popper),l,h,r),w=ke(e.elements.reference),k=wr({reference:w,element:v,strategy:"absolute",placement:s}),S=vi(Object.assign({},v,k)),C=d===Te?S:w,D={top:y.top-C.top+b.top,bottom:C.bottom-y.bottom+b.bottom,left:y.left-C.left+b.left,right:C.right-y.right+b.right},P=e.modifiersData.offset;if(d===Te&&P){var O=P[s];Object.keys(D).forEach(function(E){var I=[yt,xt].indexOf(E)>=0?1:-1,T=[ut,xt].indexOf(E)>=0?"y":"x";D[E]+=O[T]*I})}return D}function Jl(e,t){t===void 0&&(t={});var n=t,i=n.placement,s=n.boundary,o=n.rootBoundary,r=n.padding,a=n.flipVariations,l=n.allowedAutoPlacements,c=l===void 0?gr:l,h=Me(i),u=h?a?_s:_s.filter(function(g){return Me(g)===h}):on,d=u.filter(function(g){return c.indexOf(g)>=0});d.length===0&&(d=u);var f=d.reduce(function(g,m){return g[m]=qe(e,{placement:m,boundary:s,rootBoundary:o,padding:r})[Pt(m)],g},{});return Object.keys(f).sort(function(g,m){return f[g]-f[m]})}function Zl(e){if(Pt(e)===Ri)return[];var t=En(e);return[ks(e),t,ks(t)]}function Ql(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var s=n.mainAxis,o=s===void 0?!0:s,r=n.altAxis,a=r===void 0?!0:r,l=n.fallbackPlacements,c=n.padding,h=n.boundary,u=n.rootBoundary,d=n.altBoundary,f=n.flipVariations,g=f===void 0?!0:f,m=n.allowedAutoPlacements,p=t.options.placement,b=Pt(p),x=b===p,v=l||(x||!g?[En(p)]:Zl(p)),_=[p].concat(v).reduce(function(U,X){return U.concat(Pt(X)===Ri?Jl(t,{placement:X,boundary:h,rootBoundary:u,padding:c,flipVariations:g,allowedAutoPlacements:m}):X)},[]),y=t.rects.reference,w=t.rects.popper,k=new Map,S=!0,C=_[0],D=0;D<_.length;D++){var P=_[D],O=Pt(P),E=Me(P)===we,I=[ut,xt].indexOf(O)>=0,T=I?"width":"height",L=qe(t,{placement:P,boundary:h,rootBoundary:u,altBoundary:d,padding:c}),F=I?E?yt:dt:E?xt:ut;y[T]>w[T]&&(F=En(F));var B=En(F),$=[];if(o&&$.push(L[O]<=0),a&&$.push(L[F]<=0,L[B]<=0),$.every(function(U){return U})){C=P,S=!1;break}k.set(P,$)}if(S)for(var N=g?3:1,tt=function(X){var q=_.find(function(At){var H=k.get(At);if(H)return H.slice(0,X).every(function(et){return et})});if(q)return C=q,"break"},Q=N;Q>0;Q--){var nt=tt(Q);if(nt==="break")break}t.placement!==C&&(t.modifiersData[i]._skip=!0,t.placement=C,t.reset=!0)}}const tc={name:"flip",enabled:!0,phase:"main",fn:Ql,requiresIfExists:["offset"],data:{_skip:!1}};function Cs(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Ps(e){return[ut,yt,xt,dt].some(function(t){return e[t]>=0})}function ec(e){var t=e.state,n=e.name,i=t.rects.reference,s=t.rects.popper,o=t.modifiersData.preventOverflow,r=qe(t,{elementContext:"reference"}),a=qe(t,{altBoundary:!0}),l=Cs(r,i),c=Cs(a,s,o),h=Ps(l),u=Ps(c);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":u})}const nc={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:ec};function ic(e,t,n){var i=Pt(e),s=[dt,ut].indexOf(i)>=0?-1:1,o=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[dt,yt].indexOf(i)>=0?{x:a,y:r}:{x:r,y:a}}function sc(e){var t=e.state,n=e.options,i=e.name,s=n.offset,o=s===void 0?[0,0]:s,r=gr.reduce(function(h,u){return h[u]=ic(u,t.rects,o),h},{}),a=r[t.placement],l=a.x,c=a.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=c),t.modifiersData[i]=r}const oc={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:sc};function rc(e){var t=e.state,n=e.name;t.modifiersData[n]=wr({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}const ac={name:"popperOffsets",enabled:!0,phase:"read",fn:rc,data:{}};function lc(e){return e==="x"?"y":"x"}function cc(e){var t=e.state,n=e.options,i=e.name,s=n.mainAxis,o=s===void 0?!0:s,r=n.altAxis,a=r===void 0?!1:r,l=n.boundary,c=n.rootBoundary,h=n.altBoundary,u=n.padding,d=n.tether,f=d===void 0?!0:d,g=n.tetherOffset,m=g===void 0?0:g,p=qe(t,{boundary:l,rootBoundary:c,padding:u,altBoundary:h}),b=Pt(t.placement),x=Me(t.placement),v=!x,_=Ii(b),y=lc(_),w=t.modifiersData.popperOffsets,k=t.rects.reference,S=t.rects.popper,C=typeof m=="function"?m(Object.assign({},t.rects,{placement:t.placement})):m,D=typeof C=="number"?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),P=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,O={x:0,y:0};if(w){if(o){var E,I=_==="y"?ut:dt,T=_==="y"?xt:yt,L=_==="y"?"height":"width",F=w[_],B=F+p[I],$=F-p[T],N=f?-S[L]/2:0,tt=x===we?k[L]:S[L],Q=x===we?-S[L]:-k[L],nt=t.elements.arrow,U=f&&nt?Fi(nt):{width:0,height:0},X=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:xr(),q=X[I],At=X[T],H=He(0,k[L],U[L]),et=v?k[L]/2-N-H-q-D.mainAxis:tt-H-q-D.mainAxis,Ee=v?-k[L]/2+N+H+At+D.mainAxis:Q+H+At+D.mainAxis,zt=t.elements.arrow&&rn(t.elements.arrow),Jt=zt?_==="y"?zt.clientTop||0:zt.clientLeft||0:0,Zt=(E=P==null?void 0:P[_])!=null?E:0,lt=F+et-Zt-Jt,Ia=F+Ee-Zt,ls=He(f?Ln(B,lt):B,F,f?ce($,Ia):$);w[_]=ls,O[_]=ls-F}if(a){var cs,ja=_==="x"?ut:dt,$a=_==="x"?xt:yt,Qt=w[y],hn=y==="y"?"height":"width",hs=Qt+p[ja],us=Qt-p[$a],Gn=[ut,dt].indexOf(b)!==-1,ds=(cs=P==null?void 0:P[y])!=null?cs:0,fs=Gn?hs:Qt-k[hn]-S[hn]-ds+D.altAxis,ps=Gn?Qt+k[hn]+S[hn]-ds-D.altAxis:us,gs=f&&Gn?Rl(fs,Qt,ps):He(f?fs:hs,Qt,f?ps:us);w[y]=gs,O[y]=gs-Qt}t.modifiersData[i]=O}}const hc={name:"preventOverflow",enabled:!0,phase:"main",fn:cc,requiresIfExists:["offset"]};function uc(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function dc(e){return e===gt(e)||!Ot(e)?ji(e):uc(e)}function fc(e){var t=e.getBoundingClientRect(),n=Se(t.width)/e.offsetWidth||1,i=Se(t.height)/e.offsetHeight||1;return n!==1||i!==1}function pc(e,t,n){n===void 0&&(n=!1);var i=Ot(t),s=Ot(t)&&fc(t),o=Gt(t),r=ke(e,s,n),a={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(i||!i&&!n)&&((Ut(t)!=="body"||zi(o))&&(a=dc(t)),Ot(t)?(l=ke(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):o&&(l.x=$i(o))),{x:r.left+a.scrollLeft-l.x,y:r.top+a.scrollTop-l.y,width:r.width,height:r.height}}function gc(e){var t=new Map,n=new Set,i=[];e.forEach(function(o){t.set(o.name,o)});function s(o){n.add(o.name);var r=[].concat(o.requires||[],o.requiresIfExists||[]);r.forEach(function(a){if(!n.has(a)){var l=t.get(a);l&&s(l)}}),i.push(o)}return e.forEach(function(o){n.has(o.name)||s(o)}),i}function mc(e){var t=gc(e);return Al.reduce(function(n,i){return n.concat(t.filter(function(s){return s.phase===i}))},[])}function bc(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function xc(e){var t=e.reduce(function(n,i){var s=n[i.name];return n[i.name]=s?Object.assign({},s,i,{options:Object.assign({},s.options,i.options),data:Object.assign({},s.data,i.data)}):i,n},{});return Object.keys(t).map(function(n){return t[n]})}var Os={placement:"bottom",modifiers:[],strategy:"absolute"};function Ds(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some(function(i){return!(i&&typeof i.getBoundingClientRect=="function")})}function yc(e){e===void 0&&(e={});var t=e,n=t.defaultModifiers,i=n===void 0?[]:n,s=t.defaultOptions,o=s===void 0?Os:s;return function(a,l,c){c===void 0&&(c=o);var h={placement:"bottom",orderedModifiers:[],options:Object.assign({},Os,o),modifiersData:{},elements:{reference:a,popper:l},attributes:{},styles:{}},u=[],d=!1,f={state:h,setOptions:function(b){var x=typeof b=="function"?b(h.options):b;m(),h.options=Object.assign({},o,h.options,x),h.scrollParents={reference:de(a)?We(a):a.contextElement?We(a.contextElement):[],popper:We(l)};var v=mc(xc([].concat(i,h.options.modifiers)));return h.orderedModifiers=v.filter(function(_){return _.enabled}),g(),f.update()},forceUpdate:function(){if(!d){var b=h.elements,x=b.reference,v=b.popper;if(Ds(x,v)){h.rects={reference:pc(x,rn(v),h.options.strategy==="fixed"),popper:Fi(v)},h.reset=!1,h.placement=h.options.placement,h.orderedModifiers.forEach(function(D){return h.modifiersData[D.name]=Object.assign({},D.data)});for(var _=0;_<h.orderedModifiers.length;_++){if(h.reset===!0){h.reset=!1,_=-1;continue}var y=h.orderedModifiers[_],w=y.fn,k=y.options,S=k===void 0?{}:k,C=y.name;typeof w=="function"&&(h=w({state:h,options:S,name:C,instance:f})||h)}}}},update:bc(function(){return new Promise(function(p){f.forceUpdate(),p(h)})}),destroy:function(){m(),d=!0}};if(!Ds(a,l))return f;f.setOptions(c).then(function(p){!d&&c.onFirstUpdate&&c.onFirstUpdate(p)});function g(){h.orderedModifiers.forEach(function(p){var b=p.name,x=p.options,v=x===void 0?{}:x,_=p.effect;if(typeof _=="function"){var y=_({state:h,name:b,instance:f,options:v}),w=function(){};u.push(y||w)}})}function m(){u.forEach(function(p){return p()}),u=[]}return f}}const vc=yc({defaultModifiers:[nc,ac,Bl,Wl,oc,tc,hc,jl]}),_c=["enabled","placement","strategy","modifiers"];function wc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}const Sc={name:"applyStyles",enabled:!1,phase:"afterWrite",fn:()=>{}},kc={name:"ariaDescribedBy",enabled:!0,phase:"afterWrite",effect:({state:e})=>()=>{const{reference:t,popper:n}=e.elements;if("removeAttribute"in t){const i=(t.getAttribute("aria-describedby")||"").split(",").filter(s=>s.trim()!==n.id);i.length?t.setAttribute("aria-describedby",i.join(",")):t.removeAttribute("aria-describedby")}},fn:({state:e})=>{var t;const{popper:n,reference:i}=e.elements,s=(t=n.getAttribute("role"))==null?void 0:t.toLowerCase();if(n.id&&s==="tooltip"&&"setAttribute"in i){const o=i.getAttribute("aria-describedby");if(o&&o.split(",").indexOf(n.id)!==-1)return;i.setAttribute("aria-describedby",o?`${o},${n.id}`:n.id)}}},Mc=[];function Cc(e,t,n={}){let{enabled:i=!0,placement:s="bottom",strategy:o="absolute",modifiers:r=Mc}=n,a=wc(n,_c);const l=A.useRef(r),c=A.useRef(),h=A.useCallback(()=>{var p;(p=c.current)==null||p.update()},[]),u=A.useCallback(()=>{var p;(p=c.current)==null||p.forceUpdate()},[]),[d,f]=xl(A.useState({placement:s,update:h,forceUpdate:u,attributes:{},styles:{popper:{},arrow:{}}})),g=A.useMemo(()=>({name:"updateStateModifier",enabled:!0,phase:"write",requires:["computeStyles"],fn:({state:p})=>{const b={},x={};Object.keys(p.elements).forEach(v=>{b[v]=p.styles[v],x[v]=p.attributes[v]}),f({state:p,styles:b,attributes:x,update:h,forceUpdate:u,placement:p.placement})}}),[h,u,f]),m=A.useMemo(()=>(Be(l.current,r)||(l.current=r),l.current),[r]);return A.useEffect(()=>{!c.current||!i||c.current.setOptions({placement:s,strategy:o,modifiers:[...m,g,Sc]})},[o,s,g,i,m]),A.useEffect(()=>{if(!(!i||e==null||t==null))return c.current=vc(e,t,Object.assign({},a,{placement:s,strategy:o,modifiers:[...m,kc,g]})),()=>{c.current!=null&&(c.current.destroy(),c.current=void 0,f(p=>Object.assign({},p,{attributes:{},styles:{popper:{}}})))}},[i,e,t]),d}const As=()=>{};function Pc(e){return e.button===0}function Oc(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}const Qn=e=>e&&("current"in e?e.current:e),Es={click:"mousedown",mouseup:"mousedown",pointerup:"pointerdown"};function Dc(e,t=As,{disabled:n,clickTrigger:i="click"}={}){const s=A.useRef(!1),o=A.useRef(!1),r=A.useCallback(c=>{const h=Qn(e);Wa(!!h,"ClickOutside captured a close event but does not have a ref to compare it to. useClickOutside(), should be passed a ref that resolves to a DOM node"),s.current=!h||Oc(c)||!Pc(c)||!!ms(h,c.target)||o.current,o.current=!1},[e]),a=Vt(c=>{const h=Qn(e);h&&ms(h,c.target)?o.current=!0:o.current=!1}),l=Vt(c=>{s.current||t(c)});A.useEffect(()=>{var c,h;if(n||e==null)return;const u=Va(Qn(e)),d=u.defaultView||window;let f=(c=d.event)!=null?c:(h=d.parent)==null?void 0:h.event,g=null;Es[i]&&(g=un(u,Es[i],a,!0));const m=un(u,i,r,!0),p=un(u,i,x=>{if(x===f){f=void 0;return}l(x)});let b=[];return"ontouchstart"in u.documentElement&&(b=[].slice.call(u.body.children).map(x=>un(x,"mousemove",As))),()=>{g==null||g(),m(),p(),b.forEach(x=>x())}},[e,n,i,r,a,l])}function Ac(e){const t={};return Array.isArray(e)?(e==null||e.forEach(n=>{t[n.name]=n}),t):e||t}function Ec(e={}){return Array.isArray(e)?e:Object.keys(e).map(t=>(e[t].name=t,e[t]))}function Tc({enabled:e,enableEvents:t,placement:n,flip:i,offset:s,fixed:o,containerPadding:r,arrowElement:a,popperConfig:l={}}){var c,h,u,d,f;const g=Ac(l.modifiers);return Object.assign({},l,{placement:n,enabled:e,strategy:o?"fixed":l.strategy,modifiers:Ec(Object.assign({},g,{eventListeners:{enabled:t,options:(c=g.eventListeners)==null?void 0:c.options},preventOverflow:Object.assign({},g.preventOverflow,{options:r?Object.assign({padding:r},(h=g.preventOverflow)==null?void 0:h.options):(u=g.preventOverflow)==null?void 0:u.options}),offset:{options:Object.assign({offset:s},(d=g.offset)==null?void 0:d.options)},arrow:Object.assign({},g.arrow,{enabled:!!a,options:Object.assign({},(f=g.arrow)==null?void 0:f.options,{element:a})}),flip:Object.assign({enabled:!!i},g.flip)}))})}const Rc=["children","usePopper"];function Lc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}const Fc=()=>{};function Sr(e={}){const t=A.useContext(Yn),[n,i]=ul(),s=A.useRef(!1),{flip:o,offset:r,rootCloseEvent:a,fixed:l=!1,placement:c,popperConfig:h={},enableEventListeners:u=!0,usePopper:d=!!t}=e,f=(t==null?void 0:t.show)==null?!!e.show:t.show;f&&!s.current&&(s.current=!0);const g=w=>{t==null||t.toggle(!1,w)},{placement:m,setMenu:p,menuElement:b,toggleElement:x}=t||{},v=Cc(x,b,Tc({placement:c||m||"bottom-start",enabled:d,enableEvents:u??f,offset:r,flip:o,fixed:l,arrowElement:n,popperConfig:h})),_=Object.assign({ref:p||Fc,"aria-labelledby":x==null?void 0:x.id},v.attributes.popper,{style:v.styles.popper}),y={show:f,placement:m,hasShown:s.current,toggle:t==null?void 0:t.toggle,popper:d?v:null,arrowProps:d?Object.assign({ref:i},v.attributes.arrow,{style:v.styles.arrow}):{}};return Dc(b,g,{clickTrigger:a,disabled:!f}),[_,y]}function kr(e){let{children:t,usePopper:n=!0}=e,i=Lc(e,Rc);const[s,o]=Sr(Object.assign({},i,{usePopper:n}));return M.jsx(M.Fragment,{children:t(s,o)})}kr.displayName="DropdownMenu";const Ni={prefix:String(Math.round(Math.random()*1e10)),current:0},Mr=ue.createContext(Ni),Ic=ue.createContext(!1);let jc=!!(typeof window<"u"&&window.document&&window.document.createElement),ti=new WeakMap;function $c(e=!1){let t=A.useContext(Mr),n=A.useRef(null);if(n.current===null&&!e){var i,s;let o=(s=ue.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED)===null||s===void 0||(i=s.ReactCurrentOwner)===null||i===void 0?void 0:i.current;if(o){let r=ti.get(o);r==null?ti.set(o,{id:t.current,state:o.memoizedState}):o.memoizedState!==r.state&&(t.current=r.id,ti.delete(o))}n.current=++t.current}return n.current}function zc(e){let t=A.useContext(Mr);t===Ni&&!jc&&console.warn("When server rendering, you must wrap your application in an <SSRProvider> to ensure consistent ids are generated between the client and server.");let n=$c(!!e),i=`react-aria${t.prefix}`;return e||`${i}-${n}`}function Nc(e){let t=ue.useId(),[n]=A.useState(Yc()),i=n?"react-aria":`react-aria${Ni.prefix}`;return e||`${i}-${t}`}const Bc=typeof ue.useId=="function"?Nc:zc;function Hc(){return!1}function Wc(){return!0}function Vc(e){return()=>{}}function Yc(){return typeof ue.useSyncExternalStore=="function"?ue.useSyncExternalStore(Vc,Hc,Wc):A.useContext(Ic)}const Cr=e=>{var t;return((t=e.getAttribute("role"))==null?void 0:t.toLowerCase())==="menu"},Ts=()=>{};function Pr(){const e=Bc(),{show:t=!1,toggle:n=Ts,setToggle:i,menuElement:s}=A.useContext(Yn)||{},o=A.useCallback(a=>{n(!t,a)},[t,n]),r={id:e,ref:i||Ts,onClick:o,"aria-expanded":!!t};return s&&Cr(s)&&(r["aria-haspopup"]=!0),[r,{show:t,toggle:n}]}function Or({children:e}){const[t,n]=Pr();return M.jsx(M.Fragment,{children:e(t,n)})}Or.displayName="DropdownToggle";const _i=A.createContext(null),Rs=(e,t=null)=>e!=null?String(e):t||null,Dr=A.createContext(null);Dr.displayName="NavContext";const Uc=["eventKey","disabled","onClick","active","as"];function Xc(e,t){if(e==null)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;n[i]=e[i]}return n}function Ar({key:e,href:t,active:n,disabled:i,onClick:s}){const o=A.useContext(_i),r=A.useContext(Dr),{activeKey:a}=r||{},l=Rs(e,t),c=n==null&&e!=null?Rs(a)===l:n;return[{onClick:Vt(u=>{i||(s==null||s(u),o&&!u.isPropagationStopped()&&o(l,u))}),"aria-disabled":i||void 0,"aria-selected":c,[ar("dropdown-item")]:""},{isActive:c}]}const Er=A.forwardRef((e,t)=>{let{eventKey:n,disabled:i,onClick:s,active:o,as:r=Ya}=e,a=Xc(e,Uc);const[l]=Ar({key:n,href:a.href,disabled:i,onClick:s,active:o});return M.jsx(r,Object.assign({},a,{ref:t},l))});Er.displayName="DropdownItem";function Ls(){const e=bl(),t=A.useRef(null),n=A.useCallback(i=>{t.current=i,e()},[e]);return[t,n]}function an({defaultShow:e,show:t,onSelect:n,onToggle:i,itemSelector:s=`* [${ar("dropdown-item")}]`,focusFirstItemOnShow:o,placement:r="bottom-start",children:a}){const l=Ua(),[c,h]=ml(t,e,i),[u,d]=Ls(),f=u.current,[g,m]=Ls(),p=g.current,b=Xa(c),x=A.useRef(null),v=A.useRef(!1),_=A.useContext(_i),y=A.useCallback((P,O,E=O==null?void 0:O.type)=>{h(P,{originalEvent:O,source:E})},[h]),w=Vt((P,O)=>{n==null||n(P,O),y(!1,O,"select"),O.isPropagationStopped()||_==null||_(P,O)}),k=A.useMemo(()=>({toggle:y,placement:r,show:c,menuElement:f,toggleElement:p,setMenu:d,setToggle:m}),[y,r,c,f,p,d,m]);f&&b&&!c&&(v.current=f.contains(f.ownerDocument.activeElement));const S=Vt(()=>{p&&p.focus&&p.focus()}),C=Vt(()=>{const P=x.current;let O=o;if(O==null&&(O=u.current&&Cr(u.current)?"keyboard":!1),O===!1||O==="keyboard"&&!/^key.+$/.test(P))return;const E=bs(u.current,s)[0];E&&E.focus&&E.focus()});A.useEffect(()=>{c?C():v.current&&(v.current=!1,S())},[c,v,S,C]),A.useEffect(()=>{x.current=null});const D=(P,O)=>{if(!u.current)return null;const E=bs(u.current,s);let I=E.indexOf(P)+O;return I=Math.max(0,Math.min(I,E.length)),E[I]};return dl(A.useCallback(()=>l.document,[l]),"keydown",P=>{var O,E;const{key:I}=P,T=P.target,L=(O=u.current)==null?void 0:O.contains(T),F=(E=g.current)==null?void 0:E.contains(T);if(/input|textarea/i.test(T.tagName)&&(I===" "||I!=="Escape"&&L||I==="Escape"&&T.type==="search")||!L&&!F||I==="Tab"&&(!u.current||!c))return;x.current=P.type;const $={originalEvent:P,source:P.type};switch(I){case"ArrowUp":{const N=D(T,-1);N&&N.focus&&N.focus(),P.preventDefault();return}case"ArrowDown":if(P.preventDefault(),!c)h(!0,$);else{const N=D(T,1);N&&N.focus&&N.focus()}return;case"Tab":Ka(T.ownerDocument,"keyup",N=>{var tt;(N.key==="Tab"&&!N.target||!((tt=u.current)!=null&&tt.contains(N.target)))&&h(!1,$)},{once:!0});break;case"Escape":I==="Escape"&&(P.preventDefault(),P.stopPropagation()),h(!1,$);break}}),M.jsx(_i.Provider,{value:w,children:M.jsx(Yn.Provider,{value:k,children:a})})}an.displayName="Dropdown";an.Menu=kr;an.Toggle=Or;an.Item=Er;const Bi=A.createContext({});Bi.displayName="DropdownContext";const Tr=A.forwardRef(({className:e,bsPrefix:t,as:n="hr",role:i="separator",...s},o)=>(t=Kt(t,"dropdown-divider"),M.jsx(n,{ref:o,className:qt(e,t),role:i,...s})));Tr.displayName="DropdownDivider";const Rr=A.forwardRef(({className:e,bsPrefix:t,as:n="div",role:i="heading",...s},o)=>(t=Kt(t,"dropdown-header"),M.jsx(n,{ref:o,className:qt(e,t),role:i,...s})));Rr.displayName="DropdownHeader";const Lr=A.forwardRef(({bsPrefix:e,className:t,eventKey:n,disabled:i=!1,onClick:s,active:o,as:r=fr,...a},l)=>{const c=Kt(e,"dropdown-item"),[h,u]=Ar({key:n,href:a.href,disabled:i,onClick:s,active:o});return M.jsx(r,{...a,...h,ref:l,className:qt(t,c,u.isActive&&"active",i&&"disabled")})});Lr.displayName="DropdownItem";const Fr=A.forwardRef(({className:e,bsPrefix:t,as:n="span",...i},s)=>(t=Kt(t,"dropdown-item-text"),M.jsx(n,{ref:s,className:qt(e,t),...i})));Fr.displayName="DropdownItemText";const Kc=typeof global<"u"&&global.navigator&&global.navigator.product==="ReactNative",qc=typeof document<"u",Gc=qc||Kc?A.useLayoutEffect:A.useEffect,Ir=A.createContext(null);Ir.displayName="NavbarContext";function jr(e,t){return e}function $r(e,t,n){const i=n?"top-end":"top-start",s=n?"top-start":"top-end",o=n?"bottom-end":"bottom-start",r=n?"bottom-start":"bottom-end",a=n?"right-start":"left-start",l=n?"right-end":"left-end",c=n?"left-start":"right-start",h=n?"left-end":"right-end";let u=e?r:o;return t==="up"?u=e?s:i:t==="end"?u=e?h:c:t==="start"?u=e?l:a:t==="down-centered"?u="bottom":t==="up-centered"&&(u="top"),u}const zr=A.forwardRef(({bsPrefix:e,className:t,align:n,rootCloseEvent:i,flip:s=!0,show:o,renderOnMount:r,as:a="div",popperConfig:l,variant:c,...h},u)=>{let d=!1;const f=A.useContext(Ir),g=Kt(e,"dropdown-menu"),{align:m,drop:p,isRTL:b}=A.useContext(Bi);n=n||m;const x=A.useContext(ur),v=[];if(n)if(typeof n=="object"){const P=Object.keys(n);if(P.length){const O=P[0],E=n[O];d=E==="start",v.push(`${g}-${O}-${E}`)}}else n==="end"&&(d=!0);const _=$r(d,p,b),[y,{hasShown:w,popper:k,show:S,toggle:C}]=Sr({flip:s,rootCloseEvent:i,show:o,usePopper:!f&&v.length===0,offset:[0,2],popperConfig:l,placement:_});if(y.ref=lr(jr(u),y.ref),Gc(()=>{S&&(k==null||k.update())},[S]),!w&&!r&&!x)return null;typeof a!="string"&&(y.show=S,y.close=()=>C==null?void 0:C(!1),y.align=n);let D=h.style;return k!=null&&k.placement&&(D={...h.style,...y.style},h["x-placement"]=k.placement),M.jsx(a,{...h,...y,style:D,...(v.length||f)&&{"data-bs-popper":"static"},className:qt(t,g,S&&"show",d&&`${g}-end`,c&&`${g}-${c}`,...v)})});zr.displayName="DropdownMenu";const Nr=A.forwardRef(({bsPrefix:e,split:t,className:n,childBsPrefix:i,as:s=Ft,...o},r)=>{const a=Kt(e,"dropdown-toggle"),l=A.useContext(Yn);i!==void 0&&(o.bsPrefix=i);const[c]=Pr();return c.ref=lr(c.ref,jr(r)),M.jsx(s,{className:qt(n,a,t&&`${a}-split`,(l==null?void 0:l.show)&&"show"),...c,...o})});Nr.displayName="DropdownToggle";const Br=A.forwardRef((e,t)=>{const{bsPrefix:n,drop:i="down",show:s,className:o,align:r="start",onSelect:a,onToggle:l,focusFirstItemOnShow:c,as:h="div",navbar:u,autoClose:d=!0,...f}=hl(e,{show:"onToggle"}),g=A.useContext(ur),m=Kt(n,"dropdown"),p=qa(),b=k=>d===!1?k==="click":d==="inside"?k!=="rootClose":d==="outside"?k!=="select":!0,x=Ga((k,S)=>{var C;!((C=S.originalEvent)==null||(C=C.target)==null)&&C.classList.contains("dropdown-toggle")&&S.source==="mousedown"||(S.originalEvent.currentTarget===document&&(S.source!=="keydown"||S.originalEvent.key==="Escape")&&(S.source="rootClose"),b(S.source)&&(l==null||l(k,S)))}),_=$r(r==="end",i,p),y=A.useMemo(()=>({align:r,drop:i,isRTL:p}),[r,i,p]),w={down:m,"down-centered":`${m}-center`,up:"dropup","up-centered":"dropup-center dropup",end:"dropend",start:"dropstart"};return M.jsx(Bi.Provider,{value:y,children:M.jsx(an,{placement:_,show:s,onSelect:a,onToggle:x,focusFirstItemOnShow:c,itemSelector:`.${m}-item:not(.disabled):not(:disabled)`,children:g?f.children:M.jsx(h,{...f,ref:t,className:qt(o,s&&"show",w[i])})})})});Br.displayName="Dropdown";const ei=Object.assign(Br,{Toggle:Nr,Menu:zr,Item:Lr,ItemText:Fr,Divider:Tr,Header:Rr});/*!
  * @kurkle/color v0.3.2
  * https://github.com/kurkle/color#readme
  * (c) 2023 Jukka Kurkela