diff --git a/frontend_vue/dist/assets/404View-CCwrLonF.js b/frontend_vue/dist/assets/404View-CCwrLonF.js new file mode 100644 index 000000000..266e4149a --- /dev/null +++ b/frontend_vue/dist/assets/404View-CCwrLonF.js @@ -0,0 +1 @@ +import{d as t,a as s,c as o,f as e,u as a,g as c}from"./index-Brb5oFbg.js";const n={class:"flex flex-col items-center justify-center align-middle"},r=e("h2",{class:"text-xl text-grey-500"}," Oops! The page you're looking for can't be found. ",-1),l=["src"],i=e("p",{class:"text-center text-grey-400"}," This might be because the URL is incorrect, or the page has been moved or deleted. ",-1),d=e("p",{class:"text-center text-grey-400"}," Please check the URL or go back to the homepage and try again. ",-1),p=t({__name:"404View",setup(_){return(g,h)=>(s(),o("div",n,[r,e("img",{src:a(c)("token_icons/default.png"),alt:"Page Not Found",class:"w-[50%] max-w-[200px] my-32 not-sr-only"},null,8,l),i,d]))}});export{p as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-4yPYHrYy.js b/frontend_vue/dist/assets/ActivatedToken-4yPYHrYy.js new file mode 100644 index 000000000..0cf217ef7 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-4yPYHrYy.js @@ -0,0 +1 @@ +import{d as s,r,a as c,c as i,i as t,F as m,f as _,C as p}from"./index-Brb5oFbg.js";import{_ as u}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-D8MsqffU.js";const d=_("p",{class:"mt-24 text-sm"}," You'll get an alert whenever this document is opened with Acrobat Reader, regardless of the user's security preferences in Reader. ",-1),g=s({__name:"ActivatedToken",props:{tokenData:{}},setup(a){const e=a,n=r({token:e.tokenData.token||"",auth:e.tokenData.auth_token||""});return(l,f)=>{const o=p;return c(),i(m,null,[t(u,{"token-data":n.value},null,8,["token-data"]),d,t(o,{class:"mt-24",variant:"info",message:"You can rename the document without affecting its operation."})],64)}}});export{g as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-B4Mkfx9j.js b/frontend_vue/dist/assets/ActivatedToken-B4Mkfx9j.js new file mode 100644 index 000000000..fb72b5619 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-B4Mkfx9j.js @@ -0,0 +1 @@ +import{d as s,r as c,a as r,c as i,i as t,F as m,f as _,C as p}from"./index-Brb5oFbg.js";import{_ as f}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-Bg5sQxn8.js";const l=_("p",{class:"mt-24 text-sm"}," You'll get an alert whenever this document is opened in Microsoft Office, on Windows or macOS. ",-1),g=s({__name:"ActivatedToken",props:{tokenData:{}},setup(a){const e=a,o=c({token:e.tokenData.token||"",auth:e.tokenData.auth_token||""});return(u,d)=>{const n=p;return r(),i(m,null,[t(f,{"token-data":o.value},null,8,["token-data"]),l,t(n,{class:"mt-24",variant:"info",message:"You can rename the document without affecting its operation."})],64)}}});export{g as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-B4s9KHEu.js b/frontend_vue/dist/assets/ActivatedToken-B4s9KHEu.js new file mode 100644 index 000000000..b7d1f60cc --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-B4s9KHEu.js @@ -0,0 +1 @@ +import{_ as o}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-Cs1Bqr2_.js";import{d as n,r as s,a as r,c,i as l,F as m,f as p}from"./index-Brb5oFbg.js";const u=p("p",{class:"mt-24 text-sm text-center"}," You'll get an alert when someone tries to use your Kubeconfig. ",-1),f=n({__name:"ActivatedToken",props:{tokenData:{}},setup(t){const e=t,a=s({token:e.tokenData.token||"",auth:e.tokenData.auth_token||""});return(k,_)=>(r(),c(m,null,[l(o,{"token-data":a.value},null,8,["token-data"]),u],64))}});export{f as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-BBYHCKe1.js b/frontend_vue/dist/assets/ActivatedToken-BBYHCKe1.js new file mode 100644 index 000000000..80fded0a6 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-BBYHCKe1.js @@ -0,0 +1 @@ +import{d as _,r as c,a as d,c as f,i as m,j as p,h as k,x as h,X as D,F as x,f as v}from"./index-Brb5oFbg.js";const w={class:"flex justify-center"},g=_({__name:"TokenDisplay",props:{tokenData:{}},setup(n){var i,r;const e=n,t=c(`${(i=e.tokenData)==null?void 0:i.file_name}`),a=c((r=e.tokenData)==null?void 0:r.file_contents);function l(){var o,s;a.value=`${(o=e.tokenData)==null?void 0:o.file_name}`,t.value=(s=e.tokenData)==null?void 0:s.file_contents}return(o,s)=>{const u=D;return d(),f("div",w,[m(u,{class:"mt-16",href:t.value,download:a.value,onClick:l},{default:p(()=>[k("Download "+h(e.tokenData.file_name),1)]),_:1},8,["href","download"])])}}}),y=v("p",{class:"mt-16 text-sm"}," Remember, this token is triggered whenever the binary file is executed. For EXEs, this means direct execution and for DLLs, it means they were loaded. ",-1),C=_({__name:"ActivatedToken",props:{tokenData:{}},setup(n){const e=n,t=c({file_name:e.tokenData.file_name||"",file_contents:e.tokenData.file_contents||""});return(a,l)=>(d(),f(x,null,[m(g,{"token-data":t.value},null,8,["token-data"]),y],64))}});export{C as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-Bi6fdwwf.js b/frontend_vue/dist/assets/ActivatedToken-Bi6fdwwf.js new file mode 100644 index 000000000..7dac01dd3 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-Bi6fdwwf.js @@ -0,0 +1 @@ +import{d as i,r as c,a as r,c as m,i as t,F as _,f as a,C as l}from"./index-Brb5oFbg.js";import{_ as p}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-CeGCfzYM.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const d=a("p",{class:"mt-16 text-sm"}," This token is triggered when someone uses this Service Principal Login to access Azure programmatically (through the API). ",-1),h=a("p",{class:"mt-16 text-sm"}," The Service Principal Login is unique. i.e. There is no chance of somebody guessing these credentials. ",-1),v=i({__name:"ActivatedToken",props:{tokenData:{}},setup(s){const e=s,n=c({token:e.tokenData.token||"",auth:e.tokenData.auth_token||"",appId:e.tokenData.app_id||"",displayName:e.tokenData.cert_name||"",fileWithCertAndPrivateKey:e.tokenData.cert_file_name||"",tenant:e.tokenData.tenant_id||""});return(k,f)=>{const o=l;return r(),m(_,null,[t(p,{"token-data":n.value},null,8,["token-data"]),d,h,t(o,{class:"mt-24",variant:"info",message:"If this token fires, it is a clear indication that this set of keys has 'leaked'"})],64)}}});export{v as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-Blt0L3ZE.js b/frontend_vue/dist/assets/ActivatedToken-Blt0L3ZE.js new file mode 100644 index 000000000..bebad1d50 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-Blt0L3ZE.js @@ -0,0 +1 @@ +import{d as i,r as l,a as p,c as _,i as s,f as e,u as a,g as o,F as d,C as m}from"./index-Brb5oFbg.js";import{_ as g}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-D5HKFtCe.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const h=e("p",{class:"mt-24 text-sm"}," Whenever someone tries to use this WireGuard VPN config to see what access it gets them, an alert is triggered. ",-1),f=e("p",{class:"mt-24 text-center"},"Don't have the WireGuard app?",-1),u={class:"flex flex-row items-center justify-center gap-16 mt-16"},k={href:"https://apps.apple.com/us/app/wireguard/id1441195209?itsct=apps_box_badge&itscg=30200",target:"_blank"},w=["src"],v={href:"https://play.google.com/store/apps/details?id=com.wireguard.android",target:"_blank"},x=["src"],B=i({__name:"ActivatedToken",props:{tokenData:{}},setup(r){const t=r,n=l({qr_code:t.tokenData.qr_code||"",wg_conf:t.tokenData.wg_conf||""});return(b,D)=>{const c=m;return p(),_(d,null,[s(g,{"token-data":n.value},null,8,["token-data"]),h,s(c,{class:"mt-24",variant:"info",message:"This WireGuard config can be installed anywhere WireGuard is used, such as on phones, laptops and servers."}),f,e("div",u,[e("a",k,[e("img",{src:a(o)("app-store.svg"),alt:"Download form Apple store",class:"h-[3rem]"},null,8,w)]),e("a",v,[e("img",{src:a(o)("google-play.png"),alt:"Download form Google Play store",class:"h-[3rem]"},null,8,x)])])],64)}}});export{B as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-CFGnHab-.js b/frontend_vue/dist/assets/ActivatedToken-CFGnHab-.js new file mode 100644 index 000000000..5fa3d5010 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-CFGnHab-.js @@ -0,0 +1,4 @@ +import{_ as i}from"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";import{d as l,r as a,a as d,c as _,i as e,F as p,f as o,C as u}from"./index-Brb5oFbg.js";import{_ as g}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-C-NK5_yH.js";const h=o("p",{class:"mt-24 text-sm"}," It will automatically provide the command used, computer the command ran on, and the user invoking the command. ",-1),f=o("p",{class:"mt-16 text-sm"},null,-1),E=l({__name:"ActivatedToken",props:{tokenData:{}},setup(s){const t=s,r=a({token:t.tokenData.token||"",auth:t.tokenData.auth_token||""}),m=a(`reg import FILENAME /reg:64 +reg import FILENAME /reg:32`);return(k,v)=>{const n=u,c=i;return d(),_(p,null,[e(g,{"token-data":r.value},null,8,["token-data"]),e(n,{class:"mt-24",variant:"info",message:`Once installed (with admin permissions) you'll get an alert whenever someone + (or someone's code) runs your sensitive process.`}),h,f,e(n,{class:"mt-24",variant:"warning",message:`In order to ensure that the token fires for both 32-bit and 64-bit + executables, we suggest installing by running the following commands:`}),e(c,{class:"mt-16",lang:"bash",code:m.value},null,8,["code"])],64)}}});export{E as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-CICW2DnD.js b/frontend_vue/dist/assets/ActivatedToken-CICW2DnD.js new file mode 100644 index 000000000..233e607cd --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-CICW2DnD.js @@ -0,0 +1 @@ +import{_ as r}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-DMjNjj4u.js";import{d as o,r as _,a as l,c,i,F as m,f as a}from"./index-Brb5oFbg.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const d=a("p",{class:"mt-16 text-sm"}," When the actions are run, your Canarytoken will be triggered. ",-1),k=a("p",{class:"mt-16 text-sm"}," Since DNS is used as the underlying transport, the Source IP will be that of a DNS server, not the database server. ",-1),q=o({__name:"ActivatedToken",props:{tokenData:{}},setup(n){var t;const e=n,s=_({hostname:e.tokenData.hostname||"",sql_table_name:e.tokenData.sql_server_table_name||"",sql_trigger_name:e.tokenData.sql_server_trigger_name||"",sql_function_name:((t=e.tokenData)==null?void 0:t.sql_server_function_name)||"",sql_server_view_name:e.tokenData.sql_server_view_name||"",sql_action:e.tokenData.sql_server_sql_action||""});return(p,u)=>(l(),c(m,null,[i(r,{"token-data":s.value},null,8,["token-data"]),d,k],64))}});export{q as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-CV-tgiG4.js b/frontend_vue/dist/assets/ActivatedToken-CV-tgiG4.js new file mode 100644 index 000000000..42a4fd38d --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-CV-tgiG4.js @@ -0,0 +1 @@ +import{d as a,r as n,a as r,c,i as e,F as i,f as p,C as m}from"./index-Brb5oFbg.js";import{_ as l}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-DHFRnUtI.js";import"./BaseSwitch-CODa53C2.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const _=p("p",{class:"mt-16 text-sm"}," Use this Javascript to detect when someone has cloned a webpage. ",-1),b=a({__name:"ActivatedToken",props:{tokenData:{}},setup(t){const s=n(t.tokenData.clonedsite_js||"");return(d,f)=>{const o=m;return r(),c(i,null,[e(l,{"token-snippet":s.value},null,8,["token-snippet"]),_,e(o,{class:"mt-24",variant:"info",message:"When someone clones your site, they’ll grab this JavaScript too. When the script runs on their cloned site, it triggers an alert to let you know what’s going on."})],64)}}});export{b as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-CezdpJ_q.js b/frontend_vue/dist/assets/ActivatedToken-CezdpJ_q.js new file mode 100644 index 000000000..744f0b73b --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-CezdpJ_q.js @@ -0,0 +1 @@ +import{d as r,r as o,a as i,c as m,i as e,F as c,f as s,C as l}from"./index-Brb5oFbg.js";import{_}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-hcZN51-l.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const p=s("p",{class:"mt-16 text-sm"}," Remember, it gets triggered whenever someone requests the URL. ",-1),u=s("p",{class:"mt-24 text-sm"},null,-1),x=r({__name:"ActivatedToken",props:{tokenData:{}},setup(t){const a=o(t.tokenData.token_url);return(g,d)=>{const n=l;return i(),m(c,null,[e(_,{"token-url":a.value},null,8,["token-url"]),p,e(n,{class:"mt-24",variant:"info",message:"If the URL is requested as an image (e.g. ) then a 1x1 image is served. If the URL is surfed in a browser then a blank page is served with fingerprinting Javascript."},null,8,["message"]),u],64)}}});export{x as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-CyQsyTUl.js b/frontend_vue/dist/assets/ActivatedToken-CyQsyTUl.js new file mode 100644 index 000000000..a7236e425 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-CyQsyTUl.js @@ -0,0 +1 @@ +import{d as s,r as c,a as r,c as i,i as t,F as m,f as _,C as p}from"./index-Brb5oFbg.js";import{_ as f}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-hkXB3rmS.js";const l=_("p",{class:"mt-24 text-sm"}," You'll get an alert whenever this document is opened in Microsoft Office, on Windows or macOS. ",-1),g=s({__name:"ActivatedToken",props:{tokenData:{}},setup(a){const e=a,o=c({token:e.tokenData.token||"",auth:e.tokenData.auth_token||""});return(u,d)=>{const n=p;return r(),i(m,null,[t(f,{"token-data":o.value},null,8,["token-data"]),l,t(n,{class:"mt-24",variant:"info",message:"You can rename the document without affecting its operation."})],64)}}});export{g as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-DAW14c7_.js b/frontend_vue/dist/assets/ActivatedToken-DAW14c7_.js new file mode 100644 index 000000000..5956fefa4 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-DAW14c7_.js @@ -0,0 +1 @@ +import{d as o,r,a as i,c as m,i as e,F as c,f as s,C as l}from"./index-Brb5oFbg.js";import{_}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-gCdYewfA.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const p=s("p",{class:"mt-16 text-sm"}," Remember, it gets triggered whenever someone requests the URL. ",-1),u=s("p",{class:"mt-24 text-sm"},null,-1),b=o({__name:"ActivatedToken",props:{tokenData:{}},setup(t){const a=r(t.tokenData.token_url);return(g,d)=>{const n=l;return i(),m(c,null,[e(_,{"token-url":a.value},null,8,["token-url"]),p,e(n,{class:"mt-24",variant:"info",message:"If the URL is requested as an image (e.g. ) then your custom image is served. If the URL is surfed in a browser then a blank page is served with fingerprinting Javascript."},null,8,["message"]),u],64)}}});export{b as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-DEonZU-Y.js b/frontend_vue/dist/assets/ActivatedToken-DEonZU-Y.js new file mode 100644 index 000000000..97ccc0fb3 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-DEonZU-Y.js @@ -0,0 +1 @@ +import{d as r,r as l,a as c,c as i,i as t,f as e,h as s,j as _,F as m,_ as u}from"./index-Brb5oFbg.js";import{_ as p}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-BH3g7e6m.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const d=e("p",{class:"mt-16 text-sm"}," If the log line is consumed by a vulnerable log4j library, it will generate an alert on this token. ",-1),h=e("p",{class:"mt-16 text-sm"}," If this works, you will also obtain the hostname of the vulnerable server. ",-1),f={class:"mt-16 text-sm"},y=r({__name:"ActivatedToken",props:{tokenData:{}},setup(a){const o=l(a.tokenData.token_usage);return(g,b)=>{const n=u;return c(),i(m,null,[t(p,{"token-usage":o.value},null,8,["token-usage"]),d,h,e("p",f,[s(" You can read more on this issue at "),t(n,{href:"https://www.lunasec.io/docs/blog/log4j-zero-day/",target:"_blank"},{default:_(()=>[s("LunaSec")]),_:1})])],64)}}});export{y as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-DKyXpQNX.js b/frontend_vue/dist/assets/ActivatedToken-DKyXpQNX.js new file mode 100644 index 000000000..c238b4fc9 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-DKyXpQNX.js @@ -0,0 +1 @@ +import{d as r,r as c,a as i,c as l,i as t,F as m,f as a,C as d}from"./index-Brb5oFbg.js";import{_}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-BTNkyHX4.js";const h=a("h3",{class:"mb-16 text-lg font-semibold leading-10 text-center text-grey-800"}," How do you want to deploy it? ",-1),u=a("p",{class:"mt-16 text-sm"}," When someone clones your site, they'll load the token, which will check whether the referrer domain is expected. If not, it fires the token and you get an alert. ",-1),x=r({__name:"ActivatedToken",props:{tokenData:{}},setup(o){const e=o,n=c({token:e.tokenData.token||"",auth:e.tokenData.auth_token||"",client_id:e.tokenData.client_id||"",css:e.tokenData.css||""});return(k,f)=>{const s=d;return i(),l(m,null,[h,t(_,{"token-data":n.value},null,8,["token-data"]),u,t(s,{class:"mt-24",variant:"info",message:"Upload it as a custom branding stylesheet for your Azure Entra ID login portal (requires a P1 or P2 subscription)","text-link":"How?",href:"https://learn.microsoft.com/en-us/entra/fundamentals/how-to-customize-branding",target:"_blank"})],64)}}});export{x as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-DMosGDHf.js b/frontend_vue/dist/assets/ActivatedToken-DMosGDHf.js new file mode 100644 index 000000000..65f46dd55 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-DMosGDHf.js @@ -0,0 +1 @@ +import{d as s,r,a as c,c as _,i as t,F as m,f as i,C as l}from"./index-Brb5oFbg.js";import{_ as p}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-DzXsdPtL.js";const d=i("p",{class:"mt-24 text-sm"},null,-1),h=s({__name:"ActivatedToken",props:{tokenData:{}},setup(a){const e=a,n=r({qrcode_png:e.tokenData.qrcode_png||"",token:e.tokenData.token||"",auth:e.tokenData.auth_token||""});return(k,u)=>{const o=l;return c(),_(m,null,[t(p,{"token-data":n.value},null,8,["token-data"]),t(o,{class:"mt-24",variant:"info",message:"When someone scans the QR Code with a reader, it will trigger the URL tied to your token and fire an alert."},null,8,["message"]),d],64)}}});export{h as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-DRVEfuXj.js b/frontend_vue/dist/assets/ActivatedToken-DRVEfuXj.js new file mode 100644 index 000000000..962408717 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-DRVEfuXj.js @@ -0,0 +1 @@ +import{d as n,r,a as m,c,i as e,F as l,f as s,C as _}from"./index-Brb5oFbg.js";import{_ as p}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-dy8EYF8f.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const i=s("p",{class:"mt-16 text-sm"}," Remember, it gets triggered whenever someone performs a DNS lookup of the hostname. ",-1),u=s("p",{class:"mt-24 text-sm"},null,-1),x=n({__name:"ActivatedToken",props:{tokenData:{}},setup(t){const o=r(t.tokenData.hostname||"");return(f,h)=>{const a=_;return m(),c(l,null,[e(p,{"token-url":o.value},null,8,["token-url"]),i,e(a,{class:"mt-24",variant:"info",message:"The source IP address shown in the alert is the DNS server, not the end user."},null,8,["message"]),u],64)}}});export{x as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-D_7HIFoS.js b/frontend_vue/dist/assets/ActivatedToken-D_7HIFoS.js new file mode 100644 index 000000000..c011196c8 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-D_7HIFoS.js @@ -0,0 +1 @@ +import{_ as o}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-BZinlPhx.js";import{d as a,r,a as n,c as s,i,F as c,f as l}from"./index-Brb5oFbg.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const m=l("p",{class:"mt-16 text-sm"}," The token is similar to the Web token, however, when the link is loaded the view will be immediately redirected to the specified redirect URL. ",-1),h=a({__name:"ActivatedToken",props:{tokenData:{}},setup(e){const t=r(e.tokenData.token_url);return(d,k)=>(n(),s(c,null,[i(o,{"token-url":t.value},null,8,["token-url"]),m],64))}});export{h as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-DwxUY1wC.js b/frontend_vue/dist/assets/ActivatedToken-DwxUY1wC.js new file mode 100644 index 000000000..53cc2918d --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-DwxUY1wC.js @@ -0,0 +1 @@ +import{d as n,r as o,a as r,c as m,i as e,F as c,f as i,C as _}from"./index-Brb5oFbg.js";import{_ as l}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-abkHDS5k.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const p=i("p",{class:"mt-24 text-sm"},null,-1),v=n({__name:"ActivatedToken",props:{tokenData:{}},setup(a){const t=o(a.tokenData.unique_email||"");return(u,f)=>{const s=_;return r(),m(c,null,[e(l,{"token-data":t.value},null,8,["token-data"]),e(s,{class:"mt-24",variant:"info",message:"Remember, it gets triggered whenever someone sends an email to the address."},null,8,["message"]),p],64)}}});export{v as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-DxeVzKyp.js b/frontend_vue/dist/assets/ActivatedToken-DxeVzKyp.js new file mode 100644 index 000000000..f24902545 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-DxeVzKyp.js @@ -0,0 +1 @@ +import{_ as o}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-Blj5ejjp.js";import{d as r,r as s,a,c as n,i as c,F as i,f as l}from"./index-Brb5oFbg.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const p=l("p",{class:"mt-16 text-sm"}," The token is similar to the Fast Redirect token, however, when the link is loaded the user's browser / browser plugin information is captured. ",-1),h=r({__name:"ActivatedToken",props:{tokenData:{}},setup(e){const t=s(e.tokenData.token_url);return(u,k)=>(a(),n(i,null,[c(o,{"token-url":t.value},null,8,["token-url"]),p],64))}});export{h as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-QSp-dzQ7.js b/frontend_vue/dist/assets/ActivatedToken-QSp-dzQ7.js new file mode 100644 index 000000000..f42d3979c --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-QSp-dzQ7.js @@ -0,0 +1 @@ +import{_ as c}from"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";import{d as m,r as _,q as d,a as i,c as p,i as e,F as l,f as o,C as u}from"./index-Brb5oFbg.js";import{g as f,_ as h}from"./generateSVNToken-BUqkI90G.js";const g=o("p",{class:"mt-16 text-sm"}," Remember, it gets triggered whenever someone clones the SVN repo. ",-1),k=o("p",{class:"mt-24 text-sm"}," The source IP address shown in the alert is the DNS server, not the end user. ",-1),C=m({__name:"ActivatedToken",props:{tokenData:{}},setup(s){const t=_(s.tokenData.hostname),a=d(()=>t.value?f(t.value):"");return(x,N)=>{const n=u,r=c;return i(),p(l,null,[e(h,{"token-data":a.value},null,8,["token-data"]),g,e(n,{class:"mt-24",variant:"warning",message:"Don't forget to run the following command after you've added the token:"}),e(r,{class:"mt-16",lang:"bash",code:"svn commit"}),k],64)}}});export{C as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-VgQpMc4J.js b/frontend_vue/dist/assets/ActivatedToken-VgQpMc4J.js new file mode 100644 index 000000000..9ecb489bb --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-VgQpMc4J.js @@ -0,0 +1,4 @@ +import{d as i,r,a as l,c,i as e,F as m,f as o,C as d}from"./index-Brb5oFbg.js";import{_ as f}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-DmTb4JRU.js";const p=o("p",{class:"mt-16 text-sm"}," Unzip this file in a folder, and get notified when someone browses the folder in Windows Explorer. It will even trigger if someone is browsing the folder via a network share! ",-1),u=o("p",{class:"mt-24 text-sm"},null,-1),g=i({__name:"ActivatedToken",props:{tokenData:{}},setup(n){const t=n,a=r({token:t.tokenData.token||"",auth:t.tokenData.auth_token||""});return(_,h)=>{const s=d;return l(),c(m,null,[e(f,{"token-data":a.value},null,8,["token-data"]),p,e(s,{class:"mt-32",variant:"warning",message:`This token only works on Windows 10 systems and lower. It does + not work on Windows 11 or higher. This is because a recent group policy update to + some versions of Windows defaults to disabling functionality that this token + relies on to fire.`},null,8,["message"]),e(s,{class:"mt-24",variant:"info",message:"The alert will include the network domain and username of the browsing user, if present."},null,8,["message"]),u],64)}}});export{g as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-XrDLHJjz.js b/frontend_vue/dist/assets/ActivatedToken-XrDLHJjz.js new file mode 100644 index 000000000..2a7859682 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-XrDLHJjz.js @@ -0,0 +1 @@ +import{d as s,r,a as c,c as m,i as t,F as _,f as i,C as p}from"./index-Brb5oFbg.js";import{_ as k}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-DyqkKJq_.js";import"./BaseSwitch-CODa53C2.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const u=i("p",null,"There are two ways you can use this token:",-1),D=s({__name:"ActivatedToken",props:{tokenData:{}},setup(a){const e=a,n=r({hostname:e.tokenData.hostname||"",token:e.tokenData.token||"",auth:e.tokenData.auth_token||"",encoded:!0});return(l,d)=>{const o=p;return c(),m(_,null,[u,t(k,{"token-data":n.value},null,8,["token-data"]),t(o,{class:"mt-24",variant:"info",message:"When the MySQL statements are run, your Canarytoken will be triggered."})],64)}}});export{D as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-_RoSh9Yf.js b/frontend_vue/dist/assets/ActivatedToken-_RoSh9Yf.js new file mode 100644 index 000000000..4eb23c977 --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-_RoSh9Yf.js @@ -0,0 +1 @@ +import{d as c,r as i,a as r,c as _,i as s,F as m,f as t,C as k}from"./index-Brb5oFbg.js";import{_ as l}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-C-6vFthA.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const d=t("p",{class:"mt-16 text-sm"}," This token is triggered when someone uses this credential pair to access AWS programmatically (through the API). The key is unique. i.e. There is no chance of somebody guessing these credentials. ",-1),p=t("p",{class:"mt-24 text-sm"},null,-1),D=c({__name:"ActivatedToken",props:{tokenData:{}},setup(a){const e=a,o=i({aws_access_key_id:e.tokenData.aws_access_key_id||"",aws_secret_access_key:e.tokenData.aws_secret_access_key||"",output:e.tokenData.output||"",region:e.tokenData.region||""});return(h,u)=>{const n=k;return r(),_(m,null,[s(l,{"token-data":o.value},null,8,["token-data"]),d,s(n,{class:"mt-24",variant:"info",message:"If this token fires, it is a clear indication that this set of keys has 'leaked'"}),p],64)}}});export{D as default}; diff --git a/frontend_vue/dist/assets/ActivatedToken-lHNu_BrF.js b/frontend_vue/dist/assets/ActivatedToken-lHNu_BrF.js new file mode 100644 index 000000000..ff16fab1a --- /dev/null +++ b/frontend_vue/dist/assets/ActivatedToken-lHNu_BrF.js @@ -0,0 +1 @@ +import{_ as s}from"./TokenDisplay.vue_vue_type_script_setup_true_lang-dsPbO_WY.js";import{d as n,r as a,a as c,c as r,i as p,F as i,f as e}from"./index-Brb5oFbg.js";import"./BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js";const l=e("p",{class:"mt-16 text-sm"}," Use this CSS to detect when someone has cloned a webpage. ",-1),m=e("p",{class:"mt-16 text-sm"}," When someone clones your site, they'll load the token, which will check whether the referrer domain is expected. If not, it fires the token and you get an alert. ",-1),w=n({__name:"ActivatedToken",props:{tokenData:{}},setup(t){const o=a(t.tokenData.css||"");return(d,_)=>(c(),r(i,null,[p(s,{"token-snippet":o.value},null,8,["token-snippet"]),l,m],64))}});export{w as default}; diff --git a/frontend_vue/dist/assets/AppLayoutOneColumn-BIpLWwmP.js b/frontend_vue/dist/assets/AppLayoutOneColumn-BIpLWwmP.js new file mode 100644 index 000000000..c60fc230a --- /dev/null +++ b/frontend_vue/dist/assets/AppLayoutOneColumn-BIpLWwmP.js @@ -0,0 +1 @@ +import{k as s,a as o,c as t,m as c}from"./index-Brb5oFbg.js";const n={},a={class:"flex flex-col items-center max-w-[90svw] md:max-w-[80svw] md:mx-[10svw]"};function r(e,m){return o(),t("div",a,[c(e.$slots,"default")])}const _=s(n,[["render",r]]);export{_ as A}; diff --git a/frontend_vue/dist/assets/BannerDeviceCanarytools-BTv-_DW6.js b/frontend_vue/dist/assets/BannerDeviceCanarytools-BTv-_DW6.js new file mode 100644 index 000000000..a28f4bb4a --- /dev/null +++ b/frontend_vue/dist/assets/BannerDeviceCanarytools-BTv-_DW6.js @@ -0,0 +1 @@ +import{k as e,a,c as o,f as s,i as n,j as c,h as r,a1 as i,X as d}from"./index-Brb5oFbg.js";const p={},l={class:"@container"},_={class:"w-full gap-16 p-16 mt-16 rounded-xl banner-bg grid @sm:justify-center @sm:items-center @sm:grid-cols-[2fr_3fr_1fr] @sm:grid-rows-[2fr] @sm:aspect-[4/1] @md:h-[180px] @sm:bg-[position:-200px_-100px,0] @sm:bg-[size:550px,cover] grid-rows-[3fr_1fr] px-16 h-[280px] aspect-[1/2] bg-[position:-250px_0px,0] bg-[size:550px,cover]"},f=i('
#AdvDid you know some of the best security teams in the world run Thinkst Canary?
',2),x={class:"flex self-end justify-end m-w-[0px]"};function h(m,b){const t=d;return a(),o("div",l,[s("div",_,[f,s("div",x,[n(t,{class:"whitespace-nowrap",variant:"text-light","icon-position":"right",icon:"arrow-right",href:"https://canary.tools/",target:"_blank"},{default:c(()=>[r("Find out")]),_:1})])])])}const u=e(p,[["render",h],["__scopeId","data-v-0b4434e8"]]);export{u as B}; diff --git a/frontend_vue/dist/assets/BannerDeviceCanarytools-yls0cA_W.css b/frontend_vue/dist/assets/BannerDeviceCanarytools-yls0cA_W.css new file mode 100644 index 000000000..6714e6c05 --- /dev/null +++ b/frontend_vue/dist/assets/BannerDeviceCanarytools-yls0cA_W.css @@ -0,0 +1 @@ +.banner-bg[data-v-0b4434e8]{background-image:url(/nest/assets/banner_visual-2yUx2Tjd.png),linear-gradient(90deg,#5ee49a -1.7%,#0dab7b);background-repeat:no-repeat}@media screen and (max-width: 761px){.banner-bg[data-v-0b4434e8]{background-image:url(/nest/assets/banner_visual-2yUx2Tjd.png),linear-gradient(90deg,#5ee49a -1.7%,#0dab7b);background-repeat:no-repeat}} diff --git a/frontend_vue/dist/assets/BaseCodeSnippet-BD9YfSrM.css b/frontend_vue/dist/assets/BaseCodeSnippet-BD9YfSrM.css new file mode 100644 index 000000000..1fb23a2c2 --- /dev/null +++ b/frontend_vue/dist/assets/BaseCodeSnippet-BD9YfSrM.css @@ -0,0 +1,10 @@ +@keyframes bounce-34b88550{40%{transform:scale(1.2)}80%{transform:scale(.8)}to{transform:scale(1)}}.fade-enter-active[data-v-34b88550],.fade-leave-active[data-v-34b88550]{animation:bounce-34b88550 .35s}.fade-enter[data-v-34b88550],.fade-leave-to[data-v-34b88550]{transform:scale(1)}@keyframes bounce-79c1aca7{40%{transform:scale(1.2)}80%{transform:scale(.8)}to{transform:scale(1)}}.fade-enter-active[data-v-79c1aca7],.fade-leave-active[data-v-79c1aca7]{animation:bounce-79c1aca7 .35s}.fade-enter[data-v-79c1aca7],.fade-leave-to[data-v-79c1aca7]{transform:scale(1)}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub + Description: Light theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-light + Current colors taken from GitHub's CSS +*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0} diff --git a/frontend_vue/dist/assets/BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js b/frontend_vue/dist/assets/BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js new file mode 100644 index 000000000..c3570f488 --- /dev/null +++ b/frontend_vue/dist/assets/BaseCodeSnippet.vue_vue_type_script_setup_true_lang-CU-pHlQl.js @@ -0,0 +1,4 @@ +import{d as De,a5 as Gt,r as ue,l as vt,a6 as Tt,a2 as St,a as oe,c as _e,i as xe,j as wt,u as Sn,b as we,Z as Ot,e as Se,k as Rt,a7 as Ht,t as Wt,q as Te,a8 as Mn,x as Cn,f as In,M as Yt,a9 as Zt}from"./index-Brb5oFbg.js";const Xt={key:0,class:"fa-sr-only"},Vt=De({__name:"BaseCopyButton",props:{content:{default:""}},setup(n){const e=n,{isSupported:t,copy:s,copied:l}=Gt({content:e.content}),c=ue("Copy to clipboard"),i=ue(!1),a=ue(["hover","focus"]);function r(u){return new Promise(b=>setTimeout(b,u))}async function o(){if(!t)return c.value="Copy not supported";await r(150),a.value=[],i.value=!0,c.value="Copied!",await r(1500),i.value=!1,a.value=["hover","focus"],await r(150),c.value="Copy to clipboard"}function d(){s(e.content),o()}return(u,b)=>{const p=vt("font-awesome-icon"),m=Tt("tooltip");return St((oe(),_e("button",{class:"h-[2rem] w-[2rem] font-semibold text-white rounded-full bg-green hover:bg-green-300 transition duration-100","aria-label":"Copy to clipboard",onClick:d},[xe(Ot,{name:"fade",mode:"out-in"},{default:wt(()=>[Sn(l)?(oe(),we(p,{key:1,"aria-hidden":"true",icon:"check"})):(oe(),we(p,{key:0,"aria-hidden":"true",icon:"copy"}))]),_:1}),Sn(l)?(oe(),_e("span",Xt,"Copied content")):Se("",!0)])),[[m,{content:c.value,shown:i.value,triggers:a.value}]])}}}),Qt=Rt(Vt,[["__scopeId","data-v-34b88550"]]),Jt={key:0,class:"fa-sr-only"},jt=De({__name:"BaseRefreshButton",emits:["refresh-token"],setup(n,{emit:e}){const t=e,s=ue("Refresh token"),l=ue(!1),c=ue(["hover","focus"]);function i(o){return new Promise(d=>setTimeout(d,o))}async function a(){await i(150),c.value=[],l.value=!0,s.value="Refreshed!",await i(1500),l.value=!1,c.value=["hover","focus"],await i(150),s.value="Refresh token"}function r(){a(),t("refresh-token")}return(o,d)=>{const u=vt("font-awesome-icon"),b=Tt("tooltip");return St((oe(),_e("button",{class:"refresh-token h-[2rem] w-[2rem] font-semibold rounded-full bg-white hover:bg-green-50 hover:text-green-500 focus:text-green-500 focus-visible:outline-0 focus:bg-green-100 focus:border-green-200 focus:outline-0 text-green-600 border border-green-200","aria-label":"Refresh token",onClick:r},[xe(Ot,{name:"fade",mode:"out-in"},{default:wt(()=>[l.value?(oe(),we(u,{key:1,"aria-hidden":"true",icon:"check"})):(oe(),we(u,{key:0,"aria-hidden":"true",icon:"rotate-right"}))]),_:1}),l.value?(oe(),_e("span",Jt,"Token Refreshed")):Se("",!0)])),[[b,{content:s.value,shown:l.value,triggers:c.value}]])}}}),ea=Rt(jt,[["__scopeId","data-v-79c1aca7"]]);function At(n){return n instanceof Map?n.clear=n.delete=n.set=function(){throw new Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=function(){throw new Error("set is read-only")}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach(e=>{const t=n[e],s=typeof t;(s==="object"||s==="function")&&!Object.isFrozen(t)&&At(t)}),n}class kn{constructor(e){e.data===void 0&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function Mt(n){return n.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function be(n,...e){const t=Object.create(null);for(const s in n)t[s]=n[s];return e.forEach(function(s){for(const l in s)t[l]=s[l]}),t}const na="",xn=n=>!!n.scope,ta=(n,{prefix:e})=>{if(n.startsWith("language:"))return n.replace("language:","language-");if(n.includes(".")){const t=n.split(".");return[`${e}${t.shift()}`,...t.map((s,l)=>`${s}${"_".repeat(l+1)}`)].join(" ")}return`${e}${n}`};class aa{constructor(e,t){this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=Mt(e)}openNode(e){if(!xn(e))return;const t=ta(e.scope,{prefix:this.classPrefix});this.span(t)}closeNode(e){xn(e)&&(this.buffer+=na)}value(){return this.buffer}span(e){this.buffer+=``}}const Ln=(n={})=>{const e={children:[]};return Object.assign(e,n),e};class wn{constructor(){this.rootNode=Ln(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t=Ln({scope:e});this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return typeof t=="string"?e.addText(t):t.children&&(e.openNode(t),t.children.forEach(s=>this._walk(e,s)),e.closeNode(t)),e}static _collapse(e){typeof e!="string"&&e.children&&(e.children.every(t=>typeof t=="string")?e.children=[e.children.join("")]:e.children.forEach(t=>{wn._collapse(t)}))}}class ra extends wn{constructor(e){super(),this.options=e}addText(e){e!==""&&this.add(e)}startScope(e){this.openNode(e)}endScope(){this.closeNode()}__addSublanguage(e,t){const s=e.root;t&&(s.scope=`language:${t}`),this.add(s)}toHTML(){return new aa(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function Oe(n){return n?typeof n=="string"?n:n.source:null}function Ct(n){return Ee("(?=",n,")")}function ia(n){return Ee("(?:",n,")*")}function sa(n){return Ee("(?:",n,")?")}function Ee(...n){return n.map(t=>Oe(t)).join("")}function oa(n){const e=n[n.length-1];return typeof e=="object"&&e.constructor===Object?(n.splice(n.length-1,1),e):{}}function On(...n){return"("+(oa(n).capture?"":"?:")+n.map(s=>Oe(s)).join("|")+")"}function It(n){return new RegExp(n.toString()+"|").exec("").length-1}function ca(n,e){const t=n&&n.exec(e);return t&&t.index===0}const la=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function Rn(n,{joinWith:e}){let t=0;return n.map(s=>{t+=1;const l=t;let c=Oe(s),i="";for(;c.length>0;){const a=la.exec(c);if(!a){i+=c;break}i+=c.substring(0,a.index),c=c.substring(a.index+a[0].length),a[0][0]==="\\"&&a[1]?i+="\\"+String(Number(a[1])+l):(i+=a[0],a[0]==="("&&t++)}return i}).map(s=>`(${s})`).join(e)}const da=/\b\B/,kt="[a-zA-Z]\\w*",An="[a-zA-Z_]\\w*",xt="\\b\\d+(\\.\\d+)?",Lt="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",Dt="\\b(0b[01]+)",ua="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",ga=(n={})=>{const e=/^#![ ]*\//;return n.binary&&(n.begin=Ee(e,/.*\b/,n.binary,/\b.*/)),be({scope:"meta",begin:e,end:/$/,relevance:0,"on:begin":(t,s)=>{t.index!==0&&s.ignoreMatch()}},n)},Re={begin:"\\\\[\\s\\S]",relevance:0},ba={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[Re]},pa={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[Re]},_a={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},Be=function(n,e,t={}){const s=be({scope:"comment",begin:n,end:e,contains:[]},t);s.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const l=On("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return s.contains.push({begin:Ee(/[ ]+/,"(",l,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s},ma=Be("//","$"),Ea=Be("/\\*","\\*/"),fa=Be("#","$"),ha={scope:"number",begin:xt,relevance:0},Na={scope:"number",begin:Lt,relevance:0},ya={scope:"number",begin:Dt,relevance:0},va={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[Re,{begin:/\[/,end:/\]/,relevance:0,contains:[Re]}]},Ta={scope:"title",begin:kt,relevance:0},Sa={scope:"title",begin:An,relevance:0},wa={begin:"\\.\\s*"+An,relevance:0},Oa=function(n){return Object.assign(n,{"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})};var ke=Object.freeze({__proto__:null,APOS_STRING_MODE:ba,BACKSLASH_ESCAPE:Re,BINARY_NUMBER_MODE:ya,BINARY_NUMBER_RE:Dt,COMMENT:Be,C_BLOCK_COMMENT_MODE:Ea,C_LINE_COMMENT_MODE:ma,C_NUMBER_MODE:Na,C_NUMBER_RE:Lt,END_SAME_AS_BEGIN:Oa,HASH_COMMENT_MODE:fa,IDENT_RE:kt,MATCH_NOTHING_RE:da,METHOD_GUARD:wa,NUMBER_MODE:ha,NUMBER_RE:xt,PHRASAL_WORDS_MODE:_a,QUOTE_STRING_MODE:pa,REGEXP_MODE:va,RE_STARTERS_RE:ua,SHEBANG:ga,TITLE_MODE:Ta,UNDERSCORE_IDENT_RE:An,UNDERSCORE_TITLE_MODE:Sa});function Ra(n,e){n.input[n.index-1]==="."&&e.ignoreMatch()}function Aa(n,e){n.className!==void 0&&(n.scope=n.className,delete n.className)}function Ma(n,e){e&&n.beginKeywords&&(n.begin="\\b("+n.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",n.__beforeBegin=Ra,n.keywords=n.keywords||n.beginKeywords,delete n.beginKeywords,n.relevance===void 0&&(n.relevance=0))}function Ca(n,e){Array.isArray(n.illegal)&&(n.illegal=On(...n.illegal))}function Ia(n,e){if(n.match){if(n.begin||n.end)throw new Error("begin & end are not supported with match");n.begin=n.match,delete n.match}}function ka(n,e){n.relevance===void 0&&(n.relevance=1)}const xa=(n,e)=>{if(!n.beforeMatch)return;if(n.starts)throw new Error("beforeMatch cannot be used with starts");const t=Object.assign({},n);Object.keys(n).forEach(s=>{delete n[s]}),n.keywords=t.keywords,n.begin=Ee(t.beforeMatch,Ct(t.begin)),n.starts={relevance:0,contains:[Object.assign(t,{endsParent:!0})]},n.relevance=0,delete t.beforeMatch},La=["of","and","for","in","not","or","if","then","parent","list","value"],Da="keyword";function Bt(n,e,t=Da){const s=Object.create(null);return typeof n=="string"?l(t,n.split(" ")):Array.isArray(n)?l(t,n):Object.keys(n).forEach(function(c){Object.assign(s,Bt(n[c],e,c))}),s;function l(c,i){e&&(i=i.map(a=>a.toLowerCase())),i.forEach(function(a){const r=a.split("|");s[r[0]]=[c,Ba(r[0],r[1])]})}}function Ba(n,e){return e?Number(e):Ua(n)?0:1}function Ua(n){return La.includes(n.toLowerCase())}const Dn={},me=n=>{console.error(n)},Bn=(n,...e)=>{console.log(`WARN: ${n}`,...e)},Ne=(n,e)=>{Dn[`${n}/${e}`]||(console.log(`Deprecated as of ${n}. ${e}`),Dn[`${n}/${e}`]=!0)},Le=new Error;function Ut(n,e,{key:t}){let s=0;const l=n[t],c={},i={};for(let a=1;a<=e.length;a++)i[a+s]=l[a],c[a+s]=!0,s+=It(e[a-1]);n[t]=i,n[t]._emit=c,n[t]._multi=!0}function Pa(n){if(Array.isArray(n.begin)){if(n.skip||n.excludeBegin||n.returnBegin)throw me("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Le;if(typeof n.beginScope!="object"||n.beginScope===null)throw me("beginScope must be object"),Le;Ut(n,n.begin,{key:"beginScope"}),n.begin=Rn(n.begin,{joinWith:""})}}function Fa(n){if(Array.isArray(n.end)){if(n.skip||n.excludeEnd||n.returnEnd)throw me("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Le;if(typeof n.endScope!="object"||n.endScope===null)throw me("endScope must be object"),Le;Ut(n,n.end,{key:"endScope"}),n.end=Rn(n.end,{joinWith:""})}}function $a(n){n.scope&&typeof n.scope=="object"&&n.scope!==null&&(n.beginScope=n.scope,delete n.scope)}function za(n){$a(n),typeof n.beginScope=="string"&&(n.beginScope={_wrap:n.beginScope}),typeof n.endScope=="string"&&(n.endScope={_wrap:n.endScope}),Pa(n),Fa(n)}function Ka(n){function e(i,a){return new RegExp(Oe(i),"m"+(n.case_insensitive?"i":"")+(n.unicodeRegex?"u":"")+(a?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(a,r){r.position=this.position++,this.matchIndexes[this.matchAt]=r,this.regexes.push([r,a]),this.matchAt+=It(a)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const a=this.regexes.map(r=>r[1]);this.matcherRe=e(Rn(a,{joinWith:"|"}),!0),this.lastIndex=0}exec(a){this.matcherRe.lastIndex=this.lastIndex;const r=this.matcherRe.exec(a);if(!r)return null;const o=r.findIndex((u,b)=>b>0&&u!==void 0),d=this.matchIndexes[o];return r.splice(0,o),Object.assign(r,d)}}class s{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(a){if(this.multiRegexes[a])return this.multiRegexes[a];const r=new t;return this.rules.slice(a).forEach(([o,d])=>r.addRule(o,d)),r.compile(),this.multiRegexes[a]=r,r}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(a,r){this.rules.push([a,r]),r.type==="begin"&&this.count++}exec(a){const r=this.getMatcher(this.regexIndex);r.lastIndex=this.lastIndex;let o=r.exec(a);if(this.resumingScanAtSamePosition()&&!(o&&o.index===this.lastIndex)){const d=this.getMatcher(0);d.lastIndex=this.lastIndex+1,o=d.exec(a)}return o&&(this.regexIndex+=o.position+1,this.regexIndex===this.count&&this.considerAll()),o}}function l(i){const a=new s;return i.contains.forEach(r=>a.addRule(r.begin,{rule:r,type:"begin"})),i.terminatorEnd&&a.addRule(i.terminatorEnd,{type:"end"}),i.illegal&&a.addRule(i.illegal,{type:"illegal"}),a}function c(i,a){const r=i;if(i.isCompiled)return r;[Aa,Ia,za,xa].forEach(d=>d(i,a)),n.compilerExtensions.forEach(d=>d(i,a)),i.__beforeBegin=null,[Ma,Ca,ka].forEach(d=>d(i,a)),i.isCompiled=!0;let o=null;return typeof i.keywords=="object"&&i.keywords.$pattern&&(i.keywords=Object.assign({},i.keywords),o=i.keywords.$pattern,delete i.keywords.$pattern),o=o||/\w+/,i.keywords&&(i.keywords=Bt(i.keywords,n.case_insensitive)),r.keywordPatternRe=e(o,!0),a&&(i.begin||(i.begin=/\B|\b/),r.beginRe=e(r.begin),!i.end&&!i.endsWithParent&&(i.end=/\B|\b/),i.end&&(r.endRe=e(r.end)),r.terminatorEnd=Oe(r.end)||"",i.endsWithParent&&a.terminatorEnd&&(r.terminatorEnd+=(i.end?"|":"")+a.terminatorEnd)),i.illegal&&(r.illegalRe=e(i.illegal)),i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map(function(d){return qa(d==="self"?i:d)})),i.contains.forEach(function(d){c(d,r)}),i.starts&&c(i.starts,a),r.matcher=l(r),r}if(n.compilerExtensions||(n.compilerExtensions=[]),n.contains&&n.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return n.classNameAliases=be(n.classNameAliases||{}),c(n)}function Pt(n){return n?n.endsWithParent||Pt(n.starts):!1}function qa(n){return n.variants&&!n.cachedVariants&&(n.cachedVariants=n.variants.map(function(e){return be(n,{variants:null},e)})),n.cachedVariants?n.cachedVariants:Pt(n)?be(n,{starts:n.starts?be(n.starts):null}):Object.isFrozen(n)?be(n):n}var Ga="11.9.0";class Ha extends Error{constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}const Fe=Mt,Un=be,Pn=Symbol("nomatch"),Wa=7,Ft=function(n){const e=Object.create(null),t=Object.create(null),s=[];let l=!0;const c="Could not find the language '{}', did you forget to load/include a language module?",i={disableAutodetect:!0,name:"Plain text",contains:[]};let a={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:ra};function r(g){return a.noHighlightRe.test(g)}function o(g){let f=g.className+" ";f+=g.parentNode?g.parentNode.className:"";const O=a.languageDetectRe.exec(f);if(O){const k=I(O[1]);return k||(Bn(c.replace("{}",O[1])),Bn("Falling back to no-highlight mode for this block.",g)),k?O[1]:"no-highlight"}return f.split(/\s+/).find(k=>r(k)||I(k))}function d(g,f,O){let k="",U="";typeof f=="object"?(k=g,O=f.ignoreIllegals,U=f.language):(Ne("10.7.0","highlight(lang, code, ...args) has been deprecated."),Ne("10.7.0",`Please use highlight(code, options) instead. +https://github.com/highlightjs/highlight.js/issues/2277`),U=g,k=f),O===void 0&&(O=!0);const Y={code:k,language:U};B("before:highlight",Y);const ne=Y.result?Y.result:u(Y.language,Y.code,O);return ne.code=Y.code,B("after:highlight",ne),ne}function u(g,f,O,k){const U=Object.create(null);function Y(_,y){return _.keywords[y]}function ne(){if(!T.keywords){G.addText(P);return}let _=0;T.keywordPatternRe.lastIndex=0;let y=T.keywordPatternRe.exec(P),S="";for(;y;){S+=P.substring(_,y.index);const x=ae.case_insensitive?y[0].toLowerCase():y[0],X=Y(T,x);if(X){const[se,Ue]=X;if(G.addText(S),S="",U[x]=(U[x]||0)+1,U[x]<=Wa&&(he+=Ue),se.startsWith("_"))S+=y[0];else{const Pe=ae.classNameAliases[se]||se;Z(y[0],Pe)}}else S+=y[0];_=T.keywordPatternRe.lastIndex,y=T.keywordPatternRe.exec(P)}S+=P.substring(_),G.addText(S)}function te(){if(P==="")return;let _=null;if(typeof T.subLanguage=="string"){if(!e[T.subLanguage]){G.addText(P);return}_=u(T.subLanguage,P,!0,Ce[T.subLanguage]),Ce[T.subLanguage]=_._top}else _=p(P,T.subLanguage.length?T.subLanguage:null);T.relevance>0&&(he+=_.relevance),G.__addSublanguage(_._emitter,_.language)}function z(){T.subLanguage!=null?te():ne(),P=""}function Z(_,y){_!==""&&(G.startScope(y),G.addText(_),G.endScope())}function q(_,y){let S=1;const x=y.length-1;for(;S<=x;){if(!_._emit[S]){S++;continue}const X=ae.classNameAliases[_[S]]||_[S],se=y[S];X?Z(se,X):(P=se,ne(),P=""),S++}}function K(_,y){return _.scope&&typeof _.scope=="string"&&G.openNode(ae.classNameAliases[_.scope]||_.scope),_.beginScope&&(_.beginScope._wrap?(Z(P,ae.classNameAliases[_.beginScope._wrap]||_.beginScope._wrap),P=""):_.beginScope._multi&&(q(_.beginScope,y),P="")),T=Object.create(_,{parent:{value:T}}),T}function Q(_,y,S){let x=ca(_.endRe,S);if(x){if(_["on:end"]){const X=new kn(_);_["on:end"](y,X),X.isMatchIgnored&&(x=!1)}if(x){for(;_.endsParent&&_.parent;)_=_.parent;return _}}if(_.endsWithParent)return Q(_.parent,y,S)}function j(_){return T.matcher.regexIndex===0?(P+=_[0],1):(le=!0,0)}function ee(_){const y=_[0],S=_.rule,x=new kn(S),X=[S.__beforeBegin,S["on:begin"]];for(const se of X)if(se&&(se(_,x),x.isMatchIgnored))return j(y);return S.skip?P+=y:(S.excludeBegin&&(P+=y),z(),!S.returnBegin&&!S.excludeBegin&&(P=y)),K(S,_),S.returnBegin?0:y.length}function ie(_){const y=_[0],S=f.substring(_.index),x=Q(T,_,S);if(!x)return Pn;const X=T;T.endScope&&T.endScope._wrap?(z(),Z(y,T.endScope._wrap)):T.endScope&&T.endScope._multi?(z(),q(T.endScope,_)):X.skip?P+=y:(X.returnEnd||X.excludeEnd||(P+=y),z(),X.excludeEnd&&(P=y));do T.scope&&G.closeNode(),!T.skip&&!T.subLanguage&&(he+=T.relevance),T=T.parent;while(T!==x.parent);return x.starts&&K(x.starts,_),X.returnEnd?0:y.length}function ce(){const _=[];for(let y=T;y!==ae;y=y.parent)y.scope&&_.unshift(y.scope);_.forEach(y=>G.openNode(y))}let pe={};function Ae(_,y){const S=y&&y[0];if(P+=_,S==null)return z(),0;if(pe.type==="begin"&&y.type==="end"&&pe.index===y.index&&S===""){if(P+=f.slice(y.index,y.index+1),!l){const x=new Error(`0 width match regex (${g})`);throw x.languageName=g,x.badRule=pe.rule,x}return 1}if(pe=y,y.type==="begin")return ee(y);if(y.type==="illegal"&&!O){const x=new Error('Illegal lexeme "'+S+'" for mode "'+(T.scope||"